Adding Sony Android SDK in Android Studio

Today I started experimenting with the Sony SDK to add floating windows (Small Apps in the Sony lingo) capabilities to my app. All the documentation I found was for Eclipse and, apparently, nobody thought of documenting how to use it with Android Studio.

So, here are my findings after a lot of struggle. Beware, I am not sure this is the correct way to do it, but it works! At least for me. :)

Continue reading

Vagrant and Ansible (part 1)

I am used to have a complete LAMP stack on my development machine, so that I can test my sites on a browser directly while writing code.

It’s probably an old-school way to develop, but it has worked well until recently.

Now I am working on two projects. One is a completely new project, but it needs to run on a Ubuntu 12.04 server but could be tested without problems on a more recent Linux config; the other is some legacy PHP4 code that runs fine on Ubuntu 12.04 with PHP 5.3 but it’s a mess to adapt to PHP 5.5.

I thus decided to give Vagrant a try and install an Ubuntu 12.04 image on Virtualbox. I found a Vagrantfile on the Internet and, allons-y!, everything works.

Then I thought: what would happen if I misconfigured the Vagrantfile, or the server config, or, worse, deleted the wrong file? Let’s study some devops tools!

Some months ago I read a book on Puppet and did some tests, but I found it quite complicated, and I heard Chef is similar. The new kid on the block is Ansible, and, from what I read on the Internet, it looked nice. Of course I tested it.

And then, keeping a terminal window open on the old VM’s Vagrant directory, it happened: a vagrant destroy in the wrong directory.

So I had to rush my Ansible study. :)

Continue reading

Sleep()ing Android

I recently restarted developing on Android, after (too many) years. I had to catch up with all the updates in the framework, as I was using Android 1.6/2.0 at the time, but all in all, I found out it was easier than I thought.

I decided to create a small game-like app to get back in shape before engaging all the new things in Android 4.

And I found I needed to sleep() for a bit after a user action.
Continue reading

Testing framework-backed APIs with PHP’s internal web server

Recently I had to prepare functional tests for a set of (RESTish) APIs in a Silex-backed application. The problem is that I couldn’t test POST, PUT and DELETE methods on the development environment or (worse) on the staging server.

So I came up with the idea of using the PHP integrated webserver, started from the PHPUnit bootstrap, and a couple of rules in the app bootstrap to redirect all storage calls to a temporary database.

Continue reading

Rebirth

As nobody notices, I am working on bringing this blog back to life.

And, given that I moved to the UK, I am going to (try to) write everything in english.

The old posts will remain in italian, as they could contain useful informations.

See you soon! :)

contentEditable e i suoi demoni

Nell’ultimo anno, prima per lavoro e in questo periodo per esperimenti personali, mi sto addentrando nella programmazione Javascript, e l’ho fatto scalando la parete più ripida della montagna: contentEditable.

Ho deciso quindi di riassumere qui le varie idosincrasie che ho trovato, sperando che mi servano in futuro per evitare di sbattere di nuovo la testa a sangue contro il muro. Per tutti gli esperimenti ho usato Firefox (tra la 8 e la 10, più o meno)

Preparare l’ambiente

Ci sono due modi per usare contentEditable: definire tutto il documento contentEditable (di solito si usa con un iframe), o definire solo un elemento (la strada che ho seguito io). Nel primo caso basta, da Javascript:

document.contentEditable = true;

Nel secondo basta creare un elemento HTML con la proprietà contenteditable:

<article contenteditable="true"></article>

Fatto questo, io personalmente imposto tre proprietà:

document.execCommand("useCSS", false, true);
document.execCommand("styleWithCSS", false, false);
document.execCommand("enableObjectResizing", false, false);

La prima serve a usare <B> e <I> per fare grassetto e corsivo in Firefox, mentre Explorer (da quel che leggo) usa <STRONG> e <EM>. Se non la si specifica, Firefox riesce a fare peggio che non seguire la semantica di HTML: usa <span style=”font-weight: bold;”></span> e <span style=”font-style: italic;”></span>

La seconda fa la stessa cosa, ma una delle due è deprecata. Per compatibilità io le uso entrambi.

La terza serve ad evitare che, se ci sono oggetti come <img> o simili, l’utente possa ridimensionarli trascinandoli. Si può anche non specificarla, ma io preferisco controllare cosa fa l’utente tramite plugin jQuery che controllano gli spostamenti e i ridimensionamenti.

La cosa importante da notare è che TUTTI i comandi dati tramite execCommand() vanno eseguiti DOPO che c’è un elemento con contentEditable presente e visibile nel DOM. Se state creando l’elemento da Javascript, e fate (con jQuery)

var $el = $('<article />').attr('contenteditable', true');
document.execCommand("useCSS", false, true);
$('body').append($el);

Riceverete una bella eccezione nella console di Firefox. Basta spostare l’execCommand dopo l’append.

Non basta un contentEditable vuoto

Naturalmente non basta un <article contenteditable=”true”></article>, perché, come tutti gli elementi senza contenuto, le sue dimensioni sono 0x0, quindi è invisibile e soprattutto “incliccabile”, e perciò non c’è modo di scriverci dentro. Basta aggiungerci un figlio. Alcuni ci mettono un <br />, ma io preferisco un <p>, che però ha gli stessi problemi, quindi la sintassi completa è:

<article contenteditable="true">
  <p>
    <br />
  </p>
</article>

Perché questa tiritera? Perché Firefox, se state scrivendo dentro un <p>, quando premete Invio chiuderà automaticamente il <p> e ne aprirà un altro identico. In qualsiasi punto siate. Se siete fuori da un <p>, inserirà semplicemente un <br />, con buona pace della semantica (e per la gioia dei cialtroni che fanno spaziature verticali premendo Invio n volte).

Ma ancora non basta! Ma cosa vuole??

Se avete predisposto tutto il suddetto, e avere fatto la vostra toolbar (magari in un prossimo articolo vedremo come) con la possibilità di inserire grassetti, corsivi, liste, ecc., vi scontrerete con un problema assurdo: Se tentate di rendere “lista” il primo elemento del contentEditable, Firefox solleva un’eccezione. Bold e Italic funzionano perfettamente, solo le liste (e gli allineamenti, e forse qualcos’altro che non ho ancora scoperto) danno errore. E` un bug di Firefox, presente fin dalla 2.0, pare. Io l’ho aggirato così:

<article contenteditable="true">
  <p></p>
  <p>
    <br />
  </p>
</article>
Con un <p> vuoto (quindi dimensioni 0x0, quindi incliccabile) prima del contenuto vero. Brutto, ma funziona. Poi il codice si ripulisce lato server, perché ha TANTO bisogno di essere ripulito.

Recensione: PHP and MongoDB Web Development (di Rubayeet Islam – Packt Publishing)

Disclaimer: ho ricevuto il libro per la recensione da Packt Publishing stessa.
Ho cercato comunque di fare una recensione obiettiva.

Recensione generale

In una parola: ottimo. Anche se migliorabile.

A memoria credo sia il primo a trattare l’integrazione tra PHP e MongoDB.
Lo stile è molto scorrevole. I concetti sono spiegati in modo chiaro nella maggior parte dei casi. Fanno eccezione i concetti di programmazione funzionale nel capitolo dedicato a map-reduce, che avrebbero beneficiato di un maggiore approfondimento.
Ogni capitolo presenta diversi esempi di codice per gli argomenti trattati.
I quiz di cui è costellato aiutano a richiamare i concetti appena appresi e a capire se sia il caso di rileggere quanto appena studiato. Peccato che non siano molto numerosi. Le soluzioni ai quiz si trovano alla fine del libro.

Vengono presentati anche alcuni “compiti per casa” (di cui non viene data soluzione, naturalmente) che invitano ad implementare soluzioni diverse da quelle presentate o software che utilizzando i concetti esposti li espandano per creare software più complessi.

La caratteristica che ho apprezzato di più è la presentazione degli esempi: prima viene esposto il codice completo di tutti gli script, e in seguito, durante la spiegazione, vengono riportati i frammenti di codice. Questo consente di avere una visione globale e di poterla studiare da soli. Molti altri testi spezzano i sorgenti rendendoli illeggibili, o integrano la spiegazione in commenti lunghissimi che, senza colorazione della sintassi, li rendono altrettanto illeggibili.

Lo stile adottato sembra distaccarsi un po’ dal classico dei manuali tecnici, per tendere a quello dei testi universitari.

In alcuni casi si ha la sensazione che ci sia molto di più dietro (e spesso a ragione), e che il libro copra solo l’uso base di alcune caratteristiche.
In altri casi è scritto chiaramente (con relativo link) che per approfondire si possono consultare fonti online.

Alcuni piccoli errori tipografici come campi di array separati da :  (come in javascript) invece che da => in PHP, o virgolette dimenticate  nelle chiavi di accesso agli array sono facilmente individuabili e non pregiudicano la qualità del libro.

Continue reading

Pogoplug, altra delusione…

Continuo coi miei rant, spero di non sembrare troppo disfattista. Magari nei prossimi giorni parlo un po’ del Galaxy S2, di cui invece sono soddisfattissimo. :)

Circa un anno fa l’agenzia dove lavoro ha comprato un Pogoplug Business. L’esigenza principale era di avere un “file server” semplice da usare, con interfaccia sia web (da dare ai clienti) che “locale” (per montare le condivisioni sui PC della LAN). Era essenziale la multiutenza, in modo da dare, per esempio, una cartella ad ogni utente locale, e una ad ogni cliente, dove potesse caricare i file da mandarci e scaricare quelli preparati da noi.

Per questo siamo andati sulla versione Business, la più costosa, pubblicizzata proprio con queste caratteristiche.

Come funziona

Spiego brevemente come funziona il Pogoplug.

Continue reading

Gnome 3, mezzo disastro

L’ho visto in experimental, l’ho tenuto d’occhio per un po’ e finalmente una decina di giorni fa ho deciso di installarlo. Ma me ne sto pentendo.

L’ambiente è stato completamente rivoluzionato. Per alcune cose (poche) in meglio, per altre (molte) in peggio. In generale si nota una spiccatissima tendenze ad assomigliare più possibile a OSX. Per non dire che lo stanno copiando a man bassa. Continue reading