<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkIHSXYzeyp7ImA9WhRaE0Q.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929</id><updated>2012-02-16T14:22:18.883+01:00</updated><category term="hack" /><category term="travel" /><category term="wiimote" /><category term="freesoftware" /><category term="git" /><category term="workaround" /><category term="debugging" /><category term="Ruby" /><category term="BDD" /><category term="Javascript" /><category term="web" /><category term="*nix" /><category term="geekevening" /><category term="ubiquity" /><category term="events" /><category term="mozilla" /><category term="geek" /><category term="links" /><title>Rpl's Line of Code</title><subtitle type="html">Random Lines of Code, Interesting Stuff around the Web and some Computer Hacking Thoughts</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://rplcodeline.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/RplsLineOfCode" /><feedburner:info uri="rplslineofcode" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Dk8HSXw7fSp7ImA9WxNXE04.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-4715201852053462281</id><published>2009-09-30T19:36:00.004+02:00</published><updated>2009-09-30T20:20:38.205+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-30T20:20:38.205+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="freesoftware" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="hack" /><category scheme="http://www.blogger.com/atom/ns#" term="mozilla" /><title>MozRepl for non-emacs users</title><content type="html">Prima di partire per il &lt;a href="https://wiki.mozilla.org/EU_MozCamp_2009"&gt;MozCamp europeo a Praga&lt;/a&gt; non potevo non rilasciare qualcosa di Mozilliano :-)
&lt;br/&gt;&lt;br/&gt;
E così ho impacchettato la prima versione installabile di un piccolo hack che ho buttato giù qualche mese fa, &lt;a href="http://ubik.cc/projects/mozrepl-panel/"&gt;"MozRepl in a Panel"&lt;/a&gt;:
&lt;br/&gt;&lt;br/&gt;
Un piccolo pannello XUL con embedded la console javascript interattiva di &lt;a href="http://wiki.github.com/bard/mozrepl"&gt;MozRepl&lt;/a&gt; (il mio tool di sviluppo preferito sulla piattaforma Mozilla) in modo da poterla avere a disposizione in una finestra o in un tab dello stesso Firefox in cui vi teletrasporta :-D
&lt;br/&gt;&lt;br/&gt;
Lo scopo? molto semplice:
&lt;br/&gt;&lt;br/&gt;
&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Rendere MozRepl disponibile a tutti i non emacs-addicted :-)&lt;/span&gt;
&lt;/div&gt;
&lt;br/&gt;&lt;br/&gt;
anche se... non sapete cosa vi perdete :-PPPPP
&lt;br/&gt;&lt;br/&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://xulit.org/blogs/rpl/2009/9/28/mozrepl-for-nonemacs-users-0"&gt;annuncio su XUL Italia (con screenshot ;-))&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;&lt;a href="http://ubik.cc/projects/mozrepl-panel"&gt;breve pagina di progetto e download XPI&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/rpl/mozrepl-panel"&gt;repository git dei sorgenti&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br/&gt;&lt;br/&gt;
Happy hacking&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-4715201852053462281?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/rqYlDEDRnWE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/4715201852053462281/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=4715201852053462281" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4715201852053462281?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4715201852053462281?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/rqYlDEDRnWE/mozrepl-for-non-emacs-users.html" title="MozRepl for non-emacs users" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2009/09/mozrepl-for-non-emacs-users.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8AR3o7eSp7ImA9WxJWFk0.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-1957978935754856784</id><published>2009-06-21T19:46:00.003+02:00</published><updated>2009-06-21T19:54:06.401+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-21T19:54:06.401+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="events" /><category scheme="http://www.blogger.com/atom/ns#" term="hack" /><category scheme="http://www.blogger.com/atom/ns#" term="mozilla" /><title>MAOW Firenze 2009</title><content type="html">&lt;p&gt;Anche se non credo sia contemplato dall&amp;#8217;oroscopo cinese, sembra proprio che questo per me sia l&amp;#8217;anno del Mozilla :-D &lt;br /&gt;&lt;br /&gt; Sono stato per la prima volta al FOSDEM a Bruxelles e lì ho potuto partecipare ad una interessante sequenza di seminari sulla piattaforma Mozilla e ad un intenso dibattito tra le varie XUL community europee organizzato da &lt;a href='http://blog.mozbox.org/'&gt;Paul Rouget&lt;/a&gt;&amp;#8230; &lt;br /&gt;&lt;br /&gt; &amp;#8230; Ho avuto l&amp;#8217;opportunità di inserire in un Master alcuni moduli su Javascript, il DOM Scripting, alcuni framework Javascript diffusi (jQuery ed ExtJS) e lo &lt;a href='http://labs.alcacoop.it/doku.php?id=projects:learning:mozillaplatform_intro'&gt;sviluppo di estensioni per Mozilla Firefox in Javascript+XUL&lt;/a&gt; &lt;br /&gt;&lt;br /&gt; &amp;#8230; sembra poi che ci siano i presupposti perchè in futuro si riesca a portare qualcosa di simile (sull&amp;#8217;OpenWeb e l&amp;#8217;uso di Firefox come strumento di sviluppo e debugging) orientato agli studenti di scuola superiore&amp;#8230; &lt;br /&gt;&lt;br /&gt; &amp;#8230; Ed ora il primo &lt;a href='https://wiki.mozilla.org/MAOW:2009:Firenze'&gt;&amp;#8220;MAOW (Mozilla AddOns Workshop) italiano&amp;#8221;&lt;/a&gt;!!! &lt;br /&gt;&lt;br /&gt; La prossima settimana, nel pomeriggio di Sabato 27 Luglio, grazie alla collaborazione tra Mozilla Europa, Mozilla Italia e XULit (di cui faccio parte), ci saranno 4 ore di contenuti e dimostrazioni pratiche per aspirarti Firefox Developer. &lt;br /&gt;&lt;br /&gt; Noi speriamo che questa occasione consenta ad agli altri giovani sviluppatori in Italia di approcciare questa potente piattaforma e la sua community, e soprattutto che sia solo il primo di una lunga serie di &lt;strong&gt;&amp;#8220;Mozilla Hacking Day&amp;#8221;&lt;/strong&gt; italiani!!! &lt;br /&gt;&lt;br /&gt; E' possibile confermare la propria presenza all&amp;#8217;evento al link seguente: &lt;a href='http://events.mozilla-europe.org/event/?id=9'&gt;http://events.mozilla-europe.org/event/?id=9&lt;/a&gt; &lt;br /&gt;&lt;br /&gt; Che ne dite? Ci vediamo a Firenze? ;-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-1957978935754856784?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/MdrFCDeqqXg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/1957978935754856784/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=1957978935754856784" title="2 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/1957978935754856784?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/1957978935754856784?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/MdrFCDeqqXg/maow-firenze-2009.html" title="MAOW Firenze 2009" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2009/06/maow-firenze-2009.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AERHg4eip7ImA9WxVXFk0.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-3788465074175935966</id><published>2009-02-14T12:03:00.002+01:00</published><updated>2009-02-14T12:08:25.632+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-14T12:08:25.632+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="travel" /><category scheme="http://www.blogger.com/atom/ns#" term="freesoftware" /><category scheme="http://www.blogger.com/atom/ns#" term="mozilla" /><category scheme="http://www.blogger.com/atom/ns#" term="geek" /><title>I'm back in...</title><content type="html">&lt;p&gt;Ebbene si&amp;#8230; sono tornato&amp;#8230; in realtà il rischio è stato più che altro quello di non arrivarci proprio al FOSDEM, visto che come anche qualcun&amp;#8217;altro mi ha fatto notare: &lt;a href='http://rplcodeline.blogspot.com/2009/01/im-going-to.html'&gt;Me l&amp;#8217;aggiu propriu chiamata&amp;#8230;&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;p&gt;Alle volte ho l&amp;#8217;impressione di avere le abilità di un &lt;strong&gt;precog&lt;/strong&gt;&amp;#8230; ma ovviamente non lo dite a nessuno&amp;#8230; non vorrei passare il resto della mia vita a mollo nell&amp;#8217;acqua come in Minority Report :-P&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;p&gt;Cmq grazie al verificarsi dell&amp;#8217; &lt;a href='http://www.ansa.it/site/notizie/awnplus/italia/news/2009-02-07_107329499.html'&gt;imprevedibile&lt;/a&gt; sono riuscito ad arrivare a Roma con sole 3 ore e mezza di ritardo (Lecce-Roma -&amp;gt; 12h?!?!?!) e a perdere l&amp;#8217;aereo&amp;#8230; ma ci vuole ben altro per farmi desistere e anche se con 7 ore di ritardo sono arrivato a Bruxelles (per fortuna non era a San Francisco il meeting&amp;#8230; altrimenti sarei probabilmente arrivato con qualche mese di ritardo :-P)&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;p&gt;Per mia fortuna a parte la difficoltosa partenza, il resto dell&amp;#8217;esperienza è stata assolutamente fantastica: per i geek con cui ho avuto modo di chiacchierare e per i talk che ho avuto modo di seguire.&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;p&gt;Devo ovviamente ringraziare &lt;a href='http://www.mozilla-europe.org'&gt;Mozilla Europe&lt;/a&gt; per avermi sponsorizzato trasferta e permanenza, ma soprattutto &lt;a href='http://hyperstruct.net'&gt;Bard&lt;/a&gt; che mi letteralmente trascinato ;-) e &lt;a href='http://dafizilla.wordpress.com'&gt;Dafi&lt;/a&gt; che ha vissuto con me tutta l&amp;#8217;esperienza.&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;p&gt;Inoltre questo meeting mi ricorderà per gli anni a venire un altro piccolo traguardo raggiunto da una &lt;a href='http://alca.le.it'&gt;piccola società cooperativa come la nostra&lt;/a&gt;: spingere (e sponsorizzare) 4 propri soci/collaboratori a recarsi per 3 giorni a quello che probabilmente è il può importante meeting europeo sul &lt;strong&gt;Software Libero&lt;/strong&gt; perchè &lt;strong&gt;parte integrante delle attività della cooperativa&lt;/strong&gt;.&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;p&gt;Potrei sbagliarmi ma credo che sia la prima volta che una realtà della nostra zona manda i propri componenti ad un meeting sul Software Libero dall&amp;#8217;altra parte dell&amp;#8217;europa&amp;#8230; è qualcosa di obiettivamente piccolo ma per me è una grande soddisfazione ed è un segnale positivo in momento storico che positivo non lo è poi così tanto, per cui spero che &lt;a href='http://alca.le.it'&gt;Alca&lt;/a&gt; possa continuare a farlo per molti altri anni e con molti altri &lt;strong&gt;geek&lt;/strong&gt; :-P&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;p&gt;Beh&amp;#8230; e ora che siamo di nuovo qui nel Salento&amp;#8230; forza&amp;#8230; c&amp;#8217;è tanto da fare ancora qui da noi :-D&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;h3 id='ps_trova_lintruso'&gt;P.S. Trova l&amp;#8217;intruso!&lt;/h3&gt;

&lt;p&gt;&lt;img src='http://farm4.static.flickr.com/3457/3262038197_167af71b4a.jpg' alt='FOSDEM2009 - Mozilla Room' /&gt;&lt;/p&gt;

&lt;h3 id='pps_debianrules_p'&gt;P.P.S. Debian/rules :-P&lt;/h3&gt;

&lt;p&gt;&lt;img src='http://farm1.static.flickr.com/241/3264266340_62e9c6c220.jpg' alt='FOSDEM2009 - Debian Room' /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-3788465074175935966?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/w-3F7sXb-cw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/3788465074175935966/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=3788465074175935966" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/3788465074175935966?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/3788465074175935966?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/w-3F7sXb-cw/im-back-in.html" title="I'm back in..." /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm4.static.flickr.com/3457/3262038197_167af71b4a_t.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2009/02/im-back-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4GRn8zeyp7ImA9WxVQEko.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-5531739810817932572</id><published>2009-01-29T23:16:00.007+01:00</published><updated>2009-01-30T00:15:27.183+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-30T00:15:27.183+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="travel" /><category scheme="http://www.blogger.com/atom/ns#" term="freesoftware" /><category scheme="http://www.blogger.com/atom/ns#" term="geek" /><title>I'm going to...</title><content type="html">&lt;a href="http://www.fosdem.org/"&gt;&lt;img src="http://www.fosdem.org/promo/going-to" alt="I'm going to FOSDEM, the Free and Open Source Software Developers' European Meeting" /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
Ebbene si... manca poco... e poi finalmente avrò il piacere di partecipare a quello che probabilmente è il meeting con la maggiore concentrazione di sviluppatori di software libero che ha luogo in Europa:
&lt;br/&gt;&lt;br/&gt;
il &lt;span style="font-weight: bold;"&gt;FOSDEM&lt;/span&gt;... 2 giorni ad altissima concentrazione di freesoftware.
&lt;br/&gt;&lt;br/&gt;
Più guardo la &lt;a href="http://www.fosdem.org/2009/schedule/days"&gt;griglia&lt;/a&gt; dei workshop e dei lighting talk e più penso che... non vedo l'ora di atterrare a Bruxelles :-P
&lt;br/&gt;&lt;br/&gt;
Se poi penso alla &lt;span style="font-weight: bold; font-style: italic;"&gt;nutrita delegazione salentina&lt;/span&gt; di cui farò parte... non posso fare a meno di sorridere... sarà certamente una esperienza memorabile... in qualche modo mi ricorda tanto il primo hackmeeting a cui partecipammo un po' di anni fà :-D
&lt;br/&gt;&lt;br/&gt;
Sono certo che da Bruxelles porteremo tanti bei nuovi &lt;span style="font-weight: bold;"&gt;geekevening&lt;/span&gt; :-D
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;P.S.:&lt;/span&gt; Certo che bisogna essere veramente folli per decidere di farsi 4000 Km in 3 giorni... ma è anche vero che la follia è un articolo che non mi è mai mancato...per cui come il mitico &lt;a href="http://it.youtube.com/watch?v=VC4uuyKf7AI"&gt;Rutelli/Guzzanti&lt;/a&gt; ho &lt;span style="font-weight: bold; font-style: italic;"&gt;"deciso"&lt;/span&gt; che un pezzo del viaggio me lo farò in treno con le care vecchie ferrovie dello stato... un po' di sano masochismo non guasta mai :-D
&lt;br/&gt;&lt;br/&gt;
...beh si... basta &lt;span style="font-style: italic;"&gt;"ca nu m'annu fa' perdere puru l'aereu"&lt;/span&gt; però!!! :-P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-5531739810817932572?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/OA1b8A9Tk14" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/5531739810817932572/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=5531739810817932572" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/5531739810817932572?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/5531739810817932572?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/OA1b8A9Tk14/im-going-to.html" title="I'm going to..." /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2009/01/im-going-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQNRHo6fyp7ImA9WxVSFUQ.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-4706728020846796678</id><published>2009-01-10T15:27:00.002+01:00</published><updated>2009-01-10T15:39:55.417+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-10T15:39:55.417+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title>I'm not SO social</title><content type="html">&lt;i&gt;Cos'e' &lt;span style="font-weight: bold;"&gt;FriendFace&lt;/span&gt;?&lt;/i&gt;

&lt;i&gt;&lt;span style="font-weight: bold;"&gt;FriendFace&lt;/span&gt; e' un fantastico

nuovo sito per incontrare gente.&lt;/i&gt;

&lt;i&gt;Come funziona?&lt;/i&gt;

&lt;i&gt;&lt;span style="font-weight: bold;"&gt;FriendFace&lt;/span&gt; funziona con lo stesso principio

&lt;span style="font-weight: bold;"&gt;di un raffreddore o di una pestilenza&lt;/span&gt;.&lt;/i&gt;

&lt;i&gt;Ma &lt;span style="font-weight: bold;"&gt;FriendFace&lt;/span&gt; non diffonde

disgustosi germi, solo amicizia.&lt;/i&gt;

&lt;i&gt;Ogni pagina di &lt;span style="font-weight: bold;"&gt;FriendFace&lt;/span&gt; e' come una

capsula Petri piena di germi dell'amicizia.&lt;/i&gt;

&lt;i&gt;Ficcando la testa nella capsula,

potrai entrare in contatto con&lt;/i&gt;

&lt;i&gt;milioni di altre persone

appiccicate alla tua faccia!&lt;/i&gt;

&lt;i&gt;Esatto! In pratica e' una

faccia ammalata di amicizia!&lt;/i&gt;

&lt;i&gt;Iscriviti a &lt;span style="font-weight: bold;"&gt;FriendFace&lt;/span&gt;, semplicemente

comunicandoci tutti i tuoi dati personali,&lt;/i&gt;

&lt;i&gt;e ti forniremo una pagina web nella

quale potrai trovare amici nuovi,&lt;/i&gt;

&lt;i&gt;rimetterti in contatto coi vecchi,

e magari trovare qualcuno di speciale.&lt;/i&gt;

&lt;i&gt;Non pensare ai germi adesso!

Quel paragone e' finito.&lt;/i&gt;

&lt;i&gt;Adesso si tratta solo di amore e

di amicizia, e va tutto bene.&lt;/i&gt;

&lt;i&gt;Noi possediamo ogni cosa

che carichi su &lt;span style="font-weight: bold;"&gt;FriendFace&lt;/span&gt;,&lt;/i&gt;

&lt;i&gt;e' scritto nei termini di accettazione,

ma non preoccuparti,&lt;/i&gt;

&lt;i&gt;non lo useremo per fare niente

di male, lo promettiamo.&lt;/i&gt;

&lt;i&gt;Pensa solo all'amore e alla

compagnia e tutto va bene.&lt;/i&gt;

&lt;i&gt;&lt;span style="font-weight: bold;"&gt;FriendFace&lt;/span&gt;. &lt;span style="font-weight: bold;"&gt;FriendFace&lt;/span&gt;.&lt;/i&gt;

&lt;i style="font-weight: bold;"&gt;FriendFace!&lt;/i&gt;

The IT Crowd - Stagione 3

Episodio 05 "FriendFace"

Traduzione: JoeRockocoko,

Revisione: TutorGirl

::Italian Subs Addicted::

[www.italiansubs.net]

&lt;a href="http://www.youtube.com/watch?v=nDLImFSDUJ8"&gt;http://www.youtube.com/watch?v=nDLImFSDUJ8&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-4706728020846796678?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/6VpkzDKZ0-E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/4706728020846796678/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=4706728020846796678" title="3 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4706728020846796678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4706728020846796678?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/6VpkzDKZ0-E/im-not-so-social.html" title="I'm not SO social" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2009/01/im-not-so-social.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4BSHc6eyp7ImA9WxRbEEo.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-7401472728294159368</id><published>2008-11-30T21:53:00.002+01:00</published><updated>2008-11-30T22:02:39.913+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-30T22:02:39.913+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="*nix" /><category scheme="http://www.blogger.com/atom/ns#" term="workaround" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><title>DualHead e Gnome workarounds</title><content type="html">&lt;p&gt;Questa settimana mi sono cimentato involontariamente nella configurazione del &lt;strong&gt;DualHead&lt;/strong&gt; sulla mia GNU/Linux Box ;-)&lt;/p&gt;

&lt;p&gt;Il &lt;strong&gt;DualHead&lt;/strong&gt; è una modalità di funzionamento dell&amp;#8217;interfaccia grafica coadiuvato dalla capacità della scheda video di gestire più periferiche di output contemporaneamente (ad esempio l&amp;#8217; LCD e l&amp;#8217;uscita VGA di un portatile).&lt;/p&gt;

&lt;p&gt;Precedentemente questa modalità di funzionamento era supportata da &lt;strong&gt;XWindows&lt;/strong&gt; mediante un estensione chiamata &lt;strong&gt;Xinerama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ultimamente la funzionalità di DualHead è invece integrata nel modulo &lt;strong&gt;XRandr&lt;/strong&gt; che è in grado di selezionare al volo la risoluzione grafica delle schede video e anche di attivare le schede video secondarie senza necessità di riavvio di XWindows (necessaria invece con Xinerama essendo configurata staticamente nel file di configurazione di Xorg)&lt;/p&gt;

&lt;p&gt;XRandr, con la possibilità di riconfigurazione live, è un grande passo in avanti per Xorg&amp;#8230; ma come tutte le cose nuove introduce anche nuovi problemi :-D&lt;/p&gt;

&lt;p&gt;La modalità DualHead è sicuramente utile per lavorare su più applicazioni contemporaneamente ma è ancora più utile durante presentazioni e seminari, permettendo di eseguire su uno schermo (il proiettore agganciato all&amp;#8217;uscita VGA) la presentazione e sull&amp;#8217;altro (l&amp;#8217;LCD del portatile) la scaletta/mindmap della presentazione, magari con le note riguardanti i dettagli importanti da non dimenticare :-)&lt;/p&gt;

&lt;p&gt;Ho provato ultimamente a configurare il DualHead in una modalità diversa dalla modalità mirror (che semplicemente clona i due output mostrando su entrambi il medesimo desktop) e ho avuto qualche problemino dovuto probabilmente alla non completa integrazione del nuovo sistema XRandr nella applicazioni e desktop environment (nel mio caso GNOME).&lt;/p&gt;

&lt;p&gt;Nel cercare dei workaround a questi problemi ne ho comunque tratto una conoscienza migliore dei meccanismi e delle tecnologie coinvolte e ho deciso quindi di lasciare queste 4 righe di traccia a beneficio di chi potrebbe incontrare i miei stessi problemi ;-)&lt;/p&gt;

&lt;p&gt;Le ultime versioni Ubuntu (e quindi molto probabilmente anche molte altre distribuzioni) integrano un sistema guidato di riconfigurazione degli output video:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;gnome-display-properties&lt;/strong&gt; (compreso nel pacchetto &lt;strong&gt;gnome-control-center&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tra l&amp;#8217;altro ci deve fare piacere il fatto che tra i contributor c&amp;#8217;e&amp;#8217; un cittadino di adozione leccese ;-) (&lt;a href='http://www.albertomilone.com/projects.html'&gt;Alberto Milone&lt;/a&gt;) che ha contribuito, tra le altre cose, all&amp;#8217;integrazione con &lt;strong&gt;X-Kit&lt;/strong&gt; (di cui ne è autore) per automatizzare quelle procedure che richiedono ancora la configurazione di Xorg attraverso il suo file di configurazione statico.&lt;/p&gt;

&lt;p&gt;Ad esempio una configurazione che fa a finire nel file di configurazione &lt;strong&gt;/etc/X11/xorg.conf&lt;/strong&gt; è la risoluzione virtuale totale (cioè la superficie virtuale che verrà spezzettata tra i vari output reali):&lt;/p&gt;
&lt;code&gt;&lt;pre&gt;
Section "Screen" 
  Identifier "Default Screen" 
  Device "Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller" 
  Monitor "LVDS" 
  DefaultDepth 24 
  SubSection "Display" 
    Depth 24 
    Modes "1280x768" "1024x768" "800x600" "640x480" 
    Virtual 1280 1536 
  EndSubSection 
EndSection 
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;Queste modifiche verranno effettuate in maniera completamente trasparente grazie alla collaborazione tra &lt;strong&gt;gnome-display-properties&lt;/strong&gt;, &lt;strong&gt;screen-resoluzion-extras&lt;/strong&gt;, &lt;strong&gt;X-Kit&lt;/strong&gt; e &lt;strong&gt;PolicyKit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Il lavoro di fino degli ultimi anni di freedesktop e dei team di sviluppo di gnome e delle varie distribuzioni stanno finalmente dando i loro primi frutti ;-)&lt;/p&gt;

&lt;h2 id='bug'&gt;BUG&lt;/h2&gt;

&lt;p&gt;Tutto ha funzionato perfettamente&amp;#8230; o quasi&amp;#8230; di ritorno dal suspend il tool &lt;strong&gt;gnome-display-properties&lt;/strong&gt; fallisce silenziosamente e non ho avuto ancora la possibilità di approfondire il problema :-(&lt;/p&gt;

&lt;p&gt;Beh&amp;#8230; poco male&amp;#8230; in ogni caso xrandr è sempre li pronto a servirci attraverso la nostra linea di comando :-D&lt;/p&gt;

&lt;p&gt;Ma rimane comunque un problema troppo fastidioso per essere ignorato:&lt;/p&gt;

&lt;p&gt;i pannelli gnome finiscono nel primo monitor&amp;#8230; che per qualche oscuro motivo (almeno sul mio laptop, un Latitude X1) non è l&amp;#8217;LCD del laptop ma il monitor esterno&amp;#8230;&lt;/p&gt;

&lt;p&gt;&amp;#8230; perfetto&amp;#8230; il mio obiettivo era ottenere esattamente il comportamento contrario :-(&lt;/p&gt;

&lt;h2 id='use_the_zen_circoscrivere_il_problema'&gt;Use the Zen: circoscrivere il problema&lt;/h2&gt;

&lt;p&gt;In questo caso mi è sembrato naturale pensare che il problema non poteva che risiedere dentro gnome&amp;#8230; così prima di andare a guardare i sorgenti o pensato fosse il caso di dare una sbirciata alle chiavi di configurazione GConf con &lt;strong&gt;gconf-editor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ed eccolo li&amp;#8230; è bastato cercare tutte le chiavi di configurazioni contenenti il termine &lt;strong&gt;monitor&lt;/strong&gt; per identificare una chiave interessante &lt;strong&gt;/apps/panel/toplevels/panel_0/monitor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un rapito test al volo ha dimostrato che semplicemente cambiando la chiave (al volo visto che viene automaticamente ridefinita in caso di assenza del monitor VGA) sposta il pannello sul monitor che preferiamo :-PPPPP&lt;/p&gt;

&lt;h2 id='workaround'&gt;WORKAROUND&lt;/h2&gt;

&lt;p&gt;Dopo aver circoscritto il problema è bastato impacchettare il workaround in un mini-script bash:&lt;/p&gt;
&lt;code&gt;&lt;pre&gt;
xrandr --output VGA --mode 1024x768 --pos 0x0 --output LVDS  --mode 1280x768 --pos 0x768

gconftool --type int --set /apps/panel/toplevels/panel_0/monitor "1"
gconftool --type int --set /apps/panel/toplevels/panel_1/monitor "1"
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;Ohhh&amp;#8230; now it&amp;#8217;s work!!!&lt;/p&gt;

&lt;p&gt;Happy dualhead, rpl&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-7401472728294159368?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/C3CTybVxCSI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/7401472728294159368/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=7401472728294159368" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/7401472728294159368?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/7401472728294159368?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/C3CTybVxCSI/dualhead-e-gnome-workarounds.html" title="DualHead e Gnome workarounds" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/11/dualhead-e-gnome-workarounds.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4DR349eyp7ImA9WxRUFkw.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-245350693214466304</id><published>2008-11-18T14:11:00.003+01:00</published><updated>2008-11-25T13:42:56.063+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-25T13:42:56.063+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wiimote" /><category scheme="http://www.blogger.com/atom/ns#" term="geekevening" /><category scheme="http://www.blogger.com/atom/ns#" term="hack" /><category scheme="http://www.blogger.com/atom/ns#" term="geek" /><title>geekevening 0x12</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_W42xjpEMvQ8/SSK_g-cvkII/AAAAAAAAADo/dGE_8_bi3jc/s1600-h/locandina_sfondo_bianco.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 283px; height: 400px;" src="http://3.bp.blogspot.com/_W42xjpEMvQ8/SSK_g-cvkII/AAAAAAAAADo/dGE_8_bi3jc/s400/locandina_sfondo_bianco.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5269985087217176706" /&gt;&lt;/a&gt;
Domani l'appuntamento a ZEI che ha come argomento il wiimote 
scripting in ambiente GNU/Linux in compagnia mia e del buon fabio ;-)



&lt;h2&gt; geekevening 0x12: wii &amp;&amp; GNU/Linux &lt;/h2&gt;

Lo sapevate? Il wiimote è molto di più di un joystick per la Nintendo Wii...
e potreste utilizzarlo come telecomando, trasformarlo in un strumento musicale
o nell'accelleratore di una moto virtuale!!!

Come? Vi aspettiamo Mercoledì 19 Novembre alle 21.00 per scoprire insieme
come comunicare con questo fantastico dispositivo con la sola imposizione
delle mani e due manciate di Software Libero :-D

Sapevatelo su geekevening 0x12 :-P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-245350693214466304?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/jyrwe4PEDu8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/245350693214466304/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=245350693214466304" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/245350693214466304?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/245350693214466304?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/jyrwe4PEDu8/domani-lappuntamento-zei-che-ha-come.html" title="geekevening 0x12" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_W42xjpEMvQ8/SSK_g-cvkII/AAAAAAAAADo/dGE_8_bi3jc/s72-c/locandina_sfondo_bianco.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/11/domani-lappuntamento-zei-che-ha-come.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUGQn49fSp7ImA9WxRWFkk.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-3594807466374138836</id><published>2008-11-02T17:17:00.003+01:00</published><updated>2008-11-02T17:27:03.065+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-02T17:27:03.065+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wiimote" /><category scheme="http://www.blogger.com/atom/ns#" term="hack" /><category scheme="http://www.blogger.com/atom/ns#" term="geek" /><title>Just4Fun: Python Wiimote Control</title><content type="html">&lt;h1 id='just_for_fun_python_wiimote_control'&gt;Just For Fun: Python Wiimote Control&lt;/h1&gt;

&lt;p&gt;From SaLUG&amp;#8217;s LinuxDay2008&amp;#8230; &amp;#8230; powered by &amp;#8220;Just4Fun (TM)&amp;#8221;&lt;/p&gt;

&lt;p&gt;Python Wiimote Control&lt;/p&gt;

&lt;h2 id='intro'&gt;Intro&lt;/h2&gt;

&lt;p&gt;In principio c&amp;#8217;era il declino inesorabile della Nintendo nel panorama delle console per videogame, la quale lasciava il passo alla muscolosa Sony con la sua PlayStation&amp;#8230; ed infine a Microsoft che con la sua XBox sottocosto (che in realta&amp;#8217; paghiamo tutti noi con le licenze di Windows che siamo costretti a comprare insieme ai nostri PC) intende rompere le balle alla Sony&amp;#8230; buon per noi :-P&lt;/p&gt;

