python
mercoledì 23 novembre 2011 - 10 Commenti
Alla fine quanto costa una somma in CPython?

Dopo gli articoli che hanno approfondito i meccanismi che scattano quando si utilizza l’operatore + in CPython (fino alla versione 2.7. Dalla 3.0 in poi si è verificato un cambio sostanziale, che analizzeremo in seguito), il dubbio espresso è legittimo.
Le operazioni di somma di interi (e di concatenazione di stringhe) sono quelle più diffuse e per le quali è stata posta particolare attenzione dagli sviluppatori della macchina virtuale di CPython, ma bisogna distinguere i casi che possono verificarsi.
Gli interi sono in assoluto il tipo di dati più utilizzato, e che …

martedì 22 novembre 2011 - 2 Commenti
Sviluppare un gioco in Python: Panda3D – audio

Introduzione
Il nostro tour attraverso questo splendido game engine, sta per volgere al termine. Con questo articolo vedremo come inserire effetti audio all’interno della nostra scena in Panda3d, senza troppe pretese.
Aggiungeremo una musica di sottofondo che si può ascoltare premendo una pulsante (GUI) ed un effetto audio 3d. Panda3d offre molte funzionalità sotto questo punti di vista ed ha anche delle alternative per quel che riguarda le librerie che si vuole utilizzare per riprodurre gli effetti audio.
Audio
Panda3d permette di utilizzare una delle seguenti librerie audio:

OpenAL
FMOD
Miles

Per l’ultima libreria elencata, è l’unica che …

mercoledì 16 novembre 2011 - 4 Commenti
E adesso concateniamo le stringhe in CPython

Visto che l’appetito vien mangiando, esaminiamo ora le azioni che sono necessarie in CPython (che ricordo essere la macchina virtuale “ufficiale” / “mainstream” di Python) per portare a compimento un’altra operazione molto comune, la concatenazione di due stringhe, che risulta “mappata” anch’essa sull’operatore di addizione/somma (il classico simbolo “+“).
Se Python s’è diffuso molto, infatti, è anche merito della semplicità di manipolazione delle stringhe che l’ha caratterizzato fin dall’inizio, e fra queste operazioni la più diffusa rimane quella oggetto di quest’articolo.
Riprendendo parte del codice del bytecode BINARY_ADD di cui abbiamo parlato in …

mercoledì 9 novembre 2011 - 19 Commenti
Da Python a C, e ritorno

Eseguire una semplice somma in CPython si sta rivelando più complicato di quel che si poteva immaginare, principalmente a causa del diverso “modello” dei dati manipolati rispetto al linguaggio C (col quale è implementata la macchina virtuale).
CPython, come già detto, gestisce qualunque dato facendo uso di una gerarchia che discende dall’oggetto (struttura in C) PyObject, che si specializza poi in base al tipo (classe) di oggetto modellato.
Ritornando al codice della somma, una volta appurato che entrambi gli oggetti siano di tipo intero (puntatori a strutture PyIntObject per la precisione), è …

giovedì 3 novembre 2011 - 15 Commenti
Tiriamo le somme in CPython

Dopo un’occhiata al funzionamento “di massima” della macchina virtuale implementata con CPython e analizzato in dettaglio le azioni che scattano nel momento in cui abbiamo deciso di utilizzare il valore memorizzato nella variabile locale per farci qualcosa, entriamo nel concreto con l’esempio visto inizialmente e che riguarda una semplice somma.
Il blocco di codice che in CPython (ricordo che parliamo della versione 2.6.4, ma il discorso è valido per le versioni 2.x e, per buona parte, per le 3.x) è deputato all’espletamento dell’operazione di “addizione” si presenta decisamente imponente rispetto a …

mercoledì 26 ottobre 2011 - Commenta
Sviluppare un gioco in Python: Panda3D – input

Introduzione
In questo articolo vedremo come gestire gli input in Panda3D, facendo muovere il carosello presente nella scena anche nei precedenti esempi. Nel precedente articolo abbiamo visto come Panda ci consenta di definire dei task che il motore chiama per ogni frame (a seconda delle nostre indicazioni). Questo meccanismo, insieme alla gestione degli eventi, ci permette di interagire interamente con il mondo da noi creato.
I gestori di eventi sono particolari procedure (Event handlers) che vengono richiamate quando accade una particolare situazione, un particolare “evento”. Per questo motivo gli eventi sono gestiti …

mercoledì 19 ottobre 2011 - 6 Commenti
LOAD_FAST, per andare veloci su CPython

Sembra uno slogan pubblicitario da due soldi, ma racchiude una delle grandi “verità” dell’implementazione “principale” (mainstream?), e non solo, di questo magnifico linguaggio: le variabili locali sono veloci.
Per variabili locali s’intendono tutti i parametri passati alle funzioni (e metodi), e quelle variabili che vengono “dichiarate” all’interno di una funzione, intendendo con ciò la presenza di almeno un’operazione di assegnazione che le riguardi all’interno di quest’ultima.
Si tratta di operazioni (istruzioni) molto veloci perché, rispetto a tante altre e come vedremo nei prossimi articoli, eseguono molto meno lavoro dietro le quinte per …

giovedì 13 ottobre 2011 - Commenta

Introduzione
In questo articolo parleremo del Task Manager di Panda3D. Infatti il nostro Panda gestisce gli eventi in modo particolare, quasi come fossero gli eventi del nostro OS (è solo una similitudine, non prendetela alla lettera).
Questa parte è fondamentale per introdurre successivamente la gestione dei vari input e delle animazioni. Nell’esempio effettueremo solo delle rotazioni dei poligoni che abbiamo già inserito, ma potete anche provare a spostare uno di essi.
Il task manager è messo a disposizione da Showbase o da DirectStart, ma tecnicamente è un modulo che può essere importato da …

mercoledì 12 ottobre 2011 - 15 Commenti
Una prima occhiata alla virtual machine di Python

All’ultima EuroPython tenutasi a Firenze ho avuto la possibilità di presentare un talk riguardo a un mio lavoro di ricerca sulla macchina virtuale di Python (chiamata CPython, essendo scritta in C) che trattava di alcune ottimizzazioni possibili sugli interi.
Penso sia interessante capire in che modo lavora internamente, per essere coscienti del peso che possono avere operazioni anche banali, come la classica somma di due numeri, ad esempio, di cui parlerò in questo articolo.
Preciso che parlerò dell’implementazione di CPython 2.6, ma il discorso è di carattere generale e rimane valido anche …

giovedì 29 settembre 2011 - 5 Commenti

Introduzione
In questo articolo vedremo meglio quali sono i rapporti tra i vari nodi dell’albero di rendering di Panda3d; inoltre vedremo come aggiungere una texture da una semplice immagine da noi creata, per rendere più viva la scena e cominciare così a caratterizzare gli oggetti del gioco.
Per cominciare vediamo come “spalmare” la nostra immagine sull’oggetto 3d da noi creato. Il nostro cubo diventerà colorato e manterrà le proprietà acquistate, che saranno opportunatamente memorizzate nel file .egg o .bam, a seconda di come esportere l’oggetto. Ricordate che le texture applicate dovranno …