Friday, November 06, 2009

Szukając astystenta/asystentki

Szukałem ostatnio asystenta/asystentki z jasno określonymi umiejętnościami. Osoby, które się nie kwalifikowały otrzymały wyczerpujące informacje dlaczego ich aplikacja nie została przyjęta. Nie każdy umiał się z tym pogodzić:

Dziękuję za maila z informacją o wynikach kwalifikacji. Natomiast co do drugiej części wiadomości nie mogę sie zgodzić z Panią. Po pierwsze w wymaganiach wymieniony był jedynie MS Office. Po drugie jeżeli używacie Państwo w firmie programy Open Office to robicie to nielegalnie, ponieważ jest to oprogramowanie do użytku domowego. Po trzecie aplikacja Google Docs jest do obsługi poczty google a każda szanująca się firma używa własnych kont pocztowych.

Życie jest wesołe :)

Monday, August 31, 2009

Upgrading to Snow Leopard

Upgrading was smooth on Mac OS X side. There were however several things I had to deal with:

MacPorts upgrade

I had to delete all ports, install newest version of MacPorts and install required ports back. In the end it was a good opportunity to cleanup stale ports

Gems Update

All gems with binary extensions required upgrading

Selenium Problems

It seems selenium is unable to start Firefox with additional parameters, it was dying with:


dyld: Library not loaded: /usr/lib/libsqlite3.dylib
  Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security
  Reason: Incompatible library version: Security requires version 9.0.0 or later, but libsqlite3.dylib provides version 1.0.0

I have found solution on Firefox support group. I needed to delete sqlite library from Firefox bundle and replace it with system one.

Sunday, June 07, 2009

My Hardest Lesson

I’m developer first. I write code. This is what I love.

This blog post is however about something different. It’s about a thing I am doing in parallel. It does not take too much of my time, and yet is the thing I am the most proud of: people management. And about hardest lesson I learned:

People management is just communication

Being a good manager is about asking right questions. You ask customer (your boss, higher-up manager):

  • What do you need?
  • Why do you need that?
  • What are your priorities?
  • Is this new thing more important than what we are doing right now?

You get answers and tell them to your developers:

  • Our customer needs this:…
  • The rationale behind this is:…
  • Current priorities are:…

Now it’s time to ask developers:

  • What is your opinion on this? Do you have better idea?
  • Are you willing to do that?
  • How long will it take?
  • Do you have enough free time?

Then you go back with those answers to customer. There is little more to managing people, mostly trust and teaching.

Full control is overrated.

Tuesday, March 24, 2009

Aspects in Ioke

My recent hobby project (dnd - a console-based TODO list) is written in Ioke. I am surprised how easy is to learn Ioke and how fast it is possible to achieve great results in this language. The problem is that it's so powerful, it's easy to get out of chosen path and end up in bushes without even noticing.

This problem is especially important now, when I'm exploring the language - and most of the code I write changes too fast to be easily harnessed by tests. Without tests in the picture I must rely on simple println to actually see where I'm going.

Adding print statements throughout the code is boring and cumbersome and I'm a lazy person. Ioke has great support for aspects so why not use that?

The best way to see where the program is going is to inspect what cells are called and what do they return. Ioke provides pointcuts for those two events, you can create and add methods to them using before and after methods available on all objects.

When you want to log method call you write something similar to:


object before(matching: :anyFromSelf) << macro("called #{call receiver}:#{call message name}(#{call arguments})" println)

Similar, when you want to log method's return you use after


object after(matching: :anyFromSelf) << macro("returned #{aspectResult asText}" println)

This is all nice but a more useful thing is an Object that wraps everything nicely and provides simple call graph:


CallInspector = Origin mimic do(
  nesting = 0

  entering = lecrox(
    "#{"| " * nesting}+called #{call receiver}:#{call message name}(#{call arguments})" println
    nesting ++
  )

  leaving = lecrox(
    nesting --
    "#{"| " * nesting}\\returned #{aspectResult asText truncate}" println
  )
  
  instrument = method(+objects,
    objects each(object,
      object before(matching: :anyFromSelf) << entering
      object after(matching: :anyFromSelf) << leaving
    )
  )
)

You can use it in your code with:


CallInspector instrument(YourObject, AndAnother)

The most recent version of CallInspector is available on gist.

Tuesday, February 17, 2009

Praca: Programista Ruby on Rails

Poszukujemy doświadczonego programisty Ruby on Rails.

Wymagamy doskonałej znajomości

  • Ruby oraz Ruby on Rails,
  • języka angielskiego,
  • BDD (ew. TDD)
  • git,
  • semantycznego XHTML,
  • Linux/Unix

Mile widziane

  • znajomość CSS
  • znajomość Haml
  • doświadczenie w projektach Open Source, najchętniej bazujących na RoR

Warunki zatrudnienia

  • faktura lub umowa zlecenia
  • dowolne godziny pracy
  • profesjonalny zespół
  • praca zdalna
  • wymagamy ok. 160h pracy w miesiącu

Płaca

Do negocjacji, zależna od umiejętności, pomiędzy 30 a 50 PLN/h

Rekrutacja

Napisz krótki e-mail i dołącz CV (wraz z odpowiednią klauzulą, patrz niżej)

Podstawą do rozmowy będzie jakość kodu. Przygotuj próbki swojego kodu wraz z testami. Najlepiej jeśli będzie to opublikowany kod OSS. Jeśli nie posiadasz takiego, wybierz istniejący projekt OSS bazujący na Ruby/RSpec. W nim zaimplementuj nową funkcjonlaność lub popraw istniejący błąd w oparciu o BDD.

Chętnie pomożemy Ci zarówno w wyborze projektu jak i konkretnego sposobu rozwiązania problemu.

CV powinno zawierać klauzulę: Wyrażam zgodę na przetwarzanie moich danych osobowych zawartych w mojej ofercie pracy dla potrzeb niezbędnych do realizacji procesu rekrutacji zgodnie z Ustawą z dnia 29.08.1997r. o ochronie danych osobowych

Kontakt

  • email: rekrutacja@ragnarson.com
  • jabber: bragi@ragnarson.com