Incursioni in Java

Per una serie di motivi che non sto ad elencare, in quest’ultimo periodo mi sono dovuto confrontare un po’ con Java e tutto l’ecosistema che si porta dietro a partire da Eclipse fino ad Android passando per Apache Pivot.

L’esperienza non è stata affatto negativa, anche se dal punto di vista di un programmatore C#, Java sembra un po’ più spartano e “C like” (insomma un po’ di vecchiaia e polvere la noto).

Tuttavia in questo post mi voglio soffermare su un solo aspetto che ho trovato particolarmente “sconveniente” in Java e che invece trovo particolarmente comodo in C#: la gestione e dichiarazione di eventi “custom”. Continue reading “Incursioni in Java”

Samba & Windows 7 Starter Edition

Se come me siete impazziti dietro a samba che sembra non autenticare windows 7 ed ora state soccombendo sotto il peso di sigle come NTLMv2 LANMAN ed oscure versioni dei protocolli di autenticazione usati da Windows fin dal lontano 1995, forse il problema è molto più semplice di quanto appaia. Quindi lasciate stare il registry, non abilitate nessun protocollo di compatibilità, lasciate stare i commenti sulla starter edition di Windows 7 ed invece abilitate il log nel vostro serverino samba aggiungendo nella sezione [global]:

log level = 3 passdb:5 auth:10 winbind:2

Poi controllate se ad autenticazione fallita avete nel log qualche cosa che si riferisca ad un accesso negato alla share amministrativa IPC$. Se è così create una share finta tipo:

[IPC$]
        path = /tmp
        valid users = @netaccess
        guest ok = no
        writable = no
        browseable = no

E tutto inizierà magicamente a funzionare. A quanto pare Windows 7 dopo l’autenticazione tenta di accedere, senza tra l’altro farne uso, proprio alla share IPC$.

Tutto ciò è stato testato su una debian sid con installato samba versione 3.5.5 ed una rete senza controller di dominio, ma con il solo gruppo di lavoro.

Gtk+ TreeSortModel ed oscuri segfaults

Ho passato tutta questa domenica mattina cercando di risolvere questo strano bug che si verificava in Vala Toys

A differenza di quanto scritto nel bug report dopo un po’ di prove ho notato:

  • non era dovuto al multithread implementato nel parser di Vala Toys
  • era di facile riproduzione, ma si verificava solo con un determinato file sorgente incluso nel progetto di esempio di waf
  • non dipendeva da qualche stato interno del modello in quando si verificava anche ricreando ogni volta il sortmodel da zero

Dopo svariate ore ne sono venuto fuori anche grazie a questo post che, sebbene non del tutto pertinente, mi ha quanto meno messo una pulce nell’orecchio: ricontrollare la funzione utilizzata per il sort.

Ed ecco che gira e rigira noto subito un bug alla riga 539 di vtgutils.vala dove erroneamente utilizzo la variabile vala invece che valb, ma soprattutto mi rendo conto che la funzione cosi’ come è scritta non è asimmetrica (caratteristica richiesta dalla documentazione della GtkTreeIterCompareFunc).

Quest’ultimo errore è anche confermato dall’output di debug che avevo aggiunto al codice e spiega anche come mai il segfault lo avessi solo con quel determinato sorgente:

ValaToys-INFO: vtgsourceoutlinerview.vala:375: compare constructor:Sample vs new result: -1
ValaToys-INFO: vtgsourceoutlinerview.vala:375: compare new vs constructor:Sample result: -1

Sistemato quest’ultimo dettaglio il segfault è magicamente scomparso.

Da ciò ho imparato:

  1. Se un’implentazione è errata anche se sembra un errore innocuo, il segfault è sempre dietro l’angolo
  2. E’ umanamente possibile superare il limite fissato dal ‘Moccolo a Delta di Dirac’

P.S.

E’ uscito Vala Toys versione 0.10.0

uChumby Client: un aggiornamento

Direi che la versione zero è finalmente pronta, ora non mi rimane che:

  1. Vedere come si implementa una External Music Source con il Chumby framework
  2. Irrobustire il codice che dialoga in rete con uChumby server
  3. Implementare un minimo di skin per i controlli in modo da rendere più gradevole l’interfaccia
  4. Implementare un pannello di configurazione

Altro giro altra bambolina: uchumby2.mp4

Radio Rai su Chumby

Uno dei difetti di Chumby più sentiti da noi italiani è senz’altro il mancato supporto dei codec RealAudio, soprattutto se si tiene conto del fatto che proprio Radio Rai trasmette in quel formato.

Tuttavia esiste una soluzione, anche se purtroppo è alquanto complicata, basta configurare un server Rygel con il suo plugin Gst-Launch.

Ecco lo snippet di configurazione che ho usato per configurare Radio Rai Due (e questa volta i ringraziamenti vanno a phako):

[GstLaunch]
enabled=true
launch_items=radiodue
radiodue_title=Rai Radio Due
radiodue_mime=audio/x-pn-realaudio
radiodue_launch=rtspsrc location=rtsp://live.media.rai.it/broadcast/radiodue.rm latency=180000 ! input-selector ! queue2

A questo punto sarà pubblicato in lan uno stream in formato mp3 che è possibile consumare da Chumby inserendo in /psp/url_streams la definizione seguente:

<stream url="http://192.168.5.11:55555/RygelHTTPServer/RygelGstLaunchContentDir/item/cmFkaW9kdWU%3D/transcoded/MP3" id="2615669a-d313-10df-ec60-8a2d3ea72850" mimetype="audio/mpeg" name="Rai Radio Due" />

Ovviamente indirizzo ip e stream-id corretti varieranno ed il problema è che per recuperare l’id non ho trovato altro modo che eseguire una query manuale con l’upnp universal control point incluso in rygel.

Se proprio tutta questa fatica non bastasse, il mio serverino e la wireless-lan hanno complicato non poco la messa a punto. Infatti spesso capitava che lo stream andasse a scatti o addirittura che l’access point si bloccasse totalmente.

La soluzione è stata quella di patchare Rygel, dato che tali parametri sono cablati nel codice, abbassando la qualità del transcoder mp3, soprattutto facendo scendere il bitrate da 256 kbps a 160 kbps.

E’ tornata anche la musica

ovvero come è nato RhythmPnP

Da un po’ di tempo anche se “piano, piano… pacatemente” e soprattutto “quando un giorno vista l’ora è appena finito e un nuovo giorno è appena iniziato” sto giocando con UPnP ed in particolare con rygel.

Forte del fatto che Rhythmbox supportasse tramite coherence tutta la specifica upnp-media server, ho pubblicato la mia libreria musicale fiducioso di poterla ascoltare senza problemi, ma purtroppo mi sbagliavo. Niente UPnP in rhythmbox poiché per qualche strano ed ignoto motivo coherence schifa del tutto il mio serverino… mmm… fosse il nome: spavento?

Quindi mi son detto: perché non scrivere un bel plugin in vala dato che mi devo esercitare per il bridge xml -> upnp di Chumby?

Un colpo di mola, due mani di vernice, un bel po’ di aiuto su #gupnp (thanks zeenix) et voilà, dopo 1 giorno di lavoro, la mia bella musichetta pronta per l’ascolto grazie a RhythmPnP:

RhythmPnP
RhythmPnP

Chumby prove di UPnP

Qualche settimana fa ho deciso di regalarmi un Chumby Classic ed è stata proprio una bella idea.

Ovviamente niente è perfetto ed infatti, nonostante le molte richieste di implementazione che si possono leggere nei forum delle Chumby Industries, manca totalmente il supporto per UPnP, che guarda caso è proprio il protocollo con il quale condivido la mia libreria musicale.

Dopo qualche ricerca ed aver scartato diverse strade data la bassa potenza di calcolo di Chumby, la complessità delle soluzioni, nonchè la mia totale ignoranza sullo sviluppo in ActionScript, ho deciso di tentare un metodo, in pieno stile “ragazzi della III C”: scrivere un web server che facesse da “bridge” e semplificasse la comunicazione fra la radio ip e la rete UPnP.

Quindi mi sono armato di Vala, libsoup e gupnp, nonchè di tanta pazienza per riuscire a scrivere quattro righe in ActionScript in grado di leggere e visualizzare un file xml.

Il risultato è incoraggiante e forse se proprio non ci sarà una soluzione ufficiale, porterò a compimento il progetto (almeno ad uso personale).

Ed ecco il mio Chumby visualizzare il file xml con la lista dei media server UPnP (1 solo 🙂 ) scoperti nella mia rete:

Chumby UPnP Servers
Chumby lista dei server UPnP

Vala su Windows CE

Miiiii che giornata!!! Una nuova versione di Vala Toys for gEdit si e’ appena affacciata al mondo e soprattutto dopo notti insonni: ce l’ho fatta!

Finalmente Vala conquista Windows CE.

Ma che fatica! Soprattutto considerando che mingw32ce 0.59.1 non genera dll corrette per Windows Mobile 6.1 e che fare il porting del sottoinsieme minimo necessario ad un programma Vala è stato più duro del previsto (ma comunque altamente istruttivo su come mettere le mani velocemente su tutto quel codice “sconosciuto”).

Qualche dettaglio tecnico in più me lo riservo per un altro post (in pieno stile How I did it) dato che ora sono effettivamente stanco.

Vala on Windows CE
Vala on Windows CE

Questo è il sorgente valace.vala