Archive for février, 2012

Complément à l’article de Carl sur SQLite et Python

mardi, février 14th, 2012

Carl vient de publier, dans le dernier Linux Pratique Hors-Série sur Python, un article sur le module sqlite3, disponible dans la bibliothèque standard depuis Python 2.5, et qui permet d’utiliser facilement SQLite.

C’est un article très didactique, qui tombait à point nommé pour moi puisque j’ai récemment eu plusieurs idées d’intégration de SQLite dans txt2tags. Je suis parti totalement de zéro, puisque j’ai toujours fui aussi bien le langage SQL que la configuration des systèmes de gestion de bases de données, et j’ai quelques remarques complémentaires à faire qui pourront aider les personnes dans le même situation que moi.

Sur le shell sqlite3

Le shell sqlite3 est très pratique pour interagir avec les bases de données SQLite, et en particulier vérifier celles générées par nos programmes Python. Cependant, l’affichage standard est un peu spartiate :

sqlite> select * from tab;
1|gpl|3|premier test
2|linux|5|deuze

Pour une meilleur visualisation, on peut ajouter les noms des champs :

sqlite> .header on
sqlite> select * from tab;
id|title|length|comment
1|gpl|3|premier test
2|linux|5|deuze

Afficher en colonnes :

sqlite> .mode column
sqlite> select * from tab;
1           gpl         3           premier test
2           linux       5           deuze

Et même les deux à la fois :

sqlite> select * from tab;
id          title       length      comment
----------  ----------  ----------  ------------
1           gpl         3           premier test
2           linux       5           deuze

Sur la table sqlite_master

Dans l’article il est précisé comment obtenir la liste des tables d’une base de données grâce à une commande du shell sqlite3 :

sqlite> .tables
tab

Mais pas comment obtenir le même résultat d’une requête SQL que vous pouvez effectuer en Python, et qui utilise la table sqlite_master automatiquement créée par SQLite :

sqlite> select name from sqlite_master;
tab

Sur la méthode iterdump()

Deux remarques :

  1. Elle n’est disponible que depuis Python 2.6
  2. C’est selon Gerhard Hæring lui-même, l’auteur du module sqlite3, la seule méthode pour dupliquer une base en mémoire vers une base sur disque (oui, c’est vraiment très moche qu’il n’y ai pas de manière plus élégante de le faire, mais c’est comme ça !)

Sur les ? et les chaînes de caractères

Pour construire dynamiquement le contenu des requêtes SQL, Carl utilise sans le justifier des ? et un tuple de valeurs comme second argument de la méthode execute(). Il est en fait très important de suivre cette manière de faire, car si vous utilisez les opérations classiques de concaténation des chaîne de caractères, vous vous exposez à des risques d’attaque par injection SQL !

L’autre article de Carl sur l’utilisation du module smtplib est aussi très intéressant, les autres articles du Hors-Série formant en fait un gros tutoriel d’initiation au langage Python.

Héros de jeu vidéo, dans FLARE !

jeudi, février 9th, 2012

FLARE, pour Free/Libre Action Roleplaying Engine, est un jeu vidéo libre disponible sous Windows, Mac OS X et Linux. Le projet a commencé sous le nom OSARE, pour Open Source Action Roleplaying Engine, et en a changé suite à une discussion entre Clint Bellanger, le principal développeur du projet, et l’inusable Richard Stallman.

Le jeu y a gagné un nom « éthique », puisque défendant ouvertement nos valeurs, ainsi qu’un logo, puisque flare signifie en gros flamme en anglais.

C’est la licence GNU GPL version 3 qui est utilisée pour le code source du moteur du jeu, et la licence Creative Commons BY-SA 3.0 pour toutes les données et fichiers artistiques (desseins, textures, musique, etc.).

Justin Nichol, un jeune artiste qui souhaitait produire des données créatives utilisables dans FLARE , tout en finançant la fin de sa formation à la Concept Design Academy, a donc créé en décembre 2010 le projet Creative Commons Fantasy Portrait Marathon sur le site de financement collaboratif Kickstarter.

Il a ainsi récolté 2 567 dollars auprès de 33 donateurs, ayant donné chacun entre 10 et 250 dollars. J’ai personnellement donné 100 dollars pour un pack « Spellslinger » que je me suis offert à moi-même comme cadeau de Noël, et qui ne me permet pas moins que de devenir un vrai héros de jeu vidéo !

One of the characters in the set will be based on your likeness and you will have additional creative input during the painting process into the background, concept and costuming of the character. You will receive a print of the portrait.

Après plus d’un an de travail, Justin vient juste de publier la trentaine de portraits promis. En plus d’être licenciés sous Creative Commons BY-SA, ils ont été créés uniquement à l’aide de logiciels libres, principalement GIMP.

Je trouve le rendu des portraits très concluant, et je suis en particulier très content du mien. Et un jour prochain, en étant un peu patient, je pourrai faire apt-get install flare (c’est-à-dire installer FLARE sur ma Debian ou ma Ubuntu) et jouer avec Moi l’Unique !

Je crois que ce genre d’initiative est à même de donner un sacré coup de vieux à l’énorme industrie des jeux vidéo propriétaires, que les jeux libres ont pour l’instant bien du mal à concurrencer, la disparité de moyen semblant particulièrement insurmontable (les grands jeux vidéos se développent à coup de dizaines de millions d’euros) .

En effet, les jeux vidéos sont des logiciels d’une espèce hybride, avec des spécificités très fortes qui les différencient des logiciels classiques (importance du non logiciel comme les visuels, la musique, le scénario, etc.), et on ne concurrence donc pas World of Warcraft aussi facilement que IIS si l’on est juste un bon développeur.

Nous avons besoin de Clint Bellanger, mais nous avons aussi besoin de Justin Nichol, l’alliance des deux permettant d’ouvrir des voies qui resteront pour toujours fermés aux jeux propriétaires, et qui pourraient donc permettre la réussite des jeux vidéo libres auprès du grand public.

Mise à jour du 10 février 2012 : Tous les portraits sont maintenant disponibles aux formats PNG, JPEG et XCF (le format natif de Gimp, à utiliser si vous souhaitez modifier les fichiers).