Pensieri e parole su HCI, home computing, tecnologie desktop e sul Progetto Lobotomy

domenica 3 gennaio 2010

127.0.0.1 sweet 127.0.0.1

Chiunque abbia mai provato a scrivere anche il piu' semplice programmino in C che faccia uso di socket ha una vaga idea di quanto l'API BSD sia delirante: ci sono quintalate di funzioni destinate ai vari scopi, talvolta sembra ce ne sia pure piu' di una per far la stessa cosa, ed i parametri sono passati per mezzo di struct brutalmente castate l'una con l'altra e di cui sconsiglio l'analisi nei relativi header files.
Finche' si fanno cose semplici (apri la connessione TCP, manda il pacchetto UDP e cose cosi') per fortuna esistono fior di tutorial sparsi sull'Internet. Se si vuol fare qualcosa di un pochino piu' complesso (tipo: parlare con uno STUN server) spesso la documentazione non basta e gia' si deve iniziare a cercare con Google Codesearch o all'interno del codice di programmi che a priori si sa fanno quel che serve. Se poi si aspira a realizzare qualcosa che ancora non e' stato fatto da nessuno, e dunque mancano gli esempi da cui prendere ispirazione, la situazione diventa tragica.
Nel mio caso specifico sto realizzando una implementazione di client PubSubHub da includere in libgrss, libreria GObject per la manipolazione dei feeds di cui probabilmente parlero' su questo blog in futuro e destinata a colmare un vuoto ad oggi inammissibile, per ricevere attivamente le notifiche di nuovi contenuti esposti sull'Internet anziche' "pollare" i relativi files RSS o Atom che siano. I maggiori grattacapi attuali derivano dalla necessita' di scavalcare un eventuale NAT che si trovi dinnanzi al client, possibilita' tutt'altro che remota nel caso di una connessione domestica dotata di un modem ed un router che distribuisce connettivita' al resto della casa, affinche' il server remoto possa pushare le notifiche. Per ora mi accontento di configurare il detto router per forwardare le trasmissioni entranti su una certa porta direttamente sul PC bersaglio (o meglio: faccio fare al mio collega Netvandal questi test, giacche' ci si mette pure Vodafone a troncarmi le connessioni entranti, ma e' un'altro discorso), ma per quanto sia una soluzione di ripiego comunque comporta infiniti problemi.
Non esiste un modo pulito per recuperare il proprio IP NATtato, non esiste una syscall che dato un indirizzo sappia dire se e' pubblico sull'Internet o meno, non esiste una syscall che dica quale delle interfacce di rete routa verso la Rete, insomma si fa tutto per intuizione e contando nella buona sorte. Qualcosina son riuscito a recuperare in GNet, libreria Glib dedicata appunto all'astrazione delle operazioni di rete recentemente deprecata in favore di GIO (che pero' e' ancora abbastanza bacato per le operazioni su HTTP), ma sempre si va a tentoni.
Insomma: ogni 3 per 2 si parla di integrazione col desktop con la Rete (e sia ben chiaro che la soluzione alternativa del cloud computing "puro", con tutti i dati online, semplicemente non funziona: oggi mi son trovato gubb.net assediato dai cybersquatter e mi sono perso mesi di appunti ed idee, e questo fa il paio con Ma.gnolia auto-distruttosi a causa di una politica di backup farlocco), ma alle parole non conseguono i fatti, e non esistono strumenti che permettano di costruire tools senza impazzire appresso a documentazione forfettaria o codice da copiare ed incollare tenendo le dita incrociate.
E' dura la vita del programmatore...

Nessun commento: