joi, decembrie 22, 2005

O claie de zări şi-o căciula de stele

A venit si-aici Craciunul
Să ne mangaie surghiunul.
Cade alba nea
Peste viata mea.
Peste suflet ninge.
Cade alba nea
Peste viata mea
Care-aici se stinge.
Tremura albastre stele
Peste lacrimile mele.
Dumnezeu de sus
In inimi ne-a pus
Numai lacrimi grele.
Dumnezeu de sus
In inimi ne-a pus
Palpairi de stele...
Numai casa mea posaca
A'mpietrit sub promoroaca.
Stam în bezna grea,
Pentru noi nu-i stea,
Cerul nu s-aprinde.
Pentru sgribuliti
Ingerii grabiti
Nu aduc colinde.
O Iisuse imparate,
Iarta greseli si pacate.
Vin de-nchizi usor
Ranile ce dor,
Visul ni-l descuie.
Noi Te-om astepta ,
Căci pe crucea Ta
Stam batuti în cuie.

Maica Domnului Curata,
Ad'o veste minunata,
Infloreasca-n prag
Zambetul Tau drag
Ca o zi cu soare.
Zambetul Tau drag
L-asteptam în prag,
Noi, din inchisoare.


Peste fericiri apuse,
Tinde mila Ta Iisuse.
Cei din inchisori
Te asteapta-n zori,
Pieptul lor suspina.
Cei din inchisori
Te asteapta-n zori
Să le-aduci lumina.

Radu Gyr




Un colind scris din vecinatatea mortii ca multe din poeziile lui. Mai multe poezii tulburatoare scrise in temnitele comuniste gasiti aici. Eu am ramas impresionat si de aceasta poezie (anterioar am fost foarte impresionat de cartea lui Virgil Maxim ~ Imn pentru crucea purtata). Colindul il puteti asculta in interpretarea lui Tudor Gheorghe aici.

joi, decembrie 15, 2005

Celelalte capturi video din 11 - 12 - 95 le gasiti aici:

1.2.3.4.5. 6.7.8.9.10.
Timpuri bune pente JSF.

Intre timp s-au petrecut urmatoarele evenimente. Sun a facut free unealta sa specializata in dezvoltarea de aplicatii web bazate pe JSF pe numele ei Java Studio Creator. Nu stiu din ce motive nu a vrut sa se instaleze pe laptop, dar am reusit instalarea cu succes pe desktop. Arata destul de bine (un NetBeans modificat), se misca destul de bine si permite sa faci aplicatii Web in stil RAD tragand componente pe suprafata de lucru in stil drag'n'drop. E tocmai partea cu care Visual .Net Studio se lauda acum ceva timp. Dar de data asta free si cu tehnologii Java.

Oracle a facut free libraria lor de componente ADF. Este un aspect important pentru ca arata cu adeavrat bine. Mai exista astfel de componente unele free altele pe bani. MyFaces dezvolta de ceva timp un set de astfel de componente sub numele Tomahawk. ADF va fi disponibil spre sfarsitul anului sub titrarea Apache Faces Cherokee gestionate desigur de Apache.

Ce pot spune eu este ca in partea de prezentare, a gandi in componente in defavoarea manuirii sistemului cerere-raspuns impus de HTTP reprezinta productivitate. Am simtit asta folosind librariii de taguri cum ar fi tabele cu sortare si paginare, meniuri, structuri arborescente, etc.

Dupa cum spuneam vremuri bune!

miercuri, decembrie 14, 2005

Spring Experience

Zilele acestea a avut loc prima conferinta TSE ~ The Spring Experience dedicata framework-ului Spring. Cei care au organizat: Interface21 firma care intretine framework-ul si ofera suport si NoFluffJustStuff organizatori profesionisti de conferinte pe teme Java.

Mai multe informatii despre framework-ul Spring gasiti la: http://www.springframework.org/. Cam toti pe care i-am intrebat despre Spring au inteles ca este un alt framework Web. Spring este mult mai mult! In primul rand este un container usor bazat pe Dependency Injection. Partea lui Web este un MVC in gen Struts si e doar unul din modulele acestui framework. In locul partii de Spring MVC poate fi folosit oricare alt framework Web orientat pe request-response sau pe componente.

Prin ce se remarca Spring, este partea lui de middleware. De fapt ce pot sa spun eu despre Spring este ca reprezinta un mod standard de neegalat de a face J2EE fara EJB.

Acest framework ramane un necunoscut pentru multi nestiutori, neglijenti si nepasatori (ca o paranteza - acestia sunt chiar cei care nu au invatat ca singurul expert este Google). Sunt multi care fac J2EE fara EJB si reinventeaza roata de fiecare data netinand cont de productivitate. Sunt multi care nu costientizeaza ideea de framework si productivitatea pe care o pot aduce acestea prin faptul ca ofera un cadru comun de lucru care abstractizeaza partile rudimentare.

Consider ca Spring e ceea ce lipsea pentru a avea un stack complet de framework-uri in J2EE. Aveam framework-uri Web (sa enumeram Struts, Tapestry, JSF...) si aveam de asemenea framework-uri ORM (Hibernate, iBatis, OJB ...). Dar nu era nimic care sa le lege.

Ce aduce Spring:
- integrarea framework-urilor Web cu cele ORM
- un mod standard de a face securitatea prin Acegi
- servicii pentru aplicatii via AOP
- o arhitectura pentru aplicatii formata din straturi decuplate
- abstractizarea conexiunii la baza de date
- un mod standard de a instantia graful de obiecte prin DI
- independenta fata de serverul de aplicatii data de DI
- integrarea sistemului cu serviciile remoute si de mesagerie

marți, decembrie 13, 2005

Fiti ascultatori

Cateva cantece grecesti luate de la un prieten. Se incarca in background, deci trebuie sa mai asteptati pana porneste. Odata incarcat il puteti asculta fara intreruperi.

Am sa incerc sa pun colinde de Craciun cat de curand. Problema e ca de acasa merge foarte greu upload-ul chiar daca download-ul e OK. In rest: fiti ascultatori!!!





miercuri, noiembrie 30, 2005

Pentru pasionatii de lectura

Măi, ghiduşă cărticică,
Chiar de eşti aşa de mică,
Draga mea, cum reuşeşti
Să ne bucuri cu poveşti,
Poezii nenumărate
Cu versuri frumos rimate?
De poveşti ce să mai spun?
N-am văzut ceva mai bun!
Ce pe mine mă inspiră
Să desenez din natură.
Multe lucruri ne înveţi,
Cum să fim copii isteţi...

In ultimul timp am facut o multime de upload-uri de carti pentru diversi pasionati. Le dedic si o poezie. Mai multe poezii asemanatoare la carticica.ro

luni, noiembrie 28, 2005

Merge WebWork in to Struts

Incredibil. Cele doua framework-uri vor fuziona. Mai multe informatii aici. E vorba de un nou Struts -> Ti.

Patrick Lightbody, in "WebWork joining Struts," has announced that WebWork is going to merge into Struts, becoming the "Struts Action Framework 2.0." The main benefit for WebWork, he says, is the Struts community, while Ted Husted says that the intention for Struts Ti was to use WebWork as the core for the action framework.


miercuri, noiembrie 23, 2005

Acesta este un experiment
Un banner realizat in cateva minute. Sunt disponibile o multime de alte efecte pentru text si pentru background.





marți, noiembrie 22, 2005

ANUNT

Va informez pe aceasta cale ca am renuntat la serviciile ZappMobile.

Noua mea adresa de e-mail este colaru@gmail.com (vechea adresa colaru@zappmobile.ro va expira in curand). Ma puteti contacta de asemenea si pe o adresa mai veche colaru22@yahoo.com.

Noul meu numar de telefon este 0743163039 (reteaua Orange). Vechiul meu numar 0788235594 din reteaua Zapp nu va mai fi in curand disponibil.

luni, noiembrie 21, 2005

Third party versus in house

In primul rand sa lamurim notiunile:
third party - insemana un produs care este folosit de cineva dar el este realizat de catre altcineva
in house - insemna un produs realizat local si folosit pe plan local

Explicatii

Prin produs in acest caz vom intelege o librarie, un framework, o componenta, etc. Trebuie facuta o distinctie intre produse ca atare pe care le folosesti ca utilizator final, si produse pe care le folosesti drept cod pe care il integrezi in aplicatia ta (mai explicit, integrare la nivel de surse). Anterior ma refeream la a doua categorie. Spre exemplu e una sa folosesti OpenOfice si alta sa folosesti Struts. Struts este un framework (nu ii vom spune API prin faptul ca framework-ul are controlul fluxului aplicatiei si difera prina sta de un API - librarie) care este folosit de aplicatii la nivel de cod. OpenOfice e un produs care se adreseaza utilizatorilor finali.

Drept exemplu, o firma poate realiza in house un framework Web de tip MVC in loc sa foloseasca Struts care este un framework third party care are acelasi scop.

Drept alt exemplu clasic vor face referire la Spring. Spring este un framework de middleware. E un container usor bazat pe pattern-ul dependicy injection care permite J2EE without EJB. De asemena, serviciile sunt oferite componetelor gestionate de container prin AOP. Pentru a realiza J2EE without EJB, multe firme au dezvoltat propriile lor librarii care sa-i ajute in dezvoltare. In general librarii de servicii generice: pentru securitate, gestiunea tranzactiilor, etc.

Diferente
E mai greu sa intelegi ceva ce au facut altii. Este asa zisa curba a invatarii care in de la caz la caz poate fi extrem de abrupta. Ai destul timp sa intelegi ce au facut altii? Dar ceea ce au facut altii poate fi mai bun decat poti face tu. Ei au facut asta inainte ca tu sa te gandesti cum se face. Si poate s-au specializat chiar, in asta!?

Ce au facut altii poate sa se suprapuna doar peartial peste ceea ce vrei tu. Cea ce au facut altii se poate personaliza pe nevoile tale? sau e mai usor sa consstruiesti totul de la inceput, doar inspirandu-te din ce au facut altii?

Tu ar trebui sa te abati de la lucrul tau pentru a implementa asta. In general un produs este o generalizare a unor experiente. Spre exemplu tu dezvolti un framework de autentificare care e o incercare de a standardizare si fixare a problemelor de securitate intalnite. Cand implementezi prima oara securitatea tu nu ai avut astfel de experiente. A implementa acest aspect poate reprezenta un lucru in sine. Esti dispus sa pierzi acest timp?

Daca produsul este unul third party si open source in acelasi timp, in jurul lui se va aduna o comunitate de dezvoltatori, care vor contribui la cresterea lui. Produsul va avea o lista de discutii, o arhiva de email-uri, un forum, un inssue tracker, un site de prezentare, un wiki, etc. Deci si o documentatie bogata, bazata pe experientele celor care il folosesc.

Un exemplu fericit de firma (australiana) care a avut succes folosind doar produse open source third party este Attlasian care a dezvoltat si inca mai dezvolta doua produse JIRA si CONFLUENCE, folosite de gigantii IT gen IBM, etc. Jira este un bug tracker, poate cel mai complex realizat in Java. Confluence este un sistem de lucru distribuit bazat pe wiki pages. Aceste produse sunt realizate exclusiv cu librarii, componente, framework-uri open source. Atlassian ofera Jira si Confluence free pentru comunitatile open source. Un astfel de exemplu este OpenSymphony .

vineri, noiembrie 18, 2005

Checked exceptions versus unchecked exceptions

Intrebare? De ce au ales cei de la SUN sa creeze o clasa de exceptii necheck-abile in compilare si anume clasa RuntimeExceptions? De ce nu au lasat obligatoriu ceck-area sau aruncarea lor asa cum e cazul celorlalte categorii de exceptii? Excludem din discutie clasele din Error care tin de viata interna a masinii virtuale. Dar exceptii?

Acest lucru ar parea in contradictie cu unele aspecte extrem de riguroase din Java. Sa luam de exemplu urmatorul aspect: Java este un limbaj puternic tipizat. Ideea este cat se poate de buna, pentru ca detectarea cat mai multor erori direct din faza de compilare aduce numai beneficii. In runtime nu mai porti grija unor eventuale exceptii prin faptul ca acestea sunt blocate direct din faza de compilare. Cum pot fi lasate exceptiile din RuntimeExceptions sa opreasca anormal programul chiar in timp ce el ruleaza?

Deci de ce RuntimeExceptions? Singurul raspuns plauzibil la care am ajuns este urmatorul care sa nu fie tratate? Avantajul propagarii lor spre metodele superioare fara a trata in cod acest lucru. Faptul ca ele nu sunt tratate prin check nu insemana ca ele nu se produc. Dovada ca e asa este faptul ca opresc executia programului. Ce e interesant in autopropagarea lor este faptul ca intreaga categorie de exceptii de tip RuntimeExceptions poate fi prinsa undeva mai sus, intr-o metoda apelanta. Si se poate presupune ca sunt multe si au o tratare asemanatoare: un ecran de eroare in care sa li se afiseze codul.

Sa consideram spre exemplu o arhitectura clasica J2EE. Avem spre exemplu un Action Struts care apeleaza un Manager din stratul de servicii care apelaza la randul lui un DOA. Apelul este de forma: Action->Manager->DAO. In DAO se vor produce o multime de exceptii sa zicem de tip SQLExceptions. Ele nu sunt erori de business ci eroari de sistem, produse sa spunem din caderea serverul de baze de date. Prin transformarea lor in erori de tip RuntimeExceptions, ele vor parcurge fara a fi tratate drumul pana la Action unde pot fi preluate de mecanismul generic pe care Struts il pune la dispozitie in acest sens. Ramane ca la nivelul de servicii sa fie aruncate exceptii de business care sa fie prinse si tratate de Action-uri prin modificarea corespunzatoare a fluxului de control al aplicatiei.

Deci daca la nivelul DOA exceptiile SQL sunt transformate in RuntimeExceptions, acestea vor urca singure prin stratul de servicii si Action-uri si vor fi prinse de sistemul generic de sus. Se mai poate face o distinctie de forma: business exceptions & system exceptions. Intr-un fel exceptiile de business tin de logica aplicatiei si ele sunt in general exceptii personalizate, declarate de programator. Ele fac parte din semnatura metodei publicate si au aceeasi importanta ca si parametrii metodei. Cel care va folosi acea metoda va sti ca trebuie sa trateze exceptia pe care aceasta o arunca. Exceptiile de sistem sunt in general de tip RuntimeExceptions care circula singure prin sistem si au o tratare generica.

joi, noiembrie 17, 2005

Un val de gratuitati

In ultimul timp multi din cei mari au decis sa arunce pe piata produse de tip "Comunity Edition". probabil in scopul de a estimpa popularitatea in crestere pe care o au produsele Open Source. Printre marii jucatori:

SUN - isi scoate la rampa uneltele de dezvoltare pe care a facut atata "tam-tam" adica Java Studio Creator IDE si Java Studio Enterprise pe care le ai gratuit daca te inregistrezi pe SDN - Sun Developement Network. O prezentare interesanta pentru JCreator gasiti aici. In prezentare se demonstreaza productivitatea pe care o poti obtine folosind JSF, (JSF reprezinta un sistem de componente Web care gestioneaza singure partea de request-response - este unul din framework-urile bazate de componente si nu pe cerere-raspuns). Teoretic acceesi productivitate ca in cazul interfetelor bogate dar de data asta pentru Web. Demn de urmarit. In Eclipse nu stiu nimic asemanator. JCreator-ul este contruit peste NetBeans, IDE-ul la care Sun nu vrea sa renunte se pare asa cum au facut toti in favoarea Eclipse.

ORACLE - scoate pa piata Oracle Database 10g Express Edition de numai 150M. Este libera pentru modificari, redistribuiri, etc.

IBM - ofera Websphere Community Edition un server de aplicatii bazat pe Apache Geronimo un server de aplicatii Open Source de la apache care a trecut testele de J2EE. De asemenea IBM integreaza si produsele pe care le-a achizitionat in timp: Gluecode si Cloudscape!

marți, noiembrie 15, 2005

iBatis

IBatis este un framework care permite maparea domemiului la interogarile SQL. Se poate folosi pentru popularea automata a obiectelor valoare(domeniu). Din testele facute se pare a fi util. Am folosit cu succes Hibernate pana acum. Auzisem de iBatis in Spring ca fiind unul dintre framework-urile de persistenta cu care se integreaza. Pe langa mapare, aduce si un layer de DAO aplicatiilor abstractizand aspectele rudimentare legate de gestiunea conexiunii si de tranzactii.

Metode automate incercate pentru a obtine obiectele valoare:

* Middlegen plugin for iBatis -> netestat (am testat Middlegen cu plugin-ul de Hibernate si a mers partial - am testat mai precis MiddlegenIDE dar nu cu rezultate prea bune)
* Un script Perl facut de un rus care se bazeaza pe ceva interesant - transformarea interogarilor SQL in fisiere XML pentru iBatis. A functionat pentru exemplul dat si am folosit ActivePerl.
* JasmineIDE pare a fi o solutie buna, de mapare mai sofisticata. A mers cu MySQL dar nu cu ORACLE.
*Appgen nu a dat rezultate prea bune.
*Am folosit fara prea mare succes Hibernate extensions 2.X.

Intrebarea e daca poti sa generezi relatiile din baza de date in relatii intre obiectele valoare (obiecte domeniu ca atare). In general se pare ca nu.

sâmbătă, octombrie 29, 2005

joi, septembrie 29, 2005

Carti ordonate.

Cu un efort considerabil mi-am ordonat cartile de Java.
A rezultat un total:

Total disks: 1 (1.56 GB), folders: 13 (1.56 GB), files: 350 (1.56 GB)

Pe edituri:

Addison Wesley 265,067,749
Apress 10,666,306
Diverse 148,888,003
Hungry Minds 66,740,179
Manning 317,060,164
ORelly 164,153,946
Pragmatic 7,745,300
Prentice Hall 210,732,448
Sams 47,936,970
Sun 67,459,036
Sybex 18,011,245
Wiley 205,537,916
Wrox 150,860,675

Lista completa de carti.

UNELTE UML


Mai demult, pentru diagrame UML am lucrat cu Together de la Borland. Un mediu sofisticat care mergea mana in mana cu JBuilder. Cum JBuilder o sa mearga mana in mana cu Eclipse iar eu ador Eclipse, cautarile mele sau indreptat spre un plugin pentru acest IDE.

Pe net am gasit Together ca plugin pentru eclipse (practic nu am reusit sa il integrez in distributia mea de Eclipse ci doar instalat cu propria distributie). O unealta la fel de sofisticata ca si Together SOLO sau cu JBuilder. Arata foarte bine, si e clar ca poate foarte multe. Din fericire am invatat ca dintr-un model trebuie desenat doar ceea ce este essential si nu intreg businessul. Sper sa il folosesc cu succes o luna pana expira key-ul.


Am mai gasit o unealta care se pretindea plugin Eclipse – Poseidon UML (deabia intr-o versiune superioara se poate integra cu Eclipse). E un Community Edition si e util in desenare. In versiunile superioare permite conversii spre cod. Dupa parerea mea, acesta e un lucru nesemnificativ. Modelul conceptual este cel important - UML la nivel de concepte abstracte si nu la nivel de implemntare. La salvare marcheaza ca diagrama nu poate fi folosita in productie. O unealta sofisticata, cu un design nemaivazut – oare in ce e facuta (prima oara am crezut ca e Swing cu un Look and feel dragut dar am mari indoieli). Demn de testat si de folosit.


Ultimul incercat e OMONDO - un adevarat plugin pentru Eclipse. Mai putin spectaculos in versiuna free, dar care promite multe. Foloseste cu adevart resursele Eclipse. Merita urmarit mai ales pentru ca incearca sa tina pasul cu framework-urile care aduc aplicatiilor arfitectura (e un lucru real chiar daca nu ati observat poate asta).




Pentru UML exista 2 genii care au scris carti pe masura (... sunt si in colectia mea de carti nemuritoare :) ):

Martin Fowler - a scris printre altele -> "UML Distilled"
Scott Ambler -a scris printre altele -> "The Object Primer"

vineri, septembrie 16, 2005

Domain Driven Design -> citate

Inca doua citate din Domain Driven Design. Autorul da si un exemplu clar intre modelarea obiectuala si “modelarea” procedurala a unei aceeasi probleme.

“Object-oriented programming is powerful because it is based on a modeling paradigm, and it provides implementations of the model constructs. As far as the programmer is concerned, objects really exist in memory, they have associations with other objects, they are organized into classes, and they provide behavior available by messaging. Although many developers benefit from just applying the technical capabilities of objects to organize program code, the real breakthrough of object design comes when the code expresses the concepts of a model. Java and any other tools allow the creation of objects and relationships directly analogous to conceptual object models.”


“MODEL-DRIVEN DESIGN has limited applicability using languages such as C, because there is no modeling paradigm that corresponds to a purely procedural language. Those languages are procedural in the sense that the programmer tells the computer a series of steps to follow. Although the programmer may be thinking about the concepts of the domain, the program itself is a series of technical manipulations of data. The result may be useful, but the program doesn't capture much of the meaning. Procedural languages often support complex data types that begin to correspond to more natural conceptions of the domain, but these complex types are only organized data, and they don't capture the active aspects of the domain. The result is that software written in procedural languages has complicated functions linked together based on anticipated paths of execution, rather than by conceptual connections in the domain model. “

miercuri, septembrie 14, 2005

Domain Driven Design - Tackling Complexity in the Heart of Software

In sfarsit o carte cu adevarat palpitanta: Domain Driven Design - Tackling Complexity in the Heart of Software.

Este asa, pentu ca trebuie sa rezolv o mare problema care ma preocupa. Refuzul interior de a lua contact cu business-ul abordat. Pentru mine au devenit foarte importante tehnologiile, in special framewor-urile. Dar ele nu reprezinta nici pe departe ceea ce trebuie facut in aplicatii ci mai mult cum trebuie facut. Ele sunt mai mult unelte care te ajuta sa implementezi un business. Dar nu ele dau valoare intrinseca apliactiei.

Dezvoltarea domeniului aplicatiei e ceva ce neglijez de mult. Parca ceva in mine refuza sa ia contact cu business-ul de orice natura ar fi el. Pentru ca e complicat, si nu are o valoare continua. E util numai pentru aplicatia curenta. E complex, e extrem de complex.

E foarte interesant raportul tau cu business-ul modelat. Intr-un fel trebuie sa il cunosti foarte bine pentru ca altfel te blochezi in implementare dar nici nu trebuie sa iti murdaresti prea tare mintea cu el. Deci trebuie sa iei din el o esenta care sa te lege de el. In principiu trebuie sa-I creezi un model, care este o abstractizare a domeniului respectiv care surprinde numai aspectele importante, oricare ar fi ele. Si pe care trebuie sa il stapanesti. Nu te poti lega de business prin amanunte, care se schimba cel mai des. Trebuie sa te legi printr-un model care reprezinta o parte tare.

Cateva citate:

“A model is a simplification. It is an interpretation of reality that abstracts the aspects relevant to solving the problem at hand and ignores extraneous detail.”

