Tensin

Aller au contenu Aller au menu Aller à la recherche

vendredi, mai 21 2010

Installation APR sous TomCat

J’utilise le serveur d’applications TomCat 6, aussi bien en développement sur poste local sous Eclipse/WTP qu’en environnement Linux (pour faire tourner Hudson ou Sonar).

Une petite optimisation permettant de gagner un peu de temps au démarrage est d’installer les APR : ApachePortableRuntime.

Avant :

INFO: Server startup in 8477 ms

Une fois APR installé :

INFO: Server startup in 7908 ms

Donc un gain pas énorme au final, mais vu que la manipulation d’installation n’est pas très compliquée, autant ne pas s’en priver.

La doc se trouve ici : http://tomcat.apache.org/native-doc/ Site officiel du module APR : http://apr.apache.org/

Installation de APR et APR-UTILS

Installation de APR :

tar xvzf ../apr-1.3.8.tar.gz 
cd apr-1.3.8/
./configure 
make && sudo make install

Installation de APR-UTILS :

tar xzvf ../apr-util-1.3.9.tar.gz 
cd apr-util-1.3.9/
./configure --with-apr=/usr/local/apr/bin/
make
sudo make install

Installation de Tomcat APR

cd jni/native/
./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-java-home=/home/applications/java/jdk1.6.0_15 --with-ssl=no --prefix=/home/applications/apache/tomcat/6.0.18
make
make install

Démarrage autonome de TomCat

Il suffit de mettre en place partie setenv.sh comme indiqué dans la documentation pour lancement manuel de tomcat

Démarrage de TomCat sous Eclipse/WTP

Il suffit, dans les préférences du serveur sous WTP (Web Tools Platform), d’indiquer sous “Open Launch Configuration” / “Environnement” la même valeur de la variable LD_LIBRARY_PATH que ci-dessus (soit le chemin donné à la compilation jni ci-dessus sous “prefix”).

Exemple sur mon poste : Eclipse (paramétrie APR Tomcat)

Contenu du répertoire lib de Tomcat :

~/applications/apache/tomcat/6.0.18/lib> lr
total 6260
-rw-r--r-- 1 domain users   49019 2008-07-22 02:01 tomcat-i18n-ja.jar
-rw-r--r-- 1 domain users   42702 2008-07-22 02:01 tomcat-i18n-fr.jar
-rw-r--r-- 1 domain users   45686 2008-07-22 02:01 tomcat-i18n-es.jar
-rw-r--r-- 1 domain users  197443 2008-07-22 02:01 tomcat-dbcp.jar
-rw-r--r-- 1 domain users  742085 2008-07-22 02:01 tomcat-coyote.jar
-rw-r--r-- 1 domain users   83787 2008-07-22 02:01 servlet-api.jar
-rw-r--r-- 1 domain users   72183 2008-07-22 02:01 jsp-api.jar
-rw-r--r-- 1 domain users 1395264 2008-07-22 02:01 jasper-jdt.jar
-rw-r--r-- 1 domain users  511634 2008-07-22 02:01 jasper.jar
-rw-r--r-- 1 domain users  102282 2008-07-22 02:01 jasper-el.jar
-rw-r--r-- 1 domain users   27690 2008-07-22 02:01 el-api.jar
-rw-r--r-- 1 domain users  228471 2008-07-22 02:01 catalina-tribes.jar
-rw-r--r-- 1 domain users 1129912 2008-07-22 02:01 catalina.jar
-rw-r--r-- 1 domain users  123115 2008-07-22 02:01 catalina-ha.jar
-rw-r--r-- 1 domain users   49145 2008-07-22 02:01 catalina-ant.jar
-rw-r--r-- 1 domain users   10805 2008-07-22 02:01 annotations-api.jar
-rw-r--r-- 1 domain users   18501 2009-07-21 18:01 tomcat-devloader.jar
drwxr-xr-x 2 domain users    4096 2009-11-06 15:54 pkgconfig
-rwxr-xr-x 1 domain users  613512 2009-11-06 15:54 libtcnative-1.so.0.1.16
lrwxrwxrwx 1 domain users      23 2009-11-06 15:54 libtcnative-1.so.0 -> libtcnative-1.so.0.1.16
lrwxrwxrwx 1 domain users      23 2009-11-06 15:54 libtcnative-1.so -> libtcnative-1.so.0.1.16
-rwxr-xr-x 1 domain users     939 2009-11-06 15:54 libtcnative-1.la
-rw-r--r-- 1 domain users  880544 2009-11-06 15:54 libtcnative-1.a

Démarrage d’Eclipse / WTP

Si tout s’est bien passé on aura :

6 nov. 2009 15:59:20 org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.16.
6 nov. 2009 15:59:20 org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
6 nov. 2009 15:59:20 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: Failed to initialize the SSLEngine.
6 nov. 2009 15:59:20 org.apache.coyote.http11.Http11AprProtocol init
INFO: Initialisation de Coyote HTTP/1.1 sur http-8080
6 nov. 2009 15:59:20 org.apache.coyote.ajp.AjpAprProtocol init
INFO: Initializing Coyote AJP/1.3 on ajp-8009
6 nov. 2009 15:59:20 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 832 ms
6 nov. 2009 15:59:20 org.apache.catalina.core.StandardService start
INFO: D�marrage du service Catalina
6 nov. 2009 15:59:20 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.18
INFO: Using JVM encoding charset = UTF-8

dimanche, mars 21 2010

Alternatives à PowerPoint / OpenOffice

icon_powerpoint.pngLassé des innombrables bugs d’OpenOffice et des incompatibilités avec les fichiers PowerPoint qui me font vite perdre trop de temps pour de simples problèmes de mises à pages (mhh les puces sous OpenOffice qui réagissent n’importe comment …), j’ai trouvé quelques alternatives plutôt pas mal.

Dans mon cahier de charges de la solution alternative à PowerPoint :

  • simplicité de la solution (simplicité d’utilisation, simplicité d’installation) ;
  • portabilité (doit pouvoir fonctionner sur plusieurs plateformes) ;
  • capacité à publier de différente manière la présentation : sous forme de slideshows bien sûr (projection au vidéo-projecteur), mais aussi en version papier voir faciliter la publication HTML au sein d’un site ;
  • génération automatique de la table des matières (parce que je trouve aberrant de perdre du temps sur çà en rédigeant un .ppt) ;
  • navigation intelligente (notamment lorsqu’il y a des animations - par ex. des puces qui apparaissent de manière incrémentale, pouvoir passer à l’animation suivante bien sûr mais aussi directement passer au slide suivant) ;

J’ai trouvé plusieurs outils, détaillés ci-dessous, qui respectent presque tous la même philosophie : un moteur HTML (ou XHTML, ou XML) avec un peu de JavaScript pour gérer l’aspect slideshow.

  • HTML Slidy ;
  • S5, son add-on de rendu visuel Presentacular, et le fork S5 Reloaded ;
  • Slideous (le meilleur choix selon moi, voir plus loin) ;
  • AJAX-S ;
  • Enfin, Impress!ive (anciennement KeyJNote), qui est le seul à avoir une autre philosophie ;

HTML Slidy

icon_html_slidy.pngLa norme du W3C, très similaire à S5 dont on sent d’ailleurs l’inspiration ; pas mal du tout, mais n’a pas l’air très répandu au final.

Lien : http://www.w3.org/2005/03/slideshow.html

S5

icon_s5.pngSans doute le projet le plus répandu sur cette philosophie et au final le plus actif (avec ses add-ons et ses dérivés). Le principe est le même que HTML Slidy, une page HTML et du Javascript pour en gérer l’affichage. Le projet originel n’est plus maintenu.

Un add-on intéessant à S5 est : Presentacular, qui améliore l’affichage, avec grâce à l’introduction de la librairie JavaScript Spetacular quelques effets (déplacement de blocs de texte, “vibration” de ligne de texte, etc.), qui peuvent être utile dans certains cas (mais sont totalement superflus à mes yeux).

Voici un exemple en ligne avec Presentacular. Et ici un tutorial très complet sur S5 + Presentacular (sur Framasoft).

Lien : http://meyerweb.com/eric/tools/s5/structure-min.html

S5 Reloaded.

icon_powerpoint_small.pngComme le projet S5 n’est plus actif, d’autres bonnes volontés se sont manifestées pour enrichir ce projet open-source avec des fonctionnalités supplémentaires, c’est ainsi qu’est né S5 Reloaded, qui est donc une reprise et un enrichissement du projet S5. Pour quelqu’un qui voudrait partir sur S5, c’est bien sûr sur cette version qu’il faut aller.

Les nouveautés sont essentiellement :

  • gestion du multimédia (audio via des MP3, fichiers vectoriels SVG, fichiers flash) ;
  • gestion d’un fondu entre les pages ;
  • meilleure gestion des éléments graphiques type images (redimensionnement automatique) ;
  • gestion de l’autoplay (= déroulement automatique des slides) ;
  • pannel de navigation en bas qui apparaît lorsque l’on déplace la souris en bas de l’écran avec des fonctions de navigation type DVD (pause, next, etc.) ;

La rançon de ses fonctionnalités est qu’il y a plus de fichiers à inclure / gérer (même si çà reste très facile), une feuille de style spécifique pour Opera, etc.

Un exemple en ligne et la page de download.

Au final S5 / S5 Reloaded est une solution intéressante mais :

  • Le changement de slide est mal fichu quand il y a des puces qui s’affiche de manière itérative : impossible de passer au slide suivant sans faire défiler toutes les puces : il aurait été mieux que ESPACE et FLECHE BAS fassent apparaître les puces et PAGE DOWN ou FLECHE DROITE amène au slide suivant par ex. ;
  • Il n’y a pas de navigation par vignettes (difficile à faire vu le principe de S5) ;

Lien : http://www.netzgesta.de/S5/reloaded/

Slideous

icon_powerpoint_small.pngSlideous a été réécrit après la publication de S5 et d’HTML Slidy. Il en reprend les grands principes mais apporte plusieurs fonctions de navigations intéressantes qui m’intéressent bigrement :

  • génération automatique de la table des matières à partir des titres des différents slides ;
  • status bar très complète ;
  • navigation intelligente au sein des slides : quand il y a des éléments comme des puces qui s’affichent un par un, il est toujours possible de passer directement au slide suivant (indispensable quand en fin de présentation on veut naviguer dans les slides pour en remontrer un) ;

De plus Slideous est particulièrement simple niveau intégration (autant que HTML Slidy, et plus que S5 Reloaded) : il y a juste un fichier .css et un fichier .js à intégrer dans le HTML de présentation.

Un exemple de page toute simple affichée (ici sur Google Chrome) : Présentation avec Slideous (rendu ici sur Google Chrome)

Un exemple de code :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Réunion</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="author" content="auteur" /> 
    <meta name="date" content="date" /> 
    <meta name="autoincrement" content="true" /> 
    <link rel="stylesheet" type="text/css" href="ui/slideous.css" /> 
    <script src="ui/slideous.js" type="text/javascript"></script>
  </head>
  <body>
    <!-- statusbar -->
    <div id="statusbar">
      <span style="float:right;">
        <span style="margin-right:4em;font-weight:bold;"><span id="slideidx"></span> of {$slidecount}</span>
        <button id="prevslidebutton" title="previous slide">&laquo;</button>
        <button id="previtembutton" title="previous item">&lsaquo;</button>
        <button id="nextitembutton" title="next item">&rsaquo;</button>
        <button id="nextslidebutton" title="next slide">&raquo;</button>
        <button id="incfontbutton" title="content">A+</button>
        <button id="decfontbutton" title="first slide">A-</button>
        <select id="tocbox" size="1"><option></option></select>
      </span>
      <span id="eos">&frac12;</span>
      <span title="{$location}, {$date}">{$title}, {$author}</span>
    </div>

    <!-- slides -->
    <div class="slide">
      <h1>Introduction</h1>
    </div>

    <div class="slide">
      <h1>Table des matières</h1>
      <ul id="toc" class="incremental"><li></li></ul>
    </div>

    <div class="slide">
      <h1>Slide 1</h1>
    </div>
  </body>