&lt;p&gt;La Nintendo in questa lotta a due (tra PlayStation e XBox) ha deciso di non immischiarsi e ha scelto la strada dell&amp;#8217;innovazione anziche&amp;#8217; quella dei muscoli&amp;#8230; evidentemente hanno assunto qualche dirigente piu&amp;#8217; sveglio e rinfrescato il settore Ricerca e Sviluppo.&lt;/p&gt;

&lt;p&gt;Questi fatti apparentemente banali e senza alcun interesse &amp;#8220;scientifico&amp;#8221; hanno generato pero&amp;#8217; un importante cambiamento nel campo dell&amp;#8217;intrattenimento casalingo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;nuove possibilita&amp;#39;/modalita&amp;#39; di interazione uomo-macchina&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Quanti anni sono passati da quando abbiamo cominciato ad usare tastiere, joystick, joypad e mouse&amp;#8230; &amp;#8230; e&amp;#8217; arrivato il momento di cambiare&amp;#8230; ed era anche ora!!!! :-)&lt;/p&gt;

&lt;p&gt;Sono veramente poche le tecnologie rimaste cosi&amp;#8217; statiche quanto quelle di interazione uomo-macchina.&lt;/p&gt;

&lt;p&gt;E questo non riguarda solo il settore ludico o dell&amp;#8217;intrattenimento.&lt;/p&gt;

&lt;h2 id='wiimote'&gt;Wiimote&lt;/h2&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_W42xjpEMvQ8/SQ3Uq2yakAI/AAAAAAAAADg/piDomIrOA0A/s1600-h/300px-Wii_Remote_Image.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 300px; height: 228px;" src="http://1.bp.blogspot.com/_W42xjpEMvQ8/SQ3Uq2yakAI/AAAAAAAAADg/piDomIrOA0A/s400/300px-Wii_Remote_Image.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5264097372192542722" /&gt;&lt;/a&gt;

&lt;p&gt;Questo e&amp;#8217; il &lt;a href='http://en.wikipedia.org/wiki/Wii_Remote'&gt;Wiimote&lt;/a&gt; (il telecomando/joystick bluetooth della Nintendo Wii) una periferica di interazione totalmente nuova, le cui possibilita&amp;#8217; sono solo in minima parte conosciute e sfruttate a pieno dai giochi della Wii.&lt;/p&gt;

&lt;p&gt;Probabilmente neanche chi lo ha inventato sapeva realmente quanti campi di applicazione gli avrebbero trovato in breve tempo gli hacker di tutto il mondo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;chi la usa come lavagnetta elettronica: &lt;a href='http://www.youtube.com/watch?v=5s5EvhHy7eQ'&gt;http://www.youtube.com/watch?v=5s5EvhHy7eQ&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi la usa per tracciare i movimenti della testa: &lt;a href='http://www.youtube.com/watch?v=Jd3-eiid-Uw'&gt;http://www.youtube.com/watch?v=Jd3-eiid-Uw&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi per tracciare i movimenti delle dita: &lt;a href='http://www.youtube.com/watch?v=0awjPUkBXOU'&gt;http://www.youtube.com/watch?v=0awjPUkBXOU&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi ha imparato a tracciarci anche la terza dimensione &lt;a href='http://www.youtube.com/watch?v=omNQAzBa0-I'&gt;http://www.youtube.com/watch?v=omNQAzBa0-I&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi lo usa per riconoscere delle gesture &lt;a href='http://www.youtube.com/watch?v=Q5AzpGHVhPc'&gt;http://www.youtube.com/watch?v=Q5AzpGHVhPc&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi l&amp;#8217;ha trasformata nella spada laser di star wars: &lt;a href='http://www.youtube.com/watch?v=KyvIlKSA0BA'&gt;http://www.youtube.com/watch?v=KyvIlKSA0BA&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi ci suona la chitarra: &lt;a href='http://www.youtube.com/watch?v=NYHGvEfANy8'&gt;http://www.youtube.com/watch?v=NYHGvEfANy8&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi ci suona la batteria: &lt;a href='http://www.youtube.com/watch?v=8FftLxuYzRA'&gt;http://www.youtube.com/watch?v=8FftLxuYzRA&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi ci gioca a Resident Evil: &lt;a href='http://www.youtube.com/watch?v=ovA3HlRzPlU'&gt;http://www.youtube.com/watch?v=ovA3HlRzPlU&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi ci gioca a Neverball: &lt;a href='http://www.youtube.com/watch?v=Ng46W_8UKDg'&gt;http://www.youtube.com/watch?v=Ng46W_8UKDg&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;chi ci gioca a Hockey su ghiaccio: &lt;a href='http://www.youtube.com/watch?v=JIb4GpZWJgk'&gt;http://www.youtube.com/watch?v=JIb4GpZWJgk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ma come fanno?!?!?!?&lt;/p&gt;

&lt;p&gt;Cosa c&amp;#8217;e&amp;#8217; di tanto magico in un Wiimote da renderlo cosi&amp;#8217; poliedrico?!?!&lt;/p&gt;

&lt;p&gt;Beh si fa presto a dirlo :-P&lt;/p&gt;

&lt;p&gt;Oltre a vari pulsanti, pulsantini e freccette (comuni in altri joystick/joypad) ci sono 2 importanti novita&amp;#8217;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;un accellerometro&amp;#8230; che misura, indovinate un po&amp;#8217;&amp;#8230; l&amp;#8217;accellerazione&lt;/li&gt;

&lt;li&gt;una videocamera che (attraverso varie elaborazioni dei segnali fatte all&amp;#8217;interno del wiimote stesso) calcola la posizione di 4 sorgenti luminose infrarosse all&amp;#8217;interno del suo campo visivo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;#8230; oooooh! (fate un&amp;#8217;espressione stupita&amp;#8230; dai! :-P)&lt;/p&gt;

&lt;p&gt;Grazie all&amp;#8217;accellerometro possiamo conoscere gli spostamenti del wiimote sui 3 assi e cosi&amp;#8217; come alcuni degli angoli di orientamento (in particolare &lt;strong&gt;pitch&lt;/strong&gt; e &lt;strong&gt;roll&lt;/strong&gt;)&amp;#8230;&lt;/p&gt;

&lt;p&gt;&amp;#8230; pero&amp;#8217; non e&amp;#8217; possibile calcolare lo &lt;strong&gt;yaws&lt;/strong&gt;&amp;#8230;&lt;/p&gt;

&lt;p&gt;e che c&amp;#8230;to e&amp;#8217; lo &lt;strong&gt;yaws&lt;/strong&gt; direte voi&amp;#8230;&lt;/p&gt;

&lt;p&gt;Per riuscire a calcolare lo &lt;strong&gt;yaws&lt;/strong&gt; i ricercatori della Nintendo hanno pensato di piazzare una barra dotata di 4 led (la Sensor Bar) con la console e di utilizzare una telecamerina nel Wiimote per identificare l&amp;#8217;orientamento del Wiimote sul piano orizzontale quando la Sensor Bar si trova all&amp;#8217;interno del suo campo visivo&amp;#8230;&lt;/p&gt;

&lt;p&gt;e avete ragione&amp;#8230; e&amp;#8217; quello che ho pensato anche io&amp;#8230; non si capisce un&amp;#8230; ma dato che una illustrazione vale piu&amp;#8217; di mille parole ecco a voi:&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.wiili.org/images/4/4e/Pyr.png' alt='grafico degli assi applicati ad un wiimote' /&gt;&lt;/p&gt;

&lt;p&gt;Ora dopo aver ringraziato tutti quelli che hanno reversato, documentato e scritto librerie ed applicazioni per questa stupenda periferica (e molte sue estensioni ;-)):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://wiili.org'&gt;WiiLi.org&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='wiibrew.com'&gt;WiiBrew.com&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://abstrakraft.org/cwiid/'&gt;CWiid&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.wiiuse.net/'&gt;WiiUse&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;potete andare a divertirvi anche voi un po&amp;#8217; ;-)&lt;/p&gt;

&lt;h2 id='just_for_fun_python_wiimote_control'&gt;Just For Fun: Python Wiimote Control&lt;/h2&gt;

&lt;p&gt;Da vero geek non sono riuscito a vedere tutta sta gente divertirsi come i matti e non poter partecipare :-D&lt;/p&gt;

&lt;p&gt;Quindi ho deciso di farmi un regalo e comprarmi un bel Wiimote&amp;#8230; si solo la periferica ;-)&lt;/p&gt;

&lt;p&gt;Ho cominciato a giocarci un po&amp;#8217; attraverso la libreria &lt;a href='http://abstrakraft.org/cwiid/'&gt;cwiid&lt;/a&gt; e in particolare utilizzando il binding in python.&lt;/p&gt;

&lt;p&gt;I primi timidi tentativi si sono concretizzati nell&amp;#8217;emissione di rumori di vario genere da parte di un sintetizzatore (ZynAddSubFX) a cui inviavo messaggi MIDI basati (malamente) sull&amp;#8217;accellerazione del Wiimote&amp;#8230;&lt;/p&gt;

&lt;p&gt;avevo proprio bisogno di leggere un paio di righe di documentazione in piu&amp;#8217; &amp;#8230; &lt;a href='http://www.wiili.org/index.php/Motion_analysis'&gt;http://www.wiili.org/index.php/Motion_analysis&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dopo aver letto un po&amp;#8217; di documentazione l&amp;#8217;emissione di rumori e&amp;#8217; diventata l&amp;#8217;emissione di 3 note diverse con velocita&amp;#8217; (nel senso midi del termine) proporzionale all&amp;#8217;accellerazione del wiimote opportunamente riscalata (sarebbe piu&amp;#8217; corretto dire empiricamente riscalata :-P)&lt;/p&gt;

&lt;p&gt;Volendo mi sarei anche accontentato&amp;#8230; se non fosse stato per la gradita visita di due altri geek locali (Fabio &amp;#8220;valvola&amp;#8221; Viola e Enrico &amp;#8220;Bongy&amp;#8221; Tramacere) che con domande, valutazioni e nuove periferiche (il Nunchuk :-P) mi hanno &lt;strong&gt;costretto&lt;/strong&gt; a continuare :-PPPPP&lt;/p&gt;

&lt;p&gt;Come potevo non provare a far diventare il Nunchuk il plettro della mia &amp;#8220;chitarra elettrica&amp;#8221; bluetooth? Come potevo resistere all&amp;#8217;irresistibile voglia di utilizzare i due accellerometri presenti in Wiimote e Nunchuk di concerto per simulare le due bacchette di una batteria?&lt;/p&gt;

&lt;p&gt;Non potevo&amp;#8230; ma soprattutto non volevo resistere :-P&lt;/p&gt;

&lt;p&gt;Quindi una variante dopo l&amp;#8217;altra mi sono trovato con 3 scriptini in python:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;wiiguitar: per simulare una chitarra elettrica con wiimote e zynaddsubfx&lt;/li&gt;

&lt;li&gt;wiidrums: per simulare una batteria con wiimote e hydrogen&lt;/li&gt;

&lt;li&gt;wiidesktop: per controllare desktop e applicazioni con il wiimote durante le presentazioni&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='linuxday2008'&gt;LinuxDAY2008&lt;/h2&gt;

&lt;p&gt;Un hack cosi&amp;#8217; divertente non poteva mancare al linuxday del &lt;a href='http://salug.it'&gt;GLUG piu&amp;#8217; bello del mondo&lt;/a&gt; :-D&lt;/p&gt;

&lt;p&gt;Pero&amp;#8217; sai che palle riavviare lo script e rieffettuare il detect del wiimote per passare da uno modalita&amp;#8217; all&amp;#8217;altra?!?!?&lt;/p&gt;

&lt;p&gt;Gia immaginavo Francesco &amp;#8220;haku&amp;#8221; Palermo esclamare: &amp;#8220;che pizza&amp;#8230; ma devi scrivere tutte &amp;#8216;ste cose ogni volta?!?!?&amp;#8221;&lt;/p&gt;

&lt;p&gt;Allora ho pensato che sarebbe stato carino fondere di nuovo insieme i 3 script e studiare un modo per passare da una modalita&amp;#8217; ad un&amp;#8217;altra con la pressione di un tasto del Wiimote (il tasto home in particolare).&lt;/p&gt;

&lt;p&gt;Visto che fondamentalmente le differenze tra quegli script si limitavano alla fase di inizializzazione e all&amp;#8217;interpretazione dei messaggi provenienti, il refactoring e&amp;#8217; consistito nel trasformare gli script in moduli da caricare e scrivere un nuovo script che inizializzi tutti i moduli e nella propria callback intercetti un tasto di cambio modalita&amp;#8217; per poi passare il controllo alle callback dei moduli attivi&amp;#8230;&lt;/p&gt;

&lt;p&gt;&amp;#8230; si si&amp;#8230; e&amp;#8217; piu&amp;#8217; facile da scrivere in python che a spiegarlo in italiano :-P&lt;/p&gt;

&lt;h2 id='get_the_sources'&gt;Get the sources&lt;/h2&gt;

&lt;p&gt;Essendo un piccolo hack non c&amp;#8217;e&amp;#8217; ovviamente ne binario ne risoluzione automatica delle dipendenze :-)&lt;/p&gt;

&lt;p&gt;C&amp;#8217;e&amp;#8217; un repository di codice GPLv3 da scaricare, studiare e modificare a proprio piacimento &amp;#8230; esercitate liberamente le vostre 4 liberta&amp;#8217; :-P&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://github.com/rpl/python-wiimote-hacks/'&gt;http://github.com/rpl/python-wiimote-hacks/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nel README ci sono anche due note sulle dipendenze ma in ogni caso invito chi decidesse di cimentarsi nel tentativo di utilizzarlo sulla propria macchina o di utilizzarlo come base per qualche proprio esperimento di scrivermi le proprie idee e/o problemi su questo piccolo pezzo di &amp;#8220;cera pongo&amp;#8221; :-) all&amp;#8217;indirizzo &amp;#8220;rpl AT salug.it&amp;#8221;&lt;/p&gt;

&lt;p&gt;Per eventuali flame, troll, insulti etc. scrivetemi pure&amp;#8230; saranno tutti ridirezionati su /dev/null :-D&lt;/p&gt;

&lt;p&gt;beh&amp;#8230; bando alle ciance ora&amp;#8230;&lt;/p&gt;

&lt;p&gt;Happy Hacking, rpl&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-3594807466374138836?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/J7E-bimjG6Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/3594807466374138836/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=3594807466374138836" title="1 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/3594807466374138836?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/3594807466374138836?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/J7E-bimjG6Q/just4fun-python-wiimote-control.html" title="Just4Fun: Python Wiimote Control" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_W42xjpEMvQ8/SQ3Uq2yakAI/AAAAAAAAADg/piDomIrOA0A/s72-c/300px-Wii_Remote_Image.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/11/just4fun-python-wiimote-control.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4AR3s7eCp7ImA9WxRQF0k.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-7886428759439505605</id><published>2008-10-11T15:18:00.001+02:00</published><updated>2008-10-11T20:15:46.500+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-11T20:15:46.500+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="ubiquity" /><category scheme="http://www.blogger.com/atom/ns#" term="hack" /><category scheme="http://www.blogger.com/atom/ns#" term="mozilla" /><category scheme="http://www.blogger.com/atom/ns#" term="geek" /><title>Mozilla, Ubiquity e DBUS</title><content type="html">&lt;p&gt;La scorsa settimana mi sono imbattuto in una estensione per mozilla molto interessante: &lt;a href='http://github.com/FireRabbit/mozjs-dbus/wikis'&gt;mozjs_dbus&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Credo che Ubuntu dovrebbe seriamente valutare la possibilità di compilare e installare questa estensione di default per migliorare l&amp;#8217;integrazione del browser con il resto dell&amp;#8217;ambiente desktop.&lt;/p&gt;

