Archive for the 'Rails' Category

Lepsza konsola w railsach

niedziela, wrzesień 2nd, 2007 by Paweł Rutkowski

Na pewno większość z Was wie, że RubyOnRails jest wyposażone w tekstową konsolę (./script/console). Po jej uruchomieniu zostaje załadowane środowisko rails a użytkownik dostaje konsolę, na której może interaktywnie wykonywać kod rubiego. Przydaje się to debugowania aplikacji, ręcznego modyfikowania danych czy prostego (i szybkiego) prototypowania.

Aby uczynić pracę z konsolą wygodniejszą, powstał “gem” o nazwie “wirble“. Rozszerza on funkcjonalnosc konsoli o kolorowanie składni oraz stałą historię poleceń (oryginalna konsola posiadała historię tylko w obrębie jednej sesji - po wyjściu z niej nie była zapamiętywana)

Note: akurat historia poleceń nie zawdzięczamy samemu wirble - natywna konsola posiada tą opcję, a wirble dokonuje tylko jej aktywizacji

Instalacja gemu jak zwykle standardowo:


gem install wirble

Przykładowy plik konfiguracyjny ~/.irbrc


1 require 'rubygems'
2 require 'wirble'
3 Wirble.init
4 Wirble.colorize
5 IRB.conf[:AUTO_INDENT] = true
6 IRB.conf[:IRB_RC] = proc do |conf|
7 leader = " " * conf.irb_name.length
8 conf.prompt_i = "#{conf.irb_name} > "
9 conf.prompt_s = leader + ' \" '
10 conf.prompt_c = leader + ' \+ '
11 conf.return_format = leader + " ==> %s\n\n"
12 puts "Welcome to better IRB!"
13 end

PS: plik .irbrc jest normalnym skryptem rubiego, więc można tam umieścić normalny kod - co zresztą widać po lini 12.

Prezentacja z FreeCONa - RubyOnRails Hosting aplikacji w porównaniu z PHP

wtorek, kwiecień 24th, 2007 by Paweł Rutkowski

W dniach 21-22 Kwietnia 2007 odbyła się druga edycja konferencji FreeCON. Podobnie jak poprzednio miejscem konferencji byl Wroclaw ktory ostatnio mocno sie rozwija pod katem biznes IT. Wyklady ciekawe, ale jak zawsze najciekawsze były dyskusje w przerwach oraz afterparty :)

Zgodnie z tradycją zamiescilem prezentacje z konferencji FreeCON 2007 - jak zwykle dostepna w dziale prezentacje.

Wykład na FreeCON 2007

piątek, marzec 16th, 2007 by Paweł Rutkowski

21-22 kwietnia 2007 odbędzie się konferencja FreeCON. Będę miał przyjemność opowiedzieć na niej o hostingu aplikacji RoR i jak to wygląda w porównaniu do PHP. Jak zwykle materiały z konferencji pojawią się w dziale prezentacje. Zapraszam.

Czym są szablony HAML ?

piątek, styczeń 19th, 2007 by Paweł Rutkowski

Razem z pojawieniem się nowych railsów o których pisałem w poprzednim poście, pojawiła się także informacja o nowym “formacie” templatów - “Haml”. Generalnie jest to nowy meta-język doskonale wpisujący się w ideologię railsów - DRY i Simplifying - upraszczania.

Odrazu przejdę do przykładu, żeby nie trzymać Was w niepewności. Oto jakby wyglądał kod w standardowym RHTMLu:


<table id="userdata">
<tr>
<td class="label"> Dane użytkownika </td>
<td> <%= @user.name %> </td>
<td> <%= @user.surname %> </td>
</tr>
</table>

Krótkie wyjaśnienie dla osób nie znających szablonów Erb (używanych w RHTMLu). Znacznik <= służy do wykonania kodu ruby i wstawienia wyniku w dane miejsce. Jak widać mamy tabelke z jakimś id i jeden z znaczników <td> ma ustawioną klase “label”. Jak by zatem wyglądał powyższy kod w Hamlu. Moim zdaniem znacznie przyjemniej:


table#userdata
%tr
%td.label Dane użytkownika
%td= @user.name
%td= @user.surname

Dzięki temu skracamy kod i czas jego pisania o mniej więcej połowę (nie trzeba zamykać znaczników). Ponieważ Haml został stworzony z myślą o XHTMLu/XMLu, kod przez niego wygenerowany będzie spełniał założenia tego formatu. Drugą rzeczą która mi się bardzo spodobała to selektory zgodne z formatu CSS - bardzo to ułatwia zapamiętanie składni. Trzecia rzecz - znak “równa się” odrazu uwidacznia podstawienie efektu wykonania kodu w Ruby.

Uproszczono także wstawianie dowolnych atrybutów do kodu - co jest niezwykle ważne w przypadku generowania XMLa:


%person { :name => "Pawel", :surname => @user.surname }
%children/

Powyższy kod zostanie przekształcony na:


<person name="Pawel" surname="Rutkowski" >
<children/>
</person>

Jak widać na powyższym przykładzie dodawanie atrybutów jest bardzo proste i można w nich używać wyrażeń języka. W RHTMLu powyższy szablon wygłądał by tak:


<person name="Pawel" surname="<%= @user.name %>" >
<children/>
</person>

Zagnieżdżanie kodu Ruby wewnątrz tagów zawsze mnie irytowało ze względu na mała czytelność takiego kodu. Natomiast w tym rozwiązaniu wygląda to świetnie.

To jest mała porcja tego co potrafi Haml. Dokumentacja jest obszerna i dość długa - jeszcze nie zapoznałem się z jej całą treścią. Haml jest dostępny dla Rubego w postaci gemów, zaś dla railsów na razie w w postaci pluginu który można pobrać stąd:


./script/plugin install svn://hamptoncatlin.com/haml/tags/stable

Niestety nie miałem jeszcze czasu na przepisanie którejś z aplikacji na te szablony i porównania czasów generowania i ogólnej wydajności, ale jak tylko to zrobię na pewno opublikuję

Strona projektu Haml (razem z dokumentacją i tutorialem) - tutaj

A na koniec jeszcze przykładowa strona w Hamlu :)


!!!
%html
%head
%title= controller.controller_name
= stylesheet_link_tag 'main'
%body
#header
%h1 BoBlog
#content= yield
#footer
%p All content copyright © Bob

Czyż to nie jest piękne ?:)

Rails 1.2.1

piątek, styczeń 19th, 2007 by Paweł Rutkowski

Wszyscy o tym trąbią, więc ja tylko ograniczę się do stwierdzenia “są nowe rails w wersji 1.2.1″. Oficjalna wiadomość tutaj

Prezentacja “Plug me in” - o pluginach słów kilka

niedziela, styczeń 14th, 2007 by Paweł Rutkowski

W sobotę obyło się kolejne spotkanie z cyklu RoR PL. Miałem przyjemność poprowadzić prezentację należącą do technicznej części tego spotkania. Temat był trudny zarówno do przedstawienia, jak i w odbiorze przez osoby nie obeznane z programowaniem obiektowym - ale mam nadzieję że udało mi się przybliżyć Wam aspekty omówione podczas prezentacji.

Jak zwykle po prezentacji, udostępniam materiały tutaj.

Spotkanie użytkownikow RubyOnRails i prezentacja

niedziela, lipiec 16th, 2006 by Paweł Rutkowski

Zgodnie z tym co pisałem wcześniej, owe spotkanie się odbyło. Chyba wszyscy byli zaskoczeniu dużą liczbą osób przybyłych na spotkanie. Ja niestety mogłem tam gościć ok 1h. Po krótkim wstępie Tomka Meki miałem przyjemność wygłosić prezentacje pod tytułem “RubyOnRails i problemy z hostingiem aplikacji“. Jako wykład “inauguracyjny” stała się zalążkiem zaciekłych dyskusji - co prawda na tematy “około railsowe”, ale mam nadzieje że poźniej się uczestnicy ukierunkowali.

Kolejne spotkanie jest zaplanowane na 18 sierpnia 2006 - prawdopodobnie w tym samym miejscu.

Pierwsze spotkanie polskiej grupy użytkowników Ruby On Rails

czwartek, czerwiec 29th, 2006 by Paweł Rutkowski

