SocketCAN documentation update

I’m updating the Linux kernel SocketCAN documentation by sending patches to the can.txt file distributed with the sources. I had to translate an old LaTeX file from German to English to implement some stuff at work related to the BCM subsystem and I took the opportunity to contribute back the translations.

The BCM system is very useful and I think that with some English documentation it will get used a lot more. It provides a lot of services that are usually implemented by hand for each Linux application that uses CAN, such as timed frame send, receive filters and RTR management. For sure we will be sending out next week the first unit of a new product that integrates BCM and works flawlessly. We implemented the logic behind the communication, without having to care about timing and timeouts, since everything is handled by the kernel.

There is a page where I keep track of the patches and the status of the project.

OLS – Ottawa Linux Symposium

Sono tornato da qualche giorno dal Canada ed è tempo di fare un po’ il sunto di quello quello che ho visto. Era il mio primo viaggio oltreoceano ed è stata un’esperienza molto molto interessante. Per cominciare devo dare atto all’Air France, ho volato bene, con ottimi pasti e belle hostess, tutto in orario e nessun problema di bagagli o coincidenze.

La conferenza si è svolta per quattro giorni presso l’Ottawa Conference Centre, da mercoledì a sabato, con orari molto prolungati, dalle 9 (o 10) fino alle 20, con diverse pause. Un giorno siamo arrivati alle 21 grazie ad un incontro non previsto su Linux Embedded. Non sto a contare i party che si sono svolti due o tre sere e che si sono prolungati fino a notte fonda, con birra a fiumi e (purtroppo roba da mangiare abbastanza scadente).

Un dato di fatto è che lo sviluppo di linux è gestito sempre di più da dipendenti di grandi aziende come IBM, Intel, HP, Freescale e Red Hat. Queste aziende sviluppano più del 50% delle modifiche fatte ad ogni release del kernel. Finché in cima c’è Torvalds e Morton, che non lavorano per nessuna grossa compagnia, non c’è nulla da temere, in quanto sono loro che decidono cosa va bene e cosa no e hanno un buon potere di controllo. La situazione attuale, in effetti, è ottimale: le aziende ci mettono la manodopera e gli obiettivi concreti (e ci fanno parecchi soldi) e la Comunità ci mette il potere di controllo, l’innovazione e quel po’ di chaos necessario all’avanzamento del progetto sul lungo periodo. Finché questa situazione di equilibrio permane, Linux continuerà a crescere ai livelli attuali, mangiando fette di mercato un po’ a tutti gli altri.

Tra le altre cose interessanti che ho sentito (ma ci sono in giro per la rete delle cronache molto più dettagliate di questa) c’è il fatto che finalmente qualcuno presso Red Hat ha deciso di mettere mano al gran casino che è l’audio su Linux: tra esound, alsa, oss, jack, arts e altri non ci si capisce più nulla, e soprattutto cercare di fare una chiamata voip mentre si ascolta della musica è praticamente impossibile a causa dei conflitti di volumi e mixing tra le varie librerie.

Infine ci sono novità interessanti nel campo del USB senza fili (un bluetooth con gli steroidi) e del read ahead, per rendere ancora più furbe le letture da disco fisso. Alcune notizie interessanti ci sono state per l’embedded. Parecchia gente sta lavorando con Linux su sistemi piccoli, portatili e facili da usare. C’è molto lavoro in corso nel campo del risparmio energetico e nella gestione furba dei dispositivi tipici dei sistemi embedded (memoria flash, batterie, piccoli lcd).

In ogni caso, evviva il Canada ;-)

Cocoa programming

Oggi ho speso buona parte della giornata tentando di scrivere un visualizzatore di immagini per Mac Os X che potesse:

  1. leggere le immagini da una directory
  2. ignorare i file non leggibili/non immagini
  3. visualizzarle a pieno schermo con/senza ridimensionamento
  4. passare all’immagine successiva o precedente nella stessa directory premendo un solo tasto (spazio)
  5. tornare indietro di un’immagine premendo backspace
  6. canellare un’immagine premendo canc

Nient’altro, niente thumbnail, niente zoom intelligente, niente funzioni di editing. Ho spesso a che fare con directory remote con centinaia di foto e non voglio aspettare ore prima di poter iniziare a controllarle.