</html>

En gros tout le début ne change pas (sauf l’auteur, etc.), et il suffit d’écrire des blocs div pour chaque slide, et c’est tout. Je trouve çà plutôt simple et rapide (copié / collé facilités, changement de thème via la CSS, etc.).

Lien : http://goessner.net/articles/slideous/slideous.html

AJAX-S

icon_powerpoint_small.pngJe n’ai pas beaucoup creusé cette version parce que Slideous me convient bien, mais un des intérêts d’AJAX-S est qu’il fonctionne en XML pur, donc il n’est pas nécessaire d’écrire du HTML. Sinon il est à l’usage et sur le principe relativement semblable aux autres.

Lien : http://robertnyman.com/ajax-s/

Impress!ve

icon_powerpoint_small.pngIl s’agit d’un moteur de rendu de fichiers .pdf avec plusieurs fonctionnalités sympas, notamment la surbrillance à la souris, la navigation au sein des diapos par vignettes et l’enchaînement automatique des slides.

Le principe est simple : il faut générer un .pdf d’une manière quelconque (Word, OpenOffice, etc.), et Impressi!ve se charge d’en faire l’affichage en mode présentation, pour un rendu très agréable (la surbrillance t les vignettes notamment).

Si ce mode de publication peut paraître simple, en pratique j’y trouve des inconvénients :

  • La génération du .pdf peut être laborieuse : il faut un outil “annexe” à Impress!ve ;
  • Impress!ve est basé sur Python avec plusieurs dépendances système, et du coup c’est assez laborieux à installer (personnellement j’ai laissé tomber après 30 minutes à cause de l’installation de tous ces modules pytons un peu compliquée sur mon poste SuSE bridé) ;

Impressive (exemple de surbrillance pendant la navigation)

Lien : http://impressive.sourceforge.net/

Matrice de comparaison.

Impress!ve HTML &Tidy S5 S5 &Reloaded Slideous AJAXS

Projet vivant
Communauté active
Installation simple
Table des matières automatique
Navigation intelligente
Fonctions de navigations avancées
Navigation par vignette
Facilité de publication externe
Séparation fond/forme

Conclusion.

Pour conclure, tous les projets ont leurs avantages et leurs inconvénients. S5 (via S5 Reloaded) est le plus actif et a la meilleure gestion multimédia, HTML Slidy a pour lui le côté standard du W3C mais est resté plutôt confidentiel, Impress!ve a des fonctionnalités de navigation très sympas que n’ont pas les autres, AJAX-S a la meilleure séparation fond / forme puisqu’il n’est pas nécessaire de faire du HTML …

Du coup, au final, même s’il ne présente pas d’avancées majeures face aux autres, le choix le plus intéressant reste clairement pour moi Slideous, peu d’inconvénients, et couverture de quasiment toutes les fonctionnalités dont j’ai besoin.

Enfin, pratiquement toutes ces solutions reste du Javascript et c’est bien dommage - je n’aime vraiment pas le Javascript, techniquement j’aurais préféré un autre mécanisme … mais je suis néanmoins plutôt content du résultat final : une fois le système en place, c’est publiable à différents endroits (y compris sur un site généré par Maven par ex.).

Annexes.

Une présentation en anglais de KeyJNote et S5.

En complément, même si je n’ai pas exploré cette piste, une autre alternative serait de passer par un document LaTeX : à partir d’un document source LaTeX, il est possible de générer du .pdf et du .html et il existe des extensions pour la présentation (notamment TexPoint et Beamer).

Il y a bien sûr d’autres alternatives plus dans la même logique que PowerPoint, voir par exemple ce comparatif “11 alternatives pour se passer de Powerpoint”.

dimanche, février 7 2010

Convertir des fichiers FLV an AVI (Xvid) sous Linux

