Davide Muzzarelli » * livello intermedio /blog L'informatica a valore aggiunto Mon, 25 May 2015 22:41:52 +0000 en hourly 1 http://wordpress.org/?v=3.3.2 New Smarty plugin for highlighting PHP code /blog/2011/02/new-smarty-plugin-for-highlighting-php-code/ /blog/2011/02/new-smarty-plugin-for-highlighting-php-code/#comments Mon, 21 Feb 2011 15:19:54 +0000 Davide Muzzarelli /blog/?p=241 I want to signal a new plugin for highlighting PHP code.

I wrote this modifier for Smarty, a template engine for PHP that I am using for a long time.

The plugin can be downloaded from here.

The license is the New BSD.

The usage is very simple:
{$php_code|highlight}

]]>
/blog/2011/02/new-smarty-plugin-for-highlighting-php-code/feed/ 0
Installare il modem Huawei E220 di Tim sotto Ubuntu /blog/2008/10/installare-il-modem-huawei-e220-di-tim-sotto-ubuntu/ /blog/2008/10/installare-il-modem-huawei-e220-di-tim-sotto-ubuntu/#comments Fri, 31 Oct 2008 16:53:00 +0000 Davide Muzzarelli /blog/2008/10/installare-il-modem-huawei-e220-di-tim-sotto-ubuntu/ In questi giorni ho avuto a che fare con il modem Huawei E220 che Tim fornisce col proprio abbonamento a banda larga via GSM/GPRS/EDGE/UMTS/HSDPA.

Ho installato il dispositivo sotto Kubuntu 8.04 Heron utilizzando Kppp, ma si può usare anche Gnome-ppp oppure wvdial. Lo Huawei ha funzionato sia come GSM che come UMTS, non ho avuto la possibilità per provare l’HSDPA dato che è una rete ancora rara da trovare.


Lo Huawei è composto principalmente da un modem e da una memoria di massa che contiene il software necessario per Windows. Naturalmente GNU/Linux non ha bisogno della memoria di massa per poter usare il modem appieno. ;)

I parametri da impostare col dialer sono i seguenti:
Numero di telefono: *99***1#
Dispositivo: /dev/ttyUSB0
Velocità: 460800
Stringa di inizializzazione (la numero 2 per Kppp oppure la numero 5 per Gnome-ppp): AT+cgdcont=1,”ip”,”ibox.tim.it”
Attendi il segnale prima di comporre il numero?: No.
Username: qualsiasi va bene.
Password: qualsiasi va bene.

I parametri per Wind sono simili:
Stringa di inizializzazione: AT+cgdcont=1,”ip”,”internet.wind”
Numero di telefono: *99#

Con una installazione semplice il dispositivo funziona a casaccio (si connette una volta su dieci), questo perché viene riconosciuta prima la memoria di massa che il modem. L’installazione semplice consiste nell’inserire il dispositivo nella presa USB, eseguire il comando:

sudo modprobe usbserial vendor=0x12d1 product=0x1003

…poi staccare il dispositivo, attendere qualche secondo e reinserire il dispositivo.

Una piccola nota, in alcuni casi il codice di prodotto dello Huawei E220 è lo 0×1001 al posto dello 0×1003.

Si può automatizzare il tutto creando il file /etc/udev/rules.d/50-huawei-e220.rules con questo contenuto:

SUBSYSTEM=="usb", SYSFS{idProduct}=="1003", SYSFS{idVendor}=="12d1", RUN+="/sbin/modprobe usbserial vendor=0x12d1 product=0x1003"SUBSYSTEM=="usb", SYSFS{idProduct}=="1003", SYSFS{idVendor}=="12d1", RUN+="/sbin/modprobe ppp_generic"

Spendendo un po’ di tempo con Google ho messo a punto una soluzione alternativa per cui è sufficiente procedere con i seguenti passi che riporto per esteso:

  1. Configurare Kppp, Gnome-ppp oppure wvdial con i parametri riportati prima.
  2. Scaricare il file http://oozie.fm.interia.pl/src/huawei.tar.bz2 e scompattarlo.
  3. Entrare dentro la directory appena creata ed eseguire:
    sudo make ubuntu_install
  4. Modificare il file /etc/modprobe.d/blacklist e aggiungere alla fine:
    blacklist airprime
  5. Riavviare il computer.

Il primo passo scarica una serie di file per permettono a UDEV di riconoscere correttamente il dispositivo. Dato che sono file già pronti in questo modo evito di doverli pubblicare qui sul blog.
Il secondo passo installa tali file.
Il terzo passo è necessario per via di un bug, ovvero che viene caricato il modulo “airprime” che è incompatibile con lo Huawei. In pratica, tale modulo caricherebbe a caso il dispositivo della memoria di massa piuttosto che il modem rendendo difficile potersi connettere. Mettendo il modulo in blacklist questo non viene mai caricato e il dispositivo è così riconosciuto correttamente.
Dalla versione 2.6.29 del Kernel verrà rimosso definitivamente il modulo “airprime” risolvendo la questione una volta per tutte.

Una volta inserito il dispositivo è necessario aspettare una decina di secondi circa prima che esso sia pronto per la connessione.

]]>
/blog/2008/10/installare-il-modem-huawei-e220-di-tim-sotto-ubuntu/feed/ 5
Controllare la scadenza dei propri domini in un colpo solo /blog/2008/09/controllare-la-scadenza-dei-propri-domini-in-un-colpo-solo/ /blog/2008/09/controllare-la-scadenza-dei-propri-domini-in-un-colpo-solo/#comments Sat, 20 Sep 2008 16:58:00 +0000 Davide Muzzarelli /blog/2008/09/controllare-la-scadenza-dei-propri-domini-in-un-colpo-solo/ Se abbiamo molti domini registrati con diverse aziende e vogliamo controllare lo stato delle scadenze per ognuno abbiamo solo due possibilità: controllare il whois a mano oppure entrare in tutti i pannelli di controllo dei servizi di registrazione e controllare da essi.

In alternativa propongo uno script di una sola riga per controllare una lista di domini:

for k in $(cat "domini.txt"); do echo "** $k **:" && whois "$k" | grep Expir; done > aggiornamenti.txt

Naturalmente funziona su tutti i sistemi Unix like come MacOS e Linux.

Lo script prende la lista dei domini dal file “domini.txt” e crea un file “aggiornamenti.txt”, con l’elenco dei domini e le date di scadenza.

Non è uno script molto raffinato ma è sufficiente per controllare lo stato delle scadenze in un colpo solo, risparmiando un sacco di tempo.

]]>
/blog/2008/09/controllare-la-scadenza-dei-propri-domini-in-un-colpo-solo/feed/ 1
Google Chrome, una panoramica sul nuovo browser /blog/2008/09/google-chrome-una-panoramica-sul-nuovo-browser/ /blog/2008/09/google-chrome-una-panoramica-sul-nuovo-browser/#comments Mon, 08 Sep 2008 23:24:00 +0000 Davide Muzzarelli /blog/2008/09/google-chrome-una-panoramica-sul-nuovo-browser/ E’ in pieno sviluppo Chrome, il nuovo browser targato Google.

In questo post voglio mostrare in anteprima le caratteristiche e le possibilità che possono aprirsi. Le novità sono veramente tantissime, anche se Firefox si sta già muovendo in un modo molto simile. Infatti, gli ingegneri di Google hanno preso a piene mani il codice di Firefox (ex Mozilla) e di Webkit (ex Konqueror).

Tutto il browser è stato concepito sotto un’unità base che è il tab. Il tab è stato reso completamente indipendente da tutti gli altri tab aperti, addirittura dal browser stesso. Ogni tab è un processo a parte ed in questo modo è possibile sfruttare appieno i computer multiprocessore. I tab sono staccabili e incollabili in una finestra a parte e questo, teoricamente, potrebbe rendere possibile lo scambio di pagine web tra applicazioni diverse.
E’ anche possibile staccare un tab e metterlo in una finestra sola eliminando tutta la parte dell’interfaccia che non serve: ovvero il sito web sembrerà un’applicazione desktop vera e propria.


Il multiprocess è stato spinto il più possibile per rendere le pagine più veloci, più stabili (ogni tab è un mondo a parte protetto da tutto il resto e da cui non può uscire nulla), con una memoria più ottimizzata per chi usa spesso il browser (chiudendo un tab la memoria viene liberata immediatamente e in modo più sicuro a scapito di un po’ di memoria utilizzata in più in generale) e più stabile (un tab che consuma troppe risorse o si blocca non influisce sull’intero browser).

La stabilità del browser è garantita da milioni di test alla settimana, cosa che solo un motore di ricerca può fare, e dall’indipendenza dei tab che non bloccano il browser se capita un problema.

La sicurezza segue la stessa via della stabilità grazie all’indipendenza dei tab che si trovano così in una sandbox dove diventano pressoché disarmati. Anche i plugin girano in un processo separato con un sistema di permessi che ne controlla le azioni.

JavaScript è la tecnologia che interessa maggiormente a Google. Hanno trasformato un linguaggio di scripting in un linguaggio compilato in tempo reale, questo significa più velocità in fase di esecuzione a scapito del tempo impiegato durante il caricamento della pagina in fase di compilazione. Dato che negli ultimi due anni si tende ad usare Ajax per creare applicazioni web, questo torna molto utile perché significa un drastico miglioramento nella responsività dell’applicazione.
Oltre a questo è stato migliorato il garbage collector e la gestione degli oggetti, i quali meriterebbero quasi un post a parte.


Google non poteva non includere Gears: il framework per creare plugin e applicazioni web ricche di funzionalità. Dal lato degli sviluppatori, Chrome include anche la possibilità di vedere i consumi di una pagina espressi in memoria utilizzata, CPU e consumo di banda. Per ora non c’é molto altro su questo fronte a parte una console e un debugger JavaScript che preferisco vedere prima di commentare.
All’inizio non ci sarà supporto per HTML5 e CSS3 per cui si dovrà aspettare una versione successiva.

La parte più curata sembra invece essere un’altra, ovvero la usabilità. Ci sono diversi particolari che ne denotano la cura e numerose feature che possono essere molto appetibili per un’utente comune.
L’interfaccia è semplice, anzi, semplicissima. I tab sono sopra la barra degli indirizzi e dei controlli così da rendere chiaro il contenuto e più intuitivo lo staccare il tab dalla finestra per utilizzarlo a parte. Le feature sono state ridotte al minimo così come i pulsanti.
La possibilità di staccare un tab e di farne un’applicazione senza i soliti controlli del browser è stato un colpo di genio; non è un’idea loro ma è come la implementano che fa la differenza. Utilizzare Gmail o un’altra applicazione web sarà notevolmente più comodo.


I pop-up vengono tutti bloccati e mostrati in fondo al tab così da aprire solo quelli che interessano. Non so quanto possa essere una buona idea per un utente inesperto, che di solito non vede nemmeno cosa appare sotto al suo mouse, ma è sicuramente un grosso aiuto per tutti gli altri un po’ più smaliziati.
Chrome dispone anche di una home page, molto simile a quella proposta da Opera, che mostra nove riquadri dei siti più visitati e una lista con le ricerche più frequenti. Non credo che utilizzerò mai questa pagina ma sono sicuro che per un utente comune sarà una ventata di aria fresca.
La barra dell’url è stata studiata appositamente per evitare i tentativi di phishing e per ricercare con pochi tasti il sito giusto sul quale si desidera navigare.
Alcuni browser come Firefox e Konqueror hanno una barra di ricerca accanto a quella dell’url. Per aggiungere un motore di ricerca in tale barra è necessario cercare e scaricare dei piccoli plugin. Chrome va oltre: è in grado di catturare il form di ricerca di un sito qualsiasi e di metterlo nella barra di ricerca. E’ tutta tecnologia semplice, ma il fatto di averla implementata correttamente ne vale tutto il merito.


