Peut être en avez-vous déjà entendu parler, vu des bouts de code étranges...
Une quine est un programme qui s'écrit lui-même sur la sortie standard. Autrement dit, l'exécution du programme affiche le code source du programme.

Quelques règles structurent ce jeu à priori trivial, la principale étant bien sûr l'interdiction d'accéder au fichier contenant le code source ! Y a des limites à la facilité, namého.
Une fois muni de cette contrainte, le jeu devient nettement plus intéressant.
L'approche de base étant bien entendu de mettre le programme dans une variable de type chaîne de caractères. Le problème ? Que met-on au moment de redéfinir la variable dans le String ? Si on recopie le programme, on obtient un programme de taille infinie ! (e.g. var i:String="var i:String=\"var i:String="). Il faut donc ruser pour écrire sa quine ! Et n'abandonnez pas : si votre langage est Turing Complet (comme la quasi totalité des langages), vous pouvez faire une quine avec.

Ci-dessous, quelques exemples de quine.

Comme souvent, l'article du jour part d'une interrogation.
Imaginons que nous disposions d'un ensemble d'articles en base de données.
Pour ne pas alourdir les accès au serveur SQL, les logs de consultation sont stockés dans un fichier texte, par exemple en serializant un array avec clé = ID et valeur=Nombre de vues. Autrement dit, on dispose de deux données a priori indépendantes :

  • Le titre et l'ID en base de données
  • L'ID et le nombre de vues en fichier texte.

Vous voyez venir le problème gros comme une maison : comment connecter ces deux jeux de données pour, par exemple, récupérer les 10 articles les plus vus ?
Une rapide réflexion vous amènera peut-être à considérer la fonction IF imbriquée n fois, mais ce n'est bien évidemment pas viable.

En fait, mySQL fournit deux fonctions pour ce genre de questionnement : FIELD et ELT.

Si vous faites un peu de programmation Flash en AS3, vous aurez remarqué que la classe Array, certes bien fournie, n'est pas parfaite : certaines opérations de base ne sont pas intégrées dedans, ce qui oblige à recoder à chaque fois des fonctionnalités aussi simples que la suppression d'un élément ou son clonage.

En fait, on peut faire mieux : en créant une classe qui hérite de Array, on peut ajouter toutes les méthodes nécessaires. La seule restriction étant qu'on ne peut plus utiliser la syntaxe des crochets pour déclarer un nouvel élément (comme [1,2,3]).
Dans mon cas j'ai nommé cette classe ArrayPlus, le code est juste en-dessous.

Présentation : SkyRaider est un nouvel auteur qui réalisera lui aussi des compilations de liens sur un rythme plus ou moins régulier.

On commence ce premier post avec un petit lot d'images insolites du net :

Une fois n'est pas coutume, profitons de l'occasion historique qui se présente à nous en analysant la puissance de l'image. Vous allez découvrir seize photographies qui ont fait le tour du monde à leurs époques, et qui, de nos jours encore, continuent d'orner nos manuels d'histoire ou de hanter nos publicités. Tous ces clichés ont un point commun : représenter une émotion forte dans un contexte historique difficile ou novateur. Du premier pas sur la Lune à la guerre du Vietnam en passant par le mur de Berlin, des photographies puissantes qui restent vecteurs de frissons d'angoisse ou de joie.

Note : premier billet à quatre mains de ce blog, rédigé en collaboration avec Lagile que vous retrouverez aussi au poste de censeur sur Omnilogie.