Sunday, November 7, 2010

Pyramid - następca Pylons

Kilka dni temu Kevin J. Smith napisał na grupie dyskusyjnej pylons-discuss, że jako użytkownik Pylons, czuje się troszkę zmieszany ponieważ pierwszy raz trafia na informacje o Pyramid.

Szybko okazało się, że developerzy Pylons zaczęli pracować już nad następcą Pylons - jednak nie ogłosili tego światu. Tak oto przypadkiem świat dowiedział się o Pyramid.

O kierunkach jakie przyjmie Pylons 2.0 można było przeczytać już kilka tygodni temu na blogu Bena Bangerta we wpisie Why Extending Through Subclassing (a framework’s classes) is a Bad Idea. Było to preludium do kierunku jakim podąży Pylons 2.0 - a właściwie powinienem powiedzieć Pyramid.

Pierwsze - Pyramid "połączyło się" z zespołem repoze.bfg. Połączyło się, a raczej stwierdziło, że dotychczasowy model tworzenia kolejny aplikacji (poprzez tworzenie podklas WSGIController) jest ślepym zaułkiem - przed czym zostali ostrzeżeni przez sławę CherryPy Boba Brewera. Aby nie wymyślać koła na nowo obecnie Pylons tworzony jako adaptacja repoze.bfg. Tak zostało wydane ogłoszenie iż obecnie repoze.bfg staje się projektem Pyramid i będzie wydawane pod tą nazwą. Dwa fantastyczne zespoły połaczyły siły aby na bazie już dobrze ukształtowanego repoze.bfg oraz posiadającego swoich fanów Pylons powstał jeszcze lepszy framework dla języka Python.

Dzięki temu połączeniu, oraz faktowi iż kod Pyramid posiada dobrze ugruntowaną bazę w postaci kodu repoze.bfg już dziś możemy cieszyć się Pyramid 1.0a dostępnym przez Python Package Index.

Te informacje napawają optymizmem. Wszystko wskazuje na to, że następca Pylons wyjdzie szybciej niż ktokolwiek by się spodziewał i będzie to naprawdę fantastyczny framework. Oby w parze z postępami w kodzie pojawiały się artykuły, a dokumentacja rosła :) Nic tylko czekać na Pyramid Book :)

Sunday, October 17, 2010

PyCons

Tydzień po powrocie z polskiego PyCona zacząłem oglądać konferencje z konferencji pythonowych, które odbyły się w innych częściach świata. Fantastyczną nowiną jest fakt iż większość z nich zamieszcza nagrania wideo prelekcji (nie tylko slajdy) więc można po prostu wysłuchać i zobaczyć prelekcję - taką jaka była - w zaciszu własnego domu.

Tematy poruszane w różnych zakątkach świata są bardzo różne :) i dobrze. Można się naprawdę wiele nauczyć i wybrać sobie te tematy, które odpowiednio pasują do naszego obecnego poziomu lub po prostu zainteresował nas temat. Tutaj pierwsza uwaga.

Temat konferencji czasami kompletnie nic nie mówi o jej treści. To smutne, ale widzisz temat i nie wiesz - warto to w ogóle odpalać, czy lepiej odpuścić sobie. Bo co na przykład mówi tytuł "Dude, Where's My Database?". Na szczęście są (przy większości tematów) opisy mówiące o treści konferencji. Bezcenne.

Druga rzecz - jakość materiałów. Chyba najlepiej zorganizowane są na stronie PyCon Atlanta. Naprawdę super. Łatwy dostęp do wszystkiego. Natomiast materiały wideo z UK czy Europy są tragiczne. Co z tego, że mają nagranie wideo skoro ani nie słychać na nim prowadzącego wykład ani nie widać wyraźnie slajdów. Po prostu ... bezużyteczne.

Osobiście czytanie dokumentacji ze zrozumieniem przychodzi mi z trudnością i nigdy nie mogę wyłapać w niej niuansów i szczegółów implementacyjnych. Takie prelekcje są dla mnie jak znalazł. Głównie dlatego, że ludzie w nich skupiają się na tym co jest ważne, dają przykłady i pokazują "big picture", który czasem ciężko samemu dostrzec. Te trzy aspekty sprawiają, że takie konferencje to dla mnie kopania wiedzy :) Polecam każdemu!

Monday, October 11, 2010

Jak kupiłem mIRCa

Tak. Wczoraj zakupiłem mIRCa. Zapłaciłem $24 - te $4 to podatek z Polski. Dlaczego?
Na IRCu wiele nie siedzę. Natomiast zamierzam trochę więcej niż wcześniej aby wesprzeć społeczność PPCG choćby odpowiadając na pytania początkujących.

To nie jest tak, że nigdy wcześniej nie używałem IRCa. Jak byłem chyba jeszcze w podstawówce to pamiętam moją siostrę, która siedziała na jakiś kanałach i opowiadała o jakiś ludziach, którzy też tam siedzą - totalny bezsens. IRC - narzędzie dla zakompleksionych, dla których jedyną drogą przetrwania stała się akceptacja przez wirtualną społeczność. Tak to wtedy postrzegałem.

Potem trafiłem na książkę "Dziennik Hakera" albo coś podobnego gdzie było napisane, że Hakerzy też używają IRCa. No tak - też odludki - to sobie siedzą. Potem była jakaś era wchodzenia na czaty Onetu i wszelkiej różne inne, zakładanie własnych czatów przez jakieś skrypty i tak jakoś to bez refleksyjnie obok mnie przeszło.

Dla mnie IRC stał się czymś wartościowym kiedy odkryłem freenode - czyli sieć gdzie są wartościowe kanały dotyczące języków programowania, w których koduję. Wejść na kanał, zapytać o coś, dowiedzieć się więcej, wziąć udział w jakiejś dyskusji. Wtedy IRC stał się dla mnie czymś użytecznym.

Dlaczego mIRC? Chłopaki z PPCG rzucali setkami pomysłów, ale żaden nie wpadł na pomysł aby kupić mIRCa. Jest to jedyny klient, który mi się podoba. Naprawdę. Wiem, że jest Quassel i IRSSI i dużo innych klientów, ale żaden darmowy mi nie podpasował. mIRC to jedyne co mi się naprawdę spodobało.

Mam nadzieję, że kupno mIRCa będzie inwestycją, nie wyrzuconymi pieniędzmi w błoto :] Zobaczymy - czas pokaże.

Wednesday, October 6, 2010

I mamy Gallery 3

W końcu, po wielu latach ciężkiego developmentu doczekaliśmy się Gallery 3. Skrypt w wersji drugiej był niesamowicie wolny i nie poddawał się w niemal żaden sposób żadnym zabiegom optymalizacyjnym. Mapowanie każdego pliku graficznego na skrypt PHP przez regułkę .htaccess w celu sprawdzenia uprawnień było najwęższym gardłem całego narzędzia.

Na ten dzień czekałem kilka miesięcy codziennie zaglądając na tracka projektu i badając ilość bugów pozostałych do releasu. W końcu nadszedł: nowa, bezpieczna, szybka, nowoczesna wersja jedynego w swoim rodzaju skryptu do obsługi galerii. Cieszy fakt, że jeden z twórców czerpał wiele inspiracji ze swojej fascynacji mistrzostwem z jakim został zaprojektowany Drupal. Tym bardziej jestem przekonany o jakości ostatecznego rozwiązania.

Pozostaje tylko się cieszyć i szykować na upgrade ZHRowej multigalerii :] Zachęcam wszystkich do pobrania :]

P.S. Skórek o dziwo nie brakuje :) jest już kilka do wyboru - niektóre naprawdę fajne :D

Saturday, October 2, 2010

Jednak Arch Linux

Po kilku latach powrót do Arch Linux to strzał w dziesiątkę. Szczególnie w moim przypadku gdy w gruncie rzeczy na co dzień używam Windows 7 a Linuksa tylko do webdevelopmentu.

Pierwszy plus - dużo grzebania. W Archu konfigurację z grubsza trzeba grzebnąć ręcznie - miła odmiana po "wszystko robiącym" Windows.

Po drugie - lekkość. SLiM i E17 po prostu.... miód na mojego biednego VirtualBox-a, który umierał pod jarzmem Ubuntu. Teraz rozwinął skrzydła.

Po trzecie - dokumentacja. Wszystko działa, krok po kroku opisane, właściwie nie miałem problemu ze znalezienim czegokolwiek. Opisane jest po prostu wszystko, w łatwym języku. Jakość instrkcji stuprocentowo wynagradza fakt iż często trzeba jakieś pliki systemowe zmienić manualnie.

Po czwarte - filozofia systemu. Taki sposób uczy Cię jak działa system a przez to rozwija.

Po piąte - model wydawniczy. Nowe wersje systemu to nic innego jak zwykły upgrade paczek pacman -Su raz na jakiś czas i nie muszę nic przeinstalowywać, pamiętać o oddzielnej partycji HOME, martwić się ustawieniami z HOMEDIR pochodzących z poprzedniej wersji systemu - nic. Niemal czysty bleeding edge w paczkach :)

Thursday, September 30, 2010

Ubuntu - to już dla mnie zbyt wiele

Moje używanie linuksa to najświeższe Ubuntu na beztrosko uruchomionym VirtualBox pod kontrolą radośnie działającego Windows 7 :) Dlaczego? Wygoda - nie muszę restartować komputera gdy zmieniam system, pełna kompatybilność sprzętowa - sprzęt nadal obsługuje Windows, który ma do niego dedykowane sterowniki nie zaś Linuks, który ich nie posiada i przez to nie mogłem np. wyłączyć głośników w Laptopie. Te dwa powody skłaniają mnie do korzystania z VirtualBox, ale co z dystrybucją?

Ubuntu zmienia się z roku na rok. Dzisiaj przeczytałem listę zmian Ubuntu 10.10 RC. Powiem krótko - nie interesuje mnie większość z nich. Oczywiście - nie uważam, że są złe. Moje użytkowanie Linuksa to ostatnio czysta deweloperka: Google Chrome, Vim, SSH, SCP, Ruby, Python, PHP - koniec. Najczęściej uruchamianym przeze mnie programem jest Terminal, w drugiej kolejności Google Chrome.

Wszystko co dla mnie jest fajne w nowej wersji systemu to nowe wersje programu. Wiem, że Canonical od dawna pracuje nad user-friendly systemu i dobrze im to wychodzi jednak dla mnie zmiany zachodzą w miejscach systemu, których w ogóle nie używam. Co rzutuje na moją pracę?
Chyba największą zmiana dla mnie jest nowa wersja oprogramowania, z mniejszą ilością bugów i nowymi featurami. Gdyby więc mieć tylko system, który cały ewoluuje na zasadzie apt-get update && apt-get upgrade to dla mnie to rozwiązanie byłoby idealne.

Minimalna dystrybucja - to był mój pierwszy pomysł. Debian w wersji base z doinstalowanymi paczkami, których wymagam. Z drugiej strony kiedyś już tak żyłem i Ubuntu okazało się o tyle lepsze, że gdy potrzebowałem czegoś "nagle" nieprzewidzianie to w Ubuntu już to miałem - w Debianie musiałem czekać aż się zainstaluje. Tak więc odchudzona wersja Ubuntu byłaby super. Na tyle obszerna aby miała już wiele rzeczy zainstalowanych, na tyle lekka aby nie przycinała VirtualBoxa. Jednak w międzyczasie wpadł mi do głowy inny pomysł - ChromeOS.

ChromeOS może okazać się "świętym gralem" dla osoby z moimi wymaganiami. Jest Google Chrome, jest konsola - cóż więcej mi trzeba? Oczywiście pod warunkiem, że będzie działał na VirtualBox - co się wkrótce okaże. Na pewno spróbuję tego systemu i przekonam się czy spełni moje oczekiwania. Do tego czasu pomyślę nad jakąś lżejszą dystrybucją Linuxa, która odciąży trochę moje zasoby VirtualBoxowe :)

Sunday, September 19, 2010

Nie tylko relacyjne bazy danych

Artykuł, na który ostatnio się natknąłem uświadomił mnie, że w projektach, które ostatnio tworzę wcale nie wykorzystuję relacyjnych baz danych. Wręcz przeciwnie. Do wyszukiwarki 1procent.zhr.pl wykorzystałem MongoDB. W ankiecie do głosowania ZODB, w mod_spam'ie, do którego nawet ręki nie przyłożyłem co prawda, chodzi o implementację Redis albo Memcached.
Kolejnym odkryciem było dla mnie: "Przecież Review Board poza RDBMS używa Memcached!". Nie musiałem więc daleko szukać realnego zastosowania polyglot persistence w projekcie, z którym ostatnio mam dużo styczności.

Cieszy fakt, że istnieje wiele prostych w użyciu, szybkich do przyswojenia dedykowanych narzędzi, które można wykorzystać w swoich aplikacjach. Czasy kiedy pisało się aplikację z użyciem wyłącznie MySQL w moim życiu mijają. Czuję, że częściej będzie to coś znacznie bardziej dedykowanego, a w przypadku większych projektów na relacyjnej bazie danych się nie skończy - a silników przechowywania informacji będzie więcej niż dwa (a na pewno jeden).

Flask - Nie tylko Bottle

W poprzednim wpisie pisałem o Bottle jako fajnym microframeworku dla Pythona. Jeszcze wczoraj zupełnie przypadkiem trafiłem na Flaska.

Na pierwszy rzut oka zniechęca mnie fakt, że zbudowany jest na WerkZeug. W drugim rzucie Flask wymaga ciut więcej kodu niż Bottle:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"

if __name__ == "__main__":
app.run()


Jednak później jest już tylko lepiej. Dostępna funkcja url_for do budowania poprawnych linków - to strzał w dziesiątkę. Dokładnie to czego brakowało mi w Bottle.

Renderowanie szablonów odbywa się tutaj bardziej w stylu Pylons. Domyślnym mechanizmem jest Jinja2.

Dokumentacja Flaska wypada o niebo lepiej aniżeli konkurenta. W dokumentacji Bottle zdażają się działy mające status todo. Tutaj nie znajdziemy nic podobnego.

Na koniec dwie rzeczy, które pozytywnie mnie zaskoczyły we Flask. Wsparcie dla Flash Messages oraz wbudowane loggery aplikacji.

Tuesday, September 14, 2010

Bottle i ZODB w jednym stali domu ...

... o swojej genialności nie mówiąc nikomu.

Wybory w Kręgu Harcerstwa Starszego Matrix - napisanie prostej ankiety. W końcu okazja, aby przećwiczyć coś nowego. Tym razem ZODB i Bottle.

Bottle wydaje się nadal rozwijany oraz w jakiś sposób subiektywnie "lepszy" niż Bobo. Posiada prosty wbudowany system szablonów. Bazuje on na założeniu, że szablony znajdują się w katalogu "views" dzięki czemu unikamy potrzeby konfiguracji (jak w Rails - convention over configuration).

W obu frameworkach brakuje mi jakiejś funkcji, która generowałaby poprawne linki - chociaż niby co to za problem zrobić sobie jednolinijkową funkcję do tego. Może tyle na temat micro-frameworków. Czas o ZODB.

O ZODB usłyszałem od mojego przyjaciela, który pracuje od jakiegoś już czasu w Plone i jest tym CM/F/S em zafascynowany. Kiedyś wracając z kina powiedział "No przypisujesz sobie jak chcesz atrybuty/klucze do obiektu i jest". Brzmiało obiecująco jednak nie okazało się tak piękne.

Plone robi bardzo dużo za nas. Pierwsze - nie wystarczy przypisać. ZODB jest bazą transakcyjną i nasze działania wymagają commitowania. Najprostsza sytuacja wygląda tak:
import transaction

#
# Tutaj sobie zmieniasz
#

transaction.commit()
Kolejna sprawa, dojście do której zajęło mi sporo czasu - ZODB wychwytuje zmiany tylko elementów korzenia. Tak więc:
# W bazie danych mamy taką strukturę:
# root.osoby = [{'id': 1, 'imie': 'Jan'}, {'id': 2, 'imie': 'Katarzyna'}]

# Łączysz się z bazą danych

root.osoby[1]['imie'] = 'Kasia'
transaction.commit()
Nie zadziała ponieważ ZODB nie przeczesuje w głąb struktur danych w celu poszukiwania zmian. Musimy więc zrobić na przykład:
osoby = root.osoby
osoby[1]['imie'] = 'Kasia'
root.osoby = osoby
transaction.commit()


Co odniesie skutek. Jak więc widać ZODB jest znacznie fajniejszy w Plone niż poza nim choć nadal jest fajny :)

Sunday, September 5, 2010

Metoda małych zwycięstw a Drupal 7

Od kilku miesięcy skrupulatnie obserwuję dział Critical Issues (D7) i powiem szczerze, że osobiście jestem przygnębiony.
Każdy kto choć odrobinę zajmował się metodologiami Agile czytał o potrzebie małych zwycięstw, które motywowałyby i podnosiły wydajność zespołu. To co dzieje się w critical issues jest dokładnym anty-przykładem.

Jak każdy wie Drupal 7 w wersji beta wyjdzie gdy ilość krytycznych błędów spadnie do zera. Wszystko pięknie jednak śledząc każdego dnia spadki i wzrosty oraz pobieżnie przeglądając statusy poszczególnych zgłoszeń jestem załamany.

Generalnie ilość zgłoszeń utrzymuje się na poziomie trzydziestu kilku. Bywają okresy, po których liczba ta spadała do dwudziestu lub nawet kilkunastu jednak był to raczej efekt mechanizmu, który po 14 dniach braku aktywności uznaje zgłoszenie za rozwiązane aniżeli faktyczne zakończenie rozwiązywania problemu.

Oczywiście mechanizm ten ma sens i zgłoszenia tak zamykane zawierały szereg łatek będących propozycjami rozwiązania problemu. Odnoszę jednak wrażenie, że proces recenzji trwa w nieskończoność i brak jakiegoś BDFL w tym całym zamieszaniu.

