Merb 0.9

Jako że Ezra na swoim blogu zapowiedział, że rozwój Merba zostaje skierowany w stronę 1.0, a następną stabilną wersją będzie 0.9 (w tej chwili dev, ezra miał ją zaprezentować na acts_as_conference, ale nie wiem czy zdążyli). W każdym razie nie ma jej jeszcze w gemach, można sobie zainstalować z repozytorium gita. Zmian jest sporo (m.in. zniknął cały katalog script, zastąpiony przez generatory z paczki merb-more) - dla ciekawskich i totalnie początkujących w temacie Ruby, Rails, Merb itp. step-by-step walkthrough pt. “Jak zainstalować Merb w wersji ‘bleeding edge’ z gita”

Git

Zakładam, że większość developerów zainteresowanych Ruby, Railsami i tym podobnymi wynalazkami ma już git zainstalowany na swoich maszynach. Jeśli nie, należy zrobić to jak najszybciej, lub — jak to napisał Justin na has_many :thoughts, EPIC FAIL! ;)

Dla użytkowników Ubuntu (takich jak ja):

$ sudo apt-get install git-core git-svn

Paczki i klonowanie

Merb ma trochę zależności, które trzeba zainstalować. W tym celu wykonujemy polecenie:

$ sudo gem install mongrel json json_pure erubis mime-types rspec hpricot mocha rubigen haml markaby mailfactory Ruby2Ruby data_objects do_sqlite3 do_mysql -y

UWAGA: do_mysql na razie *nie* działa pod systemami Windows. Koniec, kropka. Jak naprawią, zrobię update.

Paczki mamy, czas pobawić się w domorosłych genetyków i sklonować repo Merba, coby mieć zawsze dostęp do świeżego mięska z merb-core i merb-more. W tym celu odpalamy kolejno:

$ sudo git clone git://github.com/wycats/merb-core.git
$ sudo git clone git://github.com/wycats/merb-more.git
$ sudo git clone git://github.com/wycats/merb-plugins.git

Pora zainstalować klony. W tym celu w katalogach merb-core, merb-more oraz merb-plugins/merb_helpers i merb-plugins/merb_datamapper (te dwa ostatnie nie są wymagane, jednak przydatne. Jeśli chcesz używać np. ActiveRecord zamiast DataMappera, odpuść ostatni i zainstaluj zamiast niego merb-plugins/merb_activerecord. Nie mniej jednak ja DataMappera lubię, więc zainstalowałem ;))

$ sudo rake install

Najnowszy DataMapper

Oczywiście krok ten jest opcjonalny, jako że Merb jest absolutnie nie związany z żadnym ORMem (i chwała mu za to!), możesz więc na własne potrzeby zainstalować ActiveRecord, Sequela czy co tam sobie chcesz. Ja jednak DataMappera uważam za całkiem przyjemny ORM i z niego przyjdzie mi pewnie korzystać w większości projektów. Pociągamy więc nowego DataMappera z SVN:

$ sudo svn co http://datamapper.rubyforge.org/svn/trunk/ datamapper

W nowo utworzonym katalogu datamapper odpalamy

$ sudo rake install

Voila, śmiga. Pozostaje tylko sprawdzić działanie naszego nowego nabytku. W tym celu utworzymy przykładowy projekt, nazwany w moim przypadku lorem_ipsum (nigdy nie byłem dobry w wymyślaniu placeholderów) przez wydanie polecenia:

$ merb-gen lorem_ipsum

I cieszymy się nową zabawką. Zainteresowanych tutorialami do Merba odsyłam do Merbcasta, a sam wracam do eksplorowania zmian we frameworku. Stay tuned! ;)

DataMapper z gema i sesje

No i napotkałem na pierwszy problem związany z merbem. Jako że piszę swój mały, wewnętrzny projekt, korzystam z use_orm :datamapper. Niestety wersja pakietu merb_datamapper z gema (0.2.5) ma buga w sesjach — jeśli używasz sesji przechowywanych w bazie, a nie utworzyłeś(aś?) wcześniej tabeli dla sesji, prawdopodobnie napotkasz na taki oto komunikat

MySQL error: ERROR 1170 (42000): BLOB/TEXT column 'session_id' used in key specification without a key length

Problem wynika z faktu, że property session_id ma ustawiony typ :text, zamiast :string, co powoduje wywalanie się bazy przy próbie wygenerowania z niej klucza głównego dla tabeli. Aby to zmienić, otwieramy plik /var/lib/gems/1.8/merb_datamapper/lib/merb/sessions/data_mapper_session.rb, znajdujemy w nim string

property :session_id, :text, :lazy => false, :key => true

i zmieniamy go na

property :session_id, :string, :key => true

Voila!

UPDATE: W Tracu do merba dostępny jest patch, który naprawia wyżej wymieniony problem.

Second Brain: Revolutions

Chłopaki od Second Braina, startupu, nad którym pracowałem dłuższą chwilę podczas pracy w poprzedniej firmie, wypuścili betę nowej wersji. Widać spory skok w stosunku do poprzedniej opublikowanej wersji i wydaje mi się, że w końcu udało im się sprecyzować target i zadania stawiane przed serwisem.

Jak to działa

Sama idea wydaje mi się bardzo światła. W skrócie — używasz wielu różnych serwisów web (zdjęcia na Flickr i Picasie, zakładki na del.icio.us, filmy na YouTube, prezentacje na Slideshare…) i nadążanie za contentem Twoim i Twoich znajomych zaczyna się robić kłopotliwe? Tu zaczyna się misja S|B — serwis agreguje Twój content z różnych serwisów z założeniem, że wszystko jest przechowywane jako referencje do contentu, natomiast fizyczne pliki znajdują się po stronie serwisów, które podłączasz. Pozwala to na łatwiejsze ogarnięcie tego, co się dzieje, co się zmienia i znacznie ułatwia organizację contentu przez mechanizm tzw. smart kolekcji (”wrzucaj cały content otagowany jako design do kolekcji Design) oraz kolekcji ręcznych, działających na zasadzie “weź dwie zakładki, trzy zdjęcia i dwa filmy, po czym wrzuć je do kolekcji Wakacje).

Jak się tam dostać?

Żeby dostać zaproszenie do testowania wersji beta serwisu, wystarczy poprosić o nie Larsa w komentarzu na oficjalnym blogu projektu. Zaproszenie zostanie wysłane mailem.
Z doświadczenia w pracy nad tym projektem mogę wam jedynie powiedzieć, że Lars reaguje szybko zarówno na chęć testowania jak na zgłaszane bugi i sugestie, a praca developerów do najłatwiejszych nie należy, szczególnie że team jest niewielki.

Miłej zabawy!

jQuery 1.2.3

Wyszło jQuery 1.2.3. O najważniejszych zmianach możecie sobie przeczytać w zlinkowanym poście, więc nie będę się powtarzać — powiem tylko, że release jest zgodny z Adobe AIR, ulepszony został nieznacznie (a równocześnie dość istotnie) namespacing eventów, dodano parę drobnych fixów i przy okazji wypuszczono jQuery UI w wersji 1.5 (Alpha) oraz bibliotekę z zaawansowanymi efektami graficznymi jQuery Enchant w wersji 1.0 (Alpha).

Biblioteka nadal zajmuje 15kB w wersji minified+gzipped, 29kB w wersji spakowanej (bez UI i Enchanta), co jest też sporym atutem.

Pobrać nową wersję można tradycyjnie ze strony, lub przez SVN:

svn co http://jqueryjs.googlecode.com/svn/tags/1.2.3

Merb, Utype i sprawy drobniejsze…

Tak, ten blog leżał odłogiem od dłuższego czasu, nie mniej jednak postanowiłem, że najwyższa pora go nieco “odkurzyć” i napisać krótki post, co to ostatnio w moim życiu się dzieje. ;)

Merb

Merb, framework konkurencyjny dla Ruby on Rails, zdobywa coraz większą rzeszę zwolenników. Jako że sam zainteresowałem się jakiś czas temu tym frameworkiem, postanowiłem tu od czasu do czasu skrobnąć jakiś prosty tutorial jeśli tylko czas na to pozwoli. Pytanie brzmi — czy ktokolwiek z moich czytelników (są li jeszcze tacy?) jest zainteresowany tym tematem? Jak na razie z tego, co zdążyłem się zorientować po polsku o Merbie wspomniał tu i ówdzie Jarosław Zabiełło, więc temat jest w miarę mało popularny — a szkoda, bo uważam, że warto.

uType

Właśnie. Przy okazji nauki Merba, odpaliliśmy ze znajomymi projekt pod tytułem uType — engine blogowy mający być (w przeciwieństwie to takich, wyjątkowo nieużytecznych moim zdaniem wynalazków jak railsowe Typo lub Mephisto) zorientowany na użytkownika, a równocześnie (w przeciwieństwie do Wordpressa) łatwy w rozbudowie, chociażby z tego powodu, że przegryzanie się przez strukturę Merbowych aplikacji jest znacznie łatwiejsze niż przez spaghetti code, który funduje nam Wordpress. Jeśli ktoś chciałby się przyłączyć do rozwoju projektu, a przy okazji podszkolić swoje umiejętności merbowe, wystarczy skontaktować się ze mną np. na Jabberze w celu poznania detali takich jak dostęp do kodu źródłowego. Docelowo projekt ma być open source’owy na licencji MIT, gdy ukaże się jakaś pierwsza w miarę stabilna wersja, odpalimy serwis i udostępnimy repozytorium szerszemu gronu zainteresowanych. Na razie projekt jest w fazie closed pre-alpha, nie mniej jednak zapraszamy do współpracy. ;)