14 lipca 2006 roku w sali konferencyjnej firmy Sec-Bos (i dzięki jej uprzejmości zarazem) przy ulicy Łowickiej 39A w Warszawie o godzinie 1800 odbędzie się pierwsze spotkanie polskich użytkowników Ruby On Rails. Zapraszamy wszystkich zainteresowanych - zaawansowany, początkujących oraz osoby chcące dowiedzieć się co nieco o tym frameworku.

W programie przewidujemy:

  • Paweł Rutkowski - “RubyOnRails i problemy z hostingiem aplikacji”
  • Tomasz Meka - “Prototype i script.aculo.us”
  • Dyskusja na temat projektu stworzenia funkcjonalnego forum w RubyOnRails

RubyOnRails i problemy z dziedziczeniem.

środa, czerwiec 21st, 2006 by Paweł Rutkowski

Bawiąc się ostatnio z RubyOnRails podczas pisania pewnego projektu trafiłem na bardzo dziwną przypadłość.

RubyOnRails jest wyposażony w mechanizm o nazwie ActiveRecord który jest odpowiedzialny za mapowanie obiektów użytkownika do bazy danych, ich wyszukiwanie, kasowanie, tworzenie i modyfikowanie.

Wśród wielu właściwości ActiveRecord umożliwia dziedziczenie obiektów z bazy danych. Przykładowo mamy obiekt Klient na bazie którego są zbudowane dwa inne obiekty: KlientKorporacyjny oraz KlientIndywidualny. Ponieważ większość baz danych nie jest w stanie obsłużyć czegoś takiego wprost, ActiveRecord musi wykonać troche “magii” żeby to zadziałało. Używa do specjalnej kolumny (domyślnie “type”) w której przechowuje nazwe klasy do której należy obiekt.

Dodatkową funkcjonalnością udostępnioną przez powyższy mechanizm, jest automatyczne dopisywanie:


where type='KlientKorporacyjny'

do SQL generowanego przez funkcję find. Oczywiście w momencie utworzenia nowego rekordu, jego typ także zostanie odpowiednio ustawiony.

Skuszony takimi oto urokami skorzystałem z takiego mechanizmu. Stworzyłem sobie następujące klasy:


class Category < ActiveRecord::Base
validates_uniqueness_of :name, :scope => :type
end
class ContentCategory < Category end
class WorkshopCategory < Category end

No i niestety przy próbie dodania czy zmodyfikowania rekordu pojawił się Exception. Po chwili grzebania doszedłem do tego że winny jest scope => :type. Nie wiem czym to jest spowodowane, ale type nie może być brany pod uwagę jako scope. Rozwiązaniem (mało eleganckim) okazało się dodanie nowej kolumny do Category o nazwie scope_helper i ustawianiu jej nazwy przez before_save.

Generalnie pomogło, natomiast pojawił się nowy problem. Chciałem dodać możliwość zmiany rodzaju kategorii z Workshop na Content i odwrotnie. Niestety przy tej konfiguracji poległem. Nie udało mi się w żaden sposób zmusić ActiveRecord do wykonania tej operacji. Po kilku godzinach walki dałem sobie spokój. Wyrzuciłem WorkshopCategory i ContentCategory, zastąpiłem je samym Category do którego dodałem kolumnę mytype które ustawiam ręcznie.

RubyOnRails ma wiele zalet i wygodnych rozwiązań - niestety czasem, kiedy chce się je wykorzystać trafia się na ograniczenia które mogą skutecznie zabrać pare godzin z harmonogramu.

Ciekaw jestem czy ktoś z Was także “wpadł” w jakąś pułapkę railsową ?

Grupa dyskusyjna pl.comp.lang.ruby - CFV

niedziela, czerwiec 4th, 2006 by Paweł Rutkowski

Rozpoczeło się głosowanie za utworzeniem grupy dyskusyjnej pl.comp.lang.ruby . Oprócz samego Ruby, grupa dopuszcza tematykę RubyOnRails. Osoby które chcą zagłosować za ( nie biore pod uwagę że ktoś zagłosuje przeciw:) znajdą dokładną instrukcję tutuaj

Mam nadzieję że grupa powstanie - uważam że czytanie postów w ulubionym czytniku jest o wiele wygodniejsze niż na jakimkolwiek forum.