Android sta conquistando sempre più mercato: gli utenti lo apprezzano, le case produttrici di cellulari anche, e gli sviluppatori sembrano divertirsi un sacco con il suo SDK. Lo dimostra il numero di applicazioni in costante aumento disponibili per cellulari Android (Acer Liquid in primis): tra queste, i giochi sono sicuramente tra quelle più gettonate. Sì, perchè con la risoluzione degli attuali schermi, con la possibilità di implementare il 3D e il 2D e di utilizzare il touchscreen e l’accelerometro, i giochi Android per smartphone sono davvero una nuova esperienza di divertimento ed intrattenimento.
(continua…)


Doveva uscire a maggio 2010, poi voci lo davano disponibile per la metà di giugno….finalmente, dopo mesi di attesa, è stata rilasciata proprio qualche giorno fa la ROM ufficiale per l’aggiornamento dalla versione 1.6 alla 2.1 di Android per i cellulari Acer Liquid.

Ovviamente non ho perso neanche un secondo….ho fatto tutti i backup del caso e mi sono preparato ai test. Ecco le mie impressioni.
(continua…)


Windows Mobile (WM) ha a disposizione diversi applicativi per effettuare il backup delle informazioni presenti sul cellulare, ma normalmente i risultati di tali backup sono file utilizzabili esclusivamente in ambito mobile. Qualche tempo fa avevo la necessità di effettuare il backup degli SMS dal mio cellulare WM al PC, visto che mi accingevo ad entrare nel fantastico mondo di Android, con l’acquisto di un cellulare meravigliosamente open (ma questa è un’altra storia).
(continua…)

Negli ultimi anni le distribuzioni Linux hanno raggiunto un livello di usabilità adeguato al “grande pubblico”, permettendo anche agli utenti non professionisti di poter utilizzare senza troppa fatica questo sistema operativo. Certo, ci sono ancora tante cose da migliorare, ma il numero di distruzioni disponibili oggi è tale per cui possiamo decidere la distro che riteniamo più adeguata alle nostre necessità.

Con questo articolo analizziamo quelle che sono le linee guida per trovare la propria distribuzione Linux, quella cioè che possa rispondere alle nostre necessità e che più si addice alle nostre caratteristiche. Sì, perchè non esiste La distrubuzione Linux perfetta….esiste quella perfetta per noi! ;)

(continua…)

Qualche giorno fa ho iniziato il nostro percorso di conoscenza “avanzata” di Zend Framework raccontando in questo articolo come il framework gestisce le transazioni sui nostri database.

Con questo articolo proseguiamo la conoscenza di Zend Framework trattando un altro interessante argomento di vitale importanza per lo sviluppo di un’applicazione web “moderna” che possa interagire con il mondo esterno utilizzando le principali tecniche e i più diffusi protocolli di comunicazione. L’argomento che vediamo è la gestione dei contesti (context) in Zend Framework.

(continua…)

Zend Framework è uno tra i principali framework (se non il principale) per lo sviluppo di applicazioni enterprise in PHP. E’ uno strumento molto potente al servizio degli sviluppatori PHP: è estremamente flessibile, estendibile, facile da usare e decisamente manutenibile. Questo è il primo di una serie di articoli che sto preparando per presentare quelle che sono le caratteristiche più interessanti di questo prodotto.

L’argomento che trattiamo in questo articolo è la gestione delle transazioni con Zend Framework. Una transazione è una sequenza di operazioni che deve rispettare le proprietà ACID ( Atomicity, Consistency, Isolation, e DurabilityAtomicità, Coerenza, Isolamento e Durabilità). Una transazione può terminare con successo o con un insuccesso: nel primo caso il risultato sarà permamente, mentre nel caso di insuccesso di deve tornare alla situazione precedente l’inizio della transazione, come se nulla fosse successo.

(continua…)

A cosa dobbiamo rinunciare per avere servizi sempre più tecnologicamente avanzati che ci semplificano (e in alcuni casi) allietano la quotidianità? Non è semplice rispondere a questa domanda, soprattutto perchè, per chi vive nel nostro tempo, la tecnologia è ormai necessario quanto l’ossigeno.

