Android e il mito dei task killer

Oggi mi sono appena ricordato di avere ancora un blog dove poter scrivere, condividere idee, esperienze e informazioni.
La mia esperienza come sviluppatore Android è aumentata notevolmente e devo ammettere che il sistema operativo di Google dedicato ai dispositivi mobili (mentre scrivo queste righe alla versione 4.2.x) ha raggiunto livelli accettabili rispetto alla concorrenza, e soprattutto rispetto alle versioni precedenti dello stesso.
Aspettatevi quindi una valanga di articoli e consigli per trick, approfondimenti, delucidazioni e casi di studio in merito al sistema e su come impostare e sviluppare adeguatamente applicazioni Android.

Ora basta con le sviolinate e concentriamoci sull’articolo di oggi che vuole prefiggersi altro. Infatti la motivazione della stesura di queste righe riguarda tutte quelle applicazioni che circolano da tempo e che istigano gli utenti a quello che io chiamo un vero e proprio “appicidio”, ovvero la pratica di killare (uccidere) applicazioni che Android mostra dalla lista dei processi. Sto pensando davvero di sviluppare la InvestigationApp per arrestarle tutte ūüėÄ :D.

Scherzi a parte la premessa sulla gestione della memoria di Android è doverosa:
come tutti sappiamo i dispositivi che montano Android sono alimentati da batteria, pertanto tale sistema operativo √® stato progettato per un consumo minimo dell’energia, al contrario dei sistemi operativi desktop, i quali assumono che il dispositivo sia connesso perennemente all’impianto elettrico domestico o industriale che sia, Android fa del suo meglio per gestire la memoria RAM in modo da mantenere i consumi al minimo.

Quando una Android app non √® pi√Ļ in uso il sistema la mette in “suspend”, cambia quindi lo stato dell’applicazione, questa informazione aiuta il gestore della memoria a capire cosa deve fare quando si trova in condizioni critiche. Di fatti il processo relativo ad una app sospesa √® tecnicamente aperto, ma sostanzialmente non sta consumando risorse poich√© l’utente non sta utilizzando quell’applicazione. Tecnicamente infatti l’applicazione √® sospesa in un limbo finch√© l’utente non ne richieder√† di nuovo l’utilizzo.
Oltre che ottimizzare la gestione in termini di spazio e di consumo della memoria, tale approccio apporta benefici in termini di tempi di risposta ai comandi impartiti dall’utente, poich√© le app non hanno bisogno di essere¬†riaperte ogni volta che l’utente le richiede. Il picco di consumo si ottiene solo la prima volta che l’utente richiede l’utilizzo di un’applicazione.

Inoltre Android gestisce le app in memoria automaticamente: ad esempio se la memoria disponibile dovesse essere troppo bassa, il sistema operativo di sua iniziativa comincer√† a “killare” le applicazioni che l’utente non usa da pi√Ļ tempo, o meglio che sono rimaste inattive!!

Tale fase di gestione della memoria √® invisibile all’utente e questo cari lettori √® l’unico motivo valido per cui mi spiego possano esistere le forzose killapp :).

Come molti stenteranno a credere, un uso massiccio delle app task killer pu√≤ far degenerare il sistema, infatti molti utenti presi dalle buone intenzioni di voler liberare la memoria e killare continuamente delle app in realt√† non sanno che stanno dicendo al sistema di mettere quella app nello stato “mai aperta” costringendo il sistema operativo a gestire ogni volta la fase di creazione della app in memoria (come se fosse stata aperta per la prima volta) scatenando un consumo di risorse in termini di I/O, CPU e batteria ingente.

Insomma se quella app vi serve state pur certi che non vale la pena killarla lasciate fare ad Android ci penserà lui.

Nello stesso discorso rientrano anche le app che fanno uso dei servizi in background, ma per questa tipologia di applicazione c’√® da fare sicuramente una serie di precisazioni, al pi√Ļ presto fornir√≤ un articolo in merito.

A presto

NonSoLo1x

Annunci

Javascript Revealing Module Pattern

Interessante recensione su come creare metodi con visibilità privata in un modulo javascript.

http://antoniosalvati.tumblr.com/post/8182330695/javascript-revealing-module-pattern

