Start here

Trasloco

Da oggi inform4tic4mente ha uno spazio tutto suo su blog.inform4tic4mente.com. Vi aspetto lì!

Ti sfido a stare 5 secondi su questa pagina senza ridere.

Sta girando su facebook un link ad una pagina intitolata “Ti sfido a stare 5 secondi su questa pagina senza ridere”. Si tratta di una finta pagina che sta raccogliendo centinaia di migliaia di utenti, probabilmente allo scopo di raccogliere dati e informazioni personali da rivendere in giro. Se foste caduti vittima di questa pagina, seguite questo link:

http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fpiace.biz%2Fsenzaridere&layout=standard&show_faces=false&width=450&action=like&colorscheme=light&height=35

Se il pulsante ‘mi piace’ che appare è blu, vuol dire che siete fra i loro utenti: cliccate di nuovo sul pulsante per cancellarvi. Se invece il pulsante è grigio chiaro, allora potete stare tranquilli. Diffondete la notizia!

HP Ipaq e Linux

Una mia cara amica è l’orgogliosa proprietaria di un HP Ipaq, ma non riusciva ad utilizzarlo appieno perché non riesce a sincronizzarlo con i suoi pc windows. Infatti il Centro di Sincronizzazione sia di seven che di xp richiedevano, in maniera alquanto perentoria, l’installazione di Outlook 2003 Professional o successivo, e il suo Outlook 2000 Professional non andava bene neanche un po’. Lei ha cercato di ottenere una licenza per il 2003, ma senza successo, quindi ha rinunciato. Tuttavia è anche l’orgogliosa proprietaria di un laptop ubuntu, e così ho provato (e ci sono riuscito) a configurare una sincronizzazione fra Ubuntu e l’Ipaq.

Innanzitutto un paio di considerazioni preliminari: l’Ipaq ha due modi di conversare con un Computer attraverso l’interfaccia USB: il primo, più antico modo è quello di conversare attraverso l’USB come se fosse una porta seriale (quelle che i sistemi operativi di casa Microsoft® chiamano COM). I sistemi linux possono aderire a questo standard attraverso la creazione di un dispositivo in /dev/ttyUSB*. Altro modo, più nuovo, è quello di utilizzare l’interfaccia rNDIS che permette di vedere il PDA come se fosse connesso ad una porta di rete del computer. Quest’ultimo è un approccio decisamente più intelligente ed è l’unico possibile se oltre alla sincronizzazione si desidera anche utilizzare il PDA come un modem.

Nel mio caso però non ho potuto utilizzare l’approccio migliore: per un motivo che non ho ancora avuto modo di indagare (ma appena ne vengo a capo ve lo faccio sapere) la comunicazione attraverso rNDIS si interrompe in fase di inizializzazione con un errore -110 che, a quanto ho potuto appurare fin’ora, è un errore di timeout. Quindi ho utilizzato l’approccio più antico.

Nel kernel compilato per Ubuntu è incluso, sotto forma di modulo, un driver studiato appositamente per l’Ipaq e i dispositivi simili, che si chiama per l’appunto ipaq. Questo driver permette di utilizzare la comunicazione attraverso porta seriale, quindi prima di cominciare, bisogna controllare che non sia in blacklist (/etc/modules.d/blacklist.conf).

Il primo passo per configurare l’Ipaq per l’utilizzo attraverso porta seriale è quello di disattivare la “comunicazione avanzata”. Con Windows Mobile 6 questo si ottiene andando in Start->Impostazioni->Connessioni->USB a PC e togliendo la spunta alla casella “Abilita funzionalità di rete avanzata”. Toccate ok e aspettate che abbia finito, quindi tornate allo schermo principale.

Fatto questo connettete il PDA al computer: potete utilizzare un cavo USB qualsiasi o il cavo “smart” della HP: sono equivalenti. Una volta connesso, aprite un terminale e controllate che il dispositivo venga riconosciuto.

Utilizziamo il comando

$ dmesg|tail

verranno mostrati gli ultimi messaggi dal kernel: se vedete qualcosa che ha a che fare con ipaq, che non contiene la parola “error” e che parla del dispositivo /dev/ttyUSB* (dove * sta per un qualsiasi numero maggiore o uguale a 0), allora la comunicazione funziona e possiamo passare alla parte software. Per adesso scolleghiamo il PDA.

OpenSync è un interessantissimo progetto opensource. Si tratta di un framework studiato per la sincronizzazione dei dispositivi mobili. Esistono numerosi plugin che consentono la comunicazione fra diversi dispositivi e diverse applicazioni

Io ho configurato la sincronizzazione con evolution, e quindi parlerò di quella, ma è possibile configurare la sincronizzazione per qualsiasi software abbia un apposito plugin per opensync.

