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!
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.
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 Durability – Atomicità, 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.
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:
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:
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:
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
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:
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.