Friday, May 28, 2010

Magiczny Koncert Walt Disnay - uwagi

Właśnie wróciłem z Magicznego Koncertu Walt Disnay, który odbył się w Gdyńskiej Hali. Zabawa była przednia! Na spektakl przyszło znaczne grono rodziców wraz z pociechami, które beztrosko szalały tańcząc i skacząc po płycie Gdyńskiego Ośrodka Sportowego w takt disnayowskiej muzyki.
Tak jak się spodziewałem nie był to zwykły koncert, ale fantastyczne widowisko. Połączono tutaj światło, muzykę i obraz. Efekt był oszałamiający. Byłem pod ogromnym wrażeniem dyrygenta, który fantastycznie nawiązywał kontakt z najtrudniejszą publicznością - dziećmi, oraz dwoma reklamami, które zapoczątkowały spektakl: bajkowej - aby uspokoić dzieci :) i motorycznej aby uspokoić Panów :] (duże dzieci) :]
Widowisko charakteryzowało fantastycznie dobrane zmienne tępo, które nie pozwalało się nudzić nawet najmłodszym.
Osobiście, z szacunku do orkiestry, oraz z tego powodu, że rzadko mam okazję ubrać się elegancko, a tym razem miałem, założyłem garnitur. Panowały generalnie koszule i nieoficjalne marynarki. Tutaj poczułem pewien zgrzyt. Hala Sportowa rzeczywiście nie narzuca swoim stylem jakiegoś wieczorowego wyglądu, z drugiej strony wydarzenie, muzyka - owszem. Ten dysonans dał się odczuć dwojako. Dla mnie - ponieważ nie wiedziałem czy ubrać się pod koncert czy pod miejsce, dla orkiestry tym, że, nie zaczekano nawet aż zejdzie ze sceny - ludzie po prostu zaczęli wychodzić.
Osobiście zrobiłbym dwa koncerty. Hala była świetnym rozwiązaniem dla dzieci, które tańczyły, biegały i skakały radośnie wyrażając całym swoim ciałem radość :) w filharmonii dzieciaki by się wynudziły. Mi osobiście brakowało tej atmosfery uroczystości - więc sam poszedłbym chętniej na koncert do filharmonii. Tak czy owak :] było świetnie i chętnie wybiorę się na ten koncert ponownie :] Może z moimi pociechami? :) Jak Bóg da :]

Thursday, May 27, 2010

Czy ogarniemy HTML5?

Dzisiaj przeglądając webhosting.pl trafiłem na artykuł "HTML5: czy wiecie co mówicie?". Ktoś się zżyma, że HTML 5 oznacza dzisiaj już wszystko a przez to równocześnie nic. Po zajrzeniu na stronę wiki zrozumiałem dlaczego. Wiele znaczników ma podpięte API do JavaScript (np. canvas, audio, video) i tylko w użyciu z tym API potrafią coś więcej, do tego wiele rzeczy wiąże się z DOM. Wszystkie elementy obejmujące JavaScript wchodzą w specyfikacji HTML5 tylko dlatego, że brak wolontariuszy, którzy zajęliby się ich rozwojem w oddzielnym projekcie. HTML5 to jest w rzeczywistości wszystko bo choć poszczególne technologie posiadają własne nazwy wchodzą pod szyldem piątki. Przytaczanie przykładu pracodawcy to po prostu śmiech na sali bo każdy wie, że marketingowcy są gotowi wszystko pokręcić byle by tylko wyjść na nowoczesnych - też mi autorytety. Autor wpisu - Michaela Mullany - ewidentnie pomylił dwóch adresatów: klientów i developerów. Bez odróżnienia tych dwóch grup i tego co dla każdej z nich znaczy HTML5 nie ma sensu w ogóle o nim mówić.
HTML5 obecnie wydaje mi się tak wielki, że jest moim zdaniem technologią do wszystkie. Wierzę, że już nie długo będziemy widzieć specjalistów dziedzinowych HTML5. HTML5 - inżynier wideo, HTML5 - inżynier WebGL, HTML5 - inżynier 2D, HTML 5 - inżynier baz danych itd... Chyba ciężko będzie ogarnąć wszystko na bardzo wysokim poziomie. Będziemy iść ogólnikami, tworzenie stron HTML5 będzie podobne do tych z 4, ale dedykowane aplikacje webowe będą tworzyć już specjaliści w konkretnej dziedzinie.

Tuesday, May 25, 2010

MVC retro

Po powrocie z PHPCon nie mam już wątpliwości. Dla mnie MVC odeszło w zapomnienie. Przygotowana przez mnie prezentacja "Drupal Application Framework - metoda na aplikację sieciową" nie pozostawiła mi żadnych złudzeń - MVC jest dobre, ale moduł wtyczkowy jest genialny. Nigdy więcej standardowej witryny pisanej we frameworku - hook module rulez.
Już jakiś czas temu przeczuwałem, że model w jakim rozwija się wtyczki w Drupalu zrewolucjonizuje mój sposób patrzenia na development w PHP. Nie spodziewałem się jednak, że moje podejście zmieni się aż tak radykalnie. Dzięki "Wprowadzenie do implementacji architektur plug-in w PHP" Damiana Tylczyńskiego utwierdziłem się w przekonaniu, że MVC to za mało, a pisanie we frameworkach jest dobry wyłącznie dla bardzo customowych rozwiązań.
Wszystkim więc z tego miejsca polecam swoją Szkołę Developerów Drupala i zapoznanie się z korzyściami płynącymi z takiego modelu tworzenia oprogramowania!

Sunday, May 16, 2010

Fabric - Pythonowe Capistrano

Wczoraj trafiłem na Fabric - Pythonowy odpowiednik Capistrano. Już czuję, że je polubię :] Zapowiada się naprawdę świetnie! Na znalezisko natknąłem się buszując po Rubo-wych narzędziach do pracy z kodem równocześnie porównując z Jarkiem Zabiłłą Ruby Python. Ruby: Rack, Python: WSGI, Ruby: Sinatra, Python: WerkZeug, Ruby: Rubinius(wyszła wersja 1.0), Python: PyPy, Ruby: Merb(byłem w szoku, że nadal jest rozwijany), Python: Pylons(jest wersja 1.0 beta 1!), Ruby: Capistrano ... Python? Tak jest Fabric!
Narzędzie jest bardzo młode (takiego wrażenie sprawia) i nie trafiłem w nim na żadne opcje związane z konkretnym systemem wersjonowania (jak w Capistrano), ale to nic :) bo może być to kwestią czasu a jeżeli nie to konwencji - wszak można użyć poleceń systemowych :]
Co do kolejności - tutaj było różnie. Rack powstał bo Rubowcy pozazdrościli Pythonowi WSGI, Fabric bo nie było odpowiednika Capistrano w Pythonie. Nie ma to jednak większego znaczenia :) Dobrze, że oba języki programowania dobrze radzą sobie w szerokim spektrum zagadnień i udostępniają wygodne narzędzia :] Ja się cieszę.

Moje życie z Google Chrome

Dzisiaj zainstalowałem na VirtualBox Ubuntu 10.04. Pierwsze po zainstalowaniu Guest Additions było wyszukanie jakiegoś Google Chrome. Na początku trafiłem na wiekowe Chromium w repozytorium. Potem w jakiś komentarzach trafiłem na informację, że można ściągnąć paczuszkę ze strony Google.
Fajnie to zrobili bo dodaje się do systemu repozytorium z którego pobierane są aktualizacje.
Właściwie uświadomiłem sobie, że o ile na codzień pracuję na Windows 7 to Ubuntu było mi potrzebne tylko po to aby zainstalować sobie Google Chrome i to było wszystko co mi do szczęścia było potrzebne. Doświadczenia związane z korzystaniem z Google Chrome są dla mnie tak pozytywne że wręcz chciałbym aby stało się dla mnie podstawowym środowiskiem pracy.
To wygląda tak, jakby Chromium OS było dla mnie idealnym systemem. Ciekawe czy tak rzeczywiście będzie.

Friday, May 14, 2010

Kiedy technologia Microsoftu jest włączana do CSS3

