Archives par étiquette : Code

Firefox

Extraire des données du cache Firefox

La fonction about:cache de Firefox (à taper dans la barre d’adresse) permet d’afficher les éléments qui ont été mis en cache. Un jour j’ai eu à récupérer un fichier CSS que j’avais supprimé par erreur mais qui était toujours dans le cache. J’ai donc pu voir mon fichier mais en affichage hexadécimal :

Affichage d'un fichier du cache Firefox

Affichage d'un fichier du cache Firefox

Si on fait « Fichier » > « Enregistrer sous… » on peut enregistrer ces données dans un fichier (nomé Cache entry information.xhtml par défaut). J’ai donc écrit un outil qui permet d’extraire les données en affichables pour les écrire en binaire. Cet outil est écrit en PHP-CLI (Command Line Interface) et s’utilise comme ceci :

php cache2bin.php "Cache entry information.xhtml" "test.gif"

Vous pouvez le télécharger à cette adresse si cela vous intéresse :

cache2bin.txt

Pour l’exécuter il faudra surement le renommer en .php et ajouter les droit d’exécution sur Linux.

Personnalisation

Si vous avez besoin de faire la même chose mais pour un fichier ne provenant pas du cache de Firefox, ce programme peut marcher en l’état, mais si ce n’est pas le cas, il n’y aura sûrement que deux choses à faire :

  1. Remplacer $ereg par l’expression régulière correspondant à votre fichier.
  2. Remplacer $data_per_line par le nombre d’octets affichés par ligne.

Par exemple pour un fichier généré par la commande Linux hexdump on aurait $data_per_line qui reste à 16 et pour $ereg :

$ereg = "/[0-9a-f]{8}: ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) - ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2}) ([0-9A-F ]{2})/";

Licence

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL

Google Reader

Google Reader : ouvrir les nouveaux éléments en onglets

Pour quoi faire ?

J’utilise Google Reader pour suivre mes flux RSS préférés. Mais pour certains je suis sûr d’aller voir le contenu sur le site. C’est par exemple le cas pour lelombrik.net, j’irai forcement voir chaque nouvel item puisqu’il n’y a qu’un extrait dans le flux. Google Reader ne permettait pas de base d’ouvrir chaque nouveauté dans un nouvel onglet.

Avec quoi ?

Pour combler ce manque j’ai écrit un script Greasemonkey. Pour ceux qui ne connaissent pas cette extension voici un article qui décrit le principe général.

Une grand partie du script a été en grande partie réécrit récemment. Cette réécriture a permis de corriger des vieux problèmes comme l’incompatibilité avec la vue étendue. Cela s’est fait facilement puisqu’une partie du remaniement concernait l’implantation du framework jQuery qui a tenu ses promesses : « Write less, do more ».

Par contre je n’ai pas réussi à utiliser :

$('#mark-all-as-read').click();

J’ai du utiliser une fonction pour simuler le clic sur un élément :

function oau_fireClick(id)
{
	button = document.getElementById(id);
	evt = document.createEvent('MouseEvents');
	evt.initEvent( 'click', true, true );
	button.dispatchEvent(evt);
}

Ce problème provient sûrement d’une limitation de Greasemonkey. Si quelqu’un sait comment remédier je suis preneur. 😉

Comment ça marche

En ce qui concerne le script, il ajoute un bouton entre deux autres déjà existants :

Screenshot du script

Screenshot du script

Quand on clique sur ce bouton :

  1. Les items à lire sont ouverts dans nouveaux onglets.
  2. Les items ouverts sont marqués comme lus.

Installer

Installer le script à partir de Userscripts.org

Twitter

Recevez vos flux RSS Twitter avec Google Reader

Cet outil ne fonctionne plus.

Les flux RSS Twitter sont protégés par des mots de passes, ce qui peut être gênant si votre agrégateur de flux ne supporte pas l’authentification. C’était mon cas avec Google Reader.

J’ai écrit un « proxy » de flux qui ne nécessite pas d’authentification au niveau du protocole HTML. L’authentification sur mon proxy se fait par un paramètre GET et le proxy s’authentifie sur Twitter.

Il peut sembler risqué de donner un mot de passe à un site aussi peu connu qui le mien et c’est normal puisque ça l’est ! Le nom d’utilisateur et le mot de passe sont codés dans le paramètre key, il n’est pas inscrit ailleur.

Je peux décoder vos mots de passes sans problème à partir des logs Apache. Mais sérieusement j’en ai rien à faire de vos comptes Twitter ! Par contre le code source de cet outil ne sera pas révélé pour que le codage reste sûr. Donc même si votre key générée tombe entre les mains de personnes mal intentionnées ils n’auront accès qu’à votre flux via mon proxy.

L’outil est ici:

Twitter Feeds Proxy

Si vous avec des doutes sur la sécurité de mon outil, le mieux est de ne pas l’utiliser. 😉

2SRT2ASS

Fusionnez deux fichiers SRT avec 2srt2ass

Pour travailler mon anglais je voulais pouvoir utiliser deux fichiers SRT en même temps : un en VO et l’autre en français pour avoir la traduction instantanée. Mes lecteurs vidéos préférés (Media Player Classic et VLC) ne permettant pas ça : j’ai créé un petit outil PHP : 2SRT2ASS (ou Two SRT to ASS).

Il analyse les fichiers SRT que l’on lui envoie pour les ressortir fusionnés en un fichiers ASS. Voici un petit apperçu de ce que ça donne avec Knight Rider 2008 (no comment sur la série 😐 ) :

Aperçu de deux fichiers SRT fusionnés

Aperçu de deux fichiers SRT fusionnés

Cet outil fonctionne très simplement :

  1. Vous lui envoyez les deux fichiers.
  2. Vous cliquez sur « Envoyer » et il vous renvoie les fichiers fusionnés.

Le fichier généré est un fichier SSA/ASS. C’était le seul format qui permettait d’avoir une mise en forme (en haut et en bas) tout en étant basé sur les timestamps (comme pour les fichiers SRT).

A noter aussi que VLC semble mal digérer les ASS mais Media Player Classic n’a aucun problèmes.

Si vous voulez vous aussi utiliser cet outil, il est disponnible avec ses sources ici :

2SRT2ASS

PS : Si vous souhaitez attrendre le support de cette fonction dans VLC, une discution est en cours depuis 2006…

Convertisseur

Convertisseur BIN/DEC/HEX

Je vais encore vous présenter un vieux projet.

Aperçu du convertisseur

Ce petit outils permet de convertir instantanément en décimal, binaire ou hexadécimal. Il suffit d’entrer un nombre dans un des 3 champs et les deux autres sont directement mis à jour.

Ce programme est écrit en JAVA et nécessite donc la Java Runtime Environnement. Si vous voulez effectuer des modifications, il vous faudra l’IDE Netbeans.

Exécutable JAR du convertisseur

Projet Netbeans

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL

Minuterie

Minuterie Web

Pizza + Geek = Minuterie Web 🙂

Si comme moi vous restez devant votre PC pendant que votre pizza est en train de cuire dans le four, j’ai l’outil qu’il vous faut ! Une petite minuterie toute simple (en XHTML/CSS/Javascript) :

http://pas-bien.net/divers/decompte/

Bien sûr vous pouvez recopier et modifier les sources à votre guise. Aussi il suffit d’enregistrer la page pour avoir la minuterie sur votre disque dur (index.html contient tout).

Nombres premiers

Liste des nombres premiers

Je sais pas pourquoi mais les nombres premiers m’ont toujours un peu fascinés. J’avais donc réalisé il y a un certain temps, un petit script Python qui cherche tous les nombres premiers. Ca sert à rien mais quelqu’un d’autre s’amusera peut être avec :

from math import sqrt;
def tester (aTester):
	global tab
	index = 0
	racine = sqrt( aTester )
	while tab[index] <= sqrt( aTester ):
		index += 1
		if( (aTester % tab[index]) == 0):
			return 0
	tab += [aTester]
	print aTester
	return 1
tab,mod,max = [2,3,5,7],10,1
print 2
print 3
print 5
print 7
while (mod != max):
	tester(mod + 1)
	tester(mod + 3)
	tester(mod + 7)
	tester(mod + 9)
	mod += 10

Conjecture de Goldbach

Aussi quelqu’un m’a parlé un jour de la conjecture de Goldbach. Voici ce qu’en dit l’article Wikipedia :

La conjecture de Goldbach stipule que tout nombre entier pair strictement supérieur à 2 peut être écrit comme la somme de deux nombres premiers (le même nombre premier pouvant être utilisé plusieurs fois). C’est l’un des plus vieux problèmes non résolus de la théorie des nombres et des mathématiques.

J’ai donc encore fait un script Python. Il s’arrêtera quand il ne trouvera pas de somme de deux nombre premiers pour un nombre pair.

from math import sqrt;
def MaJpremiers ():
	global tab,i;
	index,suivant = 0,tab[ len(tab) - 1 ] + 2;
	while (tab[ len(tab) - 1 ] <= i):
		while tab[index] <= sqrt( suivant ):
			index += 1;
			if( (suivant % tab[index]) == 0):
				suivant , index = suivant + 2 , 0;
		tab,suivant,index = tab + [suivant] , suivant + 2 , 0;
	return 1;
def testSomme ():
	global tab,i;
	a,b,t = 0,0,len(tab);
	for a in range(0,t):
		for b in range(t-1,a-1,-1):
			if ((tab[a]+tab[b])==i):
				print i,"=",tab[a],"+",tab[b];
				return 1;
			elif ((tab[a]+tab[b])<= max)):
	i += 2;
	MaJpremiers();

Limites

Ces scripts n’iront pas plus loin que ce que les super-calculateurs ont démontré jusque là. La simplicité du code fait que ces scripts vont être de plus en plus lent au fur et à mesure qu’ils tournent à cause des listes de premiers qui s’agrandissent. Pensez donc à faire Ctrl+C pour stopper ces scripts puisque les nombres premiers sont réputés infinis et la conjecture de Goldbach n’a toujours pas été infirmées.

Creative Commons GNU GPL

Programmes sous Creative Commons GNU GPL

Sudoku

Résolveur de Sudoku en C++

Je souhaite vous faire profiter d’un petit projet personnel que j’avais réalisé en 2006 : un résolveur de sudoku (9×9) en C++. Vous trouverez dans l’archive :

  • les sources,
  • quelques grilles,
  • le fichier de projet Dev-C++.

Les grilles à résoudre sont représentée dans les fichiers par une suite de chiffre qui peuvent être mis en forme (les caractère qui ne sont pas numériques sont ignorés, les zéros représentent les inconnues). Les deux exemples suivants sont deux représentations de la même grille :

  • 907500006006009007001002000
    000004130000000000038090000
    004700200500400800070003605
  • 9 0 7|5 0 0|0 0 6
    0 0 6|0 0 9|0 0 7
    0 0 1|0 0 2|0 0 0
    -----------------
    0 0 0|0 0 4|1 3 0
    0 0 0|0 0 0|0 0 0
    0 3 8|0 9 0|0 0 0
    -----------------
    0 0 4|7 0 0|2 0 0
    5 0 0|4 0 0|8 0 0
    0 7 0|0 0 3|6 0 5

Je sais qu’il existe déjà plein de résolveurs sur le Web mais celui là, il pense comme moi 🙂 : il applique mes méthodes de résolutions et il se trouve bloqué au mêmes endroits que moi sur les grilles complexes…

Télécharger le résolveur (version 0.0.1)

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL

Google Reader

Filtrez vos flux RSS avec ce qui vous intéresse

Pour quoi faire ?

J’utilise pas mal les flux RSS pour me simplifier certaines choses. Comme par exemple l’arrivée d’un nouvel épisode d’une des séries que je suis. Un de mes « problèmes » était que je recevais des actualités dont je n’avais rien à faire. Je me suis donc créé un petit outil PHP qui récupère les flux RSS de différents sites, les filtre et les regroupe en un seul.

Comment ça marche ?

Il y a deux moyens d’utiliser cet outil.

Première utilisation

Avec des paramètres GET :

  • feeds : la liste des flux séparés par une virgule.
  • filters : la liste des filtres d’inclusions aussi séparés par une virgule.
  • excludes (optionnel) : encore une liste séparée par des virgule pour forcer l’exclusion d’items qui sont passés.
  • debug  (optionnel) : pour recevoir dans le flux généré les erreurs qui se sont produites.

Exemple :

http://example.com/rss-filter/rssfilter.php?feeds=http://www.toto.com/rssfr.xml,http://www.tata.fr/rss.xml&filters=CSI,CSI Miami,House&exclude=Desperate&debug=1

Deuxième utilisation

Avec un fichier XML dans le sous dossier files qui contient la configuration. Les filtres sont des expréssions régulières. Exemle de fichier XML :

http://example.com/rss-filter/files/series.xml

<!--?xml version="1.0" encoding="UTF-8" ?-->
 
	[EZTV+VTV+subs] Filtrés
	Séries : Dexter, Dirty Sexy Money, Fringe, Grey's Anatomy, Heroes, House, How I Met Your Mother, Lost, My Name Is Earl, Naruto Shippuuden, The IT Crowd, The United State Of Tara, True Blood, Weeds.
 
		<!-- sous titres -->
		http://www.tvsubtitles.net/rssfr.xml
		http://www.sub-way.fr/rss.xml
		http://feeds.feedburner.com/seriessub
		<!-- séries -->
		http://www.mininova.org/rss.xml?user=VTV
		http://www.mininova.org/rss.xml?user=EZTV
		<!-- naruto -->
		http://www.dattebayo-fr.com/rss-news.php
 
		/\bDexter\b/i
		/\bDirty Sexy Money\b/i
		/\bFringe\b/i
		/\bGrey'?s? Anatomy\b/i
		/\bHeroes\b/i
		/\bHouse\b/i
		/\bHow I Met Your Mother\b/i
		/\bLost\b/i
		/\bMy Name Is Earl\b/i
		/\bNaruto Shippuuden\b/i
		/\bThe Mentalist\b/i
		/\bThe IT Crowd\b/i
		/\bSons of Anarchy\b/i
		/\bUnited States Of Tara\b/i
		/\bTrue Blood\b/i
		/\bWeeds\b/i
 
		/\bCrooked House\b/i
		/\bDesperate Housewives\b/i
		/\bx264\b/i

Le flux correspondant sera disponnible comme ceci :

http://example.com/rss-filter/rssfilter.php?file=series

http://example.com/rss-filter/rssfilter.php?file=series&debug=1 (pour avoir le debug en plus)

Installation

Votre navigateur risque d’essayer de parser le fichier rssfilter.txt en tant que flux RSS.

Posez le fichier rssfilter.php sur un serveur Web qui dispose de :

  • PHP 5,
  • la fonction file_get_contents,
  • L’extension SimpleXML.

Télécharger rssfilter.php

Questions ?

En cas de problème n’ésitez pas à me poser des questions dans les commentaire 😉

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL

Taquin

Résolveur de taquin

Je ne sais pas si quand vous vous lancez dans une énigme et que vous ne trouvez pas la solution, vous finissez par juste vouloir la réponse pour passer à autre chose. Ce fût mon cas récemment avec : l’énigme 135 du jeu Professeur Layton et l’étrange village sur Nintendo DS.

Quand je suis bloqué comme ça, j’aime pas non plus qu’on me donne la solution bêtement. Je préfère un compromis (un peu geek certe) : faire un programme qui va résoudre l’énigme à ma place.

Solution

Pour ceux qui viennent de Google et qui en ont rien à faire de mon code, la liste des étapes pour résoudre l’énigme est là :

Solution énigme 135

Pour comprendre la représentation du taquin :

Énigme 135

<->
<><>@
12^@
34v@
<><>@

Code

Pour ceux qui sont intéressés par comment j’ai fait, voici une brève explication :

  1. Il y a trois listes importantes : celle des taquins générés, celle des taquins à explorer et celle des taquin qui sont dans la position finale (juste avant la sortie).
  2. On insère la position de départ dans les listes.
  3. On explore : c’est à dire qu’on génère tous les taquins possibles à partir d’un autre.
  4. Les nouveaux taquins ne doivent pas correspondre à  un autre déjà existant. Si ce n’est pas le cas, on ajoute le nouveau à la liste des taquins trouvés et à celle à explorer.
  5. Si certains sont en position finale on les ajoute à la liste de taquins finaux.
  6. Si il y a un taquin (ou plus) dans la liste à explorer, on prend le premier et on retourne à l’étape 3.
  7. Quand il n’y a plus rien à explorer, c’est qu’on a fait le tour des possibilités de mouvements. On prend le premier des finaux et on affiches les étapes qui ont conduit à sa création.

Défauts du scripts :

  • La représentation du taquin est un tableau de caractère ce qui n’est pas très propre mais ça marche.
  • La méthode n’est pas très intelligente, c’est du brute force qui tâche mais pour une fois j’ai fait un brute en itératif et non en récursif.
  • Les solutions ne sont pas forcement les plus courtes.

Pour le dernier point, j’essairai d’y remédier si j’en ai la motivation car ça va prendre du temps (pour rien, ça on peut le dire).

Voici la source du programme, c’est du python.

enigme-135.py

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL