My Shiny Weblog!

programming, photography and lifestyle

Две седмици на релси с Malline и ActiveScaffold

Преди около месец ми поставиха задача да създам сайт за продажба на недвижими имоти. Това ме хвърли в дълбок размисъл, защото от години не се бях занимавал с програмиране на сериозни web-базирани приложения. Тъй като съм голям фен на Qt реших, че би било много хубаво, ако мога да използвам някаква подобна технология за създаването на този сайт. След няколко търсения в google на тази тема, попаднах на това. Като изключим, че е базирана на STL и Boost (и двете не ми харесват особено), библиотеката ми се стори доста добра, а и има доста идей от Qt вътре. Бях решил да я ползвам. На второ четене обаче се оказа, че вътре има прекалено много XML и прекалено много код на C++ за сравнително прости неща. Освен това клиентката реши да смени няколко концепции, още преди да съм започнал работа, което е нещо типично при правенето на подобни системи. Реших, че ще си вкарам таралеж в гащите. След кратък размисъл отидох в сайта на Amazon и си купих книги за Ruby и Rails. Този път, за разлика от пролетта, когато ми се размина, реших да я изуча както си трябва тази технология. Започнах веднага, още преди да са ми дошли книгите. След няколко дребни експеримента започнах направо работа по сайта. По стара традиция, реших първо да си създам структурата на базата данни. Чак по-късно разбрах, че с Rails може да се избере и някакъв друг подход. Но това в никакъв случай не беше проблем. След като прочетох няколко tutorials стана ясно, че това което ми трябва за администраторската част на сайта е някакъв scaffold. Експериментирах с вградения, вършеше работа, но по обясними за всички, които са го виждали причини, не ми хареса особено. След доста лутане попаднах на ActiveScaffold. Доста бързо ми хареса и свикнах с него, освен това оправих връзките “едно към много” и “много към много”. Добавянето, редактирането и триенето на имоти вече бяха готови. Наистина стана лесно, за пръв път усетих, че ползването на ORM в web приложение е сладка работа. Клиентката много хареса административната част на сайта, както можеше и да се очаква. Концентрирах се в създаването на самия сайт. Цялата идея на MVC в RoR много ми допадна, но имаше още един проблем, който ме дразнеше. Информацията от базата данни минаваше през модела (ActiveRecord) и се появяваше се в контролера, като Ruby обект, до тук добре. Но в крайна сметка, накрая в изгледа, пак се налагаше да пиша HTML (rhtml templates). И то по стария, грозен, добре познат начин от JSP и PHP. Трябваше някакси да реша и този проблем. Последва доста лутане и търсене, накрая попаднах на Malline. Това нещо ми направи живота песен. В момента пиша само на един език и това е Ruby, определено мога да кажа, че от всички HTML template engines, които съм ползвал, този е най-добър. Това за мен е нещо, като сбъдната мечта. От години насам си мечтая за някакъв простичък начин за писане на досадните HTML файлове. Дори навремето бях изкопал някаква библиотека, която предлагаше C++ функции, които правеха лесно извеждането на HTML в ostream. За времето си хич не беше зле, но за съжаление накрая се оказа, че писането по този начин е по-трудно от колкото писането директно на HTML. С това лирическо отклонение исках да кажа, че всъшност е доста трудно да се направи читав HTML template engine. Жалко, че нещо като Malline не се използва по подразбиране в Rails. Някъде четох, че можело да имам по-ниска производителност с него. Сигурно е така, но на фона на цялата Rails производителност, това едва ли ще е проблем.