Je télécharge depuis peu quelques fichiers en .flv depuis le site de Canal+, notamment les épisodes de Groland toutes les semaines. Las, sans que je sache pourquoi, les .flv ne se lisent pas bien en streaming avec vlc sur mon Karmic Koala. Donc il me faut les convertir en avi, avec mencoder. La conversion est automatisée à l’aide du script ci-dessous en .avi (au format libre Xvid).

Le coeur de la conversion se fait avec ces paramètres :

mencoder input.flv -oac mp3lame -lameopts preset=standard:fast -ovc xvid -xvidencopts pass=2:bitrate=650:vhq=4:autoaspect -vf pp=h1/v1/al/dr/tn,hqdn3d -o output.flv

Après plusieurs tests j’ai donc opté pour un encodage en 650kbits niveau bitrate :

  • La taille du fichier est au final très proche de la taille initiale en .flv ;
  • Visuellement je ne perçois pas de réelles différences avec le fichier .flv original ;

L’encodage se fait en deux passes pour une meilleure qualité (en une seule passe les artefacts de compression sont en effet bien plus visibles).

Différence de taille entre le fichier original en .flc et la conversion en .avi :

ubuntu:/home/downloads/Canal+/groland> ll *0130*
-rw-r--r-- 1 root   root   110233294 2010-02-07 17:52 groland_100130.avi
-rw-r--r-- 1 root   root   106066014 2010-01-31 15:08 groland_100130.flv

Une image de la vidéo streamée :

Vidéo flv convertie an avi

Le script de conversion qui s’utilise en passant le fichier à convertir en paramètre (sera effacé en fin de traitement). Lien direct vers le .sh : convert_flv_to_avi.sh

#!/bin/zsh

INPUT_FILENAME="${1}"
OUTPUT_FILENAME=${INPUT_FILENAME%%.*}.avi
DIVX_TEMP_FILENAME="divx2pass.log"
if [[ ! -f "${INPUT_FILENAME}" ]] ; then
  echo "Le fichier '${INPUT_FILENAME}' n'existe pas."
  exit 1
fi

echo "Destination : '${OUTPUT_FILENAME}'"

[[ -f "${OUTPUT_FILENAME}" ]] && rm -f "${OUTPUT_FILENAME}" >/dev/null 2>&1

# -lameopts cbr=128
VIDEO_BITRATE="650"
AUDIO_OPTIONS_PASS1="-oac copy" # Inutile de convertir l'audio pour la premiere passe, qui ne produit aucun fichier
AUDIO_OPTIONS_PASS2="-oac mp3lame -lameopts preset=standard:fast"
VIDEO_OPTIONS_PASS1="-ovc xvid -xvidencopts pass=1:bitrate=${VIDEO_BITRATE}:vhq=4:autoaspect -vf pp=h1/v1/al/dr/tn,hqdn3d"
VIDEO_OPTIONS_PASS2="-ovc xvid -xvidencopts pass=2:bitrate=${VIDEO_BITRATE}:vhq=4:autoaspect -vf pp=h1/v1/al/dr/tn,hqdn3d"

echo "Passe 1"
eval mencoder "${INPUT_FILENAME}" ${AUDIO_OPTIONS_PASS1} ${VIDEO_OPTIONS_PASS1} -o /dev/null
echo "Passe 2"
eval mencoder "${INPUT_FILENAME}" ${AUDIO_OPTIONS_PASS2} ${VIDEO_OPTIONS_PASS2} -o "${OUTPUT_FILENAME}"

[[ -f "${DIVX_TEMP_FILENAME}" ]] && rm -f "${DIVX_TEMP_FILENAME}" >/dev/null 2>&1
[[ -f "${OUTPUT_FILENAME}" && ! -s "${OUTPUT_FILENAME}" ]] && rm -f "${INPUT_FILENAME}" >/dev/null 2>&1

Installation (en tant que root) :

cd /usr/bin/
wget http://blog.tensin.org/public/ressources/convert_flv_to_avi.sh
chmod a+x convert_flv_to_avi.sh
apt-get install zsh mencoder

Utilisation :

convert_flv_to_avi.sh groland_100130.flv

Lien vers un article très complet sur l’encodage sous Linux (choix du codec, calcul du bitrate, dvdrip,etc.) chez Autour de Linux.