Catégorie : geek

Python, débutant et jeu : Soko-ban version geek

Avez-vous déjà entendu parler de Sokoban, le jeu ?
J’ai eu la formidable idée (c’est de l’humour…) de le coder en Python, et encore mieux (c’est encore de l’humour…) de le coder pour pouvoir y jouer en mode console.

\o/

J’ai commencé à développer pour qu’il soit international, donc les commentaires sont pour la plupart en anglais.

La première chose que je voulais faire c’est pouvoir faire des affichages différents. Donc, selon que votre console le supporte ou pas, vous pourrez changer l’affichage :

# Different drawings:
glob_tab_chars = \
[
    # Ground / GroundStoneDest / Wall / Player / Stone
    [ ' ', '.', '█', '☺', '☻', '○','♦' ],
    [ ' ', '.', '#', '@', '+', '$','*' ],
    [ ' ', '.', '░', '☺', '☻', '○','◙' ]
]

Voici l’écran de base :

Copie d'écran de PySoko

Voici l’écran, si on veut changer les graphismes (en cliquant sur « + » ou sur « -« ) :
Copie d'écran de PySoko

Voici l’écran, si on veut encore changer les graphismes (en cliquant sur « + » ou sur « -« ) :
Copie d'écran de PySoko

Le code orienté objet

Les classes de base

Et ensuite le plus important à mon sens : le code orienté objet. J’ai voulu apprendre l’orienté objet de python. J’ai donc crée des classes qui correspondent aux objets de base (dans l’ordre, classe du Sol sans rien, classe du Sol où il faut ranger une pierre, classe Mur, et classe Joueur) :

# Different drawings:
class Ground(object):
    def __init__(self):
        super(Ground,self).__init__() # Parent call:

class GroundStoneDest(object):
    def __init__(self):
        super(GroundStoneDest,self).__init__() # Parent call:

class Wall(object):
    def __init__(self):
        super(Wall,self).__init__() # Parent call:

class Player(object):
    def __init__(self):
        super(Player,self).__init__() # Parent call:

Classe Level

Et de la même façon j’ai crée la classe Level qui est la plus complexe, et qui contient les fonctions les plus utilisées :

  • apply_drawings_set()
    Calculer les motifs pour dessiner le tableau (oui, oui c’est plus complexe que ça n’en a l’air) ;
  • draw()
    Dessiner les motifs en cours à l’écran ;
  • register_player_move()
    Se souvenir des mouvements du joueur, soit pour pouvoir faire un « undo » (pas implémenté), soit pour pouvoir les sauver pour les rejouer (pas implémenté non plus) ;
  • move()
    Essai de déplacer un objet situé en (x,y) du décalage (add_x, add_y), sachant que le décalage peut être négatif ;
  • solved()
    Test si toutes les pierres sont bien rangées.

Classe LevelsReader

De la même façon, j’ai crée la classe LevelsReader qui lit un niveau, et l’analyse pour voir s’il est un minimum cohérent. Pas la peine d’entrer dans le détail, les fonctions sont suffisamment explicites je pense.

Bibliothèque curses

Et pour terminer, la fonction de la boucle principale qui concerne l’unité curses : def curses_main(stdscr, code). C’est ici qu’on affiche le menu, qu’on attend qu’on tape sur une touche, etc.

Notez bien : le code n’est pas terminé. C’est un début de code, relativement correctement fait. J’ai passé à peine deux jours dessus pour réussir à faire cela, donc ne m’en voulez pas trop, il n’est pas peaufiné, mais il fonctionne.

Si jamais vous l’améliorez, ce serait gentil de me faire parvenir la nouvelle version 🙂

Le lien que tout le monde attend avec impatience, la bave aux lèvres :

Cliquez ici : pysoko.tar.bz2

Un email temporaire : comment faire ?

