mercredi 31 décembre 2008

Fin de l'année (2/2)

Seconde partie du message de bilan de fin d'année, celui-ci consacré aux progrès enregistrés sur le front de la production figurinistique.

Figurines achetées cette année:
- un bon lot de Dirz neuf (env 15 figurines métal)
- un très bon lot de Dirz d'occasion (env 30 figurines métal)
- la boîte de base HE de GW (+ de 35 figurines plastique)

Objectifs de l'année:
- monter deux nouvelles factions pour Hard Klash Fantasy
- tester les règles et y apporter des modifications

Réalisations effectives:
- les WIP des morts-vivants sont terminés à 50%. Il reste le Cerbère (à re-sous-coucher) et le Wolfen Zombi (à peindre)
- Le Fossoyeur est opérationnel et a connu le baptême du feu (yesssssss!)
- Le coeur de l'Unité des Vétérans Alchimiques est terminé à 80% (photos provenant du Futur à paraître bientôt dans un WIP spécial)
- Le Corps d'Armée des Eldaryms (sorte de tafioles à longues zoreilles) prend forme. 4 archers assemblés/soclés + 1 meneur, 6 lanciers assemblés/soclés, 1 balliste. J'espère que la toute fin de 2008 verra le chantre de guerre et le garde impérial assemblés/soclés (d'ailleurs je pense m'y mettre dans pas longtemps)
- plus de 4 playtests de HKF pour découvrir la richesse du WarEngine et voir comment y adapter certains concepts sympas de Conf' et de WHB.
- Des profils pour 6 factions (undead, Nains, Orks, Wolfens, Dirz, Elfes) dont 3 ont été jouées (undead, Orks et Nains)
- La correction de la version initiale de HKF avec les ajouts.

L'année 2009 devrait démarrer sous les bons auspices de Mars et de Minerve puisque des parties sont prévues demain ! Et une séance de peinture familiale Samedi prochain ! A l'année prochaine et bon réveillon.

Fin de l'année (1/2)


Je viens de m'apercevoir que je n'avais pas mis à jour le journal depuis la fin du mois de Novembre. Et pourtant, j'ai fait quelques trucs en Décembre...

Je passe sur les diverses expériences cinématographiques qui m'ont laissé un goût d'insatisfaction prononcé (Hellboy II, Quantum of Sollace).

Au chapitre BD, la fin de l'année a été aussi celle des cycles avec en vrac :

La fin de cycle de Lanfeust des Etoiles, un dernier opus qui clôt la série de manière moyenne. C'est toujours plus ou moins drôle même si ça commence à sentir le réchauffé question blagues à deux balles et jeux de mots vaseux. Quelques bonnes scènes marrantes quand même (attention ! spoilers) : la fin de Thanos et les larmes d'Hébus.

La fin de la saison II du Chant des Stryges. Une fin inattendue pour un album qui m'a paru comme un monologue du principal méchant de l'histoire, Sandor G. Weltman dans le rôle de Mr. Plot Exposition. On apprend ce que sont la jolie et vénéneuse Debra et les deux petits vieux. (c'est ma journée spoilers, on dirait)

La fin des Chroniques de la Lune Noire. FMF signe ici un hommage à son père spirituel, E. Gary Gygax disparu cette année. Ca décoiffe moins que les précédents mais ça prend aux tripes. On reste quand même sur sa faim.

Au chapitre des lectures que certains qualifieraient de plus sérieuses, j'ai pas lu beaucoup de choses et surtout peu de choses nouvelles. Je note dans mes bonnes résolutions de 2009. Lire plus de choses sérieuses. Se relire L'Aube de la Nuit. Finir de lire Le Trône de Fer. Ne plus acheter de livres de Jean-Christophe Grangé ni de Maxime Chattam.

On finit par la musique de la fin 2008.

Death Magnetic (Metallica) a été la bonne surprise. Pierre a réussi (bien involontairement) à exciter ma curiosité et je me suis remis à écouter ce bon vieux groupe. Les cinq premières pistes de l'album sont d'une assez bonne veine, le reste a tendance à être assez répétitif. Pour me consoler, j'ai acheté le S&M et ré-écouté le Black et ...Justice For All.

J'avais arrêté d'écouter Nightwish après l'album Wishmaster. J'ai voulu voir ce que donnait le changement de chanteuse et j'ai écouté leur dernier album, Dark Passion Play. 13 pistes, un bon tiers de bonnes chansons. Un instrumental bien inspiré (11) à la suite d'une ballade sympa (10). le single Amaranth (3) qui se laisse écouter. Un long morceau d'introduction dans la veine Nightwish et quelques titres bien balancés (4 et 5). Rendez-vous l'année prochaine pour le concert.

Fin du premier message. A plus tard pour la suite consacré au bilan figurinistique de 2008.

dimanche 30 novembre 2008

Des photos de figurines

Ca y est ! J'ai enfin commencer à maîtriser le mini pied photo et le mode macro du Samsung S850. Je peux donc poster les photos de mes WIP. Et on commence par le lot de figurines Dirz acheté sur Le Bon Coin la semaine dernière.Donc, avant qu'elles ne finissent dans la trempette pour le décapage de rigueur, voici les prises de mes dernières acquisitions.







mercredi 22 octobre 2008

Une règle maison pour WarEngine : La mise en alerte

Une nouvelle règle pour WarEngine pour simuler des effets tactiques plus intéressants comme les tirs de couverture ou les tirs de barrage.

la mise en alerte est un nouveau type d'action qui fonctionne comme une action de mise en réserve d'arme (elle termine le tour d'activation d'une figurine et les mêmes traits s'y appliquent)
La différence est qu'une unité en alerte peut utiliser son attaque réservée pour attaquer une unité adverse en train d'être activée et non plus simplement l'unité qui l'attaque.

Mettre en alerte une figurine
Une figurine peut être mise en alerte si les conditions de la liste suivante sont respectées:
  • la figurine doit être en cours d'activation (action)
  • la figurine doit être contrôlée ou être le meneur de son unité ou être une figurine indépendante (solo, perso, monstre ou véhicule)
  • la figurine doit disposer d'une attaque à distance ou d'un pouvoir spécial non utilisé

Le contrôleur de la figurine annonce la mise en alerte de la figurine. Ceci termine automatiquement le tour d'activation de la figurine.
Une figurine en alerte peut utiliser son arme mise en réserve pour soutenir une attaque faites par d'autres membres de son unité.

Dans ces circonstances, dès que l'attaque soutenue est résolue, la figurine n'est plus considérée comme mise en alerte sauf
si elle dispose d'autres armes en réserve
ET qu'elle possède le trait Science de l'Embuscade
ET qu'elle ne s'est pas déplacée pendant son dernier tour d'activation.

Faire réagir une figurine en alerte
Une figurine en alerte peut réagir aux événements suivants:
  • une unité alliée se fait attaquer (tir de barrage)
  • une unité alliée attaque (tir de couverture)

Bien entendu, une figurine en alerte peut aussi utiliser son attaque réservée si la figurine ou son unité se fait attaquer.

Avant de résoudre l'attaque réservée d'une figurine mise en alerte, la figurine ou le meneur de son unité doit effectuer un test de MNT de difficulté 10.
Les effets du trait Commandant en chef, du trait Chaîne de commandement ou du pouvoir spécial Lien Télépathique s'appliquent à ce test.

Si le test est réussi, la figurine peut réagir. En cas d'échec au test, la mise en alerte est perdue mais la figurine garde son attaque réservée.

Restrictions
Une figurine non contrôlée ne peut pas réagir dans le cadre d'une mise en alerte (sauf pour se défendre ou défendre son unité)
Une figurine qui possède le trait Stupide ou Lent ne peux pas être mise en alerte.

Exemple de tir de barrage
Une unité de Fusiliers nains a été mis en alerte au cours du tour. Les 5 fusiliers ont un coup de mousquet en réserve (portée 18'' force 2k2).
L'adversaire active son unité de Palefrois de la nuit pour attaquer une unité de Guerriers nains situés à 8'' devant leurs alliés fusiliers.

En réponse à cette activation, le joueur Nain décide de faire tirer ses fusiliers. Tous les fusiliers sont contrôlés. Le meneur effectue un test de MNT de difficulté 10. Il obtient un 15 avec 4k3, c'est donc réussi.
Les Nains tirent sur les palefrois en effectuant une attaque soutenue. Deux Palefrois subissent chacun une attaque de 3k3 (2k2 + 1k1 de soutien), un autre subit le tir de 3k3 du meneur.
les pertes sont résolues de lamanière habituelle. Les palefrois survivants peuvent continuer le tour d'activation et entrer en contact avec les Guerriers nains.

Exemple de tir de couverture
Un contingent eldarym a pour objectif un fortin orkk défendu par une catapulte gobbo et une unité de 3 orkks sauvages.
Le joueur eldarym dispose de deux unités, une unité de 3 guerriers mystiques du Lion et une unité de 5 archers.
S'il fait jouer ses archers maintenant pour tirer sur les orkks sauvages, il ne pourra pas se défendre face à une contre-charge des orkks.
De même, s'il fait charger ses guerriers mystiques, ils se trouveront face à une forte opposition.

Le joueur eldarym décide d'activer d'abord ses archers et de les mettre en alerte. Ainsi, si les orkks attaquent, les archers pourront leur opposer une riposte (attaque directe des orkks sur les archers) ou un tir de barrage (attaque des orkks contre les guerriers Lions).
Si les orkks ne font rien (ou si le joueur qui les contrôle décide de les activer plus tard), le joueur eldarym pourra, à son tour, activer ses guerriers Lions pour prendre le fortin d'assaut tout en accomplissant un tir de couverture avec ses archers mis en alerte.

Exemple d'offensive combinée
Une baliste à répétition eldaryme décime les rangs de Nitrosam le sorcier gobbo. A son tour d'activation, le sorcier décide d'agir puis se met en alerte et réserve son sort de Fumée (PS:Mur de ténèbres).
Au moment d'activer ses maraudeurs qui se trouvent à couvert devant la baliste prêts à l'attaquer, Nitrosam réagit à l'attaque de ses propres troupes et lance son sort juste devant la baliste avant que celle-ci ne puisse réagir (les pouvoirs spéciaux sont résolus avant les attaques régulières).
La baliste ne dispose plus de ligne de vue sur les maraudeurs qui l'assaillent, elle ne peut donc pas accomplir son attaque. Les maraudeurs arrivent au contact de la baliste juste derrière la barrière de fumée, taillent en pièces ses servants et s'emparent de la machine de guerre qui rejoindra bientôt les rangs de la troupe de Nitrosam.

samedi 18 octobre 2008

Anniversaire

Comme tous les ans vers fin Septembre-début Octobre, il faut s'armer d'inspiration afin de répondre à la question de proches angoissés (coucou Maman) : "Kesstuveu pour ton anniversaire ?".

Question à laquelle je réponds par un silence embarrassé ou par un haussement d'épaules. Jusqu'à maintenant.

J'en profite que j'ai un blog pour y lister mes souhaits cadeaux comme on peut le faire sur plusieurs sites de ventes en ligne. Comme ça, et d'une, je réponds franchement à la question posée, et de deux, je me rappelle de la réponse.

Mini Trépied photo (un exemple qui m'a l'air très bien)

Les téléfilms Babylon 5
  • Au commencement (In the Beginning) (1997) (sur Amazon)
  • La cinquième dimension (Thirdspace) (1998) (sur Amazon)
  • La rivière des âmes (The River of Souls) (1998) (sur Amazon)
  • L'appel aux armes (A Call to Arms) (1999) (sur Amazon)

Le DVD de la peinture sur figurines par Jerems (sur le site de l'éditeur)

Le Grand Livre de la peinture sur figurines (sur Amazon)


mercredi 15 octobre 2008

Des résumés de messages avec Blogger

Je me suis fait dire à plusieurs reprises que mes messages étaient trop longs, que c'était difficile à lire, etc, etc.
Dans ma grande bonté, j'ai donc décidé de remédier à cela, non pas en devenant plus laconique (et puis quoi encore) mais en affichant qu'un résumé des messages.
Je farfouille dans l'aide de Blogger et je trouve excatement ce que je veux : create expandable post summaries. En fait j'avais déjà aperçu le truc dans d'autres blogs et c'était la solution qui me convenait.
J'essaye la manip et n'était un manchot total en HTML et tout le toutim, je m'arrange pour que ça ait l'air propre. Je teste et bam, ça ne fonctionne pas, je vois bien le petit lien Lire la suite ... mais mon message reste toujours aussi long. J'essaye plusieurs fois jusqu'à re-farfouiller un peu mieux (Google est vraiment mon ami) et tomber sur ça : hacking expandable post summaries with Blogger Beta et comme vous pouvez le constater, ça fonctionne.

mardi 14 octobre 2008

Hard Klash Fantasy, Rapport de Bataille #2

Tony avait choisi la difficulté pour notre deuxième partie de HKF.

Les troupes
Nains : 1800 pts
Morts-vivants : 2100 pts

Le pitch
Après avoir écouté le récit d'un survivant du clan Choppenbronze, Kaël chef du clan d'Ur-Nost décide de lever son ost et d'aller poursuivre les morts-vivants.
Ce qu'il ne sait pas c'est que la petite armée d'Aleghra s'est dispersée et que la Sorcière de Sang a rejoint sa nécropole, emportant le sombre artefact gagné sur les troupes de feu Hargrim Choppenbronze.
Le village désigné par le Nain rescapé de la précédente bataille est maintenant aux mains d'une escouade d'Ekryth, l'ennemie jurée d'Aleghra qui est, elle aussi, sur les traces de l'artefact.

Mission Raid
Durée illimitée
Règles spéciales :
Fuite (mouvement de déroute au lieu d'une élimination)
Retraite (possibilité de mettre du mouvement en réserve)
Nuit (ligne de vues limitées au MVT des figurines)
Renforts (uniquement pour les morts-vivants)

Placement
L'objectif est une ruine située dans la moitié de table des morts-vivants.
Les Nains se déploient dans un coin de la table, les morts-vivants déploient 50% de leur effectif dans leur moitié de table.

Conditions de victoire
Les Nains gagnent s'ils réussissent à visiter l'objectif, c'est-à-dire à y laisser une figurine pendant un tour d'activation et à la ramener saine et sauve dans leur zone de déploiement.
Cette figurine peut entrer en contact avec une figurine alliée pour lui transmettre des informations. A ce moment, l'une ou l'autre des deux figurines peut être ramenée dans la zone de déploiement pour assurer la condition de victoire.
Les morts-vivants gagnent s'ils éliminent ou mettent en fuite la force adverse.

Forces en présence
Nains
Kaël d'Ur-Nost
1 unité de 3 Tueurs menés par un Chef Tueur
1 unité de 7 Rangers dont un meneur
1 unité de 7 Fusiliers dont un meneur et un Prêtre de Thor
1 unité de 8 Guerriers des Clans dont un meneur

Morts-vivants
Ekryth la Banshee Noire, équipée d'une baguette d'éclairs d'ombre
1 unité de 3 Ombres
1 unité de 5 Gardes-Crâne menés par un Fossoyeur
1 unité de 10 Servants d'Os menés par Az-Rhaban le Maudit
1 Spectre, équipé d'une Marque de la Nécropole (traits Coriace et Enchanté gratuits)

Déploiement
Tony déploie ses Nains dans un carré de 12''x12'' situé dans un coin de la table.
Je déploie Ekryth au sommet d'un fortin à l'autre bout de la table face aux Nains, sur le flanc droit.
Le Spectre est au milieu de la table, à couvert dans un décor, bloquant l'approche ennemie sur le flanc gauche.
L'unité de Gardes-Crâne investit l'objectif (un temple en ruine). Le reste de mes troupes est en réserve.

Tour 1
Ekryth lance Mur de Ténèbres sur le flanc gauche du dispositif Nain
Approche des Nains par leur flanc droit. Les Tueurs et les Rangers gravissent la colline qui occupe le centre de la table.
Le reste de la troupe naine contourne l'obstacle par la vallée que garde le Spectre.
Je déploie mon unité de servants d'os autour du temple.

Tour 2

Ekryth lance Mur de Ténèbres au pied de la colline.
Les Tueurs et les Rangers se mettent en position d'attaque à flanc de colline en face du Mur invoqué par la Banshee.
Les Rangers réservent leur attaque d'arbalète et se mettent en alerte. Tony positionne ses Tueurs quelques pas plus loin.
Je renforce mon dispositif en faisant mouvement avec mes servants d'os de part et d'autre du temple pour garder les flancs de l'objectif. Je crains une tentative de débordement des Tueurs de Tony.

Tour 3
Je fais descendre Ekryth de sa tour avec la ferme intention de lui faire faire la chèvre pour les Tueurs.
Le reste de mon dispositif ne bouge pas, en fait j'attends que les Nains chargent pour contre-attaquer.
Tony termine son positionnement, place ses fusiliers en relais au pied de la colline côté gauche, fait avancer son unité de guerriers, met les rangers en alerte et place les Tueurs en position de charge sur l'objectif au prochain tour.

Là, je me pose une question. Les rangers sont trop loins pour espérer faire un tir d'assaut avant la charge des Tueurs.
Je suis alors persuadé que Tony bluffe et qu'il attend que je sorte mes troupes de l'objectif pour les arroser avec ses rangers avant d'exploiter ça par une percée de ses Tueurs.

Tour 4
Tony avance ses guerriers sur l'autre flanc. Je décide de jouer Ekryth, l'avance en limite de ligne de vue des Tueurs et tire avec la baguette magique. Un éclair d'ombre frappe le premier tueur et l'envoie ad patres. Le coup (arme LI 2 cibles) atteint le deuxième tueur situé derrière et l'élimine aussi.
Tony met une autre unité en alerte et n'attaque pas.
Je pousse mon avantage en faisant sortir deux Gardes-crânes. Je les amène à portée d'arme longue (Allonge 2'') des Tueurs qui ne peuvent riposter. Mes squelettes subissent le tir réservé des rangers mais survivent grâce au trait Enchanté qui leur permet de faire une relance par partie, en l'occurrence, un jet de DEF.
L'attaque qui s'ensuit fait subir 2 touches sur chaque Tueur restant. Le chef survit et mes Gardes-crânes retournent se mettre à couvert dans le temple.
Tony active le chef survivant de l'unité de Tueurs et le déplace sur son flanc droit, près de mon spectre qui s'était replié au tour 2 face à l'avance de l'armée naine. C'est téléphoné.
Je réagis en activant mon Spectre. La voie est libre pour lui et, grâce à son mouvement de 21'' augmenté à 27'' grâce à Instillation d'Energie,je l'envoie au contact des Rangers qui n'ont plus d'attaque en réserve.
Le Spectre tue deux Nains avant de finir son mouvement de l'autre côté de la colline centrale, à quelques pas d'Ekryth.
Le reste du tour se passe sans autre événement majeur.

Tour 5
Le Tueur charge les gardes-crânes et en massacre deux. Le Spectre termine l'unité de Rangers aidé par Ekryth.
Kaël et ses Guerriers chargent ma ligne de défense composée des servants d'os et des gardes-crânes. Les guerriers éliminent 3 servants mais Tony voit quelques guerriers tomber.
Ma riposte intervient après. Az-Rhaban lance Esprit de Meute qu'il avait en réserve et les servants effectuent des attaques soutenues à +2k1 sur l'unité naine.
Cinq Nains tombent au champ d'honneur. Kaël tue un autre Gardes-crâne et se défend vaillament contre leurs ripostes.
J'en profite pour faire intervenir mes derniers renforts. Je déploie 3 Ombres sur mon flanc droit et les fait courir vers la colline que je contrôle alors.
Mon unité de servants d'os n'a pas encore été activée, j'annonce son activation, Az-Rhaban lance coup sur coup Force de Brute et Esprit de Meute et engage Kaël au corps-à-corps, accompagné par 3 servants d'os qui délaissent le flanc droit pour prendre le chef Nain à revers. Kaël est complètement encerclé et succombe logiquement aux assauts d'Az-Rhaban non sans avoir éclaté deux servants d'os d'un coup de bouclier.
Fin du tour, un Garde-crâne régénère (Increvable + Modelage de la Chair) et reprend sa place.

Tour 6
Les fusiliers de Tony tiennent un flanc de la colline et sont en alerte. L'essentiel de sa force d'assaut est éliminée (le Tueur survivant a succombé) et son Commandant en chef gît sur le champ de bataille.
Ekryth contourne la colline et tente de tuer le Prêtre de Thor qui résiste. Je me souviens trop tard que la Banshee pourrait jouer Dégénérescence avant afin de faire baisser la DEF de sa cible.
Mes Ombres investissent le sommet de la colline, prêtes à fondre sur les Fusiliers.
Je réorganise mes troupes dans le temple (Spectre, Gardes et Servants), celles-ci ne bougeront plus du reste de la partie qui se résumera à la survie héroïque des fusiliers face à Ekryth et aux Ombres.

Tour 7 et 8
Le meneur des Fusiliers tente le tout pour le tout et va chercher Ekryth au corps-à-corps. Le prêtre de Thor subit de plein fouet les effets de deux Dégénérescence qui font baisser sa DEF de 5k4 à 3k2.
Les Ombres chargent, subissent un tir de riposte (1 perte) et tuent 3 fusiliers. Le prêtre de Thor finit par succomber et le dernier Nain est retiré de la table.

Bilan
Nette victoire des morts-vivants suite à une erreur tactique des Nains et un environnement de combat très désavantageux pour Tony.
Il avait choisi un affrontement de nuit avec des lignes de vue limitées au MVT des figurines. Les Nains se déplacent à 6'' contre 9'' en moyenne pour un troupier classique. Il en a résulté une contre-performance de ses tireurs par manque de cibles valables.

De plus mes propres troupes étaient Furtives et Tony a loupé quelques jets de détection.

Tony a manqué de plus de troupes d'assaut, solides en DEF et qui tapent forts et plusieurs cibles. Trop de tireurs qui ont eu peu d'opportunités et des Tueurs qui ont été se faire massacrer (l'erreur tactique de les approcher à distance d'engagement de mes gardes).

L'idéal aurait été d'inclure dans la compo naine un solide canon d'assaut ou un Esprit de la Forge pour effectuer la percée décisive qui aurait permis à Tony de récupérer l'initiative tactique en me forçant à réagir.
Donc, décision prise de revoir certains profils Nains pour offrir à nos amis à longue barde et courtes pattes un peu plus de solutions face à ce type de scénario.
Des pouvoirs spéciaux pour plus de mobilité et de gestion des lignes de vues ont été évoqués mais, avec le recul, il me semble que des unités de choc feront plus l'affaire.

Idée de composition naine pour Tony:
Commandant en chef : un Héros solide en DEF avec des armes spéciales
Unité de percée : un Prêtre Nain avec Bouclier de la Foi, Stase, Invocation et une attaque incendiaire à distance, commandant une unité de 6 Marteaux. Le prêtre est capable d'invoquer un ou deux Esprits de la Forge. On peut imaginer que les Nains soient armés de hallebardes (allonge) au lieu des sempiternels marteaux et autres haches.
Unité d'exploitation : un Thane commandant une escouade de 10 guerriers Nains avec hache
Unité de poursuite : un Héros Berserker commandant une escouade de 3 Berserkers
Unité de soutien : 6 fusiliers plus un meneur Gunmage

Doctrine: sur un scénario de raid, le déploiement nain fait la part belle à l'unité de percée qui est à la pointe du dispositif.
Les fusiliers doivent garder un des deux flancs contre un débordement. Les Tueurs sont en réserve derrière les Marteaux prêts à pousser sur la percée.
Les guerriers nains viennent amener le surnombre sur l'objectif.

Dans le cas du scénario que l'on a joué, les Marteaux se seraient placés hors de portée d'engagement des gardes-crânes, soutenus par les fusiliers. Le prêtre invoque un Esprit de la forge et tire sur la première ligne adverse.
Si l'adversaire sort du couvert les fusiliers l'alignent, s'il charge pareil mais ne bénéficie plus du couvert et les marteaux l'alignent.

Au tour suivant, l'Esprit de la Forge attaque de front soutenu par la moitié des Marteaux, normalement le front adverse est entamé.

Les guerriers Nains exploitent la percée et occupent le terrain et les adversaires en les engageant au corp-à-corps. Si les troupes adverses n'ont pas Science de l'Escarmouche, elles resteront au contact assez longtemps pour que les Tueurs viennent finir le travail.

Comment gérer les unités pénibles des morts-vivants pour les Nains ?
Les gardes-crânes ont l'allonge, contre eux soit il faut avoir une allonge égale ou supérieure ou alors avoir le trait Vivacité pour agir avant. Pas de secret, il faut que les Marteaux soient équipés de hallebardes avec le trait Allonge.
Pris individuellement, les servants d'os sont des pious-pious mais en masse avec le sort Esprit de meute, c'est potentiellement 3 attaques soutenues à 8k5 soit une moyenne de 22 sur le tirage, il y a peu de troupes qui peuvent résister, donc il faut les frapper en premier et, si possible à distance.

Dans ce cas, un Gunmage et quelques fusiliers peuvent ravager les servants d'os en deux-temps trois mouvements.

Le Spectre est un cas, la meilleure mobilité (21'', Instillation d'Energie, Science de l'Escarmouche), Furtif, et 2 attaques dévastatrices à 4k4. Lors de cette partie, il a fait une fois l'aller-retour sur la largeur de la table en se payant une unité au complet au passage.

Un seul moyen pour le contrôler, l'empêcher de bouger (Stase dans la liste de sorts du Prêtre de Thor) et jouer avant lui au tour prochain. Engagé au contact par 3 piétons, avec une attaque soutenue, ses 4k4 en DEF ne lui serviront pas à grand chose.

Dans le but de personnaliser encore plus les Berserkers, on peut leur donner le pouvoir spécial Soif de Sang qui renforcera encore leur côté impulsif et leur manque d'instinct de conservation.

J'attends avec impatience la nouvelle liste de Tony et le prochain test-match. Bilan provisoire: MV (3), Nains (1)

D'ici là, je travaille sur les profils des Orcs et des Gobelins de Tony.

mercredi 24 septembre 2008

WarEngine, WIP #2

Ce soir je vais essayer de prendre des photos des figs traitées la semaine dernière (voir le WIP#1) et de les publier sur le blog.

Au programme ce soir, sélection des teintes pour les troupes et début de la peinture. L'objectif est de réaliser de la qualité tabletop, pas de gagner le Golden Demon.

Niveau inspi, je pense tirer pas mal de trucs du travail d'un artiste que j'adore, Brom. L'idée est de travailler sur un constraste clair-obscur avec des teintes très déssaturées. Je commencerai par les hallebardiers qui semblent les plus faciles à peindre (beaucoup de surfaces en applat, peu de détail).

Je vous tiens au courant de l'avancement des travaux.

Je suis en train de finir un Fossoyeur (Rackham) pour le prochain test-match avec Tony.




dimanche 21 septembre 2008

Hard Klash Fantasy, rapport de bataille #1

En ce dimanche ensoleillé, Tony et moi on avait prévu d'en venir aux mains par armées interposées.
C'était surtout un prétexte pour tester les règles de Hard Klash Fantasy, notre mod pour WarEngine.

Le pitch
Affrontement en 5 tours, 2300 points d'armée.
Aleghra, la Sorcière de Sang est sur la piste d'un ancien et puissant artefact qui pourrait lui donner la suprématie dans sa lutte pour le contrôle des territoires d'HardKlash.
Ayant localisé l'artefact dans les steppes de Stonewheary, elle s'y dirige à la tête d'une petite force armée.
Ce qu'elle ne sait pas c'est que le clan nain d'Hargrim Choppenbronze garde le site depuis des temps immémoriaux.

Armée de Somogh (morts-vivants)
Aleghra, équipée de l'Orbe des Sombres Oracles
1 Seigneur-Crâne
Az-Rabhan et son Linceul de Sang commandant une escouade de 5 Gardes-Crânes d'élite
1 Gardien des Ténèbres
1 Fiancée du Désespoir commandant une unité de 10 Servants d'Os dont 5 tirailleurs armés de javelot et 5 guerriers armées de haches lourdes

Armée du Clan Choppenbronze (nains)
Hargrim Choppenbronze
1 Canon-Flamme
1 Prêtre de Thor
1 Berserker d'Odin
1 Tueur de Trolls commandant une unité de 5 Marteaux de Thor dont un meneur
1 unité de 10 Guerriers Nains dont un meneur

Placement
les Nains prennent position dans et autour du fortin situé au centre du champ de bataille.
Le Canon-Flamme tient le fort, les Marteaux bloquent sa base, les Guerriers verrouillent l'autre côté tandis qu'Hargrim, le Berserker et le Prêtre se tiennent au centre du dispositif protégés par le couvert épais que procurent les murs du fortin.

Aleghra dispose ses troupes d'un seul côté, à bonne distance des Nains, tentant le flanc refusé.
Protégée derrière le Seigneur-Crâne, la sorcière ordonne à la Fiancée du Désespoir d'investir le bois à droite du champ de bataille tandis qu'Az-Rabhan verrouillera le flanc droit.
Le Gardien des Ténèbres décide de soutenir l'unité de la Fiancée.

Tour 1
Les Nains gagnent l'initiative. Tony décide de faire tirer son Canon qui prend pour cible le Seigneur Crâne.
Malgré ses 5 points d'Héroïsme celui-ci succombe. Belle erreur de placement de ma part, mais je savais que le Seigneur allait être la cible des tirs de Tony qui ne veut pas le voir arriver au corps-à-corps.
La mine déconfite mais espérant secrètement voir le Seigneur se relever grâce à son trait Increvable, j'active Aleghra qui ne veut pas laisser cet affront impuni.
Invoquant la puissance des Enfers, la Sorcière déclenche coup sur coup deux Feux Infernaux sur les guerriers Nains qui lui font face. Bilan: 3 morts et Aleghra s'en va se cacher derrière un menhir.

Tony riposte par un regroupement de ses guerriers et par la venue du Tueur de Troll en soutien.
J'en profite pour avancer mon Gardien qui élimine un guerrier par une Spirale de Mort avant de se replacer à couvert.
Hargrim sous la férule de Tony commande aux Marteaux de faire barrage sur le flanc droit aux Gardes-Crâne qui s'avancent, menaçants.
J'en profite pour activer la Fiancée et ses séides qui se mettent en position de charger le flanc gauche du dispositif nain au prochain tour.
Tony comprend la manoeuvre mais anticipe trop. Il avance Hargrim et son Berserker hors du couvert du fortin et envoie ce dernier charger mes servants dont deux tombent.

J'active à mon tour mes Gardes-Crâne menés par Az-Rabhan le Maudit, prêts à charger le flanc droit de Tony au prochain tour.
Tony termine le tour par se demander quoi faire de son prêtre...
On supprime les pertes. Je lance un dé pour le Seigneur-Crâne qui se relève et, d'une voix sépulcrale, maudit les Nains.

Je termine le tour en activant l'Orbe des Sombres Oracles. Les Noires Puissances sont avec Aleghra, elle entrevoit le destin et bénéficiera donc de l'initiative au prochain tour.

Tour 2
Je gagne l'initiative. L'Orbe me permet dans ce cas d'activer simultanément deux unités. Je décide d'activer le Seigneur et l'unité de servants.
Les servants se ruent à l'assaut d'Hargrim et le cernent. Bénéficiant d'une chance insolente (pour une fois), je parviens à tuer le héros Nain qui s'effondre en promettant de se venger.
Dans la bataille, ma fidèle Fiancée du Désespoir a perdu la grâce de la Non-Vie et gît sur le sol, démembrée par la hache du vaillant Choppenbronze.

Le reste de l'unité parvient à se défaire du Berserker et se regroupe du mieux qu'il peut.

Le Seigneur, quant à lui, fait le ménage et d'un grand coup de sa Lame de Carnage, envoie trois Nains au Walhalla et place son attaque de griffes en réserve.

Tony tente le tout pour le tour et regroupe ses Marteaux dans le fortin pour soutenir l'assaut des Deux-Fois-Nés.

Mes Gardes-Crâne, boostés par l'Esprit de Meute et la Force de Brute de leur leader, chargent les Nains, détruisent le Canon-Flamme et un Marteau.

Tony a encore oublié de faire agir son prêtre en début de tour et décide de lui faire réserver une attaque.

Aleghra tente encore une fois d'obtenir les faveurs des Obscurs mais l'Orbe reste muette.

Tour 3
Le Seigneur se débarrasse des derniers Nains qui lui barraient la route. Le Tueur de Trolls et un guerrier retournent à la terre.
L'immense carcasse chuintante s'avance du vaillant capitaine des Marteaux et le piétine férocement, fin du tour du Seigneur.

Les Marteaux tentent le baroud d'honneur et se ruent à la charge des servants d'os qui les assiègent sur leur flanc gauche.
Les Nains broient les squelettes mais sont consumés par les feux infernaux d'Aleghra dans la seconde qui suit.
Le Prêtre est le seul survivant du valeureux clan Nain et il se prépare à se présenter devant Odin.
Il est bientôt cerné par Az-Rabhan et ses séides. Le Prêtre ferme les yeux, empoigne son marteau et, après une courte prière à Thor, se rue sur Az-Rhaban qui l'empale sur sa lame en ricanant.

Bilan
Annihilation totale des défenseurs Nains. Aleghra savoure sa victoire et ses pertes minimes (5 servants d'os et la Fiancée).
Toute à son triomphe, la Sorcière n'avait pas prêté attention à la petite silhouette qui s'éloignait dans l'aube naissante. Le sonneur du clan Choppenbronze avait survécu et s'en allait prévenir ses frères Nains que la menace de l'Ombre s'étendait...

Question jeu, les forces de Tony ont été handicapées par un manque de tireurs et la lenteur du Canon-Flamme. Le prêtre d'Odin aurait pu, par un usage avisé de Bouclier Psychique, protéger le Tueur, le Berserker ou Hargrim des assauts des morts-vivants.
Mes forces ont fait leur boulot même si Increvable en a été pour beaucoup dans la victoire finale, me permettant de conserver un surnombre intéressant.
Increvable n'a pourtant pas été décisif. Rétrospectivement, les Gardes-Crâne, correctement épaulés par les sorts de leur meneur (Force de brute +2k2 en attaque et Esprit de Meute, +2k1 d'attaque soutenue) ont fait beaucoup plus, éliminant le Canon-Flamme et deux Marteaux.
Le fait de bénéficier d'une arme à allonge est un plus tactique indéniable, mes Gardes-Crânes ne se sont jamais fait engager au corps-à-corps sans avoir une chance de riposter d'abord.

mercredi 17 septembre 2008

Batman, The Dark Knight


Fiche Technique : Film de Christopher Nolan avec Christian Bale, Michael Caine, Heath Ledger, Morgan Freeman, Aaron Eckhart et Maggie Gyllenhaal - USA - 2h30 - Musique de Hans Zimmer

Le film est sorti en Juillet et j'ai attendu Septembre pour aller le voir alors, oui, beaucoup de choses ont déjà été écrites sur The Dark Knight et pas des moindres. Je ne vais même pas essayer d'être original.

Les mêmes décors que le premier opus du même Nolan, une Gotham City ensoleillée, aux tours de verres fières et brillantes. Voilà pour la face visible. Pour la face cachée, les bas-fonds humides et suintant l'angoisse avec la pègre qui étend son influence sur toute la ville.

Cette fois ci, justement, la pègre est représentée par, d'un côté, une coterie de barons qui craint pour son argent menacé de saisie bancaire par les services de police dirigés par le tout nouveau procureur,Harvey Dent (Aaron Eckhart) secondé par Rachel Dawes (cette fois jouée par Maggie Gyllenhaal) et, de l'autre côté, par le Joker dont la venue était annoncée à la fin du premier film.

L'intrigue est multiple. Un, le Joker veut la peau de Batman et réussit à unifier les barons de la pègre autour de lui par la menace et l'extorsion. La scène du braquage en ouverture du film est assez saisissante de ce point de vue là. Deux, Rachel est amoureuse de Dent, Batman/Wayne est amoureux de Rachel. Trois, Dent part en croisade contre le crime et ne veut pas que la collaboration larvée entre la police et Batman continue.

Les trois intrigues vont se croiser et se recroiser jusqu'au dénouement final. Le Joker séquestre Rachel et Dent et menace de les immoler. Il communique à Batman au dernier moment leurs lieux de détention mais trompe Batman qui, croyant sauver Rachel, se porte en fait au secours de Dent. Bilan, Rachel meurt (Gordon arrive trop tard) et Dent se retrouve atrocement brûlé sur la moitié gauche de son visage.

Le Joker persuade Dent de se venger de Batman et des flics pourris qui selon lui sont responsables de lamort de Rachel. Dent le Croisé de la lutte contre le crime devient Harvey Two-Faces, vengeur paranoïaque qui laisse un sillage de meurtres derrière lui.

La confrontation finale verra la mort accidentelle de Dent et le renoncement de Batman qui, contre l'avis de Gordon, endosse la responsabilité des meurtres commis par Dent.

L'intrigue que je vien de résumer très imparfaitement fonctionne très bien, chose rare dans un film de super-héros où, classiquement, les choses sont plutôt vues de manière très manichéenne. Pas dans The Dark Knight qui est plutôt un thriller mettant en scène un justicier d'un type particulier, un anti-héros qui doute de ses propres motivations et qui finit par prendre son rôle comme une charge à assumer bon gré mal gré.

L'avis 100% subjectif de Sandchaser: une très bonne suite (c'est rare), servie par d'excellents acteurs. La critique et les spectateurs ont acclamé le regretté Heath Ledger qui campe un Joker effrayant et glauque mais il ne faut pas oublier Aaron Eckhart qui est très convaicant dans ses deux rôles de procureur incorruptible et de vengeur paranoïaque. Mention spéciale aussi aux seconds rôles, les deux consciences de Bruce Wayne/Batman, Michael Caine, toujours très digne en Alfred et Morgan Freeman, en Lucius Fox, pourvoyeur en technologie imaginaire et en conseils sybillins.

jeudi 11 septembre 2008

Cold Play à Bercy

10 Septembre, départ direction le POPB pour le second concert parisien de Cold Play. En prévision des manoeuvres dans les parkings souterrains de la capitale, on avait décidé de partir avec la petite voiture (Modus 1.2) et il faut dire que sur l'autoroute, ça faisait du bruit pour pas grand chose.
Dans notre hâte, on avait en plus oublié les albums du groupe pour se mettre dans l'ambiance du concert.
"Pas grave" me dit Armelle (Armelle c'est ma femme). "De toutes façons, j'ai des coups de fil du boulot à donner". Et ce fut parti pour 1h30 de gestion de crise au téléphone en français et en VO anglaise sous-titrée. Ma belle-soeur et moi, on a eu vite fait de détourner la situation en une parodie de 24h avec Armelle dans le rôle de Jack Bauer. Enfin bref (les apartés me perdront)
Arrivés sur Paris après avoir goûté les joies du BP aux heures de pointe, nous nous engouffrons dans le parking souterrain de la Cour St Emilion et nous resortons dans le quartier quasiment en face de la bouche de métro de la 14. (petit aparté encore : pour se garer, ce parking est très pratique).
On débouche sur le parvis du PO au sein d'une foule compacte mais tranquille. Ca change des concerts de Metal, le public n'est pas forcément le même (oui, ici, les gens ont une cause à défendre)
On entre. Là, les filles font une pause technique, prétexte fallacieux pour me laisser me dépatouiller seul avec une vendeuse de bouchons d'oreille qui me proposait de me racketter gentiment de 5 billes pour des bouchons qu'on trouve à 1,50 sur le catalogue de n'importe quel fournisseur d'équipement de sécurité. Non merci et puis pour Cold Play, je pense que je pouvais m'en passer, c'est pas Manowar non plus.
J'envoie bouler la vendeuse poliment, les filles sortent enfin des toilettes et on se dirige vers nos places (numérotées).
De là où on est, on aperçoit bien la scène faut dire avec une vue plongeante sur les fûts du batteur. Le problème, c'est que ma belle-soeur et moi, on passera pas mal de temps à demander gentiment aux gens qui se trouvaient debout sur la plateforme pour voir leurs idoles de plus près de se pousser un peu siouplé pour qu'on puisse voir nous zossi.
La première partie était assurée par un groupe de brit-pop assez poussif, du sous-Simple Minds archi-entendu. Heureusement qu'on était en retard, ça nous a permis d'échapper à un plus long ennui.
Enfin, les lumières s'éteignent, les techniciens grimpent dans les postes de poursuite, les roadies amènent le matos, tout se rallume pour Chris et ses trois potes.
Le concert commence par Life In Technicolor et se poursuit sur la première heure par les morceaux les plus rythmés du dernier LP dont l'excellent Violet Hill.
Par rapport au précédent concert parisien de 2005, on sent ColdPlay plus à l'aise sur scène et surtout Chris Martin qui se lâche et semble bien en phase avec son public.
Techniquement aussi le spectacle est plus abouti. Mention spéciale aux éclairages et aux effets spéciaux sous forme d'immense boules lumineuse retro-éclairées dont l'effet gentiment psychédélique colle bien à la musique du live.
Le quatuor nous gratifia aussi de quelques perles et surprises Des reprises électro des titres phares de l'album XY, une version dans le public de Lost et un titre chanté de manière inédite par le batteur Will Champion.
Pour les reprises des titres de XY, le groupe s'était aménagé une microscène de 5 mètres carrés qui s'avançait dans la fosse.
Le concert prenait fin dans le délire du public, Chris allongé sur la scène. Pas moins de quatre titres enchaînés après un rappel d'une dizaines de minute rythmés par une version instrumentale remixée de Viva la Vida.
La setlist du concert :
1. Life In Technicolor
2. Violet Hill
3. Clocks
4. In My Place
5. Speed Of Sound
6. Cemeteries Of London
7. Chinese Sleep Chant
8. 42
9. Fix You
10. Strawberry Swing
11. God Put A Smile On Your Face
12. Talk
13. The Hardest Part
14. Postcards From Far Away
15. Viva La Vida
16. Lost
17. The Scientist
18. Death Will Never Conquer
19. Viva la Vida remix
20. Politik
21. Lovers In Japan
22. Death And All His Friends
23. Yellow

Impressions: du bon live avec un groupe qui a appris à jouer avec la scène et le public. On sent Chris Martin plus libéré maintenant. Niveau musique, c'est tip-top avec finalement plus d'énergie qu'on pourrait s'attendre d'un groupe qui fait de la pop-wave. En résumé un très bon moment, l'album étant déjà très bien, le concert est étonnant.


mardi 9 septembre 2008

WarEngine, WIP #1

Hier soir, ai continué l'assemblage de l'unité d'archers avec l'ébarbage des 3 figs restantes. Ai décidé de laisser tomber l'archer avec le bras trop court pour l'instant.
Ai ébarbé et assemblé les 3 arbalétriers.
Je projette de continuer ébarbage et assemblage des hallebardiers. Ce qui est fait n'est plus à faire !
Je dois trouver des socles ronds et vérifier que j'ai assez de bouchons pour servir de support.
Je vais profiter des derniers beaux jours pour sous-coucher les figs au spray en extérieur ce week-end.

Objectif: les troupiers des deux unités montés sur support à peindre et sous-couchés dimanche soir soit 12 figurines.
EDIT : Objectif atteint vendredi dernier (le 18 Septembre)



La semaine d'après, je reprends la peinture pour essayer de vider la file d'attente (3 lanciers squelettes, 1 zombi garou, 1 cerbère et 1 zombi caretaker)
EDIT : 2 lanciers sont terminés et sont venus grossir les rangs des Gardes-Crâne de Somogh






Je dois aussi mettre au propre les profils que j'ai imaginé pour ces troupes et démarrer le portail Hard Klash Fantasy sur le wiki WarEngine.


lundi 8 septembre 2008

Démonologie Informatique 2/2

Il s'est passé quelques semaines depuis le dernier billet sur le sujet, veuillez m'en excuser. J'étais en vacances, sans Internet et avec quelques autres petites choses à faire.

On en était resté à ce qui distingue les langages informatiques entre eux par rapport au fait de déclarer le type des variables. Pour celles et ceusses qui ont la mémoire qui flanche et que le sujet intéresserait, allez .

Je pensais écrire la seconde partie du billet dans la même veine que la première quand un commentaire d'un lecteur m'a fait réagir. Ce commentaire dit en substance : "Comment gérer des structures de données complexes avec un langage dynamique ?"

D'abord, qu'est-ce qu'on entend par structure de données complexe ?
Et d'abord, ce quoi une structure de données ?

En informatique, l'un des problèmes de base qu'un concepteur a à résoudre est celui de la représentation des données. Tout le monde a une idée assez précise de ce que c'est qu'un nombre entier (il en existe même quelques définitions mathématiques assez formelles) mais comment le représente t'on ?

Pour un humain standard et normal (ni informaticien, ni mathématicien), la question ne se pose pas, il écrit le nombre entier avec des chiffres décimaux, c'est ce qu'on appelle la représentation positionnelle en base décimale d'un nombre.
La représentation décimale est tellement courante que l'on est arrivé à confondre l'essence d'un nombre et sa représentation. Mais ces deux notions sont distinctes.

Prenons par exemple l'entier N représenté communément par l'écriture décimale suivante : 10.
N peut aussi s'écrire 5 x 2 ou comme la somme des 4 premiers entiers naturels non nuls : 1+2+3+4. A chaque fois, on parle du même nombre, du même être mais sous des représentations différentes. On peut aller encore plus loin en disant que ce nombre entier N est unique mais qu'il lui est associé une infinité de représentations (ça se démontre facilement en disant qu'un entier N peut être représenté dans toute base de numération p où p est un entier, comme il existe une infinité d'entiers p, N peut être représenté d'une infinité de façons)

Quel rapport avec notre choucroute de structure de données ? Et bien, le voilà : une structure de données est la représentation d'un type.

Dans notre exemple avec l'entier, 10 est une structure de données qui représente de manière numérique le nombre en question de type entier. Le type est entier, le nombre est une réalisation du type, un être si on veut et l'écriture décimale, sa représentation (très efficace pour le calcul manuel ou mental sur les entiers).
Une autre représentation du même être est Dix. Cette représentation est lexicale, dépendante d'une langue nationale. Peu pratique pour le calcul ou même la communication...

Dans le premier cas, on exprime notre élément de type (on dit instance ou réalisation) par une structure de données qui est une séquence de chiffres de 0 à 9.
Dans le second cas, on exprime le même être par une structure de données qui est une séquence de lettres d'un alphabet qui suit les règles de vocabulaire et de syntaxe d'un langage (en l'occurrence, une langue naturelle, le français).

Maintenant, qu'on voit peut-être un peu mieux ce qu'est une structure de données et à quoi ça sert, on va pouvoir répondre à la première question : en quoi une structure de données peut être complexe et si les langages dynamiques sont mieux à même de les gérer.

Avant toute chose, il faut vous prévenir que ce n'est pas parce qu'un langage ne force pas le développeur à utiliser des types que ce langage n'en possède pas.
En Perl (langage à typage dynamique faible), vous ne voyez jamais quelquechose du style my int $n = 10;
Et pourtant, écrire quelque chose comme my $n = 1+2+3+4; printf "%d\n",$n; donnera bien 10.
Perl possède bien en interne un type Entier mais il décharge le développeur du souci de s'en préoccuper en inférant le type des variables à l'exécution. En clair, Perl contient un petit démon qui regarde l'intérieur des boîtes pour mettre tout le temps la bonne étiquette dessus.

Et nos structures complexes alors ? Et bien, on s'en fiche. Pouvoir créer des structures complexes n'a rien à voir avec les types supportés d'un langage mais avec sa syntaxe.
Quand on parle de structure de données complexes, on parle en fait de représentations suffisamment sophistiquées pour représenter des types de plus en plus abstraits.

Représenter un entier est une chose, représenter un une carte géographique et un itinéraire dans cette carte (comme Google Maps le fait) en est une autre.

Prenons une structure de données sophistiquées, la liste chaînée. Il s'agit d'une collection de variables dont on accède aux valeurs par itération de proche en proche depuis la tête de liste jusqu'à la fin.

Son expression dans un langage informatique ne dépend aucunement de la capacité dudit langage à gérer le typage de manière forte ou faible, statique ou dynamique mais uniquement de sa capacité à gérer des liens entre variables (qu'on les appelle pointeurs ou références) donc de la syntaxe.
Exemples : C (fort, statique) possède des pointeurs, on peut y définir une structure de liste chaînée. Perl (faible, dynamique) permet de gérer des références à des variables, on peut y définir une structure de liste chaînée (c'est idiot car Perl les supporte de manière native), Lisp (pas de typage) est entièrement basé sur la structure de liste (un programme Lisp est une liste). A contrario, PL-SQL (fort, statique) ne supporte ni pointeurs, ni références et n'autorise pas la définition de telles structures.

En conclusion, la capacité d'un langage informatique à gérer des représentation sophistiquées des données dépend de la puissance et de l'expressivité de sa syntaxe.
Le typage n'intervient que dans le contrôle de la syntaxe pour assurer une exécution correcte.

A noter que beaucoup de langages dynamiques possèdent une syntaxe puissante et expressive à la différence de certains langages statiques.


mercredi 27 août 2008

On a testé, on a aimé (Eté 2008)


On a testé, on a aimé beaucoup: l'album Somewhere Back In Time d'Iron Maiden.
Ou quand l'un des plus grands groupes de Metal se fend d'un pot-pourri des meilleurs morceaux de son âge d'or. Acheté quelques semaines après le concert et écouté en voiture à n'en plus finir. Force est de constater qu'il n'y a rien à jeter dans cet album qui combine des morceaux de Heavy Metal traditionnel du groupe en live et en studio (Aces High, Wasted Years, The Number of the Beast) à des morceaux plus intimistes, proches d'un style gothique en gestation à l'époque (Phantom of the Opera) .


On a testé, on a aimé moyen: la Théorie Gaïa de Maxime Chattam.
Le nouvel opus du plus anglo-saxon des auteurs de thriller français. Les tribulations scientifico-horrifiques d'un couple de chercheurs et de leur beau-frère sur la piste d'une conspiration liée à l'évolution humaine.
Comme d'habitude avec Chattam, c'est bien écrit, ça regorge de scènes en huis-clos et de tueurs en série (là, j'en dis pas plus mais c'est le carnaval). Mais c'est téléphoné. Les personnages sont quasiment manichéens, sans grande nuance psychologique. Les scènes de frisson sont très bien écrites et très évocatrices mais on les sent arriver 100 pages à l'avance.
A lire sur la plage. Par son épaisseur, peut éventuellement servir d'oreiller.


On a testé, on a aimé beaucoup: Le Grand Secret de René Barjavel.
Un roman méconnu mais très bien construit. Quel est le rapport entre l'assassinat de Kennedy, la fuite de De Gaulle à Baden-Baden et le réchauffement des relations sino-américaines ? Pourquoi Roland, l'amant de la belle Jeanne disparaît-il sans laisser de trace ? Le Grand Secret relie tous ces évéments entre eux autour de la même et unique cause. Quelle est t'elle ? C'est le Grand Secret ! Pour le savoir, lisez le bouquin.
Barjavel signe un roman d'anticipation (parution en 1972) qui aborde les thèmes de l'amour qui triomphe de tout, de l'éthique scientifique et de la conspiration mondiale. Une oeuvre qui pourrait inspirer certains scénaristes de fiction française en mal d'inventivité.

En vrac.
Beaucoup : LP, The Divine Conspiracy, 2007, Epica, Metal symphonique.
Pas du tout : Roman, Le Livre de l'Air et des Ombres, 2008, Michel Gruber, Thriller ésotérico-historique.
Assez : Roman, Fondation, 1951, Isaac Asimov, Science-fiction.

lundi 18 août 2008

WarEngine, des nouvelles du front

Ca fait longtemps que je n'ai pas causé wargame dans ce blog. Et il y a de l'actualité chaude en ce moment. Ma traduction en français des règles de WarEngine commence à intéresser du monde. En fait, j'ai transmis mon matériel aux concepteurs de Golgo Island, le mod déjanté et francophone de WarEngine futuriste. Qu'ils en fassent bon usage.
De mon côté, j'ai relu ma prose, corrigé le bouquin de règles que j'ai fait suite à la traduction et je prépare une mouture de Hard Klash Fantasy pour la rentrée avec des précisions de règles, des traits retravaillés et deux factions de style gothique/métal : mort-vivants et démons.
Une fois que ça sera au point, je posterai tout ça en téléchargement depuis le wiki de WarEngine.

vendredi 15 août 2008

Projets figurinistiques

Parallèlement au travail que je fais sur la version française de WarEngine, il m'arrive de peindre des figurines pour jouer à ce jeu.
J'ai actuellement quelques figurines (une trentaine) qui me reste de Confrontation (jeu que j'ai abandonné suite aux revirements de l'éditeur). J'en ai acheté quelques unes de plus, à bon prix chez mon dealer habituel.
Je pensais profiter de mes congés pour continuer le projet Extension d'unité et peindre quelques lanciers squelettes et autres guerriers zombis pour étoffer mes maigres régiments mais le soleil, les ballades et autres lectures m'ont dérouté de cet objectif.


C'est la rentrée et j'ai décidé de faire avancer ce sujet avec le lancement d'un autre projet, la création d'une nouvelle armée pour jouer à WarEngine.
J'avais acheté en occaz et au neuf en promotion toute une série de figurines Rackham d'armées diverses (achat compulsif, collectionnite aiguë, appelez ça comme vous voulez) avec le vague projet de me faire une grosse armée pour Confrontation.
Le fait est que WarEngine permettant de tout faire, je me suis dit pourquoi ne pas tout mettre dans la même armée et j'ai démarré le chantier ce mois ci.
Contrairement à Confrontation qui est un jeu d'escarmouche, WarEngine utilise un système d'ordre par unité et, l'expérience aidant, on se rend compte qu'il vaut mieux avoir des unités nombreuses. Trois troupiers ne peuvent pas vraiment faire des attaques soutenues efficaces sans parler du risque de déroute.
Fort de ces enseignements et d'un stock de plomb conséquent, j'ai regardé ce que je pouvais faire.
Stock:
Deux blisters d'archers drune (6 figs)
Deux blisters de séides formors (4 grosses figs)
Un blister de karnagh drunes (2 figs)
Un blister d'hallebardiers de Dirz (3 figs)
Un blister d'arbalétiers de Dirz (3 figs)
Un blister de héros hallebardier de Dirz (1 figs)
Un blister de furie de Dirz (2 figs)
Un vieux Messager d'Alahan pour conf, mal peint et mal tigé

La furie de Dirz est une superbe figurine, posture dynamique et assez évocatrice. Je me suis dit voilà un meneur pour une unité de choc. J'ai commencé à travailler à partir de ce point.
Je lui ai adjoint les 3 hallebardiers. Le problème est que l'unité est trop faible en effectif. J'ai ajouté le héros hallebardier et les 3 arbalétriers pour former une unité cohérente de 8 figurines aussi bien en termes de jeu (tir et corps-à-corps) qu'au niveau du style visuel des figurines.

Les archers drunes pour leur effet de démons humanoïdes à quatre bras m'ont toujours inspiré. J'en ai 6 donc assez pour faire une unité de tir à longue portée. A cela s'ajoute les meneurs, rôles pour lesquels j'ai recruté les deux karnaghs drunes qui peuvent faire des élites de choc de bon aloi à WarEngine. J'ai aussi la possibilité de réserver ce rôle à un paladin noir d'Achéron et de garder les karnaghs pour un rôle plus offensif.

Les séides formors font des démons plus que convenables (façon de parler). Avec un profil de monstre moyen et le trait Invoqué, ils iront bien dans le budget de l'armée. Reste à trouver un invocateur. Je compter convertir le Messager pour en faire un Champion of Doom mais ne pas lui donner un profil de magicien. Il me reste pour tenir ce rôle, la seconde figurine du blister de la furie, une servante pourpre de Dirz qui peut faire une sorcière passable. Adjugé pour un profil de sorcière solo avec un pouvoir d'Invocation de Séide.

Reste le commandant de l'armée pour lequel je vais donc recycler le Messager. Je projette de passer un peu de temps à le convertir avec le remplacement du fût de sa lance par une baguette de bronze du même diamètre (question de solidité), un travail sur la lame de l'épée (changement de lame droite en lame courbe et ajout de barbelures) et sur le fer de lance (style harpon avec barbelures). Je modifierai sans doute le dessin de la plaque d'épaule pour lui donner un look moins "propre" et je rajouterai quelques colifichets (seringues, lames diverse) sur la poitrine et les épaules pour fondre la figurine dans le style du reste de l'armée. Je réfléchis encore sur l'opportunité de retravailler la tête de la figurine (masque respiratoire, suppression des cheveux, etc)

Pour l'instant 3 archers sont assemblés et presque ébarbés. Un des archers à un lacune de moulage qui fait que son bras qui tient l'arc est raccourci. J'ai tigé plus long et insérer une bague d'alliage percée en son centre (pour mettre à la bonne longueur) mais il va falloir que je remodèle un gantelet. J'avais pas prévu ça.

J'ai démarré l'ébarbage des arbalétriers et je vais attaquer leur assemblage.

Parmi les quelques enseignements récents:
J'ai testé le fil d'acier galva pour le tigeage. Moins rigide mais moins cassant que le trombone. Idéal pour les faibles diamètres (genre les bras des archers).
La colle cyanoacrylate ne se conserve pas ! Soit elle sèche plus ou moins partiellement dans le tube, obstruant la canule soit elle reste liquide mais elle perd ses propriétés adhésives. La conservation au réfrigérateur ne semble pas améliorer sensiblement les choses.
Les socles ronds sont rares et chers (j'ai décidé de tout socler en rond plutôt qu'en carré). Si un lecteur pouvait me tuyauter sur une technique pour faire ses socles soi-même de manière quasi-industrielle, je lui en serais très reconnaissant.

Je vais essayer de prendre des photos des travaux en cours afin d'illustrer un peu le blog. A bientôt pour la suite.


mardi 5 août 2008

Démonologie informatique 1/2

Voici la suite de ma saga de l'été concernant les langages informatiques. Je doute que ça intéresse beaucoup de personnes mais pour moi, l'audience n'est pas un problème, je ne suis pas rémunéré par la publicité et de toutes façons, comme on va le voir, le culturel ne pait pas.

Dans les discussions entre professionnels de la profession (le développement de logiciels s'entend), il y a pas mal de buzz words qui reviennnent tout le temps. L'un de ces mots est langages dynamiques. Là, Madame Chombier, très estimée lectrice de ce blog demeurant dans la charmante localité de Bignoules-de-Bagorre, se demande déjà ce qu'est un buzzword. Cliquez sur le mot en bleu souligné, madame Chombier. Les autres se demanderont certainement ce que c'est qu'un langage dynamique et s'imaginent peut-être une allégorie du langage portant costume Hugo Boss, Blackberry vissé sur l'oreille et iMac à la main, courant d'une altière foulée vers l'avenir tout en portant un regard à peine méprisant sur la plèbe statique rampant sur son chemin.

En fait, interrogez les professionnels de la profession et il ne s'en trouvera pas deux pour donner une définition équivalente (j'ai pas dit identique) d'un langage dynamique. Pourquoi ? Les professionnels sont-ils des ignares ? Pas plus que d'autres. Il y a simplement que, dans ce contexte, le mot dynamique a plusieurs sens qu'il convient maintenant d'examiner.

Tout d'abord, dynamique est le contraire de statique. Avant de trouver un sens au dynamique, trouvons un sens à son contraire dans le cadre des langages informatiques.
Pour qui a un peu de connaissances en la matière, le premier mot qui vient à l'esprit quand on associe langage informatique et statique, c'est typage. Le typage, kezako ?

Le typage est une opération qui s'applique à un programme informatique lors de son écriture et/ou de son exécution et qui a pour effet de confirmer la nature (le type) des éléments que manipule ce programme. Imaginez que vous vous brossiez les dents, on pourrait dire qu'il s'agit de l'exécution de votre programme de brossage des dents (routine événementielle planifiée 2 à 3 par jour selon les recommandations constructeur). Imaginez alors qu'un petit démon s'assoie sur votre épaule pendant que vous vous brossez les dents et vous confirme, à chaque va-et-vient de la brosse couverte de dentifrice moussant sur votre râtelier, que vous utilisez bien une brosse à dents et, quand bien même cela ne suffirait pas, le petit démon marque "brosse à dents" sur ledit ustensile (au cas où vous êtes trop crétin pour vous en apercevoir).

Voilà, illustrée, l'opération de typage.

Là, les lecteurs qui ont déjà fait de la programmation s'énervent car ils détestent qu'on les prennent pour des crétins (supposition de ma part). Patience, mesdames et messieurs, praticiennes et praticiennes de l'art ésotérique de la programmation, patience. Je n'en ai pas fini avec mes métaphores.

Quel est l'intérêt de typer ? De coller des étiquettes sur des objets (ça y est, le mot magique est prononcé) ? On va le voir, mais avant, il faut passer par, non pas un, mai deux passages obligés, la variable et l'affectation de valeur.

Une variable est une boîte avec une étiquette dessus. Sur l'étiquette figure un nom, celui de la variable. Une variable, c'est une boîte avec un nom écrit dessus. (après les boîtes sont rangées dans une étagère qui ne doit contenir que des boîtes avec des noms différents, mais ça c'est une autre histoire).

Une variable est faite pour contenir une valeur ce qui revient à mettre quelque chose dans la boîte. Exemple, vous avez adopté un nouveau chien et vous voulez lui donner un nom, mettons "Cosmos". Dans un langage informatique, vous prendriez une boîte, colleriez dessus une étiquette marquée "Cosmos" et mettriez le chien dedans. Le langage informatique ne permet pas de faire des trous dans la boîte pour que le chien puisse respirer, je sais c'est barbare mais c'est pas le pire. Imaginons que vous ayez un deuxième chien mais une seule boîte, rien ne vous empêche de retirer le premier chien de la boîte (la variable) Cosmos et d'y mettre le deuxième. Plusieurs chiens, un seul nom. Ridicule. Qu'à cela ne tienne, prenons une deuxième boîte, collons dessus une étiquette marquée "Neptune" (c'est une expérience de pensée, je vous assure qu'aucun chien n'a été maltraité durant le processus) et fourrons le deuxième chien dedans.

A ce stade, nous avons deux variables (deux boîtes) avec chacune un nom (l'étiquette) différent et un contenu (des chiens).

En pseudo-langage ça donne ceci :
var cosmos = new Chien();
var neptune = new Chien();

Maintenant, nous allons utiliser ces variables pour faire des trucs. Qu'est-ce qu'on peut faire avec deux chiens ? Il se trouve que j'en connaît un petit bout sur la question, étant le propriétaire des deux animaux sus-cités. Avec Neptune et Cosmos, on peut jouer à la balle.

Créons donc un programme de jeu de balle avec deux chiens.
Pour des raisons de simplicité, considérons que le lancer de balle est un événement extérieur et que le résultat du programme est la détermination aléatoire du chien qui a attrapé la balle (l'un des deux l'attrape toujours, c'est empiriquement constaté par l'expert du domaine chaque jour).

Comment dire qu'un chien a attrapé la balle ? Bah, on n'a qu'à dire que la balle va dans la boîte avec le chien. Le problème avec les boîtes (les variables), c'est que bien souvent, elle ne peuvent contenir qu'un seul truc, un chien OU une balle mais pas les deux. Et on arrive à un petit paradoxe :

function rattraper_baballe(var balle_lancee)
{
var chien_gagnant = choisir_chien(cosmos, neptune);
chien_gagnant = balle_lancee;

}


Le code ci-dessus ne veut rien dire, on s'en rend compte. Le problème c'est qu'il est parfaitement légal ! Car on a dit qu'une boîte pouvait contenir n'importe quoi, des chiens, des balles mais une seule valeur, c'est la loi. Dans notre code, la fonction choisir_chien retourne l'une des deux valeurs de chien et le programme affecte cette valeur à une variable chien_gagnant qui contient alors un chien. Le problème, c'est que la ligne du dessous affecte à cette même variable la valeur balle_lancee que nous donne l'extérieur de la fonction rattraper_baballe.

Ce faisant, on perd l'information sur le chien choisi et on se retrouve avec la seule information de la balle lancée. Plus grave, si, dans la suite du programme, on applique un autre traitement à la variable chien_gagnant en supposant que celle-ci contient un chien, on risque d'avoir une erreur (un bug) :

donne_nonosse(chien_gagnant) ;
Réponse (possible) du programme => Mauvaise valeur d'entrée !

Et oui ! La variable contient une valeur qui est une balle. Le programme a simplement vu que ça ne collait pas mais le développeur, lui, se demande ce qui se passe et, surtout, comment corriger ce danger de confondre chiens et balles dans les variables.

Le moyen que les concepteurs des langages ont trouvé s'appelle le typage. En gros, en plus de coller une étiquette avec le nom d'une variable sur une boîte, le langage impose de coller une autre étiquette avec la nature de ce que la boîte peut contenir. Là, non seulement on restreint le contenu à une chose mais aussi à une chose d'un certain type.

Notre boîte possède alors deux étiquette, une pour son nom et une pour son type. Exemple :
var Chien cosmos = new Chien();
var Chien neptune = new Chien();
var Balle baballe = new Balle();
cosmos = baballe; -- erreur de type !!!
neptune = cosmos; -- OK, même type

Les affectation sauvages entre variables de types différents vont se remarquer plus vite et, ainsi, des erreurs importantes seront évitées. Ca, c'est la théorie.

Madame Chombier, qui n'a pas les oreilles dans sa poche et à qui on ne l'a fait pas, nous fait remarquer que "il est où le rapport avec le dynamique de tout à l'heure ?".
Et bien voilà, le typage statique, veut dire en réalité : contrôle du type avant l'exécution du programme. L'erreur de type présentée dans le bout de code plus haut peut être détectée à trois moments : lors de l'écriture du code par un développeur un peu plus éveillé que la moyenne, lors de la compilation ( étape qui transforme un texte dans un langage donné en une série d'instructions absconses que l'ordinateur pourra comprendre) ou lors de l'exécution (dans cet ordre)

Le typage statique impose que toutes les informations sur le type des variables soient connues au moment de compiler le programme avant même son exécution. Ces informations permettent au compilateur (un genre de petit démon comme celui des brosses à dents) de détecter des erreurs du type de celles que nous avons évoquées.
Le typage statique impose, en plus, que les variables ne peuvent pas changer de type au cours du déroulement du programme. Le contraire signifierait que le type d'une variable est dynamique (tiens donc ?).

Est-ce que toutes les variables doivent être typées ? Ca dépend des langages. Certains autorisent des variables non typées ou possédant tous les types à la fois. pour ces boîtes là, aucun contrôle n'est effectué, le programmeur prend ses responsabilités. C'est ce qu'on appelle le typage statique faible.
D'autres langages ne supportent pas que l'on déroge aux règles et aux procédures, ils imposent un typage fort, toutes les variables doivent avoir leur étiquette.

En résumé,
typage statique = boîtes avec une étiquette indécollable écrite à l'encre indélébile.
typage dynamique = boîtes avec étiquettes décollables, écrites à l'encre sympathique.
typage faible = boîtes sans étiquette possibles
typage fort = boîtes avec étiquette obligatoires

Et notre petit démon de tout à l'heure ? Qu'est ce qu'il fait ? Eh bien, du typage dynamique, ma bonne dame. Il vous dit pendant tout le temps que vous vous brossez les dents que vous utilisez bien une brosse à dents. Et s'il vous prenez l'envie de vous peigner la moustache avec, il vous préviendrait qu'une erreur de type malencontreuse serait sur le point de se produire.

Et un petit démon qui fait du typage statique ? Celui là, il vous forcerait à écrire "brosse à dents" sur votre brosse à dents à chaque fois que vous brossez les dents. Pareil, quand vous sortez les chiens, il vous forcerait à écrire "chien" sur vos deux chiens, "balle" sur les balles des chiens avant même que vous ne puissiez mettre un pied dehors. Démoniaque, je vous dis !

Au final, nos deux démons ont la même utilité, nous prévenir quand on utilise pas le bon type pour la bonne opération et vice-versa. L'un nous le dit gentiment et ne nous empêche pas toujours de le faire et l'autre a exactement le même comportement mais il nous a forcé à étiquetter toute notre maison, nos animaux domestiques, voire pire (imaginez vous allez aux toilettes avec un démon de ce type).

Rendez-vous la semaine prochaine avec la présentation de certains de ces démons.

Somewhere Back in Time

L'année dernière, en mission en Roumanie, on s'est aperçu avec mon pote Pierre qu'Iron Maiden, le mythique groupe de Heavy Metal britannique était d'une, toujours vivant (!) et de deux, passait en concert à Paris-Bercy.

Pierre est un fan de Metal (du genre que l'on qualifie de Thrash, vous pouvez d'ailleurs aller lire son ode à Metallica sur son blog) et je suis un fan de musique puissante (j'aime Wagner, Manowar et The White Stripes). On s'est dit que ça serait bien d'y aller.

Flashback. En 1993, un condisciple destockait ses CD pour se faire un peu d'argent et parmi ceux là figurait l'album Somewhere In Time d'Iron Maiden. Album mythique de l'âge d'or du groupe, fortement influencé par le film Blade Runner de Ridley Scott. Sans tarder, je lui rachetais et je l'écoutais (et je l'écoute encore). Je suis toujours surpris, 15 ans plus tard, de la puissance évocatrice de la musique d'Iron Maiden et du Metal en général. Sans être un fan hardcore (comme dirait Pierre), j'aime le Metal, c'est tout. Les beats de batterie en 180 bpm, les solos shred en mineur et les lignes de basse bien lourdes me donnent de l'énergie et me remontent le moral. Quelquefois, même, ça me calme.

Retour au présent antérieur. En 2007, rendez-vous est pris pour cette année, le 2 Juillet 2008, deuxième et dernière date en France pour le groupe à la mascotte décomposée (le lecteur aura peut-être perdu le fil, qu'il se rassure moi aussi, pour les paradoxes temporels et leur explication simple, revoir Retour vers le Futur II).

Je ne vais pas vous raconter le concert (Pierre fait ça mieux que moi sur son blog), non, moi, je vais plutôt creuser dans les petits à-côtés, les anecdotes, l'ambiance.

Concert prévu à 21h00 (je compte pas les premières parties), je pars du boulot à 16h00 (Ile-de-France Sud-Ouest) en direction de la capitale. Deux heure et demi plus tard après avoir copieusement et successivement visité en voiture, les voies sur berge, la Tour Eiffel, le Trocadéro, la Place de la Concorde, le Palais du Louvre, la Rive-Gauche, la Rue de Solférino, le Boulevard Saint-Germain, l'IMA, le Pont de Sully, le Quai de la Râpée et enfin, la Gare de Lyon, je me gare au stationnement souterrain et rejoins Pierre et Jérémie. Ouf, attablé en terrasse face à une pinte, je me remets doucement de mon périple parisien (pourtant, je m'étais jadis juré de ne plus remettre mes roues dans cette ville, que celui qui ne s'est jamais dédit me jette la première bière)
L'heure tourne, on se dirige vers le métro qui nous amène sur le parvis du POPB. Là, on est dans l'ambiance. Des hardeux partout. Cheveux longs, tee-shirts noirs avec la tête d'Eddie, toute la faune métalleuse s'est donnée rendez-vous à ce concert.
On entre. Plutôt habitué des lieux, je guide mes deux compères jusqu'à des places libres et on s'installe. Trois sièges au bord de l'escalier avec vue sur la fosse et la scène (c'est mieux, vous en conviendrez).
Après la première partie des Avenged Sevenfold, Iron Maiden entre en scène. Et quelle scène ! Décor genre temple égyptien (l'Egypte antique et l'Antiquité en général tient une grande place dans l'imaginaire du groupe). Les fûts de Nico sont enfoncés dans un décrochement du mur, on ne le voit pas. L'arrière-scène est occupée par un Eddie pharaonique façon Powerslave peint sur un rideau qui court sur toute la largeur. Bruce et les 4 autres entrent en scène. La salle exulte. Les cris d'accueil durereont un bon dix minutes. Bruce dit bonsoir (en français), Steve, Janik, Adrian et Dave se saississent de leurs armes de destruction massive et ça commence.

90 minutes de pur délire Metal au cours desquelles Pierre prit une douche de bière à cause de son voisin de l'escalier, je me suis retrouvé stoned à cause de mon propre voisin d'escalier qui fumait un énorme pétard. 1h30 de musique puissante qui vit la salle entière reprendre The Number of the Beast et Wasted Years. Un certain nombre de rappels, Bruce qui s'essaye au français et qui promet bientôt le retour du groupe avec un nouvel album. Nos voisins d'escalier vont se chercher des bières.

Des écrans géants pour montrer le jeu des musiciens et l'arrivée du groupe à Roissy dans un avion aux couleurs d'Iron Maiden (Bruce est pilote de ligne dans le civil, sa compagnie loue un avion au groupe et il le pilote !). Mon voisin d'escalier se roule un autre joint. Le voisin d'escalier de Pierre bâle sa énième bière.

Le discours de Sir Winston Churchill en prélude à Aces High, le morceaux vantant la bravoure méritée et la ténacité légendaire des pilotes de la RAF pendant la Bataille d'Angleterre. Tout cela n'émeut pas nos voisins d'escalier qui finissent par tremper leurs joints dans leur bière, à moins que ce ne soit l'inverse.

Les animations sur scène, le démon qui apparaît, le Eddie géant qui arrive sur scène en marchant dans sa dégaine de chasseur de primes du futur (comme la couverture de l'album Somewhere in Time). Nos voisins d'escalier se cachent dans leur bière, effrayés par l'apparition de la mascotte sur la scène et son combat contre Janik.

Le concert se termine, le son s'arrête. On reprend nos esprits et on essaye de sortir. Là, nos voisins d'escalier sont complètement poivrés, stoned et brinquebalants. Tellement brinquebalants que l'un deux manque de tomber sur moi qui le suivais. Je me cache courageusement derrière Pierre qui lui devrait être capable d'amortir le choc. Ouf, notre voisin d'escalier rétablit son équilibre in extremis et s'achemine vers la sortie avec force rots.

A la sortie, on hésite, métro ou pinglots ? C'est noir de monde. Finalement, on opte pour le métro. Il nous faudra bien 20 minutes pour rejoindre la rame. 20 minutes au son d'un Number of the Beast repris a cappela par un fan enthousiaste.

On récupère la voiture et direction Orléans. Sandchaser, le GPS humain, fait encore montre de sa sagacité légendaire en prenant par deux fois la mauvaise direction. L'erreur est humaine et celle là ne prêta pas à conséquence. je visais la porte d'Italie, ce fut la porte d'Orléans (la bien nommée). On arrive dans mon bled à 2h00 du mat', fatigués mais heureux d'avoir assisté à cet événement.

Le lendemain, j'écoutais Somewhere In Time dans la voiture.

Projets d'été

Ca y est, je suis en vacances (en quelque sorte). Je me suis dit que j'allais en profiter pour mettre à jour le blog.
Il y a pas mal de choses que j'ai passées sous silence à cause d'un emploi du temps un peu chargé. En vrac, le concert d'Iron Maiden, une sélection d'albums écoutés et réécoutés et la suite de la saga de l'été sur les langages de l'informatique.
D'ici là, je me prépare à un petit aller-retour commando à Bucarest (c'est en Roumanie) et après, oui, vacances !

dimanche 20 juillet 2008

Grandeur et décadence de l'objet 2/2

Dans l'article précédent, j'avais évoqué la grandeur de l'approche objet. En des temps reculés que les plus jeunes développeurs ne pouvaient pas connaître, Java n'existait pas (et si, ça a existé, il n'y avait pas l'Internet non plus), la plupart des applications de gestion étaient développées en C, voire en C++ ou en Visual Basic.
Quelques chanceux pouvaient utiliser des langages dynamiques comme LISP ou Perl. D'autres étaient confinés dans les affres des RAD tels que Delphi ou WinDEV.

C'est à cette époque que j'ai commencé ma carrière professionnelle comme développeur C++. J'avais découvert ce langage en école, par moi-même, aidé en cela par un bon niveau en C et l'étude de la théorie des types.
J'avais déjà l'habitude de coder de manière modulaire en C, en fait, je faisais de l'objet sans le savoir.

Mon premier job en tant que développeur (j'avais été recruté pour ma connaissance de C et C++) fut de maintenir une application écrite en VB 4.0, un langage purement procédural dont la syntaxe était conçue pour les mauvais développeurs, ceux qui ont séché les cours de pointeurs, de structures de données et d'algorithmique de la faculté d'informatique.

Comme il arrive neuf fois sur dix dans ce genre de cas, le code était énorme, peu modulaire, avec beaucoup de motifs répétés (par la fameuse méthode de développement dite du "copier/coller"). En vertu des lois de la statistique, plus il y a de lignes de code (et, a fortiori de lignes mal écrites), plus il y a de chances que des bugs apparaissent.
Force fut de constater que la loi s'appliquait parfaitement à la situation, maintenir cette application devenait un cauchemar. Les développeurs étaient démotivés, les chefs de projet n'avaient plus assez de ressources pour travailler sur des produits plus innovants.

Nous n'avons eu alors de cesse que de préconiser l'approche objet et le passage à C++ pour le coeur de l'application, pensant que l'utilisation d'un autre paradigme enlieu et place du (mauvais) procédural allaient arranger nos problèmes.

Dans un premier temps, je me suis chargé d'appliquer les méthodes de l'approche objet au code VB 4.0. En pratique, c'est revenu à porter l'intégralité du code vers VB 5.0 et à réarchitecturer certains modules en taillant dans le code mort, en identifiant et factorisant les répétitions.
De 150000 lignes, les programmes sont passés à 60000 lignes. Parallèlement à ça, les nouveaux projets commençaient directement à être écrits en C++ en se basant sur les MFC (Microsoft Foundation Classes) et la STL (Standard Template Library).

Et puis, tout s'est accéléré. L'approche objet tendait à se généraliser, les ouvrages sur le sujet devenaient plus accessibles. UML est apparu.

Au bout de quelques mois, on s'est retrouvés à produire plus de modèles que de code, à définir des architectures de produit et à parler en termes de motifs de conception (Design Patterns).
Dans le même temps, les développeurs essayaient de transposer sous forme de code C++ le résultat de ces conceptions et, force fut de constater là encore, que le résultats n'étaient pas à la hauteur de nos attentes.

Le code se retrouvait aussi compliqué, touffu et verbeux que s'il avait été écrit en procédural. Plus encore, des choses simples se trouvaient artificiellement complexifiées à cause du respect zélé que nous avions de l'approche objet généralisée.

La première conclusion de cet exemple est que l'approche objet généralisé n'est pas adaptée à tous les contextes. En gros "trop d'objet tue l'objet".

Et pourtant, C++ n'étant qu'un "meilleur C" suivant les termes de son concepteur Bjaarne Soustrup, il restait possible de coder simplement à base de fonctions et de structures de données simples les choses simples sans avoir à fournir un substrat objet simplement pour respecter des normes de développement qui devenaient inadéquates.

Dans le même temps, la syntaxe de C++ héritait celle de C avec son cortège de pointeurs, de chaînes à zéro terminal et autres joyeusetés qui sont des portes ouvertes aux bugs de toutes sortes pour qui ne les maîtrisent pas.
Dans le même temps, rien n'imposait aux développeurs d'utiliser l'approche objet en C++ et certains d'entre eux continuaient à penser et à coder en procédural.

La chose est impossible en Java. A cette époque, Java quittait les labos de Sun et entrait par la grande porte dans les SI des entreprises. Et Java était une révolution.

En Java, il n'y a pas de pointeurs, juste des références anonymes (en fait ce sont des pointeurs de pointeurs qui ne sont pas déréférençables).
En Java, tout est objet (ce qui n'est pas en soi une révolution car SmallTalk fut, dans les années 80, le premier langage pur objet).
En Java, tout se détermine par la classe. Impossible de coder ne serait-ce qu'une fonction hors d'une classe même main, le point d'entrée d'un programme.
En Java, plus besoin de se forcer à libérer les références allouées en mémoire, il y a un ramasseur de miettes qui nettoie les saletés des développeurs.

Java a été conçu pour être le langage standard de l'approche objet avec la ferme d'intention de forcer l'utilisation de l'approche objet pour l'écriture de n'importe quel programme.
Voici le programme iconique "Hello World !" écrit en Java (à titre de comparaison, sa version C++/STL)

En Java:
public class HelloWorld {
public static void main(String[] args) {
System.out.print("Hello world!");
}
}


En C++:
#include <iostream>
using namespace std;

int main()
{
cout << "Hello world!" <<>
return 0;
}


Les deux programmes font respectivement 91 (en Java) et 45 (en C++) caractères pour effectuer la même chose. Soit le double pour Java.
Si Java est verbeux pour quelquechose d'aussi simple que d'afficher une chaîne de caractères littérale, imaginez ce que ça doit être pour trier une liste d'entier.
Je ne fournirai pas le code en Java (Google est votre ami) pour cette tâche mais à titre de teaser voici comment on fait en Perl:

use strict;
my @list = (4, 10, 56, 78, 12, 2, 6);
print join(',',sort { $a <=> $b } @list);


La sortie écran donne : 2,4,6,10,12,56,78

Sans fonctions statiques, avec du tout objet (enfin presque), les développeurs d'applications, les concepteurs de bibliothèques de classes et de frameworks se sont mis à créer des objets sans état avec juste du comportement pour imiter le fonctionnement (simple) des fonctions des langages procéduraux.
Et, en bons adeptes de Design Patterns, ils firent collaborer ces classes dans des modèles de conception jusqu'à aboutir à des constructions intellectuellement très satisfaisantes mais parfaitement impraticables sans une bonne dose de self-control.

Et voilà ce que ça peut donner avec l'exemple du tri :

import framework.algorithmes.* // bibliotheques d'objets fonctions qui implémentent les algorithmes sur les structures de données (tri, parcours, recherche)
import framework.structures.* // bibliotheques d'objets qui implémentent les structures de données de base (listes, piles, tableaux, arbres)
public class TRiListeDEntiers {
public static void main(String[] args) {
int[] tableau = {4, 10, 56, 78, 12, 2, 6};
ListeDEntiers liste = new ListeDEntiers(tableau);
TriNumerique operateur_tri = new TriNumerique(TriNumerique.TriRapide);
ListeDEntiers liste_triee = operateur_tri.trier(liste);
System.out.print(liste_triee.EnChaine(","));
}
}


On peut se plaindre de Java mais C++ et la STL ont des concepts similaires :


#include <iostream>
#include <algorithm>
using namespace std;

int main() {
int tableau[7] = {4, 10, 56, 78, 12, 2, 6};

sort(tableau, tableau+7);

for (int i=0; i<7; i++) {
cout << a[i] << " ";
}
}


L'idée derrière tout mon propos est que pour faire des choses simples qu'on fait tous les jours quand on développe des programmes, il faut des langages qui permettent de le faire en un minimum de signes.
Java (et C++) autorisent beaucoup de choses et permettent de faire de grandes choses d'ailleurs mais pour les petites choses du quotidien, ils sont absolument impraticables.

C'est la décadence de l'objet : devoir écrire des choses de plus en plus baroques et artificielles pour des choses simples qu'un étudiant de première année sait coder en Pascal ou en Scheme.
C'est à dire : des structures de données (paire, listes, tableaux, vecteurs, cartes, chaînes de caractères, arbres, graphes) et des algorithmes (insertion et suppression d'élément, accès aléatoire, parcours, recherche et tri)

Je vois les langages à objets historiques comme des empereurs romains. Après avoir connu la gloire des triomphes sur les hordes barbares procédurales (l'immonde Basic en tête), les langages à objets ont sombré dans une lente et inexorable décadence, devenant de plus en plus boursouflés, encombrants et maladroits.

Péché capital de l'objet : Un paradigme omniprésent mais incomplet
Difficile de passer à côté de l'héritage, de l'encapsulation et du concept de classe quand on code en Java (ou en C++). Et pourtant, certaines constructions du langage qui auraient mérités d'être des objets ne le sont pas (le type int, les structures de contrôles).
D'une manière générale, l'approche objet est criticable car elle ne repose pas sur des fondations formelles précises qui permettraient de démontrer les capacités des langages qu'elle inspire.
D'un autre côté, il existe un fort engouement pour les langages à objets, engouement qui confine à l'irrationnalité et à la pensée magique. Certains pensent que passer à l'objet va magiquement résoudre leurs problèmes de cycle de développement, de couverture de code ou de spécifications fonctionnelles. En aucun cas.

Il existe des tentatives de définition formelle des langages à objets, l'une des mieux abouties est présentée dans ce livre (A Theory of Objects).
Cette définition formelle n'est pas unique malheureusement, et les différentes théories n'ont pas pu être prouvées équivalentes.

Péché capital de l'objet : Des langages verbeux
La base de la théorie de la programmation repose sur les structures de l'information et les algorithmes de traitement. La productivité logicielle se mesure par le rapport entre la qualité du produit et le nombre d'heures de réalisation.
La plupart des langages à objets manquent de ces structures et de ces algorithmes. Ils peuvent se voir étendus, certes, par des bibliothèques.
Mais ces modules complémentaires sont difficiles à concevoir et à mettre au point en raison d'un système de typage très évolué, généralement strict et statique.
Il en résulte que chaque structure classique comme une liste ou un vecteur doit être construit comme un type dérivé basé sur un modèle (de liste ou de vecteur) et affublé du type des éléments contenus.
Pareillement, les algorithmes classiques (tri rapide, recherche dichotomique ou parcours infixe) sont implémentés dans des objets sans états.
Résultat ? Il est quasiment impossible de concevoir simplement une liste opérationnelle capable de contenir des éléments hétérogènes et de la parcourir aisément. Chose qu'il est parfaitement possible de faire dans des langages comme LISP ou Python.

Péché capital de l'objet : La difficulté de faire simple
Vous avez déjà regardé l'implémentation du type String en Java ? (ou du type CString en C++/MFC) ? C'est abominable !
Pour quelque chose d'aussi simple et de consensuel qu'une chaîne de caractères, Java et C++ englobent un tableau de caractères ou d'entiers non signés dans une enveloppe très épaisse qui donne l'illusion au programmeur de manipuler une entité très simple.
En soi, il est vrai que manipuler une variable de type String ou CString est simple mais c'est au prix d'une perte de performance.
Heureusement, les concepteurs de Java ont pensé à fournir aux développeurs une bibliothèque de types simples comme String ou BigDecimal. Mais quand le développeur a à représenter le contenu d'une table relationnelle dans un objet, ou pire à rendre persistant l'état d'un objet, il s'arrache les cheveux, il vient de rencontrer le problème de l'adaptation objet-relationnel (Object-relational impedance mismatch en anglais)
Plutôt que de développer ce concept de manière exhaustive, j'invite le lecteur à consulter ces deux liens (en anglais)
The Object-Relational Impedance Mismatch
The Viet-Nam of Computer Science

Cet exemple particulier illustre le fait que l'approche objet met en exergue des éléments structurels statiques (architecturaux on peut dire) alors que le modèle procédural (et le modèle relationel jusqu'à un certain point) se concentre sur la dynamique des systèmes et les changements d'états.

L'approche objet est d'un grand secours quand il s'agit de concevoir et de maintenir l'architecture d'un ensemble logiciel (comme on le voit à l'heure actuelle avec les Entreprise Service Bus, Entreprise Application Integration et autres Services Oriented Architecture)
C'est un outil pour les concepteurs et les architectes logicielles misant sur des concepts industriels tels que réutilisabilité, sécurité, extensibilité, compréhension, etc.
Mais dès que la granularité devient faible ou que les spécifications se transforment en garanties de comportement, l'approche objet atteint ses limites, manque d'agilité et la respecter à la lettre devient contre-productif.

Voilà pourquoi le tout objet est idiot.

"Et quand on ne dispose que d'un langage à objets ?" me demanderons les lecteurs qui n'ont pas encore décroché.
Nous allons voir que les langages à objets qui subsistent aux pieds de Java dans le monde de l'industrie du logiciel sont beaucoup moins impérialistes et décadents que leur illustre ancêtre.

A la semaine prochaine, à la découverte des langages dynamiques.