Trochę historii
Ponieważ jest to prywatny blog, mogę sobie na trochę wodolejstwa pozwolić :). Sporo osób pewnie nie wie nawet, jak właściwie doszło do wydzielenia tego projektu, gdyż dyskusja toczyła się na prywatnej części forum OpenPB. Na samym początku było tam gwarno i debatowaliśmy sobie o różnych koncepcjach. Zapisałem się do projektu, żeby pomóc właśnie przy głupotkach pokroju systemu szablonów itd. i zauważyłem, że o ile było pewne, że takowy system będzie wykorzystany, nie było zgody co do wyboru konkretnego typu. Część obstawiała Smarty, ale były tu wątpliwości. Niektórzy uważali, że nie był on skrojony do naszych potrzeb, a ponadto miał jedną cechę, która go mogła zdyskwalifikować: był na PHP4. Działo się to pod koniec 2004 roku, zatem dopiero parę miesięcy po premierze "piątki". Ostatecznie stanęło na tym, że wydzielimy parę podprojektów, nad którymi pracować będą pojedyncze osoby. Były to na samym początku: Open Power Template, Open Power Driver i Open Power Setup, później mignęło gdzieś jeszcze Open Power Count. OPD przypadł Borze, który go przez jakiś czas rozwijał, mi przypadł OPT. Pod koniec listopada puściłem pierwszą wersję, nazwaną szumnie 0.01 :). Nie potrafiła ona dosłownie NIC. Systemiki szablonów na własne potrzeby pisałem już wcześniej, lecz to od początku był projekt nieco większego kalibru. Pierwszą instrukcją, jaka się pojawiła, była sekcja i wtedy też narodziła się charakterystyczna składnia instrukcji ze znakiem równości ({section=costam}). W takiej numeracji projekt dotrwał do wersji 0.06 i nawet miał wtedy pisaną w czystym HTML-u dokumentację.
Jakość kodu pozostawiała sporo do życzenia. Było tam trochę grochu z kapustą, a o jakimkolwiek rozszerzaniu nie mogło być mowy, podobnie jak o zaawansowanej detekcji błędów. OPT nawet nie budował wtedy żadnego drzewa, tylko po prostu każdą sekwencję w klamerkach od razu kierował do odpowiedniej metody, która to kompilowała :). Same instrukcje były zaś funkcjami. Pojawił się krótki epizod z wersją 0.1.0, później zaś był przeskok na 0.2.0 i wtedy też pojawiły się równie słynne dopiski w stylu "-dev5". Taki skok w numeracji podyktowany był tym, że napisałem kompilator od początku; zaczął on wreszcie budować drzewko. Prace się trochę przeciągały, jako że i z samym OpenPB było krucho. Na bodajże OPT 0.2.0-dev3 napisana została pierwsza wersja Zyxist.com.
Cały rok 2005 OPT spędził jako wersja rozwojowa i normalką były drastyczne zmiany łamiące kompatybilność, jak np. przejście na camelStyle. W końcu stwierdziłem, że taka prowizorka dłużej istnieć nie może i trzeba wreszcie zacząć to scalać i wprowadzić ład. Zamiast 0.3.0, pojawił się już numerek 1.0.0 i wtedy całkowicie posypała się numeracja wersji. Zacytuję tutaj mój własny wpis na blogu z 26 lutego 2006: "Tymczasem w OPT numeracja posypała się już do reszty :), ale to szczegół. Przepisałem praktycznie od nowa plik opt.class.php, ale dalej robię RC3". Tak, prawie cały kod został napisany od nowa, łącznie z kompilatorem (i to wszystko w ramach "Release Candidate" - chore, prawda? Aż krew w żyłach zastyga, jak to teraz czytam). Wtedy, po dyskusji również na tym blogu, pojawiły się komponenty, a w środku wakacji w końcu ukazała się finalna wersja.
Zalety i wady
Prace nad tym projektem były niekiedy naprawdę zakręcone, jednak sporo mnie nauczyły. Metodą prób i błędów wytworzyłem metodykę pracy, narzędzia, a także cele oraz filozofię działania. Opracowując nowe rozwiązania, zapoznałem się z technikami ich wydajnej implementacji, co w sumie przydaje się także przy pracach nad innymi projektami. Można powiedzieć, że dzięki OPT nauczyłem się pisać prawdziwe aplikacje.
Dużym błędem było zaniedbanie zaplecza internetowego oraz bazy wiedzy, tudzież dokumentacji. Nad wszystkim pracowałem sam i babranie się z tym wszystkim pochłaniało więcej czasu, niż mi się chciało przeznaczyć. To było przyczyną problemów z osiągnięciem naprawdę dużej popularności. Zdumiewać może, że pomimo tych oczywistych braków, OPT jednak zaistniał w świadomości polskich programistów i nawet zdobył fanów. Niedawno dowiedziałem się, że biblioteka... wchodzi w skład programu nauczania w krakowskiej Wyższej Szkole Zarządzania i Bankowości, gdzie informatykę wykładają pracownicy AGH. Jest całkiem możliwe, że podobnie jest również na mojej uczelni i za dwa lata będę się uczyć o własnym projekcie, którego kod znam prawie na pamięć (ciekawe, jak będzie wyglądać w moim przypadku np. pisanie z tego kolokwium :)).
Spojrzenie w przyszłość
Niestety, w pewnym momencie nowych pomysłów nie mogłem już wdrożyć do dotychczasowego OPT, ponieważ musiałem zachować wsteczną kompatybilność. Plan napisania OPT 2.0.0 został oficjalnie ogłoszony we wpisie "OPT Core Duo" z dnia 9 kwietnia 2007 roku, czyli prawie rok temu. Popatrzmy, co wtedy wypisywałem i jak to się ma do rzeczywistości.
- OPT2 posiadałby podwójny kompilator, jako że stary jest zbyt dobry i użyteczny, by go się tak brutalnie pozbywać. - po roku stwierdzam krótko: ROTFL!
- Dualizm wymusi opracowanie nowej metody tworzenia instrukcji skonstruowanej tak, aby kod mógł współpracować z oboma kompilatorami jednocześnie. - tutaj wyraźnie widać, dlaczego po pierwszym pomyśle nie powinno siadać się do kodowania. Lepiej dać się mu uleżeć i w końcu znajdziemy coś lepszego.
- ponadto, znając życie, uda mi się całą funkcjonalność w kilkunastu kilobajtach zmieścić - nominacja w kategorii "Najbardziej debilne stwierdzenie w historii Zyxist.com". Aktualna objętość kompilatora OPTv2 to prawie 80 KB.
- na pewno nie będę zabierać się za to przed wydaniem finalnej wersji Open Power Forms - a OPF-a jak nie było, tak nie ma. Ten skądinąd całkiem fajny projekt prześladuje fatum.
- Tak więc OPT (...) jest gotowy do ekspansji w tym kierunku, tyle że jako kolejna opcja, a nie zamiennik dla autorskiego parsera. - bez komentarza.
Rzeczywistość okazała się nieco inna. Wprawdzie w katalogu rozwojowym opt1 mam folder newcompiler i nawet są tam jakieś pliki PHP, ale ostatecznie kod powstał całkowicie od zera, z jednym, uniwersalnym kompilatorem pracującym w kilku trybach i zezwalającym na regulowanie restrykcyjności sprawdzania składni XML. Pierwsze parę kilobajtów nowej wersji napisałem jeszcze w sierpniu i wrześniu, ale były to podstawy podstaw i zostawiłem to na jakiś czas. Pod koniec listopada stwierdziłem, że trzeba się w końcu za to wziąć. Spędziłem jeden dzień na pisaniu klas drzewa węzłów oraz głównego mechanizmu kompilacji i kiedy miałem to za sobą, reszta poszła już z górki. Prace nad nowym OPT idą niesamowicie szybko w porównaniu z tym, przez co przechodziła poprzednia wersja. Minęły zaledwie 4 miesiące, a 80% funkcjonalności jest już gotowe i czeka na testy. Trochę pracy oszczędza mi grupa Invenzzia (eXtreme robi świetną robotę ze stroną WWW), a dzięki zdobytemu wcześniej doświadczeniu nie tracę już tyle czasu na eksperymentowanie.
Zakończenie
OPT jest projektem mego życia. Istnieje on jednak dalej dzięki Wam, drodzy użytkownicy. Systemy szablonów wcale nie są ślepym zaułkiem i mają olbrzymi potencjał... ale na pewno nie będzie on wykorzystany, brnąc dalej w przepisywanie zwykłych pętli na inną składnię. Czy tej bibliotece uda się to wreszcie wykazać? Zobaczymy...















Napisał snipe w niedzielę, 30 marca 2008 o 23:02
Wypada mi podziękować za OPT bo sam go używam w kilku projektach :) czekam na dalszy rozwój :)