24 giugno 2009

Overkill?!?

Cazzarola, bello l'ultimo Overkill! Non sapevo fossero in uscita...ma meglio così. Che flash, in così tanti parlano di ritorno alle radici, recuperare il sound di un tempo, tornare quelli di una volta. "Anche volendolo non potrei tornare come prima" canta il nuovo re della disillusione made in italy, e invece 'sti americanacci ci sono riusciti...loro sì! Sembra di essere tornati ai tempi di horrorscope o di years of decay...forse anche un pelo prima, qualche richiamo ad under the influence...uno sballo.
Thrash metal a tutta manetta, carico di tonnellate di riff, cambi di tempo, assoli mozzafiato, cassa che fa tremare il pavimento e basso che spinge come solo negli Overkill, controcanti potentissimi con una mal velata reminiscenza hardcore. E poi quella gracchiante e inconfondibile voce al vetriolo di Bobby Blitz!!!!!

Tutto perfetto...l'operazione macchina del tempo non era mia riuscita così alla perfezione...come si chiama il disco? "The Old Family Is Still Alive". Grande un titolo che da solo sembra urlare in faccia a tutti che i bei tempi non sono finiti....ma com'è che di fianco al titolo non c'è scritto Overkill?!? National Suicide? E che sarebbe? Ah è un altro gruppo dite? Ma siete proprio sicuri? Un clone degli overkill a 18 anni dall'epoca d'oro?!? E che senso avrebbe mai? Italiani?!?!?!?

Cazzo dopo Dolly hanno clonato pure gli Overkill...l'ingegneria genetica fa miracoli ai giorni nostri!
Read more

9 giugno 2009

Console remota embeddable in python

Altro post di informatica pura, che del resto è il mio mondo molto più di quanto non lo sia la politica o la sociologia ;)

A parte le cazzate, il tema odierno è una facility che usai un tempo tramite twisted matrix, una grossa libreria che permette di rendere asincrono praticamente tutto, anche lo svegliarsi rispetto all'alzarsi dal letto, purche lo si faccia in python.

La facility in questione era l'esposizione di una console di python via rete. Sin qui è già una bella magia ma non stratosferica, più interessante il fatto che fosse anche integrata in un programma esistente (ed in esecuzione), dando quindi accesso, per i più svariati scopi, al programma medesimo, come se lo stessimo eseguendo dall'interactive console (IDLE, per intenderci) .

In rete ci sono pochissimi riferimenti a come ottenere il medesimo risultato senza portarsi dietro il tonno che è Twisted Matrix, per il quale non provo oltretutto grande simpatia.

C'è qualcuno che fa cose simili, ma o non le fa in rete ma con widget, o usa trucchi distruttivi sull'ambiente del programma rendendo impossibile l'integrazione in un contesto già esistente, o lo fa in modo così triviale che lo sforzo per renderlo funzionante in un contesto più generico supera il beneficio di avere già una base di partenza.

Mi è costato una giornata di prove assortite, ma alla fine sono arrivato a scrivere un pezzo convincente di codice, che come si vedrà, alla fine, è anche piuttosto ridotto, ma contiene dei barbatrucchi piuttosto importanti.

Come al solito, prima il codice poi i commenti! Eccolo:



I pezzi importanti sono due, il resto è solo un po' di fumo al contorn, ma lo vedremo.

Il pezzo chiave del tutto è il metodo mainloop della classe ipconsole.
Qui viene istanziato un interprete a cui vengono passate le stringhe lette dalla rete, qui si fa la lettura dalla rete e le varie interazioni con l'interprete medesimo.
Tutto sembrerebbe a posto, se non fosse che non c'è modo di redirigere l'output dell'interprete in questione senza gabbarlo. è qui che casca l'asino in quasi tutte le implementazioni che si trovano in giro.
Il modo logicamente più semplice di fregare l'interprete, e anche più pulito, sarebbe stato quello di eseguirlo in un ambiente modificato in cui il riferimento a sys fosse modificato (verso un clone di tutto il modulo sys e non un suo riferimento che non serve a nulla. In tale contesto diventa facile fare quello che si vuole di sys.stdout, sys.stderr ed eventualmente sys.stdin del sys clonato.
Se si riuscisse a ottenere questo clone, passarlo come contesto all'interprete sarebbe semplice, ma...peccato che non ci sia verso in Python di clonare un modulo (oddio, forse qualche modulo stupido sì, ma sys no). Che fare allora?
Si tarocca direttamente sys.stdout!
La soluzione è un po' invasiva e fa si che non sia completamente generica, ma almeno nei casi comuni (quelli che non manipolano sys.stdout e sys.stderr runtime e non si mettono a giocare coi reload di sys) è trasparente. Il trucco consiste nel creare una classe ponte che nasconda le 2 istanze stdout e stderr, incapsulandole.
Questa classe è appunto la mia fakeout.
fakeout manipola il metodo write, quello che, per questioni di interfacce, tutti gli stream writers devono esporre e stdout, che è un outputfile, non può esimersi da mettere a disposizione e viene usato anche da statement come "print".
Nel nuovo write, se il thread corrente non si è registrato, si passa la chiamata allo streamwriter originale (stdout o chi per lui), che è stato incapsulato durante la creazione dell'istanza di fakeout, se invece il thread corrente si è registrato, usando il metodo setout4thread, si usa il writer passato durante la registrazione.
In questo modo thread diversi possono registrarsi, ognuno usando come stdout taroccato un proprio writer.

Questa genialata mi è stata suggerita da una discussione su una newsletter (che mi sono salvato e potete leggere qui, perché è giusto che il merito vada a chi ha le idee) ed è la base della soluzione a tutti i problemi!

Beh, tutti si fa per dire, perché in realtà un problema rimane: la formattazione dell'output.
Il programma funziona correttamente con il telnet di Linux come client, ha dei problemi di formattazione con la raw connection di putty, nel senso che quando va a capo non torna a inizio linea, e non funziona con telnet di putty, che si ostina a mandare spazzatura ad inizio linea nonostante io provi a impostarlo diversamente, risultato netto: non interpreta nulla.
Credo comunque che siano problemi di configurazione del client e se qualcuno ha una idea di come arginarli o, ancora meglio, risolverli...ben venga!

Ah....quasi dimenticavo...per usare il tutto basta copiare il pezzo di codice di sopra in un file qualunque, chiamiamolo tcpconsole.py. A questo punto vi basta fare import tcpconsole dal vostro codice e poi una chiamata alla funzione tcpconsole.createServer passandole come parametro ip e porta su cui ascoltare.

Nulla di più semplice....sempre se il firewall di vista ve lo lascia fare....
Read more

6 giugno 2009

Il voto (in)utile

Questa volta, forse per la prima volta da sempre, sono rimasto fra gli indecisi. Solo ieri, a un passo dalle votazioni, ho preso una posizione chiara.
Sto parlando di votazioni europee, ovviamente.
Il mio blackout dalla politica è stato lungo e, soprattutto, profondo. Così profondo da aver capito solo recentemente cosa realmente fosse "Sinistra e Libertà", una delle liste dello sconfinato panorama politico presente alle elezioni europee.
A loro va il mio più sentito e sincero disprezzo, per essere riusciti ad incarnare, nel vero spirito autolesionista di sinistra, una delle caratteristiche più odiose (e a mio modo di vedere più antidemocratiche, neofascismo escluso) della nostra politica: chi perde la maggioranza invece che proseguire con la dialettica interna all'organo in cui ha perso la maggioranza, se ne va e diventa lider maximo di un nuovo universo dove è finalmente maggioritario. Se Vendola non mi è mai stato molto simpatico, così come Giordano, lo stesso non posso dire per Bertinotti e Migliore, ma qui non si misurava la speranza che se ne andassero gli antipatici e poter fare un partito di soli simpatici, quanto la serietà politica delle persone in causa.
Io proporrei a questi signori di chiudersi in casa lor e darsi alla masturbazione reale (visto che quella politica ce la propongono in pubblico senza ritegno): lì sono e resteranno sicuramente maggioritari, ognuno per conto proprio.

Ok, dopo questo piccolo sfogo politico che avrei dovuto fare al momento della scissione, se non me la fossi persa per mio volontario assenteismo, c'è da dire che le opzioni politiche serie che vedevo sino a poco fa (2 giorni, quindi veramente poco) erano 4: PD, IdV, Rifondazione o come si chiama adesso la sua coalizione e l'astensionismo.
Sino a poco fa era quest'ultimo a farla da padrone fra le opzioni che realmente prendevo in considerazione, con qualche idea del "voto utile" verso il PD.
Purtroppo è stato Berlusconi ad aprirmi gli occhi sul voto utile al PD: non si sono palesemente schierati con nessun gruppo parlamentare europeo e andranno nel gruppo misto. Insomma la loro anche potenziale forza relativa andrebbe dispersa per l'incapacità di ancorarsi alle altre forze europee e creare così quella coesione necessaria per ottenere un vero peso politico in una realtà politica che non è quella del cortiletto sotto casa, ma di una europa ormai vasta in cui l'italia è sì un grosso paese, ma uno dei tanti ed in cui tanti piccoli paesi bene organizzati possono contare più di uno grosso eternamente diviso in sterili questioni di carattere para-politico.
IdV per me rappresenta in Italia un voto di protesta, un modo per cercare di spostare il peso relativo di qualunque assetto parlamentare verso il rispetto delle regole, quali che esse siano (premesso che ne cambierei o ne cancellerei a centinaia alla prima occasione, ma sinché ci sono, si rispettano e devono valere allo stesso modo per tutti). In Europa non percepisco il senso di un voto simile e la componente ideologica dell'IdV mi è sufficientemente da farmela votare in Italia nel contesto di una coalizione accettabile, ma non per farmela votare da sola o in un contesto europeo.
Sono rimasti astensionismo e PRC.
Forse è stato proprio lo sdegno e l'amarezza per la scissione a convincermi verso il PRC, forse alcune interviste che ho apprezzato a Ferrero (questa, questa e questa, che però è parecchio più lunga, ma nel finale ha centrato cosa deve essere per me la sinistra oggi), forse il fatto di aver visto che nonostante la sconfitta elettorale rifondazione e comunisti italiani non hanno diviso le loro strade, forse la presenza dei profughi DS di socialismo 2000 che mi lasciano ben sperare che a lungo termine ci sia anche una idea di governo...
Sì, questo è un punto importante: alle precedenti politiche ho ferocemente attaccato l'attitudine di finto governo e sicura opposizione de "la Sinistra l'Arcobaleno": sono troppo poco ragazzino per potermi accontentare di un partito all'opposizione per vocazione. si vince e si perde e quando si perde si fa opposizione e così va bene, ma se l'obiettivo è vincere per andare all'opposizione non ci siamo proprio...
Cosa è cambiato? Del resto è passato poco più di un anno, perché adesso mi va bene?
La risposta è semplice: sono elezioni europee, non le politiche italiane.
Vista in termini europeisti, il gruppo misto dove finirebbe il PD è più, o altrettanto, di "opposizione" che non il gruppo di sinistra. In ogni caso in un universo dove ancora esiste la mediazione (che in italia è totalmente sparita), preferisco che il mio peso sulla bilancia vada lì, piuttosto che da altre parti, consapevole che non smuoverà le scelte più importanti, ma magari ne cambierà, almeno parzialmente il gusto liberista che purtroppo in troppi casi si respira.

Devo dire che se fossi dall'altra parte della barricata, il richiamo al voto utile di Berlusconi è una delle poche cose veramente seria che abbia detto recentemente. Se proprio devono vincere loro (e vicneranno), spero che non disperdano troppi voti nelle listarelle di disturbo e che diventino uno dei più grossi gruppi nazionali all'interno del loro gruppo europeo (PPE), che magari potrebbe effettivamente cambiare qualcosa negli equilibri dell'Europa. Ma questa è una piccola speranza di convenienza Italiana, perché vista in termini europei, l'importante è una buona politica europea non un maggiore peso dell'Italia in Europa...qui però sono alla masturbazione politica pubblica, quindi mi fermo ;)

Ecco dunque il perché di una scelta sofferta. E forse ecco un nuovo sprone ad interessarsi alla politica e a parlarne. Vedremo.
Read more