Rails 2.0 okiem zgreda

Z końcem września na oficjalnym blogu railsów pojawiła się informacja o nadchodzącej wersji 2.0. Przeskok od wersji 1.0 do 2.0 to zawsze jest trauma i dla projektu i dla jego użytkowników. O zmianach i ZMIANACH w railsach 2.0 mówiło się od jakiegoś czasu. Nie ma się co dziwić - projekt wyrósł z lokalnej anomalii do popularnego frameworka używanego przez wiele serwisów. Zmiany są więc konieczne zwłaszcza, gdy coraz częściej przebąkuje się o enterprajsowych zapędach RoR. Sam także miałem przygotowaną swoją prywatną listę oczekiwań wobec nowych railsów. Dopiero dziś miałem odrobinę czasu i zaległem w wannie, aby na spokojnie poczytać o tym co nadchodzi. Poczytałem i… przyznam trochę się rozczarowałem.

Odnosząc się w sposób subiektywny (jak przystało na zgreda) do poszczególnych akapitów wpisu DHH:

Action Pack: Resources
Rozumiem fascynację koncepcją traktowania aplikacji jako zasobu - przyznam jest wielce atrakcyjna… jako koncept intelektualny. Patrząc na fascynację railsowców tą koncepcją trochę mam wrażenie deja vu. Pamiętacie? Czyż to nie XML, XML-RPC, SOAP, WSDL miały być rewolucją na miarę wynalazku pilota do telewizora?? I co? Nic. Developerzy trochę się po podniecali, zmarnowano trochę budżetów, powstało trochę książek, paru konsultantów zarobiło swoje ale życie developera nie stało się łatwiejsze. Patrząc z tym bagażem doświadczenia na podniety jakie wywołuje koncepcja Active Resources dziś, trochę mi zgrzytają zęby. Gdy widzę rozwiązania na siłę budujące RESTfullny dialog przeglądarka-serwer za pomocą wydumanych konstrukcji formularzowo-javascriptowych - myślę sobie - ooo na pewno nie, moja noga tam nie postanie!
Znacie powiedzenie o młotku - mam wrażenie, że w railsach zaczyna pojawiać się takie myślenie - wszystko MUSI być zasobem. Tylko po co? Jasne są sytuacje w których REST Is The Best ale obawiam się, że nie jest ich aż tak wiele.
Patrząc na zmiany w RoR2 martwi mnie trochę to mapowanie wielu kontekstów wykorzystania zasobów do jednego kontrolera. Koncepcyjnie super, ale pomyślmy co szukaniem i rozwiązywaniem błędów w aplikacji z wieloma kontrolerami?! To zaczyna pachnieć średnio przyjemnie. I nie, nie wierzę, że internet da się traktować w niedługiej przyszłości jako Jeden Wielki Zasób :)
Ocena plus ujemny: -1 :)

Action Pack: Multiviews
Proponowane jest przebudowanie sposobu nazywania plików w View - mają być nazywane wg klucza: action.format.renderer - czyli zamiast feed.rxml będzie feed.atom.builder, ale już index.erb jako ogólny. Rozbudowana będzie obsługa wielu formatów (respond_to). Pomysł może być - nie jest to rewolucja - raczej jakaś próba uporządkowania. Zakładając oczywiście, że końcowa wersja RoR 2.0 będzie wyposażona w narzędzia do miłej migracji aplikacji.
Warunkowy plus dodani: +1

Action Pack: Record indentification
No comments. Jazda na zasoby dotyka metod pomocniczych z View redirect_to, link_to itd. Jedno co mogę oddać - przynajmniej utrzymany jest stały poziom amoku zasobowego :)
Ocena - bez emocji: 0

Action Pack: HTTP Loving
No pierwsza rzeczywiście przydatna rzecz. Wygodna obsługa uwierzytelniania komunikacji po HTTP - może wreszcie zacznie się wygodnie tworzyć prywatne feedy które będą za loginem i hasłem. Dziś jedynym zabezpieczeniem jest generowanie absurdalnie długich i asemblerowo wyglądających urli do takich feedów.
Ocena plus dodani: +1

Obsługa assetów
Druga pozytywna grupa zmian. Doświadczenia przeprowadzone przez chłopaków z Yahoo dowodzą, że spore przyspieszenie ładowania aplikacji można uzyskać jeżeli dane (JS, CSS, grafika) dociągane są z różnych hostów (wynika to z ograniczenia w przeglądarkach - na raz z jednego hosta ciągnięte są dwa ’strumienie’ danych) - teraz railsy będą wspierały obsługę wielu adresów wskazujących na te same pliki.
Czyli nie jest źle, ale liczyłem na znacznie więcej - miałem nadzieję na mechanizm który umożliwi wygodne rozdzielenie np JS z poszczególnych części aplikacji od siebie nawzajem oraz od biblioteki wspólnych funkcji. Taki podział znacząco ułatwia utrzymanie kodu (bez znaczenia czy to JS czy CSS)
Ocena: 0 dobry początek ale gdzie reszta??

Action Pack: Security
No nareszcie implementacja request tokenów wbudowana w sam framework. Zmienione ma być też beznadziejne działanie metody sanitize zamiast zakazów będzie white lista - tak powinno być od dawna!
Bezpieczeniej więc +1

Action Pack: Exception handling
Możliwość obsługi wyjątków zadanego typu przez wskazaną metodę (per kontroler). Bardzo przyjemny pomysł - koniec z gmeraniem w rescue_action_in_public
Pozytwnie: +1

Action Pack: Miscellaneous
Rozbudowa obsługi formatu Atom. Myślę, że to dobry ruch zwłaszcza, że Google buduje swoje API używając zmutowanego Atoma (GData). Powinno to ułatwić budowę połączeń pomiędzy aplikacjami - internet jako zasób? :)). Zmiana głowy nie urywa, ale ogólnie miła dla oka.
Ocena: +1

Active Record: Performance
Nooo tu się poważnie rozczarowałem. Miałem cichą nadzieję, że ORM railsowy ulegnie istotnemu rozwojowi. Tymczasem dodana jest obsługa cache’a dla SQLi - rzuciłem okiem na kod i khm khm nooo nazwa Cache to brzmi dumnie - liczyłem na coś lepszego niż hash z kluczem w postaci SQL a wartością w postaci obiektów. Owszem będzie to działało tylko co jeżeli aplikacja wykonuje raz na dobę zapytanie o milion rekordów….
Ocena: -1

Active Record: Sexy migrations
Zmiana w sposobie definiowania recept migracyjnych - zamiast t.column ‘name’, :string bedzie t.string :name. Jakoś nie specjalnie mnie to podkręciło - aplikacja to jednak nie tylko migracje, więc to jak się je opisuje nie ma wielkiego znaczenia. A jeszcze jedno, każda rozrastająca się aplikacja i tak traci swoją bazodanową niezależność (zauważyliście? przenośne miedzy bazami są tylko proste przykładowe aplikacyjki, jak zacznie się prawdziwa walka to kończy się ta uniwersalność)
Ocena: 0

Active Record: XML in, JSON out
Możliwość inicjalizacji obiektów modelu danymi w XML. Może być przydatne (w połączeniu z różnymi API zewnętrznymi które korzystają z XML jako formatu danych).
Ocena: +1

Active Record: Shedding some weight
Pomysł z wyjęciem wszelkich acts_as_xxx z kodu i umieszczeniem jako pluginy chyba nie jest zły. Choć zastanawiam się nad tymi nerwami które będą się napinały podczas walk z niedziałającym modelem - bo zapomnieliśmy użyć install acts_as_list. Ale ogólnie to chyba jednak dobry ruch. Wyrzucenie adapterów do baz innych niż PostgresQL, MySQL i SQLite do pluginów to zdecydowanie dobry ruch.
Ocena: +1

Active Record: with_scope with a dash of syntactic vinegar
Metoda with_scope zmieniła widoczność - stała się protected. Uzasadnienie mnie przekonuje. Sam korzystam z niej intensywnie ale tyko w obrębie modelu.
Ocena: +1

ActionWebService out, ActiveResource in
Zasobowej jazdy kolejne wcielenie. Ciężko mi być tu szcześliwym. Chciałbym mieć wybór - realnie patrząc już go nie będzie - jak pisze autor w wojnie SOAP vs REST railsy już wybrały stronę. A szkoda.
Ocena: -1

ActiveSupport
Skoro nie ma wielu zmian, nie ma też co oceniać.
Ocena: 0

Action Mailer
Także żadnych wielkich zmian nie ma.
Ocena: 0

Rails: The debugger is back
Dobry ruch. Dalej nie jest to okienkowy :) debugger (korzysta z gema ruby-debug) ale już znacznie lepiej niz sama konsola IRB.
Ocena: +1

Rails: Clean up your environment
Uporządkowanie sposobu konfigurowania aplikacji. Zamiast puchnącego environment.rb jest katalog config/initializers w którym umieszczane mogą być własne konfigi. Problem mi doskwierał - dlatego powstał AppConfig - rozwiązanie z katalogiem to krok w dobrym kierunku ale za mały. Brak mi konfigurowalności takiej jaką daje AppConfig czyli oprócz inicjacji konfiguracji dostęp do konfiga w aplikacji.
Ocena: 0

