<?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>The Old Intense Minimalism &#187; ecmascript</title>
	<atom:link href="http://im.digitalhymn.com/tag/ecmascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://im.digitalhymn.com</link>
	<description>Looking for a new self</description>
	<lastBuildDate>Mon, 11 Apr 2011 11:53:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Tutorial ActionScript3: Flash CS3 e MXMLC (Flex)</title>
		<link>http://im.digitalhymn.com/2007/12/04/tutorial-actionscript3-flash-cs3-e-mxmlc-flex/</link>
		<comments>http://im.digitalhymn.com/2007/12/04/tutorial-actionscript3-flash-cs3-e-mxmlc-flex/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 01:43:25 +0000</pubDate>
		<dc:creator>Folletto Malefico</dc:creator>
				<category><![CDATA[Technocracy]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[apollo]]></category>
		<category><![CDATA[ecmascript]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://im.digitalhymn.com/2007/12/04/tutorial-actionscript3-flash-cs3-e-mxmlc-flex/</guid>
		<description><![CDATA[E alcuni mesi che lavoro assieme a Simbul su un progetto interno a Kallideas realizzato integralmente in Flash CS3. Data la mia predilezione per ECMAScript 3.x come linguaggio non ho potuto che apprezzare il passaggio di Flash da una interfaccia a livello codice orrenda e inconsistente ad un paradigma finalmente sensato con una Virtual Machine [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://im.digitalhymn.com/wp-content/uploads/2007/12/flash-to-flex.jpg" alt="Flash to Flex" /></p>
<p>E alcuni mesi che lavoro assieme a <a href="http://simbul.bzaar.net/blog/" title="Digital Meadows">Simbul</a> su un progetto interno a <a href="http://www.kallideas.it/" title="Kallideas">Kallideas</a> realizzato integralmente in Flash CS3.<br />
Data la mia predilezione per <a href="http://en.wikipedia.org/wiki/ECMAScript" title="Wikipedia: ECMAScript">ECMAScript</a> 3.x come linguaggio non ho potuto che apprezzare il passaggio di Flash da una interfaccia a livello codice orrenda e inconsistente ad un paradigma finalmente sensato con una Virtual Machine mostruosamente più efficiente e veloce (AVM2).</p>
<p>Fra i dispiaceri che posso annoverare ci sono:</p>
<ol>
<li>L&#8217;utilizzo di ECMAScript 4.x (draft). ECMAScript 3.x utilizza il paradigma a oggetti basato su <strong>prototipi</strong>, mentre la 2.x ci aggiunge (e quasi preferisce) il paradigma a oggetti basato su <strong>classi</strong> (alla Java, C#, etc per intenderci). Se non fosse chiaro, preferisco i prototipi.</li>
<li>La scelta di obj.<strong>addEventListener</strong>(Event.EVENT, function() {}) invece di obj.onEvent <strong>+=</strong> function() {}, sintatticamente più chiaro.</li>
</ol>
<p>Non voglio però approfondire qui i miei rant su AS3, quindi proseguiamo con questo breve corso introduttivo. Tenderò a dire tante cose in modo molto sintetico, per dare un panorama generale e contemporaneamente tutti gli elementi necessari per partire. I buchi mancanti dovrete ovviamente riempirli voi&#8230; o chiedermi nel caso ulteriori spiegazioni. <img src='http://im.digitalhymn.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Esternalizzare il Bootstrap del Codice AS3</h3>
<p>Il progetto l&#8217;ho avviato fin da subito in modo che utilizzasse l&#8217;IDE praticamente solamente per la compilazione (ed eventualmente la programmazione, se non si ha un altro editor).</p>
<p>Questo può essere fatto nel modo <strong>grezzo</strong> mettendo sul frame 1 il seguente codice:</p>
<pre>include "init.as";</pre>
<p>Oppure il modo <strong>elegante</strong> implica configurare il file FLA aprendo File -&gt; Publish Settings&#8230; -&gt; Flash -&gt; Settings&#8230; -&gt; Document Class e scrivere qui il nome della classe AS che si posizionerà a fianco del file FLA (o in uno dei path di ricerca).<br />
La classe richiamata deve ereditare da MovieClip (o credo da qualunque oggetto erediti da DisplayObject). Supponendo di aver scritto in Document Class il nome &#8220;MyApp&#8221; il codice contenuto nell&#8217;omonimo MyApp.as è:</p>
<pre>package {
    import flash.display.MovieClip;

    public class MyApp extends MovieClip {
        public function MyApp() {
            // code
        }
    }
}</pre>
<p>Dentro il costruttore della classe, come dentro il file &#8220;init.as&#8221; specificato nel metodo grezzo, scriverete il vostro codice AS3.<br />
A questo punto Flash non lo toccherete più se non per eseguire il codice o debuggare.</p>
<p>Io consiglio di tenere il file FLA nella root del vostro progetto e creare una cartella <strong>source/</strong> che conterrà tutte le vostri classi e package AS.</p>
<p>Se interessa come strutturare i package e le classi ActionScript consiglio Google e la documentazione Adobe piuttosto buona. Poi beh, se proprio volete scriverò un altro post. <img src='http://im.digitalhymn.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Flex SDK (MXMLC) è free</h3>
<p>Aver reso Flex SDK gratuito è assieme ad AVM2 e AS3 il motivo per cui ora ritengo la &#8220;piattaforma Flash&#8221; degna di sviluppo più consistente.</p>
<p>Potete scaricare Flex SDK (<a href="http://www.adobe.com/products/flex/downloads/" title="Flex Download">2.0 stable</a> o <a href="http://labs.adobe.com/technologies/flex/sdk/flex3sdk.html" title="Flex 3 SDK beta 2">3.0 beta 2</a>). Io utilizzo la 3, al momento senza alcun problema.</p>
<p>Alcuni vantaggi nel passare a MXMLC:</p>
<ol>
<li>E&#8217; <strong>free</strong>.</li>
<li>Eliminazione del peso di Flash CS3, che torna ad essere un ambiente visuale.</li>
<li>Possibilità di usare alcune <strong>macro di inclusione</strong> automatica [Embed].</li>
<li>Possibilità di usare <strong>MXML</strong> (&#8220;HTML per Flash&#8221;) e i suoi CSS.</li>
<li>Possibilità di eseguire script <strong>batch</strong>.</li>
<li>Possibilità di configurare <strong>sorgenti</strong>, librerie, etc in modo flessibile.</li>
<li>E&#8217; meglio indicato per chi volesse sviluppare in <a href="http://labs.adobe.com/technologies/air/" title="Adobe AIR">AIR</a>.</li>
</ol>
<p>Per chi volesse c&#8217;è anche Flex Builder, che è l&#8217;IDE di sviluppo per Flex SDK. Io tendo a fare notare solo una cosa: è Eclipse. Il risultato è che pesa più di Flash CS3. <a href="http://www.google.com/search?q=define%3Adiy" title="Do It Yourself">DIY</a>.</p>
<p>E &#8216; bene notare anche una cosa: è vero che Flex è free (opensource), ma il formato SWF è ancora chiuso e soprattutto rimane chiuso Flash Player. La virtual machine AVM2 invece è aperta (<a href="http://www.mozilla.org/projects/tamarin/" title="Mozilla Tamarin (AS3 - AVM2)">Tamarin</a>).<br />
Certo, anche Windows come piattaforma è chiusa, anche OS X. Ognuno sceglie, però è meglio chiarire questo dubbio. <img src='http://im.digitalhymn.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Da Flash a MXMLC</h3>
<p>Se avete sviluppato il progetto come ho indicato sopra, ovvero senza praticamente niente realizzato dentro Flash CS3 non dovrete quasi riscrivere nessun codice.</p>
<p>Prima di tutto, passate al metodo <strong>elegante</strong> di bootstrap del codice.</p>
<ul>
<li>Se utilizzate classi nel <strong>namespace flash.*</strong> e non in fl.* allora il vostro codice è già pronto.</li>
<li>Se utilizzate classi nel <strong>namespace fl.*</strong> dovete aprire la cartella contenente la vostra installazione di Flash CS3 e localizzare la cartella &#8220;fl&#8221; (su OSX si trova nella sottocartella &#8220;ActionScript 3.0/Classes/fl&#8221;). Prendetela e copiatela nella vostra cartella dei sorgenti (i.e. <strong>source/</strong>).</li>
<li>Se utilizzate anche <strong>componenti fl.controls</strong> il metodo più semplice è creare un SWC da Flash CS3.<br />
Aprite quindi Flash, create un nuovo progetto AS3.<br />
Aprite il pannello components (Window -&gt; Components) e trascinate nella Library tutti i controlli che volete utilizzare (non preoccupatevi, non saranno inclusi automaticamente tutti).<br />
Aprite File -&gt; Publish Settings&#8230; e specificate di voler creare anche il file SWC.<br />
Pubblicate.<br />
Copiate il file SWC in una sottocartella del vostro progetto. Per i sorgenti consigliavo source/, qui consiglio <strong>lib/</strong>.</li>
<li>Se includete <strong>font o altri oggetti grafici</strong> da libreria dovrete includerle nuovamente con [Embed(...)] o altre tecniche. Faccio notare che i comandi [Embed()] sono ignorati da Flash: le variabili su cui agiscono risulteranno quindi vuote se compilate da Flash, piene da MXMLC.</li>
</ul>
<p>Come è abbastanza logico pensare potete vedere che all&#8217;aumentare delle risorse di Flash che avete utilizzato aumenta anche la difficoltà di transizione. Il vantaggio è però che avrete un progetto funzionante sia su Flash che su Flex.</p>
<h3>Eseguire MXMLC</h3>
<p>Una cosa molto interessante che ho scoperto solo recentemente è che MXMLC funziona anche prendendo come parametro un file AS, non soltanto file MXML.</p>
<p>Si tratta proprio dello <strong>stesso file AS creato con il metodo elegante di bootstrap</strong> del codice.</p>
<p>I <a href="http://livedocs.adobe.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00001500.html" title="Flex 2 MXMLC Command Line Parameters">parametri a linea di comando</a> essenziali per MXMLC sono:</p>
<ul>
<li><strong>-sp &lt;path&gt;</strong>: il path contenente i sorgenti AS. Se avete seguito il mio consiglio di sopra sarà quindi source/ (i.e. -sp ./source/).</li>
<li><strong>-library-path+=&lt;path&gt;</strong>: il path contenente le librerie SWC aggiuntive. Se avete seguito il mio consiglio sopra sarà quindi lib/ (i.e. -library-path ./lib/). Fate attenzione al &#8220;+=&#8221;.</li>
<li><strong>-default-frame-rate &lt;int&gt;</strong>: il framerate del file SWF generato. Non avete più un file FLA, quindi va specificato (i.e. -default-frame-rate 25).</li>
<li><strong>-default-size &lt;int&gt; &lt;int&gt;</strong>: le dimensioni di default del filmato SWF (i.e. -default-size 800 600).</li>
<li><strong>-default-background-color &lt;hex&gt;</strong>: il colore di sfondo del filmato SWF (i.e. -default-bacckground-color 0x0066cd).</li>
<li><strong>-compiler.warn-no-type-decl=false</strong>: questo lo utilizzo io perché ritengo importante che in AS3 la tipizzazione sia opzionale e la reputo uno dei più grossi vantaggi di AS3.</li>
<li><strong>-allow-source-path-overlap=true</strong>: questo comando evita un warning in MXMLC dovuto al fatto che avete la cartella source/ come sottodirectory del file che state compilando.</li>
</ul>
<p>Sono tutt&#8217;ora in fase di osservazione e transizione, l&#8217;applicazione di cui parlavo all&#8217;inizio ad esempio è tutt&#8217;ora su Flash e vi sono alcune cose che devo ancora chiarirmi (ad esempio l&#8217;embed). Aggiornerò questo post. <img src='http://im.digitalhymn.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>A questo punto dovreste avere un progetto compilabile contemporaneamente su Flash e su Flex/MXMLC. Spero che non vi siate spaventati troppo. <img src='http://im.digitalhymn.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://im.digitalhymn.com/2007/12/04/tutorial-actionscript3-flash-cs3-e-mxmlc-flex/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>jQuery 2: Ajax</title>
		<link>http://im.digitalhymn.com/2006/12/23/jquery-2-ajax/</link>
		<comments>http://im.digitalhymn.com/2006/12/23/jquery-2-ajax/#comments</comments>
		<pubDate>Sat, 23 Dec 2006 13:31:28 +0000</pubDate>
		<dc:creator>Folletto Malefico</dc:creator>
				<category><![CDATA[Technocracy]]></category>
		<category><![CDATA[ecmascript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://im.digitalhymn.com/2006/12/23/jquery-2-ajax/</guid>
		<description><![CDATA[Come ogni buona libreria &#8216;Web 2.0&#8242; anche jQuery contiene il suo supporto Ajax. Dato l&#8217;orientamento di jQuery verso il DOM (come abbiamo già detto, jQuery inizia con il selezionare tutti gli elementi su cui si applicherà) una delle funzionalità primarie che vengono intuitivamente in mente è il supporto a quello che viene chiamato Ahah. Ovvero, [...]]]></description>
			<content:encoded><![CDATA[<p>Come ogni buona libreria &#8216;Web 2.0&#8242; anche jQuery contiene il suo supporto Ajax. Dato l&#8217;orientamento di jQuery verso il DOM (come abbiamo <a href="http://im.digitalhymn.com/2006/11/30/jquery-0-internals/" title="Intense Minimalism: jQuery Internals">già detto</a>, jQuery inizia con il selezionare tutti gli elementi su cui si applicherà) una delle funzionalità primarie che vengono intuitivamente in mente è il supporto a quello che viene chiamato Ahah. Ovvero, una variante Ajax che invece si chiama &#8220;Asynchronous HTML And HTTP&#8221;.</p>
<p>Non sono molto d&#8217;accordo con questa definizione che ritengo superflua: Javascript è comunque utilizzato, HTML dovrebbe essere XHTML (quindi XML) e HTTP è una ovvietà.</p>
<h3>Caricamento diretto via Ajax</h3>
<p>Comunque, a parte questa digressione, questo tipo di funzionalità non fa altro che caricare tramite Ajax il contenuto di un elemento della pagina:</p>
<p>Prendo un esempio preso parzialmente da <a href="http://photoshakr.com/home" title="PhotoShakr: shake your Flickr photosets.">PhotoShakr</a>:</p>
<blockquote>
<pre>$("#list").load("form/sets?user=" + $("#email").attr("value"))</pre>
</blockquote>
<p>Il comando è semplice ed intuitivo, come è prevedibile da jQuery:</p>
<ol>
<li>Seleziono gli elementi con ID &#8220;list&#8221;. Essendo un ID è univoco.</li>
<li>Carico (load) al suo interno il risultato della pagina puntata dall&#8217;URL passato come parametro.</li>
<li>Il parametro è composto dal valore dell&#8217;elemento con id &#8220;email&#8221;, che non è altro che il campo del form contenente l&#8217;e-mail dell&#8217;utente.</li>
</ol>
<p>Con una singola riga di codice ho interrogato il server, ottenuto il risultato e modificato la pagina.</p>
<p>Per rendere l&#8217;operazione un po&#8217; più user-friendly poi ho preceduto la riga di cui sopra con:</p>
<blockquote>
<pre>$("#list").html("Asking Flickr...");</pre>
</blockquote>
<p>Che immediatamente cambia il contenuto del campo in modo che l&#8217;utente capisca subito che sta caricando qualcosa.</p>
<h3>Dettagli su load()</h3>
<p>Load accetta oltre all&#8217;URL anche due parametri opzionali: parametri e funzione callback.</p>
<ol>
<li>L&#8217;URL è un normale URL, non credo vi sia niente da aggiungere.</li>
<li>I parametri sono costituiti da un hash contenente coppie di valori da passare (i.e. {test: true}).</li>
<li>La funzione callback è un oggetto funzione javascript (anche lambda, ovvero dichiarato al momento) che viene eseguito appena si è ricevuta risposta dal server. Questa funzione prende un parametro, data, che è il contenuto della risposta (i.e. function(data) { alert(&#8220;Ok!\n&#8221; + data); } ).</li>
</ol>
<p>Ad esempio quindi la chiamata di cui sopra poteva diventare:</p>
<blockquote>
<pre>$('#list').load(root + 'form/sets', {user: $('#email').attr('value')});</pre>
</blockquote>
<p>Che è anche più chiaro da leggersi, separando la posizione della risorsa/comando (URL) dai parametri variabili passati.</p>
<h3>Ajax: anche post() e get()</h3>
<p>Però load() è un comando che carica direttamente nella pagina. Ajax in realtà consente manipolazioni più complesse che potrebbero non richiedere un inserimento 1:1 diretto del risultato sulla pagina.</p>
<p>Per questo motivo ci sono post() e get() che funzionano con gli stessi parametri, ma con la differenza che non si applicano a nessun elemento del DOM:</p>
<ul>
<li>
<pre>$.post(url, params, callback);</pre>
</li>
<li>
<pre>$.get(url, params, callback);</pre>
</li>
</ul>
<p>Come vedete la chiamata non specifica nessun elemento. La funzione callback anche qui ha un parametro che contiene l&#8217;oggetto XML.</p>
<blockquote>
<pre>$.post("test.cgi", function(data) { alert("Ok! " + data); })</pre>
</blockquote>
<p>Preciso un dettaglio importante che potrebbe sfuggire ai meno esperti: si dovrebbe utilizzare GET nel caso in cui non si modifica alcuna risorsa sul server, mentre POST quando si inviano dati che modiicano lo stato del server.</p>
<h3>JSON, cross domain loading</h3>
<p>Vi è anche un&#8217;alternativa ad Ajax, che utilizza un interessante workaround in grado fra le varie cose di aggirare i problemi di sicurezza connessi con la chiamata Ajax allo stesso dominio di appartenenza. Per quanto possa portare a possibili problemi di sicurezza, tutt&#8217;ora non mi risulta ve ne siano, né che i browser lo impediscano in alcun modo.</p>
<p><a href="http://it.wikipedia.org/wiki/JSON" title="Wikipedia: JSON">JSON</a> è un formato di interscambio di dati semplice, basato su sintassi JavaScript (JavaScript Object Notation). Di fatto si tratta di una serie di strutture dati javascript (hash, array, &#8230;).</p>
<p>La nostra libreria jQuery supporta anche questo tipo di chiamate:</p>
<blockquote>
<pre>$.getJSON(url, params, callback);</pre>
</blockquote>
<p>Qui bisogna capire un po&#8217; meglio come passare i dati, in quanto devono essere formattati non in XML ma in JSON, ma per il resto dei dati JSON sono <strong>immediatamente disponibili</strong> e <strong>non necessitano di parsing</strong>.</p>
<p>Il parametro passato alla funzione callback infatti è l&#8217;oggetto JSON appena caricato.</p>
]]></content:encoded>
			<wfw:commentRss>http://im.digitalhymn.com/2006/12/23/jquery-2-ajax/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>jQuery 1: pragma</title>
		<link>http://im.digitalhymn.com/2006/12/04/jquery-1-pragma/</link>
		<comments>http://im.digitalhymn.com/2006/12/04/jquery-1-pragma/#comments</comments>
		<pubDate>Mon, 04 Dec 2006 19:33:36 +0000</pubDate>
		<dc:creator>Folletto Malefico</dc:creator>
				<category><![CDATA[Technocracy]]></category>
		<category><![CDATA[ecmascript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://im.digitalhymn.com/2006/12/04/jquery-1-pragma/</guid>
		<description><![CDATA[Dopo aver accennato ai principi fondamentali di jQuery (tutto nasce da $() e il risultato di un metodo jQuery è sempre un oggetto jQuery) vediamo un po&#8217; concretamente con qualche esempio come si può usare jQuery stesso. Riprendo dall&#8217;esempio fatto la volta scorsa: $("p.surprise").addClass("ohmy").show("slow"); Questa chiamata: Seleziona tutti gli elementi p.surprise (selettore stile CSS). Aggiunge [...]]]></description>
			<content:encoded><![CDATA[<p>Dopo aver accennato ai principi fondamentali di jQuery (tutto nasce da $() e il risultato di un metodo jQuery è sempre un oggetto jQuery) vediamo un po&#8217; concretamente con qualche esempio come si può usare jQuery stesso.</p>
<p>Riprendo dall&#8217;esempio fatto la volta scorsa:</p>
<pre>$("p.surprise").addClass("ohmy").show("slow");</pre>
<p>Questa chiamata:</p>
<ol>
<li>Seleziona tutti gli elementi <em>p.surprise</em> (selettore stile CSS).</li>
<li>Aggiunge a tutti gli elementi <em>p.surprise</em> la classe &#8220;ohmy&#8221; (class=&#8221;ohmy&#8221;).</li>
<li>Visualizza tutti gli elementi <em>p.surprise</em> (modificati con class=&#8221;ohmy&#8221;) con una animazione lenta.</li>
</ol>
<p>Avete provato a pensare quante righe di codice avrebbe richiesto una modifica analoga, anche premettendo che avevate già la funzione che usa i selettori CSS?</p>
<p>Avete notato che tutto questo con jQuery si fa in una riga, in modo chiaro ed efficiente?</p>
<p>Proseguendo in modo intuitivo:</p>
<ol>
<li>se c&#8217;è un addClass() c&#8217;è anche un removeClass().</li>
<li>se c&#8217;è show() c&#8217;è anche hide().</li>
</ol>
<p>Così <a href="http://www.visualjquery.com" title="Visual jQuery">è</a>. Non solo, dato che show() e hide() sono due operazioni distinte che spesso si accompagnano, la sintesi è la funzione toggle(), che non fa altro che chiudere quando è aperto e aprire quando è chiuso. Ovvero, toggle() è un interruttore.<br />
Piccola variazione: avete visto il menu a scomparsa che io uso sul mio blog (si, la barra nra insomma). E&#8217; evidente che si può realizzare in modo molto semplice con una piccola variazione del comando toggle(), che invece di aprirsi genericamente si apre regolando l&#8217;altezza. Questa operazione si chiama slide ed è utilizzabile con queste funzioni:</p>
<ul>
<li>slideUp() &#8211; chiude</li>
<li>slideDown() &#8211; apre</li>
<li>slideToggle() &#8211; interruttore</li>
</ul>
<p>Piccola nota conclusiva a questo post. Le funzioni prendono tutte due parametri, entrambi opzionali:</p>
<ol>
<li><strong>speed</strong> &#8211; il primo parametro regola la velocità di apertura/chiusura</li>
<li><strong>callback</strong> &#8211; il secondo parametro è una funzione che viene chiamata appena l&#8217;operazione si completa.</li>
</ol>
<p>Come sempre, se ci sono dubbi chiedete pure, non fa che bene anche a questo tutorial. <img src='http://im.digitalhymn.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://im.digitalhymn.com/2006/12/04/jquery-1-pragma/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>jQuery 0: internals</title>
		<link>http://im.digitalhymn.com/2006/11/30/jquery-0-internals/</link>
		<comments>http://im.digitalhymn.com/2006/11/30/jquery-0-internals/#comments</comments>
		<pubDate>Thu, 30 Nov 2006 10:28:43 +0000</pubDate>
		<dc:creator>Folletto Malefico</dc:creator>
				<category><![CDATA[Technocracy]]></category>
		<category><![CDATA[ecmascript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://im.digitalhymn.com/2006/11/30/jquery-internals/</guid>
		<description><![CDATA[Questo è il post di introduzione per una serie di articoli riguardanti l'uso della libreria javascript jQuery. Potete trovare tutti gli articoli <a href="http://im.digitalhymn.com/tag/jquery">qui</a>.]]></description>
			<content:encoded><![CDATA[<p>Partendo da una sorta di auto-riflessione nata da un <a href="http://www.napolux.com/2006/11/15/javascript-e-la-funzione/" title="Napolux">post di Napolux</a> mi è venuto in mente che possa essere utile se iniziassi una sorta di rassegna sulla libreria <a href="http://jquery.com/" title="jQuery: new wave javascript library">jQuery</a>. Non sapete cos&#8217;è? Allora vuol dire che l&#8217;idea non era sbagliata. Inizio giusto ora. <img src='http://im.digitalhymn.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Storia</h3>
<p>Breve excursus storico: più o meno in modo coincidente all&#8217;onda Ajax sono nate alcune librerie javascript di automazione per lo sviluppo web. Lo scopo era rendere a tutti la vita più semplice. Nacque così la prima famosa libreria di questo tipo, chiamata <a href="http://prototype.conio.net/" title="Prototype: javascript library">Prototype</a>. Questa però non è tutt&#8217;oggi molto più che una libreria di funzioni: una serie di strumenti utili per semplificarsi la vita ma non molto oltre questo. La documentazione inoltre è sempre stata piuttosto scarsa.<br />
Qualche tempo dopo ha visto la luce jQuery, che si pone quasi in contrasto con Prototype. Vuole infatti porre non una serie di strumenti ma principalmente un <strong>modello uniforme estensibile</strong> e su questo costruire. La libreria risulta anche molto leggera.</p>
<p>Ma una cosa che è sempre mancata in Prototype era la documentazione. Pare che <a href="http://www.visualjquery.com/" title="Visual jQuery">jQuery sia meglio</a>, ma vediamo se riesco a fornire anche qualche strumento in italiano per iniziare a sviluppare con questa libreria.</p>
<h3>Architettura</h3>
<p>Ma <strong>cosa è quindi jQuery?</strong> jQuery è uno strumento per rendere la manipolazione delle pagine (X)HTML uniforme e immediato, con il minor numero possibile di problemi fra un browser e l&#8217;altro.</p>
<p>La libreria jQuery si basa su alcuni punti cardine:</p>
<ol>
<li>Il risultato di una chiamata jQuery è <strong>un altro oggetto jQuery</strong>.</li>
<li>Gli oggetti jQuery sono <strong>insiemi</strong> di elementi.</li>
<li>La chiave di tutto è la funzione <strong>$()</strong>.</li>
<li>Separazione della logica funzionale dalla logica strutturale (interazione vs presentazione).</li>
</ol>
<h3>Esempio</h3>
<p>Ma allora, come si usa esattamente? Il suo funzionamento è quasi magico. Partiamo dall&#8217;esempio sulla homepage della libreria:</p>
<pre>$("p.surprise").addClass("ohmy").show("slow");</pre>
<p>E scomponiamolo:</p>
<ul>
<li>$() utilizza un selettore CSS (non c&#8217;è niente di nuovo da imparare quindi) e restituisce una collezione di oggetti jQuery che rappresentano <strong>tutti i tag che il selettore ha identificato</strong>. Può essere uno solo, o tutti quelli sulla pagina.</li>
<li>A tutti i tag viene quindi aggiunta la classe &#8220;ohmy&#8221;.</li>
<li>A tutti i tag viene applicata la funzione show(), ovvero vengono visualizzati.</li>
</ul>
<p>Si vede in modo chiaro come sia contemporaneamente <strong>semplice</strong> e <strong>potente</strong>. La combinazione della funziona $() con la possibilità di concatenare operazioni raggiunge una notevole potenza espressiva con pochissimo codice.</p>
<h3>Analisi</h3>
<p>Vediamo come è fatto internamente. Faccio notare che non riproporrò praticamente mai il codice completo, che è piuttosto complesso, quanto alcuni estratti utili ai fini logici e di comprensione di javascript.</p>
<pre>var jQuery = function(a, c) { ... }
var $ = jQuery;</pre>
<p>La costruzione è semplice, anche se implica forse alcuni passaggi caratteristici di javascript:</p>
<ol>
<li>Viene creato un oggetto jQuery (var jQuery) e gli viene assegnato un <strong>oggetto funzione</strong> (function() {}) tramite una <a href="http://en.wikipedia.org/wiki/Lambda_calculus#Lambda_calculus_and_programming_languages" title="Wikipedia: Lambda Calculus">lambda function</a>.</li>
<li>Viene creato un oggetto $ al quale viene assegnato l&#8217;oggetto jQuery. jQuery era una funzione, quindi <strong>anche $ sarà una funzione</strong>.<br />
Notate come in var $ = jQuery; jQuery sia passato senza le tonde finali delle funzioni. Scrivere &#8220;jQuery&#8221; significa utilizzare l&#8217;oggetto funzione passato per riferimento. Scrivere &#8220;jQuery()&#8221; significa chiamare la funzione associata all&#8217;oggeto jQuery.</li>
</ol>
<p>Direi che ho messo abbastanza carne al fuoco&#8230; non so quando sarà il prossimo approfondimento, ma ci sarà. <img src='http://im.digitalhymn.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Se avete domande fate pure. <img src='http://im.digitalhymn.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://im.digitalhymn.com/2006/11/30/jquery-0-internals/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

