<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>idevelop.ro &#124; intelligent web solutions &#187; Dezvoltare client-side</title>
	<atom:link href="http://www.idevelop.ro/category/dezvoltare-client-side/feed" rel="self" type="application/rss+xml" />
	<link>http://www.idevelop.ro</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 29 May 2010 21:40:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<atom:link rel="next" href="http://www.idevelop.ro/category/dezvoltare-client-side/feed?page=2" />

		<item>
		<title>To click or not to click</title>
		<link>http://www.idevelop.ro/to-click-or-not-to-click.htm</link>
		<comments>http://www.idevelop.ro/to-click-or-not-to-click.htm#comments</comments>
		<pubDate>Sun, 25 Nov 2007 01:45:49 +0000</pubDate>
		<dc:creator>andrei</dc:creator>
				<category><![CDATA[Dezvoltare client-side]]></category>
		<category><![CDATA[Programare web]]></category>

		<guid isPermaLink="false">http://www.idevelop.ro/to-click-or-not-to-click.htm</guid>
		<description><![CDATA[<a href="http://www.idevelop.ro/to-click-or-not-to-click.htm" title="To click or not to click"><img src="http://www.idevelop.ro/wp-content/17-click1.jpg" width="0" height="0" alt="To click or not to click" style="float:left;padding:0 10px 10px 0;" ></a>&#8220;Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.&#8221; &#8211; Antoine de Saint-Exupery

Folosesc Firefox si middle-click pentru deschiderea in taburi noi a linkurilor care ma intereseaza. Insa in ultima vreme ma lovesc din ce in ce mai des de o problema: eu pe care [...]]]></description>
			<content:encoded><![CDATA[<a href="http://www.idevelop.ro/to-click-or-not-to-click.htm" title="To click or not to click"><img src="http://www.idevelop.ro/wp-content/17-click1.jpg" width="0" height="0" alt="To click or not to click" style="float:left;padding:0 10px 10px 0;" ></a><p><em>&#8220;Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.&#8221;</em> &#8211; Antoine de Saint-Exupery</p>

<p>Folosesc Firefox si middle-click pentru deschiderea in taburi noi a linkurilor care ma intereseaza. Insa in ultima vreme ma lovesc din ce in ce mai des de o problema: <strong>eu pe care buton apas?</strong></p>

<p>Sa va explic.</p>

<p>O data cu raspandirea &#8220;fenomenului <span class="caps">AJAX</span>&#8220;, tot mai multe site-uri folosesc javascript pentru afisarea unor informatii intr-un mod mai &#8220;prietenos&#8221;. Astfel, un link pe care scrie &#8220;Help&#8221;, din dreptul unui camp dintr-un formular, poate deschide o fereastra popup, poate afisa un fel de lightbox, poate deschide intr-un tab nou o pagina cu informatiile necesare, etc. Posibilitatile sunt multe.</p>

<p><strong>Problema este ca acel buton este imprevizibil.</strong><br />
Vad butonul, cum procedez? Left click, sperand sa fie ceva javascript, dar riscand sa imi schimbe pagina (lucru pe care eu nu-l doresc, poate e un formular deja aproape completat), middle click &#8220;ca sa fiu sigur&#8221; dar apoi ma trezesc cu 10 taburi deschise, fiecare tab fiind gol deoarece acel link fusese &#8220;gandit&#8221; (mult spus) pentru javascript? E foarte neplacut sa se intample asta, iar mai grav este ca aceasta nesiguranta devine din ce in ce mai prezenta pe web.</p>

<p>Exemplu concret: <a href="http://www.macuser.ro/index.php/forums/viewthread/7764/">forumul macuser.ro</a>. Toate pozele atasate la un post au link de forma <code>javascript:showimage('http://..', '640', '480');void(0);</code>. Vrei sa deschizi toate pozele in taburi ca sa te uiti la ele pe rand? Sau poate un link direct catre una din ele? Tough luck&#8230; Ai cumva javascriptul dezactivat? Hah.</p>

<p>Avem nevoie de programare web &#8220;cu cap&#8221;, facuta de oameni care stiu cum stau lucrurile, si nu de amatori care cred ca daca folosesc din plin ultimele efecte script.aculo.us totul va fi ok. Nu e ok, site-urile trebuie sa fie accesibile, <strong>informatia trebuie sa se gaseasca in stare cat mai pura</strong>. De-aia avem <span class="caps">XML, JSON, XHTML</span>: pentru &#8220;curatarea&#8221; informatiei de toate artificiile grafice. Javascriptul ar trebui sa fie <strong>bonus</strong>, nu esential! Vorbim bineinteles de site-uri normale, nu de aplicatii full-javascript. Cum poti sa te numesti programator web, dar sa scrii un formular de cautare in care submitul se face <strong>doar</strong> prin javascript? Chiar nu iti dai seama ca i-ai terminat pe toti cei care intra de pe terminale non-standard? Sau e nevoie sa intri chiar tu intr-o zi de pe un telefon mobil, intr-un moment de urgenta, sa cauti ceva pe un site, si sa nu poti sa faci asta pentru ca respectivul programator nu a pus buton de submit. &#8220;Pentru ce? Nu poate sa dea enter?&#8221;. Nu.</p>

<p><strong>Asadar</strong>, un site <strong>trebuie</strong> sa functioneze 100% chiar si cu javascript dezactivat. Iar atunci cand este activat, sa nu fie nevoie sa am grija unde dau click pentru a nu naviga de pe pagina curenta unde am informatii importante. Vreau sa am incredere ca acel click pe care il fac pe linkul din meniu nu imi va strica experienta navigarii pe site. Acest lucru se cheama &#8220;non obtrusive javascript&#8221;, iar directia spre care ar trebui sa tindem toti se cheama &#8220;accesibilitate&#8221;.</p>]]></content:encoded>
			<wfw:commentRss>http://www.idevelop.ro/to-click-or-not-to-click.htm/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Front end developer wanted @ F5 Solutions</title>
		<link>http://www.idevelop.ro/front-end-developer-wanted-f5-solutions.htm</link>
		<comments>http://www.idevelop.ro/front-end-developer-wanted-f5-solutions.htm#comments</comments>
		<pubDate>Fri, 09 Nov 2007 17:16:21 +0000</pubDate>
		<dc:creator>andrei</dc:creator>
				<category><![CDATA[Dezvoltare client-side]]></category>
		<category><![CDATA[Internetul romanesc]]></category>

		<guid isPermaLink="false">http://www.idevelop.ro/front-end-developer-wanted-f5-solutions.htm</guid>
		<description><![CDATA[<a href="http://www.idevelop.ro/front-end-developer-wanted-f5-solutions.htm" title="Front end developer wanted @ F5 Solutions"><img src="http://www.idevelop.ro/wp-content/job_f5solutions.jpg" width="0" height="0" alt="Front end developer wanted @ F5 Solutions" style="float:left;padding:0 10px 10px 0;" ></a>Un prieten m-a rugat sa pun pe blog un anunt de angajare la firma F5 Solutions din Bucuresti, pe postul de front end developer. Here it goes:

F5 Solutions cauta un Front-End Web Developer care sa raspunda afirmativ la cel putin 5 din urmatoarele 8 intrebari:



Poti face o comparatie intre cel putin 2 framework-uri JavaScript?
Codul XHTML [...]]]></description>
			<content:encoded><![CDATA[<a href="http://www.idevelop.ro/front-end-developer-wanted-f5-solutions.htm" title="Front end developer wanted @ F5 Solutions"><img src="http://www.idevelop.ro/wp-content/job_f5solutions.jpg" width="0" height="0" alt="Front end developer wanted @ F5 Solutions" style="float:left;padding:0 10px 10px 0;" ></a><p>Un prieten m-a rugat sa pun pe blog un anunt de angajare la firma F5 Solutions din Bucuresti, pe postul de front end developer. Here it goes:</p>

<p><a href="http://www.f5solutions.ro/">F5 Solutions</a> cauta un <strong>Front-End Web Developer</strong> care sa raspunda afirmativ la cel putin 5 din urmatoarele 8 intrebari:</p>


<ul>
<li>Poti face o comparatie intre cel putin 2 framework-uri JavaScript?</li>
<li>Codul <span class="caps">XHTML </span>scris de tine este corect din punct de vedere semantic?</li>
<li>Preferi un editor de tip <span class="caps">TEXT </span>(cu sintax-highlighting) in detrimentul unui editor de tip <span class="caps">WYSIWYG</span>?</li>
<li>Cunosti cel putin o solutie pentru realizarea unui transfer asincron de date cross-domain?</li>
<li>Obisnuiesti sa validezi codul <span class="caps">XHTML </span>/ <span class="caps">CSS </span>conform standardelor <span class="caps">W3C</span>?</li>
<li>&acirc;€śCross-Browser&acirc;€ť, &acirc;€śfiabilitate&acirc;€ť si &acirc;€śscalabilitate&acirc;€ť se numara printre caracteristicile definitorii ale proiectelor tale?</li>
<li>Esti familiar cu cel putin 4 dintre urmatorii termeni: &acirc;€śhasLayout&acirc;€ť, &acirc;€śmostenire&acirc;€ť, &acirc;€śDOM&acirc;€ť, &acirc;€śelemente multi-class&acirc;€ť, &acirc;€śpolimorfism&acirc;€ť?</li>
<li>Ai folosit pana acum o tehnologie text-based de serializare / transmitere a datelor in afara de <span class="caps">XML</span>?</li>
</ul>



<p><strong>Cunostintele si conditiile obligatorii sunt urmatoarele:</strong></p>

<p>    * <span class="caps">XHTML, CSS</span>;<br />
    * <span class="caps">XML, XSLT, JSON</span>;<br />
    * JavaScript (OOP, minim 4 luni experienta in utilizarea unui framework);<br />
    * Un portofoliu care sa cuprinda cel putin 3 proiecte / experimente / aplicatii relevante;<br />
    * Seriozitate, responsabilitate, etica profesionala;<br />
    * Simtul umorului (nu glumim).</p>

<p><strong>Esti avantajat daca:</strong></p>

<p>    * Ai experienta in utilizarea Smarty;<br />
    * Ai experienta in utilizarea Fireworks si/sau Photoshop (slicing / export);<br />
    * Esti familiar cu modul de functionare al tehnologiilor server-side (cel putin la nivel de concept);<br />
    * Te implici, esti activ si stii sa-ti exprimi / argumentezi propriile idei si convingeri;<br />
    * Esti intr-un proces continuu de autodepasire.</p>

<p><strong>Beneficii:</strong></p>

<p>    * Proiecte complexe si incitante;<br />
    * Pachet salarial si bonusuri atractive;<br />
    * Programul (flexibil) incepe undeva in jurul orei 11:00 (somn++, trafic&acirc;€“);<br />
    * Atmosfera placuta si degajata (cu mici exceptii: luni dimineata si vineri seara);<br />
    * Echipa tanara (pe bune) si statica (la 8 ore pe zi in fata monitorului numai dinamica nu e);<br />
    * Sansa de a te &acirc;€śrazbuna&acirc;€ť zilnic pe colegii tai utilizand &acirc;€śarmele din dotare&acirc;€ť (X-BOX / PC gaming sessions)<br />
    * Restul le descoperim impreuna pe parcurs.</p>

<p><strong>Locatie:</strong> Bucuresti (Cartierul Primaverii)</p>

<p><strong>Program:</strong> Full-Time</p>

<p>Dupa cum probabil ti-ai dat seama, NU cautam script-kiddies si in nici un caz NU suntem adeptii conceptului &acirc;€śstruto-camila&acirc;€ť / &acirc;€śone man show&acirc;€ť.</p>

<p>Acestea fiind spuse, asteptam <strong>CV-ul</strong> tau insotit de <strong>3 link-uri</strong> catre cele mai reprezentative proiecte realizate de tine (in cazul in care un proiect nu a fost realizat integral de tine te rugam sa specifici care au fost contributiile tale) pe adresa <strong>jobs [at] f5solutions [dot] ro</strong> (vor fi contactati numai cei care vor fi selectati pentru interviu). Studentii sunt bine-veniti.</p>]]></content:encoded>
			<wfw:commentRss>http://www.idevelop.ro/front-end-developer-wanted-f5-solutions.htm/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Internet explorer 6 + 7 pe acelasi calculator</title>
		<link>http://www.idevelop.ro/internet-explorer-6-7-pe-acelasi-calculator.htm</link>
		<comments>http://www.idevelop.ro/internet-explorer-6-7-pe-acelasi-calculator.htm#comments</comments>
		<pubDate>Wed, 26 Sep 2007 13:11:45 +0000</pubDate>
		<dc:creator>andrei</dc:creator>
				<category><![CDATA[Dezvoltare client-side]]></category>

		<guid isPermaLink="false">http://www.idevelop.ro/internet-explorer-6-7-pe-acelasi-calculator.htm</guid>
		<description><![CDATA[<a href="http://www.idevelop.ro/internet-explorer-6-7-pe-acelasi-calculator.htm" title="Internet explorer 6 + 7 pe acelasi calculator"><img src="http://www.idevelop.ro/wp-content/10-cssie.jpg" width="0" height="0" alt="Internet explorer 6 + 7 pe acelasi calculator" style="float:left;padding:0 10px 10px 0;" ></a>Stim cu totii cata bataie de cap ne dau bugurile lui Internet Explorer. Versiunea 6 e un dezastru pentru cei ce scriu CSS. Versiunea 7 e putin mai buna, dar are in continuare probleme. Asa ca, pentru a asigura un site cross-browser, e nevoie de testare pe amandoua.
Din pacate, daca instalezi IE7 direct pe XP, [...]]]></description>
			<content:encoded><![CDATA[<a href="http://www.idevelop.ro/internet-explorer-6-7-pe-acelasi-calculator.htm" title="Internet explorer 6 + 7 pe acelasi calculator"><img src="http://www.idevelop.ro/wp-content/10-cssie.jpg" width="0" height="0" alt="Internet explorer 6 + 7 pe acelasi calculator" style="float:left;padding:0 10px 10px 0;" ></a><p>Stim cu totii cata bataie de cap ne dau bugurile lui Internet Explorer. Versiunea 6 e un dezastru pentru cei ce scriu <span class="caps">CSS.</span> Versiunea 7 e putin mai buna, dar are in continuare probleme. Asa ca, pentru a asigura un site cross-browser, e nevoie de testare pe amandoua.<br />
Din pacate, daca instalezi <span class="caps">IE7 </span>direct pe <span class="caps">XP, </span>iti suprascrie versiunea 6 si nu mai ai acces la ea.</p>

<p>M-am interesat si am gasit o solutie destul de buna zic eu. Mie mi-a mers :).</p>

<p>1. Se instaleaza <span class="caps">IE7 </span>pentru XP <span class="caps">SP2 </span>de aici: <a href="http://www.microsoft.com/windows/ie/downloads/default.mspx"><span class="caps">IE7</span>-WindowsXP-x86-enu.exe</a>.</p>

<p>2. Se downloadeaza installerul <a href="http://tredosoft.com/Multiple_IE">Multiple IE</a>. <a href="http://tredosoft.com/files/multi-ie/multiple-ie-setup.exe">Link direct</a>.<br />
Acesta copiaza versiuni stand-alone pentru IE 3, 4.01, 5, 5.5, 6.</p>

<p>That&#8217;s it :).</p>]]></content:encoded>
			<wfw:commentRss>http://www.idevelop.ro/internet-explorer-6-7-pe-acelasi-calculator.htm/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Web Semantics, best practices</title>
		<link>http://www.idevelop.ro/web-semantics-best-practices.htm</link>
		<comments>http://www.idevelop.ro/web-semantics-best-practices.htm#comments</comments>
		<pubDate>Wed, 12 Sep 2007 00:15:22 +0000</pubDate>
		<dc:creator>andrei</dc:creator>
				<category><![CDATA[Dezvoltare client-side]]></category>

		<guid isPermaLink="false">http://www.idevelop.ro/web-semantics-best-practices.htm</guid>
		<description><![CDATA[<a href="http://www.idevelop.ro/web-semantics-best-practices.htm" title="Web Semantics, best practices"><img src="http://www.idevelop.ro/wp-content/9-semantics.jpg" width="0" height="0" alt="Web Semantics, best practices" style="float:left;padding:0 10px 10px 0;" ></a>Layouturile bazate in intregime pe CSS nu mai sunt de mult un lux in webul romanesc. Avantajele lor asupra layouturilor bazate pe tabele se cunosc, nu e cazul sa le mai enumar aici. Din pacate, in goana dupa &#8220;xhtml css valid&#8221;, unele lucruri au fost prost (sau deloc) intelese, printre care si semantica.

Sa luam ca [...]]]></description>
			<content:encoded><![CDATA[<a href="http://www.idevelop.ro/web-semantics-best-practices.htm" title="Web Semantics, best practices"><img src="http://www.idevelop.ro/wp-content/9-semantics.jpg" width="0" height="0" alt="Web Semantics, best practices" style="float:left;padding:0 10px 10px 0;" ></a><p>Layouturile bazate in intregime pe <span class="caps">CSS </span>nu mai sunt de mult un lux in webul romanesc. Avantajele lor asupra layouturilor bazate pe tabele se cunosc, nu e cazul sa le mai enumar aici. Din pacate, in goana dupa &#8220;xhtml css valid&#8221;, unele lucruri au fost prost (sau deloc) intelese, printre care si <strong>semantica</strong>.</p>

<p>Sa luam ca exemplu tabelele. Desi singura lor vina este ca pana acum au fost folosite incorect de web designeri, ele nu mai sunt dorite in nici o parte a unui site, pentru ca toata lumea stie acum de <em>&#8220;tableless layouts&#8221;</em>.</p>

<table width="100%" cellspacing="0">
	<tr><th>Nume</th><th>Prenume</th><th>Varsta</th></tr>
	<tr><td>de Hunedoara</td><td>Iancu</td><td>620 ani</td></tr>
	<tr><td>Tepes</td><td>Vlad</td><td>576 ani</td></tr>
</table>



<p>Acesta este un tabel simplu. Informatiile sunt dispuse clar, usor de inteles.</p>

<p>Acum, ce parere aveti de urmatoarele doua bucati de cod?:</p>



<pre class="html">
&lt;table&gt;
	&lt;tr&gt;
		&lt;th&gt;Nume&lt;/th&gt;
		&lt;th&gt;Prenume&lt;/th&gt;
		&lt;th&gt;Varsta&lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;de Hunedoara&lt;/td&gt;
		&lt;td&gt;Iancu&lt;/td&gt;
		&lt;td&gt;620 ani&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Tepes&lt;/td&gt;
		&lt;td&gt;Vlad&lt;/td&gt;
		&lt;td&gt;576 ani&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
</pre>





<pre class="html">
&lt;div class=&quot;table&quot;&gt;
	&lt;div class=&quot;table-row&quot;&gt;
		&lt;span class=&quot;table-headcell&quot;&gt;Nume&lt;/span&gt;
		&lt;span class=&quot;table-headcell&quot;&gt;Prenume&lt;/span&gt;
		&lt;span class=&quot;table-headcell&quot;&gt;Varsta&lt;/span&gt;
	&lt;/div&gt;
	&lt;div class=&quot;table-row&quot;&gt;
		&lt;span class=&quot;table-cell&quot;&gt;de Hunedoara&lt;/span&gt;
		&lt;span class=&quot;table-cell&quot;&gt;Iancu&lt;/span&gt;
		&lt;span class=&quot;table-cell&quot;&gt;620 ani&lt;/span&gt;
	&lt;/div&gt;
	&lt;div class=&quot;table-row&quot;&gt;
		&lt;span class=&quot;table-cell&quot;&gt;Tepes&lt;/span&gt;
		&lt;span class=&quot;table-cell&quot;&gt;Vlad&lt;/span&gt;
		&lt;span class=&quot;table-cell&quot;&gt;576 ani&lt;/span&gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>



<p>Interesant, nu? Mai e nevoie sa scriu si codul <span class="caps">CSS </span>necesar pentru ca a doua varianta sa arate ca prima? Pare absurd, dar multi sunt convinsi ca a doua varianta e cea mai buna (indiferent de circumstante), pentru ca &#8220;e din css&#8221;. <strong>Tabelele nu sunt rele!</strong> Ele trebuie folosite pentru informatii tabulare. E normal si semantic corect sa fie folosite astfel si este anormal sa se foloseasca o alta structura doar de dragul de a nu folosi tabele.</p>

<p>A scrie un site corect dpdv semantic inseamna a folosi fiecare tag html cu scopul pentru care a fost creat. Lista tagurilor suportate in <span class="caps">XHTML</span> 1.0 este <a href="http://www.w3schools.com/tags/default.asp">aici</a>. Daca o portiune de text vrei sa fie rosie, iti pui intrebarea &#8220;de ce?&#8221;. Iar daca raspunsul este &#8220;vreau sa scot acea portiune de text in evidenta&#8221;, atunci in loc sa folosesti <code>&lt;span class=&quot;red&quot;&gt;</code>, vei folosi <code>&lt;strong class=&quot;important&quot;&gt;</code>.</p>

<p><strong>O regula de bun simt</strong>: daca, dupa dezactivarea stylesheet-ului <span class="caps">CSS, </span>nu poti identifica rapid elementele structurale ale site-ului (titluri, blocuri de text separate, formulare, meniu), atunci ceva e in neregula, iar structura <span class="caps">HTML </span>trebuie regandita putin. De asemenea, imaginile n-ar trebui sa existe in codul <span class="caps">HTML </span>decat daca sunt cu adevarat relevante pentru continut (ex: screenshoturi la o aplicatie). In rest, orice imagine (titluri mai speciale, colturi rotunjite, butoane colorate) trebuie adusa din <span class="caps">CSS, </span>de obicei folosind <code>background-image</code>. Asadar, o lista de comentarii la un articol va fi creata folosind o lista numerotata, titlurile vor folosi tagurile <code>&lt;hN&gt;</code> iar meniurile vor fi liste neordonate.</p>

<p><strong>De ce este important sa scriem <span class="caps">HTML </span>semantic? Din multe motive.</strong> Unul ar fi <acronym title="Search Engine Optimization">SEO</acronym>, deoarece se stie ca Google extrage informatiile dintr-un site in functie de structura <span class="caps">HTML</span>-ului, deci e bine sa-i indicam exact ce informatii sunt utile.<br />
Un alt motiv este &#8220;backwards compatibility&#8221;: acest lucru inseamna ca daca site-ul va fi accesat de un dispozitiv mai putin inzestrat decat un calculator (ex: telefoane, screen readere, browsere mai vechi), structura lui va ramane in picioare iar informatiile vor putea fi accesate cu usurinta.<br />
De asemenea, daca intr-o zi site-ul va fi preluat de un alt developer, ii va fi mult mai usor sa inteleaga cum functioneaza lucrurile in codul <span class="caps">HTML.</span><br />
Nu in ultimul rand pentru ca este primul pas catre <em>semantic web</em>.</p>

<p>Este bine de stiut ca nici un tag <span class="caps">HTML </span>nu e special in vreun fel (cu putine exceptii, cum ar fi tagul <code>&lt;a&gt;</code>). Felul cum arata un <code>&lt;h3&gt;</code> (de exemplu) depinde de setarile default ale fiecarui browser. Poti crea un intreg site doar din taguri <code>&lt;span&gt;</code>, <a href="http://www.webdesignbox.ro/forum/index.php?showtopic=5036">fapt dovedit aici</a>, insa in acest fel anulezi complet ideea de semantica asociata cu tagurile.</p>

<p><strong>Resurse utile</strong></p>


<ul>
<li><a href="http://brainstormsandraves.com/articles/semantics/structure/">Semantics, <span class="caps">HTML, XHTML, </span>and Structure</a></li>
<li><a href="http://www.kottke.org/03/08/standards-semantically-correct">Standards don&#8217;t necessarily have anything to do with being semantically correct</a></li>
<li><a href="http://infomesh.net/2001/swintro/">The Semantic Web: An Introduction</a></li>
</ul>



<p><strong>Completare</strong><br />
Ionut a scris acum cateva zile <a href="http://blog.iamntz.com/243/form-css.iamntz">un articol foarte bun</a> despre stilizarea formularelor fara a folosi tabele, ci folosind definition lists. Enjoy :)</p>]]></content:encoded>
			<wfw:commentRss>http://www.idevelop.ro/web-semantics-best-practices.htm/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Formulare: uzabilitate si accesibilitate</title>
		<link>http://www.idevelop.ro/formulare-uzabilitate-si-accesibilitate.htm</link>
		<comments>http://www.idevelop.ro/formulare-uzabilitate-si-accesibilitate.htm#comments</comments>
		<pubDate>Mon, 27 Aug 2007 23:48:34 +0000</pubDate>
		<dc:creator>andrei</dc:creator>
				<category><![CDATA[Dezvoltare client-side]]></category>

		<guid isPermaLink="false">http://www.idevelop.ro/formulare-uzabilitate-si-accesibilitate.htm</guid>
		<description><![CDATA[<a href="http://www.idevelop.ro/formulare-uzabilitate-si-accesibilitate.htm" title="Formulare: uzabilitate si accesibilitate"><img src="http://www.idevelop.ro/wp-content/7-webforms1.jpg" width="0" height="0" alt="Formulare: uzabilitate si accesibilitate" style="float:left;padding:0 10px 10px 0;" ></a>Am dat peste un articol excelent despre designul formularelor pe web, probleme de accesibilitate si uzabilitate. O sa incerc sa fac un rezumat:



Diferentierea vizuala (dimensiune, culoare) dintre butoanele ce reprezinta actiunile principale (save/submit/continue..) si cele secundare (go back/reset/cancel) ale unui formular reduce riscul unor greseli si conduce inconstient utilizatorul pe drumul bun
Alinierea butoanelor finale (Submit/Cancel) [...]]]></description>
			<content:encoded><![CDATA[<a href="http://www.idevelop.ro/formulare-uzabilitate-si-accesibilitate.htm" title="Formulare: uzabilitate si accesibilitate"><img src="http://www.idevelop.ro/wp-content/7-webforms1.jpg" width="0" height="0" alt="Formulare: uzabilitate si accesibilitate" style="float:left;padding:0 10px 10px 0;" ></a><p>Am dat peste un <a href="http://www.lukew.com/resources/articles/PSactions.asp">articol excelent despre designul formularelor pe web</a>, probleme de accesibilitate si uzabilitate. O sa incerc sa fac un rezumat:</p>


<ul>
<li>Diferentierea vizuala (dimensiune, culoare) dintre butoanele ce reprezinta <strong>actiunile principale</strong> (save/submit/continue..) si cele <strong>secundare</strong> (go back/reset/cancel) ale unui formular reduce riscul unor greseli si conduce inconstient utilizatorul pe drumul bun</li>
<li>Alinierea butoanelor finale (Submit/Cancel) in partea stanga a formularului, in rand cu inputurile de dinainte, ajuta utilizatorul sa inteleaga mai usor scopul butoanelor si sa il aleaga pe cel pe care vor sa apese, deoarece ochii sai vor avea o distanta mai mica de parcurs pe suprafata formularului</li>
<li>Alinierea butoanelor in partea dreapta a fost cea mai nefericita varianta, candidatii necesitand cel mai mult timp pana cand sa proceseze scopul fiecaruia</li>
<li>Ideala este crearea unei axe verticale puternice prin alinierea tuturor inputurilor in partea stanga, in rand cu butoanele.</li>
</ul>



<p>In <a href="http://www.lukew.com/resources/articles/PSactions.asp">articol</a> veti gasi explicatii amanuntite, precum si o analiza pe mai multe layouturi ale aceluiasi formular.</p>

<p><strong>Cateva articole asemanatoare:</strong></p>


<ul>
<li><a href="http://www.alistapart.com/articles/sensibleforms">Sensible Forms: A Form Usability Checklist</a></li>
<li><a href="http://www.usability.com.au/resources/forms.cfm">Web Usability &#8211; Accessible Forms</a></li>
<li><a href="http://www.uxmatters.com/MT/archives/000068.php">Evaluating the Usability of Search Forms Using Eyetracking</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.idevelop.ro/formulare-uzabilitate-si-accesibilitate.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introducere in JSON (JavaScript Object Notation)</title>
		<link>http://www.idevelop.ro/introducere-in-json-javascript-object-notation.htm</link>
		<comments>http://www.idevelop.ro/introducere-in-json-javascript-object-notation.htm#comments</comments>
		<pubDate>Tue, 21 Aug 2007 00:33:07 +0000</pubDate>
		<dc:creator>andrei</dc:creator>
				<category><![CDATA[Dezvoltare client-side]]></category>
		<category><![CDATA[Programare web]]></category>

		<guid isPermaLink="false">http://www.idevelop.ro/introducere-in-json-javascript-object-notation.htm</guid>
		<description><![CDATA[<a href="http://www.idevelop.ro/introducere-in-json-javascript-object-notation.htm" title="Introducere in JSON (JavaScript Object Notation)"><img src="http://www.idevelop.ro/wp-content/5-json.jpg" width="0" height="0" alt="Introducere in JSON (JavaScript Object Notation)" style="float:left;padding:0 10px 10px 0;" ></a>Introducere

Aplicatiile web se bazeaza din ce in ce mai mult pe javascript pentru transferul de informatii intre serverul web si browserul vizitatorului. Aceste informatii pot fi trimise fie plain-text, fie serializate intr-un obiect JSON, fie intr-o structura XML. Pentru ca datele trimise de server sa poata fi utilizate in cadrul javascript-ului, ele trebuie extrase cumva [...]]]></description>
			<content:encoded><![CDATA[<a href="http://www.idevelop.ro/introducere-in-json-javascript-object-notation.htm" title="Introducere in JSON (JavaScript Object Notation)"><img src="http://www.idevelop.ro/wp-content/5-json.jpg" width="0" height="0" alt="Introducere in JSON (JavaScript Object Notation)" style="float:left;padding:0 10px 10px 0;" ></a><h3>Introducere</h3>

<p>Aplicatiile web se bazeaza din ce in ce mai mult pe javascript pentru transferul de informatii intre serverul web si browserul vizitatorului. Aceste informatii pot fi trimise fie plain-text, fie serializate intr-un obiect <acronym title="JavaScript Object Notation">JSON</acronym>, fie intr-o structura <acronym title="Extensible Markup Language">XML</acronym>. Pentru ca datele trimise de server sa poata fi utilizate in cadrul javascript-ului, ele trebuie extrase cumva din string-ul responseText. Aceasta operatie de extragere a informatiilor dintr-un text care respecta o anumita sintaxa (bine definita) se cheama <em>parsare</em>.</p>

<p><strong>Cum ii spune si numele, <span class="caps">JSON </span>este o notatie, o sintaxa care descrie felul in care sunt incapsulate obiecte (array-uri, stringuri, numere, etc) intr-un anumit format, dupa reguli bine stabilite.</strong></p>

<p><span class="caps">XML</span>-ul nu este un format nativ javascript, sintaxa lui nu are sens intr-un cod sursa .js, de aceea este nevoie de un set de functii in plus pentru extragerea datelor venite in acest format, ceea ce mareste timpul de procesare.<br />
<strong>Sintaxa <span class="caps">JSON </span>insa, este perfect compatibila cu javascript</strong>. Stringul primit de la server nu trebuie decat evaluat (cu functia <code>eval()</code>) si este automat transformat in variabila. Nu este necesara folosirea niciunei librarii externe. Functia <code>eval()</code> executa stringul dat ca parametru ca si cum ar fi cod javascript.</p>

<p><strong>Un exemplu de string cu sintaxa <span class="caps">JSON</span>:</strong></p>


<pre class="javascript">
{
	&quot;numeMagazin&quot; : &quot;SC Gigel impex SRL&quot;,
	&quot;produse&quot; : [
		{ &quot;nume&quot; : &quot;Tricou&quot;, &quot;cantitate&quot; : 2, &quot;pret&quot; : 120 },
		{ &quot;nume&quot; : &quot;Telefon&quot;, &quot;cantitate&quot; : 6, &quot;pret&quot; : 500 },
		{ &quot;nume&quot; : &quot;Creion&quot;, &quot;cantitate&quot; : 10, &quot;pret&quot; : 20 }
	],
	&quot;adresa&quot; : &quot;Strada Primaverii nr. 3&quot;
}
</pre>



<p><strong>O structura echivalenta in <span class="caps">XML </span>ar fi:</strong></p>



<pre class="html">
&lt;?xml version='1.0' encoding='UTF-8'?&gt;
	&lt;numeMagazin&gt;SC Gigel impex SRL&lt;/numeMagazin&gt;
	&lt;produse&gt;
		&lt;produs&gt;
			&lt;nume&gt;Tricou&lt;/nume&gt;
			&lt;cantitate&gt;2&lt;/cantitate&gt;
			&lt;pret&gt;120&lt;/pret&gt;
		&lt;/produs&gt;
		&lt;produs&gt;
			&lt;nume&gt;Telefon&lt;/nume&gt;
			&lt;cantitate&gt;6&lt;/cantitate&gt;
			&lt;pret&gt;500&lt;/pret&gt;
		&lt;/produs&gt;
		&lt;produs&gt;
			&lt;nume&gt;Creion&lt;/nume&gt;
			&lt;cantitate&gt;10&lt;/cantitate&gt;
			&lt;pret&gt;20&lt;/pret&gt;
		&lt;/produs&gt;
	&lt;/produse&gt;
	&lt;adresa&gt;Strada Primaverii nr. 3&lt;/adresa&gt;
&lt;/xml&gt;
</pre>



<h3>Utilizare</h3>

<p><strong>Dinspre <span class="caps">PHP</span></strong>, un string valid <span class="caps">JSON </span>se poate genera manual, dar cel mai usor este sa folosim o clasa care stie sa transforme orice variabila <span class="caps">PHP </span>(simpla, array, etc) direct in sintaxa <span class="caps">JSON, </span>gata sa fie trimisa browserului. Incepand cu versiunea 5.2.0, <span class="caps">PHP </span>vine cu <a href="http://php.net/json">o extensie</a> care se ocupa atat de <a href="http://www.php.net/manual/en/function.json-encode.php">codarea</a> cat si de <a href="http://www.php.net/manual/en/function.json-decode.php">decodarea</a> obiectelor <span class="caps">JSON.</span> Pentru versiunile mai vechi de <span class="caps">PHP </span>se poate folosi o clasa din <a href="http://www.google.com/search?hl=en&amp;q=php+json+class&amp;lr=">multele disponibile</a>.</p>

<p><strong>Exemplu de utilizare din <span class="caps">PHP, </span>folosind functia <code>json_encode()</code>, disponibila in <span class="caps">PHP</span> 5.2.0</strong>:</p>


<pre class="php">
$array = array(
	&quot;persoana&quot; =&gt; array (
		&quot;nume&quot; =&gt; &quot;Andrei&quot;,
		&quot;varsta&quot; =&gt; 20,
		&quot;email&quot; =&gt; &quot;andrei@idevelop.ro&quot;
	)
);

echo json_encode($array);
</pre>




<pre class="js">
{&quot;persoana&quot;:{&quot;nume&quot;:&quot;Andrei&quot;,&quot;varsta&quot;:20,&quot;email&quot;:&quot;andrei@idevelop.ro&quot;}}
</pre>



<p><strong>In javascript</strong>, dupa cum am spus, ne ajuta foarte mult suportul nativ. Deoarece acel string este, in esenta, o instructiune javascript, el nu trebuie decat evaluat si devine automat o variabila.</p>



<pre class="javascript">
var rezultat = eval('(' + ajax.responseText + ')');
// in acest moment, &quot;rezultat&quot; este un obiect javascript
alert(rezultat.persoana.nume); // va afisa &quot;Andrei&quot;
</pre>



<p>Obiectul astfel obtinut poate fi parcurs exact ca orice array, elementele sale putand fi la randul lor array-uri, etc. Pentru primul exemplu, cel cu magazinul, afisarea tuturor produselor se poate face in felul urmator:</p>


<pre class="javascript">
var magazin = eval('(' + ajax.responseText + ')');
for (var k=0; k&lt;magazin.produse.length; k++) {
	alert(magazin.produse[k].nume);
}
</pre>



<p>Pentru a vedea pe viu ce si cum se intampla, am creat o pagina demonstrativa:</p>

<p class="topmessage"><a href="http://www.idevelop.ro/sandbox/json.htm" rel="nofollow">Exemplu de utilizare <span class="caps">JSON</span></a>: un exemplu de prelucrare a unui string <span class="caps">JSON</span></p>

<h3><span class="caps">JSON </span>versus <span class="caps">XML</span></h3>

<p>Cum am vazut, atat <span class="caps">JSON </span>cat si <span class="caps">XML </span>nu sunt decat sintaxe in care sunt invelite, intr-un mod structurat, informatiile. De ce am folosi unul si nu celalalt? Ca de obicei, parerile sunt impartite si exista avantaje si dezavantaje in ambele cazuri.</p>

<p><strong>Avantajele <span class="caps">JSON</span></strong></p>


<ul>
<li>Parsarea unui obiect <span class="caps">JSON </span>in javascript este mult mai rapida decat parsarea acelorasi informatii impachetate intr-o structura <span class="caps">XML, </span>datorita suportului nativ.</li>
<li>Parcurgerea informatiilor obtinute este de asemenea mult mai usoara decat folosind functii <span class="caps">XML </span>gen <code>childNodes()</code> sau <code>nextChild()</code>.</li>
<li>Datorita sintaxei simple, dimensiunea unui raspuns <span class="caps">AJAX </span>in forma <span class="caps">JSON </span>va fi mult mai mica in comparatie cu un <span class="caps">XML </span>stufos, cum puteti vedea si in exemplul de mai sus.</li>
</ul>



<p><strong>Avantajele <span class="caps">XML</span></strong></p>


<ul>
<li>Este mult mai raspandit, exista multe implementari de parsere si generatoare pentru majoritatea limbajelor de programare existente</li>
<li>XPath, <span class="caps">XSLT</span></li>
</ul>



<h3>Securitate</h3>

<p>Atata timp cat sunteti siguri ca serverul care trimite datele in format <span class="caps">JSON </span>este de incredere, totul este ok (desi, teoretic, este posibil ca pachetele sa fie interceptate intr-un punct intermediar si inlocuite cu altele, deoarece informatiile sunt trimise plain-text, fara criptare).</p>

<p>Daca insa trebuie sa parsati cod venit de la un alt site (cum trimite, de exemplu, <a href="http://www.jobber.ro/api/api.php?action=getJobs&amp;type=0&amp;category=0&amp;count=5&amp;random=1&amp;days_behind=7&amp;response=js">jobber</a> pentru widgetul sau) asupra caruia nu aveti control, pot aparea probleme de securitate. Daca cineva compromite serverul jobber si introduce in codul javascript trimis spre widget instructiuni malitioase, acestea vor fi executate de catre functia <code>eval()</code> in browserul vizitatorului. In acest caz, pentru intarirea securitatii, este bine sa folosim un <a href="http://www.json.org/js.html"><span class="caps">JSON</span> Parser</a>, o functie care parseaza doar codul <span class="caps">JSON </span>din textul primit, ignorand instructiunile javascript.</p>

<p>O alta problema de securitate este <em>javascript hijacking</em>, dar mai multe despre asta intr-un articol viitor :).</p>

<p><strong>Linkuri utile</strong></p>


<ul>
<li><a href="http://www.json.org/"><span class="caps">JSON.</span>org</a></li>
<li><a href="http://www.quirksmode.org/blog/archives/2005/12/the_ajax_respon.html">The <span class="caps">AJAX </span>response: <span class="caps">XML, HTML, </span>or <span class="caps">JSON</span>?</a></li>
<li><a href="http://www.dustindiaz.com/json-for-the-masses/"><span class="caps">JSON </span>for the masses</a></li>
<li><a href="http://en.wikipedia.org/wiki/Json#Security_issues">Wikipedia: <span class="caps">JSON</span></a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.idevelop.ro/introducere-in-json-javascript-object-notation.htm/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Jobber + Google maps = love</title>
		<link>http://www.idevelop.ro/jobber-google-maps-love.htm</link>
		<comments>http://www.idevelop.ro/jobber-google-maps-love.htm#comments</comments>
		<pubDate>Fri, 03 Aug 2007 12:08:18 +0000</pubDate>
		<dc:creator>andrei</dc:creator>
				<category><![CDATA[Dezvoltare client-side]]></category>
		<category><![CDATA[Programare web]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.idevelop.ro/jobber-google-maps-love.htm</guid>
		<description><![CDATA[<a href="http://www.idevelop.ro/jobber-google-maps-love.htm" title="Jobber + Google maps = love"><img src="http://www.idevelop.ro/wp-content/2-jobbermap.jpg" width="0" height="0" alt="Jobber + Google maps = love" style="float:left;padding:0 10px 10px 0;" ></a>Ieri mi-am facut cateva ore libere si am adaptat o idee mai veche de-a mea, rezultand Harta Jobber.

Dezvoltarea a fost destul de simpla: codul de baza pentru afisarea unei harti Google in pagina, orasele extrase direct in fisierul js (fara AJAX), putin CSS pentru afisarea bulinelor, iar in final integrarea lor cu search-ul deja existent [...]]]></description>
			<content:encoded><![CDATA[<a href="http://www.idevelop.ro/jobber-google-maps-love.htm" title="Jobber + Google maps = love"><img src="http://www.idevelop.ro/wp-content/2-jobbermap.jpg" width="0" height="0" alt="Jobber + Google maps = love" style="float:left;padding:0 10px 10px 0;" ></a><p>Ieri mi-am facut cateva ore libere si am adaptat o idee mai veche de-a mea, rezultand <a href="http://www.jobber.ro/harta/">Harta Jobber</a>.</p>

<p>Dezvoltarea a fost destul de simpla: <a href="http://www.google.com/apis/maps/documentation/#Introduction">codul de baza</a> pentru afisarea unei harti Google in pagina, orasele extrase direct in fisierul js (fara <span class="caps">AJAX</span>), putin <span class="caps">CSS </span>pentru afisarea bulinelor, iar in final integrarea lor cu search-ul deja existent in site. Mai mult a durat strangerea tuturor coordonatelor pentru orasele disponibile :).</p>

<p>Codul javascript e scris acum ceva vreme, sunt cateva chestii pe acolo de care nu sunt tocmai mandru, dar functioneaza. Inca e in perioada de teste, daca gasiti bug-uri let me know.</p>]]></content:encoded>
			<wfw:commentRss>http://www.idevelop.ro/jobber-google-maps-love.htm/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