Rails: Easier plugin order
Czytając o tej pluginizacji poszczególnych elementów frameworka już myślałem że to koniec. Problem z kolejnością ładowania pluginów już trochę przypomina jazdy z JARami pod Cocoonem 1 (zmieniało sie xml.jar na zml.jar zeby ładował się na końcu:)) Na szczęście kolejność ładowania pluginów będzie można wskazywać. Ufff
Ocena: +1

Podsumowanie
Nie, nie będzie tabelki z podsumowaniem ocen - jestem zbyt leniwy :) Patrząc na oceny widać jednak więcej plusów niż minusów - skąd więc moje rozczarowanie? Sądziłem że zmiany pójdą w kierunku upraszczającym/porządkującym tworzenie większych aplikacji (na równi z małymi/średnimi). Niestety - lista zmian to raczej tuning plus promocja RESTa.
Moja własna lista życzeń wobec railsów wygląda tak:

  • dla Active Record
    • usprawnienie działania i wydajność ORMa np. przez wprowadzenie prawdziwego 2nd Level Cache (wzorem może być tu Hibernate)
    • ponieważ tworzenie obiektu w Rubym jest operacją kosztowną ciekawym podejściem byłoby użycie puli obiektów dla danych z bazy
    • dodanie abstrakcji do tworzonych zapytań - sam robiłem małą przymiarkę do tego problemu, później odkryłem ez_where, a ostatnio pojawił się jeszcze Ambition
  • przyspieszenie działania trybu developerskiego - tu jest ciekawy plugin w temacie - przydałoby się dodanie tego do bazy kodu railsow
  • modułowość - mam tu na myśli dwie sprawy:
    • wsparcie dla podziału aplikacji na części/moduły które mogą być wykorzystane w wielu miejscach albo tej samej aplikacji albo wręcz różnych - problem jak zauważyłem trapi nie tylko mnie
    • możliwość budowy UI z komponentów; to już marzenie z górnej półki - ale byłoby miło gdyby Railsy dawały możliwości podobne do Tapestry czy Echo.
  • naturalne wsparcie dla I10N - czyli jedno preferowane rozwiązanie ściślej związane z frameworkiem,
  • dodanie NDC (nested diagnostic contexts) do loggera railsowego. O co chodzi? W skrócie o to aby można było w logach znaleźć zapisy tworzące jedną całość przyczynową-skutkową. Czyli od samej góry czyli wykonania akcji w kontrolerze przez wszystkie warstwy niżej każdy zapis do logów miałby dodatkowe pole (kontekst) pozwalający je razem zgrupować (a kolejność to timestamp wpisu). Więcej szczegółów jest w artykule ‘Patterns for Logging Diagnostic Messages’
[]
Spodobało się? Podziel się z innymi: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • Wykop
  • Gwar
  • Digg
  • Technorati

