Hell
N'oubliez pas de passer votre souris sur l'image.
Un développeur s'est craqué sur celui-là !
Un développeur s'est craqué sur celui-là !
Hier soir donc, je me lance dis que ce serait bien que j'aille lire tous ceux que je ne connais pas, en commençant par le numéro 1, jusqu'à ce que j'arrive à une BD que je connais déjà. Je lis donc le 1, je passe ma souris dessus, je clique sur "Next", ça charge le 2, je le lis, je passe ma souris dessus, ... J'ai été jusqu'au numéro 59 comme ça ! Je me suis rendu compte que je perdais beaucoup de temps à charger les pages, et à devoir passer ma souris sur la BD à chaque fois.
C'est là que j'ai commencé à raisonner en geek ! J'ai ouvert mon "gedit" (et oui, je suis sur Ubuntu maintenant quand je suis chez moi), et j'ai commencé à coder un petit programme en Java qui m'éviterait de charger les pages une par une : en gros, ce programme affichait chaque page web (entière !) de xkcd, en-dessous de la précédente. Même si ça m'évitait de cliquer sur "Next", ça avait pas mal d'inconvénients :
- Je devais toujours passer ma souris sur chaque BD.
- Ça prenait un temps fou à loader (embarquer 200 pages web complètes dans une seule, l'une en-dessous de l'autre...).
- Je passais beaucoup trop de temps à faire défiler la page pour passer d'une BD à l'autre (car il y a pas mal de choses en-dessous de la BD sur une page xkcd).
- Plus quelques soucis de hauteur à adapter selon la taille de la page, pas facile avec des <iframe>
Bref, ce programme ne me faisait pas gagner en efficacité, bien au contraire. Du coup j'ai réfléchi à ce que je voulais obtenir : simplement ce qui est propre à chaque BD (le titre, le dessin, et le "mouseover text"). Je voulais aussi essayer d'extraire le "mouseover text" afin de pouvoir le lire en-dessous de chaque BD, sans avoir à passer ma souris dessus. Par exemple, si je voulais lire les épisodes 700 à 720, je voulais obtenir ce résultat.
Le lendemain matin, j'ai donc installé Eclipse sur ma Ubuntu,
et j'ai profité du mauvais temps pour coder toute la journée !
et j'ai profité du mauvais temps pour coder toute la journée !
Je suis arrivé assez rapidement à coder quelque chose qui me donnait le résultat que je voulais. Mais bon, c'était un programme que pouvais seulement faire tourner localement, sans paramètres (même les numéros des épisodes étaient dans le code), et sans interface graphique. Alors je me suis dit que j'allais essayer de le transformer en quelque chose que je pourrais partager, si jamais ça intéressait quelqu'un d'autre ! Et bien transformer un programme "qui tourne" en un programme un peu "propre" et réussir à le mettre en ligne, ça prend du temps ! Pour arriver à mes fins, je me suis plongé dans :
- Les layout managers : je retourne voir cette page à chaque fois que je code une interface graphique en Java.
- Les threads : pour éviter que l'interface graphique soit "gelée" pendant une longue opération, il faut qu'elle soit effectuée dans un thread différent de celui qui gère les événements graphiques.
- Les resource bundles : pour traduire mon application en anglais et en français.
- Java Web Start : pour publier mon application sur le web.
- La signature des fichiers JAR : requise car mon application requiert des permissions spéciales (réseau et fichiers) pour tourner sur le client.
Voila à quoi ressemble mon application sur ma Ubuntu (ordi perso en français).
Et voila la même application sur Windows (ordi de taf en anglais).
Et enfin, voila à quoi elle ressemble sur le Mac français d'Anaïs.
Petite astuce : pour que le "look and feel" d'une application Java s'adapte au "look and feel" du système d'exploitation, il suffit d'une ligne dans le
main()
:UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Bon maintenant, passons aux choses sérieuses ! Vous pouvez aller sur http://doiop.com/xkcd si vous voulez l'essayer, mais je vais aussi essayer de l'insérer sur mon blog, ce serait l'idéal. Donc normalement, vous devriez voir un bouton "Launch" ci-dessous. Si en cliquant dessus, votre navigateur vous demande avec quel programme ouvrir le fichier, choisissez "Java Web Start" (proposé par défaut normalement). Ensuite, vous aurez sûrement un warning comme quoi j'ai auto-signé mon certificat de sécurité... Bon bah là, choisissez de continuer si vous me faites confiance ! Si vous voulez quand même vérifier un minimum, checkez s'il y a marqué "alex" dans les détails du certificat. Une fois que vous validez normalement c'est bon !
Enfin, pour terminer, si vous êtes arrivés jusque-là, c'est sûrement que ça a dû vous intéresser un minimum, alors vous avez gagné les liens vers le code source !
- XkcdRetriever.java : fichier principal, étend
JFrame
, contient lemain()
. - XkcdWebWorker.java : thread qui va chercher le contenu en arrière-plan, et qui construit le code HTML final, étend
SwingWorker
. - GUIUncaughtExceptionHandler.java : classe qui sert à afficher les exceptions dans une fenêtre graphique.
- XkcdRetrieverBundle.properties : resource bundle "root" (anglais).
- XkcdRetrieverBundle_fr.properties : resource bundle français.
Pour conclure, je crois qu'on peut mentionner qu'il y a 24h je m'étais arrêté à l'épisode 59, pour pouvoir développer une manière "plus efficace" de lire les épisodes suivants... Résultat : j'en suis toujours au numéro 59 !
Bon là je ne peux pas ne pas laisser un commentaire. Il n'y a vraiment que toi pour passer une journée à coder un truc alors que pendant tout ce temps tu aurais eu le temps de lire tous les épisodes. Je crois que tu es définitivement passé du côté geek de la force.
RépondreSupprimer(Et moi pendant ce temps, j'installe Windows service pack 3 (grâce à Internet explorer) parce que mon ordi n'avait que le service pack 1... Oui, c'est bon, tu as le droit de te moquer !!!)
Bisous
C'est complètement l'esprit ouais : j'aurais eu le temps de tous les lire. Mais bon, d'un autre côté, je n'avais pas mis trop longtemps à coder une version qui me donnait ce que je voulais. Ce qui m'a pris du temps c'est de la rendre un peu plus user-friendly et de la mettre en ligne.
RépondreSupprimerFélicitations pour le service pack 3 en tout cas, sans même que je te le dise cette fois !
alors moi j'ai lu en diagonale, j'ai rien compris aux explications de geek, et je me suis donc concentrée sur les BD pour comprendre leur esprit humoristique, mais je n'en ai compris aucune...
RépondreSupprimerbref, mon niveau d'Anglais est encore trop faible pour me détendre avec ces BD...quand mets-tu la version traduite sur ton blog?
Pour moi, c'est pire que le peau rouge mais je félicite celui qui pige.
RépondreSupprimersoeurette, la version sous-titrée français est sur http://xkcd.free.fr si tu as du mal avec l'anglais (les traductions se font de façon collaborative, et chacun peut les améliorer). Il y manque une page avec tous les textes des BD, comme ce qu'Alex propose ici, je m'y attelle prochainement...
RépondreSupprimer