Archive for the 'cet homme est fou' Category

juillet 28th 2010

Parlons binaire mais parlons bien

Bonsoir à toutes et à toutes. Je sais, je n’ai pas posté depuis la naissance de mon dernier stagiaire (fake story, si vous voulez savoir). Mais comprenez-moi, j’ai un agenda de chinois du FBI. Du coup, c’est entre 2 exécutions que je prend le temps de publier un petit billet absolument inutile. Mais marrant. Mais inutile quand même.

Aujourd’hui donc, nous allons apprendre à passer pour des gros nerds encoder du texte en binaire !

Tout d’abord, si vous cherchez une explication complète sur le système binaire, allez vous faire voir sur Wikipedia. Ce que je vais vous présenter est un script de conversion binaire/textuel. Ce qui implique une seconde étape, en réalité, car vous n’ignorez pas que le système binaire n’est rien de plus qu’un système numérique, et que par conséquent, tout nombre binaire ne reste qu’un nombre. Il faut donc savoir convertir des chaînes de caractères en nombres. Pour cela, on va utiliser la table ASCII, qui associe à chaque nombre de 0 à 127 (ce qui représente 7 bits, mais est écrit sur 8 par principe) un caractère (alphabet en casses haute et basse, chiffres, ponctuation, caractères de contrôle…). Problème, cette table ne contient aucun caractère accentué, ou ponctuation exotique… La solution est donc d’utiliser l’UTF-8, qui est défini sur 8 bits (donc, un octet). Il permet donc de représenter potentiellement tout caractère utilisable, dans toutes les langues existantes (sur Terre, je préfère le préciser). Ainsi, il nous est possible de convertir chaque caractère d’une chaîne en représentation binaire sur 8 bits, et donc, notre conversion est faite ! C’est aussi simple que ça. Et stupide, je vous l’accorde.

Avant toute chose, posons-nous une question d’importance :

À quoi ça sert ?

Ha, ha, ha. À rien de constructif. À passer pour un con, à se croire supérieur, à me servir d’excuse pour publier un billet tant attendu par mon public conquis. Mais aussi à cacher des messages dans d’autres, par exemple : imaginez un texte dont les premières lettres de lignes, converties en 0 ou 1 selon qu’elles soient voyelles ou consonnes, formeraient un message « secret » à déchiffrer par cette méthode ? C’est un peu la base de la stéganographie, et ça peut être rigolo.

Alors, on fait comment ?

J’y viens, ne poussez pas. Veuillez considérer la complexité malsaine du script ci-dessous :

< ?php

//Cette fonction décode une chaîne binaire (mise en forme avec des espaces ou non)
function bin2str($bin) {
$bin = str_replace(' ', '', $bin); //On se débarasse des éventuels espaces, utiles uniquement à la mise en forme
$string = '';
for($i=0;$i<strlen($bin);$i = $i+8) { //On découpe la chaîne en octets, qu'on traitera les uns après les autres
$string .= chr(bindec(substr($bin, $i, 8))); //Ici, le substr récupère effectivement l'octet qui nous intéresse; bindec le convertit en binaire (exemple : 00101111 => 47), et chr donne le caractère correspondant à cet index dans la table UTF-8)
}
return $string;
}

//Cette fonction transforme une chaîne de caractères quelconque en représentation binaire, et scinde cette représentation en octets pour faciliter la présentation
function str2bin($string) {
$bin = '';
for($i=0;$i<strlen ($string);$i++) { //On encode les caractères un à un, donc on parcourt l'intégralité de la chaîne
$bin .= str_pad(decbin(ord($string[$i])), 8, '0', STR_PAD_LEFT).' '; //La fonction ord() renvoie l'index (décimal) ASCII du caractère demandé; ensuite, on le convertit en binaire, puis on remplit de 0 sur la gauche jusqu'à obtenir une chaîne de 8 caractères (un octet valide). Puis on rajoute un espace pour faciliter la mise en forme
}
$bin = substr($bin, 0, -1); //On supprime le dernier espace
return $bin;
}

//Nous avons un seul formulaire, avec 2 actions possibles : celle à exécuter dépend du bouton "submit" cliqué (sa value est transmise, et on récupère le nom du bouton cliqué)
if(isset($_POST['act_bin'])) { //On traite le décodage du binaire
if(!empty($_POST['bin'])) { //Vérification de l'existence de la donnée
if(preg_match('/^[01 ]*$/', $_POST['bin'])) { //On s'attend à du binaire, donc on renvoie une erreur si ça n'en est pas
$bin = $_POST['bin'];
$str = bin2str($bin);
} else {
$warn = 'Format invalide.';
}
} else {
$warn = 'Veuillez entrer une chaîne binaire.';
}
}
if(isset($_POST['act_str'])) { //On traite la conversion en binaire
if(!empty($_POST['str'])) { //Vérification de l'existence de la donnée
$str = $_POST['str'];
$bin = str2bin($str);
} else {
$warn = 'Veuillez entrer une chaîne de caracères.';
}
}

?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Conversion chaîne-binaire</title>
<style type="text/css"> /* mise en forme basique, inutile d'utiliser un CSS externe pour ça */
.warn { color: red; font-weight: bold; }
fieldset { margin: 10px; float: left; width: 300px; }
fieldset textarea { width: 100%; }
</style>
</head>
<body>
< ?php if(isset($warn) &amp;&amp; !empty($warn)) echo '<p>'.htmlspecialchars($warn).''; //Si un message d'erreur a été défini, on l'affiche dans un rouge effrayant ?>
<form action="bin.php" method="post">
<fieldset> <!-- subtilité : nous avons 2 fieldsets, chacun contenant un bouton "submit". Selon le bouton utilisé, on appelle une fonction ou l'autre -->
<legend>Chaîne</legend>
<textarea name="str" cols="25" rows="10">< ?php if(isset($str) &amp;&amp; !empty($str)) echo htmlspecialchars($str); ?></textarea>
<input type="submit" name="act_str" value="Convertir &amp;gt;&amp;gt;" />
</fieldset>
<fieldset>
<legend>Binaire</legend>
<textarea name="bin" cols="25" rows="10">< ?php if(isset($bin) &amp;&amp; !empty($bin)) echo htmlspecialchars($bin); ?></textarea>
<input type="submit" name="act_bin" value=" &amp;lt;&amp;lt; Convertir" />
</fieldset>
</form>
</body>
</html>

Voilà, c’est tout commenté et propre, et vous pouvez tester le convertisseur en ligne ici. Utilisable si un con (moi) se met à écrire en binaire sur un forum.

5 Comments »

août 22nd 2009

Gordontesos not dead ?

Oui, avec un point d’interrogation. Car je n’en suis pas vraiment sûr. C’est vrai quoi, regardez un peu plus bas (ou beaucoup plus bas, dépendamment de mon inspiration actuelle) : dernier article en date : 30 mars. Ce qui fait moultes secondes passées sans aucune nouvelle. Ce qui est, je vous l’accorde, relativement dramatique.

Quoi qu’il en soit, aujourd’hui au réveil, mes quatre personnalités dans ma tête ont commencé à me reprocher le silence imposé sur ce blog. Et donc, me voilà prendre la plume du clavier sans même savoir quoi dire. Mais vous devriez être habitués. Vous vous doutez donc que ce qui suivra est un dump intégral de mes pensées.

Michael Jackson donnera 44 concerts à Londres, dixit le site où j'ai trouvé cette photo

Le fait d’intégrer une photo du célèbre pédophile n’a à priori aucun rapport avec le reste de l’article, rassurez-vous. A la place, je parlerai plutôt de Gentoo Linux. Car j’ai fait l’acquisition il y a quelques mois d’un tout petit netbook (littéralement « filetlivre », mot dont le quotient de randomitude n’est pas étranger à cet achat), qui n’est d’ailleurs pas si petit en raison de son écran 10,2″. Cette machine, vous ne vous en doutiez probablement pas, est un MSI Wind U100-015 (avec un lien pour l’acheter, ce qui devrait me rendre riche, par un procédé alchimique dont j’ignore encore l’existence). Première constatation, ce PC est blanc. Comme Michael Jackson, voilà le lien est fait avec la photo. Seconde constation, il dispose de 2Go de RAM, ce qui est très bien pour les netbooks (littéralement … je l’ai déjà faite ?) de cet ordre de prix.

L’achat effectué, il a donc ensuite fallu déterminer son utilité. Ce qui n’a pas été une tâche aisée. Mais, au terme d’une réflexion intense d’une poignée de secondes, je décidai qu’il servirait à assouvir mes besoins compulsifs de tester tout et n’importe quoi, en termes de logiciels libres. Donc, une grosse sandbox, avec pour utilité secondaire d’être une machine d’appoint pour seconder mon PC principal, d’être plus portable.

Livré sous SUSE Linux Enterprise Desktop 10, j’eus tôt fait de supprimer cette distribution qui ne me semblait pas indiquée pour l’utilisation que je lui réservais (en sus d’une interface horriblement peu ergonomique, des fonctions non fonctionnelles…). La première tâche fut donc de décider d’une distribution à tester. Mon choix s’est vite porté sous Gentoo Linux, ce qui est incroyablement surprenant étant donné que j’en ai parlé plus tôt. Pour les ignorants dont j’ignore le but de la venue sur ce blog, Gentoo a pour particularité de compiler tout ce qui lui passe sous la main. Exit donc le très intuitif dpkg de Debian, pour installer un paquet, il faudra le compiler. Ce qui implique une durée d’installation sensiblement plus élevée, mais des performances à la hauteur, étant donné que tout est compilé localement. Le poney de bataille de Gentoo est donc l’optimisation du système. En plus de tout compiler, l’installation est manuelle, point ici de joli installeur graphique à la Ubuntu (que je respecte néanmoins beaucoup, car il est un exemple d’ergonomie, parfaitement dans l’esprit d’une distribution grand public), le système s’installe en ligne de commande, avec formatage, partitionnement, montage, récupération et installation des sources, configuration manuelle des premiers paquets (dont le célèbre /etc/make.conf , qui contient les options du compilateur et les USE Flags, mots-clés sélectionnés et définissant quelles fonctions des paquets doivent ou non être activées, ce qui est extrêmement pratique), configuration et compilation du premier noyau (avec une larme d’émotion), et je passe sous silence l’installation de choses triviales comme un gestionnaire de fenêtres. Dans la pratique, ces compilations sont simples à effectuer, car prises en charge par le système de gestion de paquets, Portage. Ainsi, côté utilisateur, on installe un paquet comme on le ferait sous toute bonne distribution (reposant sur dpkg), en une commande. Mais ensuite, il ne faut pas avoir peur de bidouiller les fichiers de conf dans /etc. Je ne vais toutefois pas chercher à égaler l’excellente documentation Gentoo, couvrant toutes les étapes de l’utilisation de cette distribution. Une fois cette introduction lue, mon choix devrait donc sauter aux yeux. Quoi de mieux qu’une distribution optimisable et intégralement paramétrable pour bidouiller sans limites son système ?

Ce que je n’avais initialement pas pris en compte, c’est le potentiel de calcul d’un processeur Atom. Pas le meilleur choix pour compiler, vous en conviendrez (si si). Sur ce point, je me rattraperai sur la PS3 (une fois le petit disque dur d’origine changé). D’ailleurs, je posterai peut-être dans un avenir incertain un article sur une course de compilation, bref encore un truc marrant. Je tiens à indiquer que l’installation (et toutes les manipulations effectuées ensuite) m’ont beaucoup apporté dans ma compréhension d’un système GNU/Linux. Pour suivre l’actualité palpitante de mes compilations, veuillez suivre ce lien. Non, je n’ai pas honte, oui j’ai osé faire ça. Et je le vis assez bien, pour tout dire.

Pour en revenir au sujet, j’ai expérimenté TrueCrypt, solution de chiffrage pour partitions. J’ai amèrement constaté que, même porté sous GNU/Linux, c’est un programme Windows. Le portage est d’ailleurs très incomplet, et, bien que j’aie pu crypter (quasiment à l’aveuglette, car il manquait initialement certaines options kernel, et, plutôt que de me les indiquer, le programme a préféré me sortir un message d’erreur générique, donc j’ai du recompiler 3 fois le noyau  pour activer les bonnes options) une des partitions d’une clé USB, le programme ne fournissait pas la moindre option pour effacer ce cryptage. Peu pratique, sachant que le mode portable (permettant de fournir un exécutable stand-alone pour décrypter à la volée la partition sans posséder TrueCrypt sur le PC d’accueil) n’existait tout simplement pas sous Linux. Ma solution fut donc de formater l’intégralité de la clé pour espérer écraser les headers de la partition cryptée. Pour le cryptage, je m’appuierai donc sur LUKS (solution de cryptage unifiée pour Linux). J’ai d’ailleurs découvert le site Drakonix, qui propose d’intéressants tutoriels, dont un pour crypter son système. Si vous êtes sages, j’écrirai peut-être un article d’ici là pour faire le point sur cette manipulation.

Sur ce même site, j’ai trouvé un intéressant document traitant de la création d’un live CD Gentoo, que je me suis empressé de suivre. Je ne peux malheureusement pas vous donner mon avis détaillé dessus, car je suis encore en train de compiler les paquets. Néanmoins, la méthode est intéressante.