Ile razy czytam o nowych standardach webowych tylko wciąż na mojej twarzy pojawia się grymas gdy zadaję sobie pytanie "Czy to będzie działać w IE" albo "Jak to będzie działać w IE". Dzisiaj trafiłem na chlubny wyjątek, który potwierdza regułę.
Ostatnio jestem na etapie próby skonstruowania czcionki i użycia jej na stronie. Jest taki fajny programik FontForge, któremu można używając opcji import zassać kształty z jakiś plików grafiki wektorowej i sobie z tego zrobić czcionkę. W CSS3 pojawiła się fajna opcja @font-face, która pozwala używać na stronie czcionki, zuplodowanej wcześniej na serwer, czyli każdej :] Fajne szalenie.
Jaki byłem zszokowany, gdy okazało się, że Internet Explorer obsługuje to od wersji 4. Po prostu 110% szoku. To już kolejny raz kiedy doznaję czegoś równie wstrząsającego! Pierwszy raz nie mogłem uwierzyć, że Webforms2 działają w IE6, a w wielu innych przeglądarkach trzeba sobie oszukiwać specjalną biblioteką napisaną w Javascripcie. Po prostu szok.
Jak to więc jest kiedy to technologia, wcześniej zaimplementowana w przeglądarce Microsoftu zostaje włączona do portfolio nowoczesnych przeglądarek? Fajnie :) Miło :) i szalenie sympatycznie, gdy człowiek czuje się tak MIŁO ZASKOCZONY. Wystarczy, że fani darmowych przeglądarek używają ich w najnowszych wersjach i możemy spokojnie bez obaw używać sobie dowolnych czcionek na stronach :] Czad!

NOnsenSQL i zalety MongoDB

W serii wpisów dotyczącej pisanej przeze mnie wyszukiwarki chciałem podzielić się jeszcze swoimi wrażeniami z wyborem silnika baz danych. Realizując projekt tak nietypowy, ciekawy, fajny starałem się uczynić go okazją do poznania nowych ciekawych narzędzi na każdym szczeblu. Jednym z nich był wybór silnika baz danych.
Miałem do skatalogowania bardzo proste informacje. Listę tysiąca czterystu nazw, do każdej przypisany kod numeryczny. Banał. Najpierw przyszedł mi do głowy memcache, ale kiedyś gadałem z kolegą (dzięki Viciu), który opowiedział mi o tym, że istnieje coś tak fajnego jak Redis, który, w porzeciwieństwie do memcache, w którym traci się wszystko jak zamknie się serwer (restart/pad serwera), potrafi przy zamykaniu zrzucić dane do pliku i załadować je przy kolejnym starcie. To było fajne. Do tego pisane przez ludzi pracujących w Ruby więc generalnie :) w tym deseniu, w którym projektowałem aplikacje - jak znalazł. W Redis fajnie się projektuje listy, kolejki, stos, ale nie fajnie się wyszukuje. Można błyskawicznie pobrać wartość przypisaną do jakiegoś klucza, ale nie ma opcji "pobierz wszystkie dane, które zawierają w sobie wyraz Włocławska" no i kiszka. Kolega, do którego dzwoniłem nakierował mnie CauchDB. Jednak i tam nie znalazłem w dokumentacji nic o tego rodzaju zapytaniu do "bazy" (mówię, że nie znalazłem, nie znaczy, że nie ma). Swoją drogą dokumentacja do CauchDB to jakiś koszmar. Dawno nie widziałem czegoś tak ... nieintuicyjnego i .... ehh ... szkoda słów.
Po drodze wpadłem sobie na pomysł - a może B-drzewo. Na temat b-drzew w Redis nic nie znalazłem a to na co trafiłem w ramach narzędzia Tokyo Cabinet było jeszcze cięższe niż dokumentacja CauchDB. Poza tym nie byłem przekonany do b-drzewa w tym przypadku. To byłby bardziej workaround niż dobre rozwiązanie.
Te poszukiwania uświadomiły mi, że chociaż istnieje cały ruch NOSQL, który w niektórych wypowiedziach tak bardzo zdaje się krytykować SQL to nic nie mówi o tym, że "ich" bazy danych możesz zapytać o jedną wartość (albo ich listę), ale nie ma mowy o zapytaniach. Generalnie jak chcesz zrobić coś ala "LIKE %nazwa%" to w bazie danych NOSQL to jest ... niespotykane.
Jarek Zabiełło (wielkie dzięki) pokazał mi w końcu MongoDB (i odradził Sphinxa, który byłby wytaczaniem armaty na muchę). To brakujące ogniwo w tej całej przepaści, które z jednej strony trzyma dane jak CauchDB - w postaci hierarchicznych dokumentów, używa składni JSONowej obiektów i jest fajne :] a z drugiej posiada funkcję find, która może przyjąć wyrażenie regularne, jako parametr do odfiltrowania danych. Ba - posiada nawet indeksy :] Kurcze, to było to. Obiektowo, hierarchiczne, JSONowo, nie SQLowo, ale z możliwością robienia zapytań - miodzio. Biblioteka do Rubego była, podpięcie do sinatry banał - działa super :] Naprawdę!
Generalnie cała ta kampania NOSQL to jest mydlenie oczu bo co innego jak chcesz trzymać dane i nie musisz robić do nich skomplikowanych zapytań - a co innego jak jesteś do tego zmuszony. Jasne. Wiele aplikacji sieciowy jak Digg, który wyświetla "wszystko" albo "nic" może sobie na to spokojnie pozwolić, ale generalnie SQL to nie jest jakieś zło jak niektórzy przedstawiają ruch NOSQL, tylko czasem aplikacja ma taki model użycia danych, że istnieją lepsze rozwiązania niż *SQL. To wszystko :) Tak było z moją wyszukiwarką.
Generalnie było fajnie :] Wsio.