Experience with Google Web Toolkit

Salve a tutti,

questo articolo si propone di condividere la mia esperienza con questo strumento messo a disposizione dalla grande G, nel corso delle sue evoluzioni con l’obiettivo di trasmettere pro e contro (difficile trovarne..) di questo potente tool.

-cos’√® GWT ??

Il primo errore che ho commesso nel valutare il Google Web Toolkit √® stato considerarlo un framework, (WARNING) , GWT non √® un framework, bens√¨ un insieme di strumenti che permettono lo sviluppo, ¬†la manutenzione e il debugging di grosse applicazioni Javascript/AJAX. Infatti esistono quelli che possiamo definire dei veri e propri framework basati (chi pi√Ļ, chi meno) su GWT.

Parliamoci chiaro: a chi è che piace programmare in Javascript? Considerando specialmente aspetti come il debugging e la manutenzione non è una passeggiata, soprattutto se si proviene da una realtà come Java(SE o EE) andare su Javascript è come tornare alla preistoria.

Un primo punto di forza di questo strumento (e credo il fondamentale) √® la possibilit√† di sviluppare le applicazioni attraverso il linguaggio Java portando con s√® tutti i suoi vantaggi gi√† affermati al giorno d’oggi specialmente per il packaging , la manutenzione, ¬†per non parlare della facilit√† dei processi di sviluppo del software, che la tecnologia Java mette a disposizione.

Un altro problema del linguaggio Javascript e la tecnologia AJAX annessa, √® la portabilit√† che i vari browser rendono sempre pi√Ļ difficile, il principio write once, run everywhere motto di Java viene propagato da GWT grazie al grosso lavoro del team di sviluppatori di questo toolkit che ha reso la vita facile a tanti altri sviluppatori.

Veniamo a noi:

Innanzitutto voglio premettere che non sono un “filoGoogle” d’altro canto bisogna dare a Cesare quel che √® di Cesare, e Google merita un bel 10 su 10 se consideriamo aspetti come: portabilit√† del software, potenzialit√† del web, modelli di sviluppo. Su questo ed altro il tool di Google offre ampia versatilit√† ma allo stesso tempo riesce a dare all’utente poco esperto la consapevolezza delle potenzialit√† del web. ¬†GWT si propone come un tool completo per scrivere e debuggare applicazioni: web come lo fa? Ti fa scrivere codice Java e te lo compila in Javascript. Un altro, a mio avviso, grosso errore che commettono molti utenti (me compreso) √® di considerarlo un semplice compilatore, in realt√† il compilatore √® il cuore di GWT e fa parte dell’insieme di strumenti offerti per gestire: creazione di interfacce grafiche stile web2.0, modalit√† di deploy dell’applicazione, controllo del download delle risorse, ottimizzazione del codice.

Inoltre il Google Web Toolkit, offre delle API per sviluppare anche la parte server della nostra applicazione. L’invocazione della parte server √® basata su chiamate RPC il cui protocollo √® trasparente allo sviluppatore nel senso che non deve conoscere i dettagli del payload HTTP o dell’header, il tutto continua ad essere sviluppato in Java. Inoltre la parte server si appoggia alla specifica Servlet gi√† ampiamente diffusa e conosciuta sul mercato.

Possibili svantaggi di GWT si possono ricondurre ad una vera e propria dipendenza dal tool che a mio avviso dovrebbe essere evitata creando disaccoppiamenti applicativi o con la consapevolezza di cosa si sta utilizzando e perché.

A presto.

NonSoloUniX

 

 

 

Ajax o non Ajax questo √® il problema…

Ultimamente mi sto imbattendo in molti progetti con tecnologia Ajax (Asynchronous Javascript and Xml), una tecnica molto utilizzata ultimamente per creare applicazioni web-2.0, stile applicazioni stand-alone. Molte applicazioni quali Facebook, Gmail, e tante altre sfruttano questa tecnica per implementare le lo funzionalit√†, ma ci si sta imbattendo sempre di pi√Ļ nel solito problema: qua ognuno fa come vuole.

La nascita di Ajax √® dovuta soprattuto al fatto che molti browser, oggi la maggior parte, mettono a disposizione una funzionalit√† per creare richieste http, la peculiarit√† di Ajax sta nel fatto che queste richieste Http sono state rese asincrone, per farla breve quando accedete ad un sito in realt√† state facendo una richiesta Http richiedendo ad un server di fornirvi la pagina che avete appunto richiesto, quando il server esaudir√† la vostra richiesta il vostro browser prender√† in carico la risposta e la processer√† interpretando l’html restituito. Ora immaginate se al clic di un qualsiasi pulsante di questa pagina appena scaricata venisse innescata una nuova richiesta http e che la risposta di tale richiesta modificasse una porzione della pagina che avete inizialmente scaricato senza dare all’utente la percezione di quel fastidioso refresh… in realt√† tutto ci√≤ funziona perch√© la richiesta √® asincrona e il browser non si mette in attesa della risposta dando la possibilit√† all’utente di poter fare altro.

Ma come mai Javascript and Xml? Javascript √® un linguaggio di programmazione messo a disposizione dalla maggior parte dei browser ed √® tramite questo che √® possbile creare richieste http e processare le risposte, in una risposta il server potrebbe piazzare qualsiasi contenuto ma per la tecnica Ajax √® stato usato spesso XML e poi per renderlo ancora pi√Ļ veloce JSON che sta per JavaScriptObjectNotation, √® infatti come dice la parola, un modo per definire oggetti con notazione Javascript. Con entrambi √® possibile definire qualsiasi tipo di protocollo per processare le risposte ricevute nella nostra web-application.

Bene, ora che avete capito cos’√® Ajax, possiamo svelare quelle che non sono come sempre tutte rose e fiori. Come gi√† accennavo prima prima purtroppo, non esiste ancora uno standard ben preciso di supporto allo sviluppo di applicazioni del genere, n√® tanto meno esiste uno standard per i browser su come mettere a disposizione un oggetto XHR (XmlHttpRequest) e al momento chi vuole imbattersi in sofisticate applicazioni Ajax da solo dovr√† gestire numerose casistiche dettate dai diversi comportamenti dei browser.

Questo articolo termina qui e sar√† di spunto per molti altri articoli che cercano di spiegare come ad oggi sono stati risolti molti problemi, come l’utilizzo di svariati framework ajax, e le varie architetture messe a disposizione, inoltre verr√† dedicato un articolo alla predisposizione della comunit√† verso nuovi standard rivolti verso questa che al momento possiamo solamente chiamare tecnica di programmazione.

Saluti

NonSoloUnix

NonSoloUnix Vs JasperReport

Ciao a tutti oggi voglio inaugurare la ripresa di questo mio blog dedicando un articolo a questo bel framework che me ne ha fatte passare di tutti i colori.

Innanzitutto spieghiamo cosa è e a cosa serve questo framework. JasperReports è una libreria scritta in Java per sviluppatori Java e si compone di vari moduli per soddisfare richieste di reportistica aiutando gli utilizzatori della libreria a non doversi concentrare su problematiche esterne ma comunque indispensabili per lo scopo.

Immaginate ad esempio di dover preleveare una serie di informazioni da una base dati per generare dei documenti in funzione dei dati prelevati, se il vostro obiettivo si avvicina anche di poco a quello dell’esempio appena descritto JasperReport allora fa al caso vostro.

Dopo questa piccola premessa voglio precisare che scrivo questo articolo poich√© mi sono imbattuto in non pochi ostacoli per l’utilizzo di questo framework data la scarsa documentazione sul suo utilizzo(sar√† che i tutorial e le guide sono a pagamento?).

Non disperate non sarete completamente abbandonati, fortuntamente esiste questo blog e tutta una serie di tool che possono agevolarvi per la generazione del vostro primo report, innanzitutto vi consiglio di scaricare:

  1. la libreria JasperReport
  2. il tool iReport per Windows (vi consiglio l’ultima versione che √® molto ben fatta almeno la 3.6.1 mentre scrivo queste righe)

Fatto ciò installate iReport così da poter fare i vostri primi esperimenti, la prima cosa da fare in iReport è definire un DataSource, avete a disposizione varie fonti, una connessione JDBC, un file CSV, una fonte Excel, etc, io essendo pigro ho scelto una fonte Excel.

Successivamente create un report vuoto scegliendo il template A4, potrete notare come iReport vi illustra la struttura che potrebbe avere il vostro report che vi ha già comodamente diviso in bande: Titolo, Testa di colonna, Dettaglio, Piè di Pagina, Sommario, Sfondo. Non è detto che tutte queste debbano essere utilizzate, infatti io ho eliminato tutte tranne il Titolo, il Dettaglio e il Piè Pagina. Ho settato le altezze delle relative bande, ho valorizzato i margini della pagina e ho cominciato a definire i campi da prelevare dal mio DataSource (per semplicità ho fatto un DataSource Persona in un file Excel).

Dalle propriet√† del report (tasto destro sull’icona radice nello schema ad albero alla vostra sinistra) cliccate su EditQuery, da l√¨ √® possibile importare i campi del vostro DataSource. I campi appena importati saranno disponibili ora per il vostro report se volete che vengano iterate tutte le persone del vostro DataSource¬† dovrete piazzare i campi nella banda Detail √® solo l√¨ che il campo verr√† interpretato in questo modo, per campi unici vi consiglio di non usare la banda del dettaglio.

Una volta finito il vostro report potrete testarlo utilizzando l’apposito tasto Anteprima .. et voil√† il report √® servito.

Nel prox articolo vedremo un approfondimento su JasperReport e WebApplication

Saluti

NonSoloUnix

Firefox 3 e video Flash

Forse molti di voi che stanno usando Hardy Heron (Ubuntu 8.04) avranno notato rallentamenti e scattosit√† con i video in flash (ad esempio quelli di YouTube et simila…).

Personalmente io trovavo grossi problemi e a volte Firefox 3 finiva per non rispondere completamente ai comandi, quindi ad un certo punto mi sono sentito in dovere di indagare.

Per chi non lo sapesse quando si installa per la prima volta il Flash Plugin per Firefox Ubuntu vi fa scegliere quale installare dato che esistono pi√Ļ cloni dello stesso.

Io ho deciso di installare il flashplugin-nonfree, poco etico ma molto efficace visto che √® la versione di flash ufficiale, purtroppo non √® open source, ma meglio di niente; quando si installa questo pacchetto viene installata anche una dipendenza per il supporto all’audio dei filmati flash con il server audio PulseAudio. Ed √® proprio questo pacchetto che d√† tanti problemi con FireFox 3.

Quindi se usate il flash-plugin-nonfree vi consiglio di rimuovere il pacchetto libflashsupport

sudo apt-get remove libflashsupport

Poi andate in Sistema->Preferenze->Audio e selezionate come server sonori ALSAcome in figura:

Ora dovrebbe andare tutto per il meglio…almeno io ho riscontrato effetti positivi dopo questo cambiamento.

A presto.

NoNSoLo1x.

Conversazioni audio in aMsn (Farsight)

Nuove librerie di sviluppo… ce l’hooo!! (Tcl/tk 8.5)

Antialiasing … ce l’hoooo!!

Skin xp/Vista – Like … ce l’hooo!!

Versione di sviluppo 0.98… ce l’hoooo!!

E le conversazioni audio… D’OH!!!

Bene se vi ritrovate nella situazione sopra descritta (o qualcosa del genere) siete nel posto giusto, per aggiungere il supporto alle chiamate audio per aMsn dovete installare alcune dipendenze prima di compilarlo.

Tutte le dipendenze sono raggruppate qui

http://people.collabora.co.uk/~kakaroto/gutsy-debs/

Installatele tutte e ricompilate aMsn con la solita procedura

make clean

./configure

make

sudo make install

Per chi non avesse i sorgenti da compilare deve dare questo comando:

svn co https://amsn.svn.sourceforge.net/svnroot/amsn/trunk/amsn amsn

Entrare poi nella directory appena scaricata (amsn) e seguire i passi sopra descritti.

N:B: ATTENZIONE! Assicuratevi dopo il comando ./configure che la libreria FARSIGHT sia stata riconosciuta, per rendervene conto alal fine dell’output di ./configure dovreste trovare alal voce FARSIGHT la parola “yes”… niente di + semplice…. ūüėõ

A presto e buona conversazione!!