Piero V.

Fsck e Ext4

Quando ho formattato il mio computer ho scelto di usare il filesystem Ext4, mentre prima avevo Ext3.

Beh, devo dire che questo aggiornamento ha portato una bellissima conseguenza: la velocità di fsck.

Prima, con lo stesso disco, stessi dati solo che in ext3 ci mettevo 10 minuti, ora con ext4 meno di 30 secondi.

Flying Boxes

Volevo presentarvi Flying Boxes, un gioco fatto da un mio amico lunedì notte in sole 9 ore e poi perfezionato in martedì e oggi.

È un gioco in terza persona: voi mandate a destra e sinistra un aereo, il quale deve schivare le casse di legno.

Vi spostate con i tasti direzionali: sinistra e destra spostate l’aereo, con la freccia in su date il “turbo”, ovvero aumentate la velocità di molto.

Il gioco è multipiattaforma (è fatto in python con Panda3d), però vi linko il setup per Windows.

In ogni caso se volete potete giocare anche con le altre piattaforme, basta installare Panda3D ed estrarre dal setup game/main.py, e le cartelle $_OUTPUT_DIR/models e $_OUTPUT_DIR/images (magari con 7zip).

Download del setup (mirror)

Panda3D: distribuire giochi in C++ su Windows

Vi ho parlato più di una volta di Panda3D: un motore per giochi libero e multipiattaforma.

Finora però ho sempre parlato di problemi pratici riguardanti la programmazione, ma non ho mai parlato del problema della compilazione e della distribuzione, che invece sono molto importanti.

Le due piattaforme supportate principalmente da Panda sono Windows e GNU Linux.

Per la compilazione su GNU Linux non ci sono problemi, basta avere il compilatore GNU fare copia e incolla dalla pagina di Panda e si è a posto. Non escludo che comunque magari anche altri compilatori funzionino.

Su Windows si è invece costretti a usare Visual C++ 2008. Per usare la versione 2010 bisognerebbe ricompilarsi tutto Panda.

Io l’ho utilizzato per la prima volta ieri, comunque il tutto è abbastanza facile. Anche in questo caso basta seguire le istruzioni di Panda3D. Per le directory comunque vi consiglio di non metterle globali ma solo al progetto. Per farlo bisogna andare su Proprietà, Linker, Generale, Directory di include aggiuntiva (vado a memoria) e mettere C:\Panda3D-vers\python\include e C:\Panda3D-vers\include (sostituendo a vers la vostra versione). Per mettere la directory delle librerie invece dovete avere almeno un file C++ nel progetto, anche vuoto. Allora nella voce delle proprietà diventerà disponibile anche la scheda C/C++, in cui potrete andare ad inserire, mi pare in generale, le directory C:\Panda3D-vers\python\libs e C:\Panda3D-vers\lib. Magari quando ho un po’ di tempo controllo. Per ulteriori informazioni guardate questa pagina. … [Leggi il resto]

GtkPod e Debian Multimedia

Era da un po’ che su Debian Sid avevo problemi ad installare GtkPod, il miglior programma per gestire gli iPod da Linux.

Purtroppo Rhythmbox è un po’ limitato sotto certi aspetti, così volevo installare questo programma. C’era un problema di dipendenze però, che tuttavia era causato da Debian Multimedia.

Infatti libgtkpod1 era più recente nei repo ufficiali, tuttavia APT mi selezionava i repo alternativi perché avevano più priorità.

La soluzione è abbastanza semplice: modificare il file /etc/apt/preferences aggiungendo queste righe:

Package: libgtkpod1
Pin: release o=Debian,a=unstable
Pin-Priority: 999

Package: *
Pin: origin www.debian-multimedia.org
Pin-Priority: 850

Ora dovrebbe funzionare tutto, altrimenti date un apt-get update.

Enjoy Linux 😊

Panda3D e Broadcast

Tempo fa avevo cercato di creare la parte di networking per un videogioco che utilizza il motore Panda3D.

I giochi hanno bisogno di aggiornare velocissimamente le posizioni degli altri giocatori e tutti gli altri dati, perciò si usa UDP, un protocollo che è molto più veloce del TCP perché non fa controlli per vedere se sono arrivati i dati (e perciò è anche meno affidabile, ma non importa per un videogioco).

Una delle caratteristiche più belle di UDP è anche quella di poter fare il “broadcasting” di rete, ovvero mandare a tutti i client di una rete un pacchetto in una certa porta. Questa caratteristica può essere usata per esempio per fare la lista dei server a cui connettersi.

Panda3D teoricamente offre una funzione chiamata set_broadcast nella classe NetAddress, però non funziona, né in Python, né in C++. O almeno, non da sola.

In Python alla fine avevo lasciato perdere, però in C++ invece volevo sistemarla. Non riuscivo proprio a capire come fare, così ho cercato e ho visto che in generale bisogna dire al sistema operativo che la socket deve poter eseguire il broadcast.

Il set_broadcast sembra poterlo fare, ma se in realtà guardiamo il codice è solo una scorciatoia per inserire come indirizzo IP 255.255.255.255 necessario per fare appunto il broadcast ma non sufficiente.

Spulciando un po’ il codice ho trovato che serve abilitare il broadcast alla socket. Ed ecco come fare.

Quando creiamo la socket dal manager, otteniamo un puntatore alla connessione. Un metodo di quest’istanza è il get_socket, che normalmente restituirebbe un’istanza di Socket_IP, tuttavia questa classe non ha il metodo che ci serve. Allora dobbiamo “trasformarla” in una Socket_UDP, tramite il casting. Allora in quella possiamo chiamare il SetToBroadCast() e per magia il tutto funzionerà.

Tradotto in codice 😉 :

	Socket_UDP * sock = (Socket_UDP *)connection->get_socket();
	sock->SetToBroadCast();

connection è la connessione creata tramite il QueuedConnectionManager.

Una volta aggiunto questo come per magia il tutto funzionerà 😊