mardi 28 octobre 2014

première version alpha de Blood and Blades



Eh non, ce ne sera pas encore aujourd'hui je vais vous parler de Blood and Blades ! C'est une règle de jeu d'histoire avec figurines de mon invention. Je me dois d'avouer tout de suite qu'elle doit beaucoup à DBM, DBMM et Armati, tout en visant une bataille de la taille et de la durée d'une partie d'ADG. Elle est en anglais pour ne pas rester franco-française. Mais surtout elle est sous licence libre CC-BY-SA tout en utilisant les listes d'armée DBMM ou DBM.

Voici la règle Blood and Blades sous forme d'un wiki. Enregistrez la cible de ce lien comme un fichier html et ouvrez-le.  Il faut autoriser le javascript pour pouvoir lire la règle. Je sais devoir entreprendre la réalisation d'une version PDF.

Tout retour est le bienvenu, sur le fond comme sur la forme. N'hésitez pas ! Et merci d'avance pour toute aide qui me parviendra !

(crédit photo «cutter & blood» par gaelx http://www.flickr.com/photos/7574080@N08/3236415581 CC-BY-SA)

mise à jour du 10/04/2013 : j'ai mis une version avec quelques changements que j'avais oublié de faire hier : escape --> flee et cluster --> group notamment.

mise à jour du 28/10/2014 <: le lien sur la règle a été changé pour une version plus récente. Et voici les liens pour la version epub (avec graphismes vectoriels SVG) et la version pdf A4.

configuation Apache avec VirtualHost

Il va s'agir ici d'indiquer comment configurer Apache pour avoir plusieurs serveurs virtuels sur la même machine. C'est encore un exposé de plus, mais il expose ma façon de faire pour que je ne l'oublie plus et n'aie plus à potasser la doc de référence d'Apache pendant une demi-journée...

Cette configuration concerne Apache 2.4 ! Essayer une config Apache 2.0 ou 2.2 sur une Apache 2.4 mène le plus souvent à une erreur 403 (droits d'accès insuffiants -- parce que la syntaxe afférente a changé).

Le système hôte est une debian ou un dérivé comme Ubuntu ou Linux Mint.

Pour créer le serveur appli.chez.moi sur son serveur personnel il faut déjà permettre la résolution du nom appli.chez.moi et si on n'a pas de dns on va insérer dans /etc/hosts la ligne suivante (avec une tabulation avant l'adressi ip) :

appli.chez.moi 127.0.0.1

On peut mettre sa vraie adresse ip à la place de 127.0.0.1 si on veut mais ça ne change rien. Cela suffit pour être accessiblle à une machine externe à la condition qu'elle-même puisse modifier pareillement son fichier hosts, avec la vraie adresse ip de votre serveur toutefois (ce n'est pas possible sans avoir les droits administrateur sur la machine externe). Pour windows xp, il s'agit du fichier C:\WINDOWS\system32\drivers\etc\hosts qui a la même syntaxe que sous linux.

Il faut maintenant créer le fichier /etc/apache2/sites-available/appli (on peut aussi le nommer appli.chez.moi et on peut ajouter une extension .conf). Recopiez y le contenu ci-dessous.

<VirtualHost *:80>
  ServerName appli.chez.moi
  DocumentRoot /mnt/servers/appli
  DirectoryIndex index.php
  <Directory />
    Options none
    AllowOverride None
    Require all denied
  </Directory>
  <Directory /mnt/servers/appli>
    Require all granted
  </Directory>
  ErrorLog /var/log/apache2/appli_error.log
  LogLevel warn
  CustomLog /var/log/apache2/appli_access.log combined
</VirtualHost>

Cette config est pour un serveur php basique sans framework. Avec un framework, il faut pointer sur un sous répertoire et le fichier par défaut n'est en général toujours index.ph«/code>p aussi voyez ci-après ce que cela donnerait si, par exemple, appli.chez.moi était développée avec symphony 2.4.

<VirtualHost *:80>
  ServerName appli.chez.moi
  DocumentRoot /mnt/servers/appli/web
  DirectoryIndex app_dev.php
  <Directory />
    Options none
    AllowOverride None
    Require all denied
  </Directory>
  <Directory /mnt/servers/appli/web>
    Require all granted
  </Directory>
  ErrorLog /var/log/apache2/appli_error.log
  LogLevel warn
  CustomLog /var/log/apache2/appli_access.log combined
</VirtualHost>

Et voici le même exemple avec CodeIgniter mais en plus une gestion avec subversion (on veut lancer la version du trunk qui est dans /mnt/servers/appli/trunk).

<VirtualHost *:80>
  ServerName appli.chez.moi
  DocumentRoot /mnt/servers/appli/trunk/web
  DirectoryIndex index.php
  <Directory />
    Options none
    AllowOverride None
    Require all denied
  </Directory>
  <Directory /mnt/servers/appli/trunk/web>
    Require all granted
  </Directory>
  ErrorLog /var/log/apache2/appli_error.log
  LogLevel warn
  CustomLog /var/log/apache2/appli_access.log combined
</VirtualHost>

Bon, ces fichiers interdisent l'emploi de fichiers .htacess. On peut changer cela en ajoutant une ligne

AllowOverride all
dans <Directory /mnt/servers/appli/trunk/web> (ou quelque chose de moins ouvert que all).

Ces configurations interdisent l'emploi de liens symboliques. Je n'ai pas réussi à avoir une configuration comme il est recommandé d'en avoir avec des liens symboliques. Bon, en fait, je me suis rendu compte que je pouvais m'en passer, alors je m'en passe. Et d'autant mieux que c'est ce qu'Apache recommande.

Pour que le site soit disponible il faut maintenant lancer la commande

sudo a2ensite appli
(ou appli.chez.moi le cas échéant). Et enfin relancer apache :
sudo service apache2 restart
et alors on pourra voir sa page d'accueil en visitant la page http://appli.chez.moi avec son navigateur.

mardi 30 septembre 2014

une stratégie pour git

Comme je viens de créer mon projet TiddlyBook sur github, je me dois d'apprendre les bases de git et de ses bonnes pratiques. Vaste programme !

Je tombe heureusement sur un exposé en anglais qui indique clairement une manière efficace et simple, mais nullement simplifiée, d'utiliser git dans la vraie vie, aussi bien en entreprise qu'en projets personnels. Elle est là : a successfull git branching model.

L'intérêt de ce document, est aussi de donner clairement les commandes à exécuter. Il n'y a qu'un détail qui n'est pas donné, hélas, c'est où exécuter ces commandes dans l'arborescence. Sans doute car cela a paru trop trivial à l'auteur. Je mettrais à jour ce billet quand j'aurai élucidé ce point.

lundi 29 septembre 2014

création du projet TiddlyBook

Ça y est, je viens de créer le projet tiddlybook sur github.com. J'y ai mis une version utilisable de mon outil pour générer, à partir d'un wiki tiddlywikitiddlywiki, un docbook et de là un ebook ou un pdf. Ça va me servir pour la publication de ma règle Blood and Blades.

Il va falloir que je trouve un hébergeur et un nom de domaine pour cette dernière.

mardi 29 octobre 2013

ficher ses dépenses

Le service en ligne LCL propose plusieurs années en arrière d'anciennes feuille de compte, mais uniquement sous format PDF. C'est assez ballot pour les exploiter avec un tableur ou une base de données.

Ces pdf ne passent guère qu'avec acrobat reader (acroread sous linux) et pdf_to_text ne peut pas les exploiter. Aussi vais-je ici décrire comment j'ai faitt pour les traduire en fichiers directement importable par LibreOffice (données brutes séaprées par des tabulations, pas d'en-tête de colonne).

obtention des pdf

Il faut passer par chromium car ça ne marche pas avec firefox

du pdf au jpeg

Utiliser OCRFeeder. Y importer une à une les pdf de l'année civile à exploiter. Sauver le fichier sous le nom 458-2012 (par exemple). (attention : ne pas faire d'OCR avec OCRFeeder !!!). On obtient le fichier 458-2012.ocrf qui est en fait une archive zip.

On l'exploite ainsi :

