Animint

  Anime & manga

 
 

De la sécurité de vos sites web

Par Pazu le 13 avril 2007 16:04 :: Webmastering :: 4 commentaires »

Peut être en avez-vous entendu parler mais beaucoup de sites web hébergés chez Sivit se sont fait pirater le week-end dernier. Leurs pages d'index ont été remplacés par la signature du hacker. Je m'en suis aperçu non pas parce que j'ai le moins site web chez eux mais le site du jour, affiché dans  notre rubrique de liens, était alors japanim.net qui était un des sites victimes. À en croire les fora spécialisés, la situation a mis quelques temps à revenir à la normale, le week-end Pasqual n'aidant pas particulièrement.

Les déffaçages de sites se produisent régulièrement, avec plus ou moins de publicité autour. L'internet prend une place de plus en plus importante dans les buisness mais certains comportements naïfs semblent toujours perdurer, même dans les milieux professionnels. Le magazine de l'économie, Capital, qui est pourtant fort loin du domaine, s'est targué ce mois-ci d'un petit article pratique sur le sujet. Les exemples sont assez effarants avec des sites institutionnels mis à jour comme des Wiki, c'est-à-dire libre librement par le visiteur. Vous avez  aussi un site avec une adresse du style example.com dont le sésame de l'interface d'administration s'ouvre avec l'identifiant admin et le mot de passe example. Il n'y a même pas eu besoin d'une attaque à l'aide d'un dictionnaire. Un minimum de bon sens suffit…

Les attaques courantes passent généralement par des failles découvertes dans les applications web fréquemment utilisées tels que les scripts de forum ou bien les systèmes de gestion de contenu. Un pirate peut s'attaquer à un site en particulier mais le sport de certains consiste plutôt à automatiser les attaques et à atteindre le maximum de sites.

Les professionnels qui considèrent leurs sites comme critiques sont en général bien armés et ne prennent pas la sécurité à la légère. Ils évitent les fautes grossières et mettent les moyens pour assurer de bonnes défenses de façon naturelle. Un haut niveau de protection exige cependant des investissements lourds, qui ne sont pas à la portée des sites amateurs. Pour eux, que reste-t-il à la disposition ?

Certains choisiront carrément de proscrire toute page dynamique et de se cantonner à la bonne vieille page HTML. Pas de page dynamique, pas de risque. Hélas, le cas Sivit est un bon contre-exemple. La faille s'est produite à un niveau supérieur et le script pirate a modifié l'ensemble des indexes des sites, qu'ils soient statiques ou dynamiques. Mêmes si les parapets entre comptes n'ont pas fonctionné, les équipes de support ont incriminé des failles parmi les outils utilisés par certains clients. C'est là un problème des hébergements mutualisés. Non seulement vous partager les ressources mais vous partagez souvent les risques. Vous aurez beau faire preuve de rigueur dans la gestion de votre site, cela n'aura pas grand intérêt si votre voisin laisse sa porte grande ouverte.

Nous avons fait l'expérience à plusieurs reprises sur Animint. Les dégâts n'ont pas été bien graves – dans le contexte d'un projet amateur – mais cela se traduit ensuite par des règles de sécurité plus drastiques chez notre hébergeur. Le risque zéro n'existe pas même si quelques précautions suffisent à réduire ce risque.

Il est vital d'avoir des sauvegardes régulières de l'ensemble des données. Se faire pirater sa page d'accueil n'est jamais plaisant mais perdre tout le contenu, c'est bien pire. En automatisant le processus, cela augmente l'utilisation de l'espace disque mais c'est inévitable. Dans le cas d'une base de données, il faut également vérifier que les sauvegardes sont exploitables. Un annuaire français a eu quelques soucis au mois de mars 2007 avec sa base. Ils se sont aperçus que les sauvegardes étaient corrompues depuis le mois de décembre 2006! Résultats, ils ont du faire une restauration à cette date et ont perdu l'ensemble des sites inscrits après décembre 2006.

Pour éviter les attaques automatiques concernant les applications open source, une défense simple est de ne pas les utiliser et de concevoir vos propres applications. Le premier avantage est de coller pile poil à votre besoin. Le second est que vous maîtrisez votre code et n'ajoutez pas de faille inutile. D'autre part, même si vous êtes faillible, il est peu vraisemblable qu'un pirate perde son temps chez vous pour dénicher une porte dérobée, à moins que vous soyez un énorme site renommé. La méthode a cependant des inconvénients. D'une part, ce n'est pas à la portée de tout le monde de faire du développement et qui plus est, du développement propre. Le plus gênant est que tout le temps passé sur le code est autant de temps pris au détriment du contenu ou d'une autre tâche.

Je reviendrai une autre fois sur la répartition du temps entre les différentes tâches de webmastering mais l'un des dilemmes est bien de conserver un équilibre entre les différentes occupations. C'est d'autant plus vrai que si votre site peut présenter quelques particularités sur certains points, il est peu vraisemblable que vous ne puissiez pas réutiliser un logiciel de forum existant ou un programme de galerie d'images déjà tout fait. Les montées de version de ces applications proposent de nouvelles fonctions à moindre coût pour vous.

Une alternative consistent à employer des logiciels open source et à les personnaliser assez profondément pour votre usage. Avec un peu de chance cela occulte certaines failles et vous protège des robots hacker même si cela pose quelques difficultés pour les maintenir par la suite, comme vous aviez dévié de la version officielle.  

Dans le même ordre d'idée, si vous avez les moyens, vous pouvez opter pour un serveur dédié. Là aussi, cela requiert quelques compétences et une discipline pour remettre à jour non seulement vos applications mais le système d'exploitation. Cela vous permet en revanche de rester maître chez vous et même d'opter pour un système d'exploitation un peu exotique. Dans le passé - cela remonte à plus de cinq ans maintenant - un de nos voisin avait laissé une ouverture béante par laquelle est passé un pirate qui a lancé ses scripts pour  devenir maître du système d'exploitation. Heureusement pour le serveur - et pour nous tous - , le système d'exploitation n'était pas sous la version de Linux attendue et le pirate est reparti bredouille.

Pour ma part, la maintenance d'Animint reste un hobby – hobby éclairé car le site me sert souvent de laboratoire par ailleurs – mais nous avons pris un minimum de précautions pour éviter une trop grande déconvenue en cas de dégâts. Je vous invite à faire de même si ce n'est pas déjà fait.

Securite

Discuter de ce billet sur le forum - Laisser votre commentaire »

La fin du site Animint

Par Pazu le 27 mars 2007 18:03 :: Webmastering :: Aucun commentaire »

En débutant ce blog, j'avais exprimé les raisons de sa création et sa complémentarité avec le site. En effectuant la rétrospective des dix ans d'Animint, j'avais mentionné quelques grands sites de japanimation qui se sont transformés en archives au profit du blog de leur auteur, beaucoup plus vivant et j'avais exprimé la possibilité qu'Animint fasse de même.

A l'heure actuelle, le site comporte des rubriques bien indépendantes du blog. Certaines comme la liste de CDs ou les Newsgroups internet ont un fort goût d'archives mais d'autres sont mises à jour régulièrement. Peut être pas aussi souvent que d'autres sites mais au moins de façon périodique. Je pense notamment à la base de données, aux listes de parutions et aux liens web. Le fait d'avoir délégué certaines tâches répétitives m'a permis de me concentrer un peu mieux sur les dossiers et notamment ce blog.

Quand vous vous occupez d'un site, vous essayez de répartir votre temps entre différentes tâches : D'abord, la gestion proprement dite, à savoir la validation des contributions et les réponses aux mails par exemple. Ensuite il y a bien sûr le contenu à alimenter et les espaces communautaires à animer. C'est essentiel pour inciter les visiteurs à revenir. Viennent ensuite les actions pour alimenter la notoriété externe du site, en optimisant son référencement et en gérant la mise en place de nouveaux liens à partir d'autres sites.

Enfin, et ce n'est pas la moindre des tâches, il faut penser à maintenir, améliorer et enrichir les services offerts. Cela peut être un changement d'apparence, proposer une interface meilleure ou carrément se lancer sur un nouveau créneau. C'est loin d'être évident, sachant que toutes les idées ne sont pas bonnes à prendre alors que d'un autre côté, l'absence d'une fonctionnalité peut s'avérer néfaste. Par exemple, vous ne pouvez pas imaginer aujourd'hui de lancer un site avec beaucoup de page et sans système de recherche ou de classification de ses articles.

En construisant la première monture technique de ce blog, j'étais plutôt allergique aux nuages de tags et je me contentais des catégories. En consultant maintenant de façon courante d'autres blogs et en voyant le nombre de billets augmenter, l'idée devient moins saugrenue et j'apprécie le fait de pouvoir naviguer dans des archives à l'aide de mots qui me semblent plus pertinent que des noms de catégories trop générale. Je suppose que vous aussi.

C'est techniquement un peu redondant avec le moteur de recherche mais sans doute plus convivial. L'implémenter accentuera en revanche l'impression d'avoir un site dans le site. Les blogs partent des réflexions de leur(s) auteur(s) et nous reconnaissons un blog à succès lorsqu'ils forment une véritable communauté, l'un des fameux credo du web 2.0.  C'est loin d'être encore le cas ici et je soupçonne fortement d'avoir une audience différente entre le site et le blog, en tout cas différente de celle du forum.

Sur le principe, cela ne me gêne pas de conserver vivant le site d'un côté et le blog de l'autre, avec deux pages d'accueil en quelques sortes – trois si vous comptez My Animint – Chaque partie permet d'explorer des domaines du webmastering similaires mais quand même différents.

C'est cependant un peu dommage de voir diluer les informations et les interventions. J'ai quelques difficultés à trouver la bonne formule de passerelles entre les deux. Déporter certaines discussions à partir du blog sur le forum n'a pas l'air d'être très efficace de ce côté là. Sans doute faudra-t-il reporter les titres des derniers billets sur la page d'accueil du site, maintenant que le rythme d'écriture s'est accéléré. Cependant, cette page n'est pas extensible à l'infini et elle est sans doute déjà trop chargée. Peut-être qu'un lecteur émettra-t-il une bonne idée ? 
 
CG manga

Discuter de ce billet sur le forum - Laisser votre commentaire »

Ouverture du service REST

Par Pazu le 17 décembre 2006 15:12 :: Webmastering :: 2 commentaires »

Il y a quelques années, lorsque vous vouliez être au courant des dernières nouvelles sur l'internet, vous deviez parcourir plusieurs sites web et cela régulièrement. Maintenant, avec les flux RSS, vous pouvez recevoir les notifications de publication quasiment en direct, et mieux, grâce aux outils d'agrégation, vous n'êtes plus obligé d'aller visiter les sites distants. En un même endroit, vous avez tous les éléments d'information.

Les fonctionnalités apportées par les flux RSS sont cependant limitées et ce qui marche bien pour les actualités n'est pas adaptée à d'autres domaines. Je pense en particulier aux critiques d'anime par exemple, ou lorsque vous avez besoin d'une liste d'épisodes. Au mieux vous allez fouiner dans vos sites web préférés ou bien, vous devez passer par un moteur de recherche global en espérant tomber sur la bonne page web.

Il existe depuis plusieurs années des logiciels gratuits qui vous permettent de gérer votre base de donnée en locale et de la compléter avec des informations lues sur le web. Vous avez le projet Animelamp par exemple, en ce qui concerne les anime. Vous avez aussi des robots qui restent sur IRC (Internet Relay Chat) tout en interrogeant le web à la demande des utilisateurs sur le channel qui recherchent telle ou telle critique sur un titre. Tous ces logiciels se connectent au web et parsent les pages html des sites, quand ceux-ci n'offrent pas de facilité particulière. L'inconvénient d'une telle situation est que le code de l'agrégateur doit être revu si le site change de look.

Heureusement, il existe des moyens pour faciliter ces interrogations  depuis l'extérieur d'un site, grâce à la mise en place de services dits services web via des interface ou API.  Le site de référence Animenfo en propose un, par exemple, même si la stabilité n'est pas au rendez-vous. Il existe différentes  solutions pour  ouvrir  le système d'information d'un site à des outils extérieurs. Un protocole comme SOAP offre de nombreuses possibilités mais reste lourd à implémenter aussi bien du côté serveur que du côté client. Il est plus facile d'utiliser un système qui s'appuie sur les adresses web bêtes et méchantes, et les fonctions de base associées. C'est le premier principe de REST (Representational state transfer) que nous avons décidé d'appliquer dans le nouveau service offert sur Animint.

Les détails sont expliqués sur la page de présentation de REST de notre site, mais pour résumer, vous avez désormais accès aux éléments de la base de données des anime dans un format XML, tout en conservant une bonne interactivité pour rechercher un titre. Cela vous affranchi de la couche de présentation et de formattage des données. A vous après d'en faire l'usage.

Il s'agit là d'une première version, qui peut être améliorée et complétée avec d'autres contenus. Le tout est mis à votre disposition sous sous un contrat Creative Commons - paternité et pas d'utilisation commerciale. Cela exclut la reprise de ces informations sur les pages de sites web avec de la publicité, par exemple, et sans notre accord.


A votre service

Discuter de ce billet sur le forum - Laisser votre commentaire »

Un nouveau forum pour Animint

Par Pazu le 11 décembre 2006 21:12 :: Webmastering :: Aucun commentaire »

Animint utilise actuellement une version dérivée du phpBB forum version 2. Une version dérivée, d’une part parce qu’il s’agit de la branche php5, dont le code est assez différent de l’édition officielle et d’autre part, à cause des quelques modules en plus, dont certains sont faits maison. PhpBB est une usine à gaz mais paradoxalement est bien modulable, sans qu’il n’y ait une trop grande détérioration des performances ou une complication de la maintenance, par rapport à la version « nue ». Le choix de l’application forum est donc bien pérennisé par rapport à la situation actuelle.   

Certains projets pour le site reviennent cependant à la surface et l’un d’entre eux peut nous obliger à modifier encore plus en profondeur le forum. A ce stade de réflexion, il peut s’avérer utile de partir d’un nouvel outil de forum, quitte à y réintégrer toutes les fonctionnalités actuelles. Par rapport à d’autres outils web, phpBB 2 est maintenant dépassé, après trois années sans évolutions majeures.

Vous avez toujours la possibilité de recoder un outils forum complètement mais c’est autant de temps en moins consacré au contenu de votre site. L’intégration d’un outil tiers n’est pas toujours aisée mais nous nous en accommodons bien.

Des applications plus légères comme punBB font fi des multiples services et gadget de phpBB 2 et offre un service de forum basique mais plus rapide en terme de réponse. Hélas, certaines possibilités telles que les messageries privées ne sont plus des gadgets et quand vous vous retrouvez avec un forum punBB, vous vous empressez d’installer un, voir plusieurs modules, pour rajouter ce genre de services. Ce qu’il ne faut pas faire. En effet, la version légère de départ s’alourdit et n’est pas optimisée pour fonctionner avec de multiples modules. Les performances s’effondrent par rapport à un bon vieux forum en phpBB, à ce stade. C’est un comble. L’aspect beaucoup plus modulable et simple à intégrer dans des systèmes tiers est en revanche un bel attrait.

La grande référence de forum qui surgit à chaque fois est Invision Power Board mais il s’agit d’un logiciel payant et loin d’être bon marché pour un particulier : La version standard est facturée 70 € et même si l’interface est sensationnelle l’investissement reste lourd pour un site amateur.

Parmi les solutions gratuites que nous confrontons à phpBB, nous retiendrons surtout Simple Machines Forum, qui se veut complète et rapide, et à la pointe de la technologie en ayant recours, par exemple, à des fonctions AJAX  pour faciliter certaines tâches. SMF est arrivé semble-t-il à maturité, avec une communauté très dynamique. D’un autre côté, la communauté phpBB est très importante et les équipes de développement, qui sont sorties de leu léthargie cette année, en sont à une quatrième version beta de phpBB 3, qui est très prometteuse. Dans ces conditions, un choix s’avère difficile et il semble urgent d’attendre avant de se lancer dans une migration lourde vers SMF, en espérant qu’une version stable de phpBB 3 sorte relativement rapidement.

Forum Animint

En savoir plus:
http://www.phpbb-fr.com/
http://www.invisionboard.fr/
http://www.punbb.fr/
http://www.simplemachines-fr.org/

Discuter de ce billet sur le forum - Laisser votre commentaire »

Filtre naïf de Bayes en Php

Par Pazu le 20 août 2006 15:08 :: Webmastering :: Aucun commentaire »

Notre problématique

Notre annuaire de sites francophones  présente toujours un petit souci au niveau des inscriptions via le formulaire de soumission. De plus en plus d’outils automatiques de soumission permettent à un webmestre lambda d’inscrire son site à une flopée d’annuaires, sans s’occuper de savoir si son inscription est pertinente ou pas. Ce n’est pas ce genre d’outils qui améliore le référencement, et même au contraire, cela peut pourrir vos scores si vous inscrivez votre site dans un mauvais annuaire. La problématique du référencement pourra faire l’objet d’un autre billet mais ce n’est pas le sujet abordé ici.

En pratique, nous nous retrouvons avec des soumissions aussi rocambolesques que de la charcuterie auvergnate trucmuche ou que de l’agence marocaine de voyages bidule. Autant d’entrées qui finissent directement au panier mais qui sont casse-pieds à traiter à la longue, étant donnée que nous effectuons une vérification manuelle pour valider chaque site.

Les stratégies possibles

Diverses stratégies s’offrent à nous pour palier au problème. La première est de bloquer les inscriptions automatiques en travaillant sur le formulaire proprement dit. Pendant une période, nous avons ajouté une image dont il fallait copier les caractères affichés dans un champ pour valider le formulaire. Nous pouvions aussi user du code javascript pour transformer le formulaire en un item estampillé Web 2.0 très à la mode. D’un autre côté, ces actions ne vont pas dans le sens d’un site privilégiant l’accessibilité et freinent les utilisateurs dont nous attendons les sites web. De plus, les agents de soumission automatique sont de plus en plus intelligents et rien ne garantie que ces obstacles restent longtemps efficaces. Sur ce point, le formulaire a été retravaillé pour freiner les robots basiques de soumission tout en restant transparent pour un utilisateur humain, sans qu’il ait une contrainte au niveau de l’activation du Javascript et des cookies dans son navigateur web.

En fait, nous nous sommes plutôt penchés sur le vrai problème, que le site soit soumis par un humain ou par un programme, c’est-à-dire rejeter les entrées hors sujets, donc plutôt à s’intéresser au contenu soumis qu’à la façon dont il est soumis. La solution consiste à ajouter un filtre anti-spam, de la même façon qu’il en existe pour le courrier électronique. Un outil comme spam-assassin, largement utilisé et reconnu pour son efficacité, s’appuie en gros sur deux types d’algorithme : Le premier gère des règles précises concernant le format du mail, les entêtes, l’encodage utilisé, etc. De là découle une première note pour le mail traité. Le second type de traitement, basé sur le théorème de Bayes, calcule la probabilité que le contenu du mail soit un spam, proprement dit. Le savant dosage des deux méthodes aboutit à déterminer si le mail est oui ou non un spam. Un tel outil n’est pas directement adaptable sur notre problème de soumission de liens. Tout d’abord pour des questions techniques mais également pour des questions logiques :   A supposer que nous arrivons à définir des règles quant à la validité d’une inscription, elles n’ont rien à voir avec celles gouvernant la bonne syntaxe d’un mail électronique. De même, il y a spam et spam. Spam assassin aura une approche neutre quant à un mail en anglais tandis que nous, nous rejetons une soumission en anglais dans 100% des cas, vue que notre site est francophone. Par ailleurs, nous recensons les boutiques de vente en ligne de manga alors que dans un mail, un message commercial a de fortes chances d’être rejeté. Ici, ce ne sera pas forcément le cas. La base de connaissance ne peut pas être la même.

Cette base de connaissance est basée sur des mots. Dans le passé, les filtres se focalisaient sur des listes blanches et noires, qui suivant la liste où le mot d’un texte était trouvé, le texte était estampillé bon ou spam. Cette approche est très réductrice même si elle peut être un bon complément dans notre cas. Si nous sommes quasiment sûrs de rejeter une entrée avec le mot hardcore, il n’en est pas de même avec le mot boutique : boutique manga aura des chances de passer, contrairement à boutique de lingerie. Il faut raisonner en terme de probabilités. Le filtre s’appuie en fait sur la probabilité pour qu’un mot fasse partie du vocabulaire de spam ou non spam pour en déduire la probabilité du texte en entier quant à son statut de spam ou non spam.

Ed de Cowboy Bebop

Les équations

C’est là où le théorème de Bayes intervient : Il nous dit que la probabilité d’avoir du spam quand nous voyons les mots M1, M2, M3, etc. est égale à la probabilité d’observer du spam dans l’absolu multiplié par la probabilité de voir les mots M1, M2, M3, etc.  dans un texte de spam, le tout divisé par la probabilité de voir les mots M1, M2, M3 dans un texte, quoiqu’il soit.

P(S | M1, M2, M3, …) = P (S) * P (M1, M2, M3, … | S) / P (M1, M2, M3, …)

Nous considérons que les probabilités pour chaque mot, qu’il fasse partie du vocabulaire spam, lorsque nous les observons dans la nature, sont décorellées. Ceci est faux dans l’absolu, étant donnée la richesse de notre langue et les associations de mots, mais cela nous permet d’écrire, avec cette vision naïve :

P (M1, M2, M3, …| S) = P (M1 | S) * P (M2 | S) * P (M3 | S) …
P (M1, M2, M3, …) = P (M1) * P (M2) * P (M3) …

C’est-à-dire que la probabilité de voir apparaître les mots M1, M2, M3 dans un spam, ou dans texte, est égale au produit de la probabilité de chacun de ces mots dans un spam, ou respectivement, dans un texte. Nous notons désormais P (S | D) = P (S | M1, M2, M3, …), M1, M2, M3, … constituant le document D à traiter.

Du coup, la formule devient
P (S | D) = (P (S) * P (M1 | S) * P (M2 | S) * P (M3 | S) …) / (P (M1) * P (M2) * P (M3) …)

Suivant le même principe, nous pouvons remplacer la classe spam, S, par la classe non spam, NS, dans la formule.

P (NS | D) = (P (NS) * P (M1 | NS) * P (M2 | NS) * P (M3 | NS) …)  / (P (M1) * P (M2) * P (M3) …)

Le dénominateur Z = (P (M1) * P (M2) * P (M3) …) est commun aux deux formules et n’a donc pas d’incidence sur la probabilité qu’un texte avec les mots M1, M2, M3,.. soit un spam ou un non spam. L’enlever nous fait juste perdre un coefficient de normalisation de la valeur de P (NS | D) et de P (S | D).

De toute façon, en passant Z à gauche des équations, nous obtenons

Z =  (P (NS) * P (M1 | NS) * P (M2 | NS) * P (M3 | NS) …)  / P (NS | D) = (P (S) * P (M1 | S) * P (M2 | S) * P (M3 | S) …) / P (S | D)

D’où

P (NS | D) / P (S | D) = (P (NS) * P (M1 | NS) * P (M2 | NS) * P (M3 | NS) …) / (P (S) * P (M1 | S) * P (M2 | S) * P (M3 | S) …)

Les probabilités sont des nombres inférieurs à 1, voire beaucoup inférieur à 1. Si le nombre de mots est élevé, les multiplications ci-dessous peuvent rapidement devenir un problème de traitement au niveau de la machine, qui est limitée en terme de précision. Il est donc judicieux de passer à l’usage du logarithme népérien qui adoucit la profondeur des calculs.

Ln (P (NS | D) / P (N | D)) = Ln (P (NS) / P (S)) + Ln (P (M1 | NS) / P (M1 | S)) + Ln  (P (M2 | NS) / P (M2 | S)) + (P (M3 | NS) / P (M3 | S)) + …

Un document D est un spam si bien entendu

P (NS | D) < P (N | D) 

Donc si :

P (NS | D) / P (N | D) < 1.

Ce qui donne avec le logarithme népérien :

Ln (P (NS | D) / P (N | D)) < 0

Soit finalement si:

Ln (P (NS) / P (S)) + Ln (P (M1 | NS) / P (M1 | S)) + Ln (P (M2 | NS) / P (M2 | S)) + (P (M3 | NS) / P (M3 | S)) + … < 0

L’apprentissage

L’équation obtenue n’a d’utilité que si nous connaissons les valeurs de P (NS),  P(S),  P (M1 | NS), P(M2 | NS), P(M3 | NS), …, P(M1 | S), P(M2 | S), P(M3 | S), …etc.

Ces valeurs sont obtenues par apprentissage. En langage de probabilité, nous faisons des tirages et en déduisons les valeurs suite à l’observation. Pour revenir à quelque chose de moins théorique, l’apprentissage du spam et no spam, par un système, peut être simple.

Nous lui soumettons différents documents en lui signalant s’il s’agit d’un texte que nous classerions spam ou non spam. Il calcule le nombre d’occurrences pour chaque mot, pour chaque classe, spam et non spam, et il en déduit les probabilités d’avoir du spam, d’avoir du non spam, et pour chaque mot, la probabilité qu’un mot soit vu dans un spam ou dans un non spam.

Il faut une base solide pour que les valeurs soient significative et que vous ne preniez pas comme source, des probabilités marginales. Si mes souvenirs sont bons, en pratique, un filtre anti spam pour mail s’appuie sur quatre mille messages.  Cependant, l’apprentissage et l’observation sont imparfaits. Il est peu vraisemblable d’ailleurs que vous puissiez fournir l’intégralité des mots en apprentissage au système. Si un mot est complètement inconnu, il n’est pas pris en compte pour l’équation. Cependant, vous rencontrerez les cas où vous aurez une probabilité pour un mot en classe spam, mais pas en classe non spam, ou bien l’inverse. Supposons que le mot Martinique a été trouvé parmi les spam mais que nous n’avons pas d’occurrence dans les non spam. P (Martinique | NS) = 0 et P (Martinique | S) = 1 dans ce cas. Dans l’absolu, c’est faux, car il se peut qu’il y ait un site manga qui aurait le mot Martinique dans sa description, par exemple. P (Martinique | NS) = 0 vient d’une observation imparfaite et vient plomber notre équation en donnant une valeur moins l'infini, faisant fi des autres facteurs qui auraient pu tirer la valeur dans un sens ou dans l’autre.

Ce qui est sûr en revanche, c’est que P (Martinique | NS) est faible, en tout cas plus faible que les probabilités observées. Dans l’équation, P (Martinique | NS) devient ainsi non nulle. C’est ce que nous appelons dans le jargon, un lissage de Laplace.

L'implémentation en PHP

Il existe quelques exemples sur le net de codage de filtre utilisant l’application naïve du théorème de Bayes. Dans notre cas, nous nous sommes limités à deux classes, spam et non spam mais nous pouvons avoir des applications avec plusieurs classes. Cela a l’inconvénient de compliquer les explications et de nous éloigner de notre but initial, qui est d'effectuer un choix binaire. Des recherches sur les mots clefs naive bayes theorem ou encore bayesian classifier devraient vous rapporter un bon nombre d’explications, généralement en anglais, hélas pour vous, si vous êtes anglophobe.

Un exemple intéressant pour débuter est celui trouvé en français sur le blog d’XHTML.net. Au-delà  du codage des boucles de calcul, son auteur propose une implémentation complète avec formulaire et base de données derrière, avec une approche objet quant à la conception du code concernant les filtres bayesiens.

Mes quelques remarques

En ce qui concerne le code fourni sur XHTML.net

-    Le code est un exercice complet donc comporte une partie de connexion et de gestion de la base de données. Si vous avez déjà une couche d’abstraction pour votre base de données, quelques retouches sont nécessaires.

-    Le filtre prévoit l’utilisation d’une liste de mots à ignorer et ce, à juste titre. Un mot comme ‘site’ dans notre cas, n’a aucune incidence sur la décision de spam ou non spam. Autant ne pas en tenir compte avent de polluer notre base de connaissance avec. L’implémentation se limite à une insertion en dur dans le code, d’un tableau de mot. Il vous faudra coder la gestion de cette liste par la base de données. Rien de bien méchant.

-    Les calculs des probabilités s’effectuent directement en produit, au lieu d’utiliser les logarithmes népériens. Même si une valeur est mise en facteur pour éviter les dépassements de précision, celle-ci n’est pas adaptée dès que vous avez plusieurs mots. Le mieux est sans doute d’insérer des fonctions log, qui transforment ensuite vos produits en sommes et vous donnent une réserve en terme de calculs.

-    P(S)  est déduite dans le code en faisant le rapport du nombre d’occurrence de mots trouvés en spam par le nombre total d’occurrences des mots. Elle n’est pas déduite du rapport du nombre de documents spam par le nombre total de documents.

-    L’outil prend en compte dans les calculs les probabilités d’un mot même s’il n’a été rencontré qu’une fois. Même avec le coefficient de lissage de Laplace, les probabilités sont faussées. Dans notre version pour les liens, nous n’en tenons compte que si le mot a plusieurs occurrences.

-    J’ai des doutes sur la valeur du coefficient choisi pour le lissage de Laplace. Un autre document sur le net proposait une valeur précise, mais visiblement empirique. Il faudrait le retrouver.

Urd et Skuld devant un ordinateur

Discuter de ce billet sur le forum - Laisser votre commentaire »

Animint a dix ans

Par Pazu le 27 mai 2006 12:05 :: Webmastering :: Aucun commentaire »

C'est effectivement en mai 1996 que nous avons mis une première version finalisée du site Animint. A cette occasion, voici une rétropective audio sur les dix années passées depuis la création du site.

La radio fonctionne avec le Real player 10. Si vous ne l'avez pas, vous pouvez aller télécharger le player gratuit sur le site de l'éditeur. Attention, sur le site on vous propose en premier le lecteur payant après une courte période d'essai. Le basic free player (le lecteur gratuit) est toujours disponible mais moins en évidence.

Discuter de ce billet sur le forum - Laisser votre commentaire »

Sources d'information sur les nouvelles séries

Par Pazu le 17 mai 2006 21:05 :: Webmastering :: Aucun commentaire »

Au moins une fois par semestre, une vague de nouveautés déferle depuis le Japon avec une floppée de nouvelles  séries.  Pour s'y retrouver,  certaines  ressources sont disponibles. Tout d'abord les magazines specialisés  japonais, qui annoncent à l'avance les titres les plus attendus, ainsi que les sites officiels des studios japonais ou des chaines de télévision. Il est courant que chaque titre paru ait maintenant son propre site web. Certes, ces sites web sont en général très peu fournis tant que la diffusion de l'anime n'a pas commencé.

Plusieurs sites web outre atlantique s'occupent  de rencenser toutes les sorties et s'efforcent de fournir le maximum d'éléments avant la diffusion ou dès qu'elle commence. Dans le temps, ce ne sont pas forcément ces sites qui donneront les informations les plus complètes sur les séries en question. Animenfo (http://www.animenfo.com) est sans doute le site le plus connu sur le sujet mais d'autres adresses existent comme Uknighted Manganime (http://manganime.animeblogger.net): La présentation est plus sommaire mais le formule d'ouvrir un Wiki à chaque saison permet d'avoir là une synthèse de plusieurs sources et d'avoir sans doute la liste la plus complète.

Côté français, les addresses trouvées reprennent les informations données par d'autres sites à coup de traduction automatique, ce qui est fort dommage : si les données comme les  dates ou les titres sont bonnes et même enrichies,  les textes des résumés n'ont souvent aucun sens.

Season Wiki

Discuter de ce billet sur le forum - Laisser votre commentaire »

Baladodiffusion en folie

Par Pazu le 10 avril 2006 18:04 :: Webmastering :: 6 commentaires »

Baladodiffusion est le terme francisé  proposé au Québec pour dire podcasting, sans faire forcément référence à la marque à la pomme.

Sans entrer dans les détails, nous allons dire que c'est un moyen de  diffusion de fichiers sonores ou vidéo sur internet. En particulier, la baladodiffusion permet aux utilisateurs d'automatiser le téléchargement des émissions, notamment pour leur baladeur numérique ou sur leur ordinateur personnel, pour une écoute ultérieure.

Le concept s'est fortement développé avec l'essort des blogs et il est entré dans les moeurs des internautes.

En ce qui concerne les anime manga, plusieurs sites commencent à proposer des émissions "radiophoniques"  pour aller au delà de la simple liste de morceaux de musiques à la demande.

Vous avez d'abord ceux qui proposent les archives des émissions de radio associative qui ont été diffusées sur les ondes. C'est le cas d'Asia Connection sur  Radio Campus Bordeaux et de Génération Manga sur Radio Campus Clermont-Ferrand.

Il y a ensuite les sites qui se lancent dans l'exercice avec plus ou moins de perséverance. Anime france.info a fait un essai de balado diffusion , ainsi que l'équipe d'Animemu  qui en est à sa deuxième émission au début avril. Je citerai également  Nippon Actu, qui est  un pur magazine audio hebdomadaire, qui est de bonne facture et qui tient le rythme jusqu'à présent.

Il existe également des flux vidéos  mais les seules "émissions" que j'ai pu trouver sont en anglais.  Track-shun TV en est un exemple avec une mise en ligne mensuelle de plusieurs vidéos, qui sont des critiques en image des anime très récents, en général.

Et Animint dans tout ça? Pour l'instant, il n'y aura pas de  flux xml pour permettre la baladodiffusion, pour diverses raisons dont quelques unes sont simplement techniques.  En revanche, avec les outils déjà en place, j'ai déjà procédé à un essai d'émission de quarante cinq minutes,  qui a pour thème les World Masterpiece Theaters.  Le flux est en Real Player 10 et il vous faut donc un lecteur compatible avec ce format.

Haruko Haruhara

Discuter de ce billet sur le forum - Laisser votre commentaire »

Travaux en cours sur Animint

Par Pazu le 28 janvier 2006 15:01 :: Webmastering :: Aucun commentaire »

Hormis certaines tâches récurrentes comme la validation des sites web  dans le portail ou encore la  modération des contributions, quelques travaux ponctuels sont en cours ou en projet.

- Automatisation plus poussée pour la mise à jour des sorties vidéos et manga -- en cours

- Refonte du quizz

- Jeux RPG sur le forum

- Fusion de la base encyclopédique et des listes vidéos/manga

- Nouvelle rubrique "trailer" liée avec la base encyclopédique

- Reprise des archives off lines des actualités japonaises pour les insérer dans la base actuelle

...

Discuter de ce billet sur le forum - Laisser votre commentaire »

Le code derrière ce blog

Par Pazu le 13 novembre 2005 11:11 :: Webmastering :: Aucun commentaire »

Comme pour d'autres parties ou outils de ce site, la mise en place du blog est née en partie d'une envie de mieux connaître la "technologie" derrière. La première étape a consisté à regarder les produits de blog disponibles. Le fait d'avoir un hébergement et de se débrouiller en programmation évite de se restreindre à  des plateformes prêtes à l'emploi mais avec des contraintes de look and feel et des limitation d'utilisation, comme elles sont sur d'autres sites.

Parmi les programmes php de blog qui ont retenu mon attention, il y avait Dotclear et Serendipity.  Ils offrent un grand nombre de fonctionnalités et une bonne souplesse pour être intégré dans un site existant. Dotclear avait cependant  l'inconvénient de ne tourner que sous MySQL alors qu'Animint utilise  plutôt Postgresql, à quelques exceptions près. Serendipity avait l'avantage d'être plus universel mais, à la réflexion, l'une ou l'autre des deux solutions offraient beaucoup de fonctionnalités inutiles dans le cas de ce site : Par exemple, la possibilité de faire ouvrir des blogs par les utilisateurs n'entre pas dans sa vocation. D'autre part, même avec la plus grande souplesse, les produits n'en restent pas moins des outils à part, qui ne s'intègrent pas pile poil dans la gestion du système d'information existant.

J'ai finalement opté pour une écriture de code php fait maison, en recyclant certains objets  déjà programmés pour d'autres  parties du site. Par rapport aux blogs fournis clef en main, certaines fonctions comme le trackback sont absentes mais je les ai zappées intentionnellement, comme j'ai l'impression que les visiteurs ne les utilisent jamais. En revanche, pour l'édition wysiwyg des billets, j'ai eu recours à FCK editor, un module externe, qui est beaucoup plus puissant que les objets que j'avais à ma disposition jusqu'alors.

Discuter de ce billet sur le forum - Laisser votre commentaire »

Animint

anime & manga