Ce cas nous est déjà arrivé au moins une fois : vous avez besoin de donner une adresse email uniquement temporairement.
La solution se trouve ici : http://tempalias.com/
Vous donnez votre vrai email, vous précisez combien de temps votre « faux mail » doit durer (en temps ou en nombre de messages reçus) et hop ! On vous donne un email temporaire que vous pourrez utiliser.
Ce n’est pas un principe génial, c’est un principe géniallissime !

En espérant que cela vous serve pour faire plus de bien que de mal !

WordPress, Php et XML rpc – how-to. Explication

WordPress est un outil formidable. Il offre la possibilité d’envoyer des articles à distance.
Pour ce faire, entre autres, les développeurs ont crée une page qu’il faut appeler en lui passant les paramètres adéquats.
Cette page est située à la racine de l’installation de votre site WordPress. Par exemple si vous avez installé WordPress sur http://monsite.com/wordpress/, il faudra appeler la page http://monsite.com/wordpress/xmlrpc.php

Passons maintenant aux choses sérieuses : comment automatiser un envoi d’articles en php ?
C’est extrêmement simple. Je vous donne les indices, et à partir de là, à vous de finir de développer afin d’atteindre votre objectif.

Première chose : il faut que le PC qui doit envoyer les articles ait Php d’installé, avec le support XML rpc. Dit autrement, il faut qu’il soit compilé avec l’option --with-xmlrpc, ce qui n’est pas le cas par défaut. A vous de vous débrouiller tout seul pour arriver à activer l’option. Si vous êtes sous Linux, et que vous avez tout compilé à la main, comme un bon guerrier que vous êtes, il vous suffit d’afficher une page qui éxecute "phpinfo();" et Php vous affichera la ligne de compilation, il vous suffira de recompiler avec l’option --with-xmlrpc.

Une fois cette tâche terminée, il vous faudra activer sur le site WordPress concerné, l’option XML rpc. Il faut se connecter en tant qu’administrateur, aller dans le menu Réglagles » Ecriture » Publication à distance et cocher l’option XML-RPC.

Enfin on y arrive, le code qui se connecte et envoie quelque chose !

  1 <?php
  2 /* Exemple WordPress, Php et XML rpc  */
  3
  4 $request =
  5   xmlrpc_encode_request(
  6     "wp.getUsersBlogs",
  7     array("nom_d_utilisateur", "mot_de_passe")
  8   );
  9 $context =
 10   stream_context_create(array('http' => array(
 11     'method' => "POST",
 12     'header' => "Content-Type: text/xml",
 13     'content' => $request
 14   )));
 15 $file = file_get_contents(
 16   "http://monsite.com/wordpress/xmlrpc.php", false,
 17   $context);
 18
 19 $response = xmlrpc_decode($file);
 20
 21 if ($response && xmlrpc_is_fault($response)) {
 22     print(utf8_encode(
 23       "xmlrpc: $response[faultString] ($response[faultCode])"
 24     ));
 25 } else {
 26     print_r($response);
 27 }
 28 ?>

Donc là vous avez le code.
Pour terminer, toutes les fonctions disponibles sont ici : http://codex.wordpress.org/XML-RPC_wp.
Elles ne semblent pas trop à jour, alors si vous voulez la liste réelle, regardez votre dans le blog, le fichier ./wp-includes/class-wp-xmlrpc-server.php, la fonction wp_xmlrpc_server().
Vous y verrez toutes les fonctions que vous pourrez appeler en XML RPC.

C’est tout de même bien mieux de se faire son outil qui fait les envois d’articles à distance, plutôt que d’en acheter un, non 🙂 ?

Facebook en ligne de commande : le howto !

Traduction de l’article ici :
http://fbcmd.dtompkins.com/

C’est tout simplement un bon script en php, à lancer en ligne de commandes. Bon, comme le dit l’auteur, il ne faut surtout pas en abuser et faire un bot qui irait aspirer plein d’informations, hein !

Le Commodore 64 est de retour !

Voici, comme à mon habitude, une traduction de quelque chose que j’ai particulièrement apprécié. Comme d’habitude, pour mes quelques 300 lecteurs abonnés à mes flux, cela ne concerne qu’une infime partie de la population : ceux qui veulent bidouiller, et / ou, ceux qui connaissent le Commodore 64.

Le nouveau Commodore 64 vu de face

Le Commodore 64 est de retour, et il laisse la version de 1982 dans la poussière !

Le Commodore 64 était une excellente machine 8 bits, et le second de ma jeunesse.
Il semblerait bien qu’il fasse un come-back en 2011 !
Commodore USA a fait un truc super sympathique : ils ont mis un mini PC embarqué (Mini-ITX) dans la coque d’un Commodore 64. Il est donc possible de démarrer sur un système classique de type Windows ©, ou de charger l’OS Commodore 1.0, avec une sélection de jeux classiques, quelques applications et tout un paquet de programmes open-source. Il semblerait que cette dernière option arrive un peu plus tard, mais pour l’instant la machine est livrée avec un copie d’Ubuntu 10.04.

Le nouveau Commodore 64 vu de dos

Alors, comparé au modèle originel, qu’y a-t-il de mieux ou de moins bien ?

C64 (prix : 595 dollars en 1982, soit 1367 dollars ajourd’hui)

  • Processor 8-bits 6510 à 0.985MHz, technologie MOS
  • 64 Kb RAM (38Kb pour les programmes BASIC)
  • Chipset graphique VIC-II, technologie MOS (16 couleurs, 112 sprites maximum)
  • Chipset sonore SID, technologie MOS

C64x (Price: starting at $595)

  • Processur Intel Atom 1.80GHz
  • Jusqu’à 4Gb RAM
  • Chipset graphique Nvidia ION2 (nombre illimité de sprites (enfin on suppose))
  • Audio 6 canaux Realtek HD

Je ne vais rentrer plus dans les détails, mais les nostalgiques vont se régaler !
De plus, le clavier n’était à l’époque pas mauvais, surtout comparé aux claviers d’aujourd’hui !

L’article original est ici.

Gemcraft nouvelle version : Gemcraft Labyrinth

Mon jeu / Casse tête favori est de retour !
Bien évidemment avec plein de nouveautés et une durée de vie encore démultipliée, ce qui va en faire des nuits blanches (car la nuit est bien la seule chose qui me reste avec mes deux petits ><)

Pour ceux qui ne savent pas ce qu’est ce petit casse tête génial du type « Tower defence », je vous renvoie à ma petite page d’explications ici.

Gemcraft Labyrinth - page de présentation

Tout d’abord, la taille de tous les labyrinthes à résoudre : 13×13 = 169. Oui oui vous avez bien lu, cent soixante neuf niveaux, ce qui, rien que le temps de les faire d’affilée, donne déjà une bonne trentaine d’heures. Voici la carte principale lorsqu’on débute (je les ai presque tous terminé, mais je ne vais pas vous montrer la carte entièrement remplie :!) :
Gemcraft Labyrinth - page de la carte des labyrinthes

Ensuite, pour chaque niveaux, pas grand chose de changé visuellement, et on en est bien content, car c’était déjà tellement bien qu’il n’y avait presque rien à améliorer :
Gemcraft Labyrinth - page d'un niveau à résoudre

Mais là où ça commence déjà à démultiplier la durée de vie, qui je vous le rappelle, de base, est déjà d’une bonne trentaine d’heures, c’est que pour chaque niveau, il est possible de le résoudre en y ajoutant des difficultés supplémentaires, qui vont rendre le niveau à la fois plus dur, mais qui va vous apporter de l’expérience supplémentaire afin de vous faire progresser :
Gemcraft Labyrinth - challenges possibles à résoudre

Vous pouvez changez, pour chaque niveau :

  • Le nombre de monstres ;
  • La résistance des monstres ;
  • La composition des vagues de monstres ;
  • Le nombre de vagues de monstres ;
  • Des challenges qui rajoutent encore à la difficulté.

Le plus grand changement

Il est maintenant possible de « construire » le chemin en posant des tours et autres là où on veut, de manière à former un chemin.
Ça ajoute un élément énorme au gameplay et on a envie d’y jouer encore plus longtemps !
Je ne sais pas si je me suis bien exprimé, alors deux images valent mieux de des tonnes d’explications :

Voici une carte à faire, au début, complètement vide :
Gemcraft Labyrinth - challenges possibles à résoudre

Et voici la carte pendant le jeu :
Gemcraft Labyrinth - challenges possibles à résoudre

Il est donc possible de faire des chemins comme on veut, de « couper la route » afin de faire passer les vagues de monstre uniquement par des endroits que l’on désire.

Et je ne parle pas de toutes les petites améliorations qui sont subtiles mais qui augmentent encore le plaisir de jeu : par exemple, le fait que les cartes démarrent en mode pause et qu’on peut ainsi tranquillement réfléchir et poser les éléments et se préparer tranquillement. Le fait qu’on puisse cliquer sur un monstre pour dire « tout le monde sur lui » et donc les tours essaieront en priorité de le descendre. Il y en a encore et encore, mais cet article est déjà suffisamment long pour, je l’espère, vous avoir donné l’eau à la bouche.

Y a-t-il des défauts ? Très honnêtement je n’en ai pas trouvé. Il semblerait même que du point de vue de la vitesse, tout ait été encore plus optimisé que la version précédente. Bref, que du tout bon. Et pour quelque chose de misérable comme 5 euros, vraiment, un seul conseil : précipitez vous dessus et faites comme moi : payez ceux qui le méritent !

DAS Keyboard Ultimate S : le test

Voici le vrai, l’ultime clavier de geek, celui que tout le monde attend avec impatience : j’ai nommé : le DAS Keyboard Ultimate S (S pour « Silent »).
Attendez, je crois que je ne l’ai pas écrit avec les lettres qui vont avec :

DAS Keyboard Ultimate S

Voici les photos :
DAS Keyboard - vue générale

DAS Keyboard - la touche Linux

Pour résumer, le DAS Keyboard est aux claviers ce que les voitures de collection sont aux voitures : il n’y que les connaisseurs qui pourront apprécier, les autres ne sauront que critiquer de manière négative.
Bien sûr, dans ce cadre, plein de personnes vont penser « un clavier sans rien d’écrit dessus, n’importe quoi ! ».
Ou encore : « mais bon sang qu’est-ce qu’il est bruyant ! ».
Euh oui et non.
D’une part, je dois avouer que le toucher est absolument, comme tout le monde le dit (en Anglais ou en Allemand, mais pas en Français), excellent. C’est comme certaines bonnes choses : ça ne s’explique pas. Il n’y a qu’en pratiquant qu’on peut comprendre.
En fait, si on se renseigne vraiment, on peut comprendre techniquement le pourquoi de cette sensation si agréable. Notamment, concernant le principe des switches « Cherry MX ». Pour la note, j’ai acheté la version « Silent », donc celle qui a les switches « Cherry MX » bruns, et non pas bleus. Ils sont nettement moins bruyants, mais je dois avouer qu’ils sont tout de même bien plus bruyants que la plupart des claviers. Le son n’est pas si désagréable pour moi, disons même… surtout pour moi parce que je suis assez sensible au son. Et quand on développe, tout son qui pollue me gêne.

Clavier Azerty qui n’est pas prévu pour la programmation

Le seul hic ? Le seul gros hic ? Il n’est pas prévu pour la programmation. Avec notre super bonne mentalité et nos super bonnes idées, la plupart des caractères utiles en programmation sont difficilement accessibles. Comparez un clavier « Qwerty » et ses accolades, {} ou encore ses crochets [], c’est très facile à atteindre, alors qu’avec un clavier « Azerty », on ne peut taper que sur la touche AltGR, qui est située à droite. Donc on est obligé d’utiliser la main droite, même dans les cas où on devrait pouvoir se servir des deux mains.