Je dois vous laisser, une soucoupe volante vient de percuter ma voiture en faisant un créneau. La suite dans moins de 6 mois, j’espère.

PS : j’ai également les photos du Hellfest 2009 à trier et publier. C’est dire si j’ai du temps pour moi.

1 Comment »

décembre 22nd 2008

Random todolist

Premier article qui inaugure l’upgrade du blog sous WordPress 1.7 \o/ Techniquement, rien ou presque ne change sur le blog en lui-même, et c’est d’ailleurs l’objet de cette todolist : il faudrait que j’adapte le thème pour refléter les dernières fantastiques innovations possibles, notamment sur la présentation des commentaires (non pas que j’en aie à foison, mais bon, c’est toujours bon d’être à la pointe de la technologie du web lorsqu’on est un développeur PHP)

Donc, vu que je suis fatigué, j’ai déjà tout dit dans le premier paragraphe, c’est pas triste ça ? En même temps, me direz-vous, il est lassant de lire un article avec plein de lettres qui piquent les yeux pour en ressortir (DTC) avec une seule maigre information quasiment pas capitale pour la survie de l’humanité.  Mais, si je devais poster ce présent article, habillé seulement de son plus direct contenu, serais-je agréable à lire ? Si je reçois régulièrement moultes et moultes déclarations d’amour par mail, est-ce parce que les gens sont époustouflés de lire un code source à la con, ou bien parce que le rire leur apparaît comme la meilleure attitude pour faire croire qu’ils ont lu, compris et/ou aprécié l’article ?

Nous ne le saurons jamais.

No Comments yet »

décembre 6th 2008

Pixels§

Je sais ce que vous allez dire. Ou plutôt, je n’en ai pas la moindre idée et de toutes façons ça ne m’intéresse pas, mais j’ai semé le doute dans vos faibles esprits qui se sont immédiatement dit « OMG HAX ».

Quoi qu’il en soit, les plus pertinents auront remarqué non sans une once de vérité, qu’il y a longtemps que je n’avais plus écrit ici. La première raison étant que je n’avais toujours pas de connexion chez moi, et qu’étant donné que le réseau 3G passe assez mal par ici, j’avais la flemme d’écrire des pavés sur mon téléphone.

Mais que d’excuse, mes chers amis, cela fait maintenant 2 semaines que je peux à nouveau virevolter joyeusement sur le Réseau des Réseaux (profitez, vous aussi, on n’aura plus cette chance pour longtemps). Et aucun article ! Mais Foutrelama, me direz-vous, que vas-tu encore inventer, impie créature, pour encore une fois renier ton devoir ? C’est là que je suis censé répondre, mais j’utilise mon joker du TPPT.

Donc, ça, c’est fait… Ha, le monsieur du fond a une question ? Oui, je vous écoute. « pourquoi ce titre ? » Haha, mon bon monsieur, vous êtes bien stupide. Ou l’inverse, je ne sais plus. Il serait bien incroyable que mes mots aient une quelconque corrélation entre eux. Et pour preuve, ils en ont. Pour la petite histoire, hier soir, seul au fond de mon lit, terrorisé par ces connards de fantômes, j’ai eu une lumineuse idée, et croyez-moi, c’était une idée qui était lumineuse. En effet, il faut bien l’avouer, je regrettais de ne pas plus m’occuper de ce blog. Et j’avais depuis un certain moment envie de créer moultes et moultes expérimentations HTMListiques de tous genres. L’une d’entre elles était de jouer avec des pixels. Comme vous pouvez le constater, il est possible de m’émerveiller à moindre coût.

Ainsi, aujourd’hui, par un virulent moment de solitude, j’ai pris mon courage à demain, et, après être revenu dans le passé à cause de ce pitoyable jeu de mots, je me suis penché sur le problème, qui n’existait pas. Je pourrais passer des heures à me demander la raison qui m’a poussé à développer quelque chose d’aussi inutile, mais il me faudrait ensuite réfléchir à la raison de cette réflexion visiblement inutile. Nous omettrons donc toute considération logique de mon oeuvre.

Passons donc, car vous le voulez bien, aux choses sérieuses : voici une image :

Le fruit de mon travail, ne vous moquez pas je vous prie.

Le fruit de mon travail, ne vous moquez pas je vous prie.

C2QUOI LOL ? J’ai intitulé ça « cet homme ne sait pas quoi faire de son temps libre ». Très concrètement, à l’état initial est générée une matrice de points (le carré à gauche), avec pour chaque point une couleur aléatoire. Ensuite, un de ces points est déterminé au hasard, sous contrôle d’huissier. Sa couleur deviendra le centre d’une « cristallisation » des autres points. Concrètement, le programme effectuera un tri sur la matrice en fonction des couleurs, pour rapprocher les points de couleur semblable. Passons les détails techniques, une fois la matrice triée, elle est redessinée. Et ça fait un sublime dégradé ! Génial, non ? Ça sert à quoi ? À rien.

Vous pouvez tester vous-mêmes le script, si vous avez une confiance sans failles dans votre navigateur, à cette adresse. Je vous préviens tout de même : plutôt que de dessiner la matrice dans une image avec GD, j’ai trouvé amusant d’effectuer le rendu en XHTML pur. Ce qui résulte en 45 002 blocs à afficher (outre les calculs de tri sur le serveur), et, si l’on en croit les râles qui s’échappent de ma mémoire vive, ça picote ardemment le browser. S’il me vient un jour la folle envie de continuer ce script, je tâcherai de dessiner le rendu avec GD, ou bien d’utiliser l’AJAX pour calculer dynamiquement les matrices selon le point souhaité par l’utilisateur. Espérons, pour notre bien à tous, que j’aurai d’ici là trouvé d’autres occuppations plus intéressantes.

2 Comments »

novembre 21st 2008

Le tri des déchets pour les geeks

<?php

$sourceXML = <<<EOT
<?xml version="1.0" encoding="UTF-8" ?>
<trash>
    <waste type="glass" />
    <waste type="paper" />
    <waste type="organic" />
    <waste type="paper" />
    <waste type="glass" />
    <waste type="paper" />
</trash>
EOT;

$sheetXML = <<<EOT
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output indent="yes" method="xml" encoding="UTF-8"/>
    <xsl:template match="/">
        <xsl:apply-templates select="trash" />
    </xsl:template>
    <xsl:template match="trash">
        <trash>
            <xsl:apply-templates select="waste">
                <xsl:sort select="@type" data-type="text" />
            </xsl:apply-templates>
        </trash>
    </xsl:template>
    <xsl:template match="waste">
        <waste>
            <xsl:attribute name="type">
                <xsl:value-of select="@type" />
            </xsl:attribute>
        </waste>
    </xsl:template>
</xsl:stylesheet>
EOT;

$sourceDoc =new DOMDocument();
$sourceDoc->loadXML($sourceXML);

$sheetDoc =new DOMDocument();
$sheetDoc->loadXML($sheetXML);

$proc = new XSLTProcessor();
$proc->importStyleSheet($sheetDoc);

$resultDoc = $proc->transformToDoc($sourceDoc);
$resultDoc->formatOutput = TRUE;

echo $resultDoc->saveXML();

?>

OUI je sais, j’ai déjà publié ça sur Facebook. Mais je pense que ça a plus sa place ici, tout compte fait. Et puis Facebook indexe mon flux RSS, donc ça revient au même.² Ceci dit, il est bien plus agréable de trier les déchets que les dates, croyez-moi.

No Comments yet »

septembre 13th 2008

Stupre

Spéciale dédicace à Nyu² qui overkiffe mes articles, tavu.

PS : ce billet a été écrit sous une insoutenable torture physique et mentale

3 Comments »

juillet 27th 2008

PHAT CONCOURS §§

Et oui très cherz zamis, voici venu le grand concours sur gordontesos.com ! Le principe est simple : j’ai fort astucieusement dissimulé à vos petits zieux un easter egg sur mon blog. A vous, public fort dévoué, de le dévoiler au grand monde !

Bon déjà c’est pas le nouveau sélecteur de page hein, mais continuez à chercher. Les réponses sont admises uniquement en commentaires ou par papier vierge envoyé à une random adresse. Le gagnant remportera un stagiaire §§!§1oneone

5 Comments »

juillet 22nd 2008

Message aux poneys qui nous lisent…

Faut surtout pas manger des champignons phalliques, ça peut vous tuer mes zamis ! :o

du genre, ça, c’est over-mal :

Ce n'est ni un caillou, ni un phallus

Ce n'est ni un caillou, ni un phallus

Edit : zomg j’ai oublié de finir mon article. Bon tant pis, ilénul de toutes façons.

1 Comment »

juillet 19th 2008

grand moment de solitude

« met la webcam, tiens »

« non »

No Comments yet »

juillet 15th 2008

Conseil du jour

N’allez surtout pas là : http://www.shenron.fr , c’est un conseil d’ami.

afk me planquer dans des trous pour le principe

No Comments yet »

Next »