&lt;p&gt;In pratica la funzione dell&amp;#8217;estensione è quella di esporre all&amp;#8217;interno di chrome (inteso come la componente privilegiata del broser e non il broser di google) dei servizi che consentano di accedere e fornire servizi dbus.&lt;/p&gt;

&lt;p&gt;Il tutto è condito da un&amp;#8217;API Javascript che consente di colloquiare agevolmente con dbus, che all&amp;#8217;interno del panorama delle tecnologie Desktop libere costituisce l&amp;#8217;analogo di COM, CORBA o XPCOM.&lt;/p&gt;

&lt;p&gt;Visto che la compilazione dell&amp;#8217;estensione (che necessita dei sorgenti di mozilla) non è risultata troppo complessa (come unico imprevisto ho dovuto aggiornare il file install.rdf del&amp;#8217;estensione per estenderne la compatibilità a Firefox 3.0.3)&lt;/p&gt;

&lt;p&gt;Volevo fare una prova&amp;#8230; così ho pensato che poteva essere una buona scusa per provare a scrivere il primo comando per &lt;a href='http://labs.mozilla.com/2008/08/introducing-ubiquity/'&gt;Ubiquity&lt;/a&gt;, estensione che aggiunge a firefox una commandline con cui colloquiare con il browser un po&amp;#8217; come faccio con emacs :-)&lt;/p&gt;

&lt;p&gt;Mediante dbus-viewer è possibile navigare le interfacce dbus messe a disposizione dalle applicazioni attualmente attive&amp;#8230; tra tutte ho individuato Tomboy.&lt;/p&gt;

&lt;p&gt;Tomboy è un&amp;#8217;applicazione gnome per conservare delle note ed esporta un interfaccia dbus particolarmente completa in quanto consente di effettuare tutte le operazioni CRUD sulle note.&lt;/p&gt;

&lt;p&gt;Ho creato quindi 2 nuovi comandi per ubiquity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tomboy-list: che restituisce in preview l&amp;#8217;elenco puntato dei titoli delle note&lt;/li&gt;

&lt;li&gt;tomboy-view: che restituisce in preview l&amp;#8217;elenco puntato di titolo e contenuto delle note che contengono la stringa passata come parametro&lt;/li&gt;
&lt;/ul&gt;
&lt;script src='http://gist.github.com/16263.js'&gt;&lt;/script&gt;
&lt;h2 id='link'&gt;Link&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://github.com/FireRabbit/mozjs-dbus/wikis'&gt;http://github.com/FireRabbit/mozjs-dbus/wikis&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://groups.google.com/group/mozilla.dev.platforms.linux/browse\_thread/thread/5f67b110fd6586d/35c75b24bbef65fb?lnk=gst&amp;amp;q=dbus#35c75b24bbef65fb'&gt;http://groups.google.com/group/mozilla.dev.platforms.linux/browse_thread/thread/5f67b110fd6586d/35c75b24bbef65fb?lnk=gst&amp;amp;q=dbus#35c75b24bbef65fb&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://labs.mozilla.com/2008/08/introducing-ubiquity/'&gt;http://labs.mozilla.com/2008/08/introducing-ubiquity/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.azarask.in/blog/post/sharing-streamable-functionality/'&gt;http://www.azarask.in/blog/post/sharing-streamable-functionality/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.azarask.in/blog/post/ubiquity-in-depth/'&gt;http://www.azarask.in/blog/post/ubiquity-in-depth/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://wiki.mozilla.org/Labs/Ubiquity'&gt;https://wiki.mozilla.org/Labs/Ubiquity&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity\_0.1\_User\_Tutorial'&gt;https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity_0.1_User_Tutorial&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity\_0.1\_Author\_Tutorial'&gt;https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity_0.1_Author_Tutorial&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://ubiquitously.org/forum/viewtopic.php?f=5&amp;amp;t=14'&gt;http://ubiquitously.org/forum/viewtopic.php?f=5&amp;amp;t=14&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://hg.toolness.com/ubiquity-firefox/file/c2b81ec3b3bf/ubiquity/standard-feeds/social.js'&gt;http://hg.toolness.com/ubiquity-firefox/file/c2b81ec3b3bf/ubiquity/standard-feeds/social.js&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://hg.toolness.com/ubiquity-firefox/file/6caa9d66b3bb/ubiquity/chrome/content/nlparser/en/nountypes.js'&gt;http://hg.toolness.com/ubiquity-firefox/file/6caa9d66b3bb/ubiquity/chrome/content/nlparser/en/nountypes.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-7886428759439505605?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/I5MtGK7kERk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/7886428759439505605/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=7886428759439505605" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/7886428759439505605?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/7886428759439505605?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/I5MtGK7kERk/mozilla-ubiquity-e-dbus.html" title="Mozilla, Ubiquity e DBUS" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/10/mozilla-ubiquity-e-dbus.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYHSXo6eCp7ImA9WxRSGEo.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-8930744938382799192</id><published>2008-09-20T03:22:00.000+02:00</published><updated>2008-09-20T03:28:58.410+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-20T03:28:58.410+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="geek" /><title>iNvida CSS bomb</title><content type="html">&lt;p&gt;Se avete un amico sborone che vi costringe ad apprezzare la superficie satinata del suo portatile XPS ed ammirare le fantastiche performance della scheda Nvidia con cui è equipaggiato&amp;#8230; non disperate&amp;#8230;&lt;/p&gt;

&lt;p&gt;Se il pomeriggio è particolarmente noioso e piovoso e volete divertirvi con poco potete vedere impazzire il vostro caro amico sborone e sfruttare una fantastica &lt;strong&gt;feature&lt;/strong&gt; della sua scheda NVidia ;-)&lt;/p&gt;

&lt;p&gt;vi basterà creare una pagina con tanti bei div e span colorati e sparare nel css un bel:&lt;/p&gt;
&lt;pre&gt;
body {
  opacity: .99;
}
&lt;/pre&gt;
&lt;p&gt;&amp;#8230; BOOOOOOOOM: 100% CPU&lt;/p&gt;

&lt;p&gt;vallo a capire ora che il bug non è in Firefox&amp;#8230; non è in X.org&amp;#8230; &amp;#8230; non è nel kernel Linux&amp;#8230; ma nel fantastico driver NVidia :-D&lt;/p&gt;

&lt;p&gt;iNdivia bombarda anche tu un tuo amico sborone ;-)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/207454'&gt;https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/207454&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.nvnews.net/vbulletin/showthread.php?t=119456'&gt;http://www.nvnews.net/vbulletin/showthread.php?t=119456&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-8930744938382799192?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/gtF9MLTsoYg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/8930744938382799192/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=8930744938382799192" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/8930744938382799192?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/8930744938382799192?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/gtF9MLTsoYg/invida-css-bomb.html" title="iNvida CSS bomb" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/09/invida-css-bomb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGSX46eSp7ImA9WxRSF0U.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-2195081341348073861</id><published>2008-09-19T02:01:00.000+02:00</published><updated>2008-09-19T02:02:08.011+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-19T02:02:08.011+02:00</app:edited><title>Svegliatemi da questo incubo...</title><content type="html">&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/LB9uBWwIARU&amp;hl=it&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/LB9uBWwIARU&amp;hl=it&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-2195081341348073861?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/ojEvT84c0aE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/2195081341348073861/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=2195081341348073861" title="2 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/2195081341348073861?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/2195081341348073861?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/ojEvT84c0aE/svegliatemi-da-questo-incubo.html" title="Svegliatemi da questo incubo..." /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/09/svegliatemi-da-questo-incubo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIBSHY4cSp7ImA9WxRSF0U.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-9113572497853953301</id><published>2008-09-15T03:39:00.003+02:00</published><updated>2008-09-19T02:02:39.839+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-19T02:02:39.839+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="geek" /><title>MozREPL e Firefox 3: access unsafe properties from chrome</title><content type="html">&lt;p&gt;Ci sono dei tool senza i quali mi sentirei disarmato&amp;#8230; come farebbe il muratore senza la &amp;#8220;cardarina&amp;#8221; o la &amp;#8220;livella&amp;#8221; :-DDDD&lt;/p&gt;

&lt;p&gt;Nello sviluppo in Javascript il tool a cui non riesco assolutamente a rinunciare è &lt;a href='http://hyperstruct.net/projects/mozrepl'&gt;MozREPL&lt;/a&gt;!!!&lt;/p&gt;

&lt;p&gt;La sensazione di controllo che mi da potermi collegare in telnet (comodamente dal mio emacs) dentro il browser a navigare nella mia applicazione e relativo codice Javascript è ineguagliabile.&lt;/p&gt;

&lt;p&gt;Certo c&amp;#8217;e&amp;#8217; Firebug&amp;#8230; ma vuoi mettere&amp;#8230; ssh con vnc? :-D&lt;/p&gt;

&lt;p&gt;non c&amp;#8217;e&amp;#8217; confronto :-P&lt;/p&gt;

&lt;p&gt;Purtroppo le notevoli rivoluzioni avvenute tra Firefox 2 a Firefox 3 hanno introdotto tutta una serie di policy aggiuntive di sicurezza che hanno reso il porting faticoso (o meglio fastidioso :-P) per lo sviluppatore del progetto.&lt;/p&gt;

&lt;p&gt;Per la gioia di tutti &lt;a href='http://hyperstruct.net'&gt;bard&lt;/a&gt; ha preso &lt;strong&gt;la volpe per le corna&lt;/strong&gt; (:-PPP) e bypassato tutta una serie di complicazioni introdotte da queste nuove policy, ridandoci MozREPL in tutto il suo splendore anche su Firefox 3.&lt;/p&gt;

&lt;h2 id='colpo_di_scena'&gt;Colpo di scena&lt;/h2&gt;

&lt;p&gt;Giocavo un po&amp;#8217; con &lt;a href='http://extjs.com'&gt;ExtJS&lt;/a&gt; come passatempo domenicale e ad un certo punto ho avuto bisogno di vedere alcuni dettagli da più vicino &amp;#8230; attivo MozREPL!&lt;/p&gt;

&lt;p&gt;Navigando nel DOM mi accorgo di qualcosa di strano:&lt;/p&gt;
&lt;pre&gt;
  repl&gt; repl.enter(content)
  [object XPCWrappedNative [object Window]] ...
  repl&gt; repl.look()
  ...
  this.Ext= undefined
  ...
  ...
  repl&gt;
&lt;/pre&gt;
&lt;p&gt;uhm&amp;#8230; strano&amp;#8230; l&amp;#8217;object che dovrebbe contenere tutti gli oggetti di ExtJS è presente nell&amp;#8217;elenco delle proprietà di window ma risulta undefined.&lt;/p&gt;

&lt;p&gt;uhm&amp;#8230; dopo averne discusso brevemente con &lt;a href='http://hyperstruct.net'&gt;bard&lt;/a&gt; l&amp;#8217;occhio salta improvvisamente qualche riga sopra:&lt;/p&gt;
&lt;pre&gt;
  repl&gt; repl.enter(content)
  [obejct XPCWrappedNative [object Window]] ...
&lt;/pre&gt;
&lt;p&gt;Azz&amp;#8230; window risulta wrapped&amp;#8230; in altre parole per evitare di accedere inavvertitamente a codice insicuro Firefox 3 ricopre gli oggetti provenienti dal content con una interfaccia di protezione quando ci accediamo da chrome :-(&lt;/p&gt;

&lt;p&gt;e ora?!?!?!&lt;/p&gt;

&lt;h2 id='websurfing'&gt;WebSurfing&lt;/h2&gt;

&lt;p&gt;Non bisogna mai disperare&amp;#8230; chi cerca trova:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://developer.mozilla.org/en/XPCNativeWrapper'&gt;http://developer.mozilla.org/en/XPCNativeWrapper&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Secondo quanto scritto nella documentazione mozilla:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; If unsafe access to a property is required for some reason, this can 
 be accomplished via the wrappedJSObject property of the wrapper.&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;bene bene bene&amp;#8230; quindi:&lt;/p&gt;

&lt;h2 id='workaround'&gt;Workaround&lt;/h2&gt;
&lt;pre&gt;
  repl&gt; repl.enter(content.wrappedJSObject)
  [object Window] ...
&lt;/pre&gt;
&lt;p&gt;perfetto!!! ora le proprietà sono nuovamente accessibili :-D&lt;/p&gt;

&lt;h2 id='soluzione'&gt;Soluzione&lt;/h2&gt;

&lt;p&gt;Beh che c&amp;#8217;e&amp;#8217; di meglio per una domenica pomeriggio dell&amp;#8217;eliminare un workaround :-D&lt;/p&gt;

&lt;p&gt;Il codice di MozREPL è veramente pulitissimo, di conseguenza sono bastati pochi minuti per identificare il punto in cui intervenire ed introdurre la modifica:&lt;/p&gt;
&lt;pre&gt;
 // CONTEXT NAVIGATION
 // ----------------------------------------------------------------------
 
