<?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-653211881945354215</id><updated>2011-11-03T03:59:01.961-07:00</updated><category term='java coding'/><category term='scala inner annotations jpa'/><title type='text'>Articles</title><subtitle type='html'>Raccolta dei miei articoli</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-653211881945354215.post-6827342688630148272</id><published>2011-11-03T03:20:00.000-07:00</published><updated>2011-11-03T03:59:01.980-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala inner annotations jpa'/><title type='text'>Java -&gt; Scala: Inner Annotations</title><content type='html'>&lt;div style="text-align: justify;"&gt;Da poco mi sono convinto che è giunto il momento di provare a utilizzare Scala non più per gioco ma cercando di creare qualcosa di concreto in ambiente Enterprise.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;L'utilizzo di Scala in ambiente Enterprise non può non scontrarsi con gli RDBMS.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La questione che mi sono trovato ad affrontare è quello di volere esprimere attraverso le annotazioni in scala una relazione ManyToMany attraverso una tabella di join.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Di seguito illustro la soluzione in Java e poi quella in Scala:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Java&lt;/b&gt;&lt;br /&gt;&lt;pre class="code"&gt;@ManyToMany(targetEntity = Product)&lt;br /&gt;@JoinTable(name = "ORDERS_PRODUCTS",&lt;br /&gt;           joinColumns = {@JoinColumn(name="ORDER_ID", &lt;br /&gt;                                  referencedColumnName ="ORDER_ID")},&lt;br /&gt;           inverseJoinColumns = {@JoinColumn(name="PRODUCT_ID", &lt;br /&gt;                                  referencedColumnName = "PRODUCT_ID")}&lt;br /&gt;List&amp;lt;Product&amp;gt; products = null;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Scala&lt;/b&gt;&lt;br /&gt;&lt;pre class="code"&gt;@ManyToMany(targetEntity = classOf[Product])&lt;br /&gt;@JoinTable(name = "ORDERS_PRODUCTS",&lt;br /&gt;           joinColumns = Array(new JoinColumn(name="ORDER_ID", &lt;br /&gt;                              referencedColumnName ="ORDER_ID")),&lt;br /&gt;           inverseJoinColumns = Array(new JoinColumn(name="PRODUCT_ID", &lt;br /&gt;                                 referencedColumnName = "PRODUCT_ID")))&lt;br /&gt;@BeanProperty&lt;br /&gt;var products:List[Product] = null&lt;/pre&gt;&lt;pre class="code" style="text-align: justify;"&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span" &gt;Ricordo che l'estratto del codice scritto in Scala compila soltanto se viene usato un compilatore Scala la cui versione&lt;/span&gt;&lt;span class="Apple-style-span" &gt;sia maggiore uguale alla 2.8.0 a causa di un bug presente nelle versioni precedenti.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/653211881945354215-6827342688630148272?l=giuseppelobrutto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/6827342688630148272/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=653211881945354215&amp;postID=6827342688630148272' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/6827342688630148272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/6827342688630148272'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/2011/11/java-scala-inner-annotations.html' title='Java -&gt; Scala: Inner Annotations'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-653211881945354215.post-9158714980767153438</id><published>2010-09-30T00:34:00.000-07:00</published><updated>2010-09-30T00:43:50.399-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java coding'/><title type='text'>Let's put a string date to a Zulu Date</title><content type='html'>&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public class USPacificZuluDate&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;    public static void main(String[] args) throws Exception&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        sdf.setTimeZone(TimeZone.getTimeZone("UTC")); &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        System.out.println(sdf.format(currentDate));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        Date parsedDate = sdf.parse("1970-01-01T00:00:00.0UTC");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        System.out.println(sdf.format(parsedDate));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/653211881945354215-9158714980767153438?l=giuseppelobrutto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/9158714980767153438/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=653211881945354215&amp;postID=9158714980767153438' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/9158714980767153438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/9158714980767153438'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/2010/09/lets-put-string-date-to-zulu-date.html' title='Let&apos;s put a string date to a Zulu Date'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-653211881945354215.post-5945308291888156900</id><published>2008-03-18T01:38:00.000-07:00</published><updated>2008-03-18T01:40:51.654-07:00</updated><title type='text'>Alla scoperta del file system di Linux</title><content type='html'>&lt;p style="text-align: justify;"&gt;In quest’articolo andremo alla scoperta del filesystem di un &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=26396&amp;amp;redirect=75927ae628f441e6572382fa198e04f1" class="JADV_Spot" id="JADVKey_2_0_11"&gt;sistema &lt;/a&gt;&lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=26396&amp;amp;redirect=75927ae628f441e6572382fa198e04f1" class="JADV_Spot" id="JADVKey_3_1_11"&gt;operativo&lt;/a&gt; &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=26360&amp;amp;redirect=611fbf884fe040358032638813121625" class="JADV_Spot" id="JADVKey_1_0_10"&gt;Linux&lt;/a&gt; dandone una prima visione generale che potrà risultare utile come primo punto di inizio. Molte persone che si avvicinano a questo sistema operativo, si sentono confusi alla vista del suo filesystem, principalmente perché esso si presenta come una non semplice gerarchia di file e directory.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://www.tuxjournal.net/wp-content/uploads/2007/05/logomed128.png" height="78" width="182" /&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span id="more-2752"&gt;&lt;/span&gt;Iniziamo dicendo che in Linux esiste una singola struttura gerarchica delle directory. Ogni cosa inizia dalla directory root, rappresentata da ‘&lt;em&gt;/&lt;/em&gt;‘; e si ramifica in una struttura dati ad albero formando directory e sotto directory. Mentre nei sistemi operativi DOS/Windows possiamo avere varie partizioni&lt;br /&gt;all’interno delle quali sono presenti le directory, in Linux tutte le partizioni sono presenti all’interno della directory root eseguendo il ‘&lt;em&gt;mount&lt;/em&gt;‘ sotto specifiche directory. Volendo paragonare, la root directory di Linux sarebbe la partizione &lt;em&gt;C:&lt;/em&gt; di Windows.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;A loro volta, in Windows le varie partizioni vengono identificate durante la fase di boot (fatta eccezione per i dispositivi plug&amp;amp;play). Ma in Linux, se non viene eseguito il mount di una partizione o di un dispositivo, il sistema non conosce l’esistenza di quella partizione o dispositivo. A prima vista questo potrebbe sembrare il modo più semplice per accedere a una partizione o a un dispositivo, ma nonostante ciò questo fornisce in compenso un’alta flessibilità e potenza.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Questo tipo di strutturazione del filesystem, offre molti vantaggi se paragonato con l’approccio utilizzato dai sistemi Windows. Prendiamo l’esempio della directory /usr. Questa contiene molti programmi eseguibili all’interno del sistema. Avendo a disposizione il filesystem di Linux possiamo scegliere di smontarla e rimontarla su un’altra partizione, o ancora su un’altra partizione di un’altra macchina sulla stessa rete. Il sistema sottostante non conoscerà la differenza poiché /usr appare come essere una directory che è parte della struttura delle directory locali. Provate a muovere la directory &lt;em&gt;c:/windows/system32&lt;/em&gt; su un’altra partizione o dispositivo e vedrete cosa accadrà.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;*&lt;strong&gt; /&lt;/strong&gt; - è chiamata root del filesystem. E’ un ramo dell’albero del filesystem e il punto di inizio del filesystem stesso. Ogni altra directory o file presente nel sistema e subordinata alla ‘/’. Dal terminale digitando &lt;em&gt;&lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=452&amp;amp;redirect=1bc7dd00ab921e75a2266d268633aa40" class="JADV_Spot" id="JADVKey_4_0_1"&gt;cd&lt;/a&gt; /&lt;/em&gt; veniamo diretti sulla root del filesystem.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;*&lt;strong&gt; /root&lt;/strong&gt; - è la directory home dell’utente root. Questa solitamente conterrà file di log e script usati dall’amministratore del sistema.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;strong&gt;* /bin &lt;/strong&gt;- è la directory dove sono memorizzati i principali file binari sia per l’amministratore che per gli utenti comuni.&lt;strong&gt; &lt;/strong&gt;Esempi sono i programmi “ls”, “cat” e “mv” oltre alle shell come bash, ksh, csh.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;strong&gt;* /sbin&lt;/strong&gt; - è la directory dove sono memorizzati i principali file binari usati dall’amministratore del sistema e dal sistema stesso.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;*&lt;strong&gt; /dev&lt;/strong&gt; - questa invece è una directory molto interessante. Essa sottolinea una importante caratteristica del filesystem di Linux. Ogni cosa in Linux è un file o una directory. In questa directory troviamo le varie partizioni montate sul primo master drive del sistema. Ad esempio /dev/cdrom e /dev/fd0 rappresentano rispettivamente il lettore CDROM e il lettore floppy mentre /dev/dsp rappresenta gli speaker del &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=904&amp;amp;redirect=aa32e1137c948b6d174f48496e85035c" class="JADV_Spot" id="JADVKey_5_0_5"&gt;computer&lt;/a&gt;. Ogni cosa scritta su questo file verrà automaticamente ridiretta verso i tuoi speaker. Provate dal terminale il seguente comando: &lt;strong&gt;cat /etc/fstab &gt; /dev/dsp&lt;/strong&gt;; sentirete il suono del file fstab.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;* &lt;strong&gt;/lib&lt;/strong&gt; - è la directory dove vengono memorizzate le librerie condivise che occorrono alle applicazioni presenti nelle directory /bin e /sbin.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;* &lt;strong&gt;/boot&lt;/strong&gt; -  è il punto in cui il boot loader cerca per caricare il kernel.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;*&lt;strong&gt; /mnt&lt;/strong&gt; - questa directory rappresenta un generico mount point all’interno della quale è consigliabile montare i nostri fylesystem e i nostri dispositivi esterni.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;*&lt;strong&gt; /etc&lt;/strong&gt; - è la directory dove trovano luogo molti file di configurazione del sistema. Notiamo che la directory /etc/rc.d contiene gli script per l’avvio del sistema stesso.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;* &lt;strong&gt;/var&lt;/strong&gt; - questa directory contiene i dati di spooling quali &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=26352&amp;amp;redirect=e1ef9ce0176fcc16388d44307aa28fa6" class="JADV_Spot" id="JADVKey_7_0_9"&gt;mail&lt;/a&gt; e l’output del deamon della &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=1&amp;amp;url=160401&amp;amp;key=875&amp;amp;redirect=760822a96bcb54f5226e6495cbfbb69c" class="JADV_Spot" id="JADVKey_6_0_4"&gt;stampante&lt;/a&gt;. Nella directory /var/log sono invece contenuti i file di log del sistema.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;* &lt;strong&gt;/tmp&lt;/strong&gt; - in questa directory sono contenuti tutti quei file che debbono essere utilizzati temporaneamente. Ad esempio, dove si trovano i file scaricati se non altrimenti indicato.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;* &lt;strong&gt;/proc&lt;/strong&gt; - questa directory è in realtà uno pseudo filesystem che risiede nella memoria virtuale mantenendo lo stato di tutti quei dati, interni al sistema, altamente dinamici. La maggior parte delle informazioni presenti in /proc sono consistenti con lo stato corrente del sistema operativo correntemente in esecuzione.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;* &lt;strong&gt;/opt&lt;/strong&gt; - questa directory dovrebbe contenere tutto il &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=910&amp;amp;redirect=47991f1e938fe17a6f648f80ab56121d" class="JADV_Spot" id="JADVKey_8_0_6"&gt;software&lt;/a&gt; e i pacchetti aggiuntivi che non fanno parte dell’installazione di default. In realtà, questa directory non viene usata molto spesso benché faccia parte della struttura standard di una installazione UNIX.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;* &lt;strong&gt;/home&lt;/strong&gt; - in questa directory sono presenti, come sotto directory, le directory di tutti quegli utenti che hanno un account sul sistema.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;* &lt;strong&gt;/usr&lt;/strong&gt; - questa ha come sotto directory “/usr/bin”, “/usr/sbin” e “/usr/lib” che ha lo stesso scopo delle directory “/bin”, “/sbin” e “/lib”, ma che sono necessari durante la fase di boot del sistema. Molti file binari non essenziali all’utente o al sistema trovano luogo in questa directory. La directory /usr contiene anche la maggior parte della documentazione dei binari e delle librerie installate nel sistema.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;em&gt;di&lt;strong&gt; Giuseppe Lo Brutto&lt;/strong&gt; - &lt;a href="http://www.tuxjournal.net//" target="_blank"&gt;&lt;strong&gt;TuxJournal.net&lt;/strong&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/653211881945354215-5945308291888156900?l=giuseppelobrutto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/5945308291888156900/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=653211881945354215&amp;postID=5945308291888156900' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/5945308291888156900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/5945308291888156900'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/2008/03/alla-scoperta-del-file-system-di-linux.html' title='Alla scoperta del file system di Linux'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-653211881945354215.post-6886409930119019915</id><published>2008-02-25T01:21:00.000-08:00</published><updated>2008-02-25T01:23:27.482-08:00</updated><title type='text'>Mozilla Premia i Migliori plug-in per Firefox</title><content type='html'>&lt;div style="text-align: justify;"&gt;Mozilla ha reso noto i vincitori della competizione Extension Firefox 2 per le migliori estensioni, sviluppate da terzi, per il browser open source Firefox.&lt;br /&gt;Il primo premio se lo è aggiudicato lo sviluppatore Tony Farndon, UK; creatore della Minimap Sidebar Extension. Il suddetto plug-in permette agli utenti di visusualizzare le mappe di Google, Yahoo e Live Local in una barra laterale indipendente dalla finestra principale del browser Firefox.&lt;br /&gt;Il secondo premio è invece stato vinto da uno sviluppatore Italiano Massimilino Mirra per SamePlace. Il plug-in permette a Firefox di fungere da client per l’instant messaging per sei servizi differenti; incluso AIM, Yahoo Messenger e ICQ.&lt;br /&gt;Il terzo premio è invece andato a uno sviluppatore degli Stati Uniti d’America Jay Meattle per il plug-in Shareholic. Questo plug-in consente agli utenti di sottomettere pagine web verso Digg, Del.icio.us, MySpace e Facebook; direttamente dalla finestra del browser Firefox.&lt;br /&gt;A ogni vincitore verrà dato uno speciale kit di sviluppo, Ultimate Firefox Developer, il quale include un Macbook Pro nuovo con VMWare Fussion installato e un vioggio gratis al Mozilla Developer Day ovunque nel mondo.&lt;br /&gt;Mozilla ha anche premiato i dodici plug-in più promettenti ai quali invece è stato assegnato una speciale borsa Firefox messenger e gajets, insieme a un certificato del valore di $200 spendibile per libri della casa editrice O’Reilly.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/653211881945354215-6886409930119019915?l=giuseppelobrutto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/6886409930119019915/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=653211881945354215&amp;postID=6886409930119019915' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/6886409930119019915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/6886409930119019915'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/2008/02/mozilla-premia-i-migliori-plug-in-per.html' title='Mozilla Premia i Migliori plug-in per Firefox'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-653211881945354215.post-5270034833670249944</id><published>2008-02-19T00:03:00.000-08:00</published><updated>2008-12-10T20:54:20.900-08:00</updated><title type='text'>Il mondo terminerà il 19 Gennaio 2038</title><content type='html'>&lt;div style="text-align: justify;"&gt;Come molti di noi ricordano, l'ingresso dell'anno 2000 portò con sé la paura in tutto il mondo che i computer presenti all'interno delle industrie e dei vari Governi avrebbero smesso di funzionare in modo appropriato a causa del calcolo della data, bug noto a tutti con il nome di Millenium Bug. Questo avrebbe dovuto avvenire tra il 31 Dicembre 1999 e l'1 Gennaio 2000.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_cDOcUllT5zs/R7qPwfsZt7I/AAAAAAAAAEw/CE7b4IMvylM/s1600-h/time-icon.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_cDOcUllT5zs/R7qPwfsZt7I/AAAAAAAAAEw/CE7b4IMvylM/s320/time-icon.png" alt="" id="BLOGGER_PHOTO_ID_5168601585665292210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Mentre oggi possiamo ben affermare che in quel caso non ci sia stata una reale manifestazione del bug che abbia portato in crash i sistemi in quel momento in funzione, questo non potrebbe essere il caso per il bug Y2K38.&lt;br /&gt;Anche se questo bug avrà effetto sui soli sistemi operativi Unix e derivati, se fosse vero, sarà la causa di una massiva sventura che si abbatterà sul mondo dei computer e del mondo reale allo stesso tempo.&lt;br /&gt;&lt;/p&gt;In poche parole, il problema che si presenterà nel 2038 consiste nel fatto che i sistemi operativi Unix e derivati rappresentano internamente il tempo come il numero di secondi trascorsi dalla data 1 Gennaio 1970 alle ore 00:00:00. Su molti sistemi a 32-bit, il tipo di dato utilizzato per accumulare i secondi trascorsi a partire da quella data è il time_t che è un intero a 32-bit con segno.&lt;br /&gt;&lt;p&gt;Facendo un calcolo, l'ultima data che si può rappresentare con questo formato, seguendo lo standard POSIX, sarà il Giovedì 19 Gennaio 2038 alle ore 03:14:07 UTC. Al di là di questo precisto momento il contatore subirà un overflow che porterà a una rappresentazione interna del numero stesso come numero negativo.&lt;br /&gt;Da qui i problemi, il sistema interpreterà questo numero non come una data che indica il 2038 ma piuttosto il 1901. Proviamo a immaginare cosa può accadere se applicazioni del monto finanziario, nucleare, elettrico e dello stesso internet dovessero subire questo problema.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Ma sarà davvero così? Il trascorre del tempo sarà causa di panico? Non del tutto. In primo luogo, l'anno 2038 si presenterà in un momento molto lontano da noi e molte cose potranno cambiare in tutto questo tempo a venire. In secondo luogo, teniamo ben in mente che solo i sistemi a 32-bit sono soggetti a questo problema e che i sistemi a 64-bit stanno piano piano facendo il loro ingresso anche sulle macchine di uso domestico, oltre che nel mondo del lavoro. Inoltre, i sistemi a 64-bit presentano un arrotondamento della data che avverrà tra 290 bilioni di anni; il ché dovrebbe essere sufficiente per rassicurare tutti quanti noi.&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/653211881945354215-5270034833670249944?l=giuseppelobrutto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/5270034833670249944/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=653211881945354215&amp;postID=5270034833670249944' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/5270034833670249944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/5270034833670249944'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/2008/02/il-mondo-terminer-il-19-gennaio-2038.html' title='Il mondo terminerà il 19 Gennaio 2038'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_cDOcUllT5zs/R7qPwfsZt7I/AAAAAAAAAEw/CE7b4IMvylM/s72-c/time-icon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-653211881945354215.post-5202463537554118289</id><published>2008-01-31T07:39:00.000-08:00</published><updated>2008-01-31T07:43:09.664-08:00</updated><title type='text'>10 anni: da Netscape a Firefox</title><content type='html'>Sono già trascorsi dieci anni da quando Netscape annunciava il rilascio al pubblico del codice sorgente del suo prodotto simbolo, rendendolo di fatto un prodotto Open Source; era Netscape Communicator 5. &lt;p align="center"&gt;&lt;img src="http://www.tuxjournal.net/wp-content/uploads/2007/09/mlogo.gif" height="73" width="182" /&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="more-2387"&gt;&lt;/span&gt;Questa decisione fu presa da Netscape nel momento in cui Mozilla era il web browser che dominava la scena. Nello stesso periodo il prodotto della Microsoft, &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=1179&amp;amp;redirect=e62d853d6c6b9f43daa8cefe489c1ca5" class="JADV_Spot" id="JADVKey_1_0_4"&gt;Internet&lt;/a&gt; Explorer (IE), stava guadagnando, inesorabilmente, quote di mercato. Ciò grazie al fatto che in quel periodo per avere Mozilla occorreva pagare una quota di 30$, mentre IE era all’inizio liberamente scaricabile come prodotto stand-alone, per poi essere fornito insieme al &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=26396&amp;amp;redirect=c75c6ecf1071d84bf6e6fee5aa7b1ec9" class="JADV_Spot" id="JADVKey_2_0_7"&gt;sistema &lt;/a&gt;&lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=26396&amp;amp;redirect=c75c6ecf1071d84bf6e6fee5aa7b1ec9" class="JADV_Spot" id="JADVKey_3_1_7"&gt;operativo&lt;/a&gt; Windows 95 prima e Windows 98 poi.&lt;/p&gt; &lt;p&gt;In una situazione di mercato che per Netscape diventava sempre più scivolosa e incerta, Netscape prese la decisione di focalizzare i propri sforzi verso i prodotti di fascia Enterprise donando all’Open Source il proprio browser. Questo ha avuto ripercussioni per il mondo degli sviluppatori Open Source consentendo loro di lavorare, volontariamete, sul prodotto.&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://www.foxkeh.com/downloads/history/history-original.pdf"&gt;&lt;img src="http://www.tuxjournal.net/wp-content/uploads/2008/01/mozilla_timeline.png" alt="mozilla_timeline.png" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Riassumendo, nel tempo Mozilla diventerà il nome del progetto Open Source, la socità AOL acquisirà Netscape e IE raggiungerà il 90% dell’intero mercato, dando origine a quello che poi sarebbe stato il peggior periodo nella storia dei web browser. Nel 2002, Mozilla rilascerà poi la sua prima versione, accompagnata dal mantra: noi siamo costruttori di piattaforme, siamo dalla parte degli sviluppatori, lasciamo lo sviluppo di prodotti ad altri.&lt;/p&gt; &lt;p&gt;Successivamente subentrò Phoenix che partendo dall’intera suite di Mozilla ne realizzò un prodotto di consumo. Prima Phoenix e poi Firefox, che diventerà un prodotto di successo nel 2004, dimostrando che l’approccio orientato verso gli utenti è quello vincente al fine di raggiungere gli obiettivi prefissati da Mozilla.&lt;/p&gt; &lt;p&gt;Dopo dieci anni, tra un altalenarsi di tempi duri e buoni, di frustrazioni e soddisfazioni, il successo di Mozilla è un qualcosa che noi, cittadini interconnessi dalla rete delle reti, possiamo tranquillamente celebrare con il resto del mondo.&lt;/p&gt; &lt;p&gt;&lt;em&gt;di&lt;strong&gt; Giuseppe Lo Brutto&lt;/strong&gt; - &lt;a href="http://www.tuxjournal.net//" target="_blank"&gt;&lt;strong&gt;TuxJournal.net&lt;/strong&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/653211881945354215-5202463537554118289?l=giuseppelobrutto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/5202463537554118289/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=653211881945354215&amp;postID=5202463537554118289' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/5202463537554118289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/5202463537554118289'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/2008/01/10-anni-da-netscape-firefox.html' title='10 anni: da Netscape a Firefox'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-653211881945354215.post-7918664079170759565</id><published>2008-01-28T14:33:00.000-08:00</published><updated>2008-02-11T07:23:40.456-08:00</updated><title type='text'>Il Mondo del Software Secondo me</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;style type="text/css"&gt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Da un pò di tempo ho iniziato a interessarmi di progetti sofware cercando di raccogliere informazioni circa le esperienze di vari Project Manager che nel tempo sono stati responsabili dell’esecuzione e della messa in opera di vari progetti software. In questo articolo ho cercato di sintetizzare eventi e riflessioni che più di frequente determinano il successo o il fallimento di un progetto software a fronte di varie esperienze maturate sul campo. Ritengo che questo possa essere utile quando affrontiamo l’attuale mondo dello sviluppo software.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Ormai sempre più spesso, noi gente del settore software, proveniamo da un mondo che ci ha fornito un apprendimento strutturato, qualcosa che in alcuni casi chiamiamo scienza e in altri ingegneria. Durante il nostro processo di apprendimento ci può sembrare che giunti nel mondo esterno per lavorare possiamo applicare gli stessi concetti e eseguire le stesse attività; ma molto più importante, ci aspettiamo un alto livello di successo, in modo simile all’esperienza da noi maturata alla fine di progetti e compiti che ci erano stati assegnati durante gli anni accademici. Ma purtroppo, il mondo non si comporta in questo modo.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Le statistiche dicono ben altro: si presume che il 50/80% dei progetti software fallisce. Questo rende il mondo dello sviluppo software alquanto inaffidabile. Un software cattivo di solito irrita le persone, ma un cattivo ingegnere può uccidere; ne sono testimonianza alcuni tra i più noti “software flop”.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Una metrica, per certi versi, più affascinante è la seguente: il 5% dei programmatori sono 20 volte più produttivi del restante 95%. Se questa fosse uan tesi comprovata, potremmo risolvere il problema su come far raggiungere a tutti quanti lo stesso livello.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Lasciatemi dire che questa regola segue la solita regola dell’80-20. In poche parole, l’80% dei programmatori non leggono libri, non vanno alle conferenze, non continuano a studiare, non fanno niente eccetto quello che hanno imparato all’università. Il restante 20% lotta giorno dopo giorno con la sua professione, leggono, provano a imparare nuove cose, ascoltano conferenze su internet (podcast) e qualche volta vanno alle conferenze. L’80% di questo 20% non riscuotono un gran successo. Il restante 20% di questo 20% (diciamo circa il 5% dell’intero) sono i 20 volte più produttivi.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Adesso il punto è: come facciamo a entrare a far parte di questo prodigioso 5%?&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Le persone che fanno parte di questo 5% lottano per raggiungere quelle performance e continuano a lottare per rimanerci. E’ il processo del continuo apprendimento che fa la differenza. Leggono molto, sono sempre pronti a affrontare un nuovo concetto se sembra degno di attenzione e molto del loro tempo viene speso nell’essere produttivi e nel risolvere problemi. Essere capaci di analizzare e capire una situazione o scoprire il punto cardine di un problema per loro è essenziale.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Occore quindi innescare un processo di continuo apprendimento; ma non è così semplice. E’ enormemente importante impare di più sulla programmazione, ma non possiamo solo imparare di più sulla programmazione. Per esempio, giusto nel mondo della scrittura del codice esistono due importanti punti:&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;&lt;p&gt;Il codice viene letto più di quanto  venga scritto. Se le persone non potranno leggere il tuo codice,  allo stesso modo non potranno apportare dei miglioramenti o fissare  i bug. Il codice illegibile ha un costo reale che viene chiamato  “debito tecnico”.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;La revisione del codice rappresenta il modo più  efficace per scovare i difetti e ancora, di solito “non abbiamo  tempo per eseguirla”.&lt;/p&gt; &lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Provenendo da un mondo fatto da zero e da uno, ci piacerebbe credere che le cose siano deterministiche, che possiamo fornire un insieme di input e ottenere, ogni volta, lo stesso output. Il nostro è un “business” giovane e per certi versi primitivo. Non sappiamo molto, tra le metodologie da applicare, su cosa funziona e cosa no e continuiamo a pensare, ogni volta che si presenta una nuova metodologia, di aver trovato la panacea a tutti i mali e che possa risolvere tutti i guai dello sviluppo software. In conseguenza di ciò, subiamo le idee su nuovi cicli di sviluppo che arrivano, si diffondono per poi allentare la loro presa e far posto ad altre idee. Secondo la mia opinione esiste un’eccezione; molte idee delle metodologie agili sembrano nel tempo continuare a mantenere il loro vigore. Mostrano di avere un reale impatto nella produttività e nella qualità del software. Questo perché si focalizzano sui problemi delle persone che lavorano insieme e meno sulle tecnologie adottate.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;L’esperienza suggerisce: “Ciò che porta al successo o al fallimento di un progetto software sono i problemi che si presentano nei processi e nelle persone conivolte”. Quindi, il modo in cui lavoriamo giorno per giorno. Gli ingredienti che possono formare la miscela esplosiva sono: chi sono i tuoi architetti, chi sono i tuoi manager e chi sono le persone che compongono il team con cui lavoriamo. Come comunichiamo ma soparattutto, come risolvi i problemi di processo e delle persone quando si presentano. Il modo migliore per bloccarsi su queste questioni è pensare che è tutta colpa della tecnologia adottata e credere che noi possiamo sfondare gli ostacoli sfruttando altre vie. Queste altre vie sono quelle che avranno la probabilità più elevata di farti bloccare in modo definitivo.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Certe volte si forma nella nostra mente l’idea che i nostri manager prendano decisioni stupide e logicamente, raggiungiamo la conclusione che i manager e il management è stupido, come se fosse una conseguenza logica. E’ idea diffusa che nel nostro mestiere se non sei abbastanza in gamba per gestire una tecnologia ti dedichi al mangement. In poche parole il ruolo del manager viene da noi sviluppatori “snobbato”. Analizzando con criticità il ruolo che il manager svolge all’interno di un progetto software deduco che il compito del manager non è affatto stupido (fatto salvo che lui stesso non lo sia come persona in sé) e al contrario alquanto difficile. La gestione è più difficile della tecnologia in quanto non coinvolge fattori deterministici. E’ tutto un lavoro da “indovino”. Se non sei dotato di una buona intuizione molto probabilmente prenderai decisioni stupide.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Avendo raggiunto questo punto dell’articolo, quando iniziamo un nuovo lavoro con la testa piena di conoscenze tecniche, derivate dagli ultimi due anni di esperienza e ci guardiamo un pochettino in torno provando a osservare i collegh che ci circondano, possiamo essere tentati ad assumere che ogni persona impiegata nell’azienda ha intrappolato se stessa con pessime idee. Ma a me piace pensare che: “Le cose oggi sono vengono fatte in un certo modo perché i fatti sono andati in quel modo... un passo alla volta”. Dal tuo punto di vista le cose possono sembrare ridicole, ma ricordiamoci che ogni decisione presa fino a oggi è stata presa da qualcuno che ha soppesato il problema e ha scelto quello che sembrava la migliore scelta in quel momemto. Certamente questo punto di vista non risolve i problemi in cui incorriamo ma ci rende più compassionevoli verso le persone che sono impantanate in problemi e concetti di varia natura.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Ci occorrerà fare molti errori al fine di risolvere i problemi. Siamo umili e facciamo domande di continuo.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/653211881945354215-7918664079170759565?l=giuseppelobrutto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/7918664079170759565/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=653211881945354215&amp;postID=7918664079170759565' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/7918664079170759565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/7918664079170759565'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/2008/01/il-mondo-del-software-secondo-me.html' title='Il Mondo del Software Secondo me'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-653211881945354215.post-7225615239018765933</id><published>2008-01-24T00:31:00.000-08:00</published><updated>2008-01-24T00:34:17.281-08:00</updated><title type='text'>Automatizzare Firefox con iMacros</title><content type='html'>Svolgete regolarmente delle azioni attraverso un browser web? Siete degli sviluppatori che vogliono automaticamente testare l’interfaccia della propria applicazione Web evitando ogni volta di riempire le form o ricordare le password? Oppure, volete loggarvi su tutti i siti che regolarmente visitate ogni giorno con un click? Se ricadete in una di queste categorie, dovreste dare un’occhiata all’estensione iMacros di Firefox. &lt;p align="center"&gt;&lt;img src="http://www.tuxjournal.net/wp-content/uploads/2007/05/firefoxlogosidetext.jpg" height="76" width="210" /&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="more-2283"&gt;&lt;/span&gt;La società che lo ha sviluppato è la iOpus che offre due versioni del plugin, una versione free e una a pagamento; che come potete intuire mette a disposizione delle funzionalità in più. Tuttavia già la versione free è un ottimo strumento di ausilio al lavoro.&lt;/p&gt; &lt;p&gt;Un volta installato, iMacros aggiunge un nuovo bottone alla barra principale di navigazione. Cliccando su di esso, viene aperta una barra laterale che mostra la lista di tutte le macro già registrate, oltre ad alcuni bottoni e tab che controllano le macro.&lt;/p&gt; &lt;p&gt;Ecco alcuni esempi di cosa è possibile fare con iMacros:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;E’ possibile evitare di controllare giornalmente dei siti, ricordarsi le password di ogni sito, riempire form. Tutte le informazioni vengono memorizzate in formato testuale. Le password vengono memorizzate in modo sicuro con crittografia AES a 256 bit.&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;E’ possibile automatizzare il download di immagini, file, o addirittura di intere pagine Web. Possiamo anche automatizzare l’upload di dati verso un &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=786&amp;amp;redirect=7cef72cae782e41ccf283687b687c450" class="JADV_Spot" id="JADVKey_1_0_2"&gt;sito &lt;/a&gt;&lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=786&amp;amp;redirect=7cef72cae782e41ccf283687b687c450" class="JADV_Spot" id="JADVKey_2_1_2"&gt;Web&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;Con il comando &lt;em&gt;extract&lt;/em&gt;, iMacros legge automaticamente dati da un sito Web e li estrartai in un file .CVS&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;Gli sviluppatori web grazie ad iMacros possono effettuare i test funzionali, di performance e di regressione su applicazioni Web.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Infine, è possibile condividere le proprie iMacros con colleghi e amici semplicemente facendo un bookmark della propria macro e renderla disponibile come link da includere nella propria hompage, blog o intranet. E’ possibile anche utilizzare questa funzionalità per far sì che iMacros riempia le form al posto dei visitatori del nostro sito.&lt;/p&gt; &lt;p&gt;In conclusione, iMacros è un ottimo strumento di ausilio durante lo sviluppo di siti Web. Grazie alle funzionalità che mette a disposizione, permette di automatizzare i test da effettuare sulle interfacce Web con il minimo sforzo. Se coadiuvato con un altro plugin Firefox per il Web Development, non vi occorre altro per analizzare e testare il Web tier delle vostre applicazioni.&lt;/p&gt; &lt;p&gt;Nel caso siate interessati ad altre idee su come utilizzare iMacros potete consultare &lt;a href="http://www.iopus.com/imacros/firefox"&gt;questa pagina&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;em&gt;di&lt;strong&gt; Giuseppe Lo Brutto&lt;/strong&gt; - &lt;a href="http://www.tuxjournal.net//" target="_blank"&gt;&lt;strong&gt;TuxJournal.net&lt;/strong&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/653211881945354215-7225615239018765933?l=giuseppelobrutto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/7225615239018765933/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=653211881945354215&amp;postID=7225615239018765933' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/7225615239018765933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/7225615239018765933'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/2008/01/automatizzare-firefox-con-imacros.html' title='Automatizzare Firefox con iMacros'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-653211881945354215.post-2082319555350208508</id><published>2008-01-11T00:58:00.000-08:00</published><updated>2008-01-11T01:05:33.803-08:00</updated><title type='text'>lshw: ottenere il profilo hardware del proprio PC</title><content type='html'>&lt;p&gt;Recentemente ho avuto bisogno del profilo o meglio delle specifiche hardware delle macchine che di solito uso. Come possiamo ottenere un profilo completo delle nostre macchine tramite &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=910&amp;amp;redirect=653abd14a8e4e0769984d1118cfc720d" class="JADV_Spot" id="JADVKey_1_0_2"&gt;software&lt;/a&gt; libero ed open source?&lt;/p&gt;  &lt;p&gt;&lt;span id="more-2238"&gt;&lt;/span&gt;Avendo un po di conoscenza dei sistemi &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=26360&amp;amp;redirect=2756289e058d9f9f236436c795817b87" class="JADV_Spot" id="JADVKey_2_0_8"&gt;Linux&lt;/a&gt;, la prima cosa che salta in mente è quella di andare a guardare nelle directory &lt;em&gt;/proc/cpuinfo&lt;/em&gt; e &lt;em&gt;/proc/meminfo&lt;/em&gt; per ottenere informazioni circa &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=1183&amp;amp;redirect=6b6bfe1e5fafc9d95b475ca2ebcd0647" class="JADV_Spot" id="JADVKey_3_0_5"&gt;CPU&lt;/a&gt; e RAM grazie ai seguenti comandi:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;&lt;em&gt; cat /proc/cpuinfo &gt; myhwprof.txt&lt;br /&gt;cat /proc/meminfo &gt;&gt; myhwprof.txt&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Prutroppo, il risultato di questi comandi è né completo, né presentabile. Per esempio, un profilo del sistema hardware deve contenere almeno la marca della macchina, il modello, interfacce hardware come quella wireless e Ethernet LAN, più altre informazioni.&lt;/p&gt; &lt;p&gt;Dopo varie &lt;a target="_blank" href="http://www.juiceadv.com/banner_showext5.asp?tipo=2&amp;amp;url=160401&amp;amp;key=798&amp;amp;redirect=1af7dd895e424fd43839d5b74451fe3d" class="JADV_Spot" id="JADVKey_4_0_0"&gt;ricerche&lt;/a&gt; mi sono imbattuto nel comando &lt;a href="http://ezix.org/project/wiki/HardwareLiSter" target="_blank"&gt;&lt;strong&gt;lshw&lt;/strong&gt;&lt;/a&gt; da eseguire da linea di comando. &lt;em&gt;lshw&lt;/em&gt; è un piccolo strumento per estrarre dettagliate informazioni sulla configurazione hardware delle macchine. Può riportare informazioni dettagliate circa la configurazione della memoria, le versioni del firmware&lt;br /&gt;installate, la configurazione della scheda madre, la versione della CPU e la sua velocità, la configurazione della cache, la velocità del bus ecc.&lt;/p&gt; &lt;p&gt;Fortunatamente il comando lshw supporta il formato html che è un formato più presentabile se comparato con cpuinfo e meminfo. Da una macchina con Ubuntu come OS lanciamo il comando:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;&lt;em&gt; sudo lshw -html &gt; myHardwareProfile.html&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apriamo il file così prodotto con un browser web ed il gioco è fatto.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Giuseppe Lo Brutto&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;em&gt;&lt;a href="http://www.tuxjournal.net//" target="_blank"&gt;&lt;strong&gt;TuxJournal.net&lt;/strong&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/653211881945354215-2082319555350208508?l=giuseppelobrutto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giuseppelobrutto.blogspot.com/feeds/2082319555350208508/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=653211881945354215&amp;postID=2082319555350208508' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/2082319555350208508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/653211881945354215/posts/default/2082319555350208508'/><link rel='alternate' type='text/html' href='http://giuseppelobrutto.blogspot.com/2008/01/lshw-ottenere-il-profilo-hardware-del.html' title='lshw: ottenere il profilo hardware del proprio PC'/><author><name>Giuseppe Lo Brutto</name><uri>http://www.blogger.com/profile/03861373133376558791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
