Submit
URL to 800,000 sites!
Blast your website to over 800,000 sites a day, 7 days
a week without lifting a finger! Join now and you'll never have to worry
about submitting your site again. Start getting the hits that you
deserve. simplesitesubmission.com
Pixel Advertising
Buy your pixel ads from just $1 per pixel. Make your ad as
small or as large as you
want. Yeehah
Pixel Advertising
Ad-Brilliance
Buy and sell ad space. Just like Google referral ads, you can
choose which ads show on your website and get paid for showing them. Sign
up today and start buying and selling your ad space. Ad-Brilliance.com
Comme moi, certainement n'aviez vous pas remarqué que depuis le 11 avril 2006, tout programme que vous pouvez écrire ou utiliser doit certainement tomber sous le coup du brevet du siècle : le brevet sur les listes chaînées attribué par l' USPTO . Oui, oui il s'agit bien du truc avec un ou deux pointeurs pour faire marche avant ou marche arrière et qui doit être à peu près aussi vieux que l'informatique.
Sans commentaires, sur le c..tin qui l'a attribué. Mais là, on est pas loin du brevet sur l'instruction IF comme je l'évoquais il y a quelques temps.
Comment ce fait-il que nous n'ayons pas encore notre prix Darwin pour les brevets informatiques?
Un billet comme je les aime de Christophe Thiry fait certainement la synthèse la plus pertinente qui soit sur les questions métaphysiques que se posent les développeurs lorsqu'il s'agit de choisir entre .Net et Java.
Chose très amusante, au moment de lire son billet, quelques minutes plutôt, je venais de terminer la revue de code de ce qui est censé devenir le cadre de référence pour toutes les applications futures d’une très grande institution française. Il se trouve que c’est écrit en Java mais ça aurait aussi bien pu l’être en langage Q (langage quelconque). J'arrive encore une fois, comme trop souvent, à la même conclusion que Christophe: Quelque soit le tuyau utilisé, l’eau qui le traverse dégagera toujours la même odeur nauséabonde…
Récemment, j’ai dû sévir pour tenter d’éradiquer le spam sur ce blog en ajoutant les plugins Captcha et Spamplemousse à Dotclear. Le captcha interdisant aux robots de poster dans les commentaires, il ne me restait alors dans la file de modération uniquement des trackbacks. Ce qui, au départ, me semblait raisonnable. J’ai très vite déchanté. Ces derniers temps, le spam par les trackbacks est en vogue chez nos amis spammeurs et je me suis vite retrouvé avec pas loin d’une centaine de trackbacks à modérer par jour. Autant dire mission impossible. Le captcha côté serveur étant réellement efficace, il ne me restait donc plus qu’à trouver une solution tout aussi efficace pour les trackbacks. Après une petite recherche sur le net, je n’en ai trouvé aucune qui soit réellement satisfaisante de mon point de vue. Soit pas suffisamment fiables, trop lourdes pour l’hébergement ou trop contraignantes pour celui qui allait faire le trackback, bref échec total, aucune ne me convenait. Il ne me restait plus qu’à trouver moi-même une solution simple, légère et transparente.
Point de départ : comment fonctionnent les spammeurs ? Le fait que les billets spammés soient toujours les mêmes permet de déduire qu’ils scannent les urls et qu’une fois qu’ils en tiennent une, ils arrosent dessus quotidiennement. Il suffit donc de fournir pour chaque billet une URL de trackback jetable basée sur une date de péremption. Utilisable sans contrainte pour faire un trackback légitime, elle devient invalide peu de temps après. Elle est donc inutilisable par nos spammeurs. Le tout saupoudré d’encryptage afin qu’il leur soit impossible de constituer eux même une URL valide. J’ai donc mis tout cela en musique la semaine dernière. Maintenant j’ai des URLs de trackback qui ont de la forme suivante :
Et même pas peur, je peux sans crainte mettre un lien sur cette URL de trackback. Dans le quart d’heure qui suit sa publication, elle deviendra de toute façon inutilisable et retournera une erreur.
En un peu moins de 7 jours, à elle seule, cette petite astuce a stoppé 1019 trackbacks de spam sur Archiblog pour un coût zéro aussi bien pour mon hébergeur que pour moi-même! Pendant cette période un seul trackback de spammeur est passé mais il a bien sûr été capturé par Spamplemousse. Et encore, il ne s’agissait pas d’un message de spam mais plutôt d’un sondage fait par un nouveau spammeur sur l’URL du billet car le corps du message de trackback était désespérément vide. Seule l’adresse IP de l’émetteur permettait de penser qu’il s’agissait d’une tentative de spam car elle était en liste noire.
Devant le succès de l’opération et puisque je suis partageur, après avoir enlevé le compteur (qui comptait surtout mon autosatisfaction), j’ai donc décidé aujourd’hui d’en faire un petit plugin expérimental vite fait sur le gaz, nommé Spamtimeout que je vous invite à tester :
Une fois le plugin installé, l’utilitaire de configuration du plugin indique la marche à suivre pour l’activer et le personnaliser. Attention, il faut mettre les mains dans le cambouis et aller modifier les fichiers tb.php de Dotclear et post.php de votre thème pour en tirer parti. Ces manips relativement simples restent tout de même réservées à un public averti.
Je qualifie ce plugin d’expérimental, car son seul but est de permettre au plus grand nombre de tester la solution. Si elle se révèle satisfaisante pour tous, l’idéal serait bien sûr à terme d’intégrer cette solution dans Spamplemousse ou même dans Dotclear car les plugins, entre celui qui fait le café et celui qui ajoute le sucre, ça commence à être un peu la jungle sous Dotclear.
Spamtimeout ne se suffit pas à lui-même, il est complémentaire de Spamplemousse (ou de SpamClear). En effet, il ne protège pas nécessairement de la première tentative si elle est réalisée très peu de temps après le scan ou de celles faites manuellement (mais là c’est un plaisir, car on sait que le spammeur passe plus de temps pour faire son trackback que nous n’en passons à le modérer ).
Voilà, avec ça, les spammeurs n’ont plus qu’à scanner chaque billet à chaque fois pour retrouver une URL valide. Ce que je ne pense pas qu’ils soient prêt à faire car là le rendement serait nettement moins bon. Mais, même dans ce cas, on pourrait alors toujours faire quelque chose en ajoutant par exemple un peu de CSS magique pour compliquer le jeu.
Merci de me faire part de vos commentaires.
Edit: Il semble que la fonction de découverte automatique des URLs de trackback soit fortement appréciée (quand elle fonctionne...). Je viens donc d'ajouter son support dans la version 0.6 et vous invite à la tester. Ca expose un peu plus mais au vu de la façon dont fonctionnent les spammeurs, ça devrait continuer à arrêter l'essentiel des flux (je croise les doigts).
Il n'y a pas que moi qui ai ré-ouvert, les spammeurs aussi on également fait l’ouverture en même temps. Ils m’ont gratifié d’une bonne cinquantaine de billets doux dans les commentaires. J’ai donc dû sévir :
Ajout d’un système de Captcha (accessible bien sûr)
Vous aurez donc maintenant l’occasion de réviser un peu les mathématiques quand vous posterez un commentaire et ne devrez pas être surpris si il n’apparaît pas immédiatement. Tous les commentaires ou trackbacks comportant un mot clé considéré comme pouvant potentiellement faire partie d’un message de spam ou comportant un lien vers un site extérieur seront maintenant modérés à priori et non plus à posteriori.
Mr Simon,
ayant la plus haute estime pour vos compétences, je souhaiterais avoir votre opinion sur un sujet grave:
Au terme de plusieurs années de développements, je vois avec effroi l'apparition du métier à tisser dans notre noble corporation. J'ai été de tous les combats, ainsi j'ai structuré puis encapsulé afin de chasser l'impie de mes programmes.
Mais cette fois-ci la coupe est pleine: j'apprends avec stupeur que l'on veut injecter des greffons sur mon code, sans m'en avertir. Mon code va donc être utilisé, détourné de son objectif initial, dénaturé par de multiples et invisibles GoTos!
J'appelle donc à la révolte! Unissons-nous programmeurs de tous les pays!
Contraquons contre cette soi-disant programmation orientée Aspect juste bonne à nous transformer en petites mains!
Bruno
J’ai commencé par répondre à ce commentaire, mais la "gravité" du sujet évoqué par Bruno m’a amené à considérer de répondre sous la forme d’un billet à part entière. Ceci afin d’attirer l’attention du plus grand nombre sur les mesures à prendre pour empêcher la progression de la programmation orientée Aspect.
Bruno, voici donc ma réponse :
POA, c'est moche ce qui vous arrive. Je comprends très bien que le viol de votre code au plus profond de son intimité puisse vous faire craindre la mise en péril de son intégrité. Mais sachez que vous en êtes avant tout le principal responsable! De par votre attitude, à sans cesse le structurer et a en isoler chacune des fonctions en procédant à une encapsulation systématique vous avez rendu votre code aguichant sous tous ses aspects . Si vous vouliez porter l’affaire en justice, je pense qu’au regard de votre attitude provocante les violeurs/voleurs dont vous parlez seraient relaxés.
Egalement amateur de beau code, je comprends votre douleur et vos craintes. Malheureusement pour vous aider dans votre combat je ne peux que vous donner quelques conseils qui vous demanderons certainement beaucoup de courage et d’efforts pour les mettre en application.
Afin que ce gang de violeurs qui se réclament du mouvement de la programmation Aspect ne puisse plus s’en prendre à votre code, il faut que vous cessiez de les provoquer ainsi en affichant de tels attraits. Pour les repousser, vous devez produire du code qui pour eux sera répulsif. La recette de l’écriture d’un tel code est relativement simple :
Afin d’éviter l’intrusion ultérieure de Gotos invisibles mettez en partout dès le départ ainsi ces intrus trouverons difficilement un endroit où s’installer.
Ne scindez pas votre code en fonction des services qu’il rend mais plutôt en fonction de critères purement techniques dans l’unique but d’en faciliter la rédaction. Ce découpage ingénieux satisfera votre égo de développeur, n’apportera strictement rien en terme de service rendu mais rendra surtout ces services difficilement utilisables par vos violeurs.
Pour couvrir un besoin n’essayez pas de comprendre le « quoi » mais pensez uniquement au « comment ». Cherchez une solution technique. Dès que vous en tenez une, lancez vous. Ne vous inquiétez pas. Si par la suite vous découvriez des besoins que vous n’aviez pas perçus au départ, vous trouverez toujours bien un endroit où les intégrer dans ces grandes procédures monolithiques auxquelles vous aurez naturellement abouti.
Pour chaque nouveau besoin semblable au premier, mettez en pratique la réutilisation. Pour ce, commencez par une opération de copier/coller et aménager ensuite le code ainsi obtenu en fonction du besoin. Les points de passages génériques sont les endroits de prédilection de vos agresseurs. En procédant ainsi vous rendez chaque point de passage unique et donc moins attrayant pour ces derniers.
Utilisez les notions de classes, d’attributs et de méthodes en fonction de vos inspirations du moment en dehors de tout standard et de toute attente. Ceci vous apportera un grand sentiment de liberté et aura le bénéfice de mettre vos violeurs en déroute.
N’utilisez surtout pas de système d’exceptions. Les exceptions ainsi générées pourraient être dérobés par vos voleurs. Utilisez exclusivement des codes de retour dont vous seul aurez le secret.
N’utilisez pas non plus une classification trop précise, elle pourrait fournir des indices à vos agresseurs. Concevez un système hyper générique dans lequel vous seul saurez appliquer le cast qui va bien au moment opportun.
Si vous programmez en Java, pour les mettre définitivement en échec, le must serait bien sûr d’utiliser votre propre ClassLoader en prenant soin de ne passer la main aux autres ClassLoader sous-jacents qu’en cas d’absolue nécessité car c’est par là qu’entrent vos voleurs.
Je sais quelle peine cela peut vous causer de devoir écrire un tel code. Aussi, afin de faciliter votre démarche, je vous conseille d’aller faire un stage dans une SSII très réputée pour vous faire coacher par un développeur ou mieux encore par un architecte. Choisissez cette SSII la plus grosse possible. J’ai en effet constaté de par mon expérience que plus elles étaient grosses, plus les intervenants qu’elles proposaient à leurs clients avaient un talent inné pour produire un tel code. Je les en remercie d’ailleurs tous les jours car après leur passage ils laissent de véritables mines d’or. Quand j’arrive ensuite pour restructurer ces grands projets malades je suis alors accueilli en véritable messie.
Voilà, j’espère que ces humbles conseils que je vous prodigues vous permettrons à vous et à beaucoup d’autres de gagner le combat que vous avez engagé contre la programmation orientée Aspect.
Laurent Simon
Attention, ce billet contient une forte dose d’humour. Sa lecture au premier degré peut provoquer des maladies graves.
Un record bien involontaire, plus de 3 mois sans billet !
En décembre, la charge de travail ne m’a pas permis d’écrire un seul billet.
En janvier, plus d’ADSL pendant 2 semaines, déménagement du blog, 3 semaines pour enregistrer les nouveaux serveurs DNS (merci l’AFNIC)
Ensuite plus le temps de terminer la migration entamée.
Je n’ai toujours pas fait les 100 000 choses que j’avais prévues dans le cadre de cette migration mais si j’attends encore ça risque d’être pour la saint glin-glin. C’est donc décidé, je ré-ouvre.
L'équipe du projet Struts se posait pas mal de questions sur le contenu de l'éventuelle version 2.x. Celle de WebWork avait un beau jouet mais aspirait à un peu plus d'audience pour celui-ci. Vu que l'atout de l'un était le problème de l'autre, il suffisait de réunir les deux pour résoudre les problèmes de chacun.
Face à la déferlante JSF, voilà de quoi redonner des couleurs à Struts (qui en à sérieusement besoin).
Il y a deux semaines c'était IBM, à présent Intel contribue également au projet Harmony. La future JVM libre d'Apache semble susciter un réel intérêt et être bien encadrée. Les classes de la librairie runtime arrivent petit à petit. La carrosserie prend forme. Bientôt, il faudra tout de même trouver un moteur (une VM) pour animer tout ça.
A défaut de savoir quoi faire ou comment le faire, au départ il est toujours bon d'identifier les pièges. C'est d'autant plus vrai en matière de SOA ou l'on entend tout et n'importe quoi. L'article SOA antipatterns d'IBM est un bon point de départ pour balayer les grandes lignes et éviter de tomber dans les pièges véhiculés par pas mal d'idées reçues.
JoSQL, l'outil pour faire des requêtes en mémoire, s'enrichit de solutions prêtes à l'emploi. Il comprend maintenant plusieurs composants directement utilisables et plutôt sympa:
Un tag permettant de lancer des requêtes à l'intérieur d'une page JSP, de filtrer, de trier ou de regrouper des données déjà présentes.
Un filtre pour sélectionner des fichiers dans un fileset Ant à l'aide d'expressions logiques.
Des classes pour composer des jeux de données pour JFreeChart.
Quand je vous l'avais présenté, je cherchais surtout dans quel contexte il pouvait servir. Hé bien, il semble qu'il soit tout à fait adapté pour ce type de tâches.
Free Website
Counter
Get a free counter for your webpage and when your visitors
click the counter you get higher ranking in our top 100 list of your chosen
catagory. Yeehah
Top 100
Affiliate
Network
Does your site have an affiliate program, get more affiliates
by joining Yeehah affiliate
network. Yeehah Affiliate
Network
Exit
Exchange
Welcome to an innovative traffic driving program. We take the
traffic building features of a banner exchange and pop-up technology and
put them together. Instead of rotating huge images, members exchange traffic
by opening another member's website when visitors leave their site!
Exit
Exchange
Free Favicons
Give your website a cool identity with a free favicon, use
any image you
want. Yeehah Free
Favicons
Lets
Swap Links
An innovative targeted traffic driving program. Your exchange
ration is based on quality of traffic you send. The more clicks you send,
the higher your exchange ratio is. Easy coding and no
banners. LetsSwapLinks.com
Domain
Name Appraisal
Before you buy your domain name..STOP! Did you know that your
domain name can affect the value of your website? Use our domain name appraisal
service to get a valuation before you register your domain
name. Submissions &
Appraisals