-function enter(context) {
+function enter(context, wrapped) {
+    if (wrapped != true &amp;amp;&amp;amp; context.wrappedJSObject != undefined) 
+      context = context.wrappedJSObject;
+
     this._contextHistory.push(this._workContext);
 
     if(isTopLevel(context))
&lt;/pre&gt;
&lt;p&gt;Ohhh ora tutto è tornato come prima e ho di nuovo la mia &amp;#8220;livella&amp;#8221; :-D&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-9113572497853953301?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/hsdPL8wb2es" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/9113572497853953301/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=9113572497853953301" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/9113572497853953301?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/9113572497853953301?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/hsdPL8wb2es/mozrepl-e-firefox-3-access-unsafe.html" title="MozREPL e Firefox 3: access unsafe properties from chrome" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/09/mozrepl-e-firefox-3-access-unsafe.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4FQ389eyp7ImA9WxdaFE8.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-4209055469264650502</id><published>2008-08-22T18:33:00.002+02:00</published><updated>2008-08-22T18:35:12.163+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-22T18:35:12.163+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="links" /><title>Git it a try</title><content type="html">&lt;p&gt;Era un po&amp;#8217; che mi ci imbattevo&amp;#8230; all&amp;#8217;inizio raramente&amp;#8230; poi sempre piu&amp;#8217; spesso&amp;#8230; &lt;a href='http://www.git-scm.com'&gt;GIT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fino ad ora mi ero sempre limitato a &amp;#8221;&amp;#8216;clonare&amp;#8221;&amp;#8217; repository di progetti che avevo intenzione di compilare dai sorgenti e di qualche nuovo plugin per &lt;a href='http://rubyonrails.org'&gt;Rails&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ma con la semplice operazione di clonazione non ero ancora riuscito a visualizzare analogie e differenze con altri sistemi di controllo delle revisioni decentralizzato &lt;a href='http://en.wikipedia.org/wiki/Distributed_Version_Control_System'&gt;DVCS&lt;/a&gt; che mi sono trovato ad utilizzare in precedenza, ed in particolare con il sistema che sino ad adesso ho utilizzato per revisionare i sorgenti e documenti su cui lavoro, &lt;a href='www.bazaar-vcs.org'&gt;Bazaar&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In realtà non mi sono mai trovato così male con bazaar da motivarmi sufficientemente alla ricerca di un alternativa, per cui l&amp;#8217;aumento esponenziale della popolarità e diffusione di GIT mi è diciamo scivolata addosso :-D&lt;/p&gt;

&lt;p&gt;Certo &lt;a href='http://github.com'&gt;GitHub&lt;/a&gt; aveva l&amp;#8217;aria di essere una gran figata&amp;#8230; ma&amp;#8230; non lo so&amp;#8230; per quale motivo provare git?&lt;/p&gt;

&lt;p&gt;Just for fun, naturalmente :-)&lt;/p&gt;

&lt;h2 id='la_molla'&gt;La molla&lt;/h2&gt;

&lt;p&gt;La molla che ha fatto partire l&amp;#8217;interesse e la successiva fase di studio e test è stato un articolo trovato per caso durante una recente sessione di websurfing:&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;Git is the next unix&lt;/strong&gt;&lt;/dt&gt;

&lt;dd&gt;&lt;a href='http://www.advogato.org/person/apenwarr/diary/371.html'&gt;http://www.advogato.org/person/apenwarr/diary/371.html&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;L&amp;#8217;articolo non è particolarmente approfondito ma dipinge GIT da un altro interessante punto di vista:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;git is a totally new way to operate on data&lt;/p&gt;

&lt;p&gt;[&amp;#8230;]&lt;/p&gt;

&lt;p&gt;With git, we&amp;#8217;ve invented a new world where revision history, checksums, and branches don&amp;#8217;t make your filesystem slower: they make it faster.&lt;/p&gt;

&lt;p&gt;They don&amp;#8217;t make your data bigger: they make it smaller.&lt;/p&gt;

&lt;p&gt;They don&amp;#8217;t risk your data integrity; they guarantee integrity.&lt;/p&gt;

&lt;p&gt;They don&amp;#8217;t centralize your data in a big database; they distribute it peer to peer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id='la_goccia'&gt;La goccia&lt;/h2&gt;

&lt;p&gt;La goccia poi che ha fatto traboccare il vaso e spinto di fatto a interessarmi alla questione è stata la scoperta di un piccolo progetto chiamato &lt;a href='http://joey.kitenet.net/code/etckeeper/'&gt;etckeeper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Questo piccolo insieme di script bash utilizza un sistema di revisione (git di default ma con supporto anche di bazaar o darcs) allo scopo di tenere in revisioning i file di configurazione di un sistema (/etc per intenderci) consentendoci quindi di tracciarne meglio la vita e di poter riportare tutti o alcuni file ad una versione precedente senza nessun problema.&lt;/p&gt;

&lt;p&gt;E così ho deciso che era decisamente il momento di approfondire git, il suo funzionamento, le differenze e le analogie con gli altri sistemi simili, i vantaggi e gli svantaggi.&lt;/p&gt;

&lt;h2 id='websurfing_about_git'&gt;WebSurfing about GIT&lt;/h2&gt;

&lt;p&gt;E così è partito il websurfing di approfondimento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.kernel.org/pub/software/scm/git/docs/everyday.html'&gt;http://www.kernel.org/pub/software/scm/git/docs/everyday.html&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://linux.yyz.us/git-howto.html'&gt;http://linux.yyz.us/git-howto.html&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://git.or.cz/gitwiki/GitFaq'&gt;http://git.or.cz/gitwiki/GitFaq&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://git.or.cz/gitwiki/QuickStart'&gt;http://git.or.cz/gitwiki/QuickStart&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://eagain.net/articles/git-for-computer-scientists/'&gt;http://eagain.net/articles/git-for-computer-scientists/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.git-scm.com/'&gt;http://www.git-scm.com/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://info.wsisiz.edu.pl/~blizinsk/git-bzr.html'&gt;http://info.wsisiz.edu.pl/~blizinsk/git-bzr.html&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://how-bazaar.blogspot.com/2008/07/bazaar-has-model-right.html'&gt;http://how-bazaar.blogspot.com/2008/07/bazaar-has-model-right.html&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://git.or.cz/gitwiki/InterfacesFrontendsAndTools'&gt;http://git.or.cz/gitwiki/InterfacesFrontendsAndTools&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://tomayko.com/writings/the-thing-about-git'&gt;http://tomayko.com/writings/the-thing-about-git&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://newartisans.com/blog\_files/git.from.bottom.up.php'&gt;http://newartisans.com/blog_files/git.from.bottom.up.php&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www-cs-students.stanford.edu/~blynn/gitmagic/'&gt;http://www-cs-students.stanford.edu/~blynn/gitmagic/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://packz.noblogs.org/post/2007/06/03/git'&gt;http://packz.noblogs.org/post/2007/06/03/git&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blogs.gnome.org/shaunm/2007/09/17/git-for-gnome/'&gt;http://blogs.gnome.org/shaunm/2007/09/17/git-for-gnome/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.gnome.org/~federico/misc/git-cheat-sheet.txt'&gt;http://www.gnome.org/~federico/misc/git-cheat-sheet.txt&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://lwn.net/Articles/210045/'&gt;http://lwn.net/Articles/210045/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-4209055469264650502?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/qrkUd0Z-Z3Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/4209055469264650502/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=4209055469264650502" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4209055469264650502?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4209055469264650502?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/qrkUd0Z-Z3Y/git-it-try.html" title="Git it a try" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/08/git-it-try.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEICQno8eip7ImA9WxdXFUo.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-4916592182697952602</id><published>2008-06-27T14:41:00.005+02:00</published><updated>2008-06-27T15:16:03.472+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-27T15:16:03.472+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web" /><category scheme="http://www.blogger.com/atom/ns#" term="hack" /><category scheme="http://www.blogger.com/atom/ns#" term="geek" /><title>Goosh - a command line on google</title><content type="html">Dato che mi sembra che il post precedente abbia occupato per troppo tempo questa prima pagina... 
talmente tanto che gli annunci di google qui accanto cominciano a propormi roba del tipo &lt;span style="font-weight:bold;"&gt;"11 esami in 10 mesi"&lt;/span&gt; :-P
e visto oltretutto che a parte il dovuto sfogo ho altro a cui pensare e con cui divertirmi ;-)
&lt;br/&gt;
ma soprattutto dato che il compagno Domenico continua a punzacchiarmi su questa cosa...
&lt;br/&gt;
ho deciso di dedicargli questo micropost :-D
&lt;br/&gt;
&lt;a href="http://goosh.org"&gt;Goosh&lt;/a&gt; è una "interfaccia CLI non ufficiale" per effettuare ricerche su google.
&lt;br/&gt;
In pratica è una piccola applicazione XHTML+Javascript che implementa una interfaccia in linea di comando (del tutto simile ad una shell) la quale comunica in AJAX con i servizi google mediante &lt;a href="http://code.google.com/more/"&gt;le loro API&lt;/a&gt;.
&lt;br/&gt;
E' un hack molto simpatico e anche particolarmente piacevole per chi come noi adora usare il terminale a caratteri ;-)
&lt;br/&gt;
Happy gooshing&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-4916592182697952602?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/F3P0-EFRebk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/4916592182697952602/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=4916592182697952602" title="1 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4916592182697952602?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4916592182697952602?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/F3P0-EFRebk/goosh-command-line-on-google.html" title="Goosh - a command line on google" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/06/goosh-command-line-on-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AGQXw-fCp7ImA9WxdREUU.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-1322371210178252401</id><published>2008-05-30T23:00:00.002+02:00</published><updated>2008-05-30T23:08:40.254+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-30T23:08:40.254+02:00</app:edited><title>Manifesto di uno studente "peso per la società" fuoricorso</title><content type="html">Ebbene si lo ammetto... 
&lt;br/&gt;&lt;br/&gt;
E' colpa mia se voi studenti in corso non avete
i servizi e i benefici che l'università a cui vi siete iscritti vi
aveva promesso...
&lt;br/&gt;&lt;br/&gt;
E' colpa mia se il 90% degli studenti di Informatica a stento ha
acceso un computer, percentuale tra l'altro simile a quella
che sfornava l'industriale (ma a costi decisamente inferiori :-P), 
scuola superiore in cui mi diplomai prima di intraprendere la mia 
attività odierna di "peso per la società" 
&lt;br/&gt;&lt;br/&gt;
E' colpa mia se con il nuovo ordinamento (o il vecchio nuovo 
ordinamento) non riuscite a capire che czz state studiando che già vi
hanno mandato calci in culo all'esame successivo... in realtà
il nuovo ordinamento lo hanno istituito sperando di potersi liberare
di quelli come me...
&lt;br/&gt;&lt;br/&gt;
E' colpa mia se l'università ha aperto nel termine di pochissimi anni
decine di facoltà e specializzazioni chiuse poi negli stessi
pochissimi anni... in realtà stavano cercando di trovare una facoltà
che mi piacesse e potersi finalmente liberare di me...
&lt;br/&gt;&lt;br/&gt;
E' colpa mia se l'università spende milioni di euro ogni anno per
attrezzature che poi non utilizza e prendono la polvere nelle scale
e nei laboratori fino a quando qualche "anima pia" non decide
vedendoli così tristi e sconsolati di portarle a casa propria...
&lt;br/&gt;&lt;br/&gt;
E io invece niente... mi sono ostinato a continuare nella mia attività
di "peso per la società"... ma ora le cose cambieranno!!! 
&lt;br/&gt;&lt;br/&gt;
La nuova direzione è intenzionata a correggere gli errori del passato...
... basta con tutti questi privilegi per gli studenti fuoricorso
che altro non sono che un "peso per la società"
... ora appianeranno questa ingiustizia!!!
&lt;br/&gt;&lt;br/&gt;
Basta!!! questo paese si deve liberare delle sue piaghe sociali:
i comunisti e gli studenti fuoricorso.
&lt;br/&gt;&lt;br/&gt;
Ora ho davanti a me due possibilità o "adotto un cucciolo di
dottorando" alla modica cifra di circa 900
euro l'anno oppure dovro' sloggiare... "vai a lavurà terunnn!!!"
&lt;br/&gt;&lt;br/&gt;
Che peccato!!! e io "speravo" di cavarmela ancora pagando solo quei circa
500 euro l'anno... eh! pensavi di poter continuare a non contribuire
alla sopravvivenza della tua università pagando questa inezia!?!?
&lt;br/&gt;&lt;br/&gt;
E' finita la pacchia! ora se vorrai farti cancellare un esame
per presunte irregolarità sulle propedeuticità dovrai "contribuire
molto di più"!!!!!
&lt;br/&gt;&lt;br/&gt;
:'-(
&lt;br/&gt;&lt;br/&gt;
Peccato... in fondo credo che mi sarei potuto meritare la possibilità
di interrompere il mio percorso di studi e di potermi un giorno guadagnare 
una "certificazione cartacea" della passione e
professione che esercito oramai da una vita... pazienza.
&lt;br/&gt;&lt;br/&gt;
A questo punto non posso che ringraziarvi per la pazienza che avete
dimostrato sia voi studenti in corso sia tutto il personale
universitario nel sopportare un "peso per la società" come me,
ma prima di abbandonarvi e restituire il mio libretto 
vorrei riguardarlo un ultima volta e ringraziare qualcuno:
&lt;br/&gt;&lt;br/&gt;
"Matematica I/II e Applicata" per avermi costretto
a colmare alcune gravi lacune che mi portavo dietro dalle scuole superiori
&lt;br/&gt;&lt;br/&gt;
"Geometria e Algebra" per avermi fatto capire quanto la matematica
possa essere appassionante
&lt;br/&gt;&lt;br/&gt;
"Segnali e Sistemi", "Fondamenti di Automatica" ma soprattutto
"Analisi dei Sistemi" per aver contribuito in modo incalcolabile
alla mia forma mentis
&lt;br/&gt;&lt;br/&gt;
"Fondamenti I e II" per avermi dato le conferme di cui avevo bisogno
&lt;br/&gt;&lt;br/&gt;
Ah... ringrazio anche "Ingegneria del Software" per lo stesso motivo
di cui sopra e per l'unico "30 e lode" che ho ricevuto nella mia 
carriera di "peso per la società"... peccato che la segreteria
non era daccordo e me lo ha cancellato... peccato...
&lt;br/&gt;&lt;br/&gt;
In fondo sono felice di aver potuto frequentare Ingegneria Informatica
perchè ho imparato:
&lt;ul&gt;
&lt;li&gt;quanto è importante conoscere la matematica nel mio lavoro
  non tanto per le formule quanto per il modo di azionare il cervello
  che ti insegna&lt;/li&gt;
&lt;li&gt;cosa non è per me l'informatica&lt;/li&gt;
&lt;li&gt;come non voglio esercitare il mio mestiere&lt;/li&gt;
&lt;li&gt;che differenze ci sono e come si distingue qualcuno che
vuole "insegnarti qualcosa" da qualcuno che vuole "venderti qualcosa"&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;&lt;br/&gt;
Il mio unico rimpianto è di non aver sostenuto gli esami di Fisica
che probabilmente mi avrebbero potuto dare qualcosa di importante
da conservare nel mio bagaglio culturale.
&lt;br/&gt;&lt;br/&gt;
In ultima battuta e prima di togliere il disturbo che pare io abbia
arrecato a questa povera Università vorrei solo fare un paio di
considerazioni personali:
&lt;ul&gt;
&lt;li&gt;in un Università che investe più in macchinari che in Professionalità
  probabilmente non si ha ben chiaro il significato e i meccanismi
  del lavoro intellettuale
&lt;/li&gt;
&lt;li&gt; un Università che offende i propri studenti quando non sono daccordo
  con le decisioni prese è una forma di dittatura non una scuola...
  ... il saggio è chi sa di non sapere... chi sa già tutto prima di
  ascoltare è un solo c****one
&lt;/li&gt;
&lt;li&gt; se non hai una spontanea passione per la materia che insegni, e per
  "spontanea passione" si intende quello stupirsi ogni giorno
  dell'infinito scibile umano non l'assegno mensile, 
  forse è meglio che ti trovi qualcos'altro da fare