Bon bref, pour l’instant, j’aime beaucoup taper avec, j’ai l’impression de faire nettement moins de fautes, et vraiment je n’ai pas à me plaindre. Par contre, c’est un fait, il n’est pas prévu pour le développement. En effet, sous vim, où on n’a pas le droit à l’erreur quand on tape les ordres, c’est assez frustrant, parce que je fais très souvent des retours en arrière, des « undo ». Disons, peut être qu’avec le temps, si j’arrive à me faire aux touches, je me détacherai définitivement les yeux du clavier, et je reviendrai éditer cet article (sourire).

Attention, par rapport au prix : il faut savoir au moins une chose : ce clavier a la possibilité de faire du « full N key rollover ». Pour simplifier au maximum la chose, disons que si on tape plusieurs touches en même temps, comme c’est le cas pour beaucoup de jeux, le clavier sait toujours parfaitement gérer tout ça et vous n’aurez jamais plus le fameux problème du clavier qui « stoppe » en bipant. C’est ce genre de détails qui font toute la différence entre un clavier à 15 euros et un clavier à 150 euros. Euh… oui oui il vaut bien 150 euros.

Comment laisser un message directement sur un répondeur ?

Voici enfin la compilation géniale qui fonctionne, je l’ai testée sur les trois opérateurs :

  • Si la personne est chez Orange: 06 80 80 80 80
  • Si la personne est chez SFR: 06 1000 1000
  • Si la personne est chez Bouygues: 660 + n° de votre correspondant

A vous les méga excuses du genre « mais bon sang je ne fais que de t’appeler, bon tant pis, écoute, je pars sans toi, tu n’est pas joignable ».

Voici enfin la compilation géniale qui fonctionne, sans passer par le site repondeurdirect, qui est pour moi du vol.

vim howto : comment installer un plugin

J’ai vu cet exceptionnel exemple de plugin ici.
Petite parenthèse : regardez d’ailleurs le site vimcasts.org, c’est vraiment un site exceptionnel pour tous ceux qui veulent apprendre des astuces géniales de vim.

Donc, comment installer un plugin ? Moi, habitué de Windows © je me suis dit « ça doit être très compliqué, je vais chercher sur la toile ».
Mais… c’est tellement simple que j’avais beau chercher partout, je n’ai pas trouvé de réponse !
Voilà en pratique comment j’ai fait.
Le plugin génial que j’ai vu ici, se trouve là : https://github.com/godlygeek/tabular

Je vais donc à cette adresse :
Page Internet du plugin Tabularize

Je le télécharge, et voici les fichiers que je trouve dedans :
Fichiers dans le plugin Tabularize

Je me dis « bon sang comment l’installer dans vim ? ».
En pratique, rien de plus simple. Très souvent, dans votre répertoire « home » (auquel vous accédez en tapant le tilde en ligne de commande : ~), concernant vim, il y a un dossier caché qui commence par un point : « .vim » (n’oubliez pas le point au début).
Allez dans ce dossier et regardez s’il y a un sous-dossier plugin. S’il n’y en a pas, créez le. Moi qui suis sous Windows, et qui m’en éloigne de plus en plus jour après jour, j’ai installé cygwin et mon « home » est dans C:\cygwin\home\Olivier. Voilà ce que ça donne après avoir crée le bon dossier :
Fichiers dans le plugin Tabularize
Ensuite il vous suffit de copier simplement les dossiers du plugin dans le répertoire « ~/.vim/plugin » et… tout fonctionne (dans mon cas c’est donc C:\cygwin\home\Olivier\.vim\plugin) !
Copier les fichiers du plugin Tabularize dans le répertoire plugin de vim

Si vous avez des suggestions n’hésitez pas !