Dans un projet C++ récent, j'ai utilisé le conteneur associatif map, et plus précisément le type map<int,int> qui associe un entier machine à un entier machine. Lorsqu'on adresse une clef qui n'existe pas dans un dict python (en gros l'équivalent du map C++), on obtient une erreur. En C++ on obtient la valeur par défaut du type valeur, à savoir 0 pour un entier. Et j'ai utilisé cette fonctionnalité dans mon projet parce que justemment, la valeur par défaut était 0 et je n'allais pas remplir explicitement tous ces 0.
Tout fonctionnait à merveille jusqu'à l'utilisation de thread pour paralléliser mon programme, et alors là rien ne va plus. J'ai finalement compris que l'erreur venait de l'adressage de la map avec des clefs inexistantes : dans ce cas là, l'implémentation de la STL que j'utilisais renvoie 0, certes, mais ajoute aussi ce couple (clé, valeur) explicitement (ce qui constitue une modification de la structure de données, et donc doit être protégé lors d'une programmation parallèle).
Moralité : parfois, il vaut mieux perdre un peu de temps à ajouter du code en apparence inutile (l'ajout des 0 explicites) pour garder un code robuste en exécution parallèle.
Hier j'ai découvert Greasemonkey. Je connaissais son existence, notée depuis longtemps quelque part dans un coin de ma tête, comme quelque chose à regarder de plus près quand j'en aurai le temps, ou plus précisément (parce qu'on n'a jamais le temps) quand l'envie m'en aura donné le temps. Donc hier j'ai découvert l'intérêt que cela pouvait représenter dans mon utilisation du web.
Pour présenter la chose simplement, il s'agit d'une extension pour le navigateur web Firefox qui permet ensuite à l'utilisateur d'exécuter des bouts de programme pour modifier les pages web, à l'envie, lors de la navigation.
Certes, il faut aimer programmer en Javascript, mais le principe est excellent : il s'agit de donner les moyens à l'utilisateur de manipuler ce flot de données que lui envoyent les serveurs web (les pages web, typiquement) pour en reprendre le contrôle et redevenir plus qu'un spectateur passif. Dans la philosophie unix, il me parait tellement évident a posteriori qu'on aurait toujours dû avoir ce pouvoir sur les données. L'antithèse aux DRM.
On peut par exemple modifier complètement le rendu d'une page, charcuter des parties, les augmenter avec des données extraites d'une autre page, et aussi contourner certaines minables « protections » mises en places par les webmestres pour éviter, par exemple, de pouvoir sauvegarder des images vues sur leur site depuis le navigateur (en redéfinissant le comportement du click droit...)
Ah oui, je ne vous dirai pas pour quoi je m'en sers :-)
En fouillant mes mails en souffrance, je suis tombé sur le site d'auto-défense contre la surveillance (essentiellement gouvernementale mais pas que) de l'EFF. Si le contenu est à la mesure du plan affiché, ça promet d'être un site de qualité allant de la mesure des risques au déploiement des solutions techniques de défense passive. Je risque même d'y apprendre des trucs, malgré ma parano déjà bien avancée !
Les chanceux utilisateurs de Firefox disposent d'une extension bien pratique, appelée adblock. Il faut bien qu'ils compensent les défauts de ce navigateur d'une façon ou d'une autre (chez moi, Firefox tient rarement une heure de navigation sans se vautrer en segfault).
Cette extension permet de bloquer les publicités. Elle dispose en plus d'une fonctionnalité de mise à jour automatique pour toujours mieux bloquer. Mon navigateur actuel, Konqueror, est capable de bloquer les publicités lui aussi mais sans la mise à jour automatique des listes.
J'ai donc installé adzapper qui dépourrifie toutes les pages web que je visite (ou presque) de leurs pubs. Avec le bénéfice du proxy cache squid en prime.
Voilà, c'est le moment où les lecteurs commentent pour dire que bloquer les pubs c'est être un traitre au système et méchant pour les webmasters qui se financent par la pub. Go!
Quand on utilise un logiciel qui est en développement plus ou moins actif comme l'est foofilter on profite des fonctionnalités les plus récentes, le top de la pointe du progrès.
On profite aussi des légers désagréments qui vont de pair avec l'utilisation de logiciel pas encore tout à fait robuste. Exemple :
Des nouvelles suite à mon bugreport foofilter d'hier... Ma machine est complètement en rade, la dernière fois que je suis arrivé à y faire quelque chose, le load frisait les 60 et elle était à cours de swap. Depuis, pas moyen d'y entrer par SSH; le ssh prend des heures à me demander un mot de passe, mais le sshd n'attend le mdp qu'un certain timeout. J'ai raté la fenêtre en étant allé dormir...
Un bug mineur donc, et déjà corrigé dans une repository git proche de chez vous.
Dans un élan de résistance vraisemblablement vain, j'ai ajouté un mécanisme de brouillage élémentaire du formulaire d'envoi de commentaire pour éviter le spam. Il est nécessaire pour cela d'avoir javascript d'activé. Si vous n'avez pas javascript activé dans votre navigateur et ne pouvez pas ou ne souhaitez pas l'activer, et ressentez malgré tout le besoin irrépressible de commenter, vous pouvez le faire par courrier, je l'inclurai de mon mieux ici.
Mon ordinateur portable est par définition connecté à internet avec une adresse IPv4 variable, souvent derrière une connexion filtrée voire en réseau local. Et pourtant heresy.lateralis.org est désormais le nom de ma machine et, surprise, c'est un nom valable globalement que vous pouvez joindre de n'importe où (à condition d'avoir de l'IPv6) et ceci peu importe le réseau pas trop fachisant derrière lequel je me trouve. Comment j'ai fait ?
Sans rentrer trop dans les détails, voici les logiciels, documentations et services utilisés :
Comme d'habitude, je n'ai pas encore bien déterminé à quoi cela allait me servir. Mais c'est largement subsidiaire comme question.