Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu framework Kanał ATOM (tag: framework)

Autor wpisu: Splatch, dodany: 13.06.2007 01:11, tagi: framework

Dzisiaj (w zasadzie wczoraj) w otchłani skrzynki odbiorczej RSSOwl znalazłem link do propozycji wspomnianego projektu.

Czym ma on być? Ma być ujednoliconym szkieletem umożliwiającym programistom dostęp do baz danych, dokumentów XML jak i zewnętrznych systemów pokroju EAI przy użyciu istniejących technologii tj. Java Persistence API (JPA), Java Architecture for XML Binding (JAXB), Java Connector Architecture (JCA), and Service Data Objects (SDO). Cel ma być uzyskany we współpracy ze specjalistami od OSGi przy pomocy implementacji przykładowych implementacji, które pokażą jak używać wcześniej wymienionych interfejsów. Dzięki oparciu całości na platformie OSGi pomysłodawcy chcą zyskać niebywałą do tej pory w tego typu projektach przenośność i modularność co w połączeniu ma zaowocować mariażami (a może mezaliansami) różnego rodzaju. Na stronie z propozycją jest prosty schemat, który wstępnie obrazuje architekturę szkieletu:

Eclipse Persistence Services Project

Warto zwrócić uwagę na to, że całość projektu nie będzie uzależniona od Eclipse jako takiego a jest tylko rozwijana w ramach fundacji eclipse. Całość będzie można używać zarówno z poziomu Javy EE jak i Javy SE (jak domniemywam również Swing).

Głównym pomysłodawcą projektu jest Oracle z którego ramienia będzie póki co pracować najwięcej developerów, głównie tych, którzy wcześniej zajmowali się TopLinkiem. Jakkolwiek w deklaracji pod koniec propozycji pada zdanie czy też zaproszenie - drzwi są otwarte dla chętnych. :)

Osobiście jestem bardzo ciekaw efektów jakie przyniesie ten projekt, ponieważ znacznie by on ułatwił prace nad aplikacjami stricle biznesowymi opartymi na Eclipse RCP z racji na to, że wystarczy podpiąć się do dostarczonych usług OSGi by móc korzystać z bazy danych czy też wyciągać dane z jakiegoś podsystemu. Fajnie by było uprościć walki, powiedzmy z Hibernate i jego używaniem pod RCP. Dodam, że Eclipse Persistence Services to kolejny "dość egzotyczny" projekt realizowany w ramach fundacji nie związany ściśle z platformą Eclipse - wystarczy wspomnieć Eclipse Communication Framework z inkubatora, który w wersji 1.0 wchodzi już w skład najbliższego zbiorczego wydania - Europy

Autor wpisu: Athlan, dodany: 17.03.2007 15:01, tagi: framework

W czwartek dowiedziałem się, że zostałem wyróżniony w ogólnopolskim konkursie art.php.pl przez firmę NQ.pl.

NQ.pl było jednym ze sponsorów, ale również obserwatorem konkursowych zmagań. Liczba prac była duża i nie mogliśmy zapoznać się z każdą z nich.

Kilka prac szczególnie przypadło nam do gustu, dlatego też postanowiliśmy dodatkowo wyróżnić dwie prace: Vframe framework, autor: Piotr `athlan` Pelczar oraz Logger, autor: Mateusz `CyberBoB` Kaczmarek.

Autorzy tych prac otrzymują od nas darmowy pakiet NQ.developer pozwalający na utworzenie pięciu repozytoriów SVN oraz projektów zarządzanych przez Trac.

Nie ukryję, że jestem dumny z mojego projektu. Jednakże ten jest już zamknięty (powstają na nim ostatnie juz aplikacje), gdyż zostałem developerem Rapide framework. Ci, co stanęli na podium oraz wyróżnieni otrzymają dyplomy lub zaświadczenia na wzór tego. Niech to będzie motywacją do wzięcia udziału w konkursie dla tych, którzy nie wystawili swoich prac przed publiczność.

Autor wpisu: Splatch, dodany: 23.02.2007 23:48, tagi: framework, php

Mam niebywałą przyjemność oznajmić, że dnia 23 lutego zostało wydane, jak sam tytuł posta wskazuje, Agavi 0.11 RC3. Do pierwszej, w pełni stabilnej wersji jest już coraz bliżej. Zgodnie z rozkładem jazdy został otwarty jeden ticket, którego realizacja została odsunięta na sam koniec. Mianowicie, opis migracji z wersji 0.10 do 0.11. Ogrom zmian, które przetaczały się przez trunk repozytorium mógł przyprawić o zawrót głowy. Zmiany z rewizji na rewizję potrafiły w jednym momencie zniszczyć skrzętnie budowane narzędzia, które opierały się na zmieniających się wciąż mechanizmach. Co zyskało Agavi o wersji 0.10? Przede wszystkim developerzy uwolnili projekt od niezręcznej i nieporęcznej konfiguracji w plikach INI, która poza łatwością odczytu nastręczała przede wszystkim problemów… a to brak hierarchiczności, brak możliwości łączenia konfiguracji, w końcu brak narzędzia do walidacji zapisanych danych. W poście “Dlaczego konfiguracja w XML” porównywałem XML również do YAMLa. Sporą zmianą, naturalnie, na lepsze było zrezygnowanie z tradycyjnego flowu Mojavi 3. Do tej pory wyglądało to w ten sposób, że każda akcja miała metodę getRequestMethods, która zwracała informacje o tym w jaki sposób dostępna jest akcja. Czy to GET, POST, bądź cokolwiek (odpowiednie stałę w klasie Request - GET, POST, NONE). Teraz o sposób dostępu do akcji determinuje nazw akcji. Akcja o nazwie executeRead będzie wykonana w chwili żądania typu GET. Metoda o nazwie executeWrite będzie wykonana w chwili gdy otrzymamy formularz via POST. Metoda execute będzie wykonywana zawsze (o ile walidacja przebiegnie bez zakłuceń). Zysk z tego jest taki, że implementacja różnych kontrolerów nie wpływa na kształt akcji. W chwili gdy wiązały się z tym stałe GET/POST implementacja wywołań z poziomu konsoli była ciężka. W zapowiedziach pojawia się ConsoleRequest, ponieważ z Agavi 0.11 wyleciały kontrolery zależne od kontekstu. Jest jeden Controller, różne są implementacje requestu vide ConsoleRequest (jeszcze niegotowy, będzie w 1.0), WebRequest oraz SecureWebRequest. W międzyczasie pożegnaliśmy również stałe View::SUCCESS, ERROR, INPUT, ALERT, a metoda getDefaultViewName każdej akcji zwraca po prostu suffix do nazwy widoku (np. metoda akcji “Cart” zwraca wartość “Product”, stąd klasa widoku to CartProductView). Co więcej w połączeniu z innym mechanizmem Agavi, Output types, zmiany formatu widoku oraz języka nie wiążą się z implementacją bądź powielaniem logiki biznesowej. Implementujemy tylko logikę związaną z widokiem. Warto również wspomnieć, że od tej chwili metoda Controller::forward(module, action) jak i samo używanie powiązanych akcji jest odradzane, jako źródło potencjalnych problemów (dlaczego widok nie jest uruchamiany) tym bardziej, że tworzenie widoków i akcji załatwia samo Agavi przez taski dla Phinga. W chwili, gdy chcemy użyć innego widoku, spoza tych, które dostarcza sama akca po prostu zwracamy array(module, view name, parameters). Zniknęła również możliwości zrobienia forwarda z widoku (ogólnie problemy z request methods, to co było post-only nie szło przy fowardzie przy żądaniu otrzymanym via get), co wydaje się jak najbardziej uzasadnione. Widok nie jest organem decyzyjnym, który powinien wskazywać na wykonanie logiki biznesowej. Nie mniej jest możliwość przekierowania do widoku innej akcji.. poprzez redirect bądź poprzez zwrócenie array(module, view name, parameters).

To co jest bolesne w execution flow oferowanym w Agavi to niestety jego prostota. Przede wszystkim brakuje mi (jak w wielu miejscach Agavi) interfejsów. Jest to dla mnie naturalne, że dążę do generalizacji, interfejs jest podstawowym elementem, który uniezależnia od implementacji. Interesuje nas to, co jest widoczne na zewnątrz a nie to co wewnątrz implementacji. Brakuje mi opakowań dla tych tablic, które informacje o widoku. Prosty kontener, bean, który zawiera tylko informacje, ale nie jest tablicą. Przede wszystkim mam możliwość kontroli danych, które otrzymuje. Mogę już w fazie tworzenia obiektu reprezentującego flow wstępnie przeprowadzić jego walidację (czy widok istnieje?). Zmiany w akcjach i widokach jest jak najbardziej pozytywna i rzeczywiście usprawnia działanie całości. Nie mniej do wersji 2.0 w Agavi na pewno zajdzie ich jeszcze sporo, miejmy nadzieję, że również w celu uporządkowania struktur, usunięcia nadmiaru klas abstrakcyjnych i zastąpienia ich interfejsami (pamiętaj, zanim napiszesz linijkę w klasie, która jest autonomiczna, a której implementacja może się zmieniać, generalizuj, twórz typ bazowy).

Pytaniem ciągle jest czy Agavi podąży w stronę Symfony? Jak najmniej pisania.. Twórcy Symfony ochrzcili wersję 1.0 swojego frameworka nazwą, czy też przydomkiem “enterprise”. Ciężko mi powiedzieć czy było to uzasadnione. Temat Symfony-Agavi często pojawia się w rozmowach między Michałem Mechem a mną. Obaj jesteśmy zgodni w dwóch kwestiach - w Symfony pisze się bardzo szybko oraz ma ono bardzo dobrą dokumentację. Nie ustępuje ona pod żadnym względem dokumentacji Zend Frameworka.

Myślę, że najlepszym życzeniem dla nas wszystkich będzie to: by developerzy Agavi nadążyli z dokumentacją za implementacją.

Autor wpisu: Splatch, dodany: 22.02.2007 21:41, tagi: php, mvc, framework

Jedną z nowości jaką niesie Agavi w wersji > 0.10 jest mechanizm output types. Jest to bardzo proste rozwiązanie, które umożliwia uniknięcie gimnastyki z tworzeniem widoków w różnych technologiach, z którymi wiąże się różna logika. Banalny przykład. Te same dane prezentujemy w postaci HTML jak i PDF a do tego możemy je pobierać przez XmlHttpRequest. Dane są praktycznie identyczne, różny jest format wynikowy i proces jego tworzenia. Dla zwykłej strony wskazujemy szablon, dorzucamy dane i koniec, dla XmlHttp zwracamy JSONa. Stworzenie outputu w formacie PDF nie będzie tak proste jak pozostałych, ponieważ konieczne będzie stworzenie układu strony, dorzucenie fontów etc. Ogólnie w żaden sposób nie da się połączyć tych formatów w jednym widoku bez sporej ilości warunków i "protez". By uniknąć zakopania się w tym wszystkim zwykle tworzy się dodatkową akcję, która w sporej części pokrywała się z pierwotną a różni się tylko widokiem i szablonami. Począwszy od Agavi 0.11 problem przestaje istnieć.

W pliku konfiguracyjnym output_types.xml określamy renderer dla danej technologii, dodajemy obiekty przedefiniowane (parameters name="assigns") i następnie konfigurujemy mapowania adresów do plików (swoją drogą najlepsza implementacja tego mechanizmu z jaką się do tej pory spotkałem). Jest odpowiedni plik zawierający definicję routingu.

Zajmijmy się jednak w pierwszej kolejności konfiguracją output types:

PLAIN TEXT

XML:

  1. r
  2. req
  3. ctl
  4. usr
  5. tm
  6. subdir
  7. text/html; charset=UTF-8
  8. text/javascript; charset=UTF-8

Jak widać trochę tej konfiguracji jest, nie mniej celowo usunąłem przekazywanie parametrów do drugiego formatu wynikowego by pokazać, że w najskromniejszej wersji definicja taka potrafi się zmieścić maksymalnie w 10 linijkach. Do wszystkich parametrów możemy odwoływać się w widoku. Specyficzne są parametry o nazwie assigns oraz i18n. Pierwszy z nich Agavi wykorzysta po to by od razu w fazie tworzenia renderera wrzucić do niego wskazane obiekty, które znajdują się w kontekście. Drugi z atrybutów jest szczególnie przydatny podczas tworzenia aplikacji z wieloma językami. Parametr i18n jest prefiksem dla nazwy pliku. W przypadku gdy przypiszemy mu wartość subdir framework będzie szukał szablonów po katalogach np. pl/IndexSuccess, en/IndexSuccess. Inne, dopuszczalne wartości to postfix oraz prefix. Nazwy szablonów to odpowiednio IndexSuccess_pl oraz pl_IndexSuccess Atrybut extension określa suffix dla nazwy pliku, którego użyje Agavi przy wczytywaniu szablonu np IndexSuccess.tpl.php. Argumenty ignore_slots oraz ignore_decorators odnoszą się do strategii budowania widoku. W chwili gdy zrezygnujemy z nich wynik nie będzie dekorowany. Tzn. w odpowiedzi użytkownik zobaczy tylko treść wygenerowaną przez widok akcji. Tutaj drobna uwaga. W wersji stabilnej Agavi 0.11 mechanizm ten zachowuje się nieco inaczej. Wybór plików oraz zachowanie dekoratora determinuje layout i elementy layer.

Następnie w routes.xml dla każdej ścieżki możemy określić również format wynikowy danych. Np:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: WojciechNaruniec, dodany: 22.02.2007 11:06, tagi: php, framework

Od dzisiaj jest już dostępny Zend Framework w wersji 0.8.0. Jest kilka nowych komponentów (np. komponent uwierzytelniania i łańcuchowe filtry i walidatory), a wiele istniejących zostało ulepszonych (np. obsługa modularnych aplikacji MVC). Niedawno też na liście dyskusyjnej, a potem na devzone pojawił się ciekawy artykuł pokazujący przykładowy sposób utworzenia systemu uwierzytelniania oraz uprawnień przy użyciu frameworka. Komponenty [...]

Autor wpisu: Athlan, dodany: 29.01.2007 16:04, tagi: framework

Dziś ostatecznie zdecydowałem się w jaką inżynierię oprogramowania wejdę, co postaram się rozbudowywać i poświęcać temu czas. Postanowiłem zostać developerem Rapide Framework, propozycję współpracy dostałem dużo wcześniej, ale myśl o porzuceniu Vframe - nie ukrywam - bolała. Jakie wnioski? Nie ma sensu pisać wielkiego frameworka samemu… lepiej robić to w grupie ludzi, która zna się na rzeczy, zawsze ktoś Cię może poprawić, wesprzeć, doradzić. Rola całkiem często odwraca się, że to właśnie Ty pomagasz i doradzasz. Decyzja zapadła ostatecznie, na Vframe napiszę ostatnią aplikację w ferie. Będę sięgał do jego pojedynczych komponentów jeżeli będzie taka potrzeba, ale to będą wyjątki.

Dlaczego porzuciłem projekt? Poddałem się? Nie. Projektu nie porzucilem, ale nie będę go już rozwijał, nie poddałem się, bo nic nie pójdzie do kosza. Możnaby było zapytać: co ze starymi klasami? Rapide jest gotów przyjąć parę moich rozwiązań, a jeżeli nie będą one dołożone w oficjalnym wydaniu, mogę korzystać z nich jako pomoce (pluginy bądź biblioteki).

Decydującym argumentem jest tutaj niewątpliwie modularność Rapide. Adrian (prph) doskonale przewidział problemy, jakie mogą wystąpić przy dalszym toworzeniu frameworka. Prostym przykładem jest Config, który przyjmuje póki co dane jako tablicę, ale modularność aplikacji pozwala na dołączanie kolejnych możliwości, na przykład obsługe konfiguracji z poziomu plików INI, XML, itp. Drugim argumentem jest to, że pracujemy w grupie. Jak już wspomniałem w drugim akapicie jest to wspaniała sprawa, gdy grupa developerów pomaga sobie nawzajem, pozwala to na dalszy rozwój członka grupy.

Parę moich komponentów jest naprawdę dobrych, chociażby Image. Postaram się wingerować go do Rapide, lecz w sposób modularny, możliwe że ktoś napisze go za mnie, ważne są pomysły. Jeżeli macie jakieś osobiste refleksje dotyczące Rapide, odnoszę na oficjalne forum.

Autor wpisu: Athlan, dodany: 28.01.2007 17:02, tagi: framework

Dziękuję za dotychczasowe opinie, wraz z pojawieniem się nowych opcji, pojawiła sie również nowa dokumentacja. Zacznę od tego, co zostało dodane do myśli technicznej:

  • Dodano mapowanie całości core framewoka, czas działania diametralnie spadł, mapa jest tworzona dzien od ostatniej akutualizacji, lub gdy jakiejś klasy ni będzie w mapie. Jeżeli nie będzie jej po ponownym wygenerowaniu mapy, wówczas zostanie wyrzucony wyjątek.
  • W pliku konfiguracyjnym nie muszą być zdefiniowane wszystkie stałe, potrzebne sa tylko niezbędne, resztę Vframe jest w stanie dopisać sobie automatycznie, na domyślne wartości

Zmiany w funkcjonalności komponentów:

Vsession, Vuser - dodano możliwość odwołania się do danych jako tablicy obiektu, gdyż implementowany jest interfejs ArrayAccess Vcontroller, Vview, Vmodel - otrzymały implementację interfejsu ArrayAccess i najważniejszych aliasów dla komponentów Lang(), Session(), Input(), Url(). Dziedziczą z klasy VcommonMVC i Vattributes. Vattributes - dodana nowa klasa, która daje możliwość operowania na atrybutach (tablicy $_aAttributes) poprzez metody __set(), __get(), has(), remove(). Vinput - wprowadzone zmiany o ktore prosiliście, przy okazji bardzo mi się przydały w wykonaniu jednego z projektów. więcej: http://framework.vgroup.pl/read-input-data.html#4.7.1 Vlang - wykrywanie domyślnego języka użytkownika oraz wybranie odpowiedniego z dostępnych w aplikacji - główna myśl wersji 0.1.10, więcej: http://framework.vgroup.pl/read-languages.html#4.8.4 http://framework.vgroup.pl/read-uzytkownik.html#4.11.4 Zmienione nazewnictwo plików językow na skróty, zamiast Polish jest pl itd., więcej: http://framework.vgroup.pl/read-languages.html#4.8.1 Vuser - ustawianie języka użytkownika, więcej: http://framework.vgroup.pl/read-uzytkownik.html#4.11.4

Vframe 0.1.10 możecie pobrać z działu download: http://framework.vgroup.pl/download.html

Manual dostępny pod starym adresem: http://framework.vgroup.pl/manual.html

Dodany został DevServer, na którym stale działam, tam są publikowane natychmiastowe zmienay w CORE, które nie zostały opublikowane. Na devserwer tworzone są kolejne wersje fw: http://framework.vgroup.pl/devserver.html

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.