&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;&lt;br/&gt;
P.S. ah... comunque con chi parlo per le due casse di vino
che mi spettano?
Ah... quelle non spettano a tutti i "pesi per la società"?!?!?
Solo alcuni?!?!? Quanto bisogna "pesare sulla società" per maturare
una cassa di vino?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-1322371210178252401?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/Klh1C3iI_J4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/1322371210178252401/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=1322371210178252401" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/1322371210178252401?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/1322371210178252401?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/Klh1C3iI_J4/manifesto-di-uno-studente-peso-per-la.html" title="Manifesto di uno studente &quot;peso per la società&quot; fuoricorso" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/05/manifesto-di-uno-studente-peso-per-la.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQAQHg7eyp7ImA9WxdSEE8.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-1345935930429234029</id><published>2008-05-16T19:22:00.007+02:00</published><updated>2008-05-17T13:22:21.603+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-17T13:22:21.603+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="geekevening" /><title>Geekevening 0x0E</title><content type="html">Non sono sicuro di riuscire pienamente a descrivere la sensazione provata ieri sera al &lt;a href="http://salug.it/wiki/index.php/LaNotteFaLoHacker"&gt;geekevening-0x0E "Jamendo"&lt;/a&gt;...
&lt;br/&gt;&lt;br/&gt;
Quest'ultimo geekevening aveva (come è facile intuire dal titolo) come argomento l'accesso ai servizi offerti dal progetto &lt;a href="http://www.jamendo.com/en/"&gt;Jamendo&lt;/a&gt; e in particolare lo sviluppo da parte di due giovani quanto promettenti geek del nostro amato &lt;a href="http://www.salug.it"&gt;LUG&lt;/a&gt; di 2 plugin per integrare le risorse audio &lt;a href="http://creativecommons.org/"&gt;CC&lt;/a&gt; disponibili su Jamendo nei loro player audio preferiti (&lt;a href="http://www.gnu.org/software/emms/"&gt;EMMS&lt;/a&gt; e &lt;a href="http://audacious-media-player.org/"&gt;Audacious&lt;/a&gt;).
&lt;br/&gt;&lt;br/&gt;
Il numero di partecipanti superava di poco la decina, numero comunque elevato visto l'argomento molto tecnico (elisp e C), ma la cosa più bella a mio avviso era il clima che si respirava:
&lt;br/&gt;
&lt;center&gt;
&lt;span style="font-weight:bold;"&gt;hackmeeting&lt;/span&gt;
&lt;/center&gt;
&lt;br/&gt;
Incredibile ma vero... eravamo a Lecce... nello Spazio Sociale ZEI... ma la sensazione che ho provato era quella di trovarmi ad uno dei seminari dell'hackit:
&lt;br/&gt;&lt;br/&gt;
Curiosità... entusiasmo...e una sufficiente dose di tecnicismi mista a quella classica (quanto fastidiosa per i !geek) ironia geek :-D
&lt;br/&gt;&lt;br/&gt;
Ho seguito con estremo interesse l'esposizione di entrambi (&lt;a href="http://desmovalvo.blogspot.com/"&gt;valvola&lt;/a&gt; e &lt;a href="http://cantieredelleidee.blogspot.com/"&gt;sydro&lt;/a&gt;), e probabilmente sono stato fastidioso come una zanzara d'estate (spero di non aver esagerato ;-P) ma che ci posso fare... ero preso troppo bene e non riuscivo a trattenermi dal partecipare attivamente... forse trooooppo attivamente :-D
&lt;br/&gt;&lt;br/&gt;
&lt;center&gt;
&lt;span style="font-weight:bold;"&gt;
Siete autorizzati a imbavagliarmi la prossima volta :-P
&lt;/span&gt;
&lt;/center&gt;
&lt;br/&gt;
In conclusione... grazie ragazzi (lacrimuccia :°D)... a tutti coloro che hanno realizzato uno o più geekevening e a tutti coloro che vi hanno partecipato... sono andato a casa con un sorriso ebete di soddisfazione stampato in faccia ieri sera...
&lt;br/&gt;&lt;br/&gt;
...ho sognato questo giorno dal momento in cui ho cominciato a capire il perchè avevo diviso il mio disco a metà per fare posto a GNU/Linux:
&lt;br/&gt;&lt;br/&gt;
il giorno in cui avrei potuto guardare una pagina come questa:
&lt;center&gt;
&lt;span style="font-weight:bold;"&gt;
&lt;a href="http://salug.it/wiki/index.php/LaNotteFaLoHacker"&gt;http://salug.it/wiki/index.php/LaNotteFaLoHacker&lt;/a&gt;
&lt;/span&gt;
&lt;/center&gt;
e dire questo succede a Lecce... &lt;span style="font-weight:bold;"&gt;e lo abbiamo fatto succedere noi&lt;/span&gt; ;-)
&lt;br/&gt;&lt;br/&gt;
Al prossimo geekevening allora...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-1345935930429234029?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/qYd6NhXRw8M" height="1" width="1"/&gt;</content><link rel="related" href="http://salug.it/wiki/index.php/LaNotteFaLoHacker" title="Geekevening 0x0E" /><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/1345935930429234029/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=1345935930429234029" title="4 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/1345935930429234029?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/1345935930429234029?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/qYd6NhXRw8M/geekevening-0x0e.html" title="Geekevening 0x0E" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/05/geekevening-0x0e.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04FSXo4eCp7ImA9WxZaEEg.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-9039964018171650863</id><published>2008-04-24T19:04:00.003+02:00</published><updated>2008-04-24T19:58:38.430+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-24T19:58:38.430+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><title>Use the Profiler, Luke</title><content type="html">Una delle fisse (una delle tante) che ci ritroviamo come programmatori è quella dell'ottimizzazione.
&lt;br/&gt;&lt;br/&gt;
Come ogni fissa, sono diverse le scuole di pensiero:
c'è chi ritiene di dover scrivere tutto in C o meglio ancora in assembler, chi ritiene si debbano evitare i linguaggi di scripting puramente interpretati a vantaggio di quelli basati su bytecode, chi di dover evitare questo o quel framework e che sia meglio riscriversi le funzionalità da zero invece che affidarsi a libreria di uso più generico... etc. etc. etc.
&lt;br/&gt;&lt;br/&gt;
Ma il problema IMHO è che l'ottimizzazione è un problema che trascende il linguaggio di programmazione, il sistema operativo, la virtual machine, il framework e qualsiasi altra discriminante tecnologica.
&lt;br/&gt;&lt;br/&gt;
Tra le cose lette e la mia modesta esperienza a riguardo credo di poter affermare di essere pienamente daccordo con Martin Fowler (&lt;a href="http://martinfowler.com/ieeeSoftware/yetOptimization.pdf"&gt;http://martinfowler.com/ieeeSoftware/yetOptimization.pdf&lt;/a&gt;):
&lt;br/&gt;&lt;br/&gt;
La prima domanda che ci dovremmo porre e a cui dovremmo dare risposta (alla Marzulliana maniera) è:
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-style:italic;"&gt;Ottimizzare COSA?!?!?&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Inutile ottimizzare un software che non è stato ancora scritto&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Inutile ottimizzare qualcosa che non si è ancora misurato&lt;/span&gt;... anche perchè se non lo abbiamo misurato... come facciamo a essere sicuri che quella che abbiamo intavolato è una ottimizzazione?
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-style: italic;"&gt;"If you make an optimization and don’t measure to confirm the performance increase, all you know for certain is that you’ve made your code harder to read."&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;(Martin Flowler)&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
Quindi? &lt;a href="http://www.imdb.com/title/tt0076759/quotes"&gt;Personalmente seguo gli insegnamenti di Obi-Wan :-)&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;"Use the Profiler, Luke"&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
Ultimamente mi sono trovato insieme ai miei altri &lt;a href="http://alca.le.it"&gt;Alca&lt;/a&gt;-compagni nella situazione di voler identificare quale parte di una nostra applicazione Javascript introduce un ritardo non proprio trascurabile per valutare se e cosa ottimizzare.
&lt;br/&gt;&lt;br/&gt;
Le soluzioni che abbiamo trovato e provato per Javascript sono 3:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.hacksrus.com/%7Eginda/venkman/profiles/"&gt;Il profiler integrato in Venkman&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.getfirebug.com/js.html"&gt;Il profiler integrato in Firebug&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://remysharp.com/2007/04/20/performance-profiling-javascript/"&gt;una piccola libreria Javascript&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://www.hacksrus.com/%7Eginda/venkman/profiles/"&gt;Il primo&lt;/a&gt; si è rivelato molto efficace per effettuare il profiling del codice javascript privilegiato (quello nella zona chrome di mozilla):
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_W42xjpEMvQ8/SBDIxH2zcyI/AAAAAAAAACk/XJL5p2tJefc/s1600-h/venkman_profile.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_W42xjpEMvQ8/SBDIxH2zcyI/AAAAAAAAACk/XJL5p2tJefc/s400/venkman_profile.png" alt="" id="BLOGGER_PHOTO_ID_5192871116606239522" border="0" /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;a href="http://www.getfirebug.com/js.html"&gt;Il secondo&lt;/a&gt; si è rivelato più comodo per il profiling di codice javascript contenuto nelle pagine HTML (quello nella zona content nella terminologia mozilla):
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_W42xjpEMvQ8/SBDIyH2zczI/AAAAAAAAACs/-3y_yybAPrU/s1600-h/firebug_profile.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_W42xjpEMvQ8/SBDIyH2zczI/AAAAAAAAACs/-3y_yybAPrU/s400/firebug_profile.png" alt="" id="BLOGGER_PHOTO_ID_5192871133786108722" border="0" /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;a href="http://remysharp.com/2007/04/20/performance-profiling-javascript/"&gt;L'ultimo&lt;/a&gt; di è rivelato utile per misurare velocemente il profiling di una singola funzione o di punti particolari di una stessa funzione Javascript:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_W42xjpEMvQ8/SBDIyn2zc0I/AAAAAAAAAC0/6TT8GapjChg/s1600-h/jstimelib.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_W42xjpEMvQ8/SBDIyn2zc0I/AAAAAAAAAC0/6TT8GapjChg/s400/jstimelib.png" alt="" id="BLOGGER_PHOTO_ID_5192871142376043330" border="0" /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
Provare per credere ;-)
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;"Use the Profiler, Luke... Use the Profiler"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-9039964018171650863?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/LGCLr4B4UAk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/9039964018171650863/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=9039964018171650863" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/9039964018171650863?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/9039964018171650863?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/LGCLr4B4UAk/use-profiler-luke.html" title="Use the Profiler, Luke" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp1.blogger.com/_W42xjpEMvQ8/SBDIxH2zcyI/AAAAAAAAACk/XJL5p2tJefc/s72-c/venkman_profile.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/04/use-profiler-luke.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYCRXg8eCp7ImA9WxZUGEs.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-8308432001155039554</id><published>2008-04-10T22:56:00.004+02:00</published><updated>2008-04-11T00:56:04.670+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T00:56:04.670+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><title>ExtJS: myContainer.items.items.items.items... :-D</title><content type="html">E chi l'avrebbe mai detto?!?!?!
&lt;br/&gt;&lt;br/&gt;


&lt;a href="http://extjs.com/"&gt;ExtJS&lt;/a&gt; è un gran bel toolkit... un vero è proprio UI toolkit (come &lt;a href="http://www.gtk.org/"&gt;Gtk&lt;/a&gt;, &lt;a href="http://trolltech.com/products/qt"&gt;Qt&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Swing_%28Java%29"&gt;Swing&lt;/a&gt; etc. etc.) per Javascript multibrowser.
&lt;br/&gt;&lt;br/&gt;


Sono ormai un bel po' di mesi che &lt;a href="http://alca.le.it"&gt;lo usiamo&lt;/a&gt; passando dalla versione &lt;a href="http://extjs.com/deploy/ext-1.1.1/docs/"&gt;1.1.1&lt;/a&gt; alla nuova &lt;a href="http://extjs.com/deploy/dev/docs/"&gt;2.0&lt;/a&gt;.
&lt;br/&gt;&lt;br/&gt;


Siamo molto soddisfatti della pulizia e flessibilità del framework e la &lt;a href="http://extjs.com/learn/Ext_2_Overview#Component_Model"&gt;composizione lazy in JSON&lt;/a&gt; dell'interfaccia è un vera manna... non mancano ovviamente le sorprese... ma in fondo è questo il bello dell'usare nuove tecnologie fresche fresche... la continua scoperta :-)
&lt;br/&gt;&lt;br/&gt;


Una delle cose a cui non riuscivamo assolutamente a rassegnarci era quello di non riuscire a scorrere gli &lt;span style="font-weight: bold;"&gt;item&lt;/span&gt; di un &lt;span style="font-weight: bold;"&gt;Ext.Container&lt;/span&gt; mediante l'attributo &lt;span style="font-weight: bold;"&gt;items&lt;/span&gt;:

&lt;pre&gt;&lt;code&gt;
&gt;&gt; console.log(myContainer.items)
[ undefined, undefined, undefined ]

&lt;/code&gt;&lt;/pre&gt;

tradotto da Javascript in italiano: &lt;span style="font-style: italic;"&gt;"la lunghezza dell'array è giusta... mah dove c....o stanno i nostri oggetti Ext.Component?!?!?!?"&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;


ancora più strano visto che con il metodo &lt;span style="font-weight: bold;"&gt;find&lt;/span&gt; si ottiene un array di &lt;span style="font-weight: bold;"&gt;Ext.Component&lt;/span&gt;:

&lt;pre&gt;&lt;code&gt;
&gt;&gt; console.log(myContainer.find())
[Object initialConfig=Object id=contact-info xtype=panel, 
 Object initialConfig=Object id=operator-notes xtype=form, 
 Object initialConfig=Object xtype=textarea]
&lt;/code&gt;&lt;/pre&gt;

non è sopportabile la sensazione di essere preso per il c..o da un pezzo di codice Javascript!!!!
&lt;br/&gt;&lt;br/&gt;


beh... grazie ad un po' di &lt;span style="font-style: italic;"&gt;debugging&lt;/span&gt; e con l'aiuto dei &lt;span style="font-style: italic;"&gt;watch&lt;/span&gt; di &lt;a href="http://www.getfirebug.com/"&gt;Firebug&lt;/a&gt; il mistero è svelato:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_W42xjpEMvQ8/R_6Ze-2y8fI/AAAAAAAAACc/qIn708dQwJM/s1600-h/firebug_extjs_items_items.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_W42xjpEMvQ8/R_6Ze-2y8fI/AAAAAAAAACc/qIn708dQwJM/s400/firebug_extjs_items_items.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5187752578325344754" /&gt;&lt;/a&gt;

&lt;span style="font-weight: bold;"&gt;items.items&lt;/span&gt;... &lt;span style="font-style: italic;"&gt;i maledetti!!!!!!&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;


e c'è anche un motivo, anche se puo' sembrare assurdo:
&lt;span style="font-weight: bold;"&gt;items&lt;/span&gt; è una istanza di &lt;span style="font-weight: bold;"&gt;Ext.util.MixedCollection&lt;/span&gt; che ha a sua volta un attributo &lt;span style="font-weight: bold;"&gt;items&lt;/span&gt; contenente l'array di istanze di &lt;span style="font-weight: bold;"&gt;Ext.Component&lt;/span&gt; :-(
&lt;br/&gt;&lt;br/&gt;


Questa si chiama proprio cieca &lt;span style="font-style: italic;"&gt;deformazione professionale&lt;/span&gt; :-P
&lt;br/&gt;&lt;br/&gt;


&lt;span style="font-weight: bold;"&gt;items.items&lt;/span&gt; non si può proprio sentire... beh almeno ora sappiamo perchè ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-8308432001155039554?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/2jzYM7y2tcs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/8308432001155039554/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=8308432001155039554" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/8308432001155039554?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/8308432001155039554?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/2jzYM7y2tcs/extjs-mycontaineritemsitemsitemsitems-d.html" title="ExtJS: myContainer.items.items.items.items... :-D" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp1.blogger.com/_W42xjpEMvQ8/R_6Ze-2y8fI/AAAAAAAAACc/qIn708dQwJM/s72-c/firebug_extjs_items_items.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/04/extjs-mycontaineritemsitemsitemsitems-d.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4DRHg7eSp7ImA9WxZUFE4.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-7400316512499581068</id><published>2008-04-06T00:12:00.003+02:00</published><updated>2008-04-06T00:19:35.601+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-06T00:19:35.601+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="links" /><title>Localize your XUL</title><content type="html">Ho scritto questo breve howto per non dimenticare la procedura di esternalizzazione delle stringhe e di conversione in formato po/pot allo scopo di usufruire dei tool di internazionalizzazione che supportano questo formato.

L'articolo si trova su &lt;a href="http://xulit.org/"&gt;XULIT&lt;/a&gt; all'url:

&lt;ul&gt;&lt;li&gt;&lt;a href="http://xulit.org/blogs/rpl/2007/12/6/localize-your-xul"&gt;http://xulit.org/blogs/rpl/2007/12/6/localize-your-xul&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Link utili
&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://xulit.org"&gt;http://xulit.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Translate_Toolkit"&gt;http://en.wikipedia.org/wiki/Translate_Toolkit&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-7400316512499581068?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/gMyEOMeDyC8" height="1" width="1"/&gt;</content><link rel="related" href="http://xulit.org/blogs/rpl/2007/12/6/localize-your-xul" title="Localize your XUL" /><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/7400316512499581068/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=7400316512499581068" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/7400316512499581068?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/7400316512499581068?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/gMyEOMeDyC8/localize-your-xul.html" title="Localize your XUL" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/04/localize-your-xul.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UEQ3o6fCp7ImA9WxZUE0s.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-3395360694505836328</id><published>2008-04-05T05:31:00.006+02:00</published><updated>2008-04-05T06:20:02.414+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-05T06:20:02.414+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="*nix" /><title>OpenWRT snapshot by night</title><content type="html">Dovendo ricondizionare ( :-P ) una fonera per un amico ho deciso di provare questo famigerato tool &lt;a href="http://wiki.ninux.org/FreifunkFonera"&gt;"AP51 Easy Flash"&lt;/a&gt; che automatizza completamente la procedura (&lt;a href="http://ipkg.k1k2.de/openwrt-atheros-2.6-root.jffs2-64k"&gt;rootfs&lt;/a&gt;, &lt;a href="http://ipkg.k1k2.de/openwrt-atheros-2.6-vmlinux.lzma"&gt;kernel&lt;/a&gt;):

&lt;pre&gt;&lt;code&gt;
rpl@ubik:~/Works/fon2200$ sudo ./ap51-flash-fonera-1.0-38 eth0 \
 openwrt-atheros-2.6-root.jffs2-64k openwrt-atheros-2.6-vmlinux.lzma
Reading rootfs file openwrt-atheros-2.6-root.jffs2-64k with 1835008 bytes...
Reading kernel file openwrt-atheros-2.6-vmlinux.lzma with 786432 bytes...
rootfs(0x006e0000) + kernel(0x000c0000) + nvram(0x00000000) sums up to 0x007a0000 bytes
Non arp received. Make sure, the device is connected directly!
Peer MAC: 00:18:84:81:5d:9c
Peer IP : 192.168.1.1
Your MAC: 00:ba:be:ca:ff:ee
Your IP : 192.168.1.0
Setting IP address...
Loading rootfs...
Sending rootfs, 3584 blocks...
Initializing partitions...
Rootfs partition size now 0x006f0000
Flashing rootfs...
Loading kernel...
Sending kernel, 1536 blocks...
Flashing kernel...
Setting boot_script_data...
Done. Restarting device...
&lt;/code&gt;&lt;/pre&gt;

Miiiii che noia fa praticamente tutto lui :-(
&lt;br/&gt;&lt;br/&gt;
Vi toglie tutta l'emozione e il divertimento... come vedere un film conoscendone già il finale :-(((
&lt;br/&gt;&lt;br/&gt;
tra l'altro la seconda revisione della fonera (&lt;a href="http://wiki.ninux.org/Fon2200Hack"&gt;FON2200&lt;/a&gt;) ha già redboot attivo e quindi non è nemmeno necessario utilizzare hack per aprire ssh, cambiare kernel etc. etc. :-'(
&lt;br/&gt;&lt;br/&gt;
Se è la vostra "prima volta" vi consiglio caldamente la procedura
manuale (&lt;a href="http://wiki.ninux.org/LaFoneraDallaScatolaAOpenWrt"&gt;http://wiki.ninux.org/LaFoneraDallaScatolaAOpenWrt&lt;/a&gt;), molto
più divertente :-D
&lt;br/&gt;&lt;br/&gt;
beh... cosa vedo li sulla porta 80? &lt;a href="http://x-wrt.org/"&gt;webif&lt;/a&gt; installato di default... diamogli un occhiata, mai provato prima...&lt;br/&gt;
...&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;http://192.168.1.1/&lt;/span&gt;&lt;br/&gt;
...&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Network&lt;/span&gt;&lt;br/&gt;
...&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Host&lt;/span&gt;&lt;br/&gt;
... &lt;span style="font-weight:bold;"&gt;SBAM&lt;/span&gt;
&lt;pre&gt;&lt;code&gt;
/bin/sh: nvram: not found
/bin/sh: nvram: not found
/bin/sh: nvram: not found
/bin/sh: nvram: not found
/bin/sh: nvram: not found
/bin/sh: nvram: not found
/bin/sh: nvram: not found
/bin/sh: nvram: not found
/bin/sh: nvram: not found
/bin/sh: nvram: not found
Content-Type: text/html; charset=UTF-8
Pragma: no-cache

...

&amp;lt;div class="warning"&amp;gt;WARNING: This page has not been updated or
checked for correct functionality under Kamikaze.&amp;lt;/div&amp;gt;
...
&lt;/code&gt;&lt;/pre&gt;

Miiii... funziona bene ;-)&lt;br/&gt;
al secondo menù ho già beccato una pagina non funzionante?
&lt;br/&gt;&lt;br/&gt;
aggiorniamo? aggiorniamo!&lt;br/&gt;
magari prima dovremmo correggere i repository?!?!??!&lt;br/&gt;
st'immagine fa proprio... beh il "bello" degli snapshot è l'emozione ;-)

&lt;pre&gt;&lt;code&gt;
#src snapshots http://downloads.openwrt.org/snapshots/atheros-2.6/packages
src snapshots src snapshots http://ipkg.k1k2.de/packages/
src packages http://downloads.openwrt.org/kamikaze/packages/mips
dest root /
dest ram /tmp
src X-Wrt http://downloads.x-wrt.org/xwrt/kamikaze/snapshots/atheros-2.6/packages
&lt;/code&gt;&lt;/pre&gt;

ORA aggiorniamo:

&lt;pre&gt;&lt;code&gt;
root@OpenWrt:/etc# ipkg update
Downloading http://ipkg.k1k2.de/packages//Packages
Updated list of available packages in /usr/lib/ipkg/lists/snapshots
Downloading http://downloads.openwrt.org/kamikaze/packages/mips/Packages
Updated list of available packages in /usr/lib/ipkg/lists/packages
Downloading http://downloads.x-wrt.org/xwrt/kamikaze/snapshots/atheros-2.6/packages/Packages
Updated list of available packages in /usr/lib/ipkg/lists/X-Wrt
Done.
root@OpenWrt:/etc# ipkg upgrade
Upgrading busybox on root from 1.4.2-3 to 1.8.2-1...
Downloading http://downloads.x-wrt.org/xwrt/kamikaze/snapshots/atheros-2.6/packages/./busybox_1.8.2-1_mips.ipk
ipkg: fork failed: Cannot allocate memory
&lt;/code&gt;&lt;/pre&gt;

scusa scusa... faccio fuori qualcosa?... httpd?

&lt;pre&gt;&lt;code&gt;
&lt;/code&gt;&lt;code&gt;root@OpenWrt:/etc# /etc/init.d/httpd stop
Terminated &lt;/code&gt;&lt;/pre&gt;

insisti insisti che alla fine ce la farà...

&lt;pre&gt;&lt;code&gt;
root@OpenWrt:/etc# ipkg upgrade
....
root@OpenWrt:/etc# ipkg upgrade
....
root@OpenWrt:/etc# ipkg upgrade webif

&lt;/code&gt;&lt;/pre&gt;

ohhh.... facciamo ripartire httpd:

&lt;pre&gt;&lt;code&gt;
root@OpenWrt:/etc# /etc/init.d/httpd start
/etc/rc.common: eval: line 1: uci_set_default: not found
&lt;/code&gt;&lt;/pre&gt;

ti piacerebbe!!!&lt;br/&gt;
googla di qua e googla di la mi sa che il nuovo webif fa uso di funzionalità inserite nei nuovi uci e base-files (https://dev.openwrt.org/changeset/10086)...
&lt;br/&gt;&lt;br/&gt;
Aggiorniamo?.... beh...

&lt;pre&gt;&lt;code&gt;
root@OpenWrt:~# ipkg upgrade uci
Installing uci (0.3.0-1) to root...
Downloading http://downloads.x-wrt.org/xwrt/kamikaze/snapshots/atheros-2.6/packages/./uci_0.3.0-1_mips.ipk
Installing libuci (0.3.0-1) to root...
Downloading http://downloads.x-wrt.org/xwrt/kamikaze/snapshots/atheros-2.6/packages/./libuci_0.3.0-1_mips.ipk
Configuring libuci
Done.
Collected errors:
Package uci wants to install file /lib/config/uci.sh
       But that file is already provided by package base-files-atheros-2.6
&lt;/code&gt;&lt;/pre&gt;

prego prego sovrascrivi:

&lt;pre&gt;&lt;code&gt;
root@OpenWrt:~# ipkg upgrade uci -force-overwrite 
Installing uci (0.3.0-1) to root...
Downloading http://downloads.x-wrt.org/xwrt/kamikaze/snapshots/atheros-2.6/packages/./uci_0.3.0-1_mips.ipk
Configuring uci
Done.
root@OpenWrt:~#
&lt;/code&gt;&lt;/pre&gt;

e ora il passo delicato (della serie "attento a cosa sovrascrivi e fare un diff non fa mai male"):

&lt;pre&gt;&lt;code&gt;
root@OpenWrt:~# ipkg install base-files-atheros -force-overwrite
....
   Configuration file '/etc/passwd'
   ==&gt; File on system created by you or by a script.
   ==&gt; File also in package provided by package maintainer.
      What would you like to do about it ?  Your options are:
       Y or I  : install the package maintainer's version
       N or O  : keep your currently-installed version
         D     : show the differences between the versions (if diff is installed)
    The default action is to keep your current version.
   *** passwd (Y/I/N/O/D) [default=N] ?n

&lt;/code&gt;&lt;/pre&gt;

ed ora?

&lt;pre&gt;&lt;code&gt;
root@OpenWrt:~# /etc/init.d/httpd start
root@OpenWrt:~# 
&lt;/code&gt;&lt;/pre&gt;

ohhhh... riproviamo:&lt;br/&gt;
...&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;http://192.168.1.1/&lt;/span&gt;&lt;br/&gt;
...&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Network&lt;/span&gt;&lt;br/&gt;
...&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Host&lt;/span&gt;&lt;br/&gt;
...&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;NOW IT'S WORK&lt;/span&gt; ;-)
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_W42xjpEMvQ8/R_b8fZ5xQ3I/AAAAAAAAACU/6Jp8MO6vOEY/s1600-h/scr_webif_r4087.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_W42xjpEMvQ8/R_b8fZ5xQ3I/AAAAAAAAACU/6Jp8MO6vOEY/s400/scr_webif_r4087.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5185609637423039346" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-3395360694505836328?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/6RRd_duXV94" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/3395360694505836328/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=3395360694505836328" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/3395360694505836328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/3395360694505836328?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/6RRd_duXV94/openwrt-snapshot-by-night.html" title="OpenWRT snapshot by night" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp2.blogger.com/_W42xjpEMvQ8/R_b8fZ5xQ3I/AAAAAAAAACU/6Jp8MO6vOEY/s72-c/scr_webif_r4087.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/04/openwrt-snapshot-by-night.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEBR386fyp7ImA9WxZUEUk.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-4276020623631454987</id><published>2008-04-02T15:11:00.004+02:00</published><updated>2008-04-02T15:24:16.117+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-02T15:24:16.117+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="links" /><title>ISO e OOXML</title><content type="html">Pare che l'OOXML abbia ottenuto i voti necessari alla sua approvazione come standard:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.iso.org/iso/pressrelease.htm?refid=Ref1123"&gt;News from ISO
&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Il formato OOXML, proposto da microsoft, &lt;span style="font-style: italic;"&gt;(ISO/IEC 29500) is a standard for word-processing documents, presentations and spreadsheets that is intended to be implemented by multiple applications on multiple platforms&lt;/span&gt;...
&lt;br/&gt;&lt;br/&gt;
e l'&lt;a href="http://en.wikipedia.org/wiki/OpenDocument"&gt;Open Document Format&lt;/a&gt; (standardizzato proprio dall'&lt;a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=43485"&gt;ISO nel 2006&lt;/a&gt;) cos'era?
&lt;br/&gt;&lt;br/&gt;
Caliamo un velo pietoso :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-4276020623631454987?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/1DsCh42IGoM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/4276020623631454987/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=4276020623631454987" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4276020623631454987?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/4276020623631454987?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/1DsCh42IGoM/iso-e-ooxml.html" title="ISO e OOXML" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/04/iso-e-ooxml.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IFQHY_cSp7ImA9WxZVGE8.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-1246505623004984146</id><published>2008-03-29T22:39:00.005+01:00</published><updated>2008-03-29T23:25:11.849+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-29T23:25:11.849+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web" /><category scheme="http://www.blogger.com/atom/ns#" term="links" /><title>Prim, AIR e Silverlight: 3 visioni dell'integrazione del web con il desktop</title><content type="html">&lt;quote&gt;&lt;pre&gt;
Unlike Adobe AIR and Microsoft Silverlight, we’re not building a 
proprietary platform to replace the web. We think the web is a 
powerful and open platform for this sort of innovation, so our 
goal is to identify and facilitate the development of enhancements 
that bring the advantages of desktop apps to the web platform.
...
MS says "Write a web application using Silverlight and you can get 
desktop integration". 
Adobe says "Write a web application using AIR and you can get desktop 
integration". 
Mozilla says "write a website *without* doing anything special, and 
*we* will take care of desktop integration".
&lt;/pre&gt;&lt;/quote&gt;

Come ho accennato anche io in qualche passato post, si sta preparando un nuovo profondo cambiamento dei nostri sistemi desktop:
&lt;br/&gt;
&lt;pre&gt;
     &lt;span style="font-weight:bold;"&gt;il web che si fonde con il desktop&lt;/span&gt;
&lt;/pre&gt;
&lt;br/&gt;
Davanti a noi si presentano al momento 3 visioni (e relative possibilità):&lt;br/&gt;
&lt;ul&gt;&lt;li&gt;in una il nostro desktop e il web si riempiono di file &lt;span style="font-weight:bold;"&gt;.exe&lt;/span&gt; e &lt;span style="font-weight:bold;"&gt;.dll&lt;/span&gt; e relativa sbrillucicosa tecnologia proprietaria (&lt;span style="font-weight:bold;"&gt;.NET&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;in un'altra il nostro desktop si riempie di file &lt;span style="font-weight:bold;"&gt;.swf&lt;/span&gt; (il web purtroppo ne è già pieno :-P) e relativa sbrilluccicosa tecnologia proprietaria (&lt;span style="font-weight:bold;"&gt;AIR&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Flex&lt;/span&gt; e compagnia bella)&lt;/li&gt;
&lt;li&gt;nell'ultima (che poi era la prima ;-)) il nostro totalmente non standardizzato desktop verrà in contatto con quelli che sono gli standard aperti della rete (&lt;a href="http://www.w3.org/"&gt;W3C&lt;/a&gt;, &lt;a href="http://www.ecmascript.org/"&gt;ECMAScript&lt;/a&gt; etc.)&lt;/li&gt;&lt;/ul&gt;
&lt;br/&gt;
Ora... a noi la scelta! :-D
&lt;h4&gt;Links&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://labs.mozilla.com/2007/10/prism/"&gt;http://labs.mozilla.com/2007/10/prism/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://standblog.org/blog/post/2007/10/29/The-not-so-hidden-goals-of-Prism-AIR-and-Silverlight"&gt;http://standblog.org/blog/post/2007/10/29/The-not-so-hidden-goals-of-Prism-AIR-and-Silverlight&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-1246505623004984146?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/GJDfQxyHlM4" height="1" width="1"/&gt;</content><link rel="related" href="http://standblog.org/blog/post/2007/10/29/The-not-so-hidden-goals-of-Prism-AIR-and-Silverlight" title="Prim, AIR e Silverlight: 3 visioni dell'integrazione del web con il desktop" /><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/1246505623004984146/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=1246505623004984146" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/1246505623004984146?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/1246505623004984146?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/GJDfQxyHlM4/prim-air-e-silverlight-3-visioni.html" title="Prim, AIR e Silverlight: 3 visioni dell'integrazione del web con il desktop" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/03/prim-air-e-silverlight-3-visioni.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEDRXg4cCp7ImA9WxZVFks.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-2242093256170658745</id><published>2008-03-26T14:00:00.004+01:00</published><updated>2008-03-28T01:37:54.638+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-28T01:37:54.638+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><title>GoogleGears: select * from javascript</title><content type="html">&lt;a href="http://code.google.com/p/google-gears/"&gt;Google Gears&lt;/a&gt; (come molti sapranno) è uno dei software rilasciati da Google, in particolare sotto &lt;a href="http://www.opensource.org/licenses/bsd-license.php"&gt;licenza BSD&lt;/a&gt;... ma che cos'è?
&lt;br/&gt;&lt;br/&gt;
La maggiore complessità dei compiti demandati al lato client delle applicazioni web con l'avvento di AJAX (sempre più simili a vere e proprie applicazioni desktop) oramai fa  sentire l'esigenza di uno &lt;span style="font-weight: bold;"&gt;storage per i dati degno di questo nome&lt;/span&gt;.
&lt;br/&gt;&lt;br/&gt;
E ovviamente per &lt;span style="font-weight: bold;"&gt;"storage degno di questo nome"&lt;/span&gt; intendiamo quello che inizia per &lt;span style="font-weight: bold;"&gt;S&lt;/span&gt; e finisce per &lt;span style="font-weight: bold;"&gt;QL&lt;/span&gt; :-)
&lt;br/&gt;&lt;br/&gt;
Google non è la sola ad aver portato SQL su un web client (o più semplicemente browser), anche Mozilla e Adobe hanno fatto altrettanto:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://developer.mozilla.org/en/docs/Storage"&gt;Mozilla SQL Storage Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.adobe.com/devnet/air/flex/quickstart/sync_simple_sql_database.html"&gt;Adobe SQL Storage Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
A voler essere proprio pignoli Firefox ha un SQL Engine accessibile al &lt;span style="font-style:italic;"&gt;"codice Javascript privilegiato"&lt;/span&gt; già dalla versione 2 ;-)
&lt;br/&gt;&lt;br/&gt;
Da notare comunque che in tutti e tre i casi l'engine non è altro che &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt;... ovviamente... perchè reinventare qualcosa che c'e' già ?!?!
&lt;br/&gt;&lt;br/&gt;
La cosa interessante di Google Gears è che viene distribuito come plugin per il vostro normale browser (Firefox e IE al momento) e porta quindi SQL sulle normali applicazioni Web (cioe' non codice privilegiato come nel caso di Mozilla e AIR), oltre ad altri interessanti possibilità:
caching offline delle risorse web e un working pool per le sincronizzazioni dati.

&lt;pre&gt;&lt;code&gt;
&amp;lt;script type="text/javascript" src="gears_init.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;
var db = google.gears.factory.create('beta.database');
db.open('database-test');
db.execute('create table if not exists "YourFirstTable" ("id" integer not null primary key, "info" text)');
var rs = db.execute('selet * from sqlite_master');

while (rs.isValidRow()) {
alert(rs.field(0) + ' - ' + rs.field(1));
rs.next();
}
rs.close();
&amp;lt;/script&gt;
&lt;/code&gt;&lt;/pre&gt;

And now &lt;span style="font-weight: bold;"&gt;"select * from javascript"&lt;/span&gt;
&lt;h3&gt; Link utili &lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://gears.google.com/"&gt;Google Gears Extension Download&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/gears/"&gt;Google Gears API Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/support/bin/topic.py?topic=11628"&gt;Google Gears FAQ&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/google-gears/"&gt;Google Gears Bugtracking &amp;amp; Sources&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-2242093256170658745?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/aoX23xqeB-E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/2242093256170658745/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=2242093256170658745" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/2242093256170658745?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/2242093256170658745?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/aoX23xqeB-E/googlegears-select-from-javascript.html" title="GoogleGears: select * from javascript" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/03/googlegears-select-from-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcAQ3o8fyp7ImA9WxZVE0w.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-3317479192973656900</id><published>2008-03-23T21:29:00.004+01:00</published><updated>2008-03-23T23:40:42.477+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-23T23:40:42.477+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><title>Javascript Array Iteration... la tentazione del for... in...</title><content type="html">la tentazione è forte...
&lt;pre&gt;&lt;code&gt;
my_array = [2,3,4];

for (var i in my_array) {
print(i);
}
&lt;/code&gt;&lt;/pre&gt;

purtroppo... non avevate considerato questo... ;-)
&lt;pre&gt;&lt;code&gt;
&gt;&gt;&gt; Array.prototype.remove = function (B) {
 var A = this.indexOf(B);
 if (A != -1) {
     this.splice(A, 1);
 }
 return this;
}
&gt;&gt;&gt; my_array.remove
function()
&gt;&gt;&gt; for (var i in my_array) { console.log(i) }
0
1
2
remove
&lt;/code&gt;&lt;/pre&gt;

dopo aver aggiunto un metodo al prototype di Array ce lo ritroveremo in tutte
le istanze di Array:
&lt;br/&gt;
      &lt;span style="font-weight: bold;"&gt;DOH!!!!&lt;/span&gt;
&lt;br/&gt;
ehhhh! non vi lamentate troppo pero'... il manuale parlava chiaro ;-)
&lt;pre&gt;&lt;quote&gt;
(From &lt;a ref="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Statements:for...in#Description"&gt;"Core JavaScript 1.5 Reference:Statements:for...in"&lt;/a&gt;)
Although it may be tempting to use this as a way to iterate over an &lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array" title="Core JavaScript 1.5 Reference:Global Objects:Array"&gt;Array&lt;/a&gt;,
this is a bad idea.
The &lt;code&gt;for...in&lt;/code&gt; statement iterates over user-defined properties in addition
to the array elements, so if you modify the array's non-integer or non-positive
properties (e.g. by adding a &lt;code&gt;"foo" &lt;/code&gt;property to it or even by adding a method or
property to &lt;code&gt;Array.prototype&lt;/code&gt;), the &lt;code&gt;for...in&lt;/code&gt; statement will return the name of
your user-defined properties in addition to the numeric indexes.
Also, because order of iteration is arbitrary, iterating over an array may not
visit elements in numeric order.
Thus it is better to use a traditional &lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Statements:for" title="Core JavaScript 1.5 Reference:Statements:for"&gt;for&lt;/a&gt; loop with a numeric index when
iterating over arrays.
&lt;/quote&gt;&lt;/pre&gt;

Quindi scartate &lt;span style="font-weight: bold;"&gt;for&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;for each&lt;/span&gt; come metodi di iterazioni sugli Array Javascript... toglietevelo dalla testa ;-) (sono più utili per fare reflection sugli oggetti... Array compresi).
&lt;br/&gt;
Il modo corretto di iterare un array sino a Javascript 1.6 era il ciclo for con indice numerico (alla plain C maniera) mentre ora è possibile usare il metodo forEach:
&lt;pre&gt;&lt;code&gt;
&gt;&gt;&gt; my_array.forEach(function(e) { console.log(e); });
2
3
4
&gt;&gt;&gt; Array.forEach(my_array,function(e) { console.log(e); });
2
3
4
&lt;/code&gt;&lt;/pre&gt;

Ma attenzione a quello che scrivete nella closure che passate a forEach:
&lt;pre&gt;&lt;code&gt;
&gt;&gt;&gt; obj = { itera: function(a) { console.log(this); a.forEach(function(e) { console.log(this); }) } }
Object
&gt;&gt;&gt; obj.itera([1,2,3]);
Object
Window
Window
Window
&lt;/code&gt;&lt;/pre&gt;
come è possibile verificare nel proprio Firebug &lt;span style="font-weight: bold;"&gt;this&lt;/span&gt; &lt;span style="font-style: italic;"&gt;fuori dalla closure punta all'Object obj&lt;/span&gt;, mentre il &lt;span style="font-weight: bold;"&gt;this&lt;/span&gt; &lt;span style="font-style: italic;"&gt;nella closure punta a Window (il contesto globale)&lt;/span&gt;.

Un'ulteriore conferma di questo comportamento possiamo ottenerla con uno &lt;a href="http://www.mozilla.org/js/spidermonkey/"&gt;spidermonkey&lt;/a&gt; in linea di comando:
&lt;pre&gt;&lt;code&gt;
rpl@ubik:~$ js
js&gt; obj = { itera: function(a) { print(this); a.forEach(function(e) { print(this); }) } }
[object Object]
js&gt; obj.itera([1,2,3])
[object Object]
[object global]
[object global]
[object global]
&lt;/code&gt;&lt;/pre&gt;

Questo comportamento è un po' spiazzante  (con un for o un for each non avremmo avuto un cambio di contesto del genere).

Personalmente risolvevo definendo come workaround una variabile &lt;span style="font-weight: bold;"&gt;self&lt;/span&gt; raggiungibile dalla closure per ricordare il contesto da cui ho avviato il &lt;span style="font-weight: bold;"&gt;forEach&lt;/span&gt;:
&lt;pre&gt;&lt;code&gt;
&gt;&gt;&gt; obj = {
 prova: function(a) {
   var self = this;
   console.log(this);
   a.forEach(function(e) { console.log(self); })
 }
}
Object
&gt;&gt;&gt; obj.prova([1,2,3])
Object
Object
Object
Object
&lt;/code&gt;&lt;/pre&gt;

Ma ancora una volta facendo riferimento al manuale (RTFM RTFM RTFM RTFM!!!):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:forEach#Parameters"&gt;Core_JavaScript_1.5_Reference:Objects:Array:forEach#Parameters&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;si può verificare che forEach accetta un secondo parametro allo scopo di selezionare il contesto (&lt;span style="font-weight: bold;"&gt;this&lt;/span&gt;) nel quale la closure sarà eseguita, che se non &lt;span style="font-weight: bold;"&gt;definito o nullo&lt;/span&gt; sarà associato al contesto globale (come verificato con gli snippet precedenti).

Detto in codice diventa:
&lt;pre&gt;&lt;code&gt;
&gt;&gt;&gt; obj = {
  itera: function(a) {
      console.log(this);
      a.forEach(function(e) { console.log(this); },&lt;span style="font-weight: bold;"&gt;this&lt;/span&gt;)
  }
}
Object
&gt;&gt;&gt; obj.itera([1,2,3])
Object
Object
Object
Object
&lt;/code&gt;&lt;/pre&gt;
Quindi &lt;span style="font-weight: bold;"&gt;la Soluzione&lt;/span&gt; (quella con la S maiuscola) è quella di passare &lt;span style="font-weight: bold;"&gt;this&lt;/span&gt; come secondo parametro della &lt;span style="font-weight: bold;"&gt;forEach&lt;/span&gt;.
&lt;br/&gt;
Quante cose si imparano leggendo un manuale, no? ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-3317479192973656900?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/ZCg6xQEMK_4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/3317479192973656900/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=3317479192973656900" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/3317479192973656900?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/3317479192973656900?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/ZCg6xQEMK_4/javascript-array-iteration-la.html" title="Javascript Array Iteration... la tentazione del for... in..." /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/03/javascript-array-iteration-la.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEGSH8-fSp7ImA9WxZVEU4.&quot;"><id>tag:blogger.com,1999:blog-2557583471910093929.post-674189153047808799</id><published>2008-03-21T21:42:00.005+01:00</published><updated>2008-03-21T22:07:09.155+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-21T22:07:09.155+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="links" /><title>Javascript Code Coverage</title><content type="html">Sentivo la mancanza di qualcosa... ma non riuscivo ad identificare cosa...
&lt;pre&gt;
     il &lt;a href="http://en.wikipedia.org/wiki/Code_coverage"&gt;code coverage&lt;/a&gt;
&lt;/pre&gt;
con ruby sfruttavo &lt;a href="http://eigenclass.org/hiki/rcov"&gt;rcov&lt;/a&gt; per capire di tutto il codice scritto quale è in uso e quale no, utile nel refactoring per fare fuori il codice inutile (o quanto meno evitare di riscriverlo) e nel testing per capire quanto del codice i test ricoprono già.

Da rapida google-ata sono emerse alcune soluzioni:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://siliconforks.com/jscoverage/"&gt;JSCoverage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.zachleat.com/web/2007/04/18/javascript-code-coverage-tool-for-firebug/"&gt;FireBugCodeCoverage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;non le ho ancora provare, ma sapere che esistono soluzioni del genere è già qualcosa ;-)

&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;P.S.&lt;/span&gt; il codice coverage non è mai sicuro al 100% (nel senso che non da una misura completamente affidabile su quanto è completo il testing), ma è utile per coadiuvare il lavoro &lt;span style="font-style: italic;"&gt;"umano" &lt;/span&gt;necessario.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2557583471910093929-674189153047808799?l=rplcodeline.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RplsLineOfCode/~4/NOIL_jXsaQ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://rplcodeline.blogspot.com/feeds/674189153047808799/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2557583471910093929&amp;postID=674189153047808799" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/674189153047808799?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2557583471910093929/posts/default/674189153047808799?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RplsLineOfCode/~3/NOIL_jXsaQ0/javascript-code-coverage.html" title="Javascript Code Coverage" /><author><name>Luca Greco a.k.a. "rpl"</name><uri>http://www.blogger.com/profile/00942511326421668479</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://bp0.blogger.com/_W42xjpEMvQ8/R91ZD2Kui-I/AAAAAAAAAAM/jF0A137h69Y/S220/blogavatar1.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://rplcodeline.blogspot.com/2008/03/javascript-code-coverage.html</feedburner:origLink></entry></feed>