Qualche giorno fa ho letto un articolo in cui si racconta l’ultimo attacco portato a Google da alcune società di consumatori che vogliono vederci chiaro sulle attività e soprattutto sulla quantità, qualità  e tipologia di dati che vengono raccolti dal gigante di Mountain View. E se ci fermiamo un secondo a riflettere, in effetti è qualcosa che fa pensare…

Non è la prima volta che Google si trova a fronteggiare le associazioni di consumatori che l’accusano apertamente di abusi della privacy e di non rispettare le basilari regole nello sviluppo del software. Del resto Google non ha mai nascosto di aver catturato “per errore” tutta una serie di dati che sicuramente rientrano nella categoria di “abuso”.

In rete ci sono diversi articoli che trattano dell’argomento, ma il vero quesito che dobbiamo porci è se, per rispettare la nostra privacy, saremmo disposti a rinunciare a quelli che sono tra i principali servizi forniti da Google (e non solo chiaramente) e che ormai utilizziamo praticamente ogni giorno.

Saremmo pronti  a dire “addio” a Google Maps per  esempio?

E se pensiamo al mondo mobile la riflessione diventa ancora più complessa: il cellulare è uno strumento che possiamo considerare un pò come  un secondo portafoglio, uno strumento in cui sono contenute informazioni sensibili sui nostri contatti, i nostri messaggi, le nostre fotografie…insomma di tutto un pò. Con la connessione internet mobile 24 ore su 24 in sostanza questa raccolta indiscriminata di dati potrebbe essere inarrestabile.

Ma possiamo rinunciare ad utilizzare questi strumenti con queste caratteristiche e funzionalità che ci permettono di comunicare con il mondo ovunque ci troviamo?

Quando scriviamo il nostro codice è davvero comodo avere un assistente che ti suggerisce ad esempio i metodi che possiamo richiamare su un oggetto o le classi che abbiamo a disposizione per raggiungere il nostro obiettivo. Sono strumenti che quando inizi ad usare non puoi più farne a meno.

Il “Code Assistant” di Eclipse è uno strumento molto potente, che non solo suggerisce le librerie di default del linguaggio di programmazione con il quale stiamo lavorando (Java, PHP, ecc.) ma permette anche di personalizzare le librerie a disposizione, aggiungendone ad esempio di terze parti.

Questo non solo velocizza la scrittura del codice, ma permette anche di imparare molto più rapidamente il linguaggio o i framework che stiamo utilizzando nel nostro applicativo. Quando però lavoriamo in team su un progetto, è molto probabile che si utilizzino i plugin come quello di subversion per gestire il lavoro. Il problema è che quando lavoriamo in questo ambiente, di default, il progetto perde l’indicazione sulla sua stessa natura….in pratica Eclipse non sa più se stiamo lavorando in PHP o Java, sa solo che stiamo lavorando con subversion, perdendo in questo modo il prezioso aiuto che ci fornisce il Code Assistant. Ma per risolvere questo problema ci vogliono davvero 5 minuti…

Dobbiamo concentrare la nostra attenzione sui file “.buildpath” e “. project” del nostro progetto Eclipse: se li editiamo noteremo che non vi sono indicazioni circa la natura del progetto (cioè se siamo in ambiente Java, PHP o Javascript). Tutto ciò che dobbiamo fare è inserire nei rispettivi file le seguenti direttive in neretto:

.PROJECT

<?xml version=”1.0″ encoding=”UTF-8″?>
<projectDescription>
<name>prova</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.dltk.core.scriptbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.php.core.PHPNature</nature>
</natures>
</projectDescription>

.BUILDPATH

<?xml version=”1.0″ encoding=”UTF-8″?>
<buildpath>
<buildpathentry kind=”con” path=”org.eclipse.php.core.LANGUAGE”/>
<buildpathentry external=”true” kind=”lib” path=”/myLibrary”/>
<buildpathentry kind=”src” path=”"/>
</buildpath>

A questo punto, una volta riavviata l’IDE, il nostro progetto sarà etichettato in base alla sua natura, e dunque si riattiveranno tutte le funzionalità e tutti gli strumenti a disposizione per lo sviluppo con l’ambiente che abbiamo impostato (e il Code Assistant non fa eccezione! ;) )

Le chiamate asincrone sono ormai un fondamento delle interfacce web, e praticamente tutti i principali framework javascript in circolazione forniscono degli strumenti embedded che semplificano lo sviluppo e automatizzano la maggior parte delle impostazioni.

