Imanel: Pingwin w sieci

Buty z rubinem

Ostatnimi czasy pracując nad moją pracą inżynierską zacząłem się zastanawiać nad wyborem języka oraz czegoś sensownego do zrobienia interfejsu graficznego. Oczywiście pierwszą rzeczą która przyszła mi na myśl było C++ oraz QT, ale już po chwili stwierdziłem że zamiast iść na łatwiznę czas poznać coś nowego. Jako że aktualnie pracuję z Ruby więc zacząłem się zastanawiać czy nie ma jakiś sensownych bindingów dla tego języka. Poszukałem, znalazłem i stwierdziłem że to nie to. Niby fajne, niby działa, ale jakoś do mnie nie przemawia – za mało “ruby-way”, a do tego mnóstwo zabawy żeby działało u potencjalnego użytkownika(chociaż to już raczej wina samego rubiego niż QT). Poszukałem więc trochę dłużej i znalazłem jeszcze parę alternatyw – mnie lub bardziej pasujących do wymagań(ma być między-systemowe, działać OOTB i mieć jako-taką wydajność). Skończyło się na czymś spełniającym dwa pierwsze założenia i w akceptujący sposób trzecie – a mianowicie na Ruby Shoes.

Po wyborze czas na test – czyli nasze ukochane “hello world”. Szybka instalacja binarki dla OS X i parę linijek kodu później wielkie WOW i szybki test na maszynie wirtualnej pod Win oraz Ubuntu – wszystko działa tak jak miało. Zachwycony biorę się więc do roboty. Muszę przyznać że wszystko działa tak jak trzeba i pod każdym systemem. Do tego dochodzi generowanie pliku wykonywalnego z dołączonym Ruby Shoes więc żadne dodatkowe zależności nie są potrzebne – wszystko działa od razu, sprawnie i bez tricków specyficznych dla danego systemu. Tak więc cudo :)

Schody zaczęły się niestety kiedy potrzebowałem dołączyć do zależności jakieś gemy. Po testach paru wydawało mi się że wszystko będzie ok – w końcu sam instaluje gemy z sieci i jest gites. Problem jest w momencie kiedy potrzebujemy gema z rozszerzeniami natywnymi – tutaj niestety potrzebny jest kompilator, a RubyGems nie jest dostatecznie zaawansowane żeby powiedzieć dokładnie czego potrzebuje. Ale od czego jest readme – umieści się i to. Prawdziwy problem zaczął się jednak przy próbie dołączenia RMagick. Otóż po paru godzinach prób, googlowania i czytania słownie setek możliwych rozwiązań stwierdziłem że jestem w tej wąskiej grupie gdzie nawet najwięksi wyjadacze rozkładają ręce i mówią że pod Snow Leopard nie działa i nie wiadomo dlaczego. Bo w końcu wszystko się kompiluje, uruchamia itd, ale przy próbie wywołania dowolnej funkcji wywala że istniejący bundle nie istnieje i figa. Cóż – z pomocą przyszedł wysłużony VirtualBox i teraz pracuję na 2 ekrany – na jednym OS X z kodem, a na drugim Ubuntu z testami. Można? Można – potem się będę zastanawiał co mogę zrobić żeby działało na wszystkich 3 systemach – może niedługo wyjdzie patch naprawiający tą usterkę? Zobaczymy.

Na zakończenie krótkie podsumowanie. Jeśli potrzebujecie przenośnego frameworka dla aplikacji w Ruby to Shoes jest dla was – działa na każdym systemie, buduje binarki z samym sobą oraz automatycznie ściąga dołączone gemy. Wydajność stoi na przyzwoitym poziomie, łatwość i przyjemność programowania to jakieś 8/10 a i społeczność jest całkiem przyzwoita. Jedyny problem(poza natywnymi rozszerzeniami) to kulejąca trochę dokumentacja – połowy funkcji nie ma w plikach RDoc więc trzeba szukać na własną rękę albo w manualu(co prawda tam powinno się szukać w pierwszej kolejności, ale jak wielu użytkowników Ruby przyzwyczaiłem się do pewnych standardów;) Ale zapewniam że da się to przeboleć i wtedy dość szybko można docenić pracę autora.

Możesz śledzić odpowiedzi do tego wpisu poprzez RSS 2.0.