Wednesday, December 5, 2007

O noua fundatie pentru aplicatiile RIA:Flash Player 9

Flash Player, elementul principal al platformei Flash, a evoluat devenind fundatie si pentru aplicatiile dezvoltate in Flex si pentru aplicatiile RIA din generatiile urmatoare. De-a lungul anilor, acest player, care a inceput ca si client pentru redarea animatiilor, si-a dezvoltat propriul limbaj de programare (Action Script) adaugand suport pentru bucati din ECMAScript standard (acelasi standard care determina dezvoltarea JavaScript). Odata cu releasul lui Flash Player 7, Action Script a acoperit marea majoritate a ECMA standard. Flash Player 9 a fost lansat in acelasi timp cu liniile de produse Flex 2. Odata cu el, a fost introdus si limbajul ActionScript 3, un puternic limbal orientat pe obiecte dezvoltat pentru productivitate si performanta.

Flash Player 8 (lansat in Septembrie 2005), a facut mari progrese cu privire la motorul de renderizare, introducand un set de functionalitati (filtre, controale avansate) si imbunatatiri pentru suportul video. Flash Player 8 deasemenea a imbunatatit modalitatile de comunicare intre mai multe aplicatii care ruleaza cu playerul.





Flash Player 9 a fost construit cu avantajele oferite de versiunea 8, concentrandu-se asupra imbunatatirii executarii scripturilor pe masina virtuala. Defapt, el include un limbaj cu totul nou, optimizat foarte mult, ActionScript Virtual Machine (AVM), cat si o noua versiunea de ActionScript. AVM2 este construit de la zero pentru a sprijini cu succes nevoile programatorilor de RIA. Noua masina virtuala este semnificativ mai rapida, suporta afisarea erorilor in real time si un sistem standard de debug. Include suport pentru sockturi pe biti, permitand programatorilor sa lucreze cu orice protocol pe biti. Deasemenea, Flash Player 9 contine si AVM1, care executa cod AcionScript 1.0 si 2.0, pentru compatiilitate si cu versiunile anterioare.

Odata cu ActionScript 3.0, s-a realizat mai mult decat o simpla legatura cu scripturile ECMA. Limbajul suporta noi functionalitati pentru manipularea datelor, incluzand E4X (ECMAScript for XML), care extinde limbajul si adauga XML-ul ca si modalitate nativa de scriere a codului, lasandu-i pe programatori sa interactioneze mai usor cu acest tip de fisiere. A fost adaugat suport pentru expresii regulate pentru o mai buna parsare si procesare a textelor.




Integrarea PHP-ului in Adobe Flex

Aplicatiile Flex sunt aplicatii RIA (rich internet applications) construite cu ajutorul uneltelor de la Adobe. Aceste aplicatii sunt rulate in interiorul Flash Player–ului.

In acest tutorial vom arata cum se pot obtine informatii dintr-o baza de date folosing PHP-ul ca si back end, si utilizandu-le intr-o aplciatie Flex.

Pentru intelegerea tuturialului, vom face aceasta aplicatie simpla.

In primul rand, vom avea nevoie de crearea bazei de date cu care va interactiona limajul de server PHP. Astfel vom avea :