ExtJs è un framework javascript che è riuscito ad ottenere forti consensi nell’ambito dello sviluppo di interfacce web: questo grazie soprattutto alla potenza del prodotto e alla comunità decisamente attiva che fornisce un importante supporto agli sviluppatori.

Il meccanismo implementato da questo  framework per eseguire chiamate Ajax è estremamente semplice ed intuitivo, meccanismo che tra le altre cose ricorda molto da vicino quello adottato da altri framework javascript come JQuery. Vediamone un esempio:

Ext.Ajax.request({
[…]
url: ‘pagina.php’,
params: {id: ‘3’},
success: function(resp) {
[…]
} ,
failure: function(a, b) {
[…]
}
});

Con queste poche righe di codice, ExtJs ci permette di eseguire una chiamata Ajax verso l’indirizzo specificato nel parametro di configurazione “url” (pagina.php) e di gestire sia il caso di risposta positiva sia il caso di insuccesso.
“params” invece permette di specificare i parametri che verranno inviati al file “pagina.php” durante la chiamata Ajax: nel nostro esempio inviamo un parametro con identificativo “id” che contiene il valore 3.

E se volessimo inviare un array? Nessun problema, ci viene in aiuto JSON.

ExtJs è chiaramente progettato per fornire pieno supporto a JSON, dunque possiamo sfruttare questo protocollo. Codifichiamo quindi il nostro array utilizzando le funzioni che ExtJs ci mette a disposizione, come ad esempio la seguente:

Ext.encode(array)

Supponendo quindi di voler inviare un array di valori con una chiamata Ajax il nostro codice potrebbe diventare:
Ext.Ajax.request({
[…]
url: ‘pagina.php’,
params: {data: Ext.encode(arrayData)},
success: function(resp) {
[…]
} ,
failure: function(a, b) {
[…]
}
});

Lato server, sarà sufficiente eseguire il decoding del parametro “data”, che giunge al server sottoforma di stringa JSON:

$myArray = json_decode($_POST[‘data’]);

Qualche tempo fa scrissi un post a proposito della condivisione di cartelle tra sistemi host e guest in VirtualBox. La comodità di poter scambiare dati tra le virtual machine e le macchine host è davvero troppo interessante per farne a meno.

Visto che il precedente post riguardava la condivisione di cartelle tra un sistema Linux host (fedora) e un sistema Windows guest, ho pensato che potesse essere utile anche la situazione in cui abbiamo un sistema Windows host che deve comunicare con un sistema Linux guest.

Il primo passo da fare è scegliere la cartella del sistema host (Windows in questo caso) che verrà condivisa con il sistema Linux (Ubuntu in questo caso).

Una volta scelta la directory del sistema host che verrà condivisa, possiamo proseguire entrando nel sistema Linux, e nella console digitiamo il seguente comando:

sudo mkdir /media/windows-folder

che ci permette di creare un “punto di mount” in Ubuntu per la cartella in questione. Creato il “punto di mount” possiamo procedere al passo (quasi) finale con il comando:

sudo mount -t vboxsf nome_cartella /media/windows-folder

Questo comando non fa altro che legare al “punto di mount” precendentemente istanziato la cartella Windows con il nome “nome_cartella”.  L’ultimissima cosa da fare per rendere la modifica permanente è inserire questo comando all’interno del file

/etc/rc.local

poi spegnere la macchina virtuale, andare nelle impostazione ed aggiungere tra le cartelle condivise quella che abbiamo creato. Il gioco è fatto: ora abbiamo due sistemi in perfetta comunicazione! ;)

Qualche giorno fa abbiamo avuto la conferma: Oracle non solo non abbandonerà il progetto MySQL, ma anzi, ha rilanciato con la promessa di importanti investimenti e soprattutto novità tecniche per nulla trascurabili.

Con la nuova versione (la 5.5), MySQL diventerà più performante del 200% e i tempi di ripristino saranno ridotti di 10 volte….insomma una vera rivoluzione: ma il piatto forte sarà la maggiore integrazione con il motore di archiviazione InnoDB, che diventerà quello di default.