unzip -j 458-2012.ocrf images/*.jpg

du jpeg au texte brute

Il faut transformer le jpeg en pbm avec converter qui fait partie d'imagemagick.

for j in *.jpg;do echo $j;convert $j ${j%.jpg}.pbm; done

et maintenant on fait l'OCR (c'est très rapide avec ocrad) :

for j in *.pbm;do echo $j ; ocrad <$j >>458_2012.txt ; done

obtention du texte final (.unl)

charger 458_2012.txt dans vim et exécuter la commande deux-points suivant (: omis)

%s/^\(..\)\.\(..\) \(.*\) \(\d*\),\(\d*\)$/\1\/\2\/2012^I\3^I\4.\5/

(remplacer 2012 par l'année qui convient)

et sauver le fichier.

grep': grep "^..\." 458_2012.txt >458_2012.unl

Ouvrir 458_2012.unl dans LibrOffice avec tab comme séaparateur et pas de délimiteur. Il faut vérifier les colonnes des montants car les crédits sont pour l'instant au même niveau que les débits.


vendredi 19 avril 2013

le blues des hippos-gloutons

hippo-glouton en train de sortir sa tête
J'ai récemment acheté un jeu d'hippo-glouton dans un vide-grenier pour faire plaisir à mes enfants mais malheureusement il s'est avéré ne pas fonctionner une fois de retour à la maison.

Je n'avais plus qu'à essayer de voir si c'était réparable. La première chose est alors de savoir comment cela est censé marcher. C'est ce que nous allons voir ensemble.

L'hippo-glouton a un long cou au bout duquel sa grosse tête peut pivoter. Comme elle dépasse en bas, elle est obligée de pivoter en l'air si le cou est mis à plat sur le sol. Inversement, si le cou est en l'air, la tête plonge en bas.

Pour forcer la position haute ou basse du cou, ce dernier est muni d'un ergot allongé à droite et à gauche. Côté tête, l'ergot a un profil en biais avec la pointe en bas. Côté corps, le profil est inversé.

À la base de l'hippo-glouton et au niveau du trou du cou, la piste présente elle aussi un ergot de chaque côté. L'ergot du cou va se trouver tantôt en-dessous, tantôt au-dessus, forçant ainsi la position tantôt basse, tantôt haute du cou. Les mouvements de la tête sont ainsi contrôlés.

le levier et le ressort de l'hippo-gloutonÀ l'aller, lorsqu'on appuie sur la gâchette de l'hippo-glouton, le profil en biais conjugué avec la force exercée de haut en bas sur le cou par le levier vont amener l'ergot du cou à passer sous l'ergot de la piste. En terminant d'actionner le mécanisme, la forme en L du levier va pousser le cou hors du corps de l'animal. La tête est donc amenée au loin en position haute, lui permettant d'avaler une bille qui passerait par là.

hippo-glouton en pleine extension
Mais l'ergot du cou n'est pas si long qu'à l'extension maximale du cou, il n'est plus là pour reposer sur l'ergot de la piste. Le cou retombe alors d'un coup sur la piste et entraîne la fermeture brutale de la gueule, emprisonnant ainsi une éventuelle bille.


position haute lors du retour du cou





En relâchant le mécanisme, le ressort dans le corps de l'hippo-glouton va ramener le cou à sa position initiale, avec une force légèrement orientée de bas en haut. Couplée à la forme de l'ergot du cou côté corps, cela amène cet ergot à passer cette fois au-dessus de l'ergot de la piste. Le cou se rétracte donc en position basse et la tête en position basse, ce qui a pour effet de forcer une bille prisonnière à tomber dans la rigole située sous le cou. Quand le cou a fini de se rétracter, là encore l'ergot du cou n'est plus assez long et faute d'être porté, le cou retombe et la gueule s'entrouvre. On est de retour à la position initiale.


sous la piste

Retournons la piste : chaque animal tient par 4 ergots. On voit aussi le rail chargé de guider le cou, avec là encore deux ergots pour prévenir tout déraillage.

L'hippo-glouton s'enlève et se remet très facilement.


hippo-glouton de profil

vue ventrale de l'hippo-glouton


le cou et le corps séparés





Sous 3 des 4 hippos-gloutons, la piste n'avait plus aucun ergot, rendant ainsi ces bestioles incapables d'ouvrir la gueule et donc d'attraper la moindre bille !

Je me suis rapidement rendu à l'idée que c'était irréparable. À la poubelle le jeu cassé ! Il me reste ces images et cette vidéo comme souvenir. J'ai juste conservé les billes…

(crédit photo et vidéo : ma pomme. licence CC-BY-SA)
les deux ergots du cou vus de dessus

mercredi 17 avril 2013

non aux DRM dans html5



Je relaie ici le message et la pétition de l'EFF contre l'inclusion de DRM dans la norme html5 par le w3c :

http://www.defectivebydesign.org/no-drm-in-html5

Je l'ai signée.

(crédit photo : campagne EFF contre #hollyweb)