Archive for the ‘Opensource’ Category

msk0: watchdog timeout – Une solution simple et crade

Friday, January 29th, 2010

Je me suis rendu compte il y a quelques semaines que mon interface réseau (msk0) cessait de fonctionner après un certain temps (jours, parfois des semaines) sous une charge modérée ou importante, tout en inondant le journal système de « msk0: watchdog timeout ». Ce qui est plûtot gênant pour un serveur… Je n’ai malheureusement pas réussi à corriger le problème en désactivant le MSI via l’outil sysctl(8)

Le problème viendrait de :

  1. Une carte de mauvaise qualité (Marvell 88E8053)
  2. Un driver msk(4) peu testé et donc rempli de bugs potentiels

La seule façon de rétablir la connexion est de redémarrer la machine. Ce qui pose problème quand on a accès à la machine en question uniquement par SSH la majorité du temps…  J’ai donc réalisé un petit script (vraiment fait à la vite), faisant office de solution de secours, qui fait automatiquement redémarrer la machine si un watchdog timeout a été détécté. Cela permet de ne pas complètement bloquer l’accès via SSH.

Il suffit donc de lancer ce script en cronjob (effectué par root, bien sûr) :

#!/bin/sh

LOGFILE="/var/log/check_msk0"
DATE=`date`

CLEAN=`echo | grep zero`
LOGDATE=`date "+%b %d"`
TIMEOUTS=`cat /var/log/messages | grep "msk0: watchdog timeout" | tail | grep "$LOGDATE"`

if [ "$TIMEOUTS" = "$CLEAN" ]
then
 echo "$DATE OK, no timeouts." >> $LOGFILE
 echo OK.
else
 echo "$DATE WATCHDOG TIMEOUT, initiating reboot..." >> $LOGFILE
 echo Rebooting in 15 seconds. Press ^C to abort.
 sleep 15
 cp /var/log/messages /var/log/messages.timeout
 echo > /var/log/messages
 /sbin/reboot
fi

Inutile de préciser que j’ai commandé une nouvelle carte réseau, plus adaptée pour un serveur, et que cette solution est vraiment temporaire…

Related Posts:

Petit DT et mises à jour

Friday, December 25th, 2009

Hello there,

Désolé pour la petite indisponibilité d’environ une semaine, la faute à un bloc d’alim qui a rendu l’âme…

Bon, j’en ai en attendant profité pour mettre à jour le système, avec :

  • Une nouvelle alim, et un onduleur, pour ne pas avoir des soucis de FS corrompu
  • Quatre disques de 1.5 TB en RAID10, grâce à ZFS. Ce système de fichiers est réellement génial.
  • FreeBSD 8.0 avec Apache qui tourne dans une jail :-)

Related Posts:

5 Fausses idées reçues à propos de Freenet

Saturday, December 5th, 2009

Comme je lis ça un peu partout et que j’en ai assez de toujours me répéter, voici les cinq préjugés à propos de Freenet qui n’ont pas (plus) lieu d’être :

1. Freenet est compliqué à utiliser

C’est sûrement le préjugé le plus faux de tous. Depuis l’introduction des niveaux de sécurité, il est très simple de configurer un noeud. Le nouvel installeur Windows est performant et il y a toujours l’installation avec un installeur Java ou bien en headless pour les autres machines. Je suis d’accord pour dire que fms n’est par exemple pas utilisable par n’importe qui, mais Freetalk sera très, très bientôt disponible, et il sera directement intégré dans le noeud.

Si vous ne me croyez pas, vous croirez peut-être l’auteur de l’article sur The Guardian :

Installing the software takes barely a couple of minutes and requires minimal computer skills. You find the Freenet website, read a few terse instructions, and answer a few questions [...] Then you enter a previously hidden online world.

Traduction approximative pour les non-anglophones : installer le logiciel prend à peine quelques minutes et demande très peu de connaissances techniques. Vous allez sur le site de Freenet, lisez quelques instruction et répondez à quelques questions [...] Ensuite vous pouvez entrer dans un monde auparavant caché.

2. Freenet n’a aucun contenu

Il y a du contenu. Il n’est juste pas servi sur un plateau d’argent comme sur le web classique. Il y a les forums de discussion (fms, Freetalk), un plugin IRC (frirc, encore en développement), un plugin permettant de publier des blogs simplement (FlogHelper, développé et maintenu par moi même).

Il y a également l’index par défaut, assez conséquent, permettant à Library (le plugin permettant de faire des recherches) de trouver des résultats. Et si ça ne produit aucun résultat convaincant il y a toujours les indexes. Même si la quantité d’informations stockées n’est pas du tout du même ordre de grandeur que sur le web classique, il est faux de dire qu’il n’y a rien.

3. Il y a déjà Tor, I2P, …

Oui mais non. Ça ne fonctionne pas de la même façon. Tor est exactement l’opposé de Freenet. Tor permet d’accéder au web classique, Tor publie une liste de tous les noeuds de sortie, Tor ne stocke pas de données d’une façon décentralisée.

D’une façon générale, Tor et I2P n’ont pas de datastore distribué, Freenet oui. Qu’est-ce qu’un datastore distribué ? C’est ce qui fait que quand vous insérez du contenu dans Freenet, personne ne peut le supprimer. Et plus le contenu est populaire, plus il se répand et est stocké chez de nombreuses personnes. Il a donc moins de risques d’être effacé par un autre contenu nouvellement inséré. D’ailleurs, si vous coupez votre noeud, le contenu que vous avez inséré est toujours accessible. Le fait qu’il soit distribué (et décentralisé) fait qu’il n’y a pas un unique point d’échec. Tor et I2P ne fonctionnent pas selon ce principe ; l’anonymat fourni n’est pas le même.

Disons pour résumer que le seul point commun entre Freenet, Tor et I2P est qu’ils sont tous les trois des logiciels de P2P utilisant la cryptographie. Mais c’est tout, le fonctionnement, les objectifs et les moyens ne sont pas du tout les mêmes.

4. Freenet est inutile

Pas du tout. Il y a déjà des pays qui en ont besoin, comme par exemple en Chine, en Corée du Nord ou la liberté d’expression sur Internet n’est pas garantie. Cela pourrait aussi devenir le cas en Europe dans un futur plus ou moins proche… Freenet garantit une liberté d’expression non restreinte permettant de s’exprimer sans pour autant révéler son identité. L’idéal pour contrer la censure.

Je vous rappelle aussi qu’il est beaucoup plus simple de conserver sa liberté d’expression quand on la possède encore que de la regagner lorsqu’on l’a perdue.

5. Freenet est lent

Rappelez-vous que plus un contenu est populaire, plus il se propage et donc plus il devient facile d’y accéder. La place est limitée, on ne peut pas tout conserver. On obtient quand même de très bons taux de transferts (de l’ordre de 100 KiB/s) sur les gros fichiers populaires.

Comparé au web classique, ça n’est pas aussi rapide du tout. Même si grâce au « Client Cache » les sites que vous visitez deviennent rapidement accessibles après.

Related Posts:

Amélioration de l’affichage des noeuds connectés (Freenet)

Wednesday, December 2nd, 2009

Il y a quelques mois, j’ai implémenté une barre de statut pour Freenet, l’idée était de Toad et j’étais plûtot emballé. Le but ? Améliorer la facilité d’utilisation en concentrant des informations dans une barre. L’emplacement dépend du thème, les thèmes bar défaut l’ont en haut alors que mon thème minimaliste la met en bas, fixe (c’est à dire qu’elle ne bouge pas même si on défile la page).

Voici en gros à quoi ressemble la barre :fn_statusbar_old

On aperçoit tout à gauche les messages divers, la couleur dépend de la gravité des messages (les erreurs sont affichées directement en haut de la page, les avertissements s’affichent avec un fond jaune dans la barre et les autres messages mineurs s’affichent en bleu dans la barre), puis le choix de la langue (le choix de placer ça ici est relativement discutable, mais Toad le voulait et ça prend pas beaucoup de place) ; après tout, pourquoi pas. Il y a ensuite bien sûr le switch mode simple/avancé qui permet d’économiser de la place en haut, les niveaux de sécurité qui sont colorés (LOW, NORMAL, HIGH, MAXIMUM) avec une courte description qui s’affiche quand on passe la souris dessus, puis le nombre de noeuds connectés.

Ce dernier élément n’est pas très utile en soi ; l’utilisateur ne sait pas trop comment l’interpréter. Quelles sont les bonnes valeurs ? C’est pour cela qu’on a eu l’idée (enfin plutôt digger3 sur IRC) d’utiliser une barre de progression à la place. Une sorte d’« indicateur de vitesse » qui permettrait de clarifier cela. Le texte est déjà coloré en fonction du nombres de noeuds connectés, j’ai réutilisé ce système pour la barre de progression mais en scindant deux cas :

  • Si le noeud utilise l’Opennet (cela inclut les noeuds hybrides qui sont connectés à des amis et à des inconnus), alors la barre sera colorée en fonction du pourcentage de noeuds connectés ; la limite au nombre de noeuds connectés est déterminée par la limite de bande passante configurée.
  • Si le noeud est en Darknet pur (c’est à dire qu’il ne se connecte qu’à des amis), alors la barre sera colorée en fonction du nombre brut de noeuds connectés. La notion de pourcentage n’a plus de sens car il n’y a pas de limite formelle au nombre d’amis, et il est tout à fait normal de ne pas avoir 100% des amis connectés à un instant quelconque.

Voici un aperçu de la nouvelle barre de statut qui sera normalement présente dans le build 1240 de Freenet :statusbar_redstatusbar_orangestatusbar_yellowgreenstatusbar_tooltip

Voici un screenshot complet d’une page, avec le thème Minimalist :statusbar_fullscreenshot

Au passage, le persona Firefox est de moi, une réalisation faite à la va vite sous Inkscape en dix minutes.

Le commit en lui même, au cas ou vous voudriez voir à quel point je fais du mauvais code :-|

Voilà tout ; ce petit changement n’est pas grand chose en soi, mais l’interface doit avant tout être simple pour les utilisateurs, qui n’ont pas les mêmes connaissances techniques que nous. Cela n’est pas si simple que cela au premier coup d’oeil ; il faut par exemple éviter d’utiliser le mot peer et utiliser friend ou stranger à la place.

Related Posts:

Première release de FlogHelper

Saturday, November 28th, 2009

Tout est parti de ce message sur la mailing-list de Freenet  (réponse de Toad) :

Fascinating… What we really need in this area IMHO is a web-based blogging interface:
- It must be as easy to use for a newbie as the centralised blogging sites, for writing blogs.
- It must support basic blog features – sort by date, tags, etc.
- It must have a web interface so it can integrate into fred as a plugin, and add itself to the Browse menu. IMHO this is important, and http://freenet.uservoice.com/ seems to agree.
- It should have at least two themes, and the default should look reasonable.
- It must support embedding pictures, linking to other freesites, and linking to arbitrary files. Eventually we will have embedded video, but that will require more work on other parts of fred.
- *Eventually* it will need integration with Freetalk, for posting comments, for announcing it in the first place, and maybe for the whole blog to be just showing somebody’s top level posts… But p0s has a lot of work to do on Freetalk/WoT, and IMHO the earlier we have an easy to use blog tool integrated into the UI the better.
[...]
When you’re not busy with writing fred themes, would you be interested?

Bien évidemment, j’étais intéressé. L’occasion de contribuer à un projet que je soutiens de façon significative. J’ai donc crée un répo Git pour faire quelques expérimentations… Je n’avais aucune idée de comment créer un plugin pour Fred.

Après m’être rendu compte que les plugins étaient en fait codés à l’arrache en recréant la roue à chaque fois même pour les trucs les plus simples (localisation de l’interface, stockage de données de façon sécurisée sans avoir à refaire des milliers de lignes de code de crypto), j’ai réalisé la quantité de travail qu’il fallait faire si je voulais faire un truc propre. J’ai donc factorisé toute l’interface de localisation du noeud afin d’utiliser exactement le même code pour les plugins. Sur le coup, ça a été beaucoup de changements pour pas grand chose, mais maintenant on en profite bien : en changeant quelques lignes de code seulement, il est possible de traduire les plugins en utilisant la même interface que pour le noeud ; et WoT et Freetalk utilisent aussi ce nouveau système depuis peu.

Après avoir fixé ce problème de localisation, je bute sur un autre problème : comment stocker des données de façon sécurisée sans se farcir plein de code de crypto ? (Je déteste la crypto, c’est compliqué et une toute petite erreur peut tout ruiner ; d’autant plus que le noeud a déjà ce code là.) J’ai pensé à pas mal de méthodes : utiliser des fichiers XML, utiliser une base de données db4o dans un fichier à part, utiliser node.db4o, … C’est finalement cette dernière solution que j’ai choisie. Avec l’aide de Toad, j’ai crée une classe simple PluginStore permettant aux plugins de stocker des données dans node.db4o sans se soucier des problèmes de chiffrement, … Le seul problème est en cas de corruption de ce fichier ; c’est pourquoi j’ai également crée des méthodes pour exporter et importer des PluginStore sous forme de fichiers. C’est donc aux utilisateurs de faire attention et de sauvegarder leur données cruciales dans un endroit sûr ; un auteur de Flog peut très bien publier du contenu qui serait susceptible de le mettre en prison ou de lui attirer de gros ennuis dans son pays, il faut donc faire attention.

Finalement, quelques mois plus tard arrive la première version fonctionnelle de FlogHelper, manquant encore cruellement de fonctionnalités intéressantes et remplie de bugs.

Après avoir fignolé l’interface et ajouté les fonctionnalités telle que la recherche intégrée (ce qui implique de générer un index XML, peu simple vu comment c’est documenté), les tags, les pièces jointes, … Le plugin est passé semi-officiel, ce qui veut dire que la source est vérifiée par Toad et que les Jars sont hébergés sur les miroirs, mais il n’est pas encore promu en tant que plugin officiel sur la page des plugins.

Le plugin sera officiel dès que WoT sera lui-même officiel, espérons que ça sera pour bientôt.

Liens

Related Posts:

The Guardian parle de Freenet

Saturday, November 28th, 2009

Andy Beckett a publié jeudi un article à propos des darknets et plus particulièrement de Freenet.

Sans entrer dans les détails, je trouve que l’article fait trop dans le « sensationnel » en écrivant par exemple en première phrase « In the ‘deep web’, Freenet software allows users complete anonymity as they share viruses, criminal contacts and child pornography » (traduction approximative : Dans le web profond, Freenet permet à ses utilisateurs un anonymat total leur permettant de partager des virus, des contacts entre criminels et des contenus pédophiles)… Cela est certes vrai, et on ne peut pas du tout mesurer l’amplitude des « mauvais usages » du réseau Freenet.

L’auteur a très largement surestimé la taille du réseau, citant par exemple « The deep web is currently 400 to 550 times larger than the commonly defined world wide web [...] » ; il y a confusion ici entre réseaux de type Freenet, et protocole différent d’http. Peut-on considérer le P2P, IRC ou encore Usenet comme « web profond » ?

Mis à part, cela a permis de faire connaître Freenet à un plus grand nombre de lecteurs, et d’utilisateurs/contributeurs potentiels. Voici le graphe des noeuds connectés à mon propre noeud, la quantité  de noeuds qui ont eu besoin de s’introduire sur le réseau a pratiquement doublé en un seul jour. Il s’agit de la zone Seeding for sur le graphe. Cela reviendra sûrement à la normale dans quelques jours, semaines si l’article reste plus longtemps dans les pages les plus consultées.

freenetpeers_2592000

Related Posts:

HexaLife

Tuesday, July 7th, 2009

Bon, comme c’est les vacances et que je n’ai pas grand chose à faire, j’ai décidé de me pencher un peu sur les automates cellulaires – comme par exemple le Jeu de la Vie de Conway.

Je trouve que les automates cellulaires sont parfaits car ils ont un côté programmation, un côté algorithmique et un côté ludique non négligeable… Voilà donc de quoi tuer de sérieuses heures.

Alors bien sûr, comme utiliser un programme déjà existant ça n’est pas marrant, j’ai décidé d’implémenter le mien avec mon langage de programmation favori : Java.

Cependant, il y a déjà plein d’automates cellulaires “classiques”, optimisés, paramétrables, opensource, bref parfaits. Donc, pour compliquer la tâche, j’ai décidé de choisir un pavage hexagonal au lieu du classique pavage rectangulaire que les programmeurs choisissent la plupart du temps.

Réalisation technique

L’avantage du pavage rectangulaire, c’est qu’on peut exprimer les coordonnées d’une case (un carré dans la majorité des cas) très simplement…

rectangles

On peut observer alors qu’une cellule possède quatre voisins directs. En général les conditions de survie ou d’apparition de la vie dans une case dépendent du nombre de voisins vivants. La notion de “voisin” ne se limite pas aux cases immédiatement adjacentes (même si c’est comme ça dans la plupart des cas).

Avec un pavage hexagonal, établir un système de coordonnées est déjà plus complexe, même si ça n’est pas impossible.

hexa

Comme on peut le voir, cette fois-ci une cellule a six voisins directs. Cela ouvre bien sûr de nouvelles possibilités. Le système de coordonnées que j’ai choisi n’est sans doute pas le meilleur mais il permet de calculer la simulation de façon théorique relativement simplement. En fait, peu importe le système de coordonnées choisi, tant qu’il est possible de donner les coordonnées des voisins d’une cellule à partir de ses coordonnées.

Le problème est d’afficher tout ça d’une façon simple… Autant pour dessiner et colorier des rectangles, c’est simple. Pour des hexagones, c’est déjà un peu plus subtil.

Je me suis inspiré de cet excellent article expliquant comment créer une grille hexagonale en .NET. J’ai repris les grands principes, adapté à ma sauce. Voici le résultat :

resultat_pavage_hexa

Une fois que j’ai pu avoir un résultat visible, j’ai réellement été agréablement surpris au niveau des performances. Avec mon modeste Core2 Duo E6600 standard, je peux générer et afficher environ 20 fois par seconde une carte de plus de 5700 hexagones (en gros tout mon écran avec une résolution de 1680×1050 avec des hexagones ayant pour côté 10 pixels). C’est un résultat convenable et tout à fait suffisant pour un usage “simple”, c’est à dire des observations basiques et l’aspect amusant de la chose, mais ça ne suffira évidemment pas à faire de grandes simulations très complexes.

Observations effectuées

Pour la suite de cet article, j’utiliserai la notation Bx/Sy pour définir les règles du jeu utilisées. Il s’agit d’une notation utilisée dans la majorité des programmes, notamment Golly. La notation est très simple à comprendre, surtout à partir d’un example : si la règle est B456/S23, alors une cellule va naître si elle a exactement 4, 5 ou 6 voisins, et elle va survivre si elle a exactement 2 ou 3 voisins.

Règle B34/S34

D’après mes premières estimations, les cellules tendent à disparaître très rapidement en formant beaucoup d’oscillateurs, le plus souvent de période 2, de formes très variées mais suivant toutes le même principe : une « chaîne » de cellules, circulaire ou non, forme le coeur de l’oscillateur et est invariable. Cette chaîne est entourée de cellules espacées en général d’une cellule vide, parfois de deux. Ce sont ces cellules là qui vont osciller, comme si elles “tournaient” autour de la chaîne.

321

Oscillateurs de période 2 et de longueur de chaîne respectives de 1, 2 et 5.

Il n’y a pas l’air d’avoir de motifs invariables ou de vaisseaux « simples » dans cette configuration.

Règle B34/S234

Cette règle, qui a l’air de ressembler à la précédente, est en réalité très différente.

Les motifs statiques « still life » profusent, énormément de motifs simples sont stables. Lorsqu’il y a beaucoup de cellules, elles ont tendance à former des polygônes stables, de taille très variable, oscillant avec des périodes en général comprises entre 2 et 5. Lorsque les cellules en vie sont présentes en plus grande quantité, elles forment un motif caractéristique, qui possède une capacité d’adaptation extraordinaire.

4
Ce motif répétable peut s’adapter à un grand nombre de formes, tout en laissant place à plusieurs types d’oscillateurs.

Règle B3/S23

Avec cette règle, éponyme à celle du Jeu de la Vie dans sa version orthogonale, les cellules vont à première vue se stabiliser très rapidement en motifs statiques invariables simples. Les oscillateurs sont rares et n’apparaîssent que très peu comparés aux autres formes statiques.

J’espère que j’ai réussi à vous donner envie de vous intéresser aux automates cellulaires, ils sont vraiment intéressants. Le projet est maintenu et distribué via Github.

Related Posts:

Sortie de Freenet 0.7.5

Tuesday, June 16th, 2009

Freenet est un réseau anonyme et chiffré qui est basé sur Internet. Il a été créé par Ian Clarke, est distribué sous licence GPL et est maintenu par beaucoup de développeurs bénévoles ainsi qu’un développeur à plein temps, payé grâce aux donations. Le but principal est de prôner la liberté d’expression et de rendre toute censure impossible. C’est pourquoi, par exemple, il est impossible de supprimer du contenu de Freenet une fois qu’il a été inséré dans le réseau. De même, chaque noeud (un noeud est un ordinateur faisant tourner Freenet) n’a aucun moyen de savoir ce qui transite et ce qui est stocké dans le disque dur.

De façon plus pratique, Freenet permet d’insérer des Freesites, un ensemble de pages xHTML formant un site anonyme ou non, d’effectuer du partage de fichiers, de consulter des groupes de discussion et de s’envoyer des Freemails (système d’e-mail basé sur le réseau Freenet).

Freenet est surtout connu pour avoir soulevé de nombreux débats éthiques, du fait de l’absence totale de censure. Cependant, si vous tenez à conserver un réseau où vous serez sûr que personne ne pourra vous enlever votre liberté d’expression, alors Freenet devrait vous intéresser, surtout avec les projets de loi récents visant à filtrer Internet en France (LOPPSI). Le réseau est vraiment conçu pour ça, les développeurs eux-mêmes ne pouvant arrêter le réseau, même sous pression juridique.

freenet-bunny

Un historique proche relativement chargé

Il y a quelques mois, ce projet a bien failli ne pas continuer d’exister, et ceci pour plusieurs raisons.

Tout d’abord, le bénévole chargé de l’administration du serveur principal hébergeant le serveur SVN a décidé qu’il ne pouvait plus continuer. Or, personne d’autre n’avait les compétences nécessaires et la confiance nécessaire pour le remplacer. Pour pallier cela, les sources ont été déplacées sur GitHub. Ce choix est discutable, GitHub pourrait facilement décider d’arrêter d’héberger les sources de Freenet à cause de problèmes légaux ! Finalement, git permet assez facilement de s’adapter à ce cas de situation et donc cette éventualité ne causerait pas la mort du projet.

Vu que le projet n’est alimenté en argent que par les dons et qu’un développeur est payé à plein temps, l’argent a commencé à manquer de façon très sérieuse. C’est aussi pour cette raison que le serveur principal a été coupé suite à l’abandon du bénévole chargé de son administration, il représentait un coût non négligeable. Pour donner un indice, le projet a survécu avec moins de 1000$ en réserve pendant plusieurs mois.

Finalement, à la surprise de tous, Google a versé une importante donation de 18 000$ au projet au début du mois de mai. La survie du projet n’est donc plus un problème à moyen terme. Pour rappel, Google a joué un rôle important pour le projet, notamment grâce aux Google Summer of Code (GSoC).

Les nouveautés de la version 0.7.5

La version précédente, 0.7, datait de mai 2008. Mais cela ne veut pas dire qu’aucune nouveauté n’est apparue depuis plus d’un an. Le fonctionnement de Freenet est un peu particulier au niveau des versions. Le noeud se met à jour lui-même (en général de façon automatique) via le réseau Freenet ; le numéro de version est donc une notation symbolique pour mettre en évidence les nouveautés des précédents builds. Les développeurs n’attendent pas de date précise pour ajouter de nouvelles fonctions, ils le font lorsqu’ils jugent de façon arbitraire qu’il y en a eu suffisamment pour changer le numéro de version.

Depuis la version 0.7, de très grosses nouveautés ont été implémentées. Voici un résumé non exhaustif des plus significatives.

Résultat de plus d’un an de travail acharné, l’intégration de db4o (Database for Objects) a permis d’augmenter très grandement la performance et de réduire les ressources utilisées par le noeud. Il est par exemple possible de télécharger plusieurs gigaoctets de fichiers sans pour autant observer une augmentation de la quantité de mémoire vive utilisée. Un noeud typique consommera maintenant entre 100 et 250 mégaoctets de mémoire vive, pas plus. Grâce à db4o, on peut maintenant faire des petits serveurs dédiés Freenet en réutilisant du vieux matériel, ou bien avec du matériel miniature. Cela laisse de belles perspectives pour l’avenir : Freenet sur de l’embarqué.

L’interface web de Freenet (FProxy) a été améliorée afin de la rendre beaucoup plus accessible aux néophytes. De nouveaux installeurs ont été mis au point afin de rendre l’installation plus simple, et de renforcer la compatibilité avec Windows Vista.

Enfin, la majorité du système de plugins a été refondue en profondeur. Cela permettra par exemple d’avoir des dépendances inter-plugins, ou encore leur mise à jour automatique. C’est une modification peu importante pour l’utilisateur, mais c’est une brique nécessaire à l’achèvement de la prochaine “grosse” version de Freenet, la 0.8.

Qu’attendre à court/moyen terme ?

Freenet 0.8 comportera Freetalk/WoT, un nouveau système officiel pour communiquer avec les autres utilisateurs. Annoncé depuis longtemps comme révolutionnaire, tout le monde l’attend avec impatience. Étant donné que Freenet est un réseau entièrement décentralisé, ce système se basera sur une technique de “Toile de confiance” (Web of Trust). En gros, vous devez noter votre confiance envers les autres utilisateurs, afin de rendre impossible toute tentative de spam. Les autres utilisateurs vous notent également. Il paraît évident que les identités ayant de très mauvaises notes seront ignorées des autres, et ne pourront donc plus communiquer. C’est un système de filtrage décentralisé et « démocratique » en quelque sorte : chacun a son mot à dire, et le système se régule de lui-même.

Un nouveau type de clé sera aussi créé : les MHKs (Multiple not Duplicated Hash Key) serviront à partager de gros fichiers plus efficacement qu’à l’heure actuelle. Le fonctionnement est complexe, mais globalement, les blocs d’index seront insérés avec plus de redondance afin d’éviter la perte prématurée de données.

Enfin, les noeuds pourront aussi partager leur bloom filter avec leurs voisins immédiats. Cela signifie que votre noeud “saura” ce que stocke chacun de ses voisins, ce qui représentera un gain important de performances. En revanche, l’implémentation d’un tel système est très délicate, et il faudra donc être patient.

Le mot final

Cette avancée symbolique de Freenet a bien sûr pour but d’attirer plus d’utilisateurs, mais aussi de faire connaître Freenet aux internautes du monde entier : Freenet est indétectable de l’extérieur si utilisé en mode Darknet (en se connectant uniquement à des amis à proximité de confiance), et il faut donc au moins savoir que des solutions existent pour pallier la tendance qu’ont les gouvernements à filtrer le web, ou à envisager de le faire, tout au moins. Freenet est tout de même utilisable si on ne connaît personne qui l’utilise : le mode Opennet vous connectera à des inconnus (la seule différence par rapport au Darknet, c’est qu’on peut savoir que vous utilisez Freenet. Mais comme il n’est pas encore illégal en France, ça ne pose aucun problème).

Enfin, Freenet étant développé entièrement en Java, il est compatible avec n’importe quel système d’exploitation disposant d’une JVM version 1.5 au minimum. Cela inclut Windows, Mac OS, GNU/Linux, FreeBSD, Solaris, …

(Publication originale ici, rédigée par moi-même.)

Related Posts:

Compiler GoatTracker sous FreeBSD

Saturday, February 28th, 2009

GoatTracker est un tracker produisant de la musique pour le Commodore 64. Il est disponible sous license GNU et est multiplate-forme.

Cependant, il n’a pas été porté sous FreeBSD, bien qu’il fonctionne bien sous Linux. Heureusement, grâce à quelques hacks simples, il est possible d’utiliser GoatTracker sous FreeBSD.

Avant tout, vérifiez que vous avez les ports/packages SDL d’installés, ainsi que GNU Make (“gmake”) différent du BSD Make par défaut (“make”). Il y a quelques différences dans la structure des Makefiles donc il faut utiliser l’un ou l’autre en fonction de ce qu’on compile.

Ensuite, procurez vous GoatTracker à cette adresse : http://covertbitops.c64.org/ (rubrique “Tools”).

Unzippez les sources dans un répertoire spécial crée à cette occasion, et placez vous dedans.

Avant de compiler GoatTracker, il faut compiler 2 outils qui seront nécessaires : datafile et dat2inc.

Placez vous donc dans le répertoire src/bme. Avant de lancer gmake, il faut modifier le Makefile car il est adapté à une machine Linux. Or, les machines Linux n’utilisent quasiment pas le préfixe /usr/local pour les includes. Le Makefile va donc chercher SDL_types.h dans /usr/include, alors qu’il est situé dans /usr/local/include. Pour corriger cela, il suffit d’ajouter ceci aux CFLAGS : -I/usr/local/include. Le makefile étant ici extrêmement simple, rajoutez cela aux deux appels à gcc.

Vous pouvez ensuite lancer la compilation avec gmake. Une fois que c’est terminé, vous devez copier ces deux exécutables produits dans votre $PATH, donc en gros vous devez copier les fichiers datafile et dat2inc dans /usr/local/bin.

Ensuite, placez vous dans le répertoire src. Cette fois, le Makefile est un peu plus complexe, vous devez rajouter -I/usr/local/include à la fin de la ligne CFLAGS= dans le fichier makefile.common. La compilation se passe ensuite sans problèmes.

Vous pouvez enfin jouer avec GoatTracker, l’exécutable étant situé dans le sous dossier linux/ et commencant par gt2. Enfin, voici une preuve que ça fonctionne :

GoatTracker

Related Posts:

Réfléxion à propos des includes (PHP)

Sunday, February 15th, 2009

Parlons includes. En général, lorsqu’on réalise un projet en PHP, on découpe le travail en plusieurs parties qui se répartissent donc logiquement en plusieurs fichiers. Pourquoi ? Parce que c’est en général plus simple de savoir où on est quand on manipule un fichier dont le nombre de lignes se rapproche plus de la centaine que du millier.

Cependant, gérer plusieurs fichiers est parfois délicat : on se retrouve confronté à des problèmes de répertoire, de path relatif difficile à prévoir et toutes ces subtilités. Et comme on décide de l’architecture d’un projet avant même de commencer le gros du code, on a vite fait de tout foutre en l’air à cause d’une mauvaise organisation. Evidemment, on ne peut jamais prévoir totalement les problèmes que causeront notre architecture choisie. Donc, au lieu de prévoir tous les problèmes possibles qui pourraient arriver, il est bien plus pratique de prévoir un système de base d’includes qui est flexible, c’est à dire que les modifications seront simples à effectuer. Changer 50 fichiers car on a besoin d’en renommer un autre est un gros problème de flexibilité par exemple. Il y a donc une bonne et une mauvaise façon de gérer ses includes.

The Bad Way

Cette méthode est malheureusement retrouvée parmi les débutants, car on la retrouve dans beaucoup de cours. C’est une mauvaise habitude pour des projets conséquents. Voyons pourquoi.

Imaginons cette architecture simple, retrouvée dans un paquet de projets (les noms sont fictifs) :

/lib
----/myFunctions.php
----/BDD.php
----/template.php
----/otherStuff.php
/requireMe.php
/index.php
/pageUn.php
/pageDeux.php
/pageTrois.php
/.htaccess

Dans cette organisation, on accède aux pages directement via leur URL (/index.php) ou via un URL Rewriting qui effectue une redirection silencieuse en arrière plan (c’est équivalent à la première méthode). Chaque page inclut le fichier requireMe.php, qui inclut les fichiers annexes contenus dans /lib. Donc, chaque page accède bien au code qui est commun.

Cette méthode est très rapide à mettre en oeuvre et très simple : elle est bien adaptée à l’Extreme Programming mais malheuresement elle n’est pas vraiment flexible. En effet, pour l’instant c’est simple, mais imaginez que vous ayez 50 pages à la racine. Si, un jour, vous avez besoin de changer quelque chose qui a un rapport avec requireMe.php (comme son nom, son emplacement, …), vous devrez modifier 50 fichiers. Amusez-vous bien à perdre du temps.

The Good Way

Maintenant, on passe à une méthode que je qualifie de “bonne”, enfin c’est mon avis subjectif. Il est quand même certain qu’elle est plus flexible que la mauvaise méthode.

On a une architecture de ce type :

/lib
----/myFunctions.php
----/BDD.php
----/template.php
----/otherStuff.php
/pages
------/index.php
------/pageUn.php
------/pageDeux.php
------/pageTrois.php
/main.php
/.htaccess

On accède aux pages via URL Rewriting uniquement. Cela permet de placer les pages dans un dossier spécial. Ce qui est important ici, c’est qu’on redirige TOUTES les requêtes au script main.php. Cela permet de n’avoir qu’une ligne dans le .htaccess, peu importe le nombre de pages. Et ça, c’est flexible.

Mais qu’est-ce qui change ? Tout le système est inversé, en fait. Le fichier main.php va analyser $_SERVER['REQUEST_URI'], inclure la bonne page (ou générer une erreur du type 404 ou autre), éventuellement utiliser des regex sur cette variable pour les URI du type /Article-27/1991/Janvier/27/ et inclure en plus des fichiers annexes contenus dans /lib. On ne retrouve donc aucun include dans les fichiers des pages : tout est regroupé dans le fichier main.php ; grâce à quelques constantes bien choisies, on peut s’adapter à, à peu près n’importe quoi en changeant un minimum de choses. Le système est inversé car ce n’est plus la page qui inclut les fichiers annexes, c’est un fichier annexe qui inclut la bonne page. Il n’y a dont plus qu’un seul fichier qui gère les inclusions : système souple.

Alors certes, je n’ai rien trouvé de révolutionnaire. Mais en général, quand on se rend compte que l’architecture est à chier, c’est trop tard. Il faut faire quelques bons choix dès le tout début. En résumé : n’incluez pas les fichiers annexes dans vos pages, incluez la page dans un fichier annexe spécial !

Related Posts: