Off the record

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 21 février 2007

XML update...

Under which conditions is my XML document valid?

  1. the document validates the xml formatting rules :
    • XML documents must have a root element
    • XML elements must have a closing tag
    • XML tags are case sensitive
    • XML elements must be properly nested
    • XML attribute values must always be quoted
    • check everything regarding your XML document syntax with this online validator
  2. the document validates against the DTD !

What are XML data islands?

Data islands are a way to introduce xml data in an HTML document in Internet Explorer only ;-( with the special HTML tag <xml>.
This is very very very probable that you do not want to do that because it will NOT be supported by any other browser
More on XML data islands

XML namespace

Namespaces are usually used to avoid conflicts between tags having the same name but not the same meaning (semantically differents ;-) ).
Example : xmlns:namespace-prefix="namespaceURI"

The CDATA tag

All text in an XML document will be parsed by the parser.
Only text inside a CDATA section will be ignored by the parser.
Example : <!CDATA[ myjavascript code... ]>

vendredi 16 février 2007

Tuning the logging level in Tomcat

Little tip in case ou want to have HIGHER level of logging from tomcat (version 5.5 or higher), because he fails to do something but just says failure ;-)
Tomcat, out of the box, does not include any logging library. However, if you want to make some fine-tuning on the logging, he is ready to achieve your configuration.
At startup (my guess...) Tomcat checks if some special configuration has to be applied, via the "bridge" interface commons logging . This library can be described as a logging implementation abstraction layer. If so, he applies it. Commons logging interface hides the actual implementation, that is, you can use either log4j or any alternative behind the scenes.
Anyway, drop the commons logging and log4j jar files in the common/lib directory, write a log4j.properties file in the common/classes directory, and you should be fine.

Log4j.properties example :

log4j.rootLogger=ERROR, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d %t %-5p %c - %m%n

log4j.logger.org.apache=DEBUG



Pour tester tout ça, rapatriez ce petit projet JSF dans eclipse, ant compile et deploy...

Environment variables in Java

also looking for two lines of code to access the Tomcat directory seamlessly?
Works for any environment variable o' course...

public static void main(String args) {
String tomcatHome = System.getenv("TOMCAT_HOME");
System.out.println("Tomcat Home vaut : "+tomcatHome);
}

lundi 12 février 2007

Les mega pixels, le scanner, l'imprimante et l'appareil photo...

Tout ça, c'est la chaîne de traitement numérique. Mais comment savoir quelle taille de photo je peux faire avec mon appareil photo ou mon scanner ?
Ca n'est pas tellement compliqué de comprendre la théorie mais il est difficile de trouver des explications vraiment claires...
Je vais m'y essayer!

Quelle capacité d'impression?

En fait, lorsqu'on scanne un négatif pour l'imprimer plus tard, il faut connaître ce premier chiffre magique qu'est la capacité des imprimantes photos classiques de photographe : 300dpi. dpi ? Dot per inch ou encore ppp soit point par pouce ou pixel par pouce, c'est pareil.
Ce chiffre n'a pas été décidé par le photographe du coin, il correspond à un critère de détails suffisant pour l'oeil, même si l'on ausculte la photo de très d'assez près.
Sachant cela, on comprend facilement que si on a une photo qui fait 300*300 pixels, une impression correcte (à 300 dpi donc) donnera au maximum une photo de un pouce par un pouce... 8-O

les appareils numériques et le marketing des Mega pixels?

Sachant qu'une impression à 300dpi est admise comme "suffisante" pour l'oeil humain, quelle taille d'impression pour combien de mega pixels?
Question qui fâche, padawan...
En fait si on se base sur un 6Mega Pixels, ce qui reste encore plutôt le bon milieu de gamme aujourd'hui, on aura une image de dimension 3000x2000, donc sur imprimante à 300dpi, classiquement une image de 10x6,6 pouces, soit encore 16,7x25,4cm...
Pas si mal finalement. Entre A4 et A5...

Et la résolution minimal de mon appareil photo pour faire du 10x15cm? Héhé, facile : 10x15cm = 4x6 pouces donc si impression à 300dpi, 4*300 par 6*300, image à 1200*1800 soit 2,1 Mega pixels !
Finalement ce vendeur de la fnac s'y connaissait ;-)

A quelle résolution scanner mon film?

On va donc en venir au scan : si l'on veut imprimer une photo de la taille exacte du négatif (exemple stupide) on n'aura qu'à scanner à 300 dpi.
Ainsi un négatif de 1 pouce par un pouce produira une image numérisée de dimensions 300*300 et si on imprime sur une imprimante qui peut faire 300dpi, on aura une photo de 1 pouce de large par un pouce de long...

En pratique !

Si on veut faire une impression de dimensions 60cm*60cm à partir d'un négatif 6cm*6cm (moyen format) on veut faire un tirage x10 donc il faut scanner à la résolution de l'imprimante x10, soit...300dpi*10=3000dpi.
Maintenant petites considérations pratiques, mon scanner me permet de scanner à 4800dpi, donc les tirages les plus grands que je puisse faire avec une impression à 300dpi sont des agrandissements de 4800/300 fois soit x16.
Finalement si je prend mes photos au format normal 24x36mm, j'aurais un agrandissement max de 38,4*57,6cm.
Si j'ai opté pour le moyen format, soit 6x6cm, agrandissement max à 96cmx96cm. La classe. Plus qu'à réussir une photo qui mérite ça 8-)
Et pour scanner à 4800dpi, il doit falloir prendre sa journée, si j'en crois la vitesse de mon scanner aux plus faible résolutions...

Adieu monde numérique cruel

Donc concrêtement, mon négatif moyen format scanné à 4800dpi me donnera une image carrée de coté 2,36pouces*4800dpi soit 11300x11300.
Donc pour avoir un appareil numérique qui puisse faire de telles photos, il me faudrait un capteur à 127,6 mega pixels...Mouais...
Pour le format normal 24x36mm, on tombe à 30 mega pixels...Pas mal...

vendredi 9 février 2007

Spécifications...et MDA

Finalement, la frontière entre les specs fonctionnelles et techniques est souvent trop peu marquée, de même que la frontière entre les spécifications techniques et l'architecture... Voila quelques exemples tout bêtes qui m'en ont fait comprendre plus que les absconces définitions habituelles :

Les spécifications fonctionnelles (le plus facile) décrivent des comportements et aspects du systême:

  • authentification
  • navigation
  • contenu des vues

Les spécifications techniques décrivent des qualités du systême, par exemple :

  • scalabilité
  • performance
  • résistance aux pannes (exemple tolérance 99.9%)

On en vient à MDA : model driven architecture, qui est une nouvelle approche de la conception logicielle.
MDA tend à découpler au maximum la conception et l'architecture, et également à produire directement le code à partir du modèle.
La conception traite les spécifications fonctionnelles et l'architecture les specs techniques.
Ainsi, si l'on conçoit un modèle conceptuel implémentant les spécifications fonctionnelles, et que l'on a un traducteur modèle->architectureX qui va produire le code selon l'architecture X, on obtient les effets suivants :

  • chaque modification des spécifications implique une modification du modèle, et une nouvelle génération (automatique !) du systême.
  • Si finalement l'architecture X ne répond pas ou répond mal aux specs techniques, on change le traducteur et on prend modèle->architectureY, ce qui génère automatiquement une solution technique totalement diffèrente, mais implémentant exactement de la même manière les specs fonctionnelles !


C'est presque magique. Plus qu'à acheter les traducteurs...Voila le problème...Ils ne sont pas en rayon chez Monoprix ou Migros et en écrire un soi même, c'est comme pour les langues. Si on sait juste dire bonjour en chinois on fera un traducteur qui ne sait faire qu'un "hello world".
MDA reste une technologie extrêmement prometteuse, en particulier pour la création de maquettes. Lorsqu'on a construit un traducteur incluant un pan raisonnable d'une technologie, il est possible de construire une application avec des fonctionnalités basiques en quelques minutes.
Avec deux traducteurs, exemple Java EE et .Net, on pourra aller jusqu'à effectuer des comparatifs d'architecture.

Article sur wikipedia

lundi 5 février 2007

Syntaxe wiki Dotclear

Pour publier un article sur un blog Dotclear, on peut écrire directement en html, ce qui est mal, pour les raisons décrites ici, ou écrire dans un syntaxe wiki somme toute très simple. Par malheur, cette syntaxe est propre à Dotclear et n'est qu'à peu près compatible avec la syntaxe wiki de wikipedia par exemple.
Bref, le pense-bête que je perd tout le temps est ici, et en particulier, il dit comment publier

  • du code : @@code@@
  • insérer du HTML, parce que parfois on n'a pas le choix, par exemple si l'on veut insérer un clip Vimeo ;-) :

///html
mon code html avec <br/> saut de lignes <i>en italique</i>
///
donnera :

mon code html avec
saut de lignes en italique

Vimeo, cousin de Flickr pour la vidéo

Après avoir découvert ce service de publication de vidéos il y a presque un an, cf ici, et l'avoir testé assez rapidement, j'en ai eu à nouveau besoin pour lire une vidéo qui ne passe pas sur le Mac (format WMV, Windows media video bouuuuuuh :-C ).
Le site a beaucoup progressé, et permet de publier des vidéos de manière extrêmement simple. Tous les formats que j'ai testé sont correctement supportés.
Ce type de service facilite la publication de petites vidéos prises avec un appareil mais on y trouve également des clips de très bonne qualité, preuve qu'il est possible de partager aussi des fichiers issus de "vraies" cameras videos.

  1. on envoie le fichier sur vimeo.com, de la même manière qu'on envoie une photo sur flickr
  2. on peut ensuite
    • lire le clip
    • envoyer le lien à ses amis
    • éviter les mails avec pièce jointe lourde
    • avoir une bonne assurance que tous les utilisateurs pourront voir la vidéo, un lecteur flash suffit, a priori 99.99% des navigateurs internet ont cette fonctionnalité (pré) installée
  3. on a une copie de ces fichiers, disponible partout, et sauvegardée chez eux...
  4. on peut permettre à tous de télécharger le fichier original, divx, mov, wmv ;-( etc.
  5. on peut tagger ses vidéos (attacher des mots clés) et bien sûr rechercher des vidéos d'autres personnes via ces tags (pour les exposés des petits...)
  6. on peut copier un petit bout de code html et l'insérer dans son blog, et la vidéo est accessible depuis le blog. Exemple, le code ci-dessous, visible en cliquant sur "embed" sous le clip Vimeo :

<embed src="http://www.vimeo.com/moogaloop.swf?clip_id=136741" quality="best" scale="exactfit" width="400" height="300" type="application/x-shockwave-flash"></embed>

Ce code donnera la "boite" suivante :

Facile non?
En bref, vimeo est encore un de ces sites web 2.0 qui va permettre à tous de vraiment prendre possession d'internet, à l'instar des blogs pour la publication de texte.
Vimeo.com
My Vimeo
Another cool T-shirts site

vendredi 2 février 2007

Performance testing, load testing or stress testing?

Il est important de comprendre les différences entre ces trois types de testing. Performance, stress et charge. Selon le vocabulaire établi :

  • les tests de performance sont menés pour valider le fait que le systême va donner un temps de réponse correct à son ou ses utilisateurs dans les conditions d'utilisation normales définies. Par exemple, 400 utilisateurs effectuant des requêtes concurrentes, temps de réponse maximum 4s pour une requête donnée. Ces tests vont permettre de repérer les goulots d'étranglement à tous les niveaux et ainsi permettre de gagner en...performance.
  • le stress testing permet de valider que le systême va savoir réagir correctement en cas de disfonctionnement d'un des modules qui le constitue. L'état est-il sauvé avant clôture? L'état du systême est-il correctement restauré au redémarrage. Les cas de stress habituels sont par exemple :
    • chute du réseau / d'un ou plusieurs ports réseau
    • chute du serveur de base de données
    • forte charge en terme d'utilisateurs
  • Enfin, les tests de charge cherchent à détecter des bugs ou erreurs de conception qui n'apparaissent qu'en cas de charge réelle du systême. On recherche classiquement les fuites de mémoires...Ce type de test s'appelle aussi volume testing ou endurance testing.

Toute une batterie d'outils existe pour mener ces tests, simuler plusieurs milliers d'utilisateurs etc, je citerais le projet Apache Jmeter, parce que c'est écrit en Java et parce que c'est open source !

Mes sources d'inspiration sur ce sujet :