Per utilizzare l’Ipaq e in generale qualsiasi dispositivo usi un OS derivato da WindowsCE, occorre invece installare SynCE

sempre dal terminale, utilizzando apt-get, installiamo il software necessario:

$ sudo apt-get install synce-hal librra-tools librapi2-tools

Adesso testiamo la comunicazione con il dispositivo. Colleghiamo il cavo usb e usiamo il comando synce-pls: se vedete una lista dei file presenti sull’Ipaq la comunicazione funziona e possiamo andare avanti, altrimenti occorrerà correggere gli errori che synce-pls trova.

Ora installiamo il software per sincronizzare

$ sudo apt-get install synce-sync-engine opensync-plugin-synce opensync-plugin-evo2 multisync-tools

Adesso bisogna configurare una partnership fra l’ipaq e synce. ActiveSync permette solo 2 partnership, quindi se ne avete già configurate 2 ne dovrete eliminare una.

Per vedere un elenco delle partneship

$ synce-list-partenships

Per eliminarne una

$ synce-delete-partnership NUM

dove NUM è il numero di partnership così come indicato dal comando precedente.
Per creare una partnership

$ synce-create-partnership "Nome" "Categorie"

dove Nome può essere una qualsiasi stringa di caratteri lunga al massimo 20 caratteri e Categorie corrisponde agli elementi che volete sincronizzare. Dovrete scrivere al suo posto una lista separata da virgole di

  • Contacts
  • Calendar
  • Tasks
  • Files

Io ad esempio ho dato il comando in questo modo

$ synce-create-partnership "Ubuntu" "Contacts,Calendar,Tasks"

perché mi interessava sincronizzare la rubrica, gli appuntamenti e le attività.

Se tutto è andato a buon fine possiamo passare a configurare msynctool, che è l’utility che useremo per effettuare la vera e propria sincronizzazione.

Innanzitutto si crea un “gruppo di sincronizzazione”

$ msynctool --add-group synce-sync

da notare che synce-sync può essere sostituito dal nome che preferite, purché non contenga spazi o caratteri speciali.

Ora aggiungiamo synce e evolution a questo gruppo, indicando quali plugin utilizzare per operare la sincronizzazione

$ msynctool --add-member synce-sync synce-opensync-plugin
$ msynctool --add-member synce-sync evo2-sync

naturalmente se avete dato un nome diverso al gruppo in fase di creazione dovrete usare sempre quello, anche per il comando successivo che è quello di effettiva sincronizzazione

$ msynctool --sync synce-sync

Se non ci sono errori congratulazioni: avete sincronizzato il vostro ipaq al vostro pc con ubuntu! 🙂

Al momento non ci sono GUI soddisfacenti, l’unica è multisync-gui che però non è molto stabile: ho cercato di utilizzarla ma va in segfault: sperimo risolvano il bug, prima o poi. Per semplificare l’utilizzo da parte della mia amica che non è molto amante del terminale ho creato un piccolissimo script che ho chiamato “sincronizza” e ho posizionato in /usr/bin così, al momento di utilizzarlo, lei non dovrà fare altro che scrivere

$ sincronizza

Il contenuto dello script è molto banale:

#!/bin/bash
/usr/bin/msynctool --sync synce-sync
#EOF

Tutto qui. Happyn syncing 🙂

K.I.S.S. … o no?

K.I.S.S. – Keep it simple and stupid (o anche Keep it simple, stupid!) – è un principio che è sempre bene tenere a mente in informatica. In sostanza dice che non si deve complicare troppo quello che si sta facendo, altrimenti si rischia di farselo scappare di mano.

Se si sta scrivendo del codice, sarà bene mantenerlo il più semplice e lineare possibile, o si rischia di non raccapezzarsi più nel codice e passare ore o giorni a domandarsi ‘ma cosa diamine volevo fare, quando l’ho scritto?!’.

Tuttavia è anche vero che bisogna tenerlo ‘il più semplice possibile’ e non ‘semplice a ogni costo’. Se per fare qualcosa con criterio è necessario ricorrere a strutture di programmazione più complesse, sarà bene farvi ricorso, altrimenti con lo scopo di semplificare il codice si corre il rischio di complicarsi la vita. Per questo spesso non è bene scegliere la soluzione apparentemente più semplice: finirà con il rivelarsi la più complicata e la meno gestibile.

Inutile mettersi a scrivere un intero programma in un file perché si vuole tenere il codice lineare: sarà un incubo mantenere quel codice. Inutile affidarsi al codice scritto da altri quando si sa in partenza che quel codice dovrà essere più o meno cambiato: sarà un’odissea anche solo cominciare a raccapezzarsi in quel codice. Inutile lasciare ad altri il compito di gestire il software sul proprio server: fra la scoperta di un exploit e l’aggiornamento del software sul server, un malintenzionato ha tutto il tempo necessario a intortarvi.

In sostanza il principio K.I.S.S. è un arma a doppio taglio: se lo si applica con troppo rigore si finisce con il complicare le cose, il segreto sta nel trovare il giusto mezzo, che in questo caso è il giusto compromesso fra semplicità, scalabilità ed esigenze di mantenimento del codice. In effetti, volendo trovare una massima, è questo il compito dell’Ingegneria del Software, branca dell’Ingegneria Informatica, il che la dice lunga sulla complessità del tema.

CMS o Framework?

In un gruppo di lavoro a cui partecipo si è sollevata questa questione: cosa è meglio utilizzare per creare un sito complesso, un CMS o un framework?

Per chi non è un addetto ai lavori provo a dare una breve definizione di entrambi. Un CMS (sigla che sta per Content Management System) è un’applicazione web già sviluppata e pronta all’uso, sostanzialmente un sito preconfezionato, che è possibile estendere e personalizzare con i sistemi messi a disposizione dall’applicazione stessa, ossia moduli, plugins, oppure mettendo mano al codice stesso dell’applicazione.

Un framework, invece, è una sorta di ambiente di sviluppo: mette a disposizione delle librerie per la gestione di più basso livello del database, per l’astrazione dal database stesso e, nel caso dei più famosi, anche strumenti per una gestione degli utenti, per la presentazione e analisi dei form e tante altre cose molto utili.

Io sono personalmente sempre stato un po’ avverso ai CMS, in quanto ingabbiano il programmatore web in una struttura predefinita che non può essere modificata e non consento un’attenta progettazione del database, andando a scapito di flessibilità ed efficienza. Un framework, di contro, mette semplicemente a disposizione una infrastruttura su cui poi il programmatore può costruire liberamente la propria applicazione web, con guadagno in flessibilità ed efficienza.

La differenza, che in apparenza per un profano può sembrare irrilevante, è in realtà abissale. Usare un CMS significa in sostanza programmare estensioni per un’applicazione la cui struttura è già definita e non può essere modificata, a meno di non voler metter mano al codice del CMS stesso. Con un framework invece si progetta e si programma un’applicazione fin dal principio avvalendosi di librerie software, esattamente come succede a chi programma applicazioni di sistema e necessariamente si trova a richiamare le librerie del sistema per il quale sta programmando.

La decisione finale non spetterà a me, ma spero che il coordinatore non opti per la via apparentemente più semplice, ne guadagneremo tutti in salute.

Abusi di flash

Nel web di oggi flash è praticamente ovunque, anche dove non ci sarebbe assolutamente bisogno di esso. Volendo distinguere, si fa prima a dire quali sono i siti che utilizzano flash con cognizione di causa, intendendo che i restanti casi lo usano del tutto a sproposito.

Sostanzialmente, per non fare un elenco di url, i siti che utilizzano flash perché sarebbe difficile fare altrimenti sono principalmente i siti che offrono streaming audio/video on-demand. Uno su tutti YouTube. Realizzare un sito come youtube senza utilizzare il flash è tecnicamente impossibile e se non si utilizza il flash si utilizza gioco forza una tecnologia molto simile, benché si presenti come ‘alternativa’, che è Microsoft® Silverlight™, come nel caso di rai.tv. Questo perché senza utilizzare un mediaplayer realizzato in flash (o silverlight) si costringe l’utente a scaricare infiniti codec audio-video ed un plugin che consenta al browser di utilizzare un mediaplayer installato sul sistema, e dal momento che la giustissima tendenza è quella di non costringere mai un utente ad installare più di quanto non sia strettamente indispensabile per navigare sul proprio sito, si capisce che la scelta più logica e quella flash/silverligh.

Altro caso di contenuto web realizzato in flash difficilmente realizzabile con altre tecnologie meno invasive, sono le applicazioni altamente interattive come i ‘giochini’ flash che si trovano in giro per la rete.

Altri utilizzi ‘a proposito’ non ve ne sono, ma ovviamente questa è una mia personale opinione e se qualcuno la pensa diversamente sarò felicissimo di leggere il suo punto di vista nei commenti a questo post 🙂

Cosa vuol dire ‘digitale’?

Nel mondo moderno si sente spesso parlare di ‘digitale’. Fotocamera Digitale, TV Digitale, Digitale Terrestre, Musica Digitale… ma qual’è il significato di questa parola? Perché conviene tanto utilizzare il ‘digitale’?

Sostanzialmente, scremandolo da tutti i possibili significati alternativi, nell’ambito della tecnologia ‘digitale’ indica il metodo con cui vengono codificate e trasmesse le informazione, in contrapposizione all’altro metodo, quello ‘analogico’, che l’ha fatta da padrone fino ad oggi per le trasmissioni televisive e radiofoniche.

La differenza sostanziale fra i due metodi è che ‘l’analogico’ codifica le informazioni imitando il comportamento del fenomeno naturale che si vuole riprodurre. Ad esempio, quando un dj parla al microfono della sua radio il microfono converte l’onda sonora che è la sua voce in un’onda radio che ‘imita’ la voce del dj, nel senso che ha una forma d’onda più o meno simile all’onda sonora della voce. Quest’onda viene poi inviata attraverso un emittente che la ‘aggancia’ ad un’onda portante. Il ricevitore si sintonizza sulla frequenza di questa onda portante e dopo aver ‘sganciato’ l’onda di codifica fa l’operazione inversa del microfono: ovvero converte l’onda radio in un onda sonora di forma simile che alla fine l’ascoltatore percepisce come la voce del dj. Ecco perché la voce ‘dal vivo’ è sempre diversa dalla voce ottenuta con questo metodo: l’onda radio intermedia non è precisamente identica all’onda sonora originale e l’onda sonora finale non è precisamente identica all’onda radio intermedia, col risultato che l’onda sonora finale differisce in maniera ben percepibile dall’onda sonora originale. Questo è dovuto principalmente a limitazioni nella tecnologia del microfono e delle casse e nella diversa natura fra onda radio e onda sonora.

La digitalizzazione invece opera in maniera diversa: digitalizzare un fenomeno naturale significa in sostanza ‘convertirlo in simboli’. Attualmente la codifica digitale utilizzata è quella binaria, quindi convertire un fenomeno naturale in digitale significa convertirlo in una sequenza di bit. Questo avviene essenzialmente nei processi di ‘campionatura’ e ‘quantizzazione’. Solitamente i fenomeni naturali come il suono o la luce forniscono un flusso continuo di informazioni, contenente cioè infiniti punti, come una retta. Perché questa quantità infinita possa essere contenuta in una memoria digitale che è ovviamente finita, bisogna operare un processo di campionatura, ossia selezionare un sottoinsieme finito di punti del flusso di informazione. Questo avviene solitamente scegliendo un ‘intervallo’ di campionatura. Minore sarà l’intervallo, maggiore sarà il numero di punti ottenuti e di conseguenza sarà minore la perdita di informazione e quindi di qualità. I punti del sottoinsieme ottenuto dalla campionatura vengono quindi utilizzati nel processo di quantizzazione. Nella quantizzazione dei valori in bit vengono associati a determinate grandezze fisiche ed i punti ottenuti dalla campionatura vengono approssimati a questi valori. Ad esempio decidiamo di codificare con 001 il suono di frequenza 20 Hz e con 010 il suono di frequenza 30 Hz, un eventuale suono di frequenza 22 Hz verrà codificato come 001. Più sono i bit utilizzati nella codifica, maggiore è il numero di livelli di quantizzazione e di conseguenza minore sarà la perdita di informazione e di conseguenza di qualità.

Da quanto detto sembrerebbe che il metodo analogico consenta una migliore conservazione delle informazioni e quindi una migliore qualità, ed in parte questo è vero, tuttavia gli organi umani non sono in grado di percepire tutte le informazioni contenute nel flusso reale ed è questo che la digitalizzazione sfrutta per rendere la necessaria perdita di informazioni del tutto irrilevante. In un normale flusso analogico ricavato da un suono sono presenti numerosi suoni di fondo a frequenza troppo alta o troppo bassa per essere chiaramente percepiti dall’orecchio umano. Nella digitalizzazione tutti questi suoni vengono persi, ma l’orecchio umano non se ne rende minimamente conto. Ecco perché un cd audio di buona qualità non sembra così tanto diverso da un vinile, pur essendolo in maniera abissale.

Ma allora qual’è il vantaggio decisivo del digitale? In realtà non è uno solo, ma è la somma di diversi fattori. Le trasmissioni digitali sono meno soggette alle interferenze di quelle analogiche. I supporti di memorizzazione digitali sono più duraturi di quelli analogici e se correttamente conservanti mantengono assolutamente inalterata l’informazione contenuta, inoltre in genere i supporti digitali contengono molta più informazione digitalizzata di quella che i supporti analogici contengono in forma analogica.

La somma di questi fattori e l’esplosione dei PC hanno determinato l’inizio del dominio del digitale, che tutt’ora domina.