In questa seconda parte vedremo alcuni utilizzi delle macro in Common Lisp
e discuteremo due problemi tipici: la cattura accidentale di nomi (variable capture) e la valutazione
multipla.
Programmazione
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.
[Leggi di più…] infoI pericoli della programmazione con i mixin/2
Realizzare videogiochi in J2ME
La realizzazione di un videogioco oggi è molto più semplice rispetto al passato non tanto perchè l’hardware permette
effetti impensabili sino a qualche anno fa ma perchè il supporto software offerto dalle API e dai framework sgrava il programmatore di
compiti tediosi quali la gestione delle collisioni o l’animazione degli oggetti.
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.
[Leggi di più…] infoI pericoli della programmazione con i mixin/1
La Summer Of Code italiana
Abbiamo già
parlato del Google Summer
of Code (in seguito SoC), un programma di Google che finanzia
progetti liberi e più generalmente open source, dando l’opportunità
a studenti di ogni grado di partecipare allo sviluppo di tali
progetti. Il SoC, inoltre, permette agli studenti di conoscere e introdursi nella vita molto peculiare di una
community che ha come obiettivo lo sviluppo di un progetto open
source.
Il SoC rappresenta un’opportunità anche per le organizzazioni
no-profit che promuovono software open source (es. l’Apache
Foundation), le quali beneficiano dell’apporto di nuove energie e
soprattutto di nuovo codice, nuove funzionalità, bug fixing, etc.
Diamo quindi visibilità a studenti e mentor italiani che partecipano
al Google Summer of Code edizione 2008, descrivendo brevemente le
loro proposte, che spaziano su diversi argomenti come: grafica
3D, Security, DSP, GIS, Desktop Environment oppure danno qualità
industriale e robustezza a strumenti e progetti innovativi ma meno
mainstream come Squeak e Haskell, Open Street Map e Blender.
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.

Fig 1: design a oggetti
Common Lisp Macro/1
Tra le funzionalità che rendono il Common Lisp un linguaggio molto
potente e differente
da quelli più diffusi, vi sono
le macro.Una notazione ed una sintassi con poche regole ed un sistema di
lettura, compilazione e esecuzione del codice molto flessibile danno
allo sviluppatore la possibilità di astrarre un pattern di codice in
un nuovo costrutto, laddove tale pattern non può essere astratto con
una tradizionale funzione. I lettori che già conoscono il Common Lisp
possono saltare il prossimo paragrafo, nel quale ne sono riassunte
brevemente le basi. Coloro i quali vogliono approfondire o conoscere le macro in Scheme possono visionare le Avventure di un Pythonista in Schemeland 8, 9,10 e 11.
[Leggi di più…] infoCommon Lisp Macro/1
Python migliora il supporto al multiprocessing
Con le seguenti parole Guido Van Rossum ha approvato e benedetto l’ingresso di pyprocessing all’interno della libreria standard di Python già nelle prossime release:
+1 from me as well, and I support the rename to multiprocessing (“processing” is just too much of a common word).
This will provide a good short-term answer to those who still clamor for dropping the GIL.
[Leggi di più…] infoPython migliora il supporto al multiprocessing
Ruby 1.8.7 e Rails 2.1
RailsConf 2008 passerà alla storia per i molti annunci importanti. Ad esempio, l’annuncio ufficiale circa il nuovo traguardo di IronRuby, che è finalmente in grado di servire semplici richieste con Rails. Un’altra star indiscussa che farà parlare di sé, è MagLev, un’implementazione da parte dell’azienda Gemstone, che ha stupito tutti con dei benchmark che dimostrano una velocità di esecuzione di gran lunga maggiore a quella di MRI (Matz Ruby Interpreter). Come se non bastasse, proprio oggi sono state rilasciate la nuova versione di Ruby (1.8.7) e quella di Rails (2.1).
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.