Publié le 30 Avril 2010

Le truc du moment c'est le nuage, le cloud quoi !

 

Donc en ce jour pluvieux je me suis dit que c'était l'occasion d'essayer Google App Engine.

 

App Engine permet de développer une application sur un cloud assez facilement et à moindre frais, puisque c'est totalement gratuit (au début tout du moins).Bien sûr il y a une contre-partie car il s'agit d'un cloud plutot applicatif et donc on ne peut que construire son application et la déployer dans le cloud, du coup on dépend complétement de google pour se qui est de l'environnement.

 

Contrairement à Amazon on ne peut pas configurer sa plateforme et ses ressources. Mais au moins ça a l'avantage d'être simple pour commencer.

 

Donc c'est très simple et le tutoriel de google et très bien fait. Pour moi ça a marché du premier coup!! donc je ne vais pas le refaire ici mais voici quand meme l'url:

 

AppEngine est disponible sous 2 environnements:

Java : http://code.google.com/intl/fr/appengine/docs/java/gettingstarted/

Python: http://code.google.com/intl/fr/appengine/docs/python/gettingstarted/

 

Juste pour les utiilsateurs d'Eclipse pour installer facilement le plugin il faut aller dans :

Help / Software updates / Find and install ...

puis séléctionner: "Search for new features to install"

puis dans la fenêtre suivante faire "New Remote Site" et saisir l'adresse du dépôt fourni par google :

 

http://dl.google.com/eclipse/plugin/<eclipse version>


<eclipse version> est la version d'eclipse que vous utilisez: 3.3, 3.4 ou 3.5.

 

 

Bref je n'ai pas fini de dérouler le tutoriel mais le Hello World et le User service marche nickel si ce n'est quelques exceptions au démarrage du server de test Jetty (à cause de mon proxy - mais ça sera peut être l'objet d'un prochain article)

Voir les commentaires

Rédigé par Bliz

Publié dans #Java

Repost 0

Publié le 29 Avril 2010

Nous allons voir ici comment créer une archive (zip, tar.gz) contenant les fichiers sources du projet.

 

Cette archive sera créer automatiquement lors de la phase "package".

 

Pour cela il faut modifier le pom.xml et redefinir la balise <build> en définissant une nouvelle balise <execution>:

 

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-2</version>
      <executions>
        <execution>

          <id>source</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptorRefs>
              <descriptorRef>src</descriptorRef>
            </descriptorRefs>
          </configuration>
        </execution>

      </executions>
    </plugin>
  </plugins>
</build>

 

Ceci créera par défaut 3 archives aux formats zip, tar.gz et tar.bz2 dans le repertoire "target" du projet.

 

[INFO] [assembly:single {execution: source}]
[INFO] Building tar : c:\patatos\myproject\target\myproject-1.0-SNAPSHOT-src.tar.gz
[INFO] Building tar : c:\myproject\target\myproject-1.0-SNAPSHOT-src.tar.bz2
[INFO] Building zip: c:\myproject\target\myproject-1.0-SNAPSHOT-src.zip

 


Voir les commentaires

Rédigé par Bliz

Publié dans #Maven

Repost 0

Publié le 28 Avril 2010

Voilà un outil sympa et assez simple qui m'a bien sauvez la mise.

 

Je devais effectuer une transformation XSLT sur un document HTML. Jusque là pas de problème sauf que le document HTML n'était pas au format XHTML. Bref ce n'était pas du XML, ce qui pose problème pour mon traitement XSLT.

 

Heureusement j'ai trouvé le projet JTidy qui permet de transformer du code HTML en code XHTML.

 

JTidy est la version java du projet Tidy HTML développé en C. JTidy est disponible sous forme de jar donc exécutable en ligne de commande.

 

une tache ant et un plugin maven sont également disponible.

 

Toutes les infos sont dispos sur la page du projet: http://jtidy.sourceforge.net/

 

Ici je ne vais m'intéresser qu'au code java qui permet de transformer un document html en xml et donc voici les quelques lignes qui permettent d'effectuer la transformation:

 

package com.over-blog.patatos;

import org.w3c.tidy.Tidy;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;


public class Html2Xhtml
{
    public static void main( String[] args )
    {
        Tidy tidy = new Tidy();
        // C'est là où on indique qu'on veut du XHTML en sortie
        tidy.setXHTML(true);
        try {
          // This is where the magic happens !!
          // La méthode parse permet de prendre une InputStream (en entrée)
          // et d'écrire une OutputStream en sortie

          tidy.parse(
               new FileInputStream("src/test/resources/test.html"),
               new FileOutputStream("src/test/resources/test.xml"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Voir les commentaires

Rédigé par Bliz

Publié dans #Java

Repost 0

Publié le 27 Avril 2010

Pour créer un jar exécutable avec Maven il faut indiquer dans le pom.xml la classe qui contient la méthode main qui sera le point de lancement de l'application.

 

Ceci permettra de créer un manifest correct pour exécuter le jar.

 

Pour cela il faut redéfinir la balise build dans le pom.xml:


<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-2</version>
      <executions>
        <execution>
          <id>create-executable-jar</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptors>
              <descriptor>src/main/assembly/assembly.xml</descriptor>
            </descriptors>

            <archive>
              <manifest>
                <mainClass>com.over-blog.patatos.App</mainClass>
              </manifest>

            </archive>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>


L'utilisation d'un descriptor "assembly.xml" est optionnelle mais permet d'inclure les dépendances directement dans le jar exécutable.

 

Voici donc le fichier assembly que j'utilise pour inclure les dépendances :


<assembly>
  <id>with-dep</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <!-- unpack les dépendances avant de les inclures dans le jar final de l'application -->
      <unpack>true</unpack>
      <scope>runtime</scope>
      <useProjectArtifact>false</useProjectArtifact>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
      <outputDirectory></outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

 

Au final on obtient un jar exécutable qui contient toutes les dépendances ainsi que le manifest indiquant le point de lancement de l'application.

 

On peut donc le lancer directement avec la commande:

 

java -jar Application.jar

 

Voir l'article sur "Comment exécuter un jar"

Voir les commentaires

Rédigé par Bliz

Publié dans #Maven

Repost 0

Publié le 26 Avril 2010

Le nombre de thread disponible au sein du serveur Tomcat se définit dans le fichier de configuration server.xml.

 

La configuration s'effectue au niveau de la balise Connector du service Catalina. C'est cette balise qui permet de définir tomcat comme un serveur "StandAlone".

 

Les attributs qu'il est intéressant de considérer pour augmenter les capacités du serveur sont:

 

acceptCount

taille de la file d'attente des nouvelles requêtes. Cette file est utilisée lorsque tous les threads disponibles sont occupés et qu'il n'y a donc plus "personne" pour traiter les nouvelles requêtes.

(défaut: 100)

maxThreads Nombre maximum de threads disponibles pour traiter les requêtes entrantes. Ce qui revient à définir le nombre de requêtes simultanées. (défaut 200)
processCache Cache contenant les HTTP processor. Définir une valeur assez proche de maxThreads. (défaut 200 - disponible à partir de Tomcat 6.0)

 

Ce qui donnera par exemple:

 

 

<Service name="Catalina">

    <Connector acceptCount="200" connectionTimeout="20000" disableUploadTimeout="true" maxThreads="350" processCache="350" port="80" address="XXX.XXX.XXX.XXX"

redirectPort="8448">

 

Pour plus d'information: http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

Voir les commentaires

Rédigé par Bliz

Publié dans #Java

Repost 0

Publié le 23 Avril 2010

Tout d'abord il faut un fichier SQL (appelons le patatos.sql) qui va aller effectuer une requête en base de données :

 
SET ServerOutput ON;
DECLARE
   tmp INTEGER;
BEGIN
 SELECT COUNT(*) INTO tmp FROM my_table WHERE my_key='patatos';
 DBMS_OUTPUT.PUT_LINE('PATATOS=' || tmp);
END;
/
EXIT;

 

Ensuite il faut un script shell (patatos.ksh) qui va exécuter le fichier SQL et récupérer la valeur retournée:


#!/usr/bin/ksh
# on efface le log d'une utilisation précédente éventuelle

rm sqlplus.log > /dev/null 2>&1
# on exécute le fichier SQL
sqlplus -L ${USER}/${PASSWORD}@${DATABASE} @patatos.sql > sqlplus.log
# on analyse si le fichier de log contient des erreurs
RESULTAT=$(cat sqlplus.log | grep -v "ORA-28002" | grep 'ORA-' | wc -l)
if [ $RESULTAT != 0 ]
then
   echo "   ----    Erreur(s) SQL"
   cat sqlplus.log | grep -v "ORA-28002" | grep 'ORA-'
   echo "   ----    Verifier sqlplus.log pour plus d'information"
   exit 1
fi
# pas d'erreur: on récupère la valeur retournée par la commande SQL
NB_PATATOS=$(cat sqlplus.log | grep 'PATATOS=' | cut -d'=' -f2)
echo "Il y a $NB_PATATOS patatos en base de donnees"

Voir les commentaires

Rédigé par Bliz

Publié dans #Oracle

Repost 0

Publié le 22 Avril 2010

Si vous êtes comme moi vous en avez sûrement eu assez de ces fenêtres pop-ups "Windows update" qui vous invitent à redémarrer votre ordinateur tous les quarts d'heure.

 

mises_a_jours_automatiques.JPG

 

En effet une fois que Windows update a téléchargé et installé une mise à jour, un redémarrage du PC est nécessaire. A cette fin Windows update affiche une boite de dialogue vous invitant à redémarrer votre PC.

 

Oui mais moi je travaille sur mon PC et donc j'ai plein d'applications ouvertes et j'ai pas franchement envie de passer 10 minutes à remettre mon poste de travail dans l'état où je l'avais laisser avant de redémarrer.

 

Je n'ai pas non plus envie de me taper les relances de mises à jour automatiques tous les quarts d'heure. Surtout qu'au bout d'un certain temps on risque de cliquer sur "Redémarrer maintenant" par invadvertance. Et là c'est la catastrophe, on risque de perdre tout ce qu'on avait pas enregistré (oui je sais c'est pas bien mais ça arrive à tout le monde).

 

Tout ça pour dire qu'il y a une solution très simple:

 

il suffit de désactiver le service windows update jusqu'au prochain redémarrage du PC.

 

Pour se faire:

  • Ouvrir le menu Démarrer
  • Cliquer sur Exécuter
  • Taper la commande : net stop wuauserv
  • puis faites "Entrer" ou cliquer sur OK

Le service Windows update est maintenant arrêter. Yes! Plus de pop-ups "Redémarrer maintenant". Par contre il n'y a plus de téléchargement de mise à jour windows. Mais rassurez vous le service se relancera automatiquement lors du prochain redémarrage du PC.

Voir les commentaires

Rédigé par Bliz

Publié dans #Office

Repost 0

Publié le 21 Avril 2010

Pour faire suite à l'article précédent sur les filtres PHP nous allons voir comment utiliser ces filtres pour "nettoyer" les saisies de l'utilisateur (ou toute autre donnée).

 

Nous allons donc toujours utiliser la fonction filter_var mais cette fois-ci non plus avec des filtres "VALIDATE" mais avec des filtres "SANITIZE".

 

Ansi le code suivant supprimera les balises HTML et affichera donc uniquement "Bonjour les amis" (sans les balises <p>)


<?php

$variable = "<p>Bonjour les amis</p>";
echo filter_var($variable , FILTER_SANITIZE_STRING);

php?>

 

On peut également choisir de ne pas supprimer les balises mais de les encodées en appliquant le filtre FILTER_SANITIZE_SPECIAL_CHARS qui donnera le résultat suivant:

 

&#60;p&#62;Bonjour les amis&#60;/p&#62;

 

Voilà il existe toute une série de filtre pour nettoyer différents types de données tels que:

 

email FILTER_SANITIZE_EMAIL
URL FILTER_SANITIZE_URL
Nombre entier FILTER_SANITIZE_NUMBER_INT
Nombre décimal FILTER_SANITIZE_NUMBER_FLOAT

Voir les commentaires

Rédigé par Bliz

Publié dans #Php

Repost 0

Publié le 20 Avril 2010

Aujourd'hui voici une astuce pour valider facilement une saisie utilisateur (email, URL, nombre, somme, etc ...) en PHP.

Pour ceci nous allons utiliser les filtres PHP disponibles grâce à la fonction filter_var.

 

Cette fonction permet en effet de valider une saisie utilisateur avant d'effectuer un traitement dessus (stockage en base de données par example).

 

Par example pour valider une adresse email:

 

<?php

$email = $_REQUEST['email'];
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
   // email OK
   // insertion en base de données

}
else{
   // email non valide
   // affichage d'un message d'erreur par exemple

}

?>

 

Pour valider une URL on utilisera la même fonction avec le filtre : FILTER_VALIDATE_URL.

 

Pour valider un nombre il existe les filtres: FILTER_VALIDATE_INT pour les entiers et FILTER_VALIDATE_FLOAT pour les nombres à virgules flottantes (c'est à dire les nombres avec une virgule).

 

On peut même valider que le nombre se trouve dans un interval défini:

 

<?php

$nombre = $_REQUEST['saisie'];

// définition de l'interval

$options = array("min_range" => 1, "max_range" =>10);

echo "Nombre compris entre 1 et 10: ";
echo filter_var($nombre, FILTER_VALIDATE_INT, array( "options" => $options));

?>

Voir les commentaires

Rédigé par Bliz

Publié dans #Php

Repost 0

Publié le 16 Avril 2010

Net meeting est un outil intégré dans windows qui permet d'effectuer des conf-call et de partager son bureau ou des applications pour que les autres participants puissent suivre plus facilement la conférence.

 

Pour se faire il faut tout d'abord configurer Net meeting qui est un peu caché dans windows. Cette étape de configuration n'est à faire qu'une seule fois, après quoi les raccourcis Net meeting seront créés et on pourra y accéder directement.

 

Pour lancer la configuration il faut ouvrir le menu "démarrer" puis cliquer sur "Exécuter..." en bas à droite du menu.

 

Dans la boîte de dialogue qui s'ouvre il faut taper "conf "dans le champ intitulé "Ouvrir" (c'est pas possible de se tromper, il n'y a qu'un seul champ) - puis cliquer sur "OK" pour démarrer l'assistant de configuration Net meeting.

 

Suiver les étapes de l'assistant en renseignant les informations demandées puis à la fin vérifier que les raccourcis sont créés.

 

Voilà maintenant vous êtes prêt pour lancer votre première conférence.

 

netmeeting.JPG

 

Pour cela, aller dans "Appel / démarrer une conférence hôte" et sélectionner les options qui vous intéressent.

 

Si vous voulez seulement joindre une conférence existant cliquer simplement sur l'icone en forme de téléphone en haut à droite. Puis entrer l'adresse IP de la personne hebergeant la conférence.

 

 

 

 

Voir les commentaires

Rédigé par Bliz

Publié dans #Office

Repost 0