Archive | Diario RSS for this section

Apache2: redirect different domains to subfolder

In the aim to merge two of my server on digitalocean, today I tried to write a mod_rewrite rule to redirect a secondary domain to a subfolder. After one hour, I found that I can do that with a VirtualHosts!

Just edit the file /etc/apache2/sites-available/default and add a rule for each domain at the end of file:

<VirtualHost *:80>
ServerName http://www.domain.org
DocumentRoot /var/www/vhosts/domain.org/www
</VirtualHost>

It’s easy, if you know.

Advertisements

JQuery e supporto multilingua

Hai bisogno di rendere la tua web app multilingua? Niente di più semplice; in questo articolo vi propongo un metodo che vi permetterà di avere un app multilingua utilizzando jquery e dei file json.

Il metodo è abbastanza semplice, la sua implementazione può essere sviluppata con una decina di righe di codice (esclusi naturalmente i file di traduzione); il metodo consiste nell’aggiunta di un attributo a tutti gli elementi dell’interfaccia che conterranno un testo multilingua. L’attributo conterrà come valore, una chiave, che verrà ricercata nei file delle traduzioni:

<p tkey="example"></p>

Ciò che ci serve fare, è prendere tutti gli elementi che hanno l’attributo tkey (in questo caso), ed aggiungere al loro interno il testo con codice il valore dell’attributo, tradotto nella lingua del browser corrente.

Javascript ci consente di conoscere la lingua del computer che stà visualizzando la pagina, tramite il campo navigator.language; conoscendo la lingua, possiamo selezionare il corretto file di traduzione. Ho scelto di utilizzare dei file json per codificare le traduzioni, questi file saranno così strutturati:

lang/it.json
{
"chiave" : "Stringa in italiano",
"example" : "Esempio"
...
}

Per prima cosa, dobbiamo caricare il file di lingua corretto, per farlo utilizziamo la variabile navigator.language e jquery:

langCode = navigator.language.substr (0, 2);
$.getJSON('lang/'+langCode+'.json', translate);

Al completamento del caricamento del file json, jquery chiamerà la funzione “translate”; questa funzione deve selezionare tutti gli elementi del dom che hanno l’attributo “tkey”, e sostituire il contenuto con la stringa nella lingua corrispondente. Per selezionare elementi, jquery è molti versatile: nel nostro caso basta usare un selettore di attributi:

$('[tkey]')

Ora vediamo la funzione translate:

var translate = function (jsdata)
{
$("[tkey]").each (function (index)
{
var stringaTradotta = jsdata [$(this).attr ('tkey')];
$(this).html (stringaTradotta);
});
}

Quello che fa è semplicemente, per ogni elemento contenente l’attributo tkey, prelevare la stringaTradotta dal file json precedentemente caricato con $.getJSON(), ed inserirla come codice HTML dell’elemento.

Questo è tutto; qualcuno magari si chiederà “Ma perchè non utilizziamo una delle milioni di librerie che fanno già tutto questo, e lo fanno anche meglio?”; beh, una soluzione simile ha il vantaggio di fare quello che ci serve in poche righe di codice, con un overhead abbastanza basso, in un modo abbastanza semplice e pulito. Poi se abbiamo esigenze più elaborato, si può pensare di scegliere di
utilizzare librerie più elaborate.

Potete trovare il codice di quest’implementazione sul mio profilo github: https://github.com/dakk/jquery-multilang

Regionali Sardegna 2014, l’app e le stat in tempo reale

In occasione delle elezioni regionali 2014 in Sardegna, ho tempestivamente realizzato un app android e web per visionare i risultati in tempo reale. Nella giornata di domenica gli unici dati disponibili sono quelli relativi alle affluenze, mentre lunedì saranno presenti anche i risultati man mano che vengono scrutinati. L’app è disponibile su Android, ma è anche utilizzabile via web sugli altri dispositivi.

2014-02-17 14.35.23
Screenshot_2014-02-16-17-57-54

Nella nottata di domenica, ho inoltre realizzato una pagina web in cui vengono visualizzati in tempo reale i grafici ed i dati relativi allo spoglio. Il link per raggiungerla è http://sagregna.it/reg14/chart/.

Screenshot
Screenshot-1

 

Tutti i dati visualizzati ed utilizzati sono a cura della Regione Sardegna.

Sardegna Orari Trasporti e geodata visualization

Dopo due anni di attività dell’applicazione CTM Orari per android, ho deciso di riscrivere il tutto completamente, utilizzando HTML5, jquery e javascript. Il risultato è Sardegna Orari Trasporti (https://play.google.com/store/apps/details?id=com.davidegessa.sardegnatrasporti).

L’applicazione, rispetto alla precedente, presenta numerose funzionalità:

  • Sfoglia le linee CTM per Linea, Direzione e Fermata, o visualizza le fermate vicine a te.
  • Calcola il percorso per arrivare da un punto all’altro della Sardegna, tramite gli autobus delle linee CTM e ARST.
  • Geolocalizzazione per visualizzare le fermate vicine e il punto di partenza.

Permette sempre di sfogliare le linee CTM per linea, direzione e fermata, ma offre anche la possibilità di pianificare il percorso utilizzando i servizi di google maps.

Inoltre, la nuova applicazione salva in modo anonimo le fermate ricercate dagli utenti, rendendo possibile fare delle statistiche sull’utilizzo dei vari bus nei vari orari e nelle varie fermate. I dati verranno presto rilasciati in formato open, per ora è presente un applicativo basato su openstreetmap.org, leafletjs e bootstrap, che consente di visualizzare le fermate utilizzate nelle ultime 24 ore: http://sagregna.it/oraritrasporti/map/

Mappa Fermate CTM

Link delay, Energize.js e JQueryMobile

Siete rimasti un po turbati dal delay dei click event sulle vostre applicazione JQueryMobile su Android e iPhone? Il problema non è causato dalle prestazioni del dispositivo, ma è il modo con cui le webview cercano di individuare i doubletap. E’ possibile disabilitare questa feature (che nel mio caso provocava seri problemi all’usabilità dell’interfaccia), includendo un semplice script nelle vostre pagine responsive, energize.js:

https://github.com/davidcalhoun/energize.js

Vi basta inserire lo script nella cartella del vostro software, e caricarlo nelle pagine prima del caricamento degli altri script che interagisconono con gli eventi click (jquery.js, jquerymobile.js).

Spotted Quartu Android

E’ arrivata l’app ufficiale Android da me realizzata per la pagina facebook Spotted Quartu.
2 3

 

Sagregna.it – L’app per le sagre in Sardegna

Sagregna.it

Vi presento la mia ultima creazione, “Sagregna.it”:

Per conoscere le feste paesane, e non solo, basta un click. Nasce Sagregna.it, la prima app web e android per essere aggiornati su tutte le sagre in Sardegna. Un’applicazione multipiattaforma realizzata da Davide Gessa e scaricabile direttamente da smartphone, tablet o dal computer. Il progetto ha solo tre giorni di vita ma contiene già informazioni su 91 Comuni, 48 sagre, e 34 eventi. Numeri destinati a crescere rapidamente grazie all’interfaccia dedicata alla segnalazione degli eventi da parte degli utenti.

L’applicazione è fruibile dal sito internet sagregna.it tramite computer, o utilizzabile dai dispositivi portatili attraverso un’applicazione Android, e in futuro sarà disponibile anche una versione per iPhone e altre piattaforme. Nella prima schermata di Sagregna.it compare la cartina dell’isola con tutte le sagre segnalate su cui cliccare sopra, oppure una pagina organizzata per categorie con tutti gli eventi da La Maddalena a Cagliari, un calendario. E lo spazio dedicato a chiunque voglia segnalare sagre ed eventi del proprio paese.

– Federica Lai, Casteddu Online –

Ok, ma cosa e’? E’ un applicazione server side che utilizza jquerymobile per l’interfaccia grafica, mysql e php per il core, openstreetmap e leafletjs per le mappe. Ma perche’ ho utilizzato queste tecnologie? La risposta e’ semplice, volevo scrivere una sola volta un app per tutte le piattaforme (per tutte le piattaforme con un browser decente, naturalmente (non l’ho manco provata su IE, ma jquerymobile assicura che funziona tutto quasi perfettamente)). Le versioni mobile native sono quindi delle webview che mostrano l’applicazione web, niente di piu’ figo; per ora e’ presente una versione per android4.
La piattaforma invoglia la collaborazione, fornendo un interfaccia per l’inserimento di dati da parte degli utenti; e’ comunque in preparazione un software di analisi, che autonomamente permettera’ di ricercare nuovi eventi su dei siti selezionati.

L’applicazione mobile e’ accessibile dal browser al link http://sagregna.it/mobile, l’app android la trovate sullo store.

Facebook, come aggiornare i metadati utilizzati durante la condivisione

Quante volte vi e’ capitato di insultare facebook che mantiene i vecchi metadati come anteprima nella condivisione? Beh, a me spesso, ma la soluzione e’ semplice: https://developers.facebook.com/tools/debug/

Vi basta inserire il link di cui volete aggiornare i metadati nel form di questa pagina, premere il tasto magico, e facebook riaggiornera’ i metadati, suggerendoti dall’altro quali errori hai commesso (immagini troppo piccole per essere utilizzate come anteprime, metadati mancanti, etc).

LeafletJS and Android WebView crash on first startup

After one month of crazy panic to get my jquerymobile/leafletjs application working on a webview in Android without crash on first run, I found the solution:

// Magic code
webView.freeMemory();
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

I hope could be useful for someone.

Multimedia Server with Raspberry Pi

Tired of switch on the notebook every time I need to download something, watch telefilms or listen music, today I made a black box using a RaspberryPi to make these things.

2013-09-16 22.19.50

The box provides these services:

  • SSH network filesystem
  • Realtime Media streaming
  • Music player with web interface
  • Torrent daemon with web interface

Read More…

MonoGame: fix block text problem

Yesterday I’ve started to write the UI of my game with monogame on linux. After writing a window system, I’ve tried to display some text with SpriteFonts, but has displayed black blocks instead of text.

Immagine

Searching on google, someone said that I should create my spritefonts using the monogame content processor; done, but same result.
Searching deeply on google, someone else said to install libtxc_dxtn to fix the problem: this has worked, thanks ShaneG.
Immagine

MineML: F# miner

MineML is a multithread CPU based bitcoin miner written in F#. At the moment it’s a slow implementation, but the class structure offers the possibility to implement different type of MinerThread using different processing methods (opencl, cuda, or sha256 dedicated hardware).

The program structure is very simple: there’s a class (Program) that reads config file and creates the Miner object; the Miner object spawns MinerThread objects. At the moment there’s only the implementation for a CPU based thread, but will be possible to implement an opencl or cuda based thread.

Immagine

The TODO list contains:

  • Statistics
  • GUI interface
  • OpenCL thread implementation
  • Difficulty handling

Want to work on? Fork it on github!

Autovelox Quartu Sant’Elena

Ho realizzato una piccola mappa interattiva con i nuovi autovelox piazzati nella zona Flumini di Quartu e Poetto.

autovelox big

http://a.tiles.mapbox.com/v3/dak91.map-4yhq2npy/page.html#13/39.2245/9.2432

Uazapp-im: a desktop client for whatsapp

Uazapp-imTest the convenience of using your WhatsApp account directly from your computer.

Uazapp supports different operating systems: Windows, Linux, Mac Osx and many others.

Uazapp is opensource, you can download the source code and improve the application for non commercial use.

Read More…

La mia nuvola personale

2013-01-06 21.21.50

Ho sempre desiderato poter sfruttare la potenza di calcolo del mio pc casalingo ovunque mi trovassi, senza la necessita’ di averlo con me. Con quest’obiettivo, oggi ho messo a punto la mia linux box per poterla utilizzare in remoto tramite tablet/cellulare o qualsiasi altro pc con a disposizione una connessione internet ed un client vnc.

Read More…

Hello World

Inizio l’ennesimo blog; crescendo ti rendi conto delle cazzate che hai scritto negli altri, e dopo qualche anno decidi che e’ il momento di renderli privati e di inziarne uno nuovo. Spero che questo sia l’ultimo, e’ un gran tedio scegliere il tema, ed un sottotitolo.