Archivi tag: programmazione

Espressioni regolari e alfabeto farfallino

Citando Wikipedia:

Il farfallino o alfabeto farfallino è un gioco linguistico per bambini. Si può intendere come una forma estremamente semplice di codice segreto e consiste nel raddoppiare ogni vocale con l’aggiunta di una f interposta: per esempio, a diventa afa, e diventa efe, e così via (quindi “ciao” diventa cifiafaofo). Viene detto “farfallino” perché la parola “farfalla” ha un suono simile a quello delle parole “codificate” seconda questo schema.

Un computer può aiutarci in maniera estremamente semplice per codificare il testo in questa maniera.

La regola, come abbiamo letto, è che dopo ogni vocale dobbiamo mettere una f e poi ancora la stessa vocale.

Ecco quindi il semplice codice PHP:

$farfallino = preg_replace('/([aeiou])/', '\1f\1', $testo);

Vediamo di spiegarlo: la sintassi della funzione preg_replace è:

preg_replace($espressione_regolare, $sostituzione, $stringa_su_cui_applicare);

L’espressione regolare, per regola, deve iniziare e finire con un delimitatore, io ho scelto la slash: /. Questa espressione prende, con [aeiou], ogni vocale, poi grazie alle parentesi tonde ogni vocale viene messa in un parametro numerico, per essere riutilizzata dopo.

Nella sostituzione, utilizzo questo parametro \1 per dire: “ok, metti qui la vocale che ho appena letto”. Quindi avrò: VOCALE f VOCALE, che tradotto in codice diventa appunto \1f\1.

Cifiafaofo afa tufuttifi!!!

Aggiungere smileys animati con Pidgin? Certo!

Il piccione parlante
Il piccione parlante

UPDATE 30/05/09: ho riscritto la patch da zero in seguito alle modifiche recenti nel ramo di sviluppo, gli effetti sono gli stessi ma il procedimento seguito diverso :-)

Con pidgin, se cerco di aggiungere uno smiley ricevuto da un amico ai miei smileys, ho come effetto che viene salvato solo il primo frame, in pratica perde l’animazione.

Irritante.

Più irritante se penso che questo problema c’è da tempo immemore ma gli sviluppatori continuano a chiudere il ticket con stato: wontfix, perché il GdkPixBuf (non sviluppato da loro) non supporta il salvataggio in gif.

Bene, siccome mi ero rotto il cazzo di questa cosa, e un po’ per sfida, ho scritto una patch che utilizza un metodo non troppo pulito, ma che permette di aggiungere sto coso.

Come provarla?

Il metodo più semplice è quello di installare la versione di pidgin del mio repository, oppure se siete smanettoni dovrete applicare la patch al sorgente che dovete prendere dal ramo di sviluppo (attraverso monotone), applicarla, compilare ed installare pidgin! :-) [se avete bisogno di info a riguardo, contattatemi]

Per gli utenti di windows: la patch funziona (credo) anche per win, solo che non ve la posso compilare, dovrete farlo voi :-P

Problemi noti:

  • La patch permette di aggiungere uno smiley, non di salvarlo come immagine. Almeno per il momento. La nuova versione della patch (v0.6) permette anche di salvarli su file :-)
  • L’ho testata un pochino, ma non è mai sufficiente: ho bisogno di feedback ragazzi, datevi da fare e provatela!
  • Utilizzerà un po’ più memoria. Beh a dire il vero si parla magari di una 50ina di kB con un migliaio di smileys visualizzati, ma sono pignolo :-P
  • L’ho testata solo sul ramo di sviluppo (attualmente la 2.6.0dev), se qualcuno vuole portarla al ramo stabile (2.5.5) è il benvenuto :-)

Nerd area: come funziona funzionava (prima della v0.7)

Al momento della ricezione dello smiley, lo stream di dati viene salvato come file all’interno della cartella ~/.purple/remote_smiley_cache, con un nome univoco e nel formato originale inviato dal nostro contatto.

Viene creata una corrispondenza smiley_visualizzato<==>file_in_cache, in modo che al momento in cui faccio tasto destro sullo smiley e clicco su Aggiungi smiley personalizzato, lui non vada a chiedere al GdkPixBuf di salvarglielo, piuttosto gli chiedo di andare a leggere il contenuto del file in cache e di salvarlo tra gli smileys personalizzati.

Leggetevi la patch per maggiori info. Lo so, non è commentata, ma il codice di pidgin purtroppo non lo è mai, quindi ho semplicemente seguito lo stile attuale.

Java, MIDI, snd_rawmidi_open_conf assertion error

Sto provando a creare un programma in Java per interfacciarmi con delle porte MIDI, ma quando cerco di chiamare la funzione open() sulla porta di MIDI_IN, ottengo questo errore:

java: ../../../src/rawmidi/rawmidi.c:264: snd_rawmidi_open_conf: Assertion `err >= 0' failed.

Aggiornerò questo post se troverò la soluzione.

UPDATE 03/02/09: ho formattato e son tornato a Ubuntu 32bits, e tutto è risolto. Fanculo.

4 cose che non sapevo di SVN

Ecco cosa ho scoperto di nuovo subversion (SVN):

Come creare un branch
svn cp trunk branches/nome_branch
Come riunire un branch nel trunk

prima di tutto entrare nella cartella del branch (cd branches/nome_branch), poi scopriamo la revisione alla quale è stato creato:

svn log --stop-on-copy

e segnamoci la revisione XXXX.

Spostiamoci nel trunk e uniamo:

svn merge -rXXXX:HEAD ../branches/nome_branch
Ignorare dei files

…in modo che SVN (e per esempio client come rapidSVN) non li tenga in considerazione:

svn propset svn:ignore nomefile .
Se abbiamo un conflitto al momento del commit
svn up

Caso 1: voglio tenere la versione nel repository ed ignorare le modifiche locali:

svn revert nomefile

Caso 2: ho una situazione più complessa e devo agire a mano:

Modificare il file che creava conflitto, unendo le modifiche e decidendo manualmente come comportarsi, ed eliminando i caratteri strani (es. >>>>>>>) che mette SVN, salvare, e:

svn resolved nomefile

Infine, in entrambi i casi:

svn ci -m "Effettuata la modifica"