Category Archives: Software

XChat + Vala + Pastebin

Non ho resistito et voilà xchat-pastbin plugin è nato (sempre in the vala-experiments)!

Più semplice di quanto pensassi grazie a libsoup ed al fatto che usare parametri post è semplicissimo, ma giuro senza i sorgenti di pastebin stesso in questo momento ancora sarei a chiedermi: ma quale parametro devo valorizzare e come?

andrea@spavento:~/documenti/src/vala$ ls -l xchat-pastebin/xchat-pastebin.so
-rwxr-xr-x 1 andrea andrea 25684 2008-03-23 11:33 xchat-pastebin/xchat-pastebin.so
andrea@spavento:~/documenti/src/vala$

25KB di plugin, no python no perl puro C… ehm no vala!

Ignoranza

Parlo della mia! Praticamente ho speso tempo, forze ed energia per capire come mai uno stupido esempio che utilizzava gnome-keyring si rifiutava di compilare fallendo miseramente al momento del linking poiché mancava un simbolo nella relativa libreria.

All’inizio stupore “non può essere” poi inizio con objdump a vedere se questo simbolo era presente o meno, ma niente. Quindi apro il caro xchat e preso da dubbi comincio a rompere su #gnome #gnome-hackers e #gnome-debian, chiedendo se objdump visualizzasse tutti i simboli esportati in una libraria o per qualche ragione a me ignota escludesse le variabili globali.

Beh qualcuno mi ha aiutato, ma praticamente sono rimasto con il dubbio se objdump fosse il tool adatto e sono andato fuori strada poiché ho subito pensato ad un bug della mia distribuzione. Non rimaneva che scaricare i sorgenti da svn e provare direttamente quelli.

Stesso identico errore, quindi posto l’esempio su xchat e come prevedibile, grazie all’aiuto di qualche smanettino verifico che gentoo ubuntu e mandriva falliscono tutte. A questo punto il problema deve essere upstream.

Quindi prima devo chiarire se objdump -T fa il suo lavoro o meno poi iniziare a smanettare suo sorgenti, ma da dove partire dato che sembrano corretti? Beh scrivo un programma che simula la struttura di quella parte della libreria e raggiungo la consapevolezza che

  1. objdump fa bene il suo lavoro e lo fa anche su file .o ed eseguibili ed ha anche un sacco di amici come nm
  2. che grep come cosigliato da qualcuno non va bene perché può dare falsi positivi (simboli di debug)

Con queste nuove armi indago sul risultato della compilazione della versione in trunk ed arrivo alla conclusione che nel file gnome-keyring.o sto benedetto simbolo c’è, ma poi alla fine nell’immagine .so scompare.

Quindi non può essere gcc, ma qualche altra cosa… e bang: libtool. A questo punto è diventato tutto più facile e dopo aver dato un occhio ad header elf, scritto programmi, il fix si è ridotto ad una riga in Makefile.am!

http://bugzilla.gnome.org/show_bug.cgi?id=522651

Comunque era da tanto tempo che non provavo questa sensazione di novità mista a curiosità e mi è proprio piaciuta!

Tuntun, Snul ed altro

E’ passata una buona settimana dall’ultimo post e nonostante il lavoro, la mia facilità nel distrarmi e qualche bug di vala, Tuntun è progredito e sta giungendo quasi l’ora di un primo rilascio.

Questo è lo stato dell’applet al momento:

  • internazionalizzazione
  • finestra di log come in ovpClient
  • new: supporto la richiesta di eventuali username / password (sia per il metodo di autenticazione Auth, che Private Key)
  • debug, debug e debug

Quindi, dato che sono rimasti solo “2 debug”, mi devo affrettare a trovare uno spazio web dove poter uploadare questo piccolo progetto.

Ed ecco come appare (da notare che la gestione delle connessioni è totalmente asincrona, mentre perSbaglio è bloccato nella fase di autenticazione, Morph effettua con successo il suo collegamento) :

Tuntun preview 2

Ovviamente insieme a Tuntun anche Snul ha subito dei ritocchi e principalmente le novità sono:

  1. Risoluzione asincrona degli indirizzi
  2. Bug fixing

Sono quindi lieto di annunciare una nuova versione di Snul – “The Gollum Child”, non scaricatela perchè scotta!

Ed ora veniamo ad altro! Preso dall’entusiamo di Alessandro che combatteva con perl sotto windows per scrivere un utile plugin per pidgin mi son detto: perchè non scriverne uno uguale in vala per xchat-gnome?

Beh il plugin non l’ho scritto (ti sto aspettando Alex, poi io farò il porting del tuo da pidgin ad xchat 😉 ), ma i bindings e un Hello World li ho fatti!

Siori e siore ecco xchat-helloworld (sempre in “The vala experiments”)!

Novità su Tuntun

Tuntun si sta quasi trasformando in un programma finito. Ormai le funzionalità principali sono state implementate ed offre già qualche utile servigio.

Ecco i vantaggi rispetto a ovpnClient:

  1. scritto in vala e quindi un minimo più maneggevole rispetto al corrispondente in C
  2. dipendenze esterne ridotte: tolta libglade (rimpiazzata da gtkbuilder) e gnet (rimpiazzata da snul)

Mancano tuttavia ancora una serie di funzionalità prima di portelo definire pronto per un rilascio:

  • internazionalizzazione
  • finestra di log come in ovpClient
  • debug, debug e debug

Inoltre prima di parlare di una versione pubblica vorrei implementare qualche nuova funzione anche per “l’utente non programmatore”, come il supporto per la richiesta di nome utente e password durante la connessione.

Non si può che finire con uno screenshot:

tuntunt in action

Snul 0.0.2 aka “il fluido che uccide” released!

Insomma, mi è toccato… una nuova fiammante ed entusiasmante versione di snul.

I cambiamenti sono pochi, ma derivati da un minimo utilizzo sul campo con Tuntun. Da questa sera ho finalmente un sostituto funzionante e minimamente testato delle 4 chiamate di gnet che utilizzavo!

Dal canto suo anche Tuntun inizia a prender forma, manca ancora tutta la parte di interfaccia, ma ad oggi riesce a:

  1. installarsi come applet nel panel senza crashare mezzo mondo (fino a poche ore fa bloccava tutto il pannello di gnome)
  2. leggere il file config con le connessioni definite (stesso formato di ovpnClient)
  3. presentare un menu’ popup con i collegamenti
  4. determinare lo stato attuale della connessione
  5. aprirla
  6. e chiuderla

Snul

Beh… alla fine non ne potevo più di gnet, scrivere i bindings per vala è veramente, come dire, poco gratificante ed e’ una libreria praticamente non mantenuta da anni.

Avendo bisogno di implementare un client Tcp dalle funzionalita’ veramente minime per Tuntun, mi son messo giù e l’ho fatto direttamente in vala interfacciandomi solo con le funzioni del s.o (BSD sockets).

Il risultato non è il massimo, ma alla fine raggiunge lo scopo e funziona, quindi ho pensato che potrebbe essere utile anche a qualche altra anima informatica se non altro come esempio di come (non!) programmare in vala.

Ecco quindi Snul una semplice libreria da utilizzare con il copia & incolla. (Sì lo so la paginetta è scritta in inglese, che dici? Ah è maccheronico? Beh sono apprezzati aiuti e commenti al riguardo…)

P.s.

Perchè snul? Oltre al simple network utility library penso che si addica ancor meglio questa definizione… rimanendo comunque in attesa di una persona dai modi migliori: GIO.

Nuovo server per perSbaglio

Un mostro di potenza:

persbaglio:~# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping : 6
cpu MHz : 798.313
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse
bogomips : 1597.15

ma con qualche piccolo problema di affidabilità della memoria (non si può pretendere troppo da uno scambio con un router dlink no?)

Debian & Compiz

Ho riabilitato compiz di nuovo e per gioco! Non ci sarebbe nulla di cui scrivere se non fosse per un dettaglio: è usabile sul mio pc.

:~$ cat /proc/cpuinfo
……..
model name : Intel(R) Pentium(R) 4 CPU 1.50GHz
stepping : 2
cpu MHz : 1495.272
cache size : 256 KB
……..

con una semplice ATI 9200SE che non può nemmeno andare a 8x perche’ il mio bus AGP e’ troppo vecchio!

Di solito tutte le volte che mi è capitato di abilitare compiz, dopo pochi giorni di utilizzo ritornavo al fido metacity poichè le animazioni di minimize/maximize ed il resize delle finestre erano leggermente lenti.

Al contrario, questa volta, ho voluto approfondire, ho lasciato XAA per la più nuova EXA e la differenza si è vista immediatamente. Il tutto grazie a questo commento e qualche prova sul campo.

Un’ultima cosa: AGPFastWrite nel mio caso blocca tutto, uomo avvisato…

Cercando l’indipendenza

Come al solito nello spirito di essere il piu’ possibile indipendente da Windows anche per le cose più strane, oggi ho dedicato la giornata (e parte della notte) al mio nuovo lettore mp3 (del quale non ho mai parlato).

L’obiettivo era quello di poter effettuare l’upgrade del firmware senza utilizzare windows. Quindi mi sono messo al lavoro e sorpattutto grazie ai forum / wiki di rockbox sull’argomento creative mi sono fatto un’idea di quello che serviva:

  1. Utility per estrazione firmware dall’exe windows che è possibile scaricare dal sito creative
  2. Programma per trasmettere il firmware allo Zen

Il risultato è che dopo qualche oretta di ricerche e porting di programmi windows etc etc riesco ad avere un software che svolge egregiamente il compito 1 ed un altro che riesce a fare l’upload di un file tramite libmtp. Obiettivo raggiunto!

A questo punto faccio una bella pausa per la cena, poi un po’ di tv ed infine decido di buttare un occhio al forum per vedere se ci sono novita’. Trovo che zook ha appena pubblicato una nuova e piu’ completa versione delle sue utilita’.

Macino, compilo, qualche piccolo riadattamento e mi metto a fare delle prove con zen_crypt, più per curiosità che per altro.

Con grande sorpresa, dopo qualche tentativo, scopro la chiave con la quale è criptato il programma che gira nello ZEN (il file TL) e scorrendolo con un editor esadecimale becco anche il codice HMAC per firmare i firmware ed uploadarli cosi’ al dispositivo.

Bene si puo’ dire che lo Zen 4GB è un passo più vicino a RockBox (2 chiavi su 3)! Ora manca solo quella del programma di rescue (FRESC) che però credo sia la più difficile da scovare.

Come andrà a finire lo si potrà leggere qui.

Ho perso la memoria

Breve ed interessante sessione di debug di mtpfs con valgrind e alleyoop!
Come si evince dal secondo tentativo, nessun leak rimasto a parte qualche segnalazione (spero spuria) di libfuse.

mtpfs valgrind

Nota: se provando a debuggare un filesystem fuse, valgrind vi risponde con un bel:

fuse: failed to exec fusermount: Permission denied

Provate a togliere l’attributo sticky sia da /usr/bin/fusermount che /bin/mount ed eseguite il tutto da root. Una volta terminato il debug ricordatevi di rimettere tutto a posto.