Liczba komentarzy: 11 »

  1. Adamh said,

    październik 11, 2007 @ 12:40

    Jak zwykle bardzo rzeczowo i konkretnie. Nie mogę się zgodzić w kwestii REST - może dlatego, że widze ogromny potencjał w tym rozwiązaniu a dokładniej we wsparciu REST w Railsach.

    Kilka uwag:
    > jak pisze autor w wojnie SOAP vs REST railsy już wybrały stronę. A szkoda.

    Przecież będą pluginy do czego tylko zapragniesz i ten kod też tam wyląduje.

    > AR: dodanie abstrakcji do tworzonych zapytań

    To jedna z rzeczy, która mnie najbardziej boli w temacie ActiveRecord.
    Nadal uważam, że Djangowy ORM czy np SQLAlchemy są dużo lepszymi rozwiązaniami.

  2. nabla said,

    październik 11, 2007 @ 12:52

    Przekonało mnie to do nieużywania Railsów. Czuje się jakbym czytał o structach/ejb/hibernate pare lat temu :-)

  3. daniel said,

    październik 11, 2007 @ 13:10

    @Adamh
    Co do pluginów - patrzę na to pesymistycznie - gdy soap zniknie z radaru twórców RoR obawiam się jego stopniowego staczania się w niebyt.
    Abstrakcja zapytań - zwłaszcza, że są już gotowe rozwiązania w temacie…

    @nabla
    :)) wiadomo lisp rulez!

  4. sztywny said,

    październik 11, 2007 @ 15:28

    RESTfulne dialogi z wmiksowanym Javascriptem mają choćby taki plus, że pozwalają uniknąć duplikacji kodu w kontrolerach. Poza tą jedną wzmianką brakuje jakichkolwiek merytorycznych argumentów, czy choćby porównania z innymi możliwymi sposobami strukturowania aplikacji (SOA czy co tam), więc trudno jest z czymś tu dyskutować.

    Nie jestem przekonany co do sensu projektów typu Ambition, tam gdzie relację są choć trochę bardziej skomplikowane i tak wygodniej jest używać deklaratywnego i zaprojektowanego specyficznie do tego celu SQLa (ładnie opakowanego w metodę w modelu), niż próbować naginać imperatywnego Ruby’ego do celu do którego nie został stworzony.

  5. sztywny said,

    październik 11, 2007 @ 15:34

    Btw, nie da się porównywać RESTu z SOAPem, XMLem czy czym tam. Nie jest to buzzword roku 2007, modelowym przykładem RESTowej “aplikacji” jest przecież WWW samo w sobie, a to chyba całkiem niezły “killer-app”.

  6. daniel said,

    październik 11, 2007 @ 19:53

    @sztywny
    Liczyłem Jaro na Ciebie :)

  7. Paweł Kondzior said,

    październik 12, 2007 @ 02:31

    Glowny problem REST to to ze implementacja HTTP w przegladarkach jeszcze do tego nie dorosla i prawdopodobnie nigdy nie dorosnie, poniewaz samo GET i POST w 99.9 % wystarczy, no bo REST’owe aplikacjie to jaki procest internetu ? Wszystko to co teraz jest w rest to mega emulacja, wykorzystujac jakies zmyslne hacki przez wykorzystanie wlasnie GET i POST.

    Jesli chodzi o oszczednosc duplikacji kodu, to fakt, takowy zainstenije, ale w wielu przypadkach powoduje wzrost poziomu skomplikowalnosci kodu, po prostu dialog zasobu musi byc swiadom kontekstu wywolania, a to wymaga warunkow.

    Nielubie REST, subiektywnie, gdyby bylo wsparcie przegladarki mysle ze zniknal by glowny powod antypatii do REST - skomplikowany kod wywolan (js/html pokrecone linkti w formularzach itd).

    Boli mnie tylko.. ze DHH jest zaslepiony wizja zdominowania railsowcow swoim pomyslem. Ja wcale nie chcem odchodzic od starego modelu MVC w Rails, bylo mi z nim dobrze i wcale kod mi sie nie dublowal :) to kwestia doswiadczenia, DHH chce uczyc wszystkich DRY poprzez maksymalne eliminowanie mozliwosci dublowania kodu - pisz tak, bo inaczej nie mozesz, a to przeciez nie o to chodzi ?

  8. daniel said,

    październik 12, 2007 @ 10:50

    @Paweł
    Przerażające - czytam i mam wrażenie, że sam to napisałem :))

    Pozycja DHH jako celebrity ma ewidentnie przełożenie na zmiany w RoR - jeden wódz, jedna droga…

  9. ciukes said,

    październik 14, 2007 @ 15:07

    Po przeczytaniu wpisu i komentarzy widze, ze kazdy z nas ma pewne oczekiwania wynikajace z nalecialosci/pasji/doswiadczen. Byloby ciekawie poznac nasze wspolne/rozne oczekiwania. Chetnie zobaczylbym link do webankiety zatytulowanej “Jaki wyglada twoj framework marzen?”. Nie mam na mysli licytacji pluginow RoR, czy gardlowania w sprawie mappera SQL. Interesuja mnie oczekiwania niezwiazane z jezykiem, jak rowniez te ktore, w waszym mniemaniu, sprostaja zmianom zachodzacym w naszym ukochanym WWW.
    Oto kilka moich typow:
    - Kontynuacje (http://en.wikipedia.org/wiki/Continuation)
    - Framework jako platforma do budowy rozwiazan, a nie jako gotowe rozwiazanie.
    - Modulowosc (Komponentowosc?) (http://en.wikipedia.org/wiki/Software_componentry)
    - Szablony jak najmniej ingerujace w HTML (Kid, Tapestry)

    No jak Daniel? Rzucisz sie na webankietke?:)

  10. daniel said,

    październik 14, 2007 @ 20:56

    > Chetnie zobaczylbym link do webankiety zatytulowanej
    >”Jaki wyglada twoj framework marzen?”
    hmmmm wiesz, że też zaczałem o tym myśleć…
    Pomysł może być ciekawy poznawczo :)

    > No jak Daniel? Rzucisz sie na webankietke?:)
    Musze załatwić sobie tam konto :)

  11. plastic said,

    październik 15, 2007 @ 13:35

    >> Chetnie zobaczylbym link do webankiety zatytulowanej
    >>”Jaki wyglada twoj framework marzen?”
    > hmmmm wiesz, że też zaczałem o tym myśleć…
    > Pomysł może być ciekawy poznawczo :)

    Chyba nie powstał jeszcze żaden framework, który byłby nas w stanie w pełni zadowolić :)

    > > No jak Daniel? Rzucisz sie na webankietke?:)
    > Musze załatwić sobie tam konto :)

    Wycięli Ci ?:) Ah ten niedobry właściciel :P

RSS feed for comments on this post · Adres TrackBack

Dodaj komentarz