Jun
26
2005
Filed under Ogólne by Łukasz Dywicki
Jako, że od tego poniedziałku rozpoczynam pracę nie będę mógł tyle czasu poświęcać Thorowi. Dodatkowym utrudnieniem będzie brak kompa po pracy. To nie koniec trudności. Po zciągnięciu komputera do Bydgoszczy (gdzie znalazłem pracę) będę miał problem z internetem. Ogólnie trudno mi powiedzieć coś więcej niż to, że mam zacząć prace. Poważnie zapowiada się hardokorowy tydzień, nie tylko ze względu na to, że będę wstawać rano. ;)
Pierwsze wrażenia z biura pozytywne. Nie mogę się doczekać pierwszego zadania, słowem zżera mnie ciekawość… o tym czy Bydgoszcz zmieni w moich wizerunek z brzydkiego miasta na gorszą lub milszą mieścinę będę pisał… (za jakiś czas), o wrażeniach z pracy i o pierwszym zadaniu powiem tyle, ile będę mógł (test już miałem!).
Co do Thora. Totalnie zmieniła się budowa parsera. Obecny, jeszcze nie do końca sprawny przechowuje obiekty do samego wyświetlenia aplikacji, czyli zmiany wykonywane z poziomu aplikacji nie będą problemem, a nawet te z poziomu szablonu winny być przeprowadzane względnie łatwo. Stary parser zaraz po znalezieniu komponentu parsował go, dodatkowo nie miał możliwości zagnieżdżania komponentów wewnątrz siebie, co było bardzo poważną wadą. Długie godziny spędzone nad Prado jednak zaowocowały nowym parserem (swoją drogą zasada działania bardzo zbliżona). Mam nadzieję, że uda mi się zaaplikować cache do parsera, myślę też o tym, czy nie zapisywać ‘względnie’ skompilowanych szablonów. Przetrawię to w tym tygodniu.. co do buforowania obiektów – myślę, że starczy serializowanie obiektu na podstawie ID i zapisywanie w pliku…
Garść koncepcji rzucę na pewno za jakiś czas, póki co przestudiuję raz jeszcze wzorce projektowe.
Jun
23
2005
Filed under Ogólne by Łukasz Dywicki
Thor, szczegóły no.2
Z wpisów zamieszczanych tutaj można wywnioskować, że pracuję tylko nad Thorem. Nie zaprzeczam, że poświęcam mu dużo czasu, można powiedzieć, że aż za wiele.
Chciałem rzucić garścią informacji – co dodałem.
Zaaplikowane różne wersje językowe na poziomie wyjątków, czyli przy pojawieniu się jakiegoś problemu wystarczy użyć: throw new Exception( LanguageContainer(‘Blad skladni’, ’JakisTamKominukat’) );
Myślę nad dodaniem do komponentów źródeł danych, to znaczy – w kodzie dawałoby się tylko: <thor:Komponent datasource=”tutaj_jakies_zrodlo” />
Dalsze pomysły związane z komponentami to możliwość ustawiania atrybutów HTML takich jak style, border, class aby maksymalnie uprościć ich budowę.
W fazie testów jest też coś na kształt magazynu zmiennych. Można powiedzieć, że jest to klasa, która ma za zadanie przy użyciu sesji utrzymywać dane, aby same komponenty wiedziały co z nimi się wcześniej stało. Ot, przykładowo czy panel ma być ukryty czy też widoczny.
Wpadłem na niebanalny pomysł z CMSem – pomyślałem, ze skoro Thor staje się coraz bardziej komponentowy to czemu by nie zainwestować w coś na kształt panelu treści? Jedyne, co trzeba zrobić to określić skąd pobierać dane (tutaj miejsce dla źródeł danych) oraz typ klasy (news, artykuł itp.). Planuję użyć do uzyskania odpowiedniego efektu wzorca stratega, gdzie poszczególne klasy we własnym zakresie aplikują metodę zwracającą kod.
Jeśli wszystko się pozytywnie rozwinie to za jakiś czas wrzucę jakąś prezentację.
Chciałbym też wspomnieć, że znalazłem pracę.:)
Jun
19
2005
Filed under Thor by Łukasz Dywicki
Prace nad Thorem posunęły się do przodu. Mam teraz podstawowe klasy – TComponent, TParser (parser komponentów), ConfigParser i fabrykę do niego. Przy okazji chciałbym się pochwalić rozwiązaniem, jakie wymyśliłem.
Podobnie jak w Prado każdy komponent to klasa, która ma określone metody i atrybuty. W We wcześniej wymienionym frameworku w pliku konfiguracyjnym komponentu definiuje się metody do pobierania/ustawiania atrybutów poprzez wpisanie w pliku specyfikacji danego komponentu. U mnie wygląda to nieco inaczej – klasa TComponent, z której dziedziczą wszystkie pozostałe komponenty ma zaaplikowaną metodę __call(), która umożliwia tworzenie ‘wirtualnych metod’. Tzn. metod, które nie istnieją w klasie macierzystej.
Może przedstawię fragment pliku konfiguracyjnego:
[properts] Action = text Method = text DefaultLogin = text DefaultPassword = text [events] OnClick OnSubmit [Action] get = true set = true [Method] get = true
Teraz, chyba będzie łatwiej zrozumieć ;), wszystkie sekcje, które rozpoczynają się od wielkiej litery traktowane są jak atrybuty komponentu. Sekcja Method odnosi się do atrybutu Komponent::$Method. Teraz, gdy w sekcji Metod jest ustawiona dyrektywa get na true będzie można odwoływać się w kodzie do tego atrybutu poprzez getMethod w szablonie.
Wiem, że to troszkę niejasne, ale kiedy uda mi się stworzyć jakiś działający przykład to nie omieszkam pokazać. Przykładowy kod szablonu to:
<thor:Komponent ID=”C1” params="true">Tutaj jakoś kod</thor:komponent> tutaj kod html <thor:Inny ID="C2" onclick="doSth();" />
Jun
15
2005
Filed under Thor by Łukasz Dywicki
Projekt, o którym wspomianłem wcześniej został nazwany. Inspiracją nazwy był Odin beli. Sięgnąłem do historii o wikingach i znalazłem tam inne bóstwo – Thora. Silniki swoich poprzednich aplikacji nazywałem imieniem Sachmet – egipskiego bóstwa wojny i płodności. Thor w mitologii nordyckiej jest bogiem burz błyskawic jak również rolnictwa. Thor patronował ognisku domowemu i małżeństwu. [1]
Projekt postaram się tworzyć przy wykorzystaniu tego, co przeczytałem w książce o wzorcach projektowych. Podstawą będzie ogólny schemat, który pozwoli przejść od ogółu do szczegółu. Na pewno postaram się przed napisaniem czegokolwiek stworzyć diagram UML. Zacząłem pisać, następnie stworzyłem diagram. Dyskutując o zapisanym rozwiązaniu znalazłem w nim nieścisłość. Obiekt LanguageContainter będzie zawierał poszczególne języki (może zajść potrzeba odwołania się do domyślnego języka – np. z angielskiego do polskiego). Całość oparta jest na statycznej tablicy languages. Przy próbie użycia języka trzeba się odwołać do kontenera – LanguageContainer::getLanguage(‘PL’,’Main’) i następnie operować na zwróconym obiekcie. Gdzie zatem nieścisłość? Po wywołaniu wcześniejszego kodu kontener przy wywołaniu LanguageContainer::getLanguage(‘PL’,’User’) zwróci obiekt, który utworzył wcześniej, ponieważ w tablicy languages jest już indeks PL. Rozwiązanie te dyskryminuje też nieco jego obszerność.
Wydaje się, że odwołanie Language::getMessage(‘Main’,’Section’) jest prostsze i szybsze. Niestety utrudnia ono korzystanie z dwu języków podczas jednego żądania..
Jun
12
2005
Filed under Inne by Łukasz Dywicki
- Złap najbliższą książkę.
- Otwórz ją na 123 stronie.
- Znajdź piąte zdanie.
- Opublikuj je na swoim blogu razem z tą instrukcją.
- Nie szukaj najfajniejszej książki jaką można znaleźć. Użyj tej, która faktycznie leży najbliżej Ciebie.
Najbliżej mnie leży książka Programowanie zorientowane obiektowo. Wzorce projektowe autorstwa Alana Shalloway’a oraz Jamesa Trotta. Piąte zdanie na 123 stronie wygląda tak:
Wzorzec mostu pozwala mi rozumieć przez implementację wszystko to, co istnieje “na zewnątrz” moich obiektów i jest przez nie używane.
Zobacz również http://exsite.edigo.pl/index.php/2005/06/11/114-jogger-cytat-kolejna-zabawa-blogowa http://devblog.strefaphp.net/?postid=87
Jun
08
2005
Filed under Thor by Łukasz Dywicki
Jako, że skończyłem szkołę, zdałem egzamin dyplmowy czeka mnie przekroczenie progu dorosłości i wejście na rynek pracy. Już pojawiła się oferta odbycia stażu absolwenckiego (za śmieszne pieniądze), ale nie rezygnuję i szukam dalej. Być może, ktoś (czyt. jakaś firma) zainwestuje we mnie i rozwój moich zdolności?
W międzyczasie postaram się zająć planowaniem swojego frameworka (wszycy mają je, mam i ja!), bo CMS skończony/zawieszony. Przyglądałem się bliżej kilku aplikacjom. Moje zainteresowanie wzbudziło Prado. Gdy spojrzałem na przykład loginClicked od razu mi się skojarzyło delphi. Przyglądając się dalej kontrolkom doszedłem do wniosku, że to miks z ASP. Wpływ na mnie zaczyna też wywierać książka o wzorcach. Zaczynam patrzeć na obiekty nie jak na reprezentację klas tylko jak na określone instnienia/byty, które wiedzą co mają zrobić (w jednym rozdziale padło pojęcie ‘inteligentne dane, które mi się bardzo spodobało).
Swoje parę groszy wtrącił również Seth i Carbon[1] oraz system klas treści znany z Ez Publisha. Na prawdę trudno mi określić w jakim kierunku się udam.. póki co to wymieszanie CMSa i frameworka.
Podstawowe cele, które sobie stawiam: – łatwość rozszeżania o nowe moduły i akcje – parser plików konfiguracyjnych i precontroller jak w projekcie NuLLa[2] – budowa podobna do Prado[3] – użycie JPSpana[4] – własny system szablonów na pewno nie klon Smarty, raczej coś na podobę Savanta [5]
Wszytko się okaże, jak na razie to tylko koncepcje.
Jun
08
2005
Filed under JavaScript by Łukasz Dywicki
Diziaj znajomy grafik poprosił mnie o stworzenie skryptu, który ma wykrywać przeglądarkę i w zależności od nazwy przekierowywać na odpowiednią stronę. Nieco rozszeżyłem swoje zadanie tworząc obiekt Java Script, który zwraca zarówno nazwę jak i wersję programu, z którego korzysta internauta. Obiekt wykrywa następujące programy: Internet Exploler, Mozilla / Mozilla Firefox, Opera.
Całość opiera się na obiekcie navigator dostarczanym przez JS. Zainteresowanych zapraszam do zapoznania się z kodem.
Continue Reading »
Jun
05
2005
Filed under Ogólne by Łukasz Dywicki
Wspominałem wcześniej o książce pod tytułem PostgreSQL, którą pożyczyłem od znajomego. Jak się okazało jej pełny tytuł brzmi PostgreSQL. Biblioteka problemów.
Po zagłębieniu sięw szczegóły doszedłem do wniosku, że to świetny system bazodanowy. Sam się zacząłem dziwić dlaczego tak mało ludzi. Postgres dostarcza wielu możliwości, które są imponujące. Np. obsługuje widoki, które MySQL dopiero wprowadza od wersji 5.1, ma transakcje, znowu MySQL dopiero to udostępnia w wersji 4.1.
Słowem świetna baza. Udało mi się stworzyć własny widok, ba nawet kursor! Postanowiłem – przyszłe aplikacje zaczynam przystosowywać do dobrych systemów bazodanowych. Koniec z prostymi zapytaniami SELECT i samymi złączeniami.
Moje zainteresowanie wzbudził również Firebird. Czytałem gdzieś o tym systemie i wydawał się interesujący z perspektywy MySQL, a teraz po bliższym poznaniu Postgresa wydaje się jeszcze ciekawszy. Nie mniej musi nieco poczekać… czasu tak mało, że trudno znaleźć chwilkę na poczytanie (znowu czytanie w autobusie).
Jun
01
2005
Filed under PHP by Łukasz Dywicki
Cóż za piękny dzień dziecka! Pada od rana, z małymi przerwami, żeby wiatr mógł sobie pohulać bez slalomu pomiędzy kroplami.
W taki właśnie dzień wybrałem się w przymusowe odwiedziny do siostry. Oddałem jej tablice matematyczne, które pożyczyła od koleżanki na moją maturę. Podróż nic miłego, ponad 90 minut w autobusie, w którym nie można wygodnie usiąść (mam za długie nogi?). Jako, że siostra udawała się zaraz na wykłady to nie gościłem zbyt długo u niej. 20 minut i kolejny autobus, w którym spędziłem kolejne 90 minut. Szczęście, że nie było tak ciepło jak w piątek, bo bym wyparował z niego. ;)
Spytasz zapewne czytelniku jaki to ma (cenzura) związek z wzorcami projektowymi i UMLem? 90+90 to 180, czyli 3 godziny w autobusie z książką. Po ostatnim razie, gdy wracałem z książką na temat PostgreSQL postanowiłem nie tracić czasu na patrzenie się przez okno. Przeczytałem blisko 80 stron interesujących wywodów.
Dowiedziałem się w końcu jak się projektuje diagramy UML, które są wykorzystywane, aby obrazować powiązania w kodzie. Książka dość rozległa. Zaczyna się od programowania strukturalnego i dekompozycji funkcjonalnej (o jak to mądrze brzmi!) i rysowania figur poprzez wykład na uczelni, wykrawanie różnych kształtów w blasze po wzorce architektoniczne. Spektrum problemów jest bardzo szerokie i sprzyja wyjaśnieniu problemów. Muszę przyznać, że styl, w jakim jest napisana książka bardzo mi się spodobał. Obrazowe przedstawienie problemu i rozwiązania.
No i wreszcie się dowiedziałem jak odczytać diagram sekwencji. Właśnie zacząłem poszukiwania jakiego programu do tworzenia diagramów w UMLu, ale jak na razie trafiam na jakieś mało funkcjonalne bądź zrobione w Javie, których interfejs po prostu mnie odrzuca. Może ktoś coś poleci? Ja zaczynam studiowanie wzorca fasady..
May
30
2005
Filed under .NET by Łukasz Dywicki
Nadszedł ten czas – pierwsze “poważne” boje ze studiem. Postanowiłem zacząć od aplikacji konsolowych, ponieważ jest przy nich najmniej problemów, nie ma otoczki graficznej, formularzy, zasobów, jest tylko sam kod. Z resztą trzy miesiące temu udało mi się ściągnąć VS 2005 C# Express i troszkę się nim nacieszyłem (czyt. do formatu). Wtedy to właśnie udało mi się napisać (a bardziej zrobić) program okienkowy który ładował dane do XMLa. Nie było to nic ambitnego, ponieważ wszytko odbywało się poprzez (poniekąd) ręczne wpisanie kodu do pliku (czyli +”zmienna+” i tak dalej). Słowem nic specjalnego, zakręcony formularz i zero funkcjonalności.
Tym razem moje ambicje sięgały wyżej niż witaj świecie. Chciałem napisać witaj łukaszu! :) Ten jakże odległy szczyt udało mi się osiągnąć dwiema podobnymi drogami – przy pomocy J# i C#. Podstawy Javy mam (nikłe bo nikłe ale są), jak wyżej pisałem C# to też dla mnie nie pierwszyzna ;) poszło dość szybko. Niestety nie dałem rady zrobić tego w VB i C++, ale jest czas.
Zacząłem od C#. Pamiętałem, żeby nie używać strzałeczek bo to nie php. Trzeba było się przesiąść na kropeczki. Pamiętałem że interesująca mnie klasa (?) to System.Console. No trudno byłoby zapomnieć – już na samym początku została dołączona. Stąd było już blisko ReadLine, Write i znowu Read. W najbliższym czasie w programie nauczania C# liczenie pola i obwodu prostokąta.
Z J# poszło mi szybciej niż myślałem. Nazewnictwo metod identyczne, jedyna różnica to początek programu. W dalszej części do oglądnięcia kody programów.
Książkę do ASP mam.. tylko, że ASP Kompendium to nie jest tytuł pierwszej świeżości. Będzie trzeba odłożyć na jakiś porządny tytuł (ostatnie pieniądze poszły na świętowanie z okazji zdania matury).
Continue Reading »