Dices provably fair – Nonce overflow vulnerability

Most of bitcoin dice software use a system to prove the fair play of the server for each bet. Most of them implement this mechanism using two seed (server seed and client seed) combined with a session nonce in the aim to provide a fair random number for each bet and usually this nonce is initialized to 0 after each seed change.

But, what if this nonce is stored in an unsigned integer variable (32bit in 32bit systems, 2³² values)? Theorically after 2³²-1 bets, the nonce goes in overflow and return to 0.

Saving each bet roll for every play in the first 2³²-1 window, will provide a map function:

f: n → roll . (n < 2³²)

that could be used to declare a function g(m) that predicts every future roll:

g (m) = f (m % 2³²)

A simple fix for this problem is to regenerate the server seed and reset the nonce after 2³² bets.

Advertisement

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.

Fix eclipse random crash with libsoup-2.4

After upgrading libsoup to version 2.4 on funtoo, eclipse began to present random crash while using auto-completation; the fail-log says that the problem is in libsoup.

The fix is easy, just add this line to your eclipse.ini, don’t ask me why:

-Dorg.eclipse.swt.browser.DefaultType=mozilla

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

Isometria 2D e rendering in MonoGame / Xna

Oggi vi andrò ad illustrare come strutturare un possibile sistema di coordinate in un videogame con visualizzazione isometrica 2d (per intenderci, qualcosa di simile all’immagine successiva). Ha senso parlare ancora di 2D e di rendering isometrico? Il 2D esiste e resiste? Non ne ho idea, ma resta il fatto che la roba vecchia è sempre meglio, siamo tutti un pò nostalgici. Ed inoltre uno dei miei giochi preferiti utilizza questo tipo di visualizzazione (RollerCoasterTycoon).

TileMap

Read More…

MonoGame con F# su Linux

In quest’articolo vi illustro brevemente come utilizzare F# su Linux per realizzare videogames multipiattaforma tramite la libreria MonoGame (Un clone opensource di Microsoft XNA).
Perchè scriverci un articolo? Fondamentalmente perchè  non tutto funziona al volo come i team di Xamarin e MonoGame vogliono farti credere; o almeno, non a me, non su gentoo linux e monodevelop4.

Read More…

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!

Weed Adventure & Alchemist Adventure

Qualche anno fa ho realizzato il gioco FreeAlchemist. Ho voluto reiterare l’esperienza riscrivendolo in Java per android, utilizzando i canvas (avrei fatto meglio ad utilizzare un engine già predisposto).

Ho ottenuto due software per android, che differiscono solo per i contenuti grafici:

WeedAdventure:
https://play.google.com/store/apps/details?id=org.weedadventure_lite

Immagine

AlchemistAdventure:
https://play.google.com/store/apps/details?id=org.alchemistadventure_lite

Immagine

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…

Uazapp-im: it’s time to fix

Starting from next week, I’ll start to fix the protocol problem on uazapp-im, stay tuned!

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…

uazapp-im: whatsapp server down

After five days of work on uazapp-im (a desktop client for Whatsapp), WhatsApp Inc modified the server-side protocol or something like this, so my software is no more usable. I will alert you when the service will be available again (I hope soon).

WIP: github game-off-2012

Ho deciso di partecipare al game-off-2012 di GitHub, un contest di programmazione nel quale viene proposto di sviluppare un gioco visualizzabile sul browser (e’ possibile utilizzare qualsiasi tecnologia, flash, html5, webgl, unity, …), con tematiche relative ai commandi di git (clone, merge, push, pull, …). Sono previsti vari premi, 5 iPad mini per i primi classificati, 100$ da spendere su github.com per i secondi (non e’ molto chiaro quanti siano, o se sono tutti coloro che han realizzato un gioco completo), od un badge coderwall per tutti i partecipanti.

Questo e’ il mio, un piccolo scroller verticale scritto in CoffeeScript (un linguaggio funzionale ad oggetti che compila in codice js) e Html5, utilizzando la libreria PropulsionJS. E’ presente anche una pagina nella quale e’ possibile provarlo e scaricare i sorgenti.

youtube-md.sh

Script bash che ti permette di scaricare un video da youtube, ed estrarre l’audio come mp3


TITLE=`youtube-dl $1 -e`
youtube-dl $1 -o "$TITLE.flv"
ffmpeg -i "$TITLE.flv" -f mp3 "$TITLE.mp3"
rm "$TITLE.flv"

view raw

youtube-md.sh

hosted with ❤ by GitHub

JuliaSet with OCaml/GL

Inauguro la categoria per presentare il mio primo gist; si tratta di un semplice script per il rendering dell’insieme di Julia. Tempo fa’ avevo gia’ fatto qualcosa di simile, ho voluto reiterare l’esperienza con un linguaggio funzionale.

Read More…

WIP: uazapp-im, a desktop client for whatsapp

News about uazapp-im here, stay tuned!

Hey there,

yesterday I started a new interesting project, uazapp-im. It is an instant messenger forked from emesene capable of connecting to whatsapp from your desktop.

Here’s a first screenshoot of a working chat session with uazapp connected to the whatsapp server:

Read More…

YoutubeMD

YoutubeMD is a pygtk program to download music from Youtube.com. It requires the Python interpreter version 2.x, the pygtk library and the command-line program youtube-dl (http://rg3.github.com/youtube-dl/).

Source codes are available on github https://github.com/dakk/youtube-md

Dizionario Sardo Android App

Dopo qualche settimana di riposo dal pc, ecco il primo dizionario della lingua sarda per android, gratuitamente scaricabile dal market place di google. Dizionario Sardo ti consente di consultare il dizionario di www.ditzionariu.org direttamente sul tuo dispositivo android.

StayTunedLive.com Android App

Ecco la mia terza App per android, una semplice applicazione che permette (per ora) di visualizzare gli eventi e le ultime news del sito StayTunedLive.com, del quale sono cofondatore e webmaster.

Update: Cagliari Trasporti CTM

Sollecitato da una recensione nel play store, ho rilasciato un piccolo update dell’applicazione Cagliari Trasporti CTM; l’update prevede solo l’aggiunta delle due linee notturne (blu notte e notte rossa). Il link del play store e’ il solito.

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.

Cagliari Trasporti CTM

Per inaugurare la mia iscrizione allo store Android (Google Play), ho realizzato un applicazione per la visualizzazione degli orari dei mezzi pubblici della mia citta’ (Cagliari e paesi limitrofi).

Erano gia’ presenti nello store 3 applicazioni che offrivano la medesima funzione, ma ho deciso di pubblicarla comunque in quanto aggiungevo alcune caratteristiche che alle altre applicazioni mancavano (visualizzazione orari in tempo reale e dell’intera giornata e segnalibri).

Ho pubblicizzato l’applicazione solo nel mio profilo facebook, per rendere partecipi i miei amici, ed un giornale online ha realizzato un articolo a riguardo (io non ho chiesto niente, ma essendo il mio profilo fb pubblico, chiunque puo’ vedere cio’ che pubblico).

Purtroppo (o per fortuna) si e’ scatenato un putiferio riguardo alla proprieta’ intelettuale dell’idea tra me ed un altro sviluppatore; il tutto si e’ comunque risolto con una stretta di mano.

Immagine

Se volete provarla, ecco il link del googleplay.

libNNAL

Durante le superiori mi era venuta la malsana idea di fare una tesina per la maturita’ riguardante le reti neurali e l’apprendimento automatico; cosi’ dopo aver studiato riguardo la teoria dell’argomento ho preparato una libreria che implementa una rete multi layered perceptron, con la possibilita’ di apprendere tramite un algoritmo di backlearning personalizzabile. A corredo della libreria ho realizzato alcuni applicativi di esempio in C/Gtk+, un applicativo che utilizza una rete per il pattern recognition, ed un widget gtk per visualizzare le reti realizzate con la mia libreria.

Il codice lo trovate nel mio repository github (e’ anche presente un breve pdf che illustra il mio lavoro).

FreeAlchemist

Uno dei progetti di cui vado piu’ fiero e’ questo giochino, FreeAlchemist. Realizzato in python e pygame, il gioco e’ disponibile per tutte le piattaforme, ed e’ anche presente nei repository di ubuntu e di debian. Dopo la prima pubblicazione, altri sviluppatori si sono uniti per pubblicare alcuni bugfixes e nuove features.

La grafica l’ha fatta un mio amico, qualche anno fa, non ricordo il nome.

SpiderPig OS

Spider Pig e’ un sistema operativo fatto in casa simil unix, basato su un kernel ibrido tra microkernel e monolitic kernel (anche se non c’e’ ancora un multitasking funzionante), realizzato (o almeno iniziato) da me per accrescere le mie conoscenscemenze informatiche. Il sistema e’ interamente scritto in C e assembler x86, e per ora (e credo per sempre, visto che il progetto e’ defunto) supporta solo le architetture x86.

Read More…

Rendering dell’insieme di Mandelbrot

In questi giorni mi son appassionato al mondo dei frattali, e specialmente all’insieme di Mandelbrot. Ho realizzato un programma in linguaggio C che permette di generare ed esplorare i frattali tramite zoom e freccie; il rendering avviene tramite la libreria SDL, e utilizza dei gradienti modificabili (il colore cambia man mano che ti avvicini al contorno dell’insieme. I sorgenti son disponibili nel mio repository github, per chi ne fosse incuriosito.

Eccovi due screenshoots: