<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3758874196714338817</id><updated>2012-02-11T09:58:43.950+01:00</updated><category term='python gnome wireless sysadmin hack'/><category term='octave guida tutorial free'/><category term='pomodoro screen productivity'/><category term='del.icio.us'/><category term='microformats web open'/><category term='linux day'/><category term='ssh unix sysadmin'/><category term='web comic xkcd phd cad'/><category term='claws-mail'/><title type='text'>technicalia</title><subtitle type='html'>(mostly technical) bits of life</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.technicalia.it/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-9146910045217752234</id><published>2011-06-19T13:30:00.000+02:00</published><updated>2011-06-19T13:30:57.553+02:00</updated><title type='text'>Packing..</title><content type='html'>Today I started packing, because on the 26th of June (next week!) I'll leave for Dublin. I'll stay there 7 months, and I'll spend them by working at Google as a Software Engineering Intern.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Needless to say, I am truly excited about working at such a great place, and I had to pass 4 hard-ish phone interviews before being accepted as an intern (about which I can't write because I signed an NDA).&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I know it will be great, but today I have a bit of mixed feelings; I still have to find a room for the stay and I am a bit confused about leaving house and going to live alone for a few months. Luckily, a friend of mine will stay with me in the first 3 weeks, so I'll feel less alone.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That said, I'm going to do my best in those 7 months. It is a great opportunity that will shape my future if I play it well. And I'm going to have a lot of fun working at Google, there are some of the brightest minds working there and I'll have plenty of things to learn.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, I'll try to update this blog more often, to record the most important bits of this journey.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For now, I'm going back to packing.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-9146910045217752234?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/9146910045217752234/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=9146910045217752234' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/9146910045217752234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/9146910045217752234'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2011/06/packing.html' title='Packing..'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-7428695075183481168</id><published>2011-04-06T14:37:00.001+02:00</published><updated>2011-04-06T14:39:51.449+02:00</updated><title type='text'>The EduMIPS64 development blog</title><content type='html'>I just started a &lt;a href="http://edumips64.blogspot.com/"&gt;new blog&lt;/a&gt;&amp;nbsp;about the development of &lt;a href="http://www.edumips.org/"&gt;EduMIPS64&lt;/a&gt;, a free (as in free speech) CPU simulator that I've been developing together with lots of other fellow students (and friends) some years ago.&lt;br /&gt;&lt;br /&gt;I am writing a paper on EduMIPS64 and its usage in teaching Computer Architecture courses with other colleagues, and I feel that the current simulator version can benefit from some hours of my free time and get features that are already developed but not integrated and released.&lt;br /&gt;&lt;br /&gt;All the EduMIPS64 developers are welcome to join me in this effort and in writing posts for the development blog, where I aim to write about the design choices of the simulator and the future development directions, like a sort of moving documentation of the development process.&lt;br /&gt;&lt;br /&gt;Of course, if you are a developer and want to contribute to the simulator, contact me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-7428695075183481168?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/7428695075183481168/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=7428695075183481168' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/7428695075183481168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/7428695075183481168'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2011/04/edumips64-development-blog.html' title='The EduMIPS64 development blog'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-4640224800384958105</id><published>2011-03-20T12:26:00.000+01:00</published><updated>2011-03-20T12:26:57.916+01:00</updated><title type='text'>My configuration files for Vim and GNU Screen are available on GitHub</title><content type='html'>I decided to put my configuration files on GitHub, mainly because in this way it's easier for me to sync them among the different machines I use, but with the nice side-effect that everyone can now get, use and improve them.&lt;br /&gt;&lt;br /&gt;You will find &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;my GNU Screen configuration file, with a script that displays your current IP in the screen bar;&lt;/li&gt;&lt;li&gt;my Vim configuration file, with the plugins I use (for Python programming, LaTeX editing and GNU Gettext files editing)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;You can get everything on GitHub:&amp;nbsp;&lt;a href="https://github.com/lupino3/config"&gt;https://github.com/lupino3/config&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-4640224800384958105?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/4640224800384958105/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=4640224800384958105' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/4640224800384958105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/4640224800384958105'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2011/03/my-configuration-files-for-vim-and-gnu.html' title='My configuration files for Vim and GNU Screen are available on GitHub'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-3535210432842539292</id><published>2010-05-27T10:53:00.004+02:00</published><updated>2010-05-27T12:09:21.463+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pomodoro screen productivity'/><title type='text'>Pomodoro technique for GNU Screen</title><content type='html'>The Pomodoro Technique (&lt;a href="http://www.pomodorotechnique.com/"&gt;http://www.pomodorotechnique.com/&lt;/a&gt;) is "a way to get the most out of time management" (cit. website).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've been trying the Pomodoro Technique and various software timers, but none of them satisfied me, mainly because I work using a full-screen shell (Guake: &lt;a href="http://guake.org/"&gt;http://guake.org/&lt;/a&gt;) and I find distracting to switch to another window to check out the time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I wrote a small set of shell scripts that allow me to see the remaining pomodoro time in the lower-right corner of my window, thanks to GNU Screen, a software that I always use to manage virtual screens inside my full-screen terminal (&lt;a href="http://www.gnu.org/software/screen/"&gt;http://www.gnu.org/software/screen/&lt;/a&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Screen allows you to heavily customize the appereance of the virtual screen. I changed mine using bits of code taken around the Internet to display date, time and other info. I exploited this customizability in order to make screen display the residual time of the pomodoro.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are the scripts:&lt;/div&gt;&lt;br /&gt;&lt;b&gt;start-pomodoro.sh&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;SECONDS_IN_A_POMODORO=1500  # 25 * 60&lt;br /&gt;ACTUAL_SECONDS=$SECONDS_IN_A_POMODORO&lt;br /&gt;STEP=10&lt;br /&gt;OUTPUT=/tmp/pomodoro&lt;br /&gt;&lt;br /&gt;while [[ $ACTUAL_SECONDS &gt; 0 ]]; do&lt;br /&gt;   let "will_print = $ACTUAL_SECONDS % $STEP"&lt;br /&gt;   if [ $will_print == 0 ]; then&lt;br /&gt;       let "minutes = $ACTUAL_SECONDS / 60"&lt;br /&gt;       let "seconds = $ACTUAL_SECONDS % 60"&lt;br /&gt;       printf "%02d:%02d\n" $minutes $seconds &gt; $OUTPUT&lt;br /&gt;   fi&lt;br /&gt;   sleep 1&lt;br /&gt;   let "ACTUAL_SECONDS = $ACTUAL_SECONDS - 1";&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;stop-pomodoro.sh&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;killall start-pomodoro.sh&lt;br /&gt;echo stop &gt; /tmp/pomodoro&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;read-pomodoro.sh&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;cat /tmp/pomodoro&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Now we have to add the command in the GNU Screen configuration file, and to add the output of read-pomodoro.sh in the status line:&lt;/div&gt;&lt;br /&gt;&lt;b&gt;.screenrc&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;backtick 1 5 5 /path/to/read-pomodoro.sh&lt;br /&gt;hardstatus alwayslastline '[ %1` ]'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;This is a &lt;b&gt;minimal&lt;/b&gt; screen config file, that just displays the remaining time of the pomodoro. You must replace "/path/to/read-pomodoro.sh" with the real path of the script.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Now you can start your pomodoro with &lt;b&gt;start-pomodoro.sh&lt;/b&gt;, and enjoy your pomodoro ticking in GNU Screen. With &lt;b&gt;stop-pomodoro.sh&lt;/b&gt; you will stop it. In order to restart, run again &lt;b&gt;start-pomodoro.sh&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Note that start-pomodoro.sh is blocking, so you might need to start it in background (&lt;b&gt;start-pomodoro.sh &amp;&lt;/b&gt;).&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I hope that you find it useful as I did!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-3535210432842539292?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/3535210432842539292/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=3535210432842539292' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/3535210432842539292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/3535210432842539292'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2010/05/pomodoro-technique-for-gnu-screen.html' title='Pomodoro technique for GNU Screen'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-5570737543562584738</id><published>2008-03-20T18:37:00.003+01:00</published><updated>2008-03-20T19:25:12.549+01:00</updated><title type='text'>Vi mode per la shell bash</title><content type='html'>Essendo un utente molto assiduo di vim, mi è capitato più volte di utilizzare i suoi comandi in contesti nei quali quei comandi non sono validi, come la finestra di composizione di claws-mail, la finestra del browser, OpenOffice ecc...&lt;br /&gt;&lt;br /&gt;Quando mi sono trovato a creare sequenze di comandi molto complesse con la bash, spesso ho sentito l'esigenza di potere utilizzare i comandi a me familiari per potermi muovere all'interno della riga creata.&lt;br /&gt;&lt;br /&gt;Giusto oggi ho scoperto che è possibile, sfruttando la &lt;span style="font-style: italic;"&gt;modalità vi per bash&lt;/span&gt;. È una caratteristica integrata nella shell, e si attiva semplicemente digitando '''set -o vi'''.&lt;br /&gt;&lt;br /&gt;Con riferimento alle modalità di ViM, durante l'utilizzo normale della shell saremo proiettati in modalità inserimento, e la pressione del tasto ESC ci consentirà di passare alla modalità normale.&lt;br /&gt;&lt;br /&gt;Ovviamente avremo a disposizione solo un sottoinsieme dei comandi di vi, ma che comunque è più che sufficiente per i piccoli task di spostamento all'interno della riga che possono essere utili per velocizzare l'editing del comando.&lt;br /&gt;&lt;br /&gt;Se trovate interessante questa caratteristica, date un'occhiata al &lt;a href="http://www.catonmat.net/blog/bash-vi-editing-mode-cheat-sheet/"&gt;post che mi ha ispirato quest'articolo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;:wq&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-5570737543562584738?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/5570737543562584738/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=5570737543562584738' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/5570737543562584738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/5570737543562584738'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2008/03/vi-mode-per-la-shell-bash.html' title='Vi mode per la shell bash'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-8210494207188885723</id><published>2008-03-16T18:46:00.011+01:00</published><updated>2008-03-16T19:59:08.737+01:00</updated><title type='text'>Editing (comodo) di più file in ViM</title><content type='html'>Finalmente è arrivata la mia copia di &lt;a href="http://www.packtpub.com/Vim/book"&gt;Hacking ViM&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;La sola visione della copertina mi ha ispirato questo post, in cui voglio descrivere come utilizzo le funzionalità di ViM 7 per gestire l'editing contemporaneo di più file, ovvero split windows e tab.&lt;br /&gt;&lt;br /&gt;Come prima cosa, sarà introdotta la funzionalità di mapping di ViM.&lt;br /&gt;&lt;br /&gt;Successivamente sarà descritta prima la modalità &lt;span style="font-style: italic;"&gt;tradizionale&lt;/span&gt; di utilizzo di queste caratteristiche, e successivamente alcune agevolazioni e binding che sfrutto per accelerare di molto il processo di editing.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Mapping&lt;/h4&gt;&lt;br /&gt;Il mapping permette di definire (o ridefinire) il significato di una sequenza di tasti in ViM. Considerando che ViM è un editor modale, i mapping possono funzionare solo in determinate modalità. Il comando &lt;span style="font-weight: bold;"&gt;:map sequenza comandi&lt;/span&gt; funziona per le modalità normale e visuale (oltre che per la modalità &lt;span style="font-style: italic;"&gt;waiting for operator&lt;/span&gt;, che non ci interessa), mentre il comando &lt;span style="font-weight: bold;"&gt;:imap sequenza comandi&lt;/span&gt; funziona per la modalità inserimento.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Split windows&lt;/h4&gt;&lt;br /&gt;La prima, utile caratteristica di ViM che viene in aiuto sono le &lt;span style="font-style: italic;"&gt;split windows&lt;/span&gt;, ovvero la possibilità di dividere la finestra corrente in più finestre.&lt;br /&gt;&lt;br /&gt;La divisione può essere orizzontale o verticale. Il comando per suddividere orizzontalmente la finestra è &lt;span style="font-weight: bold;"&gt;:sp nomefile&lt;/span&gt;, da eseguire in modalità command. Per la suddivisione verticale, si può utilizzare &lt;span style="font-weight: bold;"&gt;:vsp nomefile&lt;/span&gt;. Per chiudere la finestra, basta il semplice &lt;span style="font-weight: bold;"&gt;:wq&lt;/span&gt;, mentre per passare da una finestra all'altra è necessaria la combinazione di tasti &lt;span style="font-weight: bold;"&gt;&amp;lt;CTRL-w&amp;gt;&amp;lt;CTRL-w&amp;gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Quest'ultimo comando permette di spostarsi ciclicamente tra le finestre. Per massimizzare l'ampiezza della finestra corrente, si utilizza &amp;lt;CTRL-w&amp;gt;_.&lt;br /&gt;&lt;br /&gt;Iniziando a provarle, vi accorgerete di quanto sia potente questa funzionalità!&lt;br /&gt;&lt;br /&gt;Un paio di osservazioni:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;È alquanto scomodo premere in continuazione &amp;lt;CTRL-w&amp;gt;&amp;lt;CTRL-w&amp;gt; per passare tra le finestre&lt;/li&gt;&lt;br /&gt;&lt;li&gt;La finestra non si massimizza totalmente, ma mostra comunque una riga per ciascun file aperto in contemporanea&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Per superare l'ultima limitazione, basta utilizzare il comando &lt;span style="font-weight: bold;"&gt;:set wmh=0&lt;/span&gt;, che imposta l'altezza minima di una finestra a 0, lasciando visibile solo una riga con il nome del file invece di due righe,&lt;br /&gt;&lt;br /&gt;Per accelerare i tempi di transizione tra le finestre, è sufficiente creare un mapping personalizzato. Con le due istruzioni &lt;span style="font-weight: bold;"&gt;:map &amp;lt;C-J&amp;gt; &amp;lt;C-W&amp;gt;j&amp;lt;C-W&amp;gt;_&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;:map &amp;lt;C-K&amp;gt; &amp;lt;C-W&amp;gt;k&amp;lt;C-W&amp;gt;_&lt;/span&gt; associeremo alla combinazione di tasti &amp;lt;CTRL-J&amp;gt; il movimento allo split inferiore (con conseguente massimizzazione dello stesso), ed alla combinazione &amp;lt;CTRL-K&amp;gt; il movimento allo split superiore (con massimizzazione).&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;I tab&lt;/h4&gt;&lt;br /&gt;I tab sono stati introdotti in ViM 7, e sono una funzionalità che ritroviamo in molte applicazioni (principalmente web browser, ma anche altri editor o IDE).&lt;br /&gt;&lt;br /&gt;Ecco i comandi di ViM per utilizzare i tab:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;:tabe nomefile&lt;/span&gt; Apre un nuovo tab.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;:tabn&lt;/span&gt; Vai al tab successivo.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;:tabp&lt;/span&gt; Vai al tab precedente.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Vi renderete conto che è alquanto scomodo passare da un tab all'altro. Per questo ho creato questi due mapping:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;:map &amp;lt;C-L&amp;gt; :tabn&amp;lt;CR&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;:map &amp;lt;C-H&amp;gt; :tabp&amp;lt;CR&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Questi mapping associano ai tasti indicati i movimenti verso il tab precedente e successivo. Ora mancano solo due passaggi per terminare la personalizzazione.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;La modalità inserimento&lt;/h4&gt;&lt;br /&gt;I mapping che abiamo indicato funzionano in modalità normale ed in modalità visuale. Sarebbe utile che funzionassero anche in modalità inserimento, possibilmente senza dover uscire dalla stessa.&lt;br /&gt;&lt;br /&gt;Per fare ciò, sfruttiamo il comando &lt;span style="font-weight: bold;"&gt;imap&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;:imap &amp;lt;C-J&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-J&amp;gt;a&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;:imap &amp;lt;C-K&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-K&amp;gt;a&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;:imap &amp;lt;C-L&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-L&amp;gt;a&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;:imap &amp;lt;C-H&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-H&amp;gt;a&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I comandi di mapping sono &lt;span style="font-style: italic;"&gt;ricorsivi&lt;/span&gt;, ovvero si può inserire un mapping dentro un altro mapping.&lt;br /&gt;&lt;br /&gt;Nei mapping della lista descritta sopra, la prima cosa che viene eseguita è la simulazione della pressione del tasto Escape, e ciò ci porta in modalità normale. Successivamente viene simulata la pressione di una combinazione di tasti, che richiama una delle combinazioni che sono state descritte precedentemente. Infine, viene simulata la pressione del tasto a, che ci riporta in modalità inserimento.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Mettiamo tutto nel file .vimrc&lt;/h4&gt;&lt;br /&gt;Ovviamente è desiderabile non dover digitare ogni volta tutti questi comandi, quindi inseriamo tutto nel nostro &lt;span style="font-weight: bold;"&gt;.vimrc&lt;/span&gt;, in modo che ogni volta che ViM venga avviato possiamo usufruire di questi mapping.&lt;br /&gt;&lt;br /&gt;Ecco la sequenza completa da inserire:&lt;pre&gt;&lt;br /&gt;map &amp;lt;C-J&amp;gt; &amp;lt;C-W&amp;gt;j&amp;lt;C-W&amp;gt;_&lt;br /&gt;map &amp;lt;C-K&amp;gt; &amp;lt;C-W&amp;gt;k&amp;lt;C-W&amp;gt;_&lt;br /&gt;map &amp;lt;C-L&amp;gt; :tabn&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;C-H&amp;gt; :tabp&amp;lt;CR&amp;gt;&lt;br /&gt;imap &amp;lt;C-J&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-J&amp;gt;a&lt;br /&gt;imap &amp;lt;C-K&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-K&amp;gt;a&lt;br /&gt;imap &amp;lt;C-L&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-L&amp;gt;a&lt;br /&gt;imap &amp;lt;C-H&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-H&amp;gt;a&lt;br /&gt;set wmh=0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Da notare l'assenza dei due punti all'inizio dei comandi.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Conclusioni&lt;/h4&gt;&lt;br /&gt;Da quando utilizzo questi mapping, sono molto più veloce nell'utilizzo di vim, e ciò mi permette di concentrarmi su ciò che sto facendo piuttosto che sull'utilizzo dell'editor stesso.&lt;br /&gt;&lt;br /&gt;Ciò dimostra come, sebbene la curva di apprendimento sia ripida, imparare ad utilizzare ViM può incrementare notevolmente la produttività.&lt;br /&gt;&lt;br /&gt;Ed ora.. godetevi questi mapping!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-8210494207188885723?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/8210494207188885723/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=8210494207188885723' title='4 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/8210494207188885723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/8210494207188885723'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2008/03/editing-comodo-di-pi-file-in-vim.html' title='Editing (comodo) di più file in ViM'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-6135933744164531284</id><published>2008-01-15T21:11:00.000+01:00</published><updated>2008-01-15T22:02:17.406+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux day'/><title type='text'>Linux Day: no alla strumentalizzazione!</title><content type='html'>Come membro del &lt;a href="http://catania.linux.it"&gt;GNU/Linux Users Group di Catania&lt;/a&gt;, sento sia giusto dare risalto alla lettera che è stata oggi inviata a buona parte dei LUG italiani ed al coordinamento nazionale di ILS da parte di molti dei LUG siciliani.&lt;br /&gt;&lt;br /&gt;La lettera esprime la voglia che noi abbiamo di discutere della trasformazione che, in alcuni contesti, il Linux Day ha subito, da giornata di promozione del software libero e di Linux a vetrina commerciale.&lt;br /&gt;&lt;br /&gt;Non mi dilungo oltre, preferisco che a parlare sia la lettera, che propongo con particolare trasporto perché sono stato &lt;i&gt;reclutato&lt;/i&gt; dal GLUG/CT proprio durante un Linux Day, e credo fortemente nel suo significato divulgativo.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Sono ormai sette anni che in Italia si organizza il Linux Day, la "giornata nazionale di Linux e del Software Libero". In questi anni, la manifestazione si è allargata in modo impressionante: da circa 40 eventi si è arrivati a superare ampiamente il centinaio. La manifestazione è cresciuta ed è cambiata, ILS ha proposto delle linee guida per i partecipanti, al fine di dare una connotazione unitaria ed omogenea ad una manifestazione che è il momento di massima visibilità per la comunità italiana del Software Libero.&lt;br /&gt;&lt;br /&gt;In tutti questi anni noi abbiamo partecipato a questa manifestazione con il massimo entusiasmo: sentivamo il bisogno di un momento comunitario per comunicare all'esterno che l'utopia del Software Libero stava finalmente diventando realtà quotidiana, che GNU/Linux era l'alternativa possibile, e che il LD era l'occasione che stavamo aspettando.&lt;br /&gt;&lt;br /&gt;A nostro modo di vedere, il Linux Day è una festa dedicata alla promozione del Software Libero e di GNU/Linux, prima di tutto come scelta etica e sociale e poi come risultato di un processo di&lt;br /&gt;sviluppo "a sorgente aperto" che si traduce automaticamente in software valido, robusto ed efficiente dal punto di vista tecnologico; il Linux Day è il giorno in cui proporre alle persone&lt;br /&gt;una scelta di libertà.&lt;br /&gt;&lt;br /&gt;Guardando però i programmi delle decine di LD che sono stati organizzati in Italia negli ultimi anni, spesso ci sembra che lo spirito e gli scopi di queste manifestazioni non siano in linea con&lt;br /&gt;questo nostro punto di vista. Secondo noi alcune manifestazioni locali degli ultimi quattro o cinque anni hanno, poco o nulla a che vedere con quello che dovrebbe essere l'obiettivo principale del LinuxDay, e cioé - secondo le linee guida - "promuovere l'uso e&lt;br /&gt;la conoscenza del sistema operativo GNU/Linux e del software libero".&lt;br /&gt;&lt;br /&gt;Alcuni Linux Day ci sembrano veri e propri "congressi" il cui intento principale è spesso quello di promuovere un prodotto o un'azienda. Che questa azienda abbia qualche connessione (più o meno&lt;br /&gt;lasca) con GNU/Linux e col software libero ci sembra secondario. Gli intenti di un'azienda hanno giocoforza poco o nulla a che vedere con la diffusione di ideali di libertà e con la condivisione del sapere, essendo più incentrati sulla promozione di determinati prodotti o sulla pubblicizzazione di determinate realtà commerciali.&lt;br /&gt;&lt;br /&gt;Riteniamo che le ragioni dello scollamento che avvertiamo tra chi, all'interno della comunità, crede come noi nel Linux Day come giornata per "promuovere l'uso e la conoscenza del sistema operativo GNU/Linux e del software libero", e chi invece lo interpreta come vetrina pubblicitaria per operatori del settore che hanno scelto di passare a GNU/Linux per motivazioni spesso molto diverse da quelle etiche e sociali, siano da ricercare prima di tutto nelle intenzioni&lt;br /&gt;e nelle motivazioni dei LUG.&lt;br /&gt;&lt;br /&gt;Probabilmente alcuni LUG italiani ritengono che promuovere GNU/Linux in qualsiasi forma e con qualsiasi mezzo, prescindendo anche dalle motivazioni etiche che spingono altri LUG e altre associazioni, sia in ogni caso giusto e necessario al fine di allargare il bacino degli utenti Linux. Questa posizione è, per quanto ci riguarda, rispettabile, ma crediamo fermamente che tale tipo di promozione prettamente commerciale o utilitaristica di GNU/Linux sia assolutamente in contrasto con le motivazioni che quotidianamente ci spingono ad impegnarci nella diffusione della Cultura del Software Libero e dell'uso dei sistemi operativi liberi, GNU/Linux in testa. E che sia in contrasto anche con le stesse motivazioni che ci spingono ad investire tempo e fatica nell'organizzazione del Linux Day.&lt;br /&gt;&lt;br /&gt;Pensiamo che la promozione commerciale e per le aziende possa essere fatta 364 giorni all'anno, e soprattutto che il LinuxDay non sia il luogo in cui farla. In quest'ottica, le attuali Linee Guida proposte da ILS lasciano forse eccessivo spazio anche a manifestazioni che in realtà non hanno come scopo principale quello di divulgare cultura e di spronare alla consapevolezza, inserendo pertanto nel "Programma del Linux Day" anche eventi locali in sostanziale antitesi con le intenzioni iniziali dei promotori della manifestazione (vedi l'annoso problema, finora non risolto e forse nemmeno affrontato, delle sponsorizzazioni e delle autopromozioni&lt;br /&gt;commerciali....).&lt;br /&gt;&lt;br /&gt;Vorremmo pertanto aprire un dibattito all'interno della comunità per capire, finalmente in modo chiaro, quanti sono quelli che credono, come noi, che il Linux Day debba essere una manifestazione libera e commercialmente disinteressata, volta principalmente alla diffusione&lt;br /&gt;di Cultura e alla presentazione di un modello di condivisione di Conoscenze.&lt;br /&gt;&lt;br /&gt;Crediamo che porre questa domanda sia importante per la comunità e per le nostre associazioni, dal momento che non ci troviamo più a nostro agio ad aderire ad una manifestazione le cui espressioni locali sono spesso, in sostanza, molto diverse dalla "facciata" che presentano e dai principi ispiratori delle linee guida che, sempre formalmente, rispettano.&lt;br /&gt;&lt;br /&gt;Vorremmo che questo chiarimento avvenisse in maniera pacata e serena, e che fosse un vero e sostanziale momento di confronto all'interno della comunità, che ci permetta di capire se la pensiamo allo stesso modo sulle questioni fondamentali, se gli obiettivi che ci poniamo sono  simili e se abbiamo la forza di agire e di "camminare" insieme per raggiungerli, rendendo tra l'altro più esplicite le linee guida del Linux Day nell'indirizzare la natura&lt;br /&gt;dell'evento.&lt;br /&gt;&lt;br /&gt;Pensiamo che uno dei luoghi piu' adatti per affrontare questo dibattito possa essere la lista lug@lists.linux.it, utilizzata negli ultimi anni come spazio per il coordinamento delle attività dei LUG italiani.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;Clug - Caltanissetta Linux user group&lt;br /&gt;Freaknet MediaLab - HackLab (Catania)&lt;br /&gt;GLUGCT - GNU Linux user group Catania&lt;br /&gt;LUGSR - Siracusa Linux user group&lt;br /&gt;MeLUG - Messina Linux user group&lt;br /&gt;PALUG - Palermo Linux user group&lt;br /&gt;Poetry - HackLab (Palazzolo Acreide)&lt;br /&gt;Solira - Associazione Software Libero di Ragusa&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Per chiudere, sottolineo come l'aspetto &lt;b&gt;commerciale&lt;/b&gt; del software libero sia cosa buona e giusta, almeno a mio avviso.&lt;br /&gt;&lt;br /&gt;Ma non è durante il Linux Day che vanno portate avanti iniziative promozionali o commerciali, sebbene relative al software libero. &lt;br /&gt;&lt;br /&gt;Attendiamo gli sviluppi della discussione.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-6135933744164531284?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/6135933744164531284/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=6135933744164531284' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/6135933744164531284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/6135933744164531284'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2008/01/linux-day-no-alla-strumentalizzazione.html' title='Linux Day: no alla strumentalizzazione!'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-2949985167416429645</id><published>2008-01-03T00:23:00.000+01:00</published><updated>2008-01-03T00:30:38.299+01:00</updated><title type='text'>Implementazione di una macchina a stati sequenziale in JavaScript</title><content type='html'>Come &lt;i&gt;macchina a stati sequenziale&lt;/i&gt; potremmo definire una normale &lt;a href="http://en.wikipedia.org/wiki/Finite_state_machine"&gt;macchina a stati (che supporremo finiti)&lt;/a&gt; in cui le uniche transizioni permesse siano quelle tra stati adiacenti. Ad esempio, dallo stato 3 è possibile passare solo allo stato 2 od allo stato 4.&lt;br /&gt;&lt;br /&gt;Nelle interfacce uomo-macchina è possibile associare questo tipo di macchine a stati al concetto di &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Wizard_%28software%29"&gt;wizard&lt;/a&gt;&lt;/i&gt;, ovvero un tipo di interfaccia che guidi l'utente passo per passo nello svolgimento di un compito.&lt;br /&gt;&lt;br /&gt;I wizard sono strumenti abbastanza potenti, perché facilitano di molto l'interazione con gli utenti, e quindi se ne fa largo uso anche durante la realizzazione di interfacce web.&lt;br /&gt;&lt;br /&gt;Durante la mia prima avventura con JavaScript, mi sono trovato a realizzare qualcosa che si avvicina di molto ad un wizard, ovvero un'interazione sequenziale con l'utente che abbia anche la caratteristica della &lt;i&gt;reversibilità&lt;/i&gt;, ovvero fornisca all'utente la possibilità di tornare sui propri passi.&lt;br /&gt;&lt;br /&gt;Per fare ciò, ho sfruttato l'estrema dinamicità del linguaggio JavaScript, ed ho semplicemente creato una lista di oggetti simile alla seguente:&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;MYAPP.phases = [&lt;br /&gt;    {&lt;br /&gt;        'title' : 'breve descrizione fase 1',&lt;br /&gt;        'desc'  : 'lunga descrizione fase 1',&lt;br /&gt;        'handler' : function() {&lt;br /&gt;            // Lista di istruzioni da eseguire&lt;br /&gt;            // non appena si passa alla fase 1&lt;br /&gt;        },&lt;br /&gt;        'event1_handler' : function() {&lt;br /&gt;            // Lista di istruzioni da eseguire&lt;br /&gt;            // se si verifica l'evento 1 nella&lt;br /&gt;            // fase 1&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    {&lt;br /&gt;        'title' : 'breve descrizione fase 2',&lt;br /&gt;        'desc'  : 'lunga descrizione fase 2',&lt;br /&gt;        'handler' : function() {&lt;br /&gt;            // Lista di istruzioni da eseguire&lt;br /&gt;            // non appena si passa alla fase 2&lt;br /&gt;        },&lt;br /&gt;        'event1_handler' : function() {&lt;br /&gt;            // Lista di istruzioni da eseguire&lt;br /&gt;            // se si verifica l'evento 1 nella&lt;br /&gt;            // fase 2&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    [altri N - 2 elementi di questo tipo...]&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ciascuno di questi oggetti implementa un'interfaccia comune, che mi permetterà di scrivere codice indipendente dallo stato in cui mi trovo, secondo la ben nota tecnica del &lt;a href="http://en.wikipedia.org/wiki/State_pattern"&gt;pattern State&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;La velocità del linguaggio JavaScript permette di implementare questo pattern senza la necessità di creare una gerarchia di classi, in maniera molto veloce ed intuitiva. Creo direttamente gli oggetti, non ho bisogno di creare una classe! &lt;br /&gt;Il codice risulta compatto e di facile comprensione per chi abbia un minimo di confidenza con il linguaggio.&lt;br /&gt;&lt;br /&gt;Per terminare l'implementazione, è necessario mantenere traccia dello stato corrente, creare una funzione di variazione di stato e creare due funzioni che si occupino di incrementare o decrementare lo stato attuale:&lt;pre&gt;&lt;br /&gt;MYAPP.current_phase = 0;&lt;br /&gt;&lt;br /&gt;MYAPP.setPhase = function(num) {&lt;br /&gt;    var cur = MYAPP.phases[num];&lt;br /&gt;    $("#phase-title").empty();&lt;br /&gt;    $("#phase-title").append("Fase " + (num + 1) + ": " + cur.title).wrap("&lt;b&gt;&lt;/b&gt;");&lt;br /&gt;&lt;br /&gt;    $("#phase-desc").empty();&lt;br /&gt;    $("#phase-desc").append(cur.desc);&lt;br /&gt;&lt;br /&gt;    cur.handler();&lt;br /&gt;    MYAPP.current_phase = num;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MYAPP.next_phase = function() {&lt;br /&gt;    if(MYAPP.current_phase &lt; MYAPP.phases.length - 1)&lt;br /&gt;        MYAPP.setPhase(++MYAPP.current_phase);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MYAPP.prev_phase = function() {&lt;br /&gt;    if(MYAPP.current_phase &gt; 0)&lt;br /&gt;        MYAPP.setPhase(--MYAPP.current_phase);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Nella funzione di variazione di stato ho lasciato parte del codice che ho utilizzato nella mia applicazione, che utilizza l'ottimo &lt;a href="http://jquery.com"&gt;framework jQuery&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Quel codice cambia il contenuto dei div #phase-title e #phase-desc a seconda dello stato attuale, richiama l'handler dello stato attuale e modifica il valore della variabile che mantiene traccia dello stato.&lt;br /&gt;&lt;br /&gt;Per far sì che il comportamento dell'applicazione dipenda dallo stato è necessario utilizzare la &lt;a href="http://en.wikipedia.org/wiki/Double_dispatch"&gt;tecnica del doppio inoltro&lt;/a&gt;, ad esempio in questo modo:&lt;pre&gt;&lt;br /&gt;&amp;lt;a onclick = 'MYAPP.phases[MYAPP.current_phase].event1_handler();'&amp;gt;Testo&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Così l'azione che si verifica al click dipenderà dallo stato corrente, e non sarà necessario scrivere codice pieno di istruzioni switch che vanno modificate di volta in volta.&lt;br /&gt;&lt;br /&gt;Considerando che all'utente è consentito scorrazzare abbastanza liberamente tra gli stati, sarà necessario implementare meccanismi robusti di gestione dell'errore ed adeguate politiche di reversibilità. Ricordate che si dovrebbe consentire all'utente di effettuare solo azioni lecite, in modo da incoraggiarlo ad utilizzare la vostra applicazione.&lt;br /&gt;&lt;br /&gt;In conclusione, la dinamicità di JavaScript consente di implementare in maniera agile buona parte delle tecniche tradizionali di programmazione e di interazione, basta conoscere un po' il linguaggio ed utilizzare bene il paradigma che offre.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-2949985167416429645?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/2949985167416429645/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=2949985167416429645' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/2949985167416429645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/2949985167416429645'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2008/01/implementazione-di-una-macchina-stati.html' title='Implementazione di una macchina a stati sequenziale in JavaScript'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-4106231111157436779</id><published>2007-12-30T15:23:00.000+01:00</published><updated>2007-12-30T15:30:39.593+01:00</updated><title type='text'>L'informatica è una guerra...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_gvvvvhfWCnE/R3eqbLPi81I/AAAAAAAAACI/i2x1BXQP6ds/s1600-h/guerra.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_gvvvvhfWCnE/R3eqbLPi81I/AAAAAAAAACI/i2x1BXQP6ds/s320/guerra.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5149772082772636498" /&gt;&lt;/a&gt;&lt;br /&gt;.. e questo lo sa chiunque, per motivi vari ed eventuali, si trovi a combattere con una certa frequenza in campo informatico.&lt;br /&gt;&lt;br /&gt;In trincea, però, a volte noi soldati abbiamo la fortuna di sentire voci illuminate che indicano chiaramente quale sia la direzione da seguire, quale sia la prossima mossa da effettuare, come limitare i danni: è anche grazie a queste voci che, ogni giorno, si riesce a sopravvivere e ad andare avanti. &lt;br /&gt;&lt;br /&gt;La lingua dell'informatica è notoriamente l'inglese, ma da un paio di settimane è possibile udire - chiara e forte - una di queste voci che impiega la lingua del nostro Bel Paese.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stacktrace.it"&gt;Stacktrace.it&lt;/a&gt; si auto-definisce "aperiodico di resistenza informatica", ed è un sito che ha come mission la creazione di contenuti originali di elevatissima qualità nell'ambito dell'informatica.&lt;br /&gt;&lt;br /&gt;In questi pochi giorni di attività è già emersa la qualità del lavoro del team di Stacktrace.it, composto da professionisti italiani dell'informatica, e gli articoli pubblicati sono interessanti ed originali.&lt;br /&gt;&lt;br /&gt;L'idea è ottima, i risultati iniziano già a farsi vedere. Non resta che aggiungere il feed al nostro feed-reader (RSSyl, nel mio caso) e sperare che i ragazzi di Stacktrace.it continuino così!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_gvvvvhfWCnE/R3eqj7Pi82I/AAAAAAAAACQ/zCsfgk2KcFI/s1600-h/st.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_gvvvvhfWCnE/R3eqj7Pi82I/AAAAAAAAACQ/zCsfgk2KcFI/s320/st.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5149772233096491874" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-4106231111157436779?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/4106231111157436779/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=4106231111157436779' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/4106231111157436779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/4106231111157436779'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/12/linformatica-una-guerra.html' title='L&apos;informatica è una guerra...'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_gvvvvhfWCnE/R3eqbLPi81I/AAAAAAAAACI/i2x1BXQP6ds/s72-c/guerra.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-928944143896384803</id><published>2007-12-26T23:40:00.000+01:00</published><updated>2007-12-27T11:08:02.957+01:00</updated><title type='text'>Un'occhiata a JavaScript</title><content type='html'>Personalmente ho sempre considerato JavaScript un linguaggio di seconda categoria (anche di terza, volendo), forse perché non gode di ottima reputazione o forse perché uno dei principali ambiti di applicazione è la creazione di contenuto web dinamico lato client.&lt;br /&gt;&lt;br /&gt;Dovendo però utilizzarlo per motivi accademici, oltre che per motivi di lavoro, mi sono deciso a dare uno sguardo un po' più approfondito a questo linguaggio, visto che sono convinto che sia necessario essere in grado di comprendere il funzionamento di un linguaggio per poterlo utilizzare, e che ogni linguaggio di programmazione abbia delle caratteristiche idiomatiche che è necessario conoscere.&lt;br /&gt;&lt;br /&gt;Ho trovato davvero ottima l'introduzione al linguaggio JavaScript a cura di Douglas Crockford disponibile su Yahoo! Video.&lt;br /&gt;Crockford è Chief JavaScript Architect in Yahoo!, e questo fornisce un'idea approssimativa della qualità del materiale proposto. Il video è diviso in quattro parti e la durata complessiva è inferiore alle due ore:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://video.yahoo.com/video/play?vid=111593"&gt;Parte 1&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://video.yahoo.com/video/play?vid=111594"&gt;Parte 2&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://video.yahoo.com/video/play?vid=111595"&gt;Parte 3&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://video.yahoo.com/video/play?vid=111596"&gt;Parte 4&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;L'esposizione è chiara, il discorso scorrevole. È adatto ad un pubblico con nozioni generali di programmazione, che abbia intenzione di capire le differenze tra JavaScript e gli altri linguaggi di programmazione.&lt;br /&gt;&lt;br /&gt;Consigliatissimo a tutti coloro debbano scrivere anche solo qualche riga di codice in JavaScript.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-928944143896384803?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/928944143896384803/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=928944143896384803' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/928944143896384803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/928944143896384803'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/12/unocchiata-javascript.html' title='Un&apos;occhiata a JavaScript'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-2117146326068927806</id><published>2007-12-09T11:28:00.000+01:00</published><updated>2007-12-09T12:00:10.587+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python gnome wireless sysadmin hack'/><title type='text'>Una piccola applet personalizzata per il pannello di GNOME</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_gvvvvhfWCnE/R1vES1c8b8I/AAAAAAAAACA/wBOj2WXAFaQ/s1600-h/pygnome.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_gvvvvhfWCnE/R1vES1c8b8I/AAAAAAAAACA/wBOj2WXAFaQ/s320/pygnome.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5141919227438723010" /&gt;&lt;/a&gt;&lt;br /&gt;Vi siete mai chiesti quale sia la forza che spinge gli sviluppatori di software libero a continuare a scrivere utili programmi, spesso di elevata qualità?&lt;br /&gt;Ci sono sicuramente tante concause, ma penso che la soddisfazione di un'esigenza personale (gli anglofoni dicono "scratching his own itch") sia uno dei fattori maggiormente rilevanti.&lt;br /&gt;&lt;br /&gt;Bene, oggi mi sono tolto una piccola soddisfazione, che voglio condividere con voi: la realizzazione di una piccola e rozza applet per il pannello di GNOME che mostri la qualità del segnale della mia scheda wireless.&lt;br /&gt;&lt;br /&gt;So bene che ci sono già delle applicazioni che lo fanno, ma nessuna era semplice come volevo io, nessuna mi dava &lt;span style="font-weight:bold;"&gt;solo&lt;/span&gt; quell'informazione, nessuna mi appagava.&lt;br /&gt;&lt;br /&gt;E poi, il bello è proprio questo: ce ne saranno migliaia, ma nessuna è &lt;span style="font-weight:bold;"&gt;mia&lt;/span&gt;! :)&lt;br /&gt;&lt;br /&gt;Qui riporto alcuni dei passaggi fondamentali da me seguiti nella realizzazione dell'applet ed il codice sorgente completo della stessa, rilasciata sotto GNU GPL 3.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 140%"&gt;Prelievo dell'informazione sul segnale&lt;/span&gt;&lt;br /&gt;Primo problema: come trovo l'informazione sulla potenza del segnale?&lt;br /&gt;Penso che tutti conoscano l'utility &lt;span style="font-style:italic;"&gt;iwconfig&lt;/span&gt;, che, tra le altre, fornisce anche l'informazione che cerco, sotto la voce "Link Quality".&lt;br /&gt;&lt;br /&gt;Python, tramite il modulo &lt;span style="font-weight:bold;"&gt;commands&lt;/span&gt;, fornisce la possibilità di ottenere l'output di un comando. Vediamo come sfruttarlo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import commands&lt;br /&gt;&lt;br /&gt;interface = "eth2"&lt;br /&gt;&lt;br /&gt;def get_signal_strength():&lt;br /&gt;    str = commands.getoutput("/sbin/iwconfig " + interface).split("\n")&lt;br /&gt;    for row in str:&lt;br /&gt;        pos = row.find("Quality=")&lt;br /&gt;        if pos &gt; 0:&lt;br /&gt;            sig = row.split()[1].split("=")[1]&lt;br /&gt;            return sig&lt;br /&gt;&lt;br /&gt;    return ""&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Questa funzione elabora l'output di iwconfig, cercando la riga contenente l'informazione ed estrapolandola. L'output di questa funzione sarà una stringa tipo "49/100", che è proprio quello che andremo a posizionare, rozzamente, nel pannello di GNOME.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 140%"&gt;Realizzazione di un'applet per il pannello&lt;/span&gt;&lt;br /&gt;Perfetto, ora che abbiamo l'informazione che ci serve, dobbiamo &lt;span style="font-style:italic;"&gt;solo&lt;/span&gt; mostrarla nel pannello ed aggiornare ad intervalli regolari quest'informazione. Come fare?&lt;br /&gt;&lt;br /&gt;Fortunatamente esiste un modulo di python, chiamato &lt;span style="font-weight:bold;"&gt;gnomeapplet&lt;/span&gt;, che serve proprio a realizzare applet per il pannello di GNOME. Sotto debian, il pacchetto si chiama &lt;span style="font-weight:bold;"&gt;python-gnome2-desktop&lt;/span&gt;, ed installandolo vi tirerete dietro anche i binding Python per le GTK+ e per GNOME, che sono ovviamente necessari.&lt;br /&gt;&lt;br /&gt;A questo punto, vista la solita mancanza di documentazione, non ho fatto altro che andare a spulciare gli esempi di gnomeapplet, ed ho verificato che è necessario, oltre alla scrittura del codice python, realizzare un file per Bonobo (uno dei componenti fondamentali di GNOME) in modo da fargli notare che esiste anche la nostra applet, e visualizzarla così nella finestra "Aggiungi al pannello" che mostra tutte le applet che si possono inserire.&lt;br /&gt;&lt;br /&gt;Bando alle ciance, ecco il codice per l'applet vera e propria, wimonitor.py:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import pygtk&lt;br /&gt;pygtk.require('2.0')&lt;br /&gt;        &lt;br /&gt;import gtk&lt;br /&gt;import gnomeapplet&lt;br /&gt;import gobject&lt;br /&gt;import commands&lt;br /&gt;&lt;br /&gt;interface = "eth2"&lt;br /&gt;interval = 1000 &lt;br /&gt;                &lt;br /&gt;def get_signal_strength():&lt;br /&gt;    str = commands.getoutput("/sbin/iwconfig " + interface).split("\n")&lt;br /&gt;    for row in str:&lt;br /&gt;        pos = row.find("Quality=")&lt;br /&gt;        if pos &gt; 0:&lt;br /&gt;            sig = row.split()[1].split("=")[1]&lt;br /&gt;            return sig&lt;br /&gt;&lt;br /&gt;    return ""&lt;br /&gt;&lt;br /&gt;def update_signal(label):&lt;br /&gt;    label.set_text(get_signal_strength())&lt;br /&gt;    return True&lt;br /&gt;&lt;br /&gt;def applet_factory(applet, iid):&lt;br /&gt;    label = gtk.Label(get_signal_strength())&lt;br /&gt;    applet.add(label)&lt;br /&gt;    applet.show_all()&lt;br /&gt;    gobject.timeout_add(interval, update_signal, label)&lt;br /&gt;    return True&lt;br /&gt;&lt;br /&gt;gnomeapplet.bonobo_factory("OAFIID:GNOME_WiMonitor_Factory", gnomeapplet.Applet.__gtype__, "hello", "0", applet_factory)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ed ecco il codice del file GNOME_WiMonitor.server:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;oaf_info&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;oaf_server iid="OAFIID:GNOME_WiMonitor_Factory" type="exe" location="/home/andrea/wimonitor/wimonitor.py"&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;oaf_attribute name="repo_ids" type="stringv"&amp;gt;&lt;br /&gt;                &amp;lt;item value="IDL:Bonobo/GenericFactory:1.0"/&amp;gt;&lt;br /&gt;                &amp;lt;item value="IDL:Bonobo/Unknown:1.0"/&amp;gt;&lt;br /&gt;        &amp;lt;/oaf_attribute&amp;gt;&lt;br /&gt;        &amp;lt;oaf_attribute name="name" type="string" value="WiMonitor"/&amp;gt;&lt;br /&gt;        &amp;lt;oaf_attribute name="description" type="string" value="Semplice monitor del segnale wireless"/&amp;gt;&lt;br /&gt;&amp;lt;/oaf_server&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;oaf_server iid="OAFIID:GNOME_WiMonitor" type="factory" location="OAFIID:GNOME_WiMonitor_Factory"&amp;gt;&lt;br /&gt;        &amp;lt;oaf_attribute name="repo_ids" type="stringv"&amp;gt;&lt;br /&gt;                &amp;lt;item value="IDL:GNOME/Vertigo/PanelAppletShell:1.0"/&amp;gt;&lt;br /&gt;                &amp;lt;item value="IDL:Bonobo/Control:1.0"/&amp;gt;&lt;br /&gt;                &amp;lt;item value="IDL:Bonobo/Unknown:1.0"/&amp;gt;&lt;br /&gt;        &amp;lt;/oaf_attribute&amp;gt;&lt;br /&gt;        &amp;lt;oaf_attribute name="name" type="string" value="WiMonitor"/&amp;gt;&lt;br /&gt;        &amp;lt;oaf_attribute name="description" type="string" value="Semplice monitor del segnale wireless"/&amp;gt;&lt;br /&gt;        &amp;lt;oaf_attribute name="panel:category" type="string" value="Utility"/&amp;gt;&lt;br /&gt;        &amp;lt;oaf_attribute name="panel:icon" type="string" value="bug-buddy.png"/&amp;gt;&lt;br /&gt;&amp;lt;/oaf_server&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/oaf_info&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;È necessario modificare l'attributo &lt;span style="font-weight:bold;"&gt;location&lt;/span&gt; del primo tag &lt;span style="font-weight:bold;"&gt;oaf_server&lt;/span&gt; in modo da renderlo coerente con la posizione reale del file wimonitor.py.&lt;br /&gt;&lt;br /&gt;Potete posizionare il file wimonitor.py dove preferite, mentre il file GNOME_WiMonitor.server va posizionato in /usr/lib/bonobo/servers.&lt;br /&gt;&lt;br /&gt;Configurate l'applet modificando opportunamente i valori delle variabili &lt;span style="font-weight:bold;"&gt;interface&lt;/span&gt; e &lt;span style="font-weight:bold;"&gt;interval&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Se tutto è andato bene, troverete WiMonitor tra le applet da aggiungere al pannello, ed aggiungendola potrete avere sott'occhio l'andamento del segnale della vostra scheda wireless.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 140%"&gt;Conclusioni&lt;/span&gt;&lt;br /&gt;Effettivamente l'applet è un po' bruttina, non è personalizzabile.. È decisamente migliorabile!&lt;br /&gt;Ma onestamente a me non interessava creare un &lt;span style="font-weight:bold;"&gt;sexy framework di monitoraggio delle prestazioni di rete&lt;/span&gt;, volevo soltanto avere sott'occhio &lt;span style="font-weight:bold;"&gt;velocemente&lt;/span&gt; quell'informazione e dare un'occhiata alla programmazione GNOME in Python.&lt;br /&gt;&lt;br /&gt;Spero che questo post sia utile come introduzione a tutti coloro che abbiano voglia anche loro di togliersi uno sfizio del genere.&lt;br /&gt;&lt;br /&gt;E ricordate... &lt;span style="font-weight:bold;"&gt;Python RULEZ!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-2117146326068927806?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/2117146326068927806/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=2117146326068927806' title='8 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/2117146326068927806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/2117146326068927806'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/12/una-piccola-applet-personalizzata-per.html' title='Una piccola applet personalizzata per il pannello di GNOME'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_gvvvvhfWCnE/R1vES1c8b8I/AAAAAAAAACA/wBOj2WXAFaQ/s72-c/pygnome.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-3755209709758313504</id><published>2007-12-08T23:04:00.000+01:00</published><updated>2007-12-08T23:26:01.596+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssh unix sysadmin'/><title type='text'>Piccole comodità per SSH</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_gvvvvhfWCnE/R1sVM1c8b7I/AAAAAAAAAB4/eCBkYHGBkK4/s1600-h/26openssh.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_gvvvvhfWCnE/R1sVM1c8b7I/AAAAAAAAAB4/eCBkYHGBkK4/s320/26openssh.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5141726709824647090" /&gt;&lt;/a&gt;&lt;br /&gt;Chiunque amministri o utilizzi da remoto più di una macchina sa bene quanto sia noioso dovere ricordare i dati di queste macchine. &lt;br /&gt;Se si utilizza SSH, è necessario ricordare a memoria almeno indirizzo IP, nome utente e password; se si è sufficientemente paranoici, bisogna ricordare anche la porta su cui SSH ascolta ;)&lt;br /&gt;Bene, è possibile configurare &lt;a href="http://www.openssh.com/"&gt;OpenSSH&lt;/a&gt;, implementazione di riferimento di SSH presente nella maggioranza delle distribuzioni Linux, in modo da associare un comodo alias a buona parte di questi dati.&lt;br /&gt;Supponiamo che io mi debba connettere alla macchina che risponde all'IP 192.168.1.1, nella quale il server è configurato per ascoltare alla porta 9999, e che il nome utente che voglio utilizzare sia "nomeutentemoltosicuro". Per fare ciò dovrò aggiungere al file /home/mioutente/.ssh/config le seguenti righe:&lt;pre&gt;&lt;br /&gt;Host mioalias&lt;br /&gt;Hostname 192.168.1.1&lt;br /&gt;Port 9999&lt;br /&gt;User nomeutentemoltosicuro&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In questo modo, digitando "ssh mioalias", ssh utilizzerà per la connessione le impostazioni che abbiamo specificato, chiedendoci solo la password per l'utente "nomemoltosicuro".&lt;br /&gt;&lt;br /&gt;Posso inserire diverse impostazioni, ed associare quindi semplici nomi ad insieme di settaggi talvolta difficili da ricordare.&lt;br /&gt;&lt;br /&gt;Se vi infastidisce l'inserimento della password, sappiate che esiste un modo per eliminarlo, ma  è un procedimento &lt;span style="font-weight:bold;"&gt;poco sicuro&lt;/span&gt; e &lt;span style="font-weight:bold;"&gt;sconsigliato&lt;/span&gt;, utilizzabile senza problemi di sicurezza solo in pochissimi casi. Ecco come fare:&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Generare una coppia di chiavi RSA con il comando "ssh-keygen -t rsa"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Quando vi viene chiesta la password, premere INVIO (creando quindi una chiave senza password)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Copiare il file /home/utente/.ssh/id_rsa.pub nella home directory dell'utente remoto del sistema in cui si vuole abilitare il login senza password&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Entrare nel nuovo sistema con l'utente che si vuole utilizzare per il login senza password e   digitare il seguente comando: "cat ~/id_rsa.pub &gt;&gt; ~/.ssh/authorized_keys"&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;A questo punto, dovreste essere già in grado di effettuare il login senza password. Notate che siete in grado di farlo perché avete aggiunto la vostra chiave pubblica all'insieme delle chiavi che OpenSSH ritiene sicure per il login, e perché siete in possesso della vostra chiave privata, che è stata creata dal comando "ssh-keygen" ed è stata posizionata in /home/utente/.ssh/id_rsa.&lt;br /&gt;Quest'ultimo file non dovrebbe mai essere reso pubblico, perché il vostro comodo login senza password è disponibile a chiunque sia in possesso di quel file e delle conoscenze per utilizzarlo.&lt;br /&gt;&lt;br /&gt;Per altri suggerimenti sull'utilizzo di SSH, compreso l'accesso senza password appena descritto,  visitate http://polishlinux.org/apps/ssh-tricks/.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-3755209709758313504?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/3755209709758313504/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=3755209709758313504' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/3755209709758313504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/3755209709758313504'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/12/piccole-comodit-per-ssh.html' title='Piccole comodità per SSH'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_gvvvvhfWCnE/R1sVM1c8b7I/AAAAAAAAAB4/eCBkYHGBkK4/s72-c/26openssh.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-2070973795009045215</id><published>2007-11-01T19:01:00.000+01:00</published><updated>2007-11-01T19:25:38.555+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='octave guida tutorial free'/><title type='text'>Breve introduzione pratica ad Octave</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_gvvvvhfWCnE/RyoUrEpPA1I/AAAAAAAAABw/SPo508lDbYs/s1600-h/sombrero.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_gvvvvhfWCnE/RyoUrEpPA1I/AAAAAAAAABw/SPo508lDbYs/s320/sombrero.jpg" alt="" id="BLOGGER_PHOTO_ID_5127933855928353618" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.octave.org"&gt;GNU Octave&lt;/a&gt; (d'ora in poi riferito per brevità come Octave) è un programma libero per il calcolo numerico, per molti versi simile al celebre Matlab.&lt;br /&gt;&lt;br /&gt;Matlab è spesso utilizzato nei corsi universitari di facoltà ingegneristiche e scientifiche in genere, ed è un software eccezionalmente completo e poliedrico, che ha probabilmente un solo difetto: non è software libero, né software open source.&lt;br /&gt;&lt;br /&gt;Al di là delle &lt;span style="font-weight: bold;"&gt;fondamentali&lt;/span&gt; discussioni filosofiche, ci sono anche delle questioni &lt;span style="font-weight: bold;"&gt;pratiche&lt;/span&gt; che limitano la diffusione di Matlab: l'assenza di versioni gratuite per studenti.&lt;br /&gt;&lt;br /&gt;Trovo &lt;span style="font-weight: bold;"&gt;assurdo&lt;/span&gt; che gli studenti siano obbligati a munirsi di software chiuso, proprietario e non gratuito per potere studiare una materia e, quindi, superare un esame. Non può essere una condizione &lt;span style="font-weight:  bold;"&gt;necessaria&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;E' per questo che quando posso cerco alternative &lt;span style="font-weight: bold;"&gt;libere&lt;/span&gt; o quantomeno &lt;span style="font-weight: bold;"&gt;open&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;source&lt;/span&gt; al software chiuso che viene richiesto all'Università.&lt;br /&gt;&lt;br /&gt;Oggi parleremo di Octave, un programma libero che si pone in contrapposizione al blasonato Matlab.&lt;br /&gt;&lt;br /&gt;Octave è disponibile per diverse piattaforme. Tra le piattaforme disponibili ci sono GNU/Linux, Windows, Mac OSX, Solaris.&lt;br /&gt;&lt;br /&gt;Lo spirito di questa breve introduzione è quello di illustrare praticamente i comandi che possono essere più utili, senza alcuna pretesa di completezza, e rimandando al manuale per una spiegazione completa ed esauriente sull'utilizzo degli stessi.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Operazioni di base&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La sintassi di base di Octave è molto simile a quella di Matlab. I commenti iniziano con il carattere %, ed il punto e virgola a fine comando inibisce la stampa dell'output di Octave in risposta al comando stesso.&lt;br /&gt;&lt;br /&gt;Ecco alcuni esempi:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% Questo è un commento&lt;br /&gt;%&lt;br /&gt;% Somma&lt;br /&gt;S1 = 1 + 2&lt;br /&gt;&lt;br /&gt;% Prodotto&lt;br /&gt;P1 = 3 * 4&lt;br /&gt;&lt;br /&gt;% Definizione di una matrice&lt;br /&gt;M = [ 1 2 3; 4 5 6; 7 8 9 ]&lt;br /&gt;&lt;br /&gt;% Definizione su più righe (si può omettere il punto e virgola a fine riga)&lt;br /&gt;M2 = [ 1 2 3&lt;br /&gt;4 5 6&lt;br /&gt;7 8 9 ]&lt;br /&gt;&lt;br /&gt;% Somma di matrici&lt;br /&gt;S = M + M2&lt;br /&gt;&lt;br /&gt;% Prodotto di matrici&lt;br /&gt;P = M * M2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Operazioni con le matrici&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ecco alcuni esempi di operazioni comuni con le matrici:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% Creazione di una matrice identità di dimensioni 4x4&lt;br /&gt;I4 = eye(4)&lt;br /&gt;&lt;br /&gt;% Creazione di una matrice piena di zeri di dimensioni 4x4&lt;br /&gt;Z4 = zeros(4)&lt;br /&gt;&lt;br /&gt;% Creazione di una matrice di dimensioni 2x4 riempita con numeri pseudo-casuali&lt;br /&gt;% tra 0 ed 1&lt;br /&gt;R = rand(2, 4)&lt;br /&gt;&lt;br /&gt;% Trasposta di quest'ultima matrice&lt;br /&gt;R'&lt;br /&gt;&lt;br /&gt;% Determinante della stessa&lt;br /&gt;det(R)&lt;br /&gt;&lt;br /&gt;% Inversa&lt;br /&gt;inv(R)&lt;br /&gt;&lt;br /&gt;% Operatore di prelievo. È nella forma matrice(x,y), dove x ed y sono due&lt;br /&gt;% intervalli così specificati: inizio:fine. I due intervalli sono relativi,&lt;br /&gt;% rispettivamente, alle righe ed alle colonne.&lt;br /&gt;%&lt;br /&gt;% Inserendo i due punti ed omettendo inizio e fine, si ottiene tutto&lt;br /&gt;% l'intervallo che è possibile prelevare.&lt;br /&gt;&lt;br /&gt;% Prelievo del primo elemento della prima riga di R&lt;br /&gt;R(1,1)&lt;br /&gt;&lt;br /&gt;% Prelievo dei primi due elementi della prima riga di R&lt;br /&gt;R(1,1:2)&lt;br /&gt;&lt;br /&gt;% Prelievo della sottomatrice in alto a sinistra di dimensioni 2x2&lt;br /&gt;R(1:2,1:2)&lt;br /&gt;&lt;br /&gt;% Prelievo della prima riga&lt;br /&gt;R(1,:)&lt;br /&gt;&lt;br /&gt;% Creazione di una matrice con i valori 2 4 6 nella diagonale principale&lt;br /&gt;d = diag([2, 4, 6])&lt;br /&gt;&lt;br /&gt;% Calcolo degli autovalori di quest'ultima matrice&lt;br /&gt;eig(d)&lt;br /&gt;&lt;br /&gt;% Prelievo del vettore contenente gli elementi della diagonale principale&lt;br /&gt;% della matrice d&lt;br /&gt;v_d = diag(d)&lt;br /&gt;&lt;br /&gt;% Creazione di un vettore contenente gli inversi di ciascun elemento di questo&lt;br /&gt;% vettore (ovvero 1/2, 1/4, 1/6)&lt;br /&gt;%&lt;br /&gt;% NOTA: l'operatore punto ".", preposto ad un operatore che lavora su una&lt;br /&gt;% matrice, indica ad Octave di effettuare un'operazione elemento per elemento,&lt;br /&gt;% e non un'operazione convenzionale.&lt;br /&gt;v_d_inv = 1./v_d&lt;br /&gt;&lt;br /&gt;% Calcolo di matrice esponenziale (e elevato alla R)&lt;br /&gt;exp_p = expm(R)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Strutture condizionali e cicli&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esempi di utilizzo di strutture condizionali e cicli:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% if-else-end&lt;br /&gt;if 1 &lt; 2&lt;br /&gt;    s = "minore\n"&lt;br /&gt;else&lt;br /&gt;    s = "maggiore\n"&lt;br /&gt;end&lt;br /&gt;printf(s)&lt;br /&gt;&lt;br /&gt;% for&lt;br /&gt;for i = 0 : 10&lt;br /&gt;    printf("%d\n", i)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;% for con step diverso da 1&lt;br /&gt;for i = 0 : 2 : 10&lt;br /&gt;    printf("%d\n", i)&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Conclusioni&lt;/span&gt;&lt;br /&gt;Spero che gli esempi siano sufficientemente auto-descrittivi, sicuramente saranno molto familiari a chi già conosce Matlab, ma dovrebbero essere chiari anche a chiunque conosca un po' di matematica.&lt;br /&gt;&lt;br /&gt;Ripeto che la guida non ha pretese di completezza né di autorevolezza, è solo per incuriosire potenziali utenti di Octave, ed incoraggiare quanta più gente possibile a migrare da Matlab ad Octave, visto che è adatto a coloro che non utilizzano tutte le potenzialità di Matlab.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-2070973795009045215?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/2070973795009045215/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=2070973795009045215' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/2070973795009045215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/2070973795009045215'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/11/breve-introduzione-pratica-ad-octave.html' title='Breve introduzione pratica ad Octave'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_gvvvvhfWCnE/RyoUrEpPA1I/AAAAAAAAABw/SPo508lDbYs/s72-c/sombrero.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-2936693304072130072</id><published>2007-10-10T23:55:00.000+02:00</published><updated>2007-10-11T00:17:46.021+02:00</updated><title type='text'>Linux Day 2007 a Catania</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_gvvvvhfWCnE/Rw1KpyOyVZI/AAAAAAAAABo/_6FDFSTxhgM/s1600-h/log0ld2k7.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_gvvvvhfWCnE/Rw1KpyOyVZI/AAAAAAAAABo/_6FDFSTxhgM/s320/log0ld2k7.gif" alt="" id="BLOGGER_PHOTO_ID_5119830433109005714" border="0" /&gt;&lt;/a&gt;Anche quest'anno viene organizzato il &lt;a href="http://www.linuxday.it"&gt;Linux Day&lt;/a&gt;, giornata nazionale di Linux e del Software Libero.&lt;br /&gt;&lt;br /&gt;Come membro del &lt;a href="http://catania.linux.it"&gt;GNU/Linux Users' Group di Catania&lt;/a&gt;, anche quest'anno seguo la preparazione dell'evento, anche se quest'anno un po' da dietro le quinte a causa dello scarso tempo a disposizione.&lt;br /&gt;&lt;br /&gt;Quest'anno il G/LUGCT ha deciso di aderire nuovamente alla manifestazione nazionale di ILS (Italian Linux Society), dopo un anno di allontanamento a causa di differenti visioni sull'impronta della manifestazione.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Cos'è il Linux Day?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Il Linux Day è una giornata di incontro per tutti gli appassionati del software libero ed in particolare di GNU/Linux. L'obiettivo della giornata è prettamente divulgativo, e la priorità è quella di diffondere la conoscenza del software libero e la consapevolezza della possibilità di utilizzare in maniera davvero &lt;span style="font-weight: bold;"&gt;libera&lt;/span&gt; il proprio computer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Dove si svolge il Linux Day?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Sono molte le città che ospitano il Linux Day, per localizzare il Linux Day più vicino alla vostra città basta consultare la mappa disponibile sul &lt;a href="http://www.linuxday.it"&gt;sito ufficiale della manifestazione.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Ed a Catania cosa state organizzando?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Il Linux Day di Catania, come da tradizione, si svolgerà alla Cittadella Universitaria, in via Andrea Doria. Ancora non si conosce l'ubicazione certa, monitorate il  sito web del LUG e questo umile blog per avere maggiori dettagli.&lt;br /&gt;&lt;br /&gt;Come per gli altri anni, si seguirà il seguente - e collaudato - programma:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Mattinata dedicata a micro-seminari da 10 minuti massimo su varie tematiche, intorno al Free Software ed a Linux. In parallelo, varie macchine demo su cui girano applicazioni di diverso genere. Ovviamente con Linux. :)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Pomeriggio "Educational", che quest'anno sarà ospitato dal liceo Regina Elena di Acireale, con approfondimento sul software libero didattico&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:130%;"&gt;Regalate qualcosa?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Certo! Tanta conoscenza e consapevolezza! :)&lt;br /&gt;Inoltre, venite con un CD (o DVD) vuoto ed uscirete con un CD (o DVD) contenente la vostra copia &lt;span style="font-weight: bold;"&gt;libera&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;gratuita&lt;/span&gt; di una distribuzione GNU/Linux. :)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Perché dovrei venire?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Se sei stufo di sistemi operativi che non ti danno la libertà che meriti; se hai sentito parlare di questo "Linux" ma non hai mai avuto tempo/voglia per approfondire; se non ne hai mai sentito parlare e sei curioso; se non hai nulla di meglio da fare; se avevi qualcosa di meglio da fare ma questo post ti ha incuriosito; se vuoi picchiare l'autore di questo post. :)&lt;br /&gt;&lt;br /&gt;Vi aspettiamo! :D&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.linuxday.it"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Collegamento" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-2936693304072130072?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/2936693304072130072/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=2936693304072130072' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/2936693304072130072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/2936693304072130072'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/10/linux-day-2007-catania.html' title='Linux Day 2007 a Catania'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_gvvvvhfWCnE/Rw1KpyOyVZI/AAAAAAAAABo/_6FDFSTxhgM/s72-c/log0ld2k7.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-776694355405305271</id><published>2007-09-19T20:30:00.000+02:00</published><updated>2007-09-19T23:19:55.684+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web comic xkcd phd cad'/><title type='text'>Web comics</title><content type='html'>&lt;span style="font-size:100%;"&gt;Il web è per molti di noi fonte di produttive informazioni per lo studio, il lavoro, la vita quotidiana.&lt;br /&gt;&lt;br /&gt;Ma dei tremendi nemici tramano contro la nostra buona volontà, il nostro buon senso, il nostro tempo speso bene. Nel web ci sono davvero troppe &lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;fonti di distrazioni&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;br /&gt;&lt;br /&gt;Per rendere ancora più frustrante il vostro tentativo di restare concentrati su ciò che di importante stavate facendo prima di leggere questo blog, vi presento una carrellata dei &lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;web comics&lt;/span&gt;&lt;span style="font-size:100%;"&gt; che leggo con maggior piacere.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;1. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_gvvvvhfWCnE/RvFuDIFsW9I/AAAAAAAAABI/biBrU5gWDDs/s1600-h/xkcd-comics-blog.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_gvvvvhfWCnE/RvFuDIFsW9I/AAAAAAAAABI/biBrU5gWDDs/s320/xkcd-comics-blog.png" alt="" id="BLOGGER_PHOTO_ID_5111988052032248786" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;xkcd&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Come avrete notato se avete letto il primo post, io sono un grandissimo fan di &lt;a href="http://xkcd.com/"&gt;xkcd&lt;/a&gt;, web comic molto nerd che riesce a mixare in maniera perfetta informatica, fisica, esistenzialismo, emozioni.&lt;br /&gt;&lt;br /&gt;È notevole lo stile minimalista della grafica, che ricorda gli scarabocchi che un po' tutti abbiamo tentato di disegnare, prima di scoprire di non essere affatto portati per le arti grafiche.&lt;br /&gt;&lt;br /&gt;Ecco qualche chicca: &lt;a href="http://xkcd.com/293/"&gt;RTFM&lt;/a&gt;, &lt;a href="http://xkcd.com/292/"&gt;goto&lt;/a&gt;, &lt;a href="http://xkcd.com/149/"&gt;sudo make me a sandwich&lt;/a&gt;, &lt;a href="http://xkcd.com/208/"&gt;regular expressions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Il comic n&lt;/span&gt;&lt;span style="font-size:100%;"&gt;on ha una storyline ben precisa, né dei personaggi ben delineati. Beninteso, questa non è una limitazion&lt;/span&gt;&lt;span style="font-size:100%;"&gt;e, ma semplicemente una caratteristica di xkcd.&lt;br /&gt;&lt;br /&gt;Vi segnalo l'interessante funzionalità di ricerca, presente sotto ciascuna strip, ed il testo nascosto, per ogni comic, nell'attributo "alt" dell'immagine, spesso la chiave per comprendere appieno il comic oppure un'estensione dello stesso.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;2. Ctrl+alt+del&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_gvvvvhfWCnE/RvFzu4FsW-I/AAAAAAAAABQ/IOkXekhuvwE/s1600-h/cad-comics-blog.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_gvvvvhfWCnE/RvFzu4FsW-I/AAAAAAAAABQ/IOkXekhuvwE/s320/cad-comics-blog.png" alt="" id="BLOGGER_PHOTO_ID_5111994301209664482" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;Dietro l'apparenza dell'inquietante e ben nota sequenza per riavviare un diabolico sistema operativo si nasconde un ironico web comic orientato ai videogiocatori.&lt;br /&gt;&lt;br /&gt;Io &lt;span style="font-weight: bold;"&gt;non&lt;/span&gt; sono un videogiocatore. Prima lo ero, ma ora il mio videogiocare si riduce a qualche partita con gli amici a PES 6. Ciononostante riesco ad apprezzare Ctrl+alt+del, ottimo comic che, a differenza di xkcd, ha dei personaggi fortemente deline&lt;/span&gt;&lt;span style="font-size:100%;"&gt;ati ed una trama che fa da filo conduttore tra gli episodi.&lt;br /&gt;&lt;br /&gt;In realtà, &lt;/span&gt;&lt;span style="font-size:100%;"&gt;come spesso accade, si possono dividere gli episodi in &lt;span style="font-style: italic;"&gt;saghe&lt;/span&gt;, insieme di episodi correlati tra loro da una sub-trama.&lt;br /&gt;&lt;br /&gt;Trovano spazio, come spesso accade nei web comic, follia pura, violenza, sangue, demenza.&lt;br /&gt;&lt;br /&gt;Vi innamorerete della mente infantile di &lt;span style="font-weight: bold;"&gt;Ethan&lt;/span&gt;, il protagonista. Vi calerete nei panni di &lt;span style="font-weight: bold;"&gt;Lucas&lt;/span&gt;, co-protagonista che deve rimediare, non senza ironia, ai danni di Ethan.&lt;br /&gt;&lt;br /&gt;Alle vicende dei personaggi principali si intrecciano delle storie parallele, che vedono come protagonisti una specie di &lt;a href="http://cad-comic.com/comic.php?d=20070901"&gt;cuoco francese&lt;/a&gt; che non riesco a farmi piacere ed i &lt;a href="http://cad-comic.com/comic.php?d=20070905"&gt;classici Player 1-4.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Ci sono a&lt;/span&gt;&lt;span style="font-size:100%;"&gt;nche comic totalmente indipendenti dalle storyline, che generalmente ironizzano su videogiochi vari o anche &lt;a href="http://cad-comic.com/comic.php?d=20021204"&gt;sistemi operativi&lt;/a&gt;, &lt;a href="http://cad-comic.com/comic.php?d=20021126"&gt;più o meno alternativi&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;È evidente che la testata è dedicata a videogiocatori, ma comunque troverete spunti interessanti anche se, come me, non lo siete.&lt;br /&gt;&lt;br /&gt;Alcune chicche: &lt;a href="http://cad-comic.com/comic.php?d=20021101"&gt;Say it.. I dare you&lt;/a&gt;, &lt;a href="http://cad-comic.com/comic.php?d=20021113"&gt;Explain that one!&lt;/a&gt;, &lt;a href="http://cad-comic.com/comic.php?d=20070914"&gt;Marketing Blitz&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Da seguire.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;3. Piled higher and Deeper (PhD)&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_gvvvvhfWCnE/RvGCuIFsW_I/AAAAAAAAABY/ZZn_IvFpjSM/s1600-h/phd.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_gvvvvhfWCnE/RvGCuIFsW_I/AAAAAAAAABY/ZZn_IvFpjSM/s320/phd.png" alt="" id="BLOGGER_PHOTO_ID_5112010780999179250" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;Web comic che ho conosciuto grazie ad un &lt;a href="http://maelstrom2.blogspot.com/"&gt;interessante blog&lt;/a&gt;, si ispira alle vicissitudini degli studenti di dottorato di tutto il mondo.&lt;br /&gt;&lt;br /&gt;Vi consiglio di dare un'occhiata alla &lt;a href="http://www.phdcomics.com/comics/most_popular.php"&gt;pagina dei 200 comic più popolari&lt;/a&gt; di questo sito, per farvi un'idea del tono del comic e del suo contenuto.&lt;br /&gt;&lt;br /&gt;Così come gli altri, anche questo ha un pubblico ben definito, ovvero gli studenti di dottorato (o aspiranti tali), che sicuramente si riconosceranno in alcuni (molti?) comic e probabilmente lo troveranno tremendamente divertente.&lt;br /&gt;&lt;br /&gt;Chi, invece, non fa parte del target del comic probabilmente lo scarterà dopo due o tre episodi al massimo.&lt;br /&gt;&lt;br /&gt;Consigliatissimo a tutti gli studenti.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;4. The n&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_gvvvvhfWCnE/RvGK7oFsXAI/AAAAAAAAABg/ep2fehuVOTo/s1600-h/ohforf.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_gvvvvhfWCnE/RvGK7oFsXAI/AAAAAAAAABg/ep2fehuVOTo/s320/ohforf.png" alt="" id="BLOGGER_PHOTO_ID_5112019809020435458" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;00b&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Iniziamo con un paradosso. Chi non sa cosa voglia dire n00b, è un n00b. :)&lt;br /&gt;&lt;br /&gt;Italianizzabile in &lt;span style="font-style: italic;"&gt;niubbo&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;n00b&lt;/span&gt; è la contrazione di new bie, in soldoni la &lt;span style="font-style: italic;"&gt;recluta, quello nuovo&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;l'inesperto&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Così viene definito chi è da poco entrato in qualsiasi gruppo, ma questo concetto è estremizzato nei &lt;span style="font-weight: bold;"&gt;MMORPG&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;/span&gt;(Massive Multiplayer Online Role-Playing Game) come World of Warcraft ed altri.&lt;br /&gt;&lt;br /&gt;Infatti in questi contesti il dislivello tra i giocatori &lt;span style="font-style: italic;"&gt;stagionati&lt;/span&gt; ed i &lt;span style="font-style: italic;"&gt;n00b &lt;/span&gt;è a dir poco&lt;span style="font-weight: bold;"&gt; enorme&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Su questa differenza, e su una generalizzata satira sui MMORPG, si basa il comic &lt;a href="http://www.thenoobcomic.com/"&gt;&lt;span style="font-weight: bold;"&gt;The noob&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ci sono varie storyline che si intrecciano, ed una idea intelligente dell'autrice (italiana) è la visualizzazione sulla sinistra del nome della storyline a cui appartiene il comic e del comic precedente/successivo nella storyline.&lt;br /&gt;&lt;br /&gt;Sebbene la grafica non sia, a mio avviso, all'altezza dei comic precedenti (incluso xkcd), ci sono degli episodi divertenti e degli spunti originali. Ad esempio, &lt;a href="http://www.thenoobcomic.com/daily/strip236.html"&gt;Cutting edge&lt;/a&gt; o gli episodi della storyline di Ohforf da &lt;a href="http://www.thenoobcomic.com/daily/strip253.html"&gt;Dancing&lt;/a&gt; in poi.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Se siete appassionati di MMORPG, ve lo consiglio. Io trovo i MMORPG una perdita di tempo, ma il comic è simpatico. :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;5. Menzioni speciali&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Rientrano in questa classifica, anche se probabilmente non sono più attivi, sia &lt;a href="http://www.nerd-boy.net/"&gt;Nerd Boy&lt;/a&gt;, un comic che dimostra quanto sia espressivo l'ASCII, sia &lt;a href="http://www.ok-cancel.com/"&gt;OK/Cancel&lt;/a&gt;, un comic sull'interazione uomo-macchina (HCI). Di quest'ultimo vi segnalo &lt;a href="http://www.ok-cancel.com/comic/109.html"&gt;Clippy to the rescue&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Inoltre ho appena scoperto &lt;a href="http://www.vgcats.com/"&gt;VG Cats&lt;/a&gt;, che sembra carino almeno quanto Ctrl+Alt+Del. Vedremo :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;6. Conclusioni&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Se non sapete cosa leggere, vi consiglio su tutti xkcd e Ctrl+Alt+Del. Il primo, in particolare, è a dir poco &lt;span style="font-weight: bold;"&gt;geniale&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Se poi avete &lt;span style="font-weight: bold;"&gt;molto&lt;/span&gt; tempo da perdere, con il materiale presente in questo post ne avrete per diverse ore.. Fatemi sapere quali comic preferite!&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;Buon divertimento! :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EDIT:&lt;/span&gt; l'editor di blogger ha &lt;span style="font-weight: bold;"&gt;totalmente distrutto&lt;/span&gt; le dimensioni dei miei font. Sebbene l'editor mostri un post corretto, la visualizzazione è pessima, ho dovuto modificare &lt;span style="font-weight: bold;"&gt;a mano&lt;/span&gt; l'html. Spero non accada più. Con &lt;a href="http://www.vim.org"&gt;vim&lt;/a&gt;, questo non sarebbe successo. ;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-776694355405305271?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/776694355405305271/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=776694355405305271' title='6 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/776694355405305271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/776694355405305271'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/09/web-comics.html' title='Web comics'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_gvvvvhfWCnE/RvFuDIFsW9I/AAAAAAAAABI/biBrU5gWDDs/s72-c/xkcd-comics-blog.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-3108681923140591615</id><published>2007-09-08T16:06:00.001+02:00</published><updated>2007-09-08T16:25:09.778+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microformats web open'/><title type='text'>Microformats, ovvero web semantico a dieta.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_gvvvvhfWCnE/RuKsluN1S2I/AAAAAAAAABA/Jbr-qlWlhEY/s1600-h/mf-lg-ora.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_gvvvvhfWCnE/RuKsluN1S2I/AAAAAAAAABA/Jbr-qlWlhEY/s320/mf-lg-ora.gif" alt="" id="BLOGGER_PHOTO_ID_5107834691452750690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;È da un po' che si sente parlare di &lt;span style="font-style: italic;"&gt;web semantico&lt;/span&gt;, ovvero della possibilità di fornire tramite il web contenuti che non siano solo accessibili ad un essere umano che visiti le pagine web, ma anche utilizzabili per elaborazioni successive dal nostro browser (o chi per lui).&lt;br /&gt;&lt;br /&gt;Ciò può voler dire inserire meta-informazioni nelle pagine, arricchirle, fornire contenuti tramite web services, utilizzare XML, ecc.. (vedi la voce su wikipedia &lt;a href="http://it.wikipedia.org/wiki/Web_semantico"&gt;in italiano&lt;/a&gt; ed &lt;a href="http://en.wikipedia.org/wiki/Semantic_Web"&gt;in inglese&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Ma purtroppo XML è un linguaggio più adatto alle macchine che all'uomo, non è semplice utilizzare queste tecnologie che, sicuramente, sono molto potenti, ma che dall'altro lato rendono sempre più onerosa la creazione ed il mantenimento di sistemi informativi.&lt;br /&gt;&lt;br /&gt;In contesti abbastanza semplici, come ad esempio pubblicazione di calendari e condivisione di contatti, può non essere giustificato l'impiego di un'architettura multi-strato.&lt;br /&gt;&lt;br /&gt;Entrano in gioco i &lt;a href="http://microformats.org"&gt;microformats&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I microformats sono un insieme di attributi html che, se associati ad elementi già esistenti, contribuiscono alla creazione di un significato di alto livello alle informazioni a cui sono associate, permettendo così di individuare questi dati e salvarli per un'ulteriore elaborazione.&lt;br /&gt;&lt;br /&gt;Questi dati, essendo salvati tramite attributi html (in particolare &lt;span style="font-weight: bold;"&gt;class &lt;/span&gt;ed &lt;span style="font-weight: bold;"&gt;id&lt;/span&gt;) non risultano differenti all'occhio umano. Ma tramite uno strumento come &lt;a href="https://addons.mozilla.org/it/firefox/addon/4106"&gt;l'estensione Operator per Firefox&lt;/a&gt; è possibile ammirarli nella loro semplicità e semanticità.&lt;br /&gt;&lt;br /&gt;Ad esempio, al posto del riquadro "Informazioni personali" tradizionale di Blogger, ho inserito del codice HTML personalizzato, generato tramite il &lt;a href="http://microformats.org/code/hcard/creator"&gt;generatore di codice hCard&lt;/a&gt; di microformats.org e successivamente modificato.&lt;br /&gt;&lt;br /&gt;La differenza è minima, si tratta di HTML. Però gli attributi aggiuntivi lo rendono processabile da strumenti come l'estensione Operator. Da lì potrete salvare i miei dati in formato vCard e successivamente salvarli nel vostro client di posta preferito.&lt;br /&gt;&lt;br /&gt;Unica nota: blogger.com utilizza (male) i microformats, quindi non ho modo (che io sappia) di eliminare l'attributo &lt;span style="font-weight: bold;"&gt;fn&lt;/span&gt; dalla scritta alla fine di ogni post ("Pubblicato da lupino3 il.."), quindi l'estensione Operator penserà che ci siano due differenti microformat. In realtà io ho inserito soltanto quello sulla destra.&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Installate l'estensione Operator, e tornate alla vostra consueta e &lt;span style="font-style: italic;"&gt;produttiva&lt;/span&gt; navigazione su web, scoprirete tante chicche nascoste, formattate per sfuggire al vostro sguardo per esservi maggiormente utili.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-3108681923140591615?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/3108681923140591615/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=3108681923140591615' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/3108681923140591615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/3108681923140591615'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/09/microformats-ovvero-web-semantico-dieta.html' title='Microformats, ovvero web semantico a dieta.'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_gvvvvhfWCnE/RuKsluN1S2I/AAAAAAAAABA/Jbr-qlWlhEY/s72-c/mf-lg-ora.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-4087185525283173960</id><published>2007-09-07T12:26:00.000+02:00</published><updated>2007-09-07T12:30:46.684+02:00</updated><title type='text'>Nuovi URL</title><content type='html'>Da oggi questo blog sarà raggiungibile non solo tramite il solito URL, ma anche attraverso gli indirizzi &lt;a href="http://blog.technicalia.it"&gt;http://blog.technicalia.it&lt;/a&gt; e &lt;a href="http://www.technicalia.it"&gt;http://www.technicalia.it&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In realtà Blogger.com permette di far puntare un solo link esterno al proprio blog, ed io ho creato dal pannello di controllo di Tophost un record DNS di tipo CNAME per blog.technicalia.it.&lt;br /&gt;&lt;br /&gt;L'URL www.technicalia.it punta in realtà al Virtual Private Server (VPS) che condivido con altri membri del &lt;a href="http://catania.linux.it"&gt;GNU/Linux Users Group di Catania&lt;/a&gt;&lt;br /&gt;Tramite una semplice direttiva Redirect di apache, www.technicalia.it punta a blog.technicalia.it, aggirando così la limitazione di Blogger.com ;)&lt;br /&gt;&lt;br /&gt;Aggiornate i vostri bookmark! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-4087185525283173960?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/4087185525283173960/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=4087185525283173960' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/4087185525283173960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/4087185525283173960'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/09/nuovi-url.html' title='Nuovi URL'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-7441015169230727745</id><published>2007-09-05T18:59:00.001+02:00</published><updated>2007-09-08T16:27:26.608+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='claws-mail'/><title type='text'>Claws Mail 3.0.0</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_gvvvvhfWCnE/Rt7goON1S1I/AAAAAAAAAAU/lHVZBIobTkg/s1600-h/blog-cm3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_gvvvvhfWCnE/Rt7goON1S1I/AAAAAAAAAAU/lHVZBIobTkg/s320/blog-cm3.png" alt="" id="BLOGGER_PHOTO_ID_5106766009100225362" border="0" /&gt;&lt;/a&gt;Due giorni fa è uscita la versione 3.0.0 del leggero e potente client di posta elettronica &lt;span style="font-weight: bold;"&gt;Claws Mail&lt;/span&gt; (d'ora in poi CM).&lt;br /&gt;&lt;br /&gt;Ormai utilizzo da qualche anno questo programma per gestire la mia posta elettronica, e devo dire che sono più che soddisfatto della sua velocità e della sua abilità di gestire senza fare una piega un numero non indifferente di mail giornaliere: considerando le varie Mailing List a cui sono iscritto, mi arrivano al giorno circa 3-400 messaggi (se non di più).&lt;br /&gt;&lt;br /&gt;Ecco alcune delle caratteristiche più importanti di questo client di posta:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Gestione account POP3/IMAP/SMTP&lt;/li&gt;&lt;li&gt;Supporto SSL&lt;/li&gt;&lt;li&gt;Sistema &lt;span style="font-weight: bold;"&gt;potente&lt;/span&gt; di filtri&lt;/li&gt;&lt;li&gt;Supporto NNTP (newsgroup)&lt;/li&gt;&lt;li&gt;Veloce funzionalità di ricerca type-ahead (ovvero: ricerca e relativo raffinamento dei risultati durante la digitazione)&lt;/li&gt;&lt;li&gt;Possibilità di assegnare tag (etichette) ai messaggi&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Supporto GPG (via plugin)&lt;/li&gt;&lt;li&gt;Supporto vCalendar (via plugin)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Visualizzatore HTML (via plugin)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Visualizzatore immagini (via plugin)&lt;/li&gt;&lt;li&gt;Visualizzatore PDF (via plugin)&lt;/li&gt;&lt;li&gt;Gestione feed RSS (via plugin)&lt;/li&gt;&lt;li&gt;Completamente in italiano&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Finalmente, dopo qualche versione di stallo, sono riuscito ad aggiornare la traduzione in italiano di questo utile software, un minimo contributo che ritengo doveroso verso la comunità del free software, sorgente del 99% dei programmi che utilizzo quotidianamente.&lt;br /&gt;&lt;br /&gt;Tra le novità importanti di questa release, segnalo che è la prima ad essere rilasciata sotto &lt;a href="http://gplv3.fsf.org/"&gt;GPL 3&lt;/a&gt;, la nuova licenza software recentemente pubblicata dalla Free Software Foundation.&lt;br /&gt;&lt;br /&gt;Claws Mail è disponibile per quasi tutti i sistemi operativi liberi, non ho però notizie di un pacchetto ready-to-install per Win32.&lt;br /&gt;&lt;br /&gt;Se pensate che Thunderbird/Evolution/Kmail non vi soddisfino appieno, o se utilizzate la webmail ma vorreste provare un client desktop, vi consiglio di dargli un'occhiata, non ve ne pentirete! :)&lt;br /&gt;&lt;br /&gt;Link al &lt;a href="http://www.claws-mail.org/"&gt;sito ufficiale&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(&lt;span style="font-weight: bold;"&gt;modifica: &lt;/span&gt;per un'incomprensione tra me ed il responsabile delle release, la traduzione dei plugin non è stata aggiornata. Sarà aggiornata nella prossima versione)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-7441015169230727745?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/7441015169230727745/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=7441015169230727745' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/7441015169230727745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/7441015169230727745'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/09/claws-mail-300.html' title='Claws Mail 3.0.0'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_gvvvvhfWCnE/Rt7goON1S1I/AAAAAAAAAAU/lHVZBIobTkg/s72-c/blog-cm3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-5790477585362293861</id><published>2007-08-30T15:16:00.000+02:00</published><updated>2007-08-30T18:28:55.608+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='del.icio.us'/><title type='text'>del.icio.us network explorer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_gvvvvhfWCnE/RtbJ3eN1S0I/AAAAAAAAAAM/hZgBH40Lz3k/s1600-h/del.icio.us.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_gvvvvhfWCnE/RtbJ3eN1S0I/AAAAAAAAAAM/hZgBH40Lz3k/s320/del.icio.us.png" alt="" id="BLOGGER_PHOTO_ID_5104489182512106306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Per chi non lo sapesse, &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt; è un ottimo servizio di social bookmarking online, ovvero consente di conservare online i propri bookmarks, assegnandogli delle etichette (tag) per classificarli, in modo da poterli facilmente reperire in seguito.&lt;br /&gt;&lt;br /&gt;Di default i bookmark di ciascun utente sono pubblici, rendendo possibile a chiunque la ricerca tra i bookmark degli altri alla ricerca di link interessanti. La homepage del sito mostra i link che, in base a determinate statistiche, sono considerati interessanti dagli utenti del servizio.&lt;br /&gt;&lt;br /&gt;Inoltre, è possibile instaurare legami con gli altri utenti, in modo da poter segnalare loro link, o permettendogli di farsi segnalare link da loro.&lt;br /&gt;&lt;br /&gt;Solo oggi ho scoperto che c'è un modo divertente per esplorare la rete di connessioni che queste relazioni su del.icio.us creano: il &lt;a href="http://www.twoantennas.com/projects/delicious-network-explorer/"&gt;&lt;span style="font-weight: bold;"&gt;del.icio.us network explorer&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;È un'applet in Java (e per questo lenta come la morte a caricare) che consente di visualizzare le proprie connessioni su del.icio.us e di esplorare quindi le connessioni delle connessioni, permettendo magari di identificare conoscenze in comune o, più semplicemente, di navigare in modo facile e divertente tra le connessioni di del.icio.us.&lt;br /&gt;&lt;br /&gt;Un simpatico esempio di cosa si possa realizzare utilizzando le API che i servizi web di oggi mettono a disposizione.&lt;br /&gt;&lt;br /&gt;Provatelo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-5790477585362293861?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/5790477585362293861/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=5790477585362293861' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/5790477585362293861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/5790477585362293861'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/08/delicious-network-explorer.html' title='del.icio.us network explorer'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_gvvvvhfWCnE/RtbJ3eN1S0I/AAAAAAAAAAM/hZgBH40Lz3k/s72-c/del.icio.us.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3758874196714338817.post-4050311679300414664</id><published>2007-08-30T13:08:00.000+02:00</published><updated>2007-08-30T16:45:46.359+02:00</updated><title type='text'>f1rst p0st</title><content type='html'>Ed infine eccolo...&lt;br /&gt;Spesso ho pensato che avere un blog potesse essere un utile modo per registrare e condividere il mio rapporto con il mondo dell'informatica, ma non ho mai avuto tempo e voglia di iniziare per davvero a scrivere un blog.&lt;br /&gt;&lt;br /&gt;Oggi mi è venuta la voglia. Non so se troverò il tempo. :)&lt;br /&gt;&lt;br /&gt;Per cominciare, ecco un chiarimento sul titolo: &lt;a href="http://xkcd.com/269/"&gt;http://xkcd.com/269/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Io &lt;span style="font-weight: bold;"&gt;amo&lt;/span&gt; xkcd. So che ciò mi rende un po' più geek.. pazienza. :)&lt;br /&gt;&lt;br /&gt;Bene, rompo una bottiglia virtuale di champagne virtuale contro questo blog e torno nell'oscurità.&lt;br /&gt;&lt;br /&gt;Alla prossima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3758874196714338817-4050311679300414664?l=blog.technicalia.it' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.technicalia.it/feeds/4050311679300414664/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3758874196714338817&amp;postID=4050311679300414664' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/4050311679300414664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3758874196714338817/posts/default/4050311679300414664'/><link rel='alternate' type='text/html' href='http://blog.technicalia.it/2007/08/f1rst-p0st.html' title='f1rst p0st'/><author><name>Andrea Spadaccini</name><uri>https://profiles.google.com/100649395018186034267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-_-VuVr6VupY/AAAAAAAAAAI/AAAAAAAAB68/1VkShREcwDw/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry></feed>