Inutile dire che ho rinunciato (per ora!) all’impresa. Dovrei imparare seriamente l’Objective C per iniziare a capirci qualcosa, in ogni caso ho trovato Cocoa molto macchinoso e la documentazione generica (tutorial, introduzioni) troppo vaga. Il tutorial consigliato da tutti è praticamente inutile, è troppo semplice e non spiega perché si fanno le cose in un certo modo. Un esempio su tutti è NSBrowser, un widget per visualizzare dati strutturati ad albero. Il codice d’esempio rasenta il delirio solo per visualizzare un albero di directory perché si perde a settare font, sottolineature e colori vari.
La documentazione non dice assolutamente come si fa a riempire un NSBrowser nuovo, dice solo che una volta pieno è bellissimo.
Speravo che i binding Python<->Cocoa potessero salvarmi, ma sono abbastanza inutilizzabili per chi non conosce l’Objective C.

Per ora continuerò ad usare gqview sotto X11, è il meglio ed è la dimostrazione che il software open source è in grado di dare la polvere a software blasonati e costosi (graphicconverter, iview), ma praticamente inutilizzabili o surclassati da iPhoto.
Una menzione d’onore a cocoviewx, sarebbe perfetto se non morisse così facilmente e se caricasse le immagini solo prima di visualizzarle.

Galleria fotografica

Ho appena finito di uploadare la nuova galleria fotografica, l’ho scritta in questi ultimi giorni, dopo essermi stufato di quella vecchia. Ho speso parecchio tempo a costruire un buon formato sul disco per l’organizzazione delle foto e alla fine sono arrivato ad una doppia struttura. Le foto sono organizzate in directory per anno e mese, così se decido di cambiare la grafica o la categoria non perdo i bookmark e i motori di ricerca. L’organizzazione sta in un albero di directory separato, con una serie di file di testo che elencano le fotografie appartenenti a ciascuna suddivisione.
Ho usato solo XHTML e CSS, ma non ho ancora verificato se valida sul sito del w3c. Devo anche rifare tutte le thumbnail, in modo che abbiano le stesse dimensioni.

La giornata del sistemista

Oggi ho passato la giornata a a giocare al piccolo sistemista. Tenendo iTunes in background con una radio online di sola musica anni ’80 e lavorando via ssh sul server casalingo ho giocato un po’ con tethereal e subversion, ottenendo delle cose abbastanza utili.

Stamattina tethereal. Fino ad oggi usavo tcpdump e uno scriptino bash per recuperare le informazioni su certi pacchetti che mi interessano, però la soluzione non era ottimale perché catturava poche informazioni su troppi pacchetti, dato che tcpdump non ha filtri per protocolli ad alto livello.
Con tethereal posso catturare solo i pacchetti che mi interessano in un certo periodo di tempo e metterne il dump in un file (in formato pcap). Uno script chiamato da cron, ad intervalli regolari, uccide il processo di cattura, esegue di nuovo tethereal sul file di cattura con parametri differenti (per fargli risolvere gli indirizzi IP) passando l’output ad un programmino in Python per estrarre solo le informazioni interessanti. Alla fine mi manda il tutto via mail e rimette in esecuzione il processo di cattura su un file vuoto. Quei simpaticoni di Echelon a confronto sono dei pivellini.

Il pomeriggio, invece, l’ho passato a litigarmi con subversion, apache2, mod_ssl e mod_auth_pam, però alla fine ne ho avuto ragione…
La configurazione che mi ero posto come obiettivo era:

  1. area pubblica in sola lettura
  2. autenticazione per poter modificare il repository

Avevo già l’autenticazione grazie a svn+ssh, ma dove sto facendo la tesi escono su Internet solo con un proxy (anche se ogni tanto si esce tranquilli con un NAT, dipende dalle maree e da certi riti sull’altare che hanno in terrazzo, credo) e volevo anche poter fornire accesso al ‘grande pubblico’, in particolare per il driver sis900.

L’unico tipo di autenticazione su http che funziona con mod_auth_pam (non volevo avere ancora un’altra password diversa) è ‘Basic’, con la password che viaggia in chiaro per mezzo mondo. La soluzione è stata usare mod_ssl. Non ci sono alternative se non criptare l’intera connessione, anche se l’unica cosa che vuoi tenere segreta è la password. Bah.

Mi sono creato la mia CA fasulla e l’ho usata per firmare il mio certificato fasullo anche lui e ora ho la mia brava connessione su https, alla faccia di tutti quelli che dicono che non si può avere SSL insieme ai virtual host di Apache (certo, non si può se si fanno le cose sul serio, con dei certificati veri, ma se uno fa finta di non vedere un paio di warning all’avvio di apache, problemi non ce ne sono…). Ora su https magari ci metto pure su un webmail, così posso leggermi la posta anche quando il sistemista in ditta si dimentica di fare i sacrifici agli dei.

Alla fine pure mod_auth_pam ha iniziato a funzionare senza particolari problemi (occhio che su Debian bisogna attivarlo con “AuthPAM_Enabled on”, anche se nella documentazione sul sito dice che quello è il valore di default).

Ora devo solo attivare un po’ di controllo di accesso sui singoli repository, attraverso un altro modulo dav_svn_<qualcosa>.

Appena c’è qualche cosa di significativo visibile all’esterno posto un link.

Tesi 2, la vendetta

Dopo aver abbandonato una tesi sulla bioinformatica a favore di un’argomento più promettente, in particolare quanto a prospettive lavorative, sembra che finalmente lunedì potrò iniziare.
Dovrò lavorare allo sviluppo di un sistema di comunicazioni wireless con routing dinamico e idealmente senza infrastruttura fissa da utilizzare in ambiente portuale.
Il tutto dovrebbe offrire un’interfaccia generica per permettere a qualunque tipo di applicazione di lavorare in modo trasparente, si va dal semplice scambio di dati sulle merci spostate al VoIP. Ovviamente ci sono anche degli studi di affidabilità e velocità da fare sugli algoritmi attualmente esistenti.
Il tutto si baserà su Linux, che è il sistema che già usano nella ditta presso cui vado a fare il tirocinio.
La mia intenzione è di tenere qui un diario degli avanzamenti, vedremo se ciò mi sarà possibile…

La mia opinione sulla questione BitKeeper

Qualche giorno fa si è scatenato l’ennesimo thread infinito su linux-kernel@vger.kernel.org sul problema che BitMover (la ditta dietro al prodotto BitKeeper) non fornisce abbastanza informazioni per ricostruire completamente la storia dei sorgenti del kernel di Linux. Io non credo che questo sia un problema reale, le patch su ftp.kernel.org hanno una granularità sufficiente per la maggior parte degli usi che mi vengono in mente.
Il problema che vedo io riguarda i piccoli sviluppatori, come me. Per noi è diventato estremamente difficile seguire lo sviluppo del piccolo pezzetto di kernel di cui ci vogliamo occupare senza utilizzare BitKeeper. Qualche mese fa mi sono trovato delle modifiche (perfettamente giuste e legittime) al driver che mantengo già incluse nella release stabile, mentre le mie povere patch faticavano a passare i molti filtri. Ho dovuto rifare le mie patch perchè non si applicavano più…
Non ha alcun senso che per mantenere un driver di 50KB io debba mantenere un albero cvs (o svn o bk) di diverse centinaia di MB contenente tutta la storia possibile. Attualmente uso una soluzione fatta in casa, quasi totalmente automatizzata che mi permette di fornire patch che si applicano all’ultimo snapshot di Torvalds. Internamente uso Subversion per mantenere la storia delle modifiche ai sorgenti. E’ un buon prodotto, decisamente migliore di cvs e più intuitivo di arch (e forse anche più avanti nello sviluppo).

Quindi il mio problema non è che la gente usi BitKeeper, a loro fa comodo, a me no. Il problema è che BitKeeper consente a chi lo usa una via rapida e veloce per includere modifiche senza che ci sia un reale controllo da parte della comunità. Si sono formate due categorie, quelli che usano BitKeeper e tutti gli altri, con questi ultimi che si sbattono con scriptini e casini vari perché non possono (o non vogliono) usare un programma che ha una licenza alquanto discutibile.
Dato che la maggior parte dei piccoli sviluppatori lo fa per hobby, più gli rendi le cose difficili e meno avranno voglia di continuare il lavoro.

Le nuove librerie di Enlightenment 0.17

Sto provando ad usare in questi giorni le Enlightenment Foundation Libraries (EFL) per scrivere un paio di programmini, tanto per farmene un’idea. Sono rimasto piacevolmente sorpreso, le librerie sono facilissime da usare, sono stabili e c’è già abbastanza documentazione per iniziare ad usarle senza perdere troppo tempo.
Per disegnare grafica in una finestra di X sono velocissime, mentre se si ha bisogno di usare dei widget, è meglio usare qualcosa come QT o GTK, per ora.
I widget di Enlightenment sono ancora in pesante sviluppo. Quanto al window manager e17, non ci conterei in tempi brevi…