JAVA et DNS Dynamiques

Par sécurité, Java, lorsqu’il connait une association nom de domaine-IP, la mémorise de façon infinie. De cette sorte, on évite les attaques de DNS, ou simplement la surcharge inutile des serveurs. Cette philosophie serait interressante si l’on n’était pas confronté certaine fois à des DNS dynamiques, dont l’adresse change régulièrement.

J’ai pour ma part rencontré ce problème sur ce site lorsque j’interrogais mon adresse IP pour ne pas comptabiliser les requetes locales.

Il est alors nécessaire de modifier les règles de sécurité de Java pour autoriser la mise à jour de son cache. Plus précisement, il s’agit de donner une durée de vie au entrées du cache DNS de la machine virtuelle.

Pour ce faire, il faut éditer le fichier présent dans le répertoire du JRE dont le chemin est ../lib/security/java.security et de modifier la ligne networkaddress.cache.ttl pour lui donner une valeur de 180(secondes) par exemple.

Alors, le serveur DNS sera à nouveau interrogé si la précédente requete a plus de 3 minutes.

Les processus JAVA doivent être relancés pour que les modifications soient prises en compte.

Extraire un mot pour en faire un paramètre

Ceci est utile lorsque vous souhaitez passer en paramètre d’un script le ième item retourné par une commande. Ce peut être le cas lorsque vous voulez extraire la taille d’un fichier à partir de la commande ls.

Pour faire celà, une solution simple est de passer par la commande awk comme indiqué ci-dessous :

taille=`ls -l fichier | awk ‘{print $5}’`

Le 5ème argument retourné par la commande ls sera mémorisé dans la variable taille.

Incrémenter une variable en shell

La solution est simple et à retenir :

var=$(($var + 1))

Bien sûr ceci ne se limite pas à une simple incrémentation : toutes les opérations de calcul sont possibles.

Notons que

var=$(( var + 1 ))

fonctionne aussi, mais personnellement il me semble que cet usage est un mauvaise habitude qui pousse à oublier par la suite de préfixer les variables lues par un $

Corriger le bug des tables de Mozilla et autres

Certaines versions de mozilla souffrent d’un bug qui, lors de l’affichage d’un tableau avec des images, font apparaitre des lignes blanches entre les cellules. Ce bug est problématique dans l’ajustement de graphiques. La solution est assez simple à mettre en oeuvre :
Ajouter les lignes suivante dans la page .html intégrant la table, dans la section <HEAD> :

  <style>
     img {display: block}
     iframe {display: block}
  </style>

La ligne img concerne les cellules avec image, la ligne iframe l’insertion d’internal frame qui souffre du même problème.

Compiler plus vite avec GCC

La compilation de programmes au travers de Gcc et de l’outil make est relativement lente, il est possible d’accélerer celà en utilisant l’option -j de make qui permet de lancer plusieurs compilations en parallèle.

Par exemple essayez make -j3 vous constaterez une différence non négligeable.

3 est une bonne valeur pour un processeur, dans une architecture multiprocesseurs, vous pouvez viser plus haut.

Inclusion dynamique et existence de fichier

Il est possible dans une page JSP d’inclure un fichier à l’aide de la commande <jsp:include page=”nomfichier” />

Il est tout autant possible de réaliser une inclusion dynmique de fichier, ce qui est util dans le cas de ce site pour gérer des articles écrits sous forme de fichiers indépendants. Dans ce cas, il est possible d’utiliser la commande suivante : <jsp:include page='<%=obj.getNom()%>’ />

Toutefois, lors d’un inclusion dynamique, il est possible que le fichier à inclure n’existe pas, dans le cas de l’inclusion d’un fichier “.jsp”, son existance est vérifiée et une Exception est levé, il est donc possible de tester celà simplement avec un “try-catch” comme le montre l’exemple ci-dessous :

<%  try {   %>

           <jsp:include page='<%= page.jsp %>' />

<%    } catch ( Exception e ) {  %>

           <jsp:forward page="error.jsp" %>

<%    }    %>

Toutefois, dans le cas de l’inclusion d’une page autre, html par exemple, aucune exception n’est levée si la page n’existe pas, une solution consiste donc à vérifier avec l’inclusion l’existance au non du fichier comme le montre l’exemple ci-dessous. Notons que cet exemple fonctionne avec des chemins absolus et non avec des chemins relatifs, le chemin de la page courante etant plus difficile à gérer.

<% 
        if ( new java.io.File( 
             application.getRealPath( filename )).exists() ) {
%>
         <jsp:include page='<%="/"+filename%>'/>

<%  } else { %>

         <jsp:forward page="error.jsp"/>

<%  }    %>