venerdì 28 gennaio 2011

Vodafone IDEOS: limitiamo i consumi della batteria

Uno dei punti deboli di quasi tutti gli smartphone è sicuramente la batteria. Applicazioni in esecuzione che si collegano alla rete, connessione a Internet, il GPS, lo schermo, sono solo alcune delle componenti principali che incidono sul consumo della batteria.
Il nostro Vodafone IDEOS viene alimentato da una batteria a ioni di litio (Li-Ion) da 3,7V e 1200mAh (capace di erogare, quindi, una potenza di 4,4Wh). Huawei (così come altri produttori) per contenere i prezzi non poteva che affidarsi a questa tecnologia che garantisce un buon rapporto potenza-peso e una lenta scarica quando la batteria non è in uso (l'auto-scarica è di circa il 5% al mese).
Pertanto, un buon consiglio per contenere i consumi, deriva proprio da quest'ultima osservazione: è preferibile spegnere il dispositivo quando sappiamo di non averne bisogno (ad esempio durante la notte, oppure quando seguiamo una lezione).
Questa mia affermazione potrebbe sembrare in contrasto con la successiva osservazione che introduce il concetto di memoria per le batterie. Alcuni accumulatori tendono a ricordare la capacità energetica precedente al nuovo processo di carica, in tal caso è preferibile caricare la batteria solo quando quest'ultima è realmente scarica. Tale fenomeno è tuttavia assente nelle batterie a Li-Ion, questo significa che possiamo caricare il nostro Vodafone IDEOS tutte le volte che vogliamo, indipendentemente dallo stato di carica! Le caratteristiche elettroniche fin qui viste ci permettono, quindi, di gestire al meglio il processo di carica della batteria in ogni nostra esigenza.
Un altro consiglio per mantenere in buono stato la nostra batteria a Li-Ion riguarda invece l'esposizione alle temperature. Questo problema interessa molte tipologie di accumulatori, la temperatura incide sull'invecchiamento della batteria e sul processo di auto-scarica detto prima. Il ciclo di vita medio di una batteria a Li-Ion è stimato in un intervallo che va dai 24 ai 36 mesi. Siete avvisati, questa estate non rimanete il vostro Vodafone IDEOS al sole o in macchina!
Ora che conosciamo i pregi e difetti della batteria che alimenta il nostro dispositivo vediamo cosa possiamo fare per aumentare l'autonomia del nostro smartphone. Android ci permette di intervenire su alcuni parametri che determinano il funzionamento e le prestazioni del sistema operativo. Vi elenco di seguito i punti e i consigli che finora ho sperimentato di persona:
  • luminosità del display: l'intensità dell'illuminazione del display ha un grosso impatto in termini di consumo sulla batteria. Possiamo ridurre la luminosità del display accedendo all'omonima voce attraverso i menu: Impostazioni, Display, Luminosità. E' preferibile scegliere un valore basso oppure spuntare la voce Luminosità automatica. In quest'ultimo caso il sensore di luminosità applicherà un valore idoneo in funzione della luce esterna;
  • ricevitore GPS: spegnere l'antenna del ricevitore GPS se questa non è utilizzata da nessuna applicazione;
  • widget controllo risparmio energia: vi consiglio di installare questo widget (previsto dal sistema operativo) su una delle screenlets. E' attraverso quest'ultimo che abilito, quando serve, la connessione WiFi, il ricevitore GPS o quello bluetooth. Oltre a ritoccare, in alcune occasioni, la luminosità del display;
  • vibrazione al tocco: se volete potete eliminare la vibrazione al tocco dei tasti per la scelta rapida (softkey) accedendo attraverso i menu Impostazioni, Audio alla voce Feedback aptico e deselezionandola;
  • audio: ridurre il volume se ascoltate la radio o la musica, sia con la cuffia in dotazione che senza. Un volume più alto implica un maggiore consumo di energia;
  • connessioni Wifi e 3G: quest'ultimo consiglio è ancora in via sperimentale, sto eseguendo delle prove ed è in base a queste che vi suggerisco di preferire per adesso la connessione WiFi a quella 3G (se possibile). Dopo un ora di connessione WiFi la batteria sembra scaricarsi del 14% circa. Usando la connessione 3G, invece, dopo un'ora la batteria sembra scaricarsi di circa il 18%. Si tratta tuttavia di una stima poco indicativa e relativa a molti parametri (tipo di navigazione, potenza del segnale ricevuto etc...). Purtroppo il valore meno preciso è quello relativo alla connessione 3G poiché dispongo ancora di pochi valori per avere una media più affidabile. Vi elenco cosa faccio solitamente con il mio Vodafone IDEOS durante l'ora di navigazione: controllo della posta elettronica, lettura delle news (accedendo, in alcuni casi, al web), accesso a client per i social network e rapida lettura dei nuovi post, accesso al forum e gestione di alcune discussioni (lettura e risposta), accesso ad Hattrick (con il browser) per consultare i progressi della mia squadra. Provate anche voi a segnare le percentuali di scarica del vostro IDEOS dopo un ora di uso continuo della connessione Wifi e/o 3G;
Direi che per adesso possono bastare questi accorgimenti (per adesso lasciamo perdere le impostazioni che regolano le animazioni del menu e quelle che agiscono sulla velocità di clock del processore, preferisco godermi Android in tutto il suo splendore). Vi ricordo che con Android non è necessario installare un task manager per chiudere i processi in esecuzione. Tale operazione, infatti, ostacola la normale gestione prevista da Android per le applicazioni. E' preferibile non interferire con la politica di gestione implementata nello schedulatore del sistema operativo, chiudendo i processi ne rallenteremo il successivo riavvio. Vi assicuro, inoltre, che l'unico processo in esecuzione che impegna le risorse (consumando la batteria) è quello che visualizziamo sullo schermo. Tutti gli altri processi, quando non visualizzati, vengono messi in pausa! Di sicuro esistono applicazioni che usano in modo particolare la batteria del dispositivo, scaricandola prima di altre. A tale proposito vi invito ad apprezzare il lavoro svolto da un'applicazione anche in virtù dei consumi. Potete farlo accedendo alla voce Utilizzo batteria accedendo ai menu Impostazioni, Info sul telefono. Vi lascio infine qualche altra informazioni sull'autonomia del mio IDEOS che mi permette finora di coprire ben due giorni. Se spengo il dispositivo durante la notte riesco a coprire anche tre giorni, dipende dalle chiamate che vengono effettuate. Se avete qualche altro consiglio da suggerire scrivete pure.

giovedì 27 gennaio 2011

Arduino: lancio del dado (versione 2 e versione 3)

In questa seconda versione ho disposto i led in modo diverso, cercando di realizzare sulla breadbord i simboli tipici di un dado. A tale proposito ho aggiunto un led alla configurazione precedente. Ho quindi etichettato i led in questo modo:


Il codice sorgente dovrà, allora, accendere i led dichiarati nella configurazione in base al numero estratto dalla funzione random(1,7). Per posizionare il LED_D sulla breadboard ho dovuto modificare con una pinzetta i piedini del componente, piegandoli affinché nella configurazione vista dall'alto il led occupasse una posizione centrale pur ricevendo il segnale da un pin diverso da quello in linea sulla breadboard. Nello schema che segue, invece, per non confondere le connessioni ho messo da parte il LED_D.



Se nel codice sorgente dichiariamo le funzioni per accendere ogni singolo led (funzioni a(), b(), c(), d(), e(), f() e g()) possiamo allora ipotizzare due strutture di controllo per la scrittura dell'output. La prima è davvero molto semplice e direi anche la più naturale. Essa consiste nell'uso del valore generato dalla funzione random per l'ingresso (e l'uscita) in una struttura di controllo switch. Ecco l'elenco dei led da accendere in base al numero estratto dalla funzione random(1,7):
  1. LED_D;
  2. LED_B, LED_F;
  3. LED_B, LED_D, LED_F;
  4. LED_A, LED_B, LED_F, LED_G;
  5. LED_A, LED_B, LED_D, LED_F, LED_G;
  6. LED_A, LED_B, LED_C, LED_E, LED_F, LED_G;
Possiamo, quindi, invocare in ognuno dei casi detti sopra le relative funzioni per l'accensione dei led. Trovate qui il codice sorgente che adotta questa soluzione (versione 2).
Per risparmiare qualche riga di codice ho pensato di riscrivere il codice in questo modo, qui (versione 3). In questa versione, come nella prima (versione 1), il numero estratto dalla funzione random(1,7) stabilisce il punto di ingresso all'interno della struttura di controllo switch. Il punto di uscita, quindi l'istruzione break, è prevista solo per l'ultimo caso. All'interno di ogni caso ho disposto le varie funzioni per l'accensione dei led in questo modo (risparmiando qualche riga di codice):
  switch (dado) {
case 6:
a();
case 5:
if(dado==6) b();
else a();
case 4:
if(dado==6) c();
else if(dado==5) b();
else a();
case 3:
if(dado==6) e();
else if(dado==5) d();
else if(dado==4) b();
else b();
case 2:
if(dado==6 || dado==5 || dado==4) f();
else if(dado==3) d();
else b();
case 1:
if(dado==6 || dado==5 || dado==4) g();
else if(dado==3) f();
else if(dado==2) f();
else d();
break;
}

mercoledì 26 gennaio 2011

Arduino: lancio del dado (versione 1)

Il lancio del dado per Arduino è davvero un'operazione semplice. Per generare un numero casuale possiamo utilizzare una delle seguenti funzioni:
  • random(max): ritorna un numero compreso fra 0 e max-1;
  • random(min,max): ritorna un numero compreso fra min e max-1;
Per caratterizzare il seme con cui generare una sequenza di numeri casuali possiamo invocare la funzione randomSeed(seme), dove seme è un long int (possiamo passare a randomSeed anche un valore sporco prelevato da uno dei pin analogici di arduino, se inutilizzato nello sketch).
Dopo aver generato un numero casuale e averlo raccolto in una variabile temporanea dobbiamo organizzare l'output. Ho previsto due versioni che si differenziano proprio nel modo in cui esse riportano il risultato (il lancio del dado) all'esterno, di seguito vi parlerò della prima. Qui invece potete vedere la seconda soluzione.
Nella prima soluzione ho pensato di disporre in sequenza 6 led, uno affianco all'altro. Nel codice, il numero casuale generato da Arduino viene analizzato con l'istruzione switch. Ovviamente i possibili casi da differenziare sono 6, avendo fissato i numeri casuali con l'istruzione random(1,7). Ognuno di questi decide, allora, il punto di ingresso all'interno della struttura di controllo switch. Nel codice sorgente, avendo riportato l'istruzione break solo per l'ultimo caso, in base al numero estratto si passerà necessariamente per tutti i casi sottostanti. Ogni caso previsto comanda l'accensione (digitalWrite()) di uno dei 6 led disposti in sequenza sulla breadboard.
Ad esempio, se il numero estratto dalla funzione random() è 5 si accenderanno tutti i led dal quinto al primo, escluso il sesto poiché il punto di ingresso nell'istruzione switch è appunto 5 (che esclude il caso superiore, il sesto led non verrà pertanto acceso). Solo l'ultimo caso prevede, infine, l'uscita dall'istruzione. Qui trovate il codice dello sketch (estrazione di un numero da 1 a 6 ogni 3 secondi).
switch (dado) {
case 6:
digitalWrite(LED6,HIGH);
case 5:
digitalWrite(LED5,HIGH);
case 4:
digitalWrite(LED4,HIGH);
case 3:
digitalWrite(LED3,HIGH);
case 2:
digitalWrite(LED2,HIGH);
case 1:
digitalWrite(LED1,HIGH);
break;
}

martedì 25 gennaio 2011

Scaricare con wget

Alcuni script ne fanno uso, wget viene usato per scaricare file dalla rete. Il download è non interattivo, si esegue il comando facendolo puntare su un indirizzo e impostandone il comportamento (sono disponibili molte opzioni). Il processo di download, se nel comando scritto non ci sono errori e se l'indirizzo è corretto o raggiungibile, viene eseguito in background. wget scaricherà i file da noi indicati, dal primo all'ultimo, ripetendo e/o riprendendo (se il server che trasmette è in grado di farlo) il download in caso di errori. Supporta i protocolli HTTP, HTTPS ed FTP. Questo comando è in grado di seguire i link presenti nei documenti HTML, XHTML e CSS. Con wget possiamo scaricare file attraverso la rete oppure creare la versione locale di un sito.
wget dispone di numerose opzioni, sia in forma breve che estesa. La sintassi del comando è la seguente: wget opzioni url. Se non indichiamo al comando un url quest'ultimo si limiterà a scaricare il file (indicato proprio dall'url) nella directory di lavoro. Alcune opzioni, inoltre, prevedono un parametro aggiuntivo. Altre, invece, hanno un significato booleano o logico, la loro presenza nel comando abilita la funzione che esse rappresentano. Vi elenco alcune opzioni:
  • -b: il comando va in background subito dopo l'esecuzione. Inoltre, se non viene specificato un file per l'output (con l'opzione -o) il comando scriverà quest'ultimo all'interno del file wget.log;
  • -o file: specifica il file da usare per l'output;
  • -a file: l'output del comando viene accodato al file indicato;
  • -q: il comando verrà eseguito senza mostrare messaggi informativi sullo standard output;
  • -i file: il comando preleva gli url dal file specificato;
  • -t numero: permette di specificare il numero di tentativi da fare per il download di un file prima di dichiarare lo stesso irraggiungibile (il comando dirà, a seconda dei casi, connection refused oppure not found). wget esegue di default 20 tentativi per file, se numero è pari a 0 il comando eseguirà un numero infinito di tentativi;
  • -O file: il file scaricato verrà scritto nel file indicato. Questa opzione permette, quindi, di direzionare l'input su un file. Possiamo usare questa opzione per scaricare il file e assegnare allo stesso un nome diverso da quello in rete;
  • -c: se una precedente sessione di wget è stata interrotta (ad esempio per problemi alla connessione) molto probabilmente troveremo nella directory di lavoro un file parziale, incompleto. Con questa opzione possiamo far ripartire il download;
  • -T tempo: specifica (in secondi) il tempo di timeout per la connessione verso l'url;
  • -limit-rate=velocità: limita il download dei file alla velocità indicata (in byte al secondo). E' possibile usare il suffisso k per i kilobyte ed m per i megabyte;
  • --user=utente e --password=password: specificano, se la connessione al server lo prevede, il nome utente e la password;
  • --ask-password: dopo aver fornito il nome utente con --user, questa opzione permette di digitare la password in un secondo momento, senza scriverla sulla riga di comando;
  • -nd: quando è attiva la modalità ricorsiva questa opzione non permette la creazione gerarchica di cartelle. Tutti i file verranno scaricati nella stessa directory;
  • -np: se è attiva la modalità ricorsiva è preferibile attivare anche questa opzione se non vogliamo far percorrere a wget anche la directory padre (quella che il comando ls segna come ..);
  • -r: abilità la modalità ricorsiva, wget segue ricorsivamente i link e percorrendo, quindi, anche le sottodirectory;
  • -l profondità: specifica il livello di profondità della ricorsione che di default è pari a 5;
  • -w tempo: indica (in secondi) il tempo di attesa fra una richiesta e quella successiva;
  • -A tipo: permette di specificare a wget i tipi di file da scaricare. Tutti gli altri tipi di file verranno ignorati dal comando. Specificate l'estensione dei file, separandole con una virgola. E' possibile usare il carattere jolly (*);
  • -R tipo: indica al comando un comportamento opposto a quello visto per -A. In tal caso, infatti, il comando non scaricherà i tipi di file elencati dopo l'opzione;
  • -E: se stiamo scaricando le pagine di un sito web questa opzione dirà a wget di dare a tutti i file scaricati l'estensione .html;
  • -p: se stiamo scaricando le pagine di un sito web, questa opzione dice a wget di scaricare tutti i file e le pagine utili alla visualizzazione della pagina corrente (e analizzata dal comando);
Trovate altre opzioni nella pagina del manuale del comando, man wget. Il file /etc/wgetrc raccoglie le impostazioni che definiscono il comportamento di default per wget. Che ne dite di provare?
Con il comando wget -Erp http://digilander.libero.it/luca.petrosino/appunti.html scaricherete in un colpo solo l'intera sezione appunti del mio sito web, sia le pagine html che gli appunti (oltre ai file che occorrono per vedere le stesse pagine web offline, immagini, codice javascript etc...).

lunedì 24 gennaio 2011

Secure copy, scp

Il comando scp è la versione di rete del comando locale cp, per la copia dei file. Con scp possiamo copiare uno o più file da un host locale (oppure remoto) a un host remoto, scp usa ssh per l'autenticazione e il trasferimento dei dati.
La sintassi prevista dal comando è la seguente: scp opzioni user@host1:file_sorgente user@host2:file_destinazione. Se il file sorgente è locale al file system del computer in uso possiamo allora omettere il nome utente (parametro user) e l'host di rete (parametro host1).
Se il file da copiare si trova invece presso un host remoto dobbiamo allora necessariamente specificare il nome utente e l'host di rete, sia per il file sorgente che per quello di destinazione. Se il file sorgente è locale possiamo inoltre referenziare lo stesso all'interno del comando con un path assoluto o relativo (alla directory di lavoro).
Attenzione, così come avviene per ssh, durante la prima connessione remota è necessario generare una chiave RSA per l'autenticazione fra i due host coinvolti nel processo di copia. Solo successivamente, quindi, il comando chiederà la password per l'accesso all'host remoto. Alcune utili opzioni sono:
  • -C: abilita la compressione su ssh;
  • -P porta: permette di specificare il numero di porta da usare per il processo di copia (corrisponde al numero di porta usato di default da ssh);
  • -r: copia, ricorsivamente, il contenuto di una direcotry seguendo, eventualmente, i link simbolici presenti nel file (una directory è un particolare file) sorgente;
  • -l velocità: limita il trasferimento dei file a una velocità massima (espressa in Kbit/s);
  • -v: abilita la modalità verbose per il debugging dei messaggi e lo stato di avanzamento del processo di copia;
L'uso di questo comando presuppone, oltre all'account sull'host remoto (sia per il file sorgente che per quello di destinazione), la conoscenza della struttura del file system su cui si interviene in fase di lettura e di scrittura. Ricordate, l'account usato per il processo di copia potrebbe non avere i permessi necessari all'accesso in lettura e/o scrittura di file! Se vi occorre l'indirizzo IP di un host remoto provate a filtrarne il valore (se il computer è lì vicino) con il comando ifconfig | grep "inet addr" (solitamente l'output ritorna due indirizzi IPv4, l'indirizzo di loopback 127.0.0.1 e l'indirizzo IP dell'host).

venerdì 21 gennaio 2011

Aspire one, Xubuntu e i programmi che utilizzo di più

Questo è il mio desktop:


In questo articolo cerco di riassumere le applicazioni che uso di più sul mio Aspire One 110L, su cui ho installato tempo fa Xubuntu 10.04 (l'ultima LTS di Ubuntu). Xfce è il desktop manager usato di default su Xubuntu. La sua leggerezza (sia in termini di memoria ram che di cpu impegnata) si sposa bene con l'hardware limitato del mio Aspire One. Xfce viene spesse volte suggerito per PC con hardware vecchio o comunque poco performante. Uso Xfce anche su altri PC perché mi piace non impegnare eccessivamente le risorse hardware e lasciarle libere per altri processi di sviluppo. Con il rilascio di Xfce 4.8, l'ultima versione (dopo due anni di sviluppo), ben presto mi troverò a fare le mie prove per valutare una nuova installazione sui miei PC. Pertanto, scrivo qui i programmi che solitamente uso e installo su Xubutu. Se avete suggerimenti su altri programmi e alternative valide scrivete pure.

Grafica:
  • Comix: un visualizzatore di immagini progettato per la lettura di fumetti direttamente dagli archivi compressi (ZIP, RAR, gzip e bzip2). L'ultima versione è già disponibile nei repository di Ubuntu. Per l'installazione: sudo apt-get install comix;
  • Gimp: GNU Image Manipulation Program, programma open source per la creazione e modifica di immagini. E' installato di default su Xubuntu;
Multimedia:
  • Kino: software per l'editing e il montaggio video. Qui trovate alcuni video editati con Kino sul mio Aspire One. Per contenere i tempi di attesa durante la fase di elaborazione vi consiglio di editare pochi secondi (al massimo un minuto). Per l'installazione: sudo apt-get install kino.
  • Rhythmbox: lo preferisco ad Exaile (installato di default su Xubuntu e che disinstallo con sudo apt-get remove --purge exaile), si tratta di un lettore di file mp3. E' ottimo per organizzare la propria musica e si integra bene con il desktop attraverso messaggi di notifica sul brano in riproduzione (oltre ad avere numerosi plugin). Per l'installazione: sudo apt-get install rhythmbox. Attenzione, nei repository di Ubuntu non è presente l'ultima versione, pertanto aggiungetene uno con il comando sudo add-apt-repository ppa:webupd8team/rhythmbox, aggiornate il database (locale) con il comando sudo apt-get update e riprovate, quindi, l'installazione con sudo apt-get install rhythmbox;
  • EasyTag: se volete modificare i tag che descrivono i vostri file mp3, aggiungendo e/o togliendo informazioni su un brano oppure inserendo le cover per gli album, non dimenticate questo programma. Per l'installazione: sudo apt-get install easytag;
  • Vlc: il miglior lettore di file multimediali (audio e video). Per l'installazione, aggiungete il repository che lo distribuisce con il comando sudo add-apt-repository ppa:lucid-bleed/ppa, aggiornata il database (locale) con il comando sudo apt-get update e avviate l'installazione con sudo apt-get install vlc vlc-plugin-pulse mozilla-plugin-vlc;
Rete:
  • Chromium: è un browser open source, leggero e veloce. Lo preferisco a Firefox (che disinstallo con sudo apt-get remove --purge firefox), installato di default su Xubuntu. Per l'installazione su Xubuntu 10.04, digitate sudo mousepad /etc/apt/sources.list (che aprire l'editor sul file source.list) e inserite queste due righe: deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu lucid main e deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu lucid main. Non dimenticate di salvare il file appena modificato. Aggiungete una nuova chiave GPG con sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xfbef0d696de1c72ba5a835fe5a9bf3bb4e5e17b5, quindi aggiornate il database (locale) con sudo apt-get update ed infine installate il browser con sudo apt-get install chromium-browser;
  • Claws Mail: un client davvero leggero per la lettura e l'invio della posta elettronica. Se avete Thunderbird potete disinstallarlo con il comando sudo apt-get remove --purge thunderbird. Per l'installazione: sudo apt-get install claws-mail;
  • Emesene: client per la messaggistica istantanea (IM, instant messaging) che uso come alternativa a Pidgin (altro client per l'IM). Per l'installazione: sudo apt-get install emesene;
  • FileZilla: client FTP per il trasferimento di dati su server. Per l'installazione: sudo apt-get install filezilla;
  • Midori: altro browser per il web. E' la mia alternativa a Chromium, soprattutto per la visione di video e file in flash. Per l'installazione: sudo apt-get install midori;
  • Pidgin: client per l'IM, il mio preferito. Semplice e leggero. E' installato di default su Xubuntu (è installabile con sudo apt-get install pidgin). Attenzione, su Ubuntu non trovate l'ultima versione. Aggiungete, quindi, il repository ufficiale con sudo add-apt-repository ppa:pidgin-developers/ppa, aggiornate il database (locale) con sudo apt-get update. Se usate Xubuntu Pidgin è già installato, va solo aggiornato con sudo apt-get upgrade (in caso contrario installatelo con sudo apt-get install pidgin);
  • Putty: un client telnet/ssh. Per l'installazione: sudo apt-get install putty;
  • Skype: per le chiamate VoIP (voice over IP). Purtroppo non trovate Skype nei repository di Ubuntu, per l'installazione dovete seguire le istruzioni sul sito web, scaricando la versione adatta qui;
  • Xchat: è installato di default su Xubuntu (installabile con sudo apt-get install xchat), si tratta di un client IRC;
Sviluppo:
  • Android-SDK: ambiente di sviluppo per applicazioni su Android. ;
  • Arduino-SDK: ambiente di sviluppo per sketch su Arduino;
  • Bluefish: ambiente di sviluppo per HTML, PHP; JavScript e CSS. Nei repository di Ubuntu non è disponibile l'ultima versione installabile, allora, in questo modo: dare il comando sudo mousepad /etc/apt/sources.list per aprire l'editor e aggiungere la seguente riga deb http://debian.wgdd.de/ubuntu jaunty main restricted universe multiverse, aggiornare il database (locale) con sudo apt-get update, installare sudo apt-get install wgdd-archive-keyring e apt-get install bluefish;
  • Eclipse: ambiente di sviluppo per applicazioni Java (e altri linguaggi di programmazione). E' ideale per la programmazione di applicazioni per Android (grazie al plugin previsto dal team di Google per Android). Il programma è installabile seguendo le installazioni sul sito, scaricando e scompattando l'archivio tar con i file del programma;
  • Fritzing: un programma per disegnare circuiti con Arduino, per l'installazione seguire le istruzioni sul sito, scaricando e scompattando l'archivio con i file del programma;
  • NetBeans IDE: ambiente di sviluppo per applicazioni Java. Uso questo IDE soprattutto per la progettazione di interfacce grafiche. Non riesco, invece, a far funzionare il plugin per la programmazione su Android. Nei repository di Ubuntu non è presente l'ultima versione, installabile seguendo le istruzioni sul sito;
  • Qucs: è un simulatore di circuiti digitali e analogici (permette anche altri tipi di simulazione). Per l'installazione: sudo apt-get install qucs;
Ufficio:
  • AbiWord: editor di testo (leggero e funzionale), è installato di default su Xubuntu;
  • TexMaker: editor per file tex. Per l'installazione: sudo apt-get install texmaker;
  • Evince: lettore di file PDF (postscript, djvu, tiff e dvi), è installato di default su Xubuntu;
Accessori:
  • WbarConf: come potete vedere dall'immagine del mio desktop uso solitamente un solo pannello per la gestione del desktop. Su Xubuntu e molte distribuzioni GNU-Linux troviamo quasi sempre due pannelli: uno superiore che raccoglie l'area di notifica, alcuni collegamenti a programmi e il bottone per il menu delle applicazioni e un pannello inferiore che raccoglie, invece, le finestre delle applicazioni aperte e il bottone per passare da un desktop a un altro. Trovo questa soluzione poco adatta allo schermo di un netbook come il mio (Aspire One 110L), con risoluzione massima di 1024 x 600 pixel. Ecco allora che solitamente, per dare qualche pixel libero in più al mio schermo, decido di rimuovere sui miei desktop Xubuntu il pannello inferiore (aggiungendo gli elementi presenti nel pannello inferiore in quello superiore). Dedico la parte inferiore del mio desktop a wbar, una barra di collegamenti a programmi altamente personalizzabile, ne ho già parlato qui. wbarconf è il programma che mi permette di editare la wbar attraverso una comoda interfaccia. Scaricate l'ultima versione qui;
  • Startup Manager: un programma davvero molto comodo che vi permette di cambiare le opzioni di boot passate a GRUB (il boot loader di Ubuntu) attraverso un'interfaccia grafica. Per l'installazione: sudo apt-get install startupmanager. Vi segnalo la pagina sul wiki di Ubuntu, qui;
Giochi:
  • The Mana World: un MMORPG (massive multiplayer online role-playing game), ovvero un gioco di ruolo online che vi permette di sviluppare il vostro personaggio attraverso diversi livelli e caratteristiche, oltre a conoscere tante persone. Ne approfitto per salutare i miei amici Ranze, Tryzar, Rilke e DenDen. Per l'installazione: sudo apt-get install tmw.
  • TurboSlider: un gioco di corsa, funziona sia online che in locale. Non è disponibile nei repository di Ubuntu, per l'installazione seguire le istruzioni su questa pagina, qui;

giovedì 20 gennaio 2011

Accesso remoto a un computer, con ssh

Con ssh è possibile collegare in rete due PC e risolvere i problemi relativi alla sicurezza accennati qui. Vi ricordo, infatti, che la connessione stabilita fra due PC attraverso telnet avviene senza nessuna codifica. E' quindi possibile intercettare con uno sniffer di rete i pacchetti trasmessi e leggerli in tutta tranquillità. Tutto quello che avviene attraverso ssh viene codificato o criptato. In questo modo i pacchetti intercettati non saranno leggibili poiché privi di significato! Per effettuare una connessione a un PC remoto attraverso ssh occorre installare sshd, che offre il servizio al protocollo ssh. L'installazione del server e del client avviene con il comando sudo apt-get install openssh-client openssh-server. Su alcune distribuzioni (ad esempio in Xubuntu 10.04, qui usata su due PC: il mio Aspire One 110L e un PC) è presente il comando ssh che tuttavia non permette la creazione di connessioni poiché il relativo servizio sshd non è installato di default (la connessione viene continuamente rifiutata, connection refused). Consiglio, pertanto, l'installazione di openssh (parte client e server) attraverso i comandi detti sopra.
La connessione al PC può avvenire solo se disponiamo di un account presso l'host remoto, occorre indicare al comando il nome utente e l'indirizzo IP dell'host remoto in questo modo: ssh username@ip. Se fra i due computer è possibile instaurare una connessione il comando chiederà all'utente remoto la password associata al nome utente. In caso contrario vi consiglio di verificare la visibilità fra i due host, ad esempio usando il comando ping oppure traceroute.
La connessione remota si svolge sulla porta 22, usata di default. Questo valore può essere modificato accedendo (in scrittura) al file /etc/ssh/ssh_config (usato ad esempio dal server, durante la fase di avvio del servizio) oppure passando al comando l'opzione -p porta (usato ad esempio dal client per direzionare altrove la connessione). E' ovvio che il numero di porta usato dal client deve coincidere con quello usato dal server. Provate a scrivere il comando man ssh_config per accedere alla pagina del manuale dedicata al setup di ssh. Alcune impostazioni riportate nel file sono disabilitate attraverso il carattere #, che commenta quindi l'intera riga. Vi elenco le impostazioni abilitate nel file ssh_config presente sul mio PC:
  • ForwardX11 yes: specifica se le connessioni X11 devono avvenire su un canale sicuro;
  • Port 22: specifica la porta per la connessione remota;
  • Protocol 2,1: indica, in base all'ordine di preferenza, le versioni dei protocolli ssh da utilizzare;
  • SendEnv LANG LC_*: indica le variabili locali da inviare all'host remoto;
  • HashKnownHost yes: indica ad ssh di stabilire una connessione solo con gli host remoti presenti nel file know_host. Attenzione, durante la prima connessione ssh cerca di fissare l'autenticità dell'host remoto attraverso la creazione di una chiave RSA che verrà creata e conservata in un file di configurazione (in /home/user_name/.ssh/known_host, dove user è il nome dell'utente). Pertanto, se formattate uno dei due PC è preferibile rivedere il contenuto del file e cancellare la riga con la chiave dell'host remoto appena formattato. Purtroppo non riusciremo a fare tutto questo, se usiamo ssh verso più host di rete saranno presenti più voci. L'informazione nel file è infatti criptata ed è impossibile individuare la sola riga che fa riferimento al vecchio host remoto. Disabilitando questa voce (usate in tal caso il valore no) riusciremo invece a riconoscere i riferimenti verso gli host remoti (sarà possibile leggerne gli indirizzi IP e orientarsi all'interno del file);
  • GSSAPIAuthentication yes: abilita l'autenticazione GSSAPI (generic security service application program interface), si tratta di un'interfaccia per programmi che accedono a servizi di sicurezza;
  • GSSAPIDelegateCredentials yes: affida la gestione della sicurezza, attraverso l'interfaccia abilitata al punto precedente, al server (l'host remoto);
Dopo la fase di login possiamo far eseguire un comando all'host remoto solo se l'account che stiamo usando è dotato dei permessi necessari. Se tutto è andato per il verso giusto provate ad esempio ad aprire il gestore di file in una cartella di sistema. Qui potete vedere il contenuto di una cartella presente nel file system del mio PC:


Qui, invece, potete vedere la stessa cartella vista dal mio Aspire One 110L, dopo aver fatto l'accesso remoto attraverso il comando ssh:

mercoledì 19 gennaio 2011

Il comando arp

Il comando arp visualizza e modifica le voci nella tabella usata dall'omonimo protocollo (ARP, address resolution protocol) per l'associazione indirizzo IP-indirizzo fisico (indirizzo MAC, media access control). Ecco come usare il comando per svolgere le azioni più comuni:
  • arp -a [hostname]: stampa sullo standard output il contenuto di tutta la cache oppure, se specifichiamo il nome di un host di rete, quello relativo all'host indicato;
  • arp -d [hostname]: cancella tutta la cache oppure, se specifichiamo il nome di un host di rete, quella relativa all'host indicato;
  • arp -s hostname hwaddr: crea una nuova voce nella tabella, associando un hostname a un indirizzo fisico;
Vi ricordo che il protocollo ARP lavora nello strato di collegamento (o datalink).

lunedì 17 gennaio 2011

Vodafone IDEOS: ripristinare la ROM ufficiale

Segno qui (a beneficio anche di altri) la procedura utile al ripristino dell'Ideos (U8150), è sempre utile sapere come venire fuori da qualche pasticcio. Per ripristinare la ROM ufficiale rilasciata da Huawei per Vodafone occorre scaricarla a questo indirizzo, qui (un file zip). Consiglio a tutti i possessori dell'Ideos di avere almeno una copia di questo file.
L'estrazione del file produce una cartella di nome dload, con all'interno il file UPDATE.APP. Spostare la cartella dload appena estratta sulla micro SD che useremo per ripristinare l'Ideos e inserirla nel dispositivo.
Avviare l'Ideos premendo contemporaneamente il pulsante di accensione, il pulsante rosso (quello per rifiutare le chiamate) e il pulsante per alzare il volume. Sullo schermo compare una barra che indica l'avanzamento del ripristino. Inutile dire che tutte le applicazioni e i dati sulla memoria del dispositivo verranno cancellati.

venerdì 14 gennaio 2011

Android-x86: il porting di Android per piattaforme x86

Android-x86 è il porting di Android per la famiglia di processori x86 (a 32 bit), usati nella maggior parte dei desktop. Si tratta di un progetto interamente open source, il sito di riferimento è www.android-x86.org.
Ho provato la versione 1.6 di Android-x86 sul mio Aspire One 110L (dotato di 512MB di memoria ram). Se non disponete di un dispositivo Android vi invito a provare la versione live, installabile su una pendrive USB. Vi elenco le istruzioni per procedere:
  • Procuratevi una copia di UNetbootin, in questa guida userò la versione dedicata a Linux (trovate la versione di UNetbootin per Windows qui);
  • Scaricate l'immagine (un file iso di circa 52MB) di Android-x86 a questo indirizzo: http://android-x86.googlecode.com/files/android-x86-1.6-r2.iso;
  • Per poter eseguire UNetbootin occorre dare i permessi di esecuzione all'eseguibile precedentemente scaricato. Supponendo che il file si trovi nella cartella /home/light-kun/Scaricati eseguite in una finestra di terminale il comando sudo chmod +x unetbootin-linux-494;
  • Possiamo adesso eseguire UNetbootin attraverso il comando /home/light-kun/Scaricati/unetbootin-linux-494 (se la versione da voi scaricata coincide con quella da me usata, altrimenti modificate il nome dell'eseguibile);


  • Selezionare la voce "Immagine disco" e scegliere l'immagine di Android-x86 scaricata in precedenza (cliccando sul bottone "..." per navigare nel file system, fino alla cartella che ospita l'immagine del sistema operativo). Non dimenticate di selezionare la pendrive USB da utilizzare (formattatela, eventualmente, con il comando sudo mkfs.vfat /dev/nome_partizione), avviate il processo di scrittura premendo sul bottone "OK";
  • Terminato il processo di scrittura su pendrive USB possiamo riavviare il computer e provare, finalmente, Android-x86! In fase di avvio del computer premere il tasto "F12" (su altri computer il tasto per accedere alla sequenza di boot potrebbe essere diverso!) per selezionare il disco di boot. Va selezionata la voce "USB FDD" che fa riferimento alla pendrive USB inserita nel computer;
  • Nel menu di UNetbootin selezionare la voce "Live CD - Run Android-x86 without installation" e premere il tasto "Invio". Il caricamento del sistema operativo dura circa 30 secondi;


Potete verificare il riconoscimento dell'hardware del vostro computer per Android-x86 consultando la pagina http://www.android-x86.org/hardware-list. Tutto l'hardware dell'Aspire One 110L viene riconosciuto correttamente, per abilitare il lettore di schede di memorie SD occorre seguire un how-to, qui.
La scheda di rete viene riconosciuta e la connessione riesce senza alcun problema. L'audio funziona al primo colpo, così come la webcam. La pressione del tasto "Home" vi riporta al desktop (o schermata principale di Android), il tasto "Esc" vi permette di tornare alla schermata precedente.

Ringrazio Chin-Wei Huang per avermi dato il permesso di utilizzare i link e gli screenshot del progetto Android-x86.

giovedì 13 gennaio 2011

Vodafone IDEOS: il mio primo Android!


Vodafone IDEOS (U8150) è il mio primo terminale Android, finora ho sempre usato l'emulatore fornito con il service development kit (SDK) di Android. Si tratta di un terminale dal prezzo estremamente contenuto, prodotto da Huawei in collaborazione con Vodafone e venduto a soli 99,00€! Non disponendo di un grosso budget non potevo farmelo scappare, è l'ideale per avvicinarsi al mondo di Android. Vi elenco di seguito alcune delle principali caratteristiche.
Il display è un TFT di 2.2", di tipo capacitivo e 262.000 colori (la risoluzione è di 240x320 pixel). Sul retro del dispositivo troviamo una fotocamera da 3.2 mpx, con zoom digitale fino a 4x, e l'altoparlante di sistema (davvero potente, anche rispetto ad altri dispositivi Android). Il cuore dell'hardware è costituito da un processore con frequenza di clock di 528MHz (dovrebbe essere una CPU Qualcom MSM7201A, la cui frequenza di clock viene variata nell'intervallo 200-600MHz in base alle necessità) e memoria di 512MB (di cui 256MB dedicate al sistema operativo). Il dispositivo è in grado di gestire connessioni umts, gprs, edge, hsdpa, e wifi (attraverso la funzione di thetering è possibile condividere la connessione wifi con altri dispositivi). L'hardware si completa con un sensore di luce, un accelerometro e adattatore bluetooth. Il sistema operativo è Android 2.2 (Froyo), una delle ultime release (al momento è atteso il rilascio di Gingerbread, Android 2.3 - non so se verrà rilasciato anche per IDEOS).
Ho installato sul dispositivo un benchmark per valutare le prestazioni del processore: Linpack (potete trovare questo programma nel Market di Android oppure su AppBrain). Il test ritorna il numero di operazioni in virgola mobile eseguite in un secondo dalla CPU (MFLOPS): il punteggio ottenuto dal mio IDEOS è stato di 3.693 MFLOPS in 22.7 secondi. Sul sito dell'applicazione trovate anche una top 10, meglio non usare quei valori come riferimento. L'HTC Legend totalizza un punteggio di 4.872 MFLOPS mentre l'LG Optimus One si ferma a 3.916 MFLOPS (entrambi usano una cpu da 600MHz con Android 2.2, Froyo).
La cpu dell'IDEOS si difende comunque bene, non a caso il funzionamento del sistema operativo appare sufficientemente fluido per una prima esperienza (reale) di Android. Un discorso a parte va invece fatto per le prestazioni grafiche: Quadrant, un benchmark per cpu e grafica 3D, non è totalmente eseguibile (vanno disattivati dei test specifici per il 3D). Questo significa che sull'IDEOS non possiamo eseguire giochi e/o applicazioni che fanno un uso particolare della grafica. Non mi sento comunque di dire che si tratta di un difetto del terminale, basta confrontare il costo dell'IDEOS con quello di un dispositivo Android di prezzo immediatamente successivo. Altre informazioni sul sito del produttore, qui. Se avete installato sul vostro dispositivo l'applicazione Barcode Scanner, puntate la fotocamera sull'immagine che segue per accedere alla pagina dedicata all'IDEOS su Vodafone Lab:

mercoledì 12 gennaio 2011

Monitorare le connessioni di rete del computer con netstat

Un computer collegato in rete è raggiungibile mediante l'indirizzo IP ad esso associato. L'indirizzamento a un particolare processo in esecuzione o servizio sulla medesima macchina prevede un ulteriore numero, detto numero di porta (port number). Solo in questo modo due applicazioni di rete possono scambiare dati tra loro, che altrimenti giungerebbero presso l'interfaccia di rete senza un ulteriore destinazione locale.
Va subito detto che non tutti i processi necessitano di una comunicazione di rete, qualora ciò fosse invece necessario l'applicazione dovrà implementare mediante socket (a cui è associato un numero di porta) la comunicazione e gestirla attraversa un protocollo di trasporto (ad esempio TCP o UDP). Una socket in attesa di comunicazioni è detta in stato di ascolto (listen).
Su ogni computer sono eseguiti in background dei servizi di rete, ognuno di questi prevede dunque delle connessioni in ingresso e/o uscita. Per alcuni servizi il numero di porta è stato fissato, ad esempio: 21 per ftp (file transfer protocol), 23 per telnet, 25 per smtp (simple mail transfer protocol) etc... Il file /etc/services contiene un elenco dei servizi di rete ed altre informazioni sui servizi configurati presso un computer, per accedere a queste informazioni occorre usare il comando netstat.
La lista delle opzioni e delle cose che è possibile osservare con netstat è davvero lunga, mi limiterò pertanto ad elencare le opzioni più comuni. Come sempre, maggiori informazioni sul comando possono essere cercate nelle pagine del manuale con man netstat.
  • -a: mostra tutte le connessioni, attive e in ascolto;
  • -l: mostra solo le connessioni in ascolto (listening);
  • -t: mostra le connessioni su TCP;
  • -u: mostra le connessioni su UDP;
  • -p: mostra i programmi che utilizzano le connessioni (per ogni programma viene indicato il PID e il nome del processo);
  • -n: disabilita il reverse lookup nell'output, gli indirizzi vengono sostituiti con i rispettivi IP;
  • -r: mostra la tabella di routing;
  • -s: mostra le statistiche, per ogni protocollo di rete;
  • -c: le statistiche vengono aggiornata ogni secondo;
  • -i: mostra le statistiche relative alle interfacce di rete riconosciute dal kernel;
L'output generato dal comando netstat è solitamente molto lungo, non dimenticate di combinarlo con i comandi less, more o grep.

martedì 11 gennaio 2011

Risolvere domini registrati e indirizzi IP: host

host è un utility per la risoluzione dei nomi attraverso il servizio offerto dai domain name server (DNS). Con il comando host possiamo risolvere un nome di dominio (registrato) in un indirizzo IP e viceversa. La sintassi del comando, nella sua forma base, è la seguente: host indirizzo. La ricerca e quindi l'output del comando può essere perfezionata attraverso l'uso delle opzioni previste dal comando. Per una lista completa di tali opzioni consultate la relativa pagina del manuale, con il comando man host. Il comando host svolge bene il suo compito senza ulteriori opzioni.
Gli indirizzi dei server DNS sono solitamente scritti nel file /etc/resolv.conf (ricevuti in fase di login alla propria rete, mediante protocollo DHCP). Possiamo in ogni caso dire al comando di svolgere la ricerca presso un diverso server DNS con il comando host indirizzo server.


Alternative al comando host: nslookup e dig.

lunedì 10 gennaio 2011

Verificare la raggiungibilità di un host: ping

Il comando ping invia un messaggio di tipo ECHO_REQUEST a un host della rete, indicato fra i parametri passati al comando. La sintassi prevista dal comando è la seguente: ping opzioni host. Se vi occorre conoscere la raggiungibilità di un host il comando ping è uno dei primi strumenti da utilizzare in fase di verifica (successivamente si può indagare sulla raggiungibilità dell'host attraverso il comando traceroute).
Nella sintassi del comando, il parametro host può essere sia un indirizzo IP che un nome di dominio (che il comando provvede a risolvere mediante chiamata a DNS). Se invochiamo il comando senza ulteriori opzioni quest'ultimo invierà all'host da contattare (se raggiungibile) un numero infinito di pacchetti ICMP. Ecco allora una piccola lista delle opzioni più comuni da passare al comando:
  • -c numero: specifica il numero di richieste da inviare all'host da contattare;
  • -w tempo: permette di regolare il tempo di attesa (in millisecondi) per la ricezione delle richieste di echo (il valore di default è pari a 1000 ms);
  • -l dimensione: permette di regolare la dimensione (in byte) del pacchetto di echo (il valore di default è pari a 32 byte);
  • -i tempo: permette di regolare il tempo di attesa (in secondi) che intercorre fra l'invio di un pacchetto e il successivo (il valore di default è 1 s);
L'output restituito dal comando riassume l'attività di ping che si è appena conclusa (se nel comando non abbiamo specificato il numero di richieste da inviare, possiamo terminare l'esecuzione del comando attraverso la pressione dei tasti ctrl e c). Sullo standard output viene mostrato: il numero di pacchetti inviati, la percentuale di pacchetti persi, la durata dell'attività di ping e i valori statistici del round trip time (rtt), il tempo impiegato dal pacchetto per raggiungere l'host di destinazione e tornare, quindi, all'host sorgente). Nell'output del comando ping possiamo leggere il valore minimo e massimo del rtt, quello medio e la deviazione standard. Questi ultimi valori risulteranno più precisi solo se il numero di richieste inviate dal comando ping è sufficientemente alto.