Wracając do małych sukcesów. Wiele projektów przyjmuje bardzo prostą i moim zdaniem słuszną zasadę - skupiamy się w danej wersji na zaimplementowaniu kilku - dwóch, trzech rzeczy i koniec. Cel jest niedaleki, do osiągnięcia w niedługim czasie i bardzo dobrze określony. W Drupalu brakuje mi dobrze określonego celu. Metoda SMART byłaby tutaj nieoceniona i znacznie przyspieszyłaby wydanie stabilne. Jednak już sam fakt braku "małych kroków" sprawia iż nie widać końca a utrzymująca się liczba bugów nie cieszy, brak jest małych sukcesów, które podniosłyby morale.

Dobrą drogą dla projektów OpenSource jest stawianie sobie malutkich celów. Dobrze widać to w przypadku Google Chrome. Niemal od samego początku wiadomo jakie nowe funkcje pojawią się w nowej wersji, każda kolejna wersja stabilna cieszy i przynosi kolejne usprawnienia. Wszystko dzięki po mistrzowsku zaprojektowanemu procesowi (Review process, continous integration, tests), używaniu nowoczesnych narzędzi (Buildbot, Review Board, coś na wzór ANT ale dla typowe dla GNOME) i jasno określonym zasadom. Drupal mógłby się tu wiele nauczyć.

Moim zdaniem po wydaniu Drupala 7 społeczność powinna przestawić się na wydania drupala 7.1, 7.2,7.3 z kolejnymi elementami przygotowywanymi przez społeczność. Projekt rozwijałby się na bieżąco, nadążał za obecnie panującymi trendami, był innowacyjny i nowoczesny. Wydanie wielkiego Drupala 8 za kolejne kilka lat pozostawiłoby ponownie siódemkę w tyle i sprawiło, że strony na niej oparte trącą myszką.

Życzę zespołowi Drupala 8 lepszego określania celów, stosowania metody małych sukcesów, małych wydań przynoszących cieszące użytkowników zmiany i rychłego wydania ósemki :)

Sunday, August 1, 2010

Maszyna integracyjna dla Drupala

Od kilku miesięcy śledzę spadającą i rosnącą momentami liczbę krytycznych bugów zgłoszonych na drupal.org. Zwane beta-blockers, ponieważ są to błędy nie pozwalające wydać wersji beta, to pojawiają się to giną. Dzisiaj przyjrzałem się treściom i komentarzom do zgłoszonych problemów.

Z grubsza wygląda to tak. Jest zgłoszony bug i w pierwszych trzech komentarzach zaraz opublikowana łatka. Potem następuje seria odpowiedzi w stylu "działa", "nie działa", " a u mnie zgłasza błąd ABC", "ja dostaję Exception takie" itd... W międzyczasie ktoś jeszcze opublikuje unit test, który ma sprawdzać poprawność rozwiązania. Dlaczego o tym piszę?

Wychodzi na to, że zgłoszony problem może wydawać się naprawiony do czasu kiedy jakaś osoba stwierdzi, że u niej nie działa i nie pojawi się znowu na liście beta-blockerów. Najgorsze w tym wszystkim, że to może trwać tygodniami. Zanim ktoś odpisze, odpali u siebie testy, zgłosi swój komentarz. Architektur może być wiele i problemy mogą wynikać z różnych przyczyn. Dramat.

O ile szybciej Drupal rozwiązywałby takie problemy gdyby posiadać maszynę integracyjną, na której wszystkie testy byłyby odpalane i testowane w znanym,wspieranym środowisku? Na przykład mieć na VirtulBox kilkanaście konfiguracji z różnymi systemami, wersjami MySQL/PHP i odpalać na nich testy proponowanych łatek. Polegać na wynikach tych testów pochodzących z maszyn integracyjnych a nie temu co mówi społeczność.

Łatwo zauważyć, że w prosty sposób wydanie projektu może być sabotowane przez zgłaszanie fikcyjnego problemu. Może, nie zablokowałoby to wydania w ogóle ale na pewno je opóźniło. Bardzo pod tym względem podoba mi się rozwijanie Google Chrome gdzie infrastrukturę - choć skromną - zapewnia Google. Testy automatyczne są i działa to wszystko - powoli, ale sprawnie.

Nie wiem z czego wynika brak zdefiniowanego procesu w Drupalu - braku infrastruktury czy doświadczenia głównych członków stojących za projektem. Moim zdaniem można byłoby się pokusić o rozproszony system testów - coś na zasadzie SETI@HOME. Ja osobiście chętnie udostępniłbym po sieci jakiegoś VirtualBoxa nocami. Zobaczymy.

@EDIT
Najpierw strzelam potem pytam. Istnieje rozproszony system testów przebudowywany obecnie. Można o nim poczytać na: http://qa.drupal.org/ oraz http://groups.drupal.org/drupal-org-testing-infrastructure. Jest też wtyczka do review o nazwie Coder :)

Monday, July 26, 2010

Umarł król niech żyje król

Pisałem swojego czasu o tym jak zauroczyła mnie swoją prostotą Sinatra o Werkzeug jako analogicznym rozwiązaniu dla Pythona. Dzisiaj przyszło mi wrócić do pewnego skryptu WSGI i zacząć mocno go przerabiać. Jedna metoda wystawiona na zewnątrz z użyciem Werkzeug z wykorzystaniem kilku funkcji pomocniczych.

Dzisiaj, kiedy przyszło mi dopisać do tego kilka dodatkowych metod znajdujących się pod innymi adresami i wysłanie formularza nie wytrzymałem. Werkzeug wymagała ode mnie wklepania masy kodu do mapowania URLi, potem napisania obsługi w application, do tego dokumentacja nie odpowiedziała mi na pytanie jak wystawić metodę tylko jako GET :| Poddałem się. Ta sytuacja skłoniła mnie do poszukiwań nowej Sinatry dla Pythona.

Tak trafiłem na framework Bobo. Jestem po prostu zauroczony! Banalne, proste dekoratory (jak w Sinatra) - kilka metod, nic wyszukanego. Gdyby ktoś był ciekaw jak podpiąć do mod_wsgi polecam artykuł na blogu Grahama Dumpletona "Using bobo on top of mod_wsgi". Krótko mówiąc - umarł król niech żyje król.

Werkzeug stał się w moich oczach krową i wyleciał z sektora, w którym miał być najlepszym. Teraz to takie Django w wydaniu zrób to sam. Czyli moim zdaniem - bez sensu. Bobo jest troszkę magiczne, ale ten rodzaj magii w Pythonie jest dla mnie nie tylko akceptowalny, ale nawet pożądany. Polecam wszystkim, którzy szukają wygodnego micro frameworka dla Pythona.

Sunday, July 4, 2010

Architektura typu plugin

Tworzyłem już naprawdę wiele stron wykorzystując frameworki MVC. Klocuszek po klocuszku, trybik po trybiku konstruowałem żmudnie kolejne mechanizmy, bloki, elementy, funkcje, klasy, obiekty, widoki, modele, kontrolery.
Jednak czy znasz to uczucie kiedy trafiasz na aplikację, która ... jest tym czego dokładnie szukałeś. Nie? Ja też nie ponieważ często trafiam na aplikację, która prawie jest tym czego dokładnie szukałem. Czasami widzisz program, który robi to co chcesz tylko, z grubsza zmieniłbyś w nim kilka drobiazgów. Co pozostaje zrobić w takim przypadku?
Można napisać bardzo podobny program od zera, jednak szlak Cię trafia że wynajdujesz koło na nowo tylko dla kilku detali.
Można spróbować przerobić toola, ale utrzymywanie swojego forka to wciąż uciążliwe i czasochłonne zadanie.
Rzadko istnieje trzecia opcja - możesz napisać plugin, który przekształci produkt pod Twoje potrzeby.
Na PHPCon 2010 dużym zainteresowaniem cieszyła się prezentacja "Wprowadzenie do Implementacji Archietktury typu plug-in". Emocje z nim związane były różne jednak mam wrażenie, że Ci, którzy nie do końca byli zadowoleni przeoczyli fakt iż moja prezentacja o Drupalu była właśnie o architekturze typu plug-in.
Drupal pozwala Ci zupełnie z zewnątrz, z poziomu własnego pluginu, zaingerować w najgłębsze mechanizmy. Wszystko dzięki dziesiątkom hooków, które udostępnia na różnych poziomach abstrakcji.
Jeżeli masz pomysł na przerobienie Drupala prawdopodobnie wystarczy, że napiszesz swój własny plugin i wszystko uda Ci się uzyskać w żaden sposób nie ingerując w oryginalny kod Drupala. Do tego nie będziesz musiał budować podstawowych mechanizmów, takich jak: użytkownicy, newsy, kategorie, menu, treści od nowa. Po prostu skorzystasz z istniejących, a miejsca, w których Ci nie odpowiadają - zmodyfikujesz.
Unikniesz w ten sposób wynajdowania koła na nowo. Polecam każdemu, kto zastanawia się czy skorzystać z gotowego CMSa czy wybrać framework, spróbować Drupala (jako frameworka programistycznego of course :))

W Polsce nigdy nie było lepiej

W minioną sobotę miałem przyjemność odbyć bardzo sympatyczną rozmowę w przedziale pociągu TLK relacji Gdańsk Wrzeszcz - Włocławek. Rozmawiałem z ludźmi myślę, że koło sześćdziesiątki. Wspomniałem o tym, że kilkanaście dni temu obroniłem dyplom, cieszę się, że już mam pracę, odczuwam jednak dyskomfort związany z widmem brania kredyty na całe życie w celu kupienia mieszkania. Słowo mieszkanie przy realiach cen w Gdańsku sprowadza się do kawalerka.
Dyskusja zboczyła na inne tory i mogłem dowiedzieć się jak było kiedyś. Przytoczę informacje, które pozyskałem w trakcie tej rozmowy. No więc kiedyś nie było problemu z dostaniem pracy. Możliwość zatrudnienia uzyskiwała już osoba w wieku lat szesnastu - otrzymywała wtedy opiekuna w zakładzie, który za nią odpowiadała. Kończenie studiów nie było powszechne. Już technik otrzymywał lepsze stanowisko w pracy zaś osoba z wykształceniem wyższym nie musiała się w ogóle martwić o zatrudnienie - była niemal natychmiast rozchwytywana na rynku pracy. Osób takich było stosunkowo niewiele ponieważ już do samego liceum szły osoby, które chciały iść dalej na studia. Reszta wybierała zawodówki i technika. Magister, czy inżynier był chętnie zatrudniany gdyż jako członek kadry zakładowej podnosił prestiż przedsiębiorstwa. Na uczelniach dostępne były stypendia różnych zakładów pracy, które spłacało się kilku letnim stażem odbytym w danym przedsiębiorstwie po ukończeniu studiów. Pracodawcy "bili się" o ludzi z wykształceniem wyższym, których była bardzo konkretna, ograniczona ilość.
Jeżeli ktoś chciał i był zdolny - a pracował - zakład chętnie wysyłał go na uczelnię, umożliwiał sześciogodzinny tryb pracy, dawał urlopy uczelniane na czas sesji oraz udzielał wszelkiego wsparcia w ukończeniu studiów. Tak było kiedyś. Kiedy zapytałem o to tajemnicze kiedyś - okazało się, że ten idylliczny obrazek to nic innego jak czasy socjalizmu w Polsce. Czasy, w których Polska zaciągnęła ogromny dług i żyła na kredyt, czasy, w którym produkowane dobra były natychmiast wywożone na tereny ZSRR a pułki w sklepach świeciły pustką. Czasy, w którym cała Polska żyła na krechę.
Pojawiło się jednak w mojej głowie pytanie. A jak wyglądało jakieś inne kiedyś? No więc kiedyś (wcześniej - przed okresem terroru socjalistycznego) była II Wojna Światowa, która jest złym przykładem szukania jak kiedyś w Polsce było. Dużo wcześniej kiedyś była I Wojna Światowa a jeszcze wcześniej kiedyś był rozbiór, po którym Polska pojawiała się na mapie dopiero po I Wojnie Światowej. Tak więc to już nie czasy współczesne, a więc odpada. Więc co tu dużo mówić - pozostało XX-lecie międzywojenne.
Skąd to pytanie? Skoro dzisiaj narzekamy często, że w Polsce nie jest dobrze to ... kiedy w Polsce było dobrze? I czy to było bardzo dawno temu? Jak wtedy było w Polsce? A może dałoby się czegoś nauczyć, wyciągnąć lekcję na dzisiejsze czasy.
Więc Mamy nasze XX-lecie między wojenne. Kiedy pytałem dziadków jak ten okres wyglądał... Cóż. Trudno szukać w tym okresie jakiś wzorców na dni dzisiejsze. Małżeństwa dążące do połączenia majątków, mezalianse, ludzie podzieleni na kasty, wszechobecne rzemiosło.
Od Okrągłego Stołu minęło 21 lat. Tyle co od końca I do początku II Wojny Światowej. Nasza elity były przez lata eksterminowane: I Wojna Światowa, II Wojna Światowa, okres socjalizmu. W Kwietniu nastąpiła do tego katastrofa w Smoleńsku.
Ten punkt widzenia uświadomił mnie, że nikt tak naprawdę w Polsce nie wie jak powinna wyglądać, bo Polska tak długo nie istniała na mapie, że nikt kto mógłby to wiedzieć - nie przeżył. Jesteśmy jak dziecko, które uczy się chodzić na nowo, raczkuje, wywraca się, potyka i wstaje znowu. Robimy kroczek za kroczkiem i raczkujemy i nie ma w tym nic czego należałoby się wstydzić.

Thursday, June 17, 2010

Profesjonalne PKP Intercity

28 Maja tego roku złożyłem zapytanie związane z pewną kłopotliwą dla mnie sytuacją, która spotkała mnie na Dworcu PKP w Kielcach w kasie Intercity. Dzisiaj, to jest 17 Czerwca 2010 otrzymałem bardzo satysfakcjonującą mnie odpowiedź. Jestem naprawdę zadowolony z uzyskanego efektu :) Przytaczam zarówno swój e-mail jak i odpowiedź InterCity.

Moje zapytanie
Witam Państwa!

Ostatnio powracając z południa Polski Państwa Kolejami bardzo niemiło zaskoczyła mnie następująca sytuacja: kasjerka poproszona o wystawienie biletu poprosiła mnie o dokładne informacje dotyczące przesiadek oraz numerów pociągów. Mówiąc iż nie posiadam takich informacji została mi wręczona karteczka z numerem telefonu Infolinii. Przy kasach nie było kolejek, a w obszarze budynku dworca nie dostrzegłem żadnego punktu informacyjnego. W takiej sytuacji spodziewałbym się udzielenia przez kasjerkę informacji o możliwych połączeniach, ich koszcie oraz możliwości kontynuowania podróży. Poczęstowany karteczką z numerem telefonu, którego koszt wynosi 1,28/minutę poczułem się najzwyczajniej w świecie zbyty. Moje pierwsze pytanie brzmi: jakie w tym zakresie obowiązki ma kasjer sprzedający bilety? Czy ma obowiązek udzielenia mi informacji o dalszym połączeniu oraz udzieleniu pomocy w rozpoczęciu lub
kontynuowaniu podróży?

Później sytuacja się skomplikowała. System nie pozwalał wystawić miejscówki na klasę drugą pociągu, którym miałem przebyć odcinek Kraków - Gdańsk. Kasjerka twierdziła iż zwracany przez system błąd nie wskazuje na brak miejscówek. Poprosiłem więc o wypełnienie biletu ręcznie - otrzymałem odpowiedź, że to niemożliwe. Poprosiłem więc o poświadczenie z kasy zwalniające mnie z opłat pobieranych przez konduktora w przypadku kupna biletu w pociągu - i ponownie otrzymałem odpowiedź, że to niemożliwe. Czy kasjer może wystawić bilet ręcznie w przypadku wystąpienia problemów z systemem? Czy kasjer może wystawić miejscówkę ręcznie w przypadku wystąpienia problemów z systemem? Czy kasjer może wydać poświadczenie zwalniające z pobierania opłaty u konduktora, w sytuacji, w której z obiektywnych przyczyn leżących po stronie pracownika InterCity nie udało się wystawić biletu w kasie?

Zakłopotany klient
--
><> Jan Koprowski
Odpowiedź Intercity

„PKP Intercity” S.A. uprzejmie dziękuje za uwagi zawarte w skierowanym e-mail.
Wszelkie uwagi naszych klientów są ważnym źródłem informacji o jakości świadczonych przez nas usług oraz pozwalają nam na wyeliminowanie
nieprawidłowości, których niestety czasami nie udaje nam się uniknąć.
Chcielibyśmy podkreślić, że wszystkie uwagi i spostrzeżenia zarówno z podróży naszymi pociągami, jak również podczas świadczenia usług przez Spółkę „PKP Intercity”, są przez nas dokładnie analizowane. Dążąc do stałej poprawy jakości oferowanych przez nas usług, w przypadkach uzasadnionych podejmowane są odpowiednie działania korygujące, mające na celu wyeliminowanie powstałych nieprawidłowości. Z tego względu opinie naszych podróżnych oraz wytworzony poprzez skargi i reklamacje dialog, bardzo sobie cenimy, gdyż daje nam możliwość doskonalenia poziomu obsługi podróżnych.
Rzetelność w obsłudze podróżnych jest podstawowym obowiązkiem pracowników naszej Spółki jak również pracowników, którzy w naszym imieniu reprezentują Spółkę „PKP Intercity”.
Uprzejmie informujemy, iż pracownik kasy biletowej powinien Panu udzielić stosownych informacji, tym bardziej, iż jak Pan twierdzi nie było kolejki podróżnych nabywających bilety na przejazd. Nadmieniamy, iz na Dworcu w Krakowie Głównym informacja znajduje się w holu głównym Dworca - okienko kasowe nr 13.
W kwestii wystawienia dokumentów na przejazd, kasjer biletowy nie może wystawić ich ręcznie, może natomiast wydać poświadczenie zwalniające z pobierania opłaty dodatkowej u konduktora.
Ponadto uprzejmie informujemy, że na okoliczności poprawy jakości świadczonych usług przez Spółkę „PKP Intercity”, treść złożonej przez Pana skargi przedstawiono do wiadomości wszystkim zainteresowanym pracownikom, aby podobne sytuacje nie miały miejsca.
Za nieprofesjonalne zachowanie pracownika kasy biletowej uprzejmie przepraszamy.

Wednesday, June 16, 2010

Przeglądarka na telefon

Wyobraźmy sobie świat, w którym nie istnieją przeglądarki dla telefonów komórkowych. Pewnego pięknego dnia przeglądając stare szpargały przypadkowo ocierasz starą lampę. Wychodzi z niej dżin i mówi, że uczyni dla Ciebie możliwym korzystanie z jednej z desktopowych przeglądarek na Twoim telefonie. Którą byś wybrał? Moje myślenie byłoby takie.
Internet Explorer? Nieee. Jest przecież za wolna i wszyscy piszą na nią w kółko wirusy. Po za tym są lepsze, bardziej zgodne ze standardami. Może Firefox? Ale kto chciałby czekać tyle czasu i zamulać telefon Firefoxem? Hmm Safari. Co Safari ma takiego czego nie ma konkurencja, poza tym - to dla maniaków Apple i iPodowców - nie dla mnie. No to co?
W moim przypadku na polu walki zostaje Opera i Chrome. Obie są szybkie, innowacyjne, tworzone z dużym przykładaniem się do look & feel klienta.
Obecnie Opera jest często najrozsądniejszym wyborem w przypadku przeglądarek internetowych na telefon. Jednak nawet gdyby istniała równie mocno rozwinięta konkurencja i tak byłaby w moim przypadku na drugim miejscu :)

Saturday, June 5, 2010

Windows code refactoring

Zastanawialiście się dlaczego Windows często wydaje sie tak ociężały? Jestem obecnie w trakcie pisania pracy magisterskiej. Extreme Programming i Alistair Cockburn ciąsają kołki na głowie wciąż mówiąc o wadze refaktoryzacji. Zastanawialiście się jak to jest z kodem źródłowym systemów operacyjnych? Wiadomo, że ciągła refaktoryzacja jest podstawą rozwoju, wzrostu wydajności, utrzymania elastyczności projektu. W jądrze systemu Linuks co kilka godzin (a może minut) jakiś maniak poprawia coś co zostało już obecnie zrobione wciąż usprawniające mechanizmy. Również architektura jest na bieżąco dostosowywana do zmieniających się potrzeb, warunków oraz rozmiarów projektu. Czy ktoś z was zastanawiał się kiedyś jak jest z systemem Windows? Ile razy dostajesz Windowsa? Raz. Ile razy dostajesz łatki? Średnio co miesiąc, ale czego one dotyczą? Kodu źródłowego systemu? Wątpię. Poprawiają znalezione błędy, łatają dziury. Czy kod systemu Windows jest w ogóle refaktoryzowany? Czy co kilka lat tworzony od nowa? Chciałbym kiedyś usłyszeć odpowiedź eksperta czy jego zdaniem taki kod ma w ogóle szansę być refaktoryzowanym. Zgodnie z zasadą rosnącego długu technicznego (czy ktoś go w Windows w ogóle spłaca?!) tańszym wydaje się napisanie Windows co 10 lat na nowo aniżeli refaktoryzacja starego kodu. I pewnie różnica między 9x, NT i Vistą na tym właśnie polega. Nie wiem jak to jest naprawdę i ktoś może uznać mój wpis za FUD, ale pomyślcie chwilę i powiedzcie czy to tak nie wygląda?

Wednesday, June 2, 2010

IE9 postawiło na ilość zdanych testów

Dzisiaj dzięki stronie css3.pl trafiłem na zestawienie IE9 Testing Center. Jak widać twórcy przeglądarki postawili na ilość zdanych poprawnie testów. Nie oznacza to, że IE9 posiada więcej zaimplementowanych nowinek. Tablica Web Designer's Checklist wskazuje na to iż w ilości obsługiwanych nowinek przoduje Google Chrome oraz Safari. Jednak to, że coś "działa" nie oznacza, że przechodzi testy i na odwrót. Już kilka lat temu Microsoft broniąc IE8 mówił iż zdanie testów ACID3 wcale nie oznacza zgodności ze standardami. W skrócie - można napisać przeglądarkę, która zdaje ACID3 na 100% i nadal źle wyświetla strony. Przemilczało jednak, że w drugą stronę już to nie działa.
Postawienie na zdawalność testów to na pewno dobry krok z punktu widzenia refactoringu kodu oraz późniejszego utrzymywania kodu. TDD zawsze to ułatwiało. Tutaj jest to prostsze bo testów nie trzeba opracowywać samemu (chociaż pewnie Microsoft posiada ich sporo). Nie jest to jednak ruch marketingowy. Wszak przeciętny świadomy, surfer ocenia czy jakiś selektor CSS3 czy nowość HTML5 mu działa, albo nie - nie patrzy czy działa zgodnie z warunkami testowymi. Dlatego przeglądarki takie jak Firefox, które często wprowadzają nowe funkcji działające w zły sposób będą cieszyły się lepszą renomą niż IE, które będzie wprowdzało nowości powoli acz konsekwentnie i rzetelnie. Aż nie chce mi się wierzyć, że piszę to o produkcie MS. Trzeba jenak przyznać, że podejście zepołu IE9 jest w końcu tym właściwym - zgodność ze standardami i zapewnienie wstecznej kompatybilności.

Miłe zaskoczenie - css3.pl

Dzisiaj chciałem sprawdzić jak ma się domena css3.pl. Patrzę - zajęta. Myślę "pewnie znowu jakiś baran kupił i trzyma nic na niej nie publikując". Byłem bardzo mile zaskoczony kiedy na witrynie znalazłem zestaw informacji o CSS3 :) w rodzimym narzeczu! Strona nie porywa wyglądem. Niewątpliwie jednak stanowi dobre źródło wiedzy o CSS3 i sporo podstawowych informacji o tej technologii. Brawo!

Tuesday, June 1, 2010

Pylons 1.0 :) już jest!

Post może ciut spóźniony, ale 28 Maja wyszło Pylons w wersji 1.0. Jeszcze kilka dni temu z niecierpliwością czekałem na ten dzień :]
Moim zaniem numerek 1.0 zmieni bardzo wiele. Ludzie często mają wrażenie, że taka wersja to oznaka stabilności. Ci, którzy nie używali Pylons bo uważali je za niewykończone w końcu będą mogli spróbować.
Jeden z twórców frameworka ludzi, którzy uważają Pylons za niestabilny z powodu braku wersji 1.0 określił:
That's a shame for your friends..
Moim zdaniem jednak coś w tym jest. To co najbardziej mnie denerwuje w Pylons to wkład pracy jaki trzeba było włożyć, aby przejść z wersji 0.9.n na 0.9.n+1. Mam cichutką nadzieję, że ekipa Pylons utrzyma wersję 1.0.x kompatybilną a kolejne "zmiany" będą wprowadzać dopiero do 1.x.0.
Wczoraj również przyjrzałem się WerkZeugowi. Dorobił się własnych routsów i jakiegoś systemu szablonów. Z jednej strony nikomu to nie szkodzi, z drugiej wystarczyło użyć Routes, Bakery czy Mako. Ale jak to bywa w świeci informatycznym, trzeba było wymyślić koło na nowo. Ot cała filozofia.

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.

Thursday, March 25, 2010

Dlaczego liczy się jakość implementacji?

Programowałem już w kilku frameworkach. Jeszcze kilka przede mną.Czy zgodzicie się, że wszystkie frameworki są takie same? Nie - wszak różnią się między sobą... To inaczej. Czy zgodzicie się, że robią to samo? Inaczej, że próbują osiągnąć ten sam cel? Moim zdaniem każdy framework (wszak nazywa się frameworkiem) ma za zadanie:
  • stworzyć środowisko pracy charakterystyczne dla prac webdeveloperskich
  • zapewnić bezpieczeństwo aplikacji charakterystyczne dla webserwisów
  • ułatwić utrzymywanie projektu poprzez separację - na przykład z użyciem wzorców projektowych
Każdy framework realizuje te cele na swój własny sposób. Jest jakaś warstwa obsługi bazy danych, tworzony jest jakiś wzorzec do udostępniania funkcji klientowi (MVC, REST, EDA), proponowany jest system wprowadzenia nieinwazyjnie logiki do warstwy HTML (szablony, widoki). Realizacja tych celów mogłaby stanowić pewną definicję frameworka.
W tym świetle frameworki nie różnią się od siebie. Wszystkie realizują swoje cele. Django czy Pylons, Rails, CakePHP, Symfony, Kohana albo Web2Py, Lift - wszystkie z definicji realizują te cele. Którego użyć do prostego projektu, który da się zrealizować w każdym z nich?

Wielu może dziwić, drażnić postawa często prezentowana przez Jarka Zabiełłę - zachwytu nad perfekcją programistów tworzących konkretny framework. Technologiczną doskonałością Merba, geniuszem z jakim zakodowany jest Lift. U mnie ta postawa znalazła w końcu grunt.
Lepsza jakość kodu i restrykcyjne coding standard (np. w Merb) oznacza wiele dobra: prostsza refaktoryzacja, mniejsza ilość potencjalnych błędów, znacznie zwiększone bezpieczeństwo, posunięty performance. Taki jest właśnie Merb.

Ponawiam pytanie: "Jaki framework wybrać do prostego projektu, który można stworzyć w każdym z nich?" odpowiedź - najdoskonalszy technologicznie. Jaki framework wybrać aby mieć pewność największego bezpieczeństwa? Najdoskonalszy technologicznie? Jaki framework wybrać aby moja aplikacja była możliwie najszybsza? Najdoskonalszy technologicznie.

Tak. Frameworki różnią się między sobą: dostępnymi wtyczkami, architekturą, możliwościami, językiem programowania. Do momentu, w którym którykolwiek z tych składników odgrywa rolę - walka między frameworkami nie jest równa i w konkretnych przypadkach wybór jednych przeważa nad drugimi. Jednak dla prostych projektów, gdy nie masz bariery poznania nowego języka programowania tylko doskonałość technologiczna może przeważyć nad użyciem jednego ponad drugim.

Mam nadzieję, że udało mi się oddać moje ostatnie przemyślenia, na których znalazło grunt podejście Jarka Zabiełły, który często rozwodzi się nad doskonałością techniczną pewnych rozwiązań :) Wszak dla najlepszych przestaje być ważne, że potrafią coś zrobić, a zaczyna być ważniejsze jak to zostało wykonane.

Skoro coś można zrobić na wiele sposobów to czemu nie ma budzić uznania i szacunku i być przez nas wybieraną technologia, która została zrobiona w sposób genialny i najlepszy?

Sunday, March 21, 2010

Co wkurza mnie w ludziach, którzy wielbią Railsy

Tytuł jest troszkę kontrowersyjny i powinien brzmieć "co wkurza mnie w ludziach, którzy wielbią jeden - jedynie słuszny - framework" bo o to mi naprawdę chodzi. Celowo jednak napisałem, że o Rails mi chodzi ponieważ wszyscy, którzy rażą mnie swoim podejściem wśród moich znajomych to właśnie Railsowcy.

Nie jestem uczulony na każdego kto broni jakiegoś frameworka. Tak na przykład bardzo lubię argumentację Jarka Zabiełły, który dałby się dosłownie poszatkować za Lifta, skoczyć w ogień za Merbem czy odtańczyć taniec radości przez Web2Py. Nie widzę nic złego w posiadaniu swojego ulubionego frameworka. Co więc mnie denerwuje?

Niepowetowanie rozdrażniają mnie osoby, które programowały tylko w jednym (nie ważne jakim) frameworku i mając takie doświadczenie opowiadają o nim jak o wybawieniu. Po prostu krew mnie zalewa. Ktoś programował sobie w PHP (na sucho): echo do HTML, include $_GET do ładowania stron, mysql_query do robienia zapytań i nagle [... tu wstaw nazwę jakiegoś frameworka, który stał się religią dla Twoich znajomych]! Po prostu objawienie! Ścieżka światła otworzyła się przed biednym, pogrążonym programistą i doznał olśnienia! I od tamtej pory nie rozstaje się ze swoją cudowną technologią, genialnym wybawicielem! Po prostu ... śmiechu warte. Tyle powiem.
Nie mogę znieść braku chłodnego dystansu do technologii, której się używa. Pewnej podejrzliwości i niepokoju: A może istnieje jeszcze inna, może lepsza technologia? Może to nie jest szczyt wszystkiego? Może w innych językach programowania istnieją inne równie dobre a może nawet lepsze frameworki? Taka właśnie postawa budzi we mnie szacunek do adwersarza i otwiera na jego argumenty.
Rozumiem jak najbardziej - użyciem frameworka jest ogromnym postępem i tak! zgadzam się w 100%! jest często niesamowitym, ekscytującym, powalającym na kolana odkryciem. Szczególnie w świetle czasu jaki zyskujemy - tworząc aplikację. Jednak zdrowe moim zdaniem jest gdy ów zachwyt pcha programistę do przodu, nie daje mu spokoju, każe poznawać nowe frameworki, lepsze technologie, doskonalesz rozwiązania. Nie mogę znieść gdy widzę, że ktoś po prostu na tym zachwycie - spoczął na laurach. Jego poglądy zaczynają wtedy dla mnie przypominać religię, a argumentacja staje się "nawracaniem" na moją stronę.

Mało kto będzie krytycznie i obiektywnie podchodził do frameworków jeżeli nie pozna na wstępie kilku. Poznanie wyłącznie jednego i zatrzymanie się na nim - w 99% skazuje człowieka na brak obiektywizmu. Nie jest wtedy ani dobrym adwersarzem do dyskusji bo jedyne co może powiedzieć, że to czego używa jest dobre (a często mówi, że najlepsze) - jednak co znaczą jego słowa kiedy nie ma porównania.
Dużo bardziej wiarygodną wypowiedzią jest dla mnie zdanie programisty, który nigdy nie programował we frameworku, o którym mowa, ale dużo o nim czytał i tworzył oprogramowanie w kilku innych pochodzących z różnych języków programowania niż opinia osoby, która poznała swój pierwszy framework i tak się nim zachwyciła, że nie pozwala jej to iść dalej.
Na koniec może troszkę powiewu optymizmu. Trzeba cieszyć się z każdej osoby, która zacznie używać frameworków. Nawet takiej, która uczyni z tego religię. Niech programuje w nim nawet nieświadomie i źle, ale zawsze będzie oznaczało to więcej lepszej jakości kodu aniżeli ta sama aplikacja miałby być pisana na sucho.

Tuesday, March 2, 2010

Gdyby pieniądze Microsoftu ...

Ostatnio kolega podesłał mi ciekawy artykuł Python + Django vs. C# + ASP.NET: Productivity Showdown. Złożyło się to z rozmową z jednym z moich współlokatorów o doświadczeniu pisania w .NET aplikacji webowych.

Przytoczny artykuł pokazuje w skrócie, że kilku niedoświadczonych programistów zaczynających swoją przygodę z Django może pobić wydajnością większą grupę doświadczonych C# piszących ten sam projekt w ASP.NET. To pokrywa się z moimi doświadczeniami z pracy. Jednak w tym wpisie chciałem zwrócić uwagę na coś innego.

Model MVC - pierwszy raz opisany w 1797 został zastosowany we wszystkich znanych mi frameworkach i okazał się dobrym rozwiązaniem. Microsoft dopiero w 2009 r. wypuścił stabilną wersję MVC.NET. Iron Python i IronRuby to próba nadgonienia przepaści pomiędzy ASP.NET a światem rozwiązań Open Source, w końcu umożliwienie wchłonięcia dobrodziejstw wszystkich projektów typu Django czy Ruby On Rails.

Ilość pieniędzy wpakowana w ASP zapewne jest ogromna. Zastanawiam się w jakim miejscu bylibyśmy dzisiaj gdyby te same środki przeznaczyć na rozwój takich projektów jak Ruby On Rails, Django, Pylons, Web2Py, Lift ,Merb czy chociażby Drupal.

Są to projekty o skromnych funduszach lub powstające niemalże wyłącznie dzięki dobrej woli wolontariuszy. Niemniej łamią stereotypy, wyznaczają nowe trendy w tworzeniu aplikacji sieciowych, są ponadczasowe a rozwiązania w nich zastosowane wyprzedzają swoją epokę. Gdzie byłby dzisiaj świat gdyby przeznaczyć na tego rodzaju projekty pieniądze jakie Microsoft zainwestował w ASP?

Odpowiedź na to pytanie istnieje. Masz ją nawet "przed oczami" lub na stronie startowej twojej przeglądarki. Tak jest! Zgadłeś! Odpowiedzią jest - Google.
Google jest jedyną znaną mi firmą, która powszechnie na dużą skalę korzystała z dobrodziejstw rozwiązań Open Source i inwestowała w nie pieniądze. Adaptacja jądra Linuksa w projekcie Android, własne patche do MySQL czy zmodyfikowany Python to tylko niektóre przypadki sukcesu Google w wykorzystywaniu tego co już zrobiono i udostępniono za darmo.

Wiele firm z powodzeniem korzysta z całych środowisk, ekosystemów udostępnianych przez Microsoft: serwery, usługi, fora, wiki, blogi, platformy multimedialne, narzędzia do pracy zdalnej i grupowej, aplikacje biurowe. Przykładów można byłoby mnożyć i mnożyć. Wtedy tworząc narzędzie dla firmy jesteś "zmuszony" tworzyć go w .NET. Być może nie jesteś zmuszony wprost ale jednak aplikacje pod produkty Microsoft pisze się najlepiej właśnie z użyciem tych technologii. Ba! Wyobraź sobie reakcje wyższego managementu na zażądanie Apache 2 i Python bo chcesz pisać coś w Django - kiedy oni wydali setki tysięcy dolarów na produkty firmy Microsoft. A Ty chcesz im powiedzieć, że niepotrzebnie - bo użyjesz sobie darmowego softu? Zbrodnia!

Może troszkę udemonizowałem scenariusz w poprzednim akapicie, ale to wyjaskrawienie jest moim zdaniem potrzebne. Google jest jedynym przedsiębiorstwem, w którym nie widać wszechobecności technologii Microsoftu. Z mojego punktu widzenia wygląda to tak, że Google chce wciąż mieć wybór w tym czego i jak używają. Czuć się dzięki temu wolnym i nieskrępowanym co czyni z nich niesamowicie elastyczną i innowacyjną firmę.

Mam wrażenie, że języki programowania znane ze świata Open Source ukierunkowują "na zewnątrz" zaś języki Microsoft "do wewnątrz". Python, Ruby czy Scala nie są związane z żadną konkretną technologią i dlatego powstające na ich bazie rozwiązania ukierunkowane są na nowe cele wyznaczające nowe kierunki. Tak robi Google i wiele innych firm kiedy tworzy coś nowego: Gmail, Google Docs, Youtube, Facebook, Twitter.
Platformy programistyczne Microsoft wymagają zawsze włożenia gro wysiłku w opracowaniu ich "pod systemu Microsoftu". Są więc ukierunkowane "do systemów Microsoft" działania z nimi, stworzenia API i do tego najlepiej się nadają - tworzenia własnych narzędzi dobrze zintegrowanych z ekosystemem ze stajni Billa Gatesa.

Myślę, że właśnie to "przywiązanie", to "zaplecze" jakie musi posiadać każda nowo powstała technologia wytwarzania oprogramowania z Microsoft sprawia, że nie starcza już tym technologiom "pary" aby stać się technologią, w której powstanie coś ponad epokowego i łamiące współczesne standardy.

Jak już wspominałem przywiązaniu temu nie podlega Google, wybierające do realizacji projektów technologie, które pozwalają rozwinąć skrzydła programisto i stworzyć coś - co jeszcze nie istnieje. Nie ograniczając ich ale dodatkowo dając wsparcie ich innowacyjnym pomysłom w stosowanej technologii.

Co więc byłoby gdyby Microsoft wkładał swoje pieniądze w rozwój Ruby On Rails, Django czy innych projektów Open Sourcowych? Mielibyśmy Google świata Open Source :] Czyż nie byłoby to piękne?

Tuesday, February 23, 2010

Rok 2010 rokiem przełomów w aplikacjach sieciowych

To wręcz niesamowite jak wiele dzieje się w tym roku w dziedzinie aplikacji sieciowych. Być może to tylko wrażenie, jakie można mieć co roku ale moim zdaniem jest to rok przełomowy.

Dzisiaj po 2 w nocy wyszła wersja Release Candidate 1 Gallery 3. Jest to ogromny krok w dziedzinie aplikacji do przetrzymywania zdjęć. Większość dostępnych w sieci skryptów zakłada, że istnieje jeden właściciel galerii, który publikuje w niej zdjęcia. Gallery to jedyny znany mi do tej pory system pozwalający w ramach jednej galerii tworzenie wielu albumów i przydzielania uprawnień do nich wielu użytkownikom.

Gallery posiada pewne bardzo proste - acz daleko idące w skutkach założenie - jeżeli nie masz dostępu do zdjęcia - nie masz do niego dostępu wogóle, nawet poprzez bezpośredni link. Gallery w wersji 2 realizowało to poprzez przetrzymywanie obrazków poza folderami dostępnymi przez Apache zaś każde żądanie pliku PNG, JPG czy innego było tłumaczone przez mod_rewrite na wywołanie skryptu PHP, który sprawdzał uprawnienia do pliku i ewentualnie zezwalał na jego wyświetlenie.

Niestety - przy galeriach dużych rozmiarów całość znacznie rzutowała na wydajność, wygodę i szybkość korzystania.

Gallery 3 to krok milowy w każdej tych dziedzin. Dzięki modelowaniu uprawnień na poziomie plików .htaccess udało się otrzymać wydajny i szybki mechanizm bezpieczeństwa. Celem stało się utrzymanie aplikacji sprawną, lekką i wydajną. Dołożono do tego interfejs oparty o jQuery. Całość zaś oparto na fantastycznym frameworku Kohana.

Kolejne zaskoczenie to milowe w dzidzinie od lat zgłaszanych braków Django 1.2. W końcu poprawki w dziedzinie modeli, obsługa wielu baz danych, zamknięcie wielu ticketów, które od lat straszą na Djangowym bug tracku. Django w końcu przełamuje barierę "argumentu za użyciem Pylons" jakim był brak możliwości obsługi wielu baz danych co czyni go znacznie bliższym zastosowań enterprise.

Skoro już przy Pylons jesteśmy. Nigdy nie wierzyłem, że dożyję dnia kiedy zostanie wydana publicznie wersja Pylons 1.0 beta. Jednak stało się. Pylons pretenduje do wersji stabilnej z niezmiennym API i w końcu może zacząć być używany w projektach gdzie liczy się stałość i ciągłość wersji w aktualizacji 3rd party components.

Nie można też pominąć Rails 3 - chociaż tutaj nie chcę się wypowiadać to z oglądanych przeze mnie prelekcji, wypowiedzi Yehudy Katz oraz wpisów na blogach Polskich Rubystów widać, że Rails 3 jest krokiem milowym w jakości tego frameworka ku doskonałości.

Wszystko wskazuje na to, że również Drupal 7 pojawi się w tym roku. Dwa dni temu została wypuszczona wersja Alpha 2 - co oczywiście w przypadku Drupala kompletnie o niczym nie świadczy - ale zawsze to jakiś krok do przodu. Oby prace poszły szybko - bo zapowiada się naprawdę fantastyczny framework.

Prawdopodobnie jeszcze wiele zaskoczeń czeka nas w dziedzinie aplikacji sieciowych - jednak Luty i Marzec to prawdziwy wysyp. Dzisiejszy dzień to jeden z tych, w których nie mogę uwierzyć, że jest aż tak dobrze. Oby więcej takich postępów i dobrze wykonanej pracy!

Thursday, February 11, 2010

MA starcie pierwsze - LaTeX

Zastanawiam się i nie mogę pojąć. Dlaczego LaTeXa uczono nas na pierwszym semestrze studiów kiedy faktycznie potrzebny jest dopiero teraz - na dziewiątym? Nie wiem. Może dlatego, żeby spłatać nam figla. A może dlatego, żeby sprawdzić czy istnieją jakieś genialne jednostki, które będą pamiętały jak się z tego jeszcze korzystało. Tak czy owak nadeszła ta chwila.
Do zainstalowania w Ubuntu 9.10 LaTeXa wystarczyło mi wybranie w Synapticu dwóch paczek. texlive oraz texlive-full. Później chodziło już tylko o znalezienia wygodnego edytora. Chociaż napisany w Qt - bardzo do gustu przypadł mi Texmaker.

Pierwszą rzeczą, którą zmieniłem w Texmakerze było ustawienie opcji Quick Build na pdflatex + pdf view. Generowanie plików PDF pozwoliło mi na zamieszczanie w dokumencie plików jpg przy użyciu paczki graphicx.

Chyba najbardziej dumny byłem z modelu paczek, który sobie wypracowałem. A wygląda to u mnie wstępnie mniej więcej następująco.

\usepackage{magisterka} % kilka ustawień TeX dla magisterki
\usepackage[MeX]{polski} % używamy platex do łamania
\usepackage[utf8]{inputenc} % kodowanie znaków
\usepackage[T1]{fontenc} % ustawianie dzielenia wyrazów typowe dla europy
\usepackage{graphicx} % rysunki
\usepackage{indentfirst} % wcinaj pierwszy paragraf
\usepackage{listings} % zalaczanie kodu zrodlowego
\usepackage{multicol} % tworzenie fragmentow lamanych na kolumny


Wielu rzeczy brakuje, ale jest to co dla mniej najważniejsze czyli łamanie wyrazów zgodnie z zasadami polskiej gramatyki, wcinanie pierwszego akapitu w rozdziale, listingi języków programowania i możliwość tworzenia układów wielokolumnowych :] Myślę, że ta sekcja będzie rozstała się w trakcie dodawania kolejnych rozdziałów.

Poza właśnie takimi automatami jak przenoszenie wyrazów - co LaTeX robi świetnie - bardzo ucieszyło mnie odkrycie instrukcji \import pozwalającej wręcz wstawiać zawartość innych plików do treści mojej pracy. Dzięki temu każdy rozdział magisterki mam w oddzielonym pliku, mam nawet specjalnie wydzielony plik na paczki :] Taki podział sprawia, że wszystko jest bardzo czytelne a modularność rozwiązania pozwala wszystkim łatwo zarządzać.

Skoro już o listingach wspomnieliśmy. Szalenie użytecznym jest rozpoznawanie języków programowania w nich używanych. LaTeX wspiera ogromną ich ilość i po swojemu "koloruje" składnię to znaczy, pochyla komentarze, pogrubia słowa kluczowe itd... Ponieważ języka Go jeszcze nikt specjalnie w LaTeXu nie uwzględniłem napisałem swoją własną TeXową łatkę do pliku. Wystarczy ściągnąć najświerzą wersję paczki listings spachować plik lstdrvrs.dtx patchem o poniższej treści:

1615a1616,1648
> % \subsection{Go}
> %
> %
> %
> % \begingroup
> % \begin{macrocode}
> %<*lang2>
> %%
> %% Go language definition (c) Google
> %%
> \lst@definelanguage{Go}%
> {morekeywords={break,default,func,interface,select,%
> case,defer,go,map,struct,%
> chan,else,goto,package,switch,%
> const,fallthrough,if,range,type,%
> continue,for,import,return,var},%
> moredirectives={bool,byte,float32,float64,int8,int16,int32,int64,%
> string,uint8,uint16,uint32,uint64,%
> float,int,uint,uintptr,%
> true,false,iota,%
> nil,%
> cap,close,closed,copy,len,make,new,panic,panicln,print,println},%
> sensitive,%
> morecomment=[l]//,%
> morecomment=[s]{/*}{*/},%
> morestring=[b]",%
> morestring=[b]`,%
> }[keywords,comments,strings,directives]%
> %
> % \end{macrocode}
> % \endgroup
> %
> %

http://jan.koprowski.zhr.pl/tex/lstdrvrs-go.patch

Skompilować komendą make i przekopiować powstałe pliki *.sty do katalogu /usr/share/texmf-texlive/tex/latex/listings

I tyle :] Język Go jest już wspierany przez LaTeXa :]

Ostatnim osiągnięciem, którym chcę się pochwalić jest zrobienie pliku magisterka.sty, który ma za założenie konfigurację niestandardowych dla LaTeXa rzeczy. Na razie znajduje się tam tylko kod dodający kropki za numerami rozdziałów:

%
% Dodawanie kropki po numerze sekcji
%
\def\@seccntformat#1{\csname the#1\endcsname.\space}


LaTeX to rzeczywiście system, godny pisania w nim Pracy Magisterskiej!

Sunday, February 7, 2010

Makefile w języku Go

Go jest chyba pierwszym językiem, który wspiera tworzenie Makefile czyniąc je banalnie prostym:

include $(GOROOT)/src/Make.$(GOARCH)

TARG=calc
GOFILES=\
   calc.go\

include $(GOROOT)/src/Make.cmd

Praca magisterska make your knowledge out of date

Pisanie pracy magisterskiej uświadomiło mi jak wiele do życzenia pozostawia aktualność wiedzy zdobytej w trakcie studiów. Zderzenie ze światem Internetu, metodologii będących na topie, praktyk oraz kierunku w jakim poszły języki programowania - zwaliły mnie z nóg. Kiedy zaczynam czytać artykułu w języku angielskim nagle moja wiedza nie tylko przestaje być aktualna, ale wręcz mam wrażenie że "polski internet" stanął w miejscu kilka lat temu. Czuję się bardzo zacofany względem osób na bieżąco dokształcających się z dziedzin dotyczących trendów we współcześnie powstałych języka programowania. Wiadomo - student uczy się sam i tylko od niego zależy co potrafi. Gdy jednak uświadomię sobie na jak "zacofane" technologie musiałem tracić całe godziny wykładów, laboratoriów, prac zaliczeniowych, projektów - gdy tym czasem świat gnał do przodu... To przerażające. Część mojej wiedzy ze studiów można byłoby streścić na jednym wykładzie pod tytułem "historia informatyki" zaś czas marnotrawiony na wkładanie do głów rzeczy nieaktualnych poświęcić za pokazaniem rzeczywistych kierunków zmian w jakim idzie informatyka.

Mam nadzieję, że dożyję czasów kiedy Władze Uczelni przejrzą na oczy i zamiast dodawać swoim pracownikom dodatkowej papierkowej roboty i obowiązków nijak związanych z pracą naukową zostawią wykładowców w spokoju i pozwolą im stawać się coraz lepszymi ekspertami dziedzinowymi, którzy będą w stanie przekazywać studentom naprawdę najświeższą wiedzę. Będąc świadomym ogromu obowiązków kładzionych na wielu pracowników naukowych nie dziwię się, że kolejny raz wykład jest prowadzony z tych samych pożółkłych folii pamiętających czasy przewodu doktorskiego Pana Profesora. Niemniej nikt na tym nie korzysta a student wychodzi z uczelnią na funkcjonujący w obecnie obowiązujących realiach rynek pracy - z wiedzą, która była aktualna dekadę temu.

Szczególnie wielkim wyzwaniem jest tutaj informatyka (oraz prawo) ponieważ te dwa mają najwyższy współczynnik dezaktualizacji w czasie. Wymagają więc ciągłego wysiłku i nieustannej pracy w "bycie na bieżąco".

P.S. Za zacofane technologie nie uważam bynajmniej tak elementarnej wiedzy jak szlify w programowaniu w C czy C++ tudzież sędziwych językach programowania, które po prostu są powszechnie wykorzystywane na rynku z racji na już powstałe i mające się dobrze od dziesięcioleci projekty - patrz choćby jądro Linuksa.

Sunday, January 31, 2010

"Wychowawczy" aspekt wlepiania mandatów

Bardzo często z mojego roztrzepania dostaję mandat. Już się przyzwyczaiłem. Insipiens lex sed lex. Jednak najbardziej szokuje mnie podejście wszystkich, którzy wlepiają mi mandaty.
Za każdy razem, gdy jeden z funkcjonariuszy zajmuje się formalnościami drugi udziela mi pouczenia. Ostatnio jechałem bez świateł rowerem. Był wieczór. No i zgadzam się - słusznie dostaję mandat. Trwało to z 7 minut... ale czemu przez te 7 minut muszę słuchać gadki w stylu "popełnił Pan przestępstwo, jest Pan winien przekroczenia artykułu ble ble ble ..." i tylko słyszę jaki to ja jestem zły, szkodliwy niedobry. Gość produkuje się już od 5 minut ... a ja nadal nie wiem jakie powinienem mieć oświetlenie na rowerze, żeby nie dostać kolejnego mandatu! To jest gadka! Nie dość, że tobie ubywa kilkadziesiąt złotych z kieszeni to jeszcze dostajesz 7 minutowe bombardowanie negatywnymi informacjami, które wpędzają Cię w przygnębienie. Nie wiem czemu to ma służyć. Na mnie to działa jak "czuj się jak zły bandzior bo przekroczyłeś prawo". I gdzie ta resocjalizacja w Polsce?! Chyba w bardzo głębokim więzieniu bo na ulicach to wystawiający mandaty produkując "po kawałku" z dobrych ludzi - bandziorów - częstując ich swoimi tyradami.

Inna sytuacja. Instynkt, który wyrobiło we mnie harcerstwo, odjeżdża SKMka, widzę, że mężczyźnie zamknęły się drzwi przed nosem, to automatycznie, bez myślenia otwieram je metodą awaryjną, żeby facet zdołał wsiąść. No i znowu czułem się potraktowany jak ostatni bandzior przez sokistów, którzy swoją gadką spokojnie, gdyby trwała choć chwilę dłużej, mogliby wzbudzić we mnie szczerą chęć łamania prawa na złość im lub bycia bandziorem bo takie emocje we mnie produkowały ich słowa. Czułem się traktowany jak przestępca. Ja, instruktor ZHR, człowiek, który postąpił według automatów, które programuje w człowieku społeczeństwo poprzez pożądane przecież w Państwie postawy społeczne wpajane w Harcerstwie. Czułem, że Harcerstwo wykształciło we mnie dobro, za które teraz płacę karę, za które jestem potraktowany jak człowiek wyjęty spod prawa, jak bandyta.

Harcerstwo nauczyło mnie również karności i posłuszeństwa. Dlatego mandat przyjmę zawsze bez słowa, ale drodzy funkcjonariusze mówcie jak powinno być, a nie jakim złym jestem człowiekiem kiedy dostaję mandat! Pozytywy jeszcze nikomu nie zaszkodziły.

Tuesday, January 26, 2010

Instalowanie GuestAdditions na Debianie

Prosta instrukcja:

1. Login as root;
2. Update your APT database with apt-get update;
3. Install the latest security updates with apt-get upgrade;
4. Install required packages with apt-get install build-essential module-assistant;
5. Configure your system for building kernel modules by running m-a prepare;
6. Click on Install Guest Additions… from the Devices menu, then run mount /media/cdrom.
7. Run sh /media/cdrom/VBoxLinuxAdditions.run, and follow the instructions on screen.

źródło: http://virtualbox.wordpress.com/doc/installing-guest-additions-on-debian/

Saturday, January 16, 2010

Sposób na StarCraft-a w Windows 7

Po odpaleniu StarCrafta w nowej wersji Windows kolorystyka jest szalenie pstrokata, brakuje wiele kolorów, a w ich miejscu pojawia się turkusowe tło.
Rozwiązaniem problemu jest wyłączenie pliku explorer.exe (czyli pulpitu) na czas gry. Można to zrobić poniższym skryptem.

taskkill /f /IM explorer.exe
"C:\Program Files\Starcraft\StarCraft.exe"
pause
start explorer.exe


Zmodyfikowanym o ścieżkę do StarCraft.exe

Tuesday, January 12, 2010

Rada na brak sterowników do Windows 7

Na moim laptopie od bardzo niedawna gości Windows 7. Niestety Fujitsu-Siemens nie wypuściło sterowników do Amilo Pro V3525 dla tego systemu zaś instalowanie sterowników Windows Vista poza powodowaniem dziesiątek komunikatów o niezgodności lub błędach nie dawało efektu.
Ratunkiem okazało się przed uruchomieniem magicznego setup.exe ustawienie we właściwościach wstecznej kompatybilności z Windows Vista SP2. Sterowniki instalowały się jak marzenie (bez mrugnięcia okiem) i wszystko zaczynało po prostu działać :)