Przetwarzanie u klienta a requesty do serwera

Dwa dni temu trafiłem na ciekawe zagadnienie. Mam około 166 KB danych w postaci wartość: klucz i mam taką listę odfiltrowywać w jquery ui autocomplete. Początkowo bardzo chciałem uniknąć ciągłego odpytywania serwera więc napisałem filtrowanie pełnej listy w jQuery mniej więcej tak:

source: function(request, response) {
if (cache.length > 1) {
matched = jQuery.grep(cache, function(element, index) {
return element.name.search(request.term) != -1;
});
return response(matched);
}
$.getJSON("/javascript/data.json", function(data) {
cache = data;
response(data);
});
},
Byłem szalenie zaskoczony gdy to rozwiązanie okazało się wolne! Wciąż słyszę tylko, że JavaScript jest wciąż przyspieszana, że któryś z silników prześcignął inny i potem znowu, że ktoś znowu bije rekordy szybkości JS... a tutaj takie zaskoczenie.
Generalnie pierwsze wpisanie litery pobierało wszystkie dane, które po pierwszym pobraniu, które trwało naprawdę długo potem zaczynały już szybciej się filtrować, ale nadal to było toporne. Testowałem to w Chrome 4 i powiem szczerze. To nie działało jakoś super szybko. W ogóle się tego nie spodziewałem. Jak jeszcze pomyślałem, że > 50% użytkowników wyszukiwarki to IEowcy... nie, to nie miało szans powodzenia. Nawet kiedy Chrome działało tak sobie.
Generalnie szybko zakodowałem standardową wersję z bazą danych, odpytywanie serwera przy każdej literce. Zaczęło działać naprawdę dobrze. Plusem było na pewno to, że można było ograniczyć zapytanie do 10 wyników, a nie pakowało się 166KB danych. Tego mi w sumie zabrało w jQuery, żeby był parametr do funkcji grep, który mówi po ilu elementach przerwać - może wtedy byłoby szybciej.
Podsumowując: jeżeli masz do wyboru pobrać dużo danych do JS i filtrować je u klienta, a zrobić standardowo filtrowanie po stronie serwera i odpytywać o wyniki serwer - wybierz drugie, chyba, że znasz sprytniejszy sposób zrobienia tego co ja próbowałem po stronie JS.

Thursday, May 13, 2010

Przygoda z Merbem i jak przeszedłem na Sinatrę

Dzisiejszej nocy nadszedł czas, gdy miałem okazję zmierzyć się wreszcie z Merbem. Znany mi świat frameworków to raczej rozwiązania typowe dla Pythona. Byłem bardzo mile zaskoczony poznając świat frameworków Ruby.
Do tej pory nie było żadnego małego projektu, od którego można byłoby zacząć naukę. Stworzenie wyszukiwarki dla kampani 1% dla ZHR.pl było fantastyczną okazją do liźnięcia Merba.
Pierwszym rozczarowaniem, była walka z samym Merbem. Zainstalowałem nowe gemy Merba 1.1.0. Pamiętał, że jest coś takiego jak wersja flat aplikacji. Bardzo zależało mi na tym właśnie modelu. Już na samym początku trafiłem na bug Merba #712. To było niestety bardzo bolesne spotkanie z rzeczywistością, które pozostawiło mnie bez złudzeń - Merb nie jest już rozwijany.
Kolejną niemiłą niespodzianką było odpalenie mongrela. Na szczęście tutaj pomogło dodanie require 'mongrel' do skryptu merb w katalogu bin projektu i skorzystanie z tak zmodyfikowanej binarki. Co gorsza, wcześniej straciłem kilkadziesiąt minut na odpalaniu webricka, który w ogóle nie łykał urlsów.
Skoro już jesteśmy przy dodatkowym sofcie. Najnowsza wersja Haml 3.0.2 nie radzi sobie z renderowaniem SASS, który kończy się błędem jak w issue #163. Wszystko działa natomiast bez problemu z najnowszą wersją Haml z gałęzi 2. Aha. Najlepsze jest to, że istnieje masa nieaktualnej dokumentacji. Szczególnie bolesne gdy chodzi o włączenie SASS. Nawet dokumentacja SASS podaje jakieś lewe informacje. Dopiero ten wpis pozwolił mi prze konwertować SASS do CSS.
Takie przygody to chleb powszedni, jeżeli oprogramowanie nie jest rozwijane od ponad roku. Nie ma się co dziwić. Najgorsze jest dla mnie to, że w Rails 3 nie ma czegoś takiego jak merb-gen flat czy merb-gen very_flat. Można obciąć to co generuje Rails 3 ale to wciąż nie jest minimalna aplikacja z własną konfiguracją. Trochę pocieszyła mnie Sinatra. Kiedy w niej kodowałem to przypomniał mi się Pythonowy WerkZeug, z tym, że w przeciwieństwie do tego drugiego Sinatra działa :P Ciekawe, że Sinatra to DSL :) co daje bardzo miłe wrażenie kodowania w zetknięciu z nią :]
Kiedy przenosiłem aplikację z Merba na Sinatrę to właściwie jedyne co musiałem zrobić poza przekopiowaniem plików statycznych i widoków to zmienić rozszerzenie widoków HAML. Reszta sama poszła. Bardzo spodobał mi się minimalizm Sinatry, który w przypadku wyszukiwarki jaką piszę był w dziesiątkę! Niestety to nie to samo co modularny Merb, który jak trzeba było to poza wygenerowanie małej aplikacji potrafił i kapcie przynieść i kawę zaparzyć. Rails nie posiada tak rozwiniętej modularności w stopniu w jakim została stworzona w Merbie - a szkoda.
Jeżeli miałbym porównać świat frameworków Pythonowych i Rubowych to tutaj jest jak z językiem - Python prosto, Ruby z dużo bogatszym wachlarzem możliwości. Mam wrażenie, że deweloperzy Pythona skupili się na prostocie jako celu, gdzie w Rubym widać dążenie do niej ale przez wszystkie etapy ogólności, które widać w wielu narzędziach.
Na tle tych przygód jest jeszcze gdzieś Scala, która wydaje mi się tak zaawansowana, że aż nie widzę dla niej zastosowania w projektach, które tworzę. To jest chyba jakiś target heavy enterprise a ja jeszcze w tych kategoriach nie myślę. Szalenie podoba mi się tutaj Merb, w którym możesz zacząć sobie dewelopować aplikację od jednoplikowej wersji very_flat po typowo railsowym bufoniastym systemie układu katalogów skończywszy. Szkoda, że Rails 3 nie daje takiego wyboru. Na szczęście jest Sinatra :) jednak jak już pisałem, Merb był gdzieś pomiędzy i szkoda, że go już nie ma.