CREATE TABLE `users` (

  `userid` int(10) unsigned NOT NULL auto_increment,

  `username` varchar(255) collate latin1_general_ci NOT NULL,=

  `emailaddress` varchar(255) collate latin1_general_ci NOT NULL,

  PRIMARY KEY  (`userid`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1

COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

Deasemenea, vom realiza un script PHP care va adauga useri la aceasta tabela si va exporta un fisier XML, consumat ulterior de catre aplicatia Flex.


<?php

Define( "DATABASE_SERVER", "localhost" );

Define( "DATABASE_USERNAME, "username" );

Define( "DATABASE_PASSWORD", "password" );

Define( "DATABASE_NAME", "sample" );

//connect to the database

$mysql = mysql_connect(DATABASE_SERVER, DATABASER_USERNAME,

DATABASE_PASSWORD);

mysql_select_db( DATABASE_NAME );



// Quote variable to make safe

function quote_smart($value)

{

// Stripslashes

if (get_magic_quotes_gpc()) {

$value = stripslashes($value);

}

// Quote if not integer

if (!is_numeric($value)) {

$value = "'" . mysql_real_escape_string($value) . "'";

}

return $value;

}



if( $_POST["emailaddress"] AND $_POST["username"])

{

//adaugarea userului

$Query = sprintf("INSERT INTO users VALUES ('', '%s',

'%s')", quote_smart($_POST["username"], quote_smart($_POST

["emailaddress"])";

$Result = mysql_query( $Query );

}

//lista userilor

$Query = "SELECT * from users";

$Result = mysql_query( $Query );

$Return = "<users>";

while ( $User = mysql_fetch_object( $Result ) )

{

$Return .= "<user><userid>".$User-

>userid."</userid><username>".$User-

>username."</username><emailaddress>".$User-

>emailaddress."</emailaddress></user>";

}

$Return .= "</users>";

mysql_free_result( $Result );

print ($Return)

?>

Acest cod ar trebui sa se explice singur. Variabilele din _POST sunt transmise prin Flex. Daca adresa de email si usernameul sunt trimise, atunci va urma o adaugare in aza de date. Ulterior, se va lista in formt XML continutul intregii tabele de Useri. Este foarte important de retinut ca nu pot fi transmise informatii din PHP in Flex decat prin intermediul unui fisier cu format XML.


Pana in acest moment, am realizat scriptul PHP si baza de date de care am avut nevoie pentru aplicatia Flex.


Aplicatiile Flex sunt construite folosinf o combinatie intre AS3 si MXML. ActionScript este bazat pe ECMA Script. MXML este un limbaj bazat pe XML-uri.

In principiu, in construirea unei aplicatii, trebuie construita UI cuajutorul XML, si codata cu ajutorul AS3. Acesta este codul pentru interfata grafica (UI) a aplciatiei :


<?xml version="1.0" encoding="utf-8"?>

<mx:Application

xmlns:mx="http://www.macromedia.com/2005/mxml" xmlns="*"

layout="absolute" creationComplete="userRequest.send()">

<mx:HTTPService id="userRequest"

url="http://localhost/flex/php/request.php" useProxy="false"

method="POST">

<mx:request xmlns="">

<username>{username.text}</username><emailaddress>

{emailaddress.text}</emailaddress>

</mx:request>

</mx:HTTPService>

<mx:Form x="22" y="10" width="493">

<mx:HBox>

<mx:Label text="Username"/>

<mx:TextInput id="username"/>

</mx:HBox>

<mx:HBox>

<mx:Label text="Email Address"/>

<mx:TextInput id="emailaddress"/>

</mx:HBox>

<mx:Button label="Submit" click="userRequest.send()"/>

</mx:Form>

<mx:DataGrid id="dgUserRequest" x="22" y="128" dataProvider="{userRequest.result.users.user}">

<mx:columns>

<mx:DataGridColumn headerText="User ID"

columnName="userid"/>

<mx:DataGridColumn headerText="User Name"

columnName="username"/>

</mx:columns>

</mx:DataGrid>

<mx:TextInput x="22" y="292" id="selectedemailaddress"

text="{dgUserRequest.selectedItem.emailaddress}"/>

</mx:Application>



Aceasta aplicatie face urmatoarele lucruri:


<?xml version="1.0" encoding="utf-8"?>

<mx:Application

xmlns:mx="http://www.macromedia.com/2005/mxml" xmlns="*"

layout="absolute" creationComplete="userRequest.send()">

Acestea sunt primele doua linii de cod ale aplicatiei Flex. Prima linie declara ca acest document este unul de tip XML. Al doilea declara ca este o aplicatie, declara layout-ul sa fie absolut, iar in final, "creationComplete="userRequest.send()", spune ca la sfarsitul creerii interfetei grafice pentru user, sa apeleze functia send() a idului userRequest.

<mx:HTTPService id="userRequest"

url="http://localhost/flex/php/request.php" useProxy="false"

method="POST">

<mx:request xmlns="">

<username>{username.text}</username><emailaddress>

{emailaddress.text}</emailaddress>

</mx:request>

</mx:HTTPService>


In aceste linii de cod setam HTTPService-ul pentru a trimite si primii date de la codul PHP scris de noi. Setam id-ul userRequest si ii dam URL-ul catre scriptul de PHP. Ca si metoda de trimitere a informatiilor alegem POST. (am putea alege GET insa atunci ar trebui sa schimbam si codul de php scris).

Metoda de request contine 2 variabile, username-ul si adresa de email. Valoarea pentru username este setata la valoarea text a idului cu numele de «username«, iar valoarea pentru variabila PHP _POST[“emailaddress”] este setata la valoarea atributului text al elementului cu idul “emailaddress”.

<mx:DataGrid id="dgUserRequest" x="22" y="128"

dataProvider="{userRequest.result.users.user}">

<mx:columns>

<mx:DataGridColumn headerText="User ID"

columnName="userid"/>

<mx:DataGridColumn headerText="User Name"

columnName="username"/>

</mx:columns>

</mx:DataGrid>

<mx:TextInput x="22" y="292" id="selectedemailaddress"

text="{dgUserRequest.selectedItem.emailaddress}"/>

</mx:Application>

In acest cod, am cosntruit partea grafica in care se vor afisa datele aduse din baza de date. Aici avem un DataGrid care se populeaza cu XML-ul provenit din serviceul HTTP userRequest.

XML-ul returnat arata de forma urmatoare:

<users>

<user>

<userid>1</userid>

<username>Mihai Trantea</username>

<emailaddress>mihai.trantea@i-neo.ro</emailaddress>

</user>

<user>

<userid>2</userid>

<username>Alexandru Smeureanu</username>

<emailaddress>alexandru.smeureanu@i-neo.ro</emailaddress>

</user>

</users>




Getting Started with Adobe Flex 2

Cu totii stim ca Flex a fost vazut inca de la inceput ca un produs uimitor si revolutionar. Daca te gandesti la Coldfusion ca la o metoda de a construi pagini HTML, la Flex te gandesti ca la po metoda de a construi filmulete flash in real time. Din pacate, majoritatea oamenilor considera ca pretul este o importanta problema in utilizarea Flexului. Aceasta problema a fost rezolvata odata cu aparitia versiunii Flex 2.
Flex 2 este produs din urmatoarele componente:



    • ActionScript 3: limbajul de programare al produsului Flash. Odata cu aparitia Flash Playerului 9, apare si o noua versiune de Actionscript, care confera o functionalitate avansata a filmuletelor flash.

    • MXML (Maximum Experience Markup Language) : reprezinta o firma de XML. Se poate folosi pentru a creea flimulete flash cu ajutorul aplicatiei Flex. De cele mai multe ori, exista o paralela intre codul scris in ActionScript si codul din MXML, si invers.

    • FlashPlayer 9 : este necesar rularii oricarei aplicatii realizate in Flex. Ofera suport pentru ActionScript 3.

    • Flex SDK: este tot ce aveti nevoie pentru a creea aplicatii in Flex. Contine un compilator alaturi de toate componentele integrate (care contin si o serie de elemente dedicate userului). Ordinea in realizarea unei aplicatii Flex este : scrieti cod MXML in orice editor, folositi SDK-ul pentru a-l transforma in fisier swf, apoi rulati-l in orice web server. Flex SDK este gratuit.


    • Flex Builder 2: este un editor bazat pe Eclipse. Cu toate ca aceste aplicatii le puteti construi si cu ajutorul Flex SDK-ului gratuit, acest editor are foarte multe avantaje, printre care un debuger step by step. El poate fi achizitionat ca si produs separat sau ca si plug-in al Eclipse-ului.

    • Flex Charting Components : Acest pachet este disponibil ca si pachet individual, sau ca si modul al Flex Builder-ului. Ofera posibilitatea dezvoltarii de charturi intr-o maniera foarte usoara cu posibilitati de captare a eventurilor.

    • Flex Data Services : Aceasta componenta va permite sa oferiti date browserului.




Sunday, November 25, 2007

Cum sa faci rapid un meniu cu css

Ai nevoie de 4 elemente: un fisier css, un fisier html si 2 seturi de imagini: unul pentru butoanele normale (neactivate) si unul pentru butoanele active (deasupra caruia se afla cursorul – starea hover).

Pas 1: Se editeaza un fisier css:

.menu_buton1

{
cursor: pointer;
background-image:url(img/b_01.jpg);
}

.menu_buton1_hover
{
cursor: pointer;
background-image:url(img/b_01_hover.jpg);
}

Este nevoie de 2 stiluri pentru un buton, stilul default ( cand butonul nu e activ ) – menu_buton1, si stilul care se aplica atunci cand vei fi cu mouse-ul deasupra lui : menu_buton1_hover.

Cursor: pointer va face sa apara cursorul tip link deasupra imaginii, iar background-image va seta imaginea dorita.

Se repeta cele doua stiluri pentru fiecare buton al meniului.

Pas 2: Se editeaza fisierul html:


Vom face un tabel fara margini si fara spatii intre celule.

<table border="0" cellpadding="0" cellspacing="0">

<tr>

<td width="121" height="75" class="menu_buton1" onMouseOver='this.className=" menu_buton1_hover"' onMouseOut='this.className=" menu_buton1"' onClick='window.location = "link.html"'>&nbsp;

</td>

</tr>

</table>



Fiecare celula va fi un buton al meniului. Vom seta in fiecare celula dimensiunile dorite prin width si height, apoi ii vom defini clasa default: menu_buton1.


Vom folosi event-urile td-ului pentru a putea schimba stilul celulei fara sa reincarcam pagina. Codul din event-ul onMouseOver de exemplu, se va apela automat cand trecem cu cursorul deasupra elementului. this.className=" menu_buton1_hover" va face ca stilul elementului curent (td-ul nostru) sa se modifice in menu_buton1_hover. Acest stil va seta o alta poza de fundal (vezi pasul 1). La iesirea cu mouse-ul de deasupra elementului, vom schimba iar stilul la cel initial.


Pentru a simula efectul butonului, folosim onClick unde vom afisa alta pagina prin window.location = `link.html`.


Ca si continut, td-ul va avea un in el, adica un spatiu simplu care nu va aparea pe ecran, dar care trebuie pus deoarece td-ul trebuie sa contina ceva in el. Se poate pune o imagine cu un pixel transparent (gif) de exemplu, varianta chiar mai recomandata decat un spatiu.


Astfel un simplu td, cu 2 poze de fundal si cateva linii de cod, s-a transformat intr-un buton adevarat. In functie de cat de inventivi suntem, putem prezenta utilizatorului interfete atractive, dinamice, evoluate. Acest gen de meniuri este foarte simplu de utilizat si intretinut, singurul lucru dificil fiind designul efectiv al pozelor.

Saturday, November 24, 2007

Web crawling sau despre cum sa obtii o baza de date….

....O baza de date cu linkuri care te-ar putea interesa, o baza de date cu adrese de email :D ,o baza de date cu temperaturile sa zicem pentru mai multe orase sau pur si simplu o baza de date cu titlurile dintr-o pagina de ziar.Totul se reduce la a reusi sa extragi dintr-o pagina web, avand in spate un cod uneori mult prea incalcit pentru muritorii de rand, bucatica aia de informatie de care ai nevoie.Normal ca de la pagina html pe care o obtii printr-un simplu “View Source” si pana la un XML curat, plin cu bunatati pentru baza ta de date si mai ales simplu de parsat, e un oarecare drum.Pai sa vedem, sa zicem ca vrei sa folosesti XPath sau..XQuery sau de ce nu poate chiar simplul DOM pentru a parsa un fisier XML.Dar de unde iei XML-ul ?

Pasul 1:Faci rost de Tidy.Tidy pentru Java, Tidy pentru Python,ce preferi.

Pasul 2:Faci putina “curatenie “ in fisierul html si utilizand Tidy, obtii un XHTML, adica un HTML mult mai ordonat, cu toate tagurile inchise.

Pasul 3:Tratezi XHTML-ul ca un XML si te apuci sa parsezi :)

Ce-i cu Tidy?Pai interfete evoluate, dar prea evoluate, prea….grabite.Cam 40% din paginile HTML din intreg Internetul sunt scrise “grabit”, cu erori de genul <br> in loc de <br/>, cu taguri neinchise, totul pentru ca browserele HTML accepta orice input, corect sau incorect, incercand sa-l interpreteze cum pot mai bine.Un parser insa va sesiza toate aceste erori iar modalitatea cea mai simpla de a ajunge de la un HTML astfel scris la un riguros XHTML este acest Tidy.

Friday, November 23, 2007

Orcas-Visual Studio 2008 Beta 2

Dupa ce m-am jucat putin cu noul MS Visual Studio 2008 nume de cod Orcas, pentru prima oara, in intreaga suita Visual, m-am intrebat: ce e nou? Pentru utilizatorii vechiului Visual Studio raspunsul aparent va fi probabil … - Nimic!

Aceasta a fost prima mea reactie cand am testat VS2008 Beta 2. Dupa o scurta cautare pe stie-ul Microsoft am gasit documente care descriu cateva facilitati noi si aparent folositoare. Platforma Visual Studio este puternica si robusta - de la versiunea din 2003 pana in 2005, in VS s-a consolidat multe facilitati si unelte de dezvoltare, si nu exista practic o alternativa pentru utilizatorii care dezvolta aplicatii C/C++ pe platforme mobile de exemplu sau care deszvolta o aplicatie Windows pentru platforme x86.

Comparand Orcas cu predecesorul sau (VS2005) si considerand ca este in dezvoltare de peste trei ani, toate facilitatile noi lasa pana la urma un gust amar. Ma asteptam la mai mult de la aceasta versiune noua a platoformei.

Asa cum Microsoft a lansat Vista varianta Beta la inceputul lui 2007 tot asa in 2008 nu va face mare zarva in jurul lui VS2008. Totusi Microsoft a publicat destul de mult continut pe site-urile sale ce descrie noile facilitati din Orcas. Realitatea este ca VS 2008 introduce facilitati pe care doar un segment specific din utilizatorii sai le pot aprecia, in special cei care lucreaza cu .NET Framework.

Microsoft a spus clar ca nu incearca sa imbunatateasca experienta unui utilizator in Visual Studio dar mai curand se concentreaza pe popularizarea si utilizarea cat mai usoara a frameworku-ului pentru Windows Vista (referindu-se la C#, VB, ASP.NET).

Saturday, November 17, 2007

Lupta titanilor - Partea III

După ce am discutat despre fiecare tabăra e momentul sa comparam performantele.

Prima întrebare pe care ne-o punem este ce mari companii utilizează aceste tehnologi?

Flex

Acesta este deja la versiunea 2.0 se anunţa in curând apariţia Flex SDK 3.0. Este deja lansat si s-a bucurat de o perioada considerabila de monopol pe acest segment:

Amsterdam-Schiphol Airport

Sherwin-Williams Color Visualizer

Sony Ericsson Product Catalogue

Yahoo! Maps

Yahoo! Messenger for the Web


Pentru curiosi exista un site dedicate protofoliului acestei tehnologi :
http://flex.org/showcase/ Evident si acest site este creat tot in FLEX

Microsoft Silverlight

Tehnologie ne-lansata oficial pe piaţa decât intr-o varianta rudimentara, bazându-se pe un singur limbaj .Net JavaScript (varianta .NET nu cea intalnita in browsere deşi este asemănătoare ca sintaxa) se bucura deja de o suita impresionanta de clienţi :
http://silverlight.net/Showcase/

Microsoft Expression Design (WPF normal nu Silverlight)

Microsoft Expression Blend (WPF normal nu Silverlight)

Yahoo! Messenger (WPF normal nu Silverlight)


La acest capitol Flex castiga. Yahoo este un nume greu, Yahoo Maps merge superb! Speram sa existe un comeback din partea Silverlight odată cu lansarea oficiala 1.1. In tabăra Microsoft este foarte interesant faptul ca cele doua produse Expression (ce sunt in competiţie cu Adobe Dreamwaver si Image Ready) sunt create intr-o tehnologie noua pentru care nu exista inca un IDE. Pentru mine acest lucru arata ca .Net 3.0 este stabil.
Cat despre Yahoo Messager ... eu unul nu m-as lauda ca e facut in WPF ... este greoi consuma memorie si are tot felul de comportamente ciudate ce variază de la un calculator la altul... yacs....

A doua problema este cea legata de Framework ... Cati oamenii il au instalat? Cum il instalez... prefer sa parasesc site-ul sau instalez Framework-ul... Ce e aia Framework?

In funcţie de persoana răspunsul evident variază, insa câteva lucruri sunt clare pentru toti. Flex se foloseşte de Macromedia – Adobe Shockwave / Flash care este de ceva timp bun pe piaţa. Acest lucru înseamnă ca mulţi oamenii îl au si se bucura de el.... Sa nu uitam ca la un moment dat daca instalai Windows XP undeva in Costum Instalation puteai sa instalezi odată cu windows-ul si suportul de Shockwave o versiune veche si incompatibila cu Flex-ul totuşi. Microsoft-ul are avantajul Windows-ului... Oricand acesteia pot instala prin intermediul Windows Update-ului orice framework... Momentan Framework-urile sunt trecute la pachete opţionale - o simpla schimbare a categoriei ar putea spulbera avantajul Adobe.