Le Nuove Avventure di un Pythonista in Schemeland

Qualche tempo fa si è concluso il secondo ciclo delle “Avventure di un Pythonista in Schemeland”. Scrivevo nell’editoriale che annunciava la fine del ciclo: “Per darvi il tempo di riflettere e di assorbire le puntate pubblicate finora, conto di lasciare una breve pausa tra la fine di questo ciclo e l’inizio del prossimo”. La “breve pausa” si è allungata a cinque mesi, un pò per le due trilogie di articoli su Python che sono apparsi nel frattempo, un pò per le vacanze estive e un pò per esigenze personali (vi dice qualcosa la parola matrimonio? ūüėČ Inoltre, in questi mesi ho un pò ripensato la strategia di pubblicazione delle “Avventure”.

[Read more…]

I pericoli della programmazione con i mixin/3

Dagli articoli precedenti dovrebbe essere ampiamente chiaro che io non amo i
mixin, ma vale la vena di spiegare esattamente cos’√® che mi d√† cos√¨
tanto fastidio. Tutti noi sappiamo che il modo migliore di
risolvere un problema complesso √® quello di spezzarlo in sottoproblemi pi√Ļ
piccoli disaccoppiati, secondo la massima del dividi et impera. La
cosa fastidiosa dei mixin √® che questo principio viene applicato all’inizio (il
problema viene scomposto in pacchetti disgiunti di funzionalità) ma
alla fine tutte le funzionalità separate vengono rimescolate insieme
in un calderone unico, che è il namespace della classe figlia. Che
l’iniezione avvenga direttamente come in Ruby o indirettamente tramite
l’ereditariet√† come in Python, il risultato non cambia: alla fine
l’utente della classe figlia si trova a dover gestire centinaia di
metodi tutti assieme e non ha un modo ovvio per capirne la
provenienza.

Overpopulation.jpg

Il problema del sovraffollamento

[Read more…]

I pericoli della programmazione con i mixin/2

Nella prima parte di questa serie ho discusso il problema principale
dei mixin, il sovraffollamento del namespace. Il lettore
potrebbe pensare che tale problema affligga soltanto i framework di
dimensioni medio/grandi e che non ci siano problemi ad usare i
mixin in framework piccoli. Questo è in parte vero, ma è anche
vero che spesso e volentieri i mixin sono usati a sproposito anche
in framework piccoli. In questa seconda parte illustrerò varie
alternative all’ereditariet√† multipla e ai mixin nel piccolo,
per sistemi ad oggetti di piccole dimensioni che potreste scrivere
anche voi.

[Read more…]

I pericoli della programmazione con i mixin/1

I mixin sono una tecnica di programmazione ad oggetti che permette di
iniettare pacchetti di metodi in una classe madre, direttamente o
indirettamente tramite l’ereditariet√† multipla. I pro e i contro 
della tecnica sono molto dibattuti ed io personalmente nel giro di qualche anno sono
passato da acceso sostenitore a fiero oppositore. Data
la premessa è chiaro che non sarò imparziale e che non dovete prendere
quanto dir√≤ per oro colato. La mia opinione √® che l’ereditariet√†
multipla, i mixin e i trait (per lo meno quando i trait sono intesi
come sinonimo dei mixin come spesso avviene) sono esempi di tecniche
molto cool sulla carta che si rivelano nella pratica un disastro,
soprattutto quando ci si trova a dover mantenere del codice che ne fa
un uso liberale. Ci possono essere dei casi particolari in cui il loro
uso è accettabile, ma la maggior parte delle volte esistono
alternative pi√Ļ valide che sono per√≤ meno note e meno utilizzate. Lo
scopo principale di questa serie è proprio quello di illustrare le
alternative, almeno nel contesto della programmazione in Python.

[Read more…]

Gestione dei record in Python/3

Nei primi due articoli di questa serie abbiamo discusso come leggere e
come processare record omogenei. In questo terzo ed ultimo articolo ci
dedicheremo invece allo studio dei record non-omogenei, ovverossia
record in cui campi diversi vanno processati in
maniera diversa. Lo scopo ultimo è quello di disegnare un framework
per convertire record in testo in formato CSV, HTML, XML o altro. En
passant
, discuteremo varie tecniche di design e pattern tipici della
programmazione ad oggetti.

patchwork1.jpg

Fig 1: design a oggetti

[Read more…]

Gestione dei record in Python/2

Nella scorsa puntata ho descritto i pregi e le virt√Ļ delle
namedtuple, un concetto che è stato introdotto nella libreria standard
di Python con la versione 2.6 (attualmente in alpha) ma che può essere
utilizzato proficuamente fin da
subito, semplicemente scaricando la ricetta di Raymond
Hettinger
. In questa puntata farò uso delle namedtuple per gestire
i record provenienti da un database a darò qualche consiglio su
come processare e come visualizzare tali record.

[Read more…]

Le avventure del futuro

Con la puntata pubblicata la settimana scorsa abbiamo chiuso il
secondo ciclo delle “Avventure di un Pythonista in Schemeland”. √ą
tempo di una pausa di riflessione. Il primo ciclo di cinque puntate è
stato puramente introduttivo e rivolto a tutti, mentre il secondo
ciclo √® stato pi√Ļ tecnico e rivolto ad un pubblico attento. In
particolare, siamo entrati nel cuore di Scheme, andando a discutere il
concetto di code is data ed introducendo le macro di tipo
syntax-rules. Adesso è il momento di avere un pò di feedback
dai lettori. Sondando nella lista degli autori di Stacktrace ho
scoperto che molti trovano il ritmo di pubblicazione attuale (poco
meno di un articolo a settimana) un pò difficile da seguire. Voi
lettori abituali che ne dite? State ancora seguendo? Vi è scoppiata
la testa leggendo la decima puntata?

[Read more…]

Le avventure di un Pythonista in Schemeland/11

gears.gif

Dopo la teoria discussa nelle puntate precedenti, finalmente è il
momento di un pò di pratica. Dedicherò questa puntata alla discussione
di alcune applicazioni concrete delle macro. In
particolare implementerò un mini-framework di unit test ed un semplicissimo
sistema ad oggetti. Entrambe le cose si possono trovare come librerie
(per i test si vedano gli SRFI 64 e 78, di sistemi ad oggetti ce ne sono
a bizzeffe) ma secondo me è
estremamente utile avere un’idea degli ingranaggi che stanno dietro ad
una libreria di unit test o ad un sistema ad oggetti. D’altra parte, √®
anche utile conoscere i problemi che possono far inceppare gli
ingranaggi della macrologia e quindi per prima cosa discuterò una
sottigliezza delle macro che teoricamente è facile da capire, ma che
in pratica può trarre in inganno anche programmatori esperti.

[Read more…]

Le avventure di un Pythonista in Schemeland/10

exploding-head.jpg

In questo puntata chiudo il discorso sulle macro del secondo ordine
iniziato nella puntata scorsa, spiego i segreti dell’operatore di
ellipsis e mostro le soluzioni alle sfide da me lanciate. Inoltre,
spiego come definire una macro define-syntax+ che fornisce delle
funzionalità di introspezione e debugging alle macro che
definisce. Prima di cominciare a leggere, vi consiglio di prepararvi
una grossa scorta di caffè. Come si dice nel mondo Python, questa è
una puntata che rischia di farvi scoppiare la testa, quindi leggetela
con cautela e a vostro rischio e pericolo. Siete avvisati!

[Read more…]

Gestione dei record in Python/1

Qualunque programmatore prima o poi si sarà trovato a dover gestire dei record: interagendo con un database, leggendo un file CSV, programmando in un qualunque linguaggio (ricordate i record del Pascal e le struct del C?) e in mille altre occasioni. Questo dunque potrebbe sembrare un argomento elementarissimo, ben conosciuto e assolutamente noioso: tuttavia, si tratta di un soggetto su cui c’è ancora molto da dire. In questo miniserie tratterò della gestione dei record in Python, ma la miniserie è pensata per discutere, più che i dettagli implementativi, tecniche generali per risolvere il problema di leggere, scrivere e processare sequenze di record in maniera pulita. La miniserie si articola in tre parti: la prima, quella che state leggendo, introduce la materia e illustra una possibile soluzione al problema di leggere un file CSV con un numero qualunque di campi non noto a priori; la seconda parte si occupa del problema di leggere dei record da un database; la terza ed ultima parte, infine, si occupa del problema di generare dati in forma tabellare e di renderizzarli in vari formati.

[Read more…]