Piero V.

Panda3D per Debian Sid

Dopo aver studiato un po’ Blender e aver avuto qualche difficoltà ad ottenere esattamente quello che volevo con la Game logic ho deciso di provare un altro motore per videogiochi: Panda3D.

Panda3D è un motore rilasciato sotto la BSD Modified license e tra i suoi contributori si può citare la Walt Disney. Le sue API consentono di scrivere videogiochi in Python e in C++.

Come mesh da quanto ho capito - devo ancora approfondire per bene la questione - ha un formato suo (l’egg) ma è compatibile anche con X, 3ds ed esiste un plugin per esportare i file da Blender.

Perciò come caratteristiche promette bene.

Però c’è un problema: per Debian esiste il pacchetto solo per la Squeeze. E le dipendenze hanno software che include la versione nel nome del pacchetto e nei file stessi, perciò anche modificando il pacchetto non si ottiene un risultato utilizzabile (ho provato io stesso).

Così me lo sono ricompilato. Però la versione 1.72 (la stabile) non funzionava, così ho dovuto usare quella csv.

Per compilarla ho utilizzato il metodo makepanda/makepanda.py --everything --installer. Pur avendo specificato everything però alcune cose, tra cui ffmpeg sono state omesse. Invece con installer ho ottenuto un file deb che vi linko.

Un’ulteriore nota prima di scaricare e installare il file: ho compilato e installato anche bullet, una libreria per la fisica e anche Panda è configurato per usarla, perciò installate anche quel file. Purtroppo ho dovuto usare checkinstall e perciò non so le corrette dipendenze.

Ecco i link: bullet_2.79-1_i386.deb e panda3d1.8_1.8.0_i386.deb.

Spero vi possano tornare utili.

Chrome supera Firefox in diffusione

Dicembre e il 2011 sono appena finiti, però come al solito alla fine di un periodo si ricapitolano le notizie importanti.

Ce n’è una di inizio dicembre che mi era sfuggita: secondo Statcounter Chrome avrebbe superato Firefox come diffusione di pochi punti percentuali, si parla di un 25,69% contro un 25,23%.

Solitamente le statistiche non mi interessano, tuttavia questo fatto mi rattrista leggermente.

Ammetto che Chrome è un buon browser molto veloce etc., però ha almeno due grandi problemi.

Il primo è la privacy: la barra unica di Chrome è un’arma a doppio taglio: sembra che invii ciò che si digita direttamente a google.

Comunque è possibile superare il problema utilizzando Chromium.

Il secondo e grande problema è che Chrome, che si fa tanto amico degli standard, in realtà non lo è.

Un esempio è l’inserimento di colori in esadecimale, possibile anche senza #. Oppure il sito delle prenotazioni del cinema di una città vicino al paese dove abito funzionava solo con Internet Explorer perché il suo javascript utilizzava proprietà non standard del DOM.

Insomma, Google sta diventando la nuova Microsoft che grazie alla sua diffusione cerca di stabilire i propri standard.

Socket e thread in Python

Chi è interessato a sviluppare un’applicazione che utilizzi in un modo anche semplice la rete deve spesso documentarsi sulle socket, in qualsiasi linguaggio di programmazione, anche per il python.

In questo campo ho lavorato più di una volta, però mi sono limitato alla creazione di socket con una sola connessione alla volta.

Tuttavia non è molto utile: penso che la maggior parte delle applicazioni pratiche richiedano più di un client connesso e “addirittura” la possibilità di dialogare tra di loro.

Quindi intervengono i thread.

Non so darvi la spiegazione tecnica di cosa siano, però so darvi una spiegazione pratica: i thread permettono di eseguire contemporaneamente più operazioni, senza però creare un altro processo. Il vantaggio è che si ottiene il famoso multi tasking.

Documentandomi ho trovato che uno degli svantaggi è che non avviene il controllo sull’uso contemporaneo di alcune risorse come file, tuttavia in questo caso usiamo solo la RAM e perciò non ci poniamo il problema.

In python usare i thread è abbastanza semplice: una volta importato il modulo threading o solamente la classe Thread da esso, bisogna estenderla e fare una funzione chiamata run in cui bisogna mettere il codice da eseguire. … [Leggi il resto]

Plugin Redirect (v1.7) [Flatpress]

I’ve updated the Redirect Plugin.

This plugin allow you to use an entry like a static page: the entry has a short URL that is decided by you but it has the comments feature.

It’s very simple to use: when you modify or create a post there is, below the textarea, a field where you insert the redirect name (composed by alphanumeric chars and others such ._-).

Then you can decide to enable or not the comments with the checkbox.

In this version I’ve added the possibility of doing a HTTP redirect, that is more SEO friendly.

You can also manage redirects from its administration panel: go to Administration → Plugins → Redirect. Here you can also delete them.

From that panel you can create more redirect for one entry but when you save the entry you can keep just one redirect, the other ones will be delted.

Finally in this version I’ve also added the possibility to use also the static page style link. For example, if I have a redirect called test but I haven’t a page with that name, the plugin will handle the urls mysite.tld/test/ or mysite.tld/?page=test as a redirect.

However this feature is disabled by default. To enable id, go to fp-plugins/redirect/plugin.redirect.php and change the value of the constant at line 18 to true.

I release the plugin under the GNU GPL v2 License. The icons are taken by the old Tango Theme for Debian.

Download: redirect_v1.7.tar.gz.

Blender: ruotare la camera col mouse

Continuano i miei esperimenti con Blender.

Una delle mie più grandi domande riguardanti la game mode è: come fare per spostare la telecamera col movimento del mouse?

Beh, mi sono messo ad affrontare questo problema.

Il metodo che io utilizzerei è quello di analizzare il movimento del mouse e quindi di applicarlo alla rotazione.

Per fare ciò è mia intenzione associare uno script python al controller mousemove.

Ecco un prototipo di codice, con i commenti che spiegano cosa fa questo codice:

# Importa le librerie basi: la bge e classi utili da mathutils
import bge
from mathutils import *

# Comincia la funzione main
def main():

    # Prende l'oggetto del controller
    cont = bge.logic.getCurrentController()
    # Prende l'oggetto a cui il controller è applicato
    own = cont.owner
    # Per comodità ci salviamo i globalDict come obj
    obj = bge.logic.globalDict

    # Prendiamo il movimento del mouse
    mousemove=cont.sensors['Mousemove']
    pos=mousemove.position

    # Se è il primo movimento dobbiamo inizializzare i salvataggi dei movimenti
    if not 'mousepos' in obj:
        obj['mousepos']=pos

    # Salviamo il movimento
    obj['oldmousepos']=obj['mousepos']
    obj['mousepos']=pos

    # Troviamo le variazioni
    deltax=obj['mousepos'][0]-obj['oldmousepos'][0]
    deltay=obj['mousepos'][1]-obj['oldmousepos'][1]

    # Creiamo il vettore ed eseguiamo la rotazione lungo l'asse delle z (globale)
    rot=Vector((deltay*0.005, 0.0, -deltax*0.005))
    own.applyRotation(rot, False)

    # Creiamo il vettore ed eseguiamo la rotazione lungo l'asse delle y (locale della camera)
    rot=Vector((-deltay*0.005, 0.0, 0.0))
    own.applyRotation(rot, True)

# Esegue main, ogni volta che il mouse viene mosso
main()

Il risultato è ancora molto primitivo, ma sempre meglio che nulla 😉

In alcuni giochi come i FPS questo movimento è essenziale e andrebbe definito meglio, però questo mi pare già un inizio non malvagio.

Bisognerebbe aggiungere un po’ di controlli per vedere che il mouse non vada fuori dallo schermo e sistemare un po’ i coefficienti della rotazione.