Insomma, quello che forse è il più diffuso e il più utilizzato RDBMS open source conoscerà nuova vita: non ci resta che provare per credere! ;)

Per chi volesse notizie più complete circa le novità introdotte con la nuova versione di MySQL può trovarle in questo articolo.

Da qualche tempo gli ultimi aggiornamenti della versione Ubuntu 9.10 stanno provocando diversi problemi ai laptop Dell, in particolare alle schede di rete wireless. Dopo l’aggiornamento, infatti, la scheda wireless è disabilita dal sistema, senza possibilità di riabilitarla nè da interfaccia grafica nè con il classico ifconfig.

Il problema sembra dovuto ad un bug: rfkill vede la scheda wireless “spenta” attraverso il kill switch, anche quanto in effetti non è così. Come dicevamo gli strumenti convenziali con i quali gestiamo le nostre connessioni di rete non possono nulla: ecco allora come possiamo risolvere questo problema.

La prima cosa da fare è assicurarsi che kill switch sia impostato ad “off” e lanciare il comando

sudo rmmod -f dell_laptop

per verificare che in effetti ci troviamo di fronte a questo problema. Se lanciato il comando la connessione riprende vita, allora non ci resta che aggiungere

blacklist dell_lapto

al file

/etc/modprobe.d/blacklist.conf

Problema risolto! ;)

La gestione dei repository è un elemento importante per la stabilità dei nostri sistemi linux: nella maggior parte delle distro attuali è possibile gestire i repository attraverso una piccola e semplice interfaccia grafica.

In alcuni casi tuttavia può essere necessario abilitare o disabilitare delle repository che ci creano problemi, bloccando ad esempio i processi di upgrade o di installazione di nuove componenti. Supponiamo si verifichi il seguente scenario: abbiamo effettuato l’upgrade del nostro sistema Fedora, ma non è ancora disponibile la versione del driver NVIDIA per la nostra scheda grafica. Al riavvio successivo, abbiamo a disposizione solo la console. Proviamo ad effettuare un upgrade del sistema da linea di comando, dunque, per risolvere le dipendenze e correggere i problemi della nostra scheda grafica.

Purtroppo però notiamo che un repository non è al momento disponibile: potrebbe sembrare un concentrato di sfortuna, ma in realtà è una situazione abbastanza comune. Il repository ATRPMS, ad esempio, quello in cui sono disponibili alcuni .rpm per i driver fireware, spesso per parecchio tempo risulta non accessibile.

Per risolvere non dobbiamo far altro che disabilitare momentaneamente da linea di comando il repository che blocca il processo di upgrade. Supponendo che il repository a crearci problemi sia proprio ATRPMS, è sufficiente lanciare il seguente comando:

mv /etc/yum.repos.d/atrpms.repo /etc/yum.repos.d/atrpms.repo.disable

In questo modo disabilitiamo il repository, e possiamo procedere all’upgrade del sistema, risolvendo le dipendenze che rendono instabile il nostro sistema. Una volta risolto il problema, possiamo riabilitare il repository.

Imparare a partizionare correttamente il disco rigido del proprio PC è un passo fondamentali per avere un sistema operativo solido e facilre da manutenere. Un buon partizionamento del disco rigido ci permette di salvaguardare i nostri dati, ad esempio, separandoli dal resto del sistema e proteggendoli così da eventuali danni al sistema stesso.

Può tuttavia capitare di voler o dover ripartizionare il disco, ad esempio perchè abbiamo sottostimato il volume del disco primario. Ovviamente possiamo segliere di formattare il disco e procedere ad una nuova formattazione, ma questo vorrebbe dire spostare i dati in un altro device e poi spostarli nuovamente a formattazione completata. Chiaramente abbiamo un’alternativa migliore e sicuramente più veloce.

Esistono infatti diversi prodotti per i sistemi Windows in grado di ripartizionare il disco in real-time: ne abbiamo provati diversi, con risultati decisamente deludenti, fino a quando non abbiamo scovato l’EASEUS Partition Master 5.0.1 Home Edition.

Questo è davvero un ottimo prodotto: gratuito, veloce, facile da utilizzare e soprattutto solido e robusto. In tutte le prove che abbiamo fatto non abbiamo riscontrato alcun problema, nessuna perdita di dati: in pochi minuti abbiamo riformattato il disco e dopo un riavvio….eccoci pronti a lavorare. Il prodotto è scaricabile gratuitamente da qui.

La selezione della VM (Virtual Machine) in uso durante lo sviluppo in Java dipende dal settaggio della variabile d’ambiente JAVA_HOME : ecco perchè è di vitale importanza capire come e dove settare tale variabile. Vediamo la configurazione della variabile d’ambiente JAVA_HOME all’interno di un sistema Linux, e in particolare per le distro Ubuntu e Fedora.

Per prima cosa, verifichiamo se nel nostro sistema è già installata una versione di Java eseguendo il comando

user@host:~$ java -version

In molte recenti distro Linux, è già presente l’enviroment java ma nel caso non ci fosse, lo possiamo installare senza troppi problemi.
Procediamo dunque all’installazione del JDK nei nostri sistemi Ubuntu e Fedora:

UBUNTU

user@host:~$ sudo apt-get install sun-java6-jdk
Password:
Reading package lists... Done
Building dependency tree
Reading state information... Done
[......................................]

FEDORA 

[user@host ~]$ sudo yum install java-1.6.0-openjdk.i586
Loaded plugins: refresh-packagekit
Setting up Install Process
[......................................]

In entrambi i casi, dopo l’installazione, procediamo nuovamente al controllo della versione installata con il comando

UBUNTU

user@host:~$ java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Server VM (build 1.6.0-b105, mixed mode)
FEDORA 
[user@host ~]$ java -version
java version "1.6.0_0"
OpenJDK Runtime Environment (IcedTea6 1.6) (fedora-33.b16.fc12-i386)
OpenJDK Server VM (build 14.0-b16, mixed mode)

Se il JDK installato non è settato come default, allora possiamo procedere nel modo seguente:

UBUNTU
user@host:~$ sudo update-alternatives --config java

There are 2 alternatives which provide `java'.

Selection    Alternative
-----------------------------------------------
*         1    /usr/bin/gij-wrapper-4.1
+        2    /usr/lib/jvm/java-6-sun/jre/bin/java

Press enter to keep the default[*], or type selection number: 2
Using `/usr/lib/jvm/java-6-sun/jre/bin/java' to provide `java'.
FEDORA 
[user@host ~]$ sudo update-alternatives --config java

There are 2 programs which provide 'java'.

Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
2           /usr/lib/jvm/jre-1.5.0-gcj/bin/java

Enter to keep the current selection[+], or type selection number:

A questo punto è arrivato il momento di settare la variabile JAVA_HOME : editiamo dunque il file ~/.bash_profile che si trova tra i file nascosti della cartella principale di ogni utenza Linux (nel caso in cui volessimo configurare tale variabile di sistema per tutti gli utenti è sufficiente eseguire i passi che vedremo tra poco nel file /etc/profile).

~/.bash_profile è uno script di startuo che generalmente viene eseguito una volta sola: questo file viene utilizzato per tutti quei comandi che vengono eseguiti quando l’utente esegue il login nel sistema Linux. E’ pratica comune dunque utilizzare questo file per settare le variabilil d’ambiente, per creare alias a comandi via shell, ecc.
Editiamo quindi il file con il comando

$ vi ~/.bash_profile

e, usando la sintassi export JAVA_HOME=<percorso-installazione-java> procediamo alla modifica del file

export JAVA_HOME=/usr/java/jdk1.6.0_0

e modifichiamo la variabile PATH come segue

export PATH=$PATH:/usr/java/jdk1.6.0_0/bin

Salviamo il file, chiudiamo tutto ed eseguiamo il logout e successivamente il login nel nostro sistema. Per controllare che tutto sia andato a buon fine, è sufficiente eseguire la stampa di tali variabili come segue:

$ echo $JAVA_HOME
$ echo $PATH

Se tutto ha funzionato correttamente, vedremo nel nostro terminale la stampa del percorso che abbiamo precedentemente impostato, altrimenti una riga vuota. Questa procedura si può ripetere per tutti quei framework o applicativi che richiedono il settaggio di variabili d’ambiente (come la variabile UIMA_HOME per l’utilizzo del framework UIMA).

Tip: Possiamo usare il comando seguente per trovare il path dell’eseguibile java in UNIX / Linux:
$ which java