“Domain modeling is not a matter of making as "realistic" a model as possible. Even in a domain of tangible real-world things, our model is an artificial creation. Nor is it just the construction of a software mechanism that gives the necessary results. It is more like moviemaking, loosely representing reality to a particular purpose.

Even a documentary film does not show unedited real life. Just as a moviemaker selects aspects of experience and presents them in an idiosyncratic way to tell a story or make a point, a domain modeler chooses a particular model for its utility.”

“Instead, the technical talent goes to work on elaborate frame-works, trying to solve domain problems with technology. Learning about and modeling the domain is left to others. Complexity in the heart of software has to be tackled head-on. To do otherwise is to risk irrelevance.”


“There are systematic ways of thinking that developers can employ to search for nsight and produce effective models. There are design techniques that can bring order to a sprawling software application. Cultivation of these skills makes a eveloper much more valuable, even in an initially unfamiliar domain.”

miercuri, septembrie 07, 2005

MONSTRI SACRI

Monstrii se aduna impreuna. Rod Johnson si Martin Fowler, Interface 21 si ThoughtWorks (cine stie cunoaste). Mai multi monstrisori pe blogul lui CAMERON PURDY. Printre ei Floyd Marinescu, Bruce Eckel, etc. Spor.

joi, septembrie 01, 2005

From Eclipse IDE

I publish from Eclipse. So, there are some many methods to make post's in Blogger: from Microsoft Word, from blogger itself, from mail, from my mobil phone, from my preferate IDE -> Eclipse. I make a god chose!!! Yaaa!

luni, august 29, 2005

AJAX in ACTION

Manning publica o carte despre AJAX -> Ajax in Action. O sectiune dintr-un capitol este disponibila pentru review . Aici se vorbeste despre patternul MVC aplicat la diferite niveluri ale aplicatiei, la nivelul controalelor, a paginii Web, si a aplicatiei integrata cu tot cu partea de server.
O perspectiva placuta asupra aplicatiilor in gereral, cu accente asupra dezvoltarii partii de client cu JavaScript.

Am folosit intens Swing impreuna cu sistemul de componente. Acolo, la nivelul componentelor era implementat un MVC simplificat model-delegate unde UI-delegate incorpora controllerul si view-ul componentei. Deci MVC-ul era format din UI-delegare care venea cu look-and-feel-ul si cu sistemul de evenimente, si separat era modelul.

Mai apoi am folosit intens MVC2 in aplicatii Web. De fapt aici am inteles cu adevarat MVC. Contolerul era un servlet care avea rolul sa modifice vizualizarea (in general) prin redirectare. Vizualizarea era alcatuita din JSP-uri care in general afisau colectii de bean-uri fara a avea cunostinta despre ce afiseaza (view-ul nu constientizeaza modelul). Modelul era format din Java bean-uri (sau colectii) cu rol de transport - pattern-ul Value Objects. Partea inteligenta era controllerul.

In JavaScript (ignorand partea de server) lucrurile nu pot sta altfel.

In week-end-ul acesta am studiat urmatoarele:

- prototype - un framework JavaScript
- http://script.aculo.us - colectie de clase JS cu rol in dinamica aplicatiilor pe client
- Rico - idem
- Behaviour - idem

De remarcat MODIv2 -> The Mouseover DOM Inspector, o modalitate de a urmari nodurile arborelui DOM asociat paginii (in FireFox exista un astfel de mecanism implementat in browser) .

De asemenea JSDocs pentru generarea documentatie in stil javadoc (din nefericire cu perl). Si de asemenea JSUnit echivalentul lui JUnit pentru JavaScript.

MyEclipse vine cu AutoComplete pentru JavaScript si HTML, sugerand atat pentru Netscape cat si pentru IE. Mai demult gasisem doar un plugin pentru hightlight-ing.

miercuri, august 24, 2005

Laszlo Systems.

Daca as avea timp m-as ocupa de Open Laszlo. Componete Flash gestionate cu Java Script (a se vedea ceasul din dreapta). Un exemplu de componeta refolosibila: un ceas. Programare declarativa in XML, in cel mai modern stil posibil -> mark-up language pentru descrierea interfetelor grafice in gen XAML (Longhorn) sau XUL (OS). RIA cu Flash. In spate Tomcat, deci suport nelimitat la tehnlogiile Java de middleware. Suport de la IBM in Eclipse pentru partea de tool-uri - LaszloFaces.

Cum spun ei:

Laszlo Systems is the original developer of the open source platform OpenLaszlo, and provider of rich Internet applications and services that advance the Web experience. OpenLaszlo is an XML-native foundation for building next generation Web applications that increase customer retention, conversion and brand loyalty. Laszlo provides comprehensive support services, education, and commercial application modules so that any company can easily make the move to rich Internet applications.

Pacat ca nu am timp (sau bani?) !!!

marți, august 23, 2005

A LIST APART

A list apart este un site de referinta pentru cei care sunt interesati de CSS, DHTML, design Web, etc. Tot felul de artificii ce tin de spatiul Web se gasesc in articole publicate pe acest site. E un loc de unde se poate porni. Il urmaresc de mai demult. acum si-a schimbat si designul. Spor!!!
Carti

Cartile la care am colaborat pot fi acum cumparate de pe net:

Dezvoltarea aplicatiilor Web folosind Java (reeditata Polirom 2004)
Java de la 0 la expert (Polirom 2005)

Referinta de pe situl Polirom nu mai este total corecta. Adevarul e ca am ramas la fel de atasat de Java chiar daca lucrez acum la alta firma si mi-am terminat si masterul.

Cristian Olaru este absolvent al Facultatii de Informatica din cadrul Universitatii „Al. I. Cuza” din Iasi. In prezent este masterand al aceleiasi facultati. Lucreaza ca programator Java in cadrul firmei SetMobile, specializata in dezvoltarea de aplicatii pentru dispozitive mobile folosind tehnologii Java. Este interesat de framework-uri Web si tehnologii enterprise folosind limbajul Java si solutii open source. La Editura Polirom a mai publicat, in colaborare, Java de la 0 la expert (2003).
Portlets si portaluri


Cand eram extrem de interesat de portlets, adica acum cativa ani, am fost foarte impresionat de Plumtree Software, o firma care ocupa la vremea aceea aproape toata piata de portal. Microsoft era nimic, atunici, ca si IBM, cu partal serverele lor.

In lumea Java a aparut JSR 198, care specifica clar ce reprezinta un portlet. Multe din impelmetarile existente au devenit compatibile cu aceasta specificatie.

Java ca open source a evoluat greu in ceea ce priveste tehnologiile de portal. Pluto, JetSpeed, Liferay, Exo. Cred ca inca nu e timpul. Am auzit de implementari de la IBM si JBoss. In rest cunoscutele referinte: MyMSN si MyYahoo - link-urile le gasiti singuri.

Azi o stire: BEA and Plumtree Software today announced that BEA will acquire Plumtree for approximately USD$200 million in cash.
Am descoperit blog-ul lui Graig McClanahan care a facut mult bine in lumea Java, pe partea de server (Struts si JSF printre altele) . L-am postat la link-uri http://blogs.sun.com/roller/page/craigmcc/ .

Ted Neward si-a schimbat blogul. Nu il mai gazduieste in propriul site. A ales o solute bazata pe .Net, un motor facut de altii. Nu l-am actualizat. Spor!!!

Actualizare via email!


Dupa o incercare reusita din Word, sper sa urmeze si una de pe mail. Adica aceasta. Blogger permite intrari via mail. (sper sa mearga).

--
This message was sent using ZAPP Mobile Mail(tm) System

duminică, august 21, 2005

Un mic test din add-in-ul pentru Word

Aceasta intrare in blog este postata din Word folosind add-in-ul pentru Word de pe blogger.com. Foarte interesant. Un exemplu de link : olaru.blogspot.com . Diacriticele: ăîşţâ. Oare cum se vad. Spor.

sâmbătă, august 20, 2005

Din blog-ul lui Martin Fowler despre framework-uri.
  http://www.martinfowler.com/bliki/

There's a big difference now in the flow of control between these programs - in particular the control of when the process_name and process_quest methods are called. In the command line form I control when these methods are called, but in the window example I don't. Instead I hand control over to the windowing system (with the Tk.mainloop command). It then decides when to call my methods, based on the bindings I made when creating the form. The control is inverted - it calls me rather me calling the framework. This phenomenon is Inversion of Control (also known as the Hollywood Principle - "Don't call us, we'll call you").

One important characteristic of a framework is that the methods defined by the user to tailor the framework will often be called from within the framework itself, rather than from the user's application code. The framework often plays the role of the main program in coordinating and sequencing application activity. This inversion of control gives frameworks the power to serve as extensible skeletons. The methods supplied by the user tailor the generic algorithms defined in the framework for a particular application.

--Ralph Johnson and Brian Foote

Inversion of Control is a key part of what makes a framework different to a library. A library is essentially a set of functions that you can call, these days usually organized into classes. Each call does some work and returns control to the client.

A framework embodies some abstract design, with more behavior built in. In order to use it you need to insert your behavior into various places in the framework either by subclassing or by plugging in your own classes. The framework's code then calls your code at these points.

vineri, august 12, 2005


Eu la 26 de ani (aproape). Intr-o clatorie in tinuturile Moldovei. Imagine postata cu Helloo! Posted by Picasa

Foarte adavarat: o continuare a intrarii precedente din blog

Am gasit aceasta intrare in blog-ul lui Ralph Johnson (Gang of Four). Este o referinta spre Grady Booch (Three Amigos). Parerea mea e ca tot ce spune Ralph despre arhitecturi software, aproape ca poate fi considerar citat. E intr-un fel un mentor in ingineria software cu o mare aplecare asupa pattern-urilor si cu accent spre framework-uri: http://www.cincomsmalltalk.com/userblogs/ralph/blogView

Grady Booch is starting a project to build the Software Architecture Handbook There isn't much there now, but you can see what he is planning, and it is ambitious! He has over a hundred systems on his list. He plans to describe the architecture of each, and then to describe the patterns in them. This is way bigger than any one person can do, and will have a major impact on all software development if he can pull it off.

Un ciatat gasit intro referinta din blogul lui Ralph Jojnson spre un sit al lui Grady Booch. Incredibil de frumos spus: http://www.booch.com/architecture/index.jsp

Software development has been, is, and will likely remain fundamentally hard. To that end, the entire history of software engineering is one of rising levels of abstaction (for abstraction is the primary way we as humans deal with complexity), and we see this reflected in the maturation of our programming languages, platforms, processes, tools, and patterns. Indeed, every well-structured software-intensive system is full of patterns, ranging from idioms that shape the use of a particular programming language to mechanisms that define the collaboration among societies of objects, components, and other parts. At the highest level of abstraction, every system has an architecture, encompassing the key abstractions and mechanisms that define that system's structure and behavior as seen from the perspective of different stakeholders, each with a different set of concerns. In every case - from idioms to mechanisms to architectures - these patterns are either intentional or accidental, but insofar as they are visible, such patterns reflect the style and inner beauty of each system.

It is a sign of maturity for any given engineering discipline when we can name, study, and apply the patterns relevant to that domain. In civil engineering, one can study the fundamental elements of architecture in works that expose and compare common architectural styles. Similarly, in chemical engineering, mechanical engineering, electrical engineering, and now even genomic engineering, there exist libraries of common patterns that have proven themselves useful in practice.

Un alt nivel de abstractizare

Problema abstractizarii ma preocupa in mod deosebit. Imi dau seama ca mintea umana este facuta sa lucreze asa. Ignoram amanuntele si ne jucam numai cu un set de aspecte. Altfel nu am face fata complexitatii. Cine incerca sa stapaneasca tot cu siguranta va pierde si ceea ce are.

In POO, atunci cand un API se vrea a fi facut accesibil si de ceilalti membri ai aplicatiei, acesta se publica (Martin Fowler vorbeste intr-un articol al lui despre public versus publicat). In acest sens un principiu bun de programare sugera ca metodele care vor putea fi accesate de ceilalti sa fie numite publice, iar cele care au rol doar local cu posibilitati mari de modificare sa fie facute private. In ultimul timp a aparut ideea programarii pe interfete (folosit pe larg in framework-ul Spring). Acest lucru face ca fiecarei clase definite sa i se specifice si interfata care contine declaratia metodelor ce se vor a fi executate din exterior. Interfata devine astfel un contract in fata clasei care o implementeaza. Acest lucru, semnifica faptul ca metodele lui pot fi folosite de ceilalti, cu garantia ca semnatura lor nu se va schimba deci cu posibilitatea minima de a aparea incompatibilitati in timp.

In lumea calculatoarelor se intampla aproape la fel. Programam in API-uri care reprezinta colectii de clase deja definite. Nu lucram cu mnemonicile microprocesorului. De mult nu se mai lucreaza asa. Calculatorul a ajuns sa fie infasurat in asa masura in API-uri software incat apoape ca putem sa-i ignoram existenta (si un pocket este la fel de bine invelit). Putem considera ca ceea ce e dincolo de nivelul cu care interactionam nici nu exista. O dovada este faptul ca putem trimite e-mai-uri dintr-o aplicatie Web fara sa cunoastem protocoale de retea sau altceva. Practic, apelam o metoda a unei clase.

Prin contructia sa limbajul Java cu precadere foloseste principiul de abstractizare. Astfel, se lucreaza initial cu o masina virtuala neoptimizata fara a se tine cont ca peste un timp ea este facuta mai performanta. Acest lucru pentru ca interactiunea cu masina virtuala se faca independent de structura ei interna. Optimizarea ei este o problema a specialistilor. Folosirea ei este o problema a dezvoltatorilor.

Ce am facut - ce as vrea sa fac???

Folosind Struts am inteles foarte bine cum comunica browserul cu serverul si aspecte de nivel jos referitoare la aplicatitiile Web (validare, internationalizare, agregare de tile-uri, paradigma cerere-raspuns, stratificarea aplicatiilor). Sincer nu am facut niciodata o aplicatie completa bazata numai pe servleturi si JSP-uri si aproape ca nu imi pare rau. As fi ramas la un nivel prea primitiv de abstactizare (ar fi fost comic sa fac aplicatii care fac interogari SQL din servleturi). Folosind framework-uri m-am ridicat deodata la un nivel mult mai inalt de abstractizare care implica in mod automat si o arhitectura pentru aplcicatii. Nu cat ar trebui.

In procesul de dezvoltare al aplicatiilor WEb, cele mai mari probleme le-am avut la nivelului de prezentare. Tot ce tine de domeniul problemei si de baza de date au fost lucruri usoare. Majoritatea timpului am pierdut-o in juurul fluxului de control pe partea de client (chiar daca in principiu e vorba de JSP-uri din care se genereaza HTML pe partea de server). De aceea un pas pozitiv ar fi gasirea unor plug-in-uri Eclipse pentru partea de prezentare. Am sa incerc MyEclipse in acest sens (se poate testa o luna). Sau o sa trec mai departe la un framework bazat pe componente care sa permita RAD.

Librariile de taguri mi-au oferit cea mai mare putere de reutilizare. Tag-uri pentru vizualizarea tabelelor, meniuri, librariile de taguri standard, Struts, pentru chart-uri si altele, facute de altii si adaptate mi s-au parut cel mai bun lucru posibil. De aceea tind sa cred ca un model bazat pe componete reutilizabile are un viitor sigur; in acest sens a se vesea Tapestry si JSF. Deseori am facut refactoring in JSP-uri pentru a folosi tag-uri in loc de cod Java embeded. Un sistem de componente se potriveste de minune cu ideea unui nivel de abstractizare mai ridicat.


Suportul pe care comunitatile Open Source il ofera dezvoltatorilor este de asemenea ceva nemaintalnit. Sunt profund impresionat si cred in open source. Prin multitudinea de pasionati, cred ca in momentul acesta se depaseste suportul pe care poate o firma sa-l ofere pentru un produs pe care il vand. Suportul consta in forum-uri cu diverse teme, bug-tracking, liste de discutii, arhive ale listelor de discutii, documentatii, demo-uri, sand-box-uri, blog-uri, etc. Si sunt foarte, foarte multi oameni de calitate in opens ource, care impartasesc fara nici o restrictie ideile.

Ce m-ar interesa ar fi folosirea in productie a unor tehnologii de viitor. AJAX pare o alternativa convenabila pentru aplicatiile Web de intranet. AOP o solutie buna pentru tot felul de artificii peste POO. Framework-uri diverse adaptate unor nevoi concrete, iarasi par a fi un subiect de discutie. Test driven developement, pentru a accelera procesul de dezvoltare - ma chinui de un an sa bag acest principiu bun in viata mea. Ce m-ar interesa ar fi sa merg mai departe in problemele de arhitectura si design pattern, pentru a-mi solidifica cunostintele. Impresia mea este ca, tinand cont de experienta acumulata, intr-un momemt de liniste pot sa imi solidific cunostintele si sa le structurez mai bine. A exprima pe un blog, a le explica altora sau a scrie o carte reprezinta tot atatea metode de a merge mai departe.

Ce ma supara si am mira la oamenii din domeni: ignoranta (care vine din mandrie). Nu o sa stau mult pe langa astfel de oameni. Altceva ar fi neprofesionalismul si lipsa de rigurozitate tipic romaneasca. In rest numai de bine...

miercuri, august 10, 2005

Luna de miere in Grecia!


Meteora
Originally uploaded by Cristia Olaru.

La Meteora in Grecia in luna de miere. Inca o reusita in a apela serviciile web ale Blogger. Deci e o actualizare din Flickr via sercicii web. Foarte interesant. Vreau si eu.

Foto-stream Flickr: Grecia

O luna de la casatorie!

10 iulie 2005! Ce frumos!!! A trect o luna de la nunta.

Foto stream-uri:

Casatoria civila

Nunta

Grecia

AJAX --> Asynchronous JavaScript + XML

Nu pot sa descriu in cuvinte repulsia pe care o simt relativ la JavaScript (mai bine spus JScript). Este o adunatura de comenzi, puse claie peste gramada, fara nicio ordine clara. Daca te uiti pe o carte de JavaScript ai impresia ca e un dictionar de comenzi. Parca cei ce l-au conceput sau mai ales dezvoltat (nu au avut oricum o ideie pre buna) au adunat de-a lungul timpului tot ce e mai urat in acest pseudo limbaj. Am aaut probleme cu vizibilitatea variabilelor, imposibilitatea de a depana. Da, da, depanarea e un adevarat chin. Sincer, numai cunoscutul alert. Am impresia ca in Modzila e un depanator, sau cei de la Microsoft au asa ceva. Prea costisitor. Eu fac doar Java.

Este foarte clar ca este nevoie de dinamica pe partea de client. Spun asta ca om care a lucrat la aplicatii web de intranet. Ar fi un nonsens sa nu folosesti avantajele unui scripting pe client in astfel de aplicatii.

In firma unde lucrez am stabilit o regula. Aceea de a nu tine starea aplicatiei pe partea de client ci o o lasa a fi gestionata de server. Astfel purtam datele spre server ca prametri via request. Regula suna asa: ceea ce se vede in interfata este si in baza de date. Altfel lucrurile degenerau in haos, prin incercarea de a tine starea aplicatiei pe client folosind JavaScript. Lucrurile deveneau intotdeauna prea complicate. Java Script se foloseste pentru a arunca ferestre de diaolog, a ascunde elemente, etc... Mici tertipuri... Dar, este vorba dupa cum am spus de aplicatii de intranet.

In cazul aplicatiilor Web (pure - situri Web sa le spunem asa) lucrurile sunt clare. Java script la minimum. Incompatibilitatile browsereleor sunt binestiute.

Totusi am remarcat doua tehnologii care folosesc Java Script si care sunt revolutionare in felul lor. Una ar fi Laszlo Systems, un sistem de componente pentru construirea de aplicatii bogate. Si AJAX, folosit la urma urmei in acelasi scop.

Despre AJAX mai multe in continuare...

Am ramas surprins. Posibilitatea de a face refresh pe o singura zona a paginii este un mare avantaj. E ca si cum s-ar actualiza doar un tile si nu toata pagina. Avantajul se pare ca este adus de specularea unui mic amanunt (a se vedea asemanarea cu AOP care arela baza simpla incterceptie a apelului de metoda). Totul sta in obiectul XMLHttpRequest din Java Script introdus pentru prima oara de Microsoft. Acesta permite actualizarea unei componete din arborele DOM care descrie pagina curenta in mod asincron. AJAX reprezinta un mod abstract de a privi aceasta problema.

Doua exemple de folosire a cestei tehnologii: google sugest si google maps.

In Java exista o implementare care se numeste SWF (Simple Web Framework). Semana cu Struts ca arhitectura, dar este bazata pe XMLHttpRequest. Sunt acolo cateva exemple tulburatoare. Nu cred ca se pot realiza altfel. Fara refresh numai pe un element al paginii nu se pot face astfel de lucruri miraculoase. Ei sustin ca e o alternativa al JSF. Nu cred ca e asa. E mai mult o ncercare de a face lucruri frumoase folosind tot tehnologiile ante-JSF cuma r fi ligrarii de taguri. Intr-un fel se ramane tot la nivel de request-response, http. Nu e vorba de un nivel mai ridicat de abstractizare cum ar fi componente si evenimente. Deci nu se poate pune intradevar problema RAD.

Mai multe altadata. Am de gand sa ma aplec asupra problemei. Pare foarte palpitant - am studiat documentatia standard. Cred ca o sa scimbe fata web-ului. Apropos. Google Mail e realizat cu aceasta tehnologie. Priviti atent. Se actualizeaza numai cate o zona si nu intreaga pagina (jos puteti comuta spre HML standard). Mare lucru...

luni, august 08, 2005

Cu greu m-am decis sa aleg Blogger.com.

In timp am inceput mai multe blog-uri dar din nefericire nici o solutie nu s-a dovedit a fi viabila. Mereu probleme de hosting si instabilitate. Am desis sa incerc pe Jroller, mai ales ca aproape toate intrarile mele erau referitoare la Java. Dar schimband schinurile am ajuns la o inconsistenta in design. Si am renuntat... Cel putin deocamdata. Ar fi fost frumos sa fiu alaturi de The BileBlog si Romain Guy's Weblog... dar nu se poate. Mai bine singur pe Blogger.

Am instalat si hostat Blogsom mai demult si JRoller. E o implementare in Java sub Tomcat, foarte placuta si stabila. Am observat si pe net unii care o folosesc. Din nefericire hosting-ul pentru java este extrem de scump si inca nepopular. Ar fi interesant sa-ti tii si propriul blog.

Ce am observat, este suportul pe care il ofera Google. De fapt Blogger este serviciu Google. A se vedea: serviciile google. Mai e si Picasa cu Hello. Nu am incercat inca, dar daca s-ar putea face transfer direct din Picasa pe Blogger ar fi deosebit. Cred ca se poate din Flickr. Am vazut ceva intamplator. Deci am ales Blogger pentru integrabilitate. Si pentru designul placut. Daca intrati pe pagina cu servicii google ar fi placut sa incercati Google Earth . E nemaipomenit.

Cred ca am sa incers sa mentin o referinta pe Jroller.com. Poate am sa reusesc publicari simultane pe doua blog-uri. Am sa incerc. Spor in toate!