Sono stati introdotti anche i tab “oscurati”, chiamati “incognito”, i quali non vengono indicizzati nella home page in modo da preservare al massimo la privacy dell’utente. Alla chiusura di un tab anonimo viene immediatamente svuotata la cache e cancellati tutti i dati (cookie e sessioni comprese). Possono tornare utili per fare operazioni bancarie o per nascondere i siti navigati agli occhi di altre persone. Secondo il mio parere questo potrebbe essere un primo passo per rendere più sicura la navigazione in condizioni di mobilità, ovvero utilizzando computer di altre persone o quelli degli internet cafè.
Attenzione, questo non significa che la navigazione sia sicura al 100% perché chiunque può controllare i dati in entrata ed in uscita dal computer.

Google ha quindi preso a piene mani dal codice open-source e sempre con codice open-source ci regala questo browser e tutte le tecnologie ad esso collegate, pronte per essere migliorate dalla comunità e implementate in altre applicazioni.

C’é tanta carne al fuoco ma anche un progetto veramente credibile e con uno scopo ben preciso rispetto a molti altri progetti simili. Solo il tempo darà ragione a Google dato che il prodotto è ancora in beta, ad ogni modo le prospettive sono molto allettanti e si spera di migliorare la situazione anche per noi sviluppatori che ci troviamo spesso a litigare contro browser poco aderenti agli standard: il motore Webkit è infatti quello più aderente agli standard fra tutti e, grazie all’impegno di Google, la situazione potrà sicuramente migliorare.

]]>
/blog/2008/09/google-chrome-una-panoramica-sul-nuovo-browser/feed/ 2
Come si diventa game developer? /blog/2008/05/come-si-diventa-game-developer/ /blog/2008/05/come-si-diventa-game-developer/#comments Fri, 23 May 2008 16:52:00 +0000 Davide Muzzarelli /blog/2008/05/come-si-diventa-game-developer/ Come si diventa game developer? A questa domanda noi di GPI abbiamo risposto su Punto-Informatico al seguente link.

]]>
/blog/2008/05/come-si-diventa-game-developer/feed/ 0
Backpack Update – Aggiornamento per Backpack /blog/2007/07/backpack-update-aggiornamento-per-backpack/ /blog/2007/07/backpack-update-aggiornamento-per-backpack/#comments Wed, 25 Jul 2007 20:52:00 +0000 Davide Muzzarelli /blog/2007/07/backpack-update-aggiornamento-per-backpack/ Since few hours Backpack has been updated and it is avaiable the new API that correct various problematic that plagued it.
The Python client that I have wrote will be updated too and published soon.

The new features will be:
- multi list management;
- all objects of the pages can now be ordered;
- the old page descriptions are now notes;
- page links have been deprecated;
- search function;
- separators;
- the tags bug could be now resolved.

Some problems still seem not to have benn taken in consideration, like the export of filed and images. Together with others developers we are making pressure in order to have the possibility to manage them through API, but 37signals still does not answer to our demands.

Backpack: Get Organized and Collaborate

Da poche ore è stato aggiornato Backpack ed è disponibile la nuova API che corregge diverse problematiche che lo affliggevano.
Il client per Python che ho preparato sarà presto aggiornato e pubblicato.

Le nuove funzionalità saranno:
- gestione di più liste;
- posizionamento degli oggetti nella pagina;
- la descrizione delle pagine è ora diventata una nota come le altre;
- i link tra le pagine sono ora deprecati;
- funzione di ricerca;
- separatori;
- il bug dei tag ora dovrebbe essere risolto.

Alcuni problemi sembrano non essere ancora stati presi in considerazione, come l’esportazione di immagini e file. Assieme ad altri sviluppatori stiamo facendo pressione per avere la possibilità di gestirli tramite API ma 37signals ancora non risponde alle nostre domande.

]]>
/blog/2007/07/backpack-update-aggiornamento-per-backpack/feed/ 0
Backpack Client for Python /blog/2007/07/backpack-client-for-python/ /blog/2007/07/backpack-client-for-python/#comments Tue, 24 Jul 2007 14:46:00 +0000 Davide Muzzarelli /blog/2007/07/backpack-client-for-python/ A Backpack client API for Python will be released soon.

Ready features:
- API interface and object interface;
- creation and updating of Backpack objects with a single save method;
- objects avaiables: pages, notes, items, tags but also lists!
- page linking;
- page sending via email;
- support for SSL (not tested).

Next features:
- data exporting;
- emails;
- reminders;
- page sharing.

Because of some Backpack bugs and mistakes some features are not yet ready and I prefer to wait for the first release.

Stay tuned!

Backpack: Get Organized and Collaborate

Il client Python per sfruttare l’API di Backpack verrà rilasciato presto.

Funzionalità già disponibili:
- interfaccia in stile API ed a oggetti;
- creazione e modifica degli oggetti di Backpack con un singolo metodo “save”;
- oggetti disponibili: pagine, note, appunti ma anche liste!
- link tra le pagine;
- spedizione delle pagine via email;
- supporto per SSL (non testato).

Prossime funzionalità:
- esportazione di tutte le pagine;
- email;
- promemoria;
- condivisione delle pagine.

A causa di alcune imprecisioni nella documentazione ed alcuni errori nell’API di Backpack alcune funzionalità non sono ancora pronte per cui ho preferito aspettare prima di pubblicare la prima release.

]]>
/blog/2007/07/backpack-client-for-python/feed/ 0
Duplicare un sistema di directory – alla faccia di TreeCopy /blog/2007/03/duplicare-un-sistema-di-directory-alla-faccia-di-treecopy/ /blog/2007/03/duplicare-un-sistema-di-directory-alla-faccia-di-treecopy/#comments Fri, 02 Mar 2007 13:25:00 +0000 Davide Muzzarelli /blog/2007/03/duplicare-un-sistema-di-directory-alla-faccia-di-treecopy/ Oggi è recensito su Punto Informatico un piccolo programma per Windows che copia un sistema di cartelle in un’altra posizione.

Punto Informatico ne motiva l’uso:
“Può capitare di ritrovarsi (specie a chi classifica in modo molto preciso i propri file) con una struttura molto complessa, ramificata ed annidata… che si vorrebbe magari replicare su un altro disco, magari perché ha richiesto tempo, fatica e tanti piccoli aggiustamenti. Questa utility ad interfaccia grafica a doppio pannello affiancato permette di eseguire questa operazione in modo estremamente semplice.”

Con GNU/Linux è possibile fare questo da anni in maniera ancora più veloce e semplice, non serve scaricare nulla e funziona con tutte le versioni.
E’ sufficiente posizionarsi al di fuori della directory da copiare e dare il seguente comando:

find directory_da_replicare -type d | xargs -I $ mkdir -p nuova_posizione/$
find directory_da_replicare -type d

ottiene l’elenco delle directory da copiare, mentre

xargs -I $ mkdir -p nuova_posizione/$

esegue la replicazione nella nuova posizione.
Per farlo funzionare basta sostituire directory_da_replicare con il nome della directory base, e “nuova_posizione” con il percorso dove andrà posizionata la replica.

Per comodità il comando può essere messo in un file ed eseguito come script.

C’era davvero bisogno di scrivere un programma come TreeCopy? ;)

]]>
/blog/2007/03/duplicare-un-sistema-di-directory-alla-faccia-di-treecopy/feed/ 2
Centrare orizzontalmente le pagine web /blog/2007/01/centrare-orizzontalmente-le-pagine-web/ /blog/2007/01/centrare-orizzontalmente-le-pagine-web/#comments Sat, 27 Jan 2007 17:15:00 +0000 Davide Muzzarelli /blog/2007/01/centrare-orizzontalmente-le-pagine-web/ Ecco pronto un metodo veloce per centrare le pagine nei siti web.

Questo è il file HTML:

<home>    <head>        <link rel="stylesheet" type="text/css" href="default.css" />    </head>    <body>        <div id="container">            <!-- metti tutto il contenuto qui -->        </div>    </body></html>

Questo è invece il contenuto del file CSS:

body {    text-align: center   /* centra in IE5.x */}

div#container {    width: 760px;    margin: 0 auto;   /* centra negli altri browser */    text-align: left;   /* ripristina l'allineamento */ }

Si utilizza il BODY per centrare il contenuto, questo metodo funziona su IE5.

La larghezza della pagina è definita a 760px che è quasi uno standard per la risoluzione 800×600 in quanto tiene conto della barra di scorrimento laterale e dei margini della finestra.

Il trucco per centrare la pagina è presto spiegato: si applica semplicemente un margine automatico ai lati del DIV in modo che il browser mantenga lo stesso margine da entrambi i lati. Questo metodo funziona anche ridimensionando la finestra senza l’ausilio di JavaScript.

L’attributo “text-aling: left” nel DIV serve a ripristinare l’allineamento corretto del testo.

]]>
/blog/2007/01/centrare-orizzontalmente-le-pagine-web/feed/ 1
Linux non ha bisogno di essere riavviato /blog/2006/12/linux-non-ha-bisogno-di-essere-riavviato/ /blog/2006/12/linux-non-ha-bisogno-di-essere-riavviato/#comments Sat, 02 Dec 2006 10:02:00 +0000 Davide Muzzarelli /blog/2006/12/linux-non-ha-bisogno-di-essere-riavviato/ Una delle cose più frustranti per chi usa Windows è che esso ha bisogno di essere riavviato spesso. Questo è vero specialmente quando ci sono degli aggiornamenti.

In Linux è possibile usare il computer anche per anni senza mai riavviarlo, questo è particolarmente vero se si tratta di server. Si può perfino aggiornare un programma nel momento stesso in cui si sta usando, quindi senza doverlo chiudere e senza dover riavviare il sistema.

Linux ha un file system (sistema di memorizzazione dei file) che gli permette di fare ciò. In termini semplici, quando un programma viene eseguito esso viene caricato in memoria, in questo modo è possibile sostituire i file del programma senza interromperlo.

In termini tecnici, il programma viene caricato in un buffer (memoria tampone) con cluster (pezzi di file) da 4KB. Quando si apre un file, il kernel (il cuore del sistema operativo, letteralmente “nocciolo”) legge il file dal suo inode (indirizzo del file sul file system). L’indirizzo inode rimane anche cancellando il file fino a quando il programma resta in esecuzione che quindi può essere ancora usato. Il file di rimpiazzo, quello che aggiorna il programma, prende un inode differente e quindi non va in conflitto con il vecchio programma in esecuzione. Alla successiva esecuzione del programma, il kernel caricherà la versione aggiornata. A questo punto è consigliabile riavviare il solo programma per poter usare gli aggiornamenti, onde evitare conflitti di versione.

Questo sistema funziona con tutti i file tranne uno: il kernel stesso. Il kernel è eseguito all’avvio del computer pertanto c’é bisogno di un nuovo riavvio per poter usare il kernel aggiornato. Fortunatamente questo tipo di aggiornamento può avvenire anche dopo uno o più anni di distanza ;)

]]>
/blog/2006/12/linux-non-ha-bisogno-di-essere-riavviato/feed/ 1