MP#6 – Question d’organisation

Pourquoi ne retrouve-t-on jamais ce que l’on range à un endroit bien spécifique pour être certain de le retrouver plus tard ?

Une heure perdue pour finalement ne pas retrouver quatre malheureuses vis de soutient d’une étagère…Alors qu’en montant le meuble, je m’étais dit, je vais les ranger là, comme ça, le jour où l’on voudra mettre l’étagère, je saurai où elles se trouvent…Je cherche encore !

Trad : Du code propre avec les micro-plugins jQuery

Cet article est la traduction d’un article publié sur le blog de Jim GARVIN.

Beaucoup de programmes javascripts nécessitent l’exécution de code dès lors que le chargement d’une page est arrivé à terme. jQuery rend facile le branchement à cet événement et beaucoup de développeurs l’utilise comme tel :

1
2
3
4
5
6
7
8
9
10
$(document).ready(function(){
	// code du programme... tout est là
 
	var term = searchParameter();
 
	if (term) $("#search_form input[type=text]").val(term).addClass("focus")
 
	// .. 200 lignes plus loin ...
	// ah, voici le code que vous devez modifier
});

Ce type de code est très certainement suffisant pour de petites applications, mais dès lors que vous avez quelques centaines de lignes de code qui grouillent, il est fort probable que vous commenciez à souffrir pour travailler. Vous pouvez essayer de ponctuer le code de commentaires – nous savons tous que ce n’est pas idéal – ou encore découper le code en plusieurs appels de $document.ready(), les uns après les autres. Pas très propre…

Une façon d’obtenir un plus haut-niveau de compréhension de votre code consiste à sortir les sections sans rapport dans leurs propres fonctions pour ensuite les appeler depuis la fonction d’initialisation :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$(document).ready(function(){
	initializeSearchForm();
	initializeRowPointer();
	initializeThumbnailSizeSlider();
	initializeQueueStatuses();
	// et cetera ...
});
 
function initializeSearchForm() {
	var term = searchParameter();
	if (term) $("#search_form input[type=text]").val(term).addClass("focus");
};
 
// et toutes les autres fonctions ...

Désormais, nous avons une vue d’ensemble claire de ce qui se passe au chargement de la page et nous pouvons aisément accéder à telle ou telle fonction pour voir son fonctionnement et lui apporter des modifications. C’est mieux, et c’est comme celà que je procède depuis longtemps, mais en utilisant le patron de conception de Ryan McGeary, nous pouvons rendre ce code encore plus révélateur de ce qu’il fait et améliorer sa maintenabilité en embraçant le style jQuery.

Transformation en micro-plugin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$(document).ready(function(){
	$("#search input[type=text]").searchForm();
	$("#orders").selectableRows();
	$("#slider").thumbnailSizeSlider("td.picture img");
	$("#queue_statuses .status").queueStatus();
	// et cetera...
});
 
// micro-plugin
$.fn.searchForm = function() {
	var term = searchParameter();
	if (term) this.val(term).addClass("focus");
	return this;
};
 
// et tous les autres micro-plugins...

En réécrivant nos fonctions en tant que plugins jQuery, nous bénéficions de nombreux avantages par rapport à la première approche :

  • Nous déplaçons le sélecteur dans la section d’initialisation où nous pouvons facilement le retrouvez et le modifier. Cela nous donne une meilleure vision de ce que le code fait, tout cela sans effort.
  • C’est un plugin jQuery ! N’importe quel autre développeur habitué à jQuery et ne connaissant pas votre code, pourra immédiatement l’appréhender et se l’approprier,
  • C’est un plugin jQuery ! C’est facilement réutilisable, même si ce n’est pour l’instant pas l’objectif.

Si vous n’aviez jamais écrit de plugin jQuery auparavant, ceci devrait vous convaincre de la simplicité d’implémentation. Il n’est pas nécessaire de comprendre tous les méandres d’un framework. Vous adjoignez simplement une fonction à jQuery.fn et accédez à l’objet courant grâce à this. C’est la simplicité du système de plugins jQuery qui rend les micro-plugins possibles.

Quelle est cette pitrerie !? Un plugin, tout simplement !

Faisons tout de même bien la distinction entre un plugin et un micro-plugin. La différence réside principalement dans l’intention de l’auteur qui rédige le code. Généralement, les plugins jQuery sont écrits prioritairement pour être réutilisables et partageables. À l’inverse, les micro-plugins sont créés pour rendre le code local d’une application plus clair et plus facilement maintenable, sans intention de partage et/ou de réutilisation.

Ainsi, si vous réutilisez un micro-plugin dans un autre projet, et que ce plugin devient un outil souvent utile, pourquoi pas ne pas le documenter, le partager et le considérer comme plugin à part entière !

Note du traducteur : une erreur de traduction, une approximation disgracieuse, une suggestion, …, utilisez les commentaires pour me soumettre votre proposition et ainsi améliorer cette traduction ! Merci !

Note bis : les emphases sont de mon fait.

Ghostbusters version vocale

Belle prestation :

Trouvé sur Blogeek.ch »

Un serpent nommé Python

Et si je me mettais à Python ?

Cela fait un moment maintenant que je cherche un langage de programmation sur lequel me fixer qui me permettrait de développer des applications multi-plateformes. Il y a bien Mono, adaptation de .NET pour Linux, Java, ou encore descendre à un plus bas niveau avec C/C++. Il est aussi possible de passer par des outils comme Lazarus, réplique de Delphi, qui pourrait fortement me tenter, vu que j’ai déjà une connaissance de Delphi.

Oui mais, finalement, il n’y a rien qui me convainc réellement…

Et puis, je suis tombé sur un article (je ne sais plus lequel malheureusement…) qui décrivait un peu ce qu’était Python. Même si je connaissais au moins de nom le langage, je n’y avais jamais apporté plus d’attention que cela…Erreur !

Langage fortement typé, dynamique et orienté objet grâce auquel il est possible d’écrire des scripts simples pour Linux comme construire des applications lourdes avec une interface graphique ainsi que de créer des sites Internet ! Que demande le peuple ? Un langage réunissant les deux domaines qui font tourner le monde…de l’informatique. Un langage à apprendre plutôt que deux, et vous développez à loisir du client lourd aussi bien que du client léger. Et du client lourd, multi-plateforme ! En ce début de 21ème siècle il me semble important de ne plus se cantonner à Windows mais bien de travailler dans une logique d’ouverture et d’élargissement.

Et d’ailleurs, j’ai déjà commencé mon auto-formation en attaquant la lecture du livre de Swaroop C H, « A byte of Python« , traduit dernièrement en français.

Affaire à suivre…

Albulle 1.1.1

Voilà un long moment qu’Albulle n’avait pas subit de mise à jour.

Cette version 1.1.1, mineure, corrige un bogue (FS#4) et apporte une modification côté thème (FS#8) :

  1. FS#4 : le problème d’encodage de l’arborescence dans le cas d’une installation sur un serveur dont le système de fichier est en UTF-8 ne devrait plus être,
  2. FS#8 : vous pouvez désormais utiliser le bloc conditionnel « MODE_GALERIE » dans tous les patrons, ainsi que le nouveau bloc « ACCUEIL« , actif lorsque le visiteur se trouve sur la page d’accueil de vos galeries.

Starcraft 2 ne sera pas jouable en LAN

Je pense que la nouvelle a fait le tour de la communauté des joueurs et plus particulièrement de celle des inconditionnels fans du premier opus…dont je fais partie.

Il ne sera pas possible de jouer en réseau local à Starcraft 2 sans passer par Battelnet.

La rédaction de Clubic.com a eu la confirmation :

« Nous avons décidé de contacter Blizzard afin d’avoir une « réaction officielle » et celle-ci n’a d’ailleurs pas tardé. Tout d’abord, le studio précise que la décision n’a pas été facile à prendre. Blizzard considère que la suppression du LAN et la redirection des joueurs vers Battle.net est la solution la plus efficace pour garantir les meilleures conditions de jeu et la lutte contre le piratage. »

Extrait de l’article « Blizzard revient sur l’absence de LAN de StarCraft II« , par Nerces, le 30 juin 2009.

Autrement dit, camarades joueurs n’envisagez même pas de vous faire un LAN entres amis sans connexion Internet !

Je suis, comme certainement beaucoup d’autres, déçu, indigné, consterné voire à la limite de la révolte ! Je trouve que c’est une prise en otage du consommateur sous pretexte de « lutte contre le piratage ».

Je vois trois réactions possibles :

  1. Je n’achète pas le jeu, sans le LAN, je ne vois pas l’intérêt,
  2. J’achète le jeu mais j’oublie un éventuel LAN entre amis avec lui,
  3. J’achète le jeu et je pirate ma propre licence avec le patch non officiel qui réactivera la fonctionnalité…

Moi qui attendait avec impatience la sortie du jeu, pour enfin pouvoir l’acheter, je suis quelque peu écœuré…D’autant que le jeu peut coûter jusqu’à trois achats si vous souhaitez jouer aux trois campagnes des trois factions. Un peu cher à mon goût pour être privé de mode LAN.

Ceci dit, le jeu n’est pas encore sorti, et Blizzard a encore la possibilité de changer d’avis…

Firefox et la RAM

Firefox est mémoirophage. Entendez par là que le logiciel a une facheuse tendance à s’emballer en mémoire RAM ».

Il est toutefois possible de remédier à ce problème :  optimiser certains comportements par défaut »

C’est en anglais et ça dit :

  1. Dans la barre d’adresse (là où vous saississez vos URL), tapez about:config et validezReturn.
  2. Un message d’alerte vous demande de faire très attention à ce que vous allez modifier, c’est normal, continuez.
  3. Faites un clic droit n’importe où dans la liste de valeurs que vous voyez pour choisir Nouvelle > Valeur booléenne,
  4. Nommez la nouvelle valeur config.trim_on_minimize et validez.
  5. Choisissez ensuite la valeur true (vous pouvez aussi double-cliquer sur la ligne ajoutée pour changer sa valeur).

La question maintenant : pourquoi ceci n’est pas valable par défaut ? Surement un risque quelconque à l’utilisation pour lequel Mozilla souhaite se dégager de toute responsabilité…

Migration terminée

Voilà, c’est fait ! La migration sur le nouveau serveur Gandi est terminée.

S’il manque quelque chose ou si vous rencontrez un problème quelconque, un petit commentaire pour m’avertir et je m’en occupe.

Astuce : CTRL + MAJ + R dans votre navigateur Firefox (voire d’autres) pour le forcer à vider son cache si vous tombez sur un message de maintenance !

Migration en cours

Vous l’aurez très certainement remarqué, tout n’est pas à sa place niveau sites ! Et pour cause, je suis en train de migrer tous mes sites ainsi que tous les sous-domaines hébergés (Albulle, doc, dev, …) vers un nouvel hébergement.

Je quitte Celeonet pour Gandi. J’ai souscrit chez eux à une part de serveur virtualisé, ce qui me permet désormais de disposer d’un véritable serveur dédié sur lequel j’ai entièrement la main ! Je peux désormais faire tout ce que je veux, sans aucune limite…si ce n’est la puissance serveur :-D

Bref, tout n’est pas encore en place mais je devrais avoir fini le déménagement d’ici à la fin de la semaine. Merci de votre patience !

Tilt-Shift #3

Une photo pas très récente mais de circonstance puisque Roland Garros commence dans moins de 3 jours ! Elle date de l’édition 2007 où j’ai eu la chance de pouvoir assister à un énorme match. Novak Djokovic était opposé à Olivier Patience et les deux protagonistes nous ont laissé un excellent souvenir de la rencontre !

Pour vous remettre dans l’ambiance, je vous cite un extrait de l’article du journal l’Equipe :

Lire la suite de ‘Tilt-Shift #3’ »