Calcul de nombres premiers

10 février 2010

Je m’intéresse aussi bien à Mike Brant qu’au calcul des nombres premiers. Sous JAVA, j’avais écrit un programme afin de calculer rapidement les nombres premiers. Son algorithme était assez simple: je calcule un nombre premier puis je le mémorise. Ensuite, pour tester les nombres premiers suivants, je tente la division par les nombres premiers calculés auparavant. Cette technique donne d’assez bon résultats.

Lire le reste de cet article »

Une copie de mon blog..

18 janvier 2010

Pour des raisons de simplicité quant à sa mise à jour et sa visibilité sur internet, j’avais envisagé de déplacer ce blog à l’adresse suivante: http://wrey75.wordpress.com/. Finalement, après mure réflexion, je pense que je vais garder (pour l’instant) une double édition.
En fait, utilisant Wordpress dans les deux cas, les articles peuvent facilement être dupliqués. fr.wordpress.com présente quelques défauts. Le fait d’avoir son propre blog aussi…! Donc pour l’instant, la double publication sera de mise jusqu’à ce que je trouve une solution satisfaisante (édition sur iPhone, affichage personnalisé, sauvegardes, etc.).

Simpler is better

14 janvier 2010

La traduction par Google est « la simplicité est préférable ». Ça sonne mieux en anglais. J’ai dû prononcer cette phrase une bonne demi-douzaine de fois aujourd’hui! La réunion s’est faite en anglais, bien entendu. Et pourquoi autant insister?

Parce que la simplicité est la clé de tout programme informatique. Je suis persuadé, comme tant d’autres, que la méthode la plus efficace de développement est l’addition de petites fonctionnalités. Hors, dans le milieu bancaire dans lequel je travaille, on a tendance à préférer l’ancienne méthode du cycle en V. La critique principale de cette méthode est qu’elle est lourde.

Lire le reste de cet article »

Sessions détachées

9 janvier 2010

L’un des moyens les plus efficaces de traiter de grandes quantités de données avec Hibernate est d’utiliser les session détachées (StatelessSession). Cette solution possède l’avantage de permettre l’utilisation des requêtes HQL (ou via des critères avec DetachedCriteria). L’autre avantage est de conserver les capacités de mapping et donc de récupérer des objects JAVA.

Lire le reste de cet article »

Unix: comment trouver le fichier modifié à la date d

2 juillet 2009

Aujourd’hui, un collègue de bureau connaissant mon hobby de la commande Unix m’a posé cette colle: comment retrouver les fichiers modifié à une date d ?

Je me suis penché sur la commande find en recherchant la bonne option: à ma grande surprise, l’option -mtime ne supporte pas une date mais uniquement un nombre relatif de jours par rapport à la date actuelle. Je pensais contourner le problème avec les options -newer et -older mais malheureusement la dernière option n’existe pas. Que faire? Passer pour un imbécile? Certainement pas. Unix, c’est comme un jeu de LEGO, on a toutes les pièces nécessaires pour faire tout ce qu’on veut. Encore faut-il avoir un peu d’astuce pour bien emboîter les pièces.

Lire le reste de cet article »

Le clone parfait

18 mars 2009

Utiliser la méthode clone() est assez mal perçu dans le monde de JAVA. Certains articles déconseillent purement et simplement la surcharge de cette méthode. Cependant, dans le cas d’une implémentation à travers Struts, l’exposition des objets est dangeureuse. En exposant un clone, vous ne prenez aucun risque puisque le méchant pirate va modifier une donnée que vous n’utilisez pas. C’est génial et simple.

Lire le reste de cet article »

Bonjour les navigateurs!

25 février 2009

On savait depuis quelques temps déjà que Internet Explorer n’était pas le spécialiste pour suivre l’implémentation des normes du W3C. Mais avec la présence de nouveaux navigateurs, rien ne s’arrange vraiment.

Lire le reste de cet article »

IP & Sécurité

23 février 2009

Je viens de lire un article sur le site “Comment ça marche?” sur une discussion à propos des adresses IP fixes et dynamiques (je ne ferais pas de lien vers la discussion pour éviter qu’une discussion comportant insultes et inepties soit trop bien référencé par Google). Pour information, voici quelques points de réflexion.

Qu’est-ce qu’une adresse IP?

Une adresse IP est représenté par 4 nombres (compris entre 0 et 255) séparés  par des points. Une adresse IP permet d’identifier de manière unique votre ordinateur sur INTERNET. Par example: 82.125.38.200 est vôtre adresse INTERNET. Si vous avez une adresse IP fixe, celle-ci ne change jamais. Sinon, elle va changer à chaque connexion sur INTERNET (à chaque fois que vous connecterez votre modem).

L’intérêt d’une adresse fixe est de pouvoir facilement gérer un serveur puisque votre adresse ne change pas. Ainsi, vous pouvez imaginer d’héberger votre propre serveur WEB ou FTP. D’un autre côté, votre ordinateur est plus facilement identifiable: votre anonymat est plus faible.

Avec l’arrivée de IP v6 (la nouvelle norme IP), il faut s’attendre à voir disparaître les adresses dynamiques puisque le problème principal des fournisseurs d’accès consiste à avoir suffisamment d’adresses disponibles.

Anonymat

Bien entendu, peu de sites WEB utilise une adresse IP pour vous identifier (pour une raison simple: un site WEB ne peut pas savoir si votre adresse est fixe ou non!). Les sites WEB utiliseront des cookies. C’est plus simple et, surtout, plus fiable.

Il y a quelques années, je me suis aperçu que les clients de AOL utilisait un proxy: chaque requête effectuée au serveur était effectuée via une adresse IP différente. Seul le cookie permattait d’identifier l’utilisateur était fiable. De même, certains outils comme TOR permettent de surfer en tout anonymat en changeant constamment de relai pour récupérer l’information. 

Attaque

Reste les risques d’attaque. Votre adresse IP fixe facilite l’accès à votre ordinateur et donc son attaque. Bien entendu, il y a des parades: la plus simple est de disposer d’un firewall ou d’un routeur NAT.

Le firewall est la solution logicielle pour éviter les attaques venues de l’extérieur. Cependant, ce type de logiciel peut être mis en défaut et, qui plus est, ralenti votre machine et encombre sa mémoire. Le routeur NAT est un appareil très simple: il permet de récupérer vos requêtes et de les transférer sur le WEB; il empêche également toute intrusion sur les ordinateurs qui se trouvent derrière (les vôtres). Pour cela, le routeur crée un mini-réseau avec ses propres adresses IP (192.168.x.x), chaque ordinateur de votre réseau peut se voir l’un l’autre mais les ordinateurs connectés sur Internet ne voient que le routeur et pas vos machines!

Chaque “box” (freebox, neufbox, wanadoobox, etc.) comporte généralement un routeur NAT (ne serait-ce que pour le WiFi). En activant le routeur NAT, vous êtes constamment protégé des intrusions (mais pas des virus, malware, spyware que vous avez pu installer vous-même!). Attention: le fait d’être connecté en WiFi limite votre protection puisque tout ordinateur situé dans le périmètre de votre box est susceptible de s’introduire à l’intérieur de votre réseau!

Conclusion

Adresse IP fixe ou dynamique, cela ne changera pas grad chose. Question sécurité, d’autres paramètres sont plus importants (routeur, firewall, cookies, logiciels espions, etc.) et le fait de surfer sur Internet est plus ou moins anonyme. Cependant, comme chaque site WEB est indépendant, à quoi bon prendre autant de précautions?

 

Revue du code

28 janvier 2009

J’ai dû améliorer quelques parties dans mon code source. Les principaux soucis sont maintenant réglés. Voici quelques petites informations:

  • WEBALIZER fonctionne correctement avec les logs générés par le serveur Jetty. pour cela, j’ai ré-écrit le code utilisé pour générer les logs. Ainsi la classe NCSARequestLog proposé par le serveur Jetty 6 a été utilisée comme base pour écrire ApacheRequestLog. En fait, seul le code permettant de créer la ligne de log a été modifée.
  • La commande cron est utilisée pour générer les statistiques tous les jours et maintenant les résultats sont davantage corrects (nombre de hits, taille des pages, code de retour, etc.).
  • Le fichier de paramétrage “struts.properties” a été passé en mode “production” afin d’améliorer les performances.
  • Quelques soucis avec la fermeture des connexions sur Internet Explorer 5 & 6 sont à déplorer mais contournables en changeant de page (je suppose que le protocole HTTP 1.1 souffre de quelques défauts dans Jetty6 mais je n’ai pas le courage d’y regarder de plus près).

Donc, il reste maintenant à mieux gérer l’interface graphique et l’explication aux utilisateurs de l’application. Par ailleurs, les CGU (Conditions Générales d’Utilisation) ne sont toujours pas rédigées.

Un prochain article sera disponible lorsque l’interface de gestion des newsletters (listes de diffusion) sera au point.

Oxande en alpha-test

21 janvier 2009

Ca y est, le site oxande.com est en ligne. Ce qui ne veut pas dire que le site soit complètement fonctionnel pour autant. Cependant, les problèmes de déconnexions avec MySQL ont été résolus, des fichiers index.html ajoutés afin de masquer l’implémentation FreeMarker et un filtre servlet a été ajouté afin de produire un fichier compatible avec les fichiers de log de Apache.

Ainsi, des statistiques via le logiciels Webalizer sont générées automatiquement toutes les 24h à 3h du matin environ. En écrivant un système de logs de pages WEB via un filtre, on peut donc obtenir la plupart des informations nécessaires à la surveillance du site. Cependant, je suppose que l’utilisation d’un vrai serveur Apache muni du module Proxy (bien qu’après une lecture attentive de l’article, je ne sois pas sûr que ce module convienne à mes besoins).

En tout état de cause, si l’interface de HttpServletRequest est parfaite, la définition de HttpServletResponse présente quelques lacunes: en effet, il est impossible de récupérer le statut HTTP de la réponse une fois celle-ci envoyée. Du coup, je force la valeur à 200 (OK) ce qui n’est pas correct puisque je ne sais pas si ma page a été mise en cache ou s’il s’agit d’une page non trouvée (code 404). Ainsi, le nombre de hits est strictement identique au nombre de fichiers demandé par le client (typiquement, les images d’un site ne sont pas renvoyées au client mais on confirme que le client peut utiliser le cache).

De même, il est impossible de connaître le nombre d’octets renvoyés par le serveur au client (à moins d’utiliser la valeur du “Content-Length”). J’ai (astucieusement?) remplacé cette valeur par le temps de réponse de mon serveur, c’est à dire le temps nécessaire pour renvoyer la page ce qui devrait me donner une estimation assez précise des pages qui se doivent d’être accélérées.

Maintenant, il reste énormément de travail puisqu’il s’agit d’écrire les CGV (ou plutôt les CGU: Condition Générales d’Utilisation) du site afin de se dégager d’un maximum de responsabilité vis-à-vis du client.

N’hésitez pas à jeter un coup d’oeil au site.. À priori, pas mal de choses vont évoluer rapidement (ne serait-ce que les menus de gauche qui sera sans doute remplacés par une barre de menu en haut).