www.amglr.net Index du Forum
planet.amglr.net
Association du Master Génie Logiciel et Répartition
Re: galerie SVG

Eric Le Merdy
Encore quelques créations Inkscape à mes heures perdues :
méthodesAgilesDevDurable src IT src coding dojo src
03/05/2008 à 00:40
Découvrir Windows PowerShell

Eric Le Merdy
powershell.png
Petit sondage :
Qui travaille sous Microsoft Windows ?
- tout le monde ?
Qui a besoin de cmd.exe ?
- tout le monde (maven, scripting, etc.) ?
Qui trouve l'invite de commande facile à utiliser ?
- personne ?
C'est par ce rapide sondage qu'a commencé la démonstration de Cédric Rup sur la nouvelle console de Microsoft : le PowerShell.

En effet, en novembre 2006, Microsoft réagit en sortant la première version de sa nouvelle interface d'administration ultime. Il ne s'agit pas d'une interface graphique très recherchée, mais bien d'un nouvel interpréteur de commandes.

Pour télécharger la dernière version, vous devez posséder le framework .NET installé sur votre machine, et télécharger l'installation du PowerShell. Juste après cette installation, vous pourrez tester l'exécution de ces commandes bien connues :
dir
cd
ls
Surprise, les alias des commandes unix fonctionnent !
Pour avoir de l'aide en ligne sur la commande dir par exemple :
dir -?
Avec PowerShell, une commande s'appelle une commandlet. C'est l'unité de base du scripting. Il y en a 129 de base. La syntaxe est une convention : VERBE-NOM -argument param. Par exemple, la commande dir est un alias de : Get-ChildItem -Path ..

Fonctionnalités

  • Complétion sur les arguments (tab)
  • Trouver les alias d'une commande. Ex. : Get-Alias dir
  • Gestion des variables.
    Ex. :
    $dir = Get-Children
    $dir // évalue la variable
    
  • Tout est objet (là où tout est chaîne de caractère en shell unix.
    Ex. :
    $dir.* // - utiliser la complétion pour lister les
              variables d'instance de l'objet (ses pro-
              priétés)
    $dir.getType() // on a bien affaire à un objet .NET
                      !!! avec l'accès a ses méthodes
  • Le pipe est un flux d'objets.
    Ex. :
    $dir | Get-Member // permet de lister les variables
                         d'instance de l'objet en les
                         faisant passer à travers le
                         pipe.
    // démarrer plusieurs instances de notepad
    Get-Process -Name no*
    (Get-Process -Name no*).Kill() // termine les pro-
                                      cessus notepad par
                                      appel de la mé-
                                      thode kill.
    Get-Process no* | Stop-Process // termine tous les
                                      processus notepad
                                      en passant par le
                                      pipe.
    
    Avantage : Le pipe crée un flux d'objets et n'attend pas que la liste soit totalement instanciée. Alors que l'instanciation d'une variable stocke l'objet en mémoire.
    On peut passer du code dans un pipe (inspiration perl) : c'est une méthode anonyme. Ex. :
    Get-ChildItem | Where-Object { $_.Length -gt 1Mb }
    // La variable $_ est l'object considéré lors de
       l'itération sur les résultats.
    
    On peut trier avec Sort-Object
    On peut grouper sur une propriété avec Group-Object Par exemple pour afficher les fichiers groupés par extension.
  • Il y a un certain nombre d'arguments en commun sur les objets .NET donc auquels on a naturellement accès par Power Shell:
    verbose, debug, ErrorAction (que faire en cas d'échec, voir la variable $ErrorActionPreference), ErrorVariable, WhatIf (simulation de l'éxécution, très utile), ? (aide), etc.
  • En regardant de plus près les possiblités des arguments de commande, on observe :
    • Une notion de position d'argument par défaut (si l'argument n'est pas spécifié, on présume que l'argument est daonné dans cette position dans la liste d'args)
    • Une notion d'acceptation d'argument paar le pipe...
    • Une notion de paramétrage de l'acceptaiton des wildcards.
  • La gestion des droits ext supportée par la commande : Get-Credentials. Elle permet d'acquérir une identité et de s'en servir pour l'éxécution sous une autre identité que celle du lanceur de la commande.
Pour toujours s'y retrouver, n'hésitez pas à utiliser ces commandlet "point d'entrée" : Get-Command, Get-Help, Get-Member. On peut aller plus loin en filtrant les résultats : Get-Command -Noun Item (cherche les commandes qui contiennent Item)

La puissance du Shell

On a accès à TOUT .NET. Notamment les classes du framework :
[TYPE] - accès au type .NET
On peut donc accéder aux méthodes statiques d'une classe. Ex. :
[System.DateTime]::Now // La date actuelle.
Mais on peut aussi instancier un objet .NET. Ex:
$webclient = New-Object System.Net.Webclient // un client web !
$string = $webclient.DownloadString("http://eric.lemerdy.free.fr/dotclear/index.php?feed/atom") // on télécharge un flux rss...
$string.ToString() // ...qu'on peut afficher à l'écran !
Les variables non typées par défaut, on peut stocker un entier puis une chaîne par exemple :
$a = 12
$a.GetType()
$a = 'Eric'
$a.GetType()
Par contre, on peut forcer le typage d'une variable
[Int32]$x = 12
$x = 'YES' // Error
$x = 12 // ok
On peut donc "caster" notre chaîne xml :
[XML]$xml = $string
$xml.rss.channel.item | Select-Object title
Et accéder directement au contenu du XML !!! Ici, rss, channel et item sont des éléments (au sens XML) du contenu XML.

Extension du shell

On peut charger ses propres classes en constituant une assembly. C'est l'unité packagée de code éxécutable, l'équivalent d'un jar en java. Ex. :
[Reflexion.assembly]::loadFile(myfile)
Cette extensibilité permet de créer des API pour vos applications .NET et d'y accéder par PowerShell.
Pour ajouter des commandlet, on va constituer un snappin. C'est simplement une assembly qui contient des commandlets.
Pour l'installer : InstallUtil.exe. C'est un utilitaire également utilisé pour déclarer un service Windows.
Get-PSSnapin -Registered // les snapins installés
                   mais pas enregistrés
Add-PSSnapin  // enregistrer les snapins
On bénéficie donc des même services qu'une commandlet du package de base, comme la complétion sur les commandes par exemple.

Une uniformité fournie grâce aux providers et aux drives

Un provider est le moyen uniforme de parcourir des objets organisés hiérarchiquement. Depuis le début de l'article, on on travaille avec le provider du filesystem.
Pour connaître les providers disponibles :
Get-PSProvider // Variables d'environnement, filesystem, registre Windows, etc.
Alors que les drives sont les éléments parcourables par leur provider.
Pour connaître les drives disponibles :
Get-PSDrive // Env, C:, D:, HKLM (HKEY_LOCAL_MACHINE)
Chaque drive est donc associé à son provider. Il existe d'autre providers de la communauté : LDAP, S3 (amazon), etc.
Pour changer le drive courant :
Set-Location variable: // choisit le drive des variables
dir // liste les variables !

Instrumentation

L'instrumentation est fournie par WMI pour Windows Management Instrumentation. C'est l'équivalent de JMX sur la JVM. On peut tout savoir sur une machine : l'heure, les users loggés - en lecture/écriture ! On peut donc éditer un point de configuration du poste à partir de Powershell sans problème à condition d'avoir le niveau de droit suffisant.
Il est possible de lancer des service : Start-Service

Gestion des scripts

L'extension est : *.ps1.
Pour exécuter un script : Get-Cat | & .\out-grid.ps1
On peut appeler du Windows Forms dans powershell ce qui permet d'afficher un tableau d'objets dans une interface graphique en cinq lignes de code.
Bien-sûr, l'éxécution de scripts étant une fonctionalité convoitée par de nombreux virus, Microsoft était attendu sur l'aspect sécurité de la chose. Pour adresser ce besoin fort de sécurité, il existe la notion d' : Execution policy (politique d'éxécution).
Get-ExecutionPolicy
Set-ExecutionPolicy
Niveaux :
unrestricted : tous ok
all signed : tous signés
RemoteSigned : tous les scripts externes doivent être signés
Le niveau par défaut ne permet pas l'éxécution du tout !
Tout objet qui n'est pas "utilisé" (affectation dans une variable ou utilisé par une fonction) sort du script (console). Pour éviter ça, on redirige vers null : macommande >$null; Sinon, ça resort dans le pipe externe. Cela peut être un avantage car tout ce qui sort du pipe est traîté immédiatement par la commande suivante comme nous l'avons vu plus haut.

L'avenir

Microsoft semble prêt à ouvrir les API de ses logiciels serveurs à travers PowerShell (Exchange par exemple). Cela sera d'autant plus facilité si ces logiciels sont écris en .NET. En tant que développeurs d'applications .NET, il est aussi bénéficiable de profiter de cette ouverture qui peut faciliter la configuration et l'administration de son logiciel.
Le produit évolue. Les nouvelles fonctionnalités attendues sont : les aspects éxécution à distance, l'éxécution en parallèle, une nouvelle interface graphique, de nouveaux snappins.
Sous Linux, le projet Mono, le portage de .NET, permet à l'initiative "pwash" de ne pas repartir de zéro dans son intention de porter la ligne de commande sous Linux.
Au cours de cette petite démonstration des possibilités de la nouvelle console de Microsoft, nous avons tous été impressionés par l'expressivité de la platte-forme. Les concepts de pipe objet et d'accès à la platte-forme .NET sont des apports inconstestables à la productivité et l'efficacité du scripting.

Notons pour conclure que ce produit marque un tournant dans la démarche Microsoft qui constituait auparavant à tout doter en interfaces graphiques. Cédric nous a d'ailleurs révéllé que les développeurs de PowerShell n'avaient pas très bonne presse au sein des équipes Microsoft qui ne comprennaient pas alors le changement de stratégie de la société.
Ce changement permet à Microsoft d'élargir sa cible d'administrateurs Windows en adressant aussi les adeptes de la ligne de commande. C'est donc une attaque en règle des serveurs *nix en dotant son système d'exploitation d'une console plus puissante qu'un bash unix ?

29/04/2008 à 07:04
PSP-Maps et GP2X

Antoine Jacquet (Royale)
Mon frère m'a prêté sa console portable, une GP2X F-200.
Cette console mise sur la communauté pour fournir des programmes intéressants, notamment des émulateurs pour les jeux, et des applications diverses.
Je me suis donc amusé à porter mon application PSP-Maps pour cette console, et c'était assez agréable car très facile !

En effet, le wiki gp2x.org fournit plein d'informations utiles, notamment des liens vers des environnements de développement pré-compilés (le cross-compilateur ARM).
On trouve également un gros paquet contenant les principales bibliothèques pré-compilés (SDL et compagnie).
J'ai juste du chercher un peu sur le net pour trouver une bibliothèque cURL toute prête smiley

La suite ressemble beaucoup à l'environnement de développement PSP.
Tout ce petit monde s'installe dans /opt/open2x/gcc-4.1.1-glibc-2.3.6/, il ne reste plus qu'à mettre à jour le PATH et on peut utiliser le compilateur arm-open2x-linux-gcc pour générer des binaires statiques compatibles.
Il faut juste renommer le fichier produit en ".gpu" pour un utilitaire, ou ".gpe" pour un jeu, ce qui permet à la console de reconnaître qu'il s'agit d'un programme exécutable.

Au final j'ai juste eu à remapper les touches de la GP2X et changer la résolution pour l'adapter à mon programme grin
24/04/2008 à 19:01
Teeworlds

Antoine Jacquet (Royale)
Anciennement appelé Teewars, Teeworlds est un jeu de combat très fun.
Ca ressemble vaguement à un Worms en temps réel : on dirige un petit personnage, on peut s'aider d'un grapin, et on ramasse des armes inspirées de Quake que l'on utilise contres les ennemis grin
On peut jouer en réseau, et c'est très rapide !

Mes deux modes préférés sont le "death match", où on tire sur tout ce qui bouge :



Et le "capture the flag", qui est un peu plus stratégique, et très intéressant quand on commence à se déplacer rapidement :



Si vous n'avez pas déjà essayé, je vous invite à le télécharger sur le site officiel, et à me rejoindre sur mon serveur teeworlds.org wink

16/04/2008 à 15:37
Le ParisJUG parle anglais avec Kirk Perperdine

Eric Le Merdy
C'est le "Java Champion" de la performance qui est venu se présenter devant les utilisateurs Java de Paris avant hier soir. Le moins que l'on puisse dire, c'est que Kirk Pepperdine sait de quoi il parle. A travers une présentation dynamique et pleine d'humour, il nous a fait part de sa vision sur le monde de l'IT sous le prisme de l'optimisation des programmes. Je ne vais pas paraphraser ici David, dont le billet résume parfaitement l'essence de l'intervention du Canadien.
J'ai bien aimé son explication basée sur sa théorie "The Box", sur les différences entre le développeur et le profileur de problèmes de perfo. thebox Il pense que le développeur reste trop focalisé sur la brique application (le code) tandis que le profileur aura une vision plus globale qui l'aidera à trouver la vrai source du problème. Evidemment, ça peut être la même personne mais cela demande une culture plus approfondie sur la JVM ou même le hardware. Combien de développeurs java connaissent bien leur JVM (je connais des questions pièges à l'embauche sur la JVM) ? Le point de vue de Kirk permet effectivement de prendre conscience de l'importance de la JVM et des optimisations de compilation. Sans nous demander d'aller plonger dans l'étude d'architecture physique de la machine, il nous a conseillé de toujours prendre en compte la plate-forme d'éxécution cible et de ne jamais totalement abstraire le hardware.
Pour aller plus loin :
The Box (via InfoQ)
Le post de Kirk sur la soirée Galerie photos
ParisJUG - Présentation 08/04/2008
10/04/2008 à 20:34
Wikipedia

Antoine Jacquet (Royale)
[:le_max] Youpi, je suis dans Wikipedia... [:lilyrose]

Enfin pas vraiment, mais c'est toujours ça grin
05/04/2008 à 20:35
Ergonomie des Services Logiciels

Guillaume Saint Etienne (yohm31)

Je me suis lancé dans une étude exhaustive de la qualité des services au sens SOA.

Si nous sommes tous convaincus (j'espère) du bien fondé de ces architectures, encore faut-il bien les approcher.

C'est sous un nouveau regard, celui de l'Ergonomie (Usability en Anglais) que je vous livre ma reflexion sur l'approche orienté service dans l'industrie du logiciel en 2008.

Dans cet article, je fais le tour de toutes les bonnes recettes concrètes applicables simplement en phase de design sur vos services. Si vous êtes également en panne d'inspiration, cette approche est une bonne méthodologie pour écrire des Web Services quand on ne sait pas par quel bout les prendre. Bonne lecture.

Avez vous le sens du service?

Cette phrase, certains développeurs auraient pu l'entendre au cours de leur carrière.
Qu'ils se rassurent, il ne s'agit pas d'une remontrance à leur encontre pour ceux qui travaillent dans une société de "services".
Oui, le service est sacré surtout lorsque le service demandé est celui que l'on attache à un système d'informations.

Aujourd'hui, des termes comme SaaS commencent à prendre du poids et si le logiciel peut être (doit être, même!) vu comme un service ou augmenté de services, cela ne se fait ni automatiquement (et sûrement pas en un CleanRAD aveugle), ni sans réfléchir aux acteurs impliqués dans la construction et dans l'utilisation d'un logiciel ou un SI.

Un logiciel est un système dynamique, il y a des entrées, des sorties, des changements et même des bouleversements.
C'est une entité, complexe. Une machine, une usine et même un écosystème à lui tout seul.
Il doit respecter non seulement des contraintes externes mais aussi ses propres contraintes, intrinsèques, posées par le framework qui a servi à le développer.

Avoir le sens du service logiciel, c'est penser à tout cela.
C'est avoir toujours en tête que l'on est pas seul à programmer et poursuivre nos efforts pour que, bientôt, le développement durable ait également du sens dans l'industrie du logiciel.

Qu'est qu'un bon service?

c'est la question qu'il faut se poser. Et derrière cette question s'en cache une flopée d'autres... "qu'est ce qui me rend productif si j'utilise un service ? quel surcharge de travail vais-je assumer lorsque je vais le consommer ?" pourrait-on se demander...

Il y a une dimension humaine -psychologique même- à un service puisqu'il aborde un métier. Et qui dit métier dit "savoir faire". Expression dans lequel le mot savoir est peut être plus important que le mot faire. Il y a de la cognition et de la sémantique derrière tout cela.

Il faut penser, comme les ergonomes, en terme de scénarios d'utilisation.

Tout cela peut se reprendre en une formule: est que mon service est utilisable?

La capacité à être utilisable c'est la "usablity"; le mot a plus de sens dans sa traduction depuis l'anglais: ER-GO-NO-MI-QUE.

Voila, le loup est enfin lâché: l'ergonomie doit rentrer en ligne de compte dans le design des Services et d'une Architecture Orientée Service (SOA).

Mais prenons garde, l'ergonomie est une science humaine.
C'est là que l'approche peut dérouter plus d'une personne: faire rentrer l'aspect humain dans la programmabilité des services.

La suite ici: http://docs.google.com/Doc?id=dhp3ggmx_38f58b3d

31/03/2008 à 19:30
Insomnie

Antoine Jacquet (Royale)

29/03/2008 à 19:15
Coding Dojo Ruby

Eric Le Merdy

Pourquoi ces trois mots apparemment sans lien ? Pour vous parler d'une séance dont le dojo était Valtech et l'objectif était de découvrir par la pratique le langage Ruby. La première partie de la séance fut un...

Kata Randori

Les postes de développement Ruby ont été constitués sur le vif (l'environnement Ruby pour Windows mis en place à l'aide d'un installeur). Le moins que l'on puisse dire, c'est que les configurations hétérogènes nous ont quelque peu pimenté la tâche : MacBook, PC sous XP et Linux !
Nous avons ensuite choisi le kata (i.e. l'énoncé de l'exercice) à effectuer : "Missing word in dictionnary". Un exemple vaut mieux qu'un long discours ici :

dictionnaire : ["a", "big", "white", "cat"]
entrée : "a tiny black cat"
sortie : ["tiny", "black"]

Le principe retenu fut de positionner deux rôles par poste : un développeur (à gauche) et un copilote (à droite). Il est possible d'ajouter un troisième rôle : l'observateur dont la fonction est juste d'observer... sans communiquer.
Le "Time-boxing" requiert un décalage de rôle toutes les cinq minutes. Le copilote devient développeur et le développeur devient copilote sur le poste de gauche ! On passe donc cinq minutes sur chaque poste.

coding-dojo-time-boxing.png

Bien entendu, cette mobilité contraint la méthode de développement :

coding-dojo-tdd-babysteps.png

C'était la première fois pour une majorité d'entre nous : Ruby, coding dojo, pair programming et dans une moindre mesure, TDD (Test Driven Development). Pour moi, cela a changé la façon de voir le TDD car en "solo programming", je n'appliquais pas les baby tests. J'avais toujours tendance à vouloir implémenter l'algorithme que j'avais dans la tête, et pas celui induit par les tests. Le pair force à ne pas brûler les étapes et réduit le gaspillage en implémentant le strict nécessaire aux tests.
Au final, au cours de la rétrospective qui a suivi, on a pu faire le point pour trouver de meilleures façons de travailler. Le point crucial pour terminer une implémentation correcte fut la connaissance des API du langage Ruby qui permet évidemment de raccourcir le code à écrire.
Cette forme de développement abolit de manière assez spectaculaire la propriété du code. Une chose amusante à constater est la diversité des solutions choisies de poste en poste. Cependant, le niveau de test et leur complétude est comparable car tout le monde avance en parallèle sur le sujet, ce qui est troublant et donne un côté magique... On a tellement l'habitude de trouver un code au même stade où on l'a laissé.
Après une discutions a posteriori, nous avons tout de même laissé de côté une phase préliminaire : la spécification des tests. En effet, au lieu que chaque binôme définisse incrémentalement les tests, une liste de tests ou une "spécification" peut être préparée pour savoir où on veut en venir...

Kata Préparé

coding-dojo-prepared.png

La rétrospective ayant fait remarqué notre méconnaissance de Ruby, la deuxième session fut un kata préparé effectué par celui qui connaissait le mieux le langage, Etienne Charignon. Ce fut l'occasion de choisir un sujet riche en apprentissage : le comptage du nombre de lignes de code dans un programme Java (hors commentaires et lignes vides).

Pour conclure, je dirais que le coding dojo permet de pratiquer, une très bonne façon de comprendre et d'assimiler la méthode et les concepts sous-jacents. Il est une chose d'en parler mais le vivre est encore mieux. On apprend aussi sur soi-même pendant le codage en pair. Ce n'est pas un moment où on est jugé par son pair mais bien une façon d'avancer ensemble et de tirer le meilleur parti des deux "cerveaux"... C'est un challenge à la fois amusant et instructif qui peut permettre de souder une équipe très rapidement.


Liens : les slides coding dojo.

25/03/2008 à 22:38
Google Maps, Virtual Earth et Yahoo! Maps : récupérer les images à la source

Antoine Jacquet (Royale)
En travaillant sur l'application PSP-Maps, j'ai eu l'occasion de (re)découvrir l'envers du décor des services de cartographie en ligne.
Pour des raisons techniques, je ne peux pas passer par l'API classique prévue par exemple par Google.
En effet, il s'agit d'une API javascript, et le navigateur intégrée à la PSP est très limité.

L'intérêt est donc d'étudier comment Google Maps, Virtual Earth et Yahoo! Maps stockent leurs images pour les récupérer directement à la source.
Ainsi, il devient possible de les intégrer à des applications de plus bas niveau.
On trouve déjà pas mal de documentation sur internet, mais je n'ai pas trouvé de billet résumant tout sur la même page, et encore moins en français, ce que je vais essayer de faire ici.

La meilleure façon d'obtenir les informations est d'utiliser un sniffer réseau, afin de récupérer les requêtes effectuées pendant qu'on utilise le service de cartographie dans son navigateur.
Personnellement, j'ai utilisé Wireshark (l'ancien Ethereal), qui reconnait le protocole HTTP et le présente de façon simplifié.

Les 3 principaux services de cartographies se ressemblent énormément au niveau de la projection et du découpage de la carte.
La carte est découpée en carrés de 256 x 256 pixels, et chaque fois qu'on zoome on redivise le carré en 4 nouvelles images.
Je trouve assez amusant de voir que les 3 acteurs ont choisi exactement les mêmes chiffres. Pourquoi 256 pixels et pas 512 ou 1024 ? Pourquoi découper exactement de la même façon la carte ?
En tout cas c'est très sympa pour le programmeur car ça rend plus facile l'écriture d'un programme compatible avec les 3 services de cartographie.
On arrive ainsi à passer d'une carte à une autre en étant aligné au pixel près !

Dans la suite du billet, "z" désigne le niveau de zoom, et "x" et "y" les coordonnées.
Pour nommer une image de la carte à un niveau de zoom donné, on va distinguer 2 méthodes de désignation : la méthode "récursive" et la méthode "linéaire".
Par exemple pour désigner la zone rouge suivante (z=3) :


La première façon de désigner les images est tout simplement de numéroter les lignes et les colonnes de 0 à 2^z-1.
Par exemple, x=5 et y=3 pour la zone rouge.

(0,0) (1,0) (2,0) (3,0) (4,0) (5,0) (6,0) (7,0)
(0,1) (1,1) (2,1) (3,1) (4,1) (5,1) (6,1) (7,1)
(0,2) (1,2) (2,2) (3,2) (4,2) (5,2) (6,2) (7,2)
(0,3) (1,3) (2,3) (3,3) (4,3) (5,3) (6,3) (7,3)
(0,4) (1,4) (2,4) (3,4) (4,4) (5,4) (6,4) (7,4)
(0,5) (1,5) (2,5) (3,5) (4,5) (5,5) (6,5) (7,5)
(0,6) (1,6) (2,6) (3,6) (4,6) (5,6) (6,6) (7,6)
(0,7) (1,7) (2,7) (3,7) (4,7) (5,7) (6,7) (7,7)

L'autre technique de désignation est la suivante : on divise la carte en 4, le quart nord-ouest s'appele "A", le quart nord-est "B", le quart sud-ouest "C" et le quart sud-est "D".
On redivise récursivement le bon carré de la même façon.
En concaténant les lettres obtenu on obtient la référence de l'image, en "z" lettres pour un zoom de niveau "z".
Par exemple "BCD" pour notre zone rouge.
Les coordonnées "x" et "y" n'apparaissent donc pas directement, mais on passe facilement d'un système à l'autre avec une fonction récursive.

A
BA BB
BCA BCB
BCC BCD
BD
C D

Et voilà, ces deux techniques sont les seules utilisées par nos services de cartographies, aux lettres utilisées près, et aux décalages près...

Voici le détail :
  • Google Maps

    Chez Google, le zoom est numéroté de 17 à -4 (on peut peut-être aller encore plus bas sur certaines zones).
    17 correspond au niveau de zoom le plus lointain, où on voit toute la terre dans un carré de 256x256 pixels.
    • Vue "Map"

      C'est la vue par défaut, les images sont au format PNG.
      Les coordonnées "x" et "y" sont linéaires, et vont de 0 à 2^(17-z)-1.
      L'adresse est de la forme suivante : http://mt0.google.com/mt?n=404&v=w2.69&x=5&y=3&zoom=14



      mt0 est un des serveurs d'images, il y en a d'autres (mt1, mt2 et mt3 en ce moment).
      Le paramètre v=2.69 doit être mis à jour pour se conformer à la dernière version du protocole.
      Comme vous pouvez le voir, il n'y a pas de clef en paramètre (pas d'API key). On peut donc obtenir les images de façon "publique".
    • Vue "Terrain"

      Images au format JPEG, même système de coordonées, avec une adresse légèrement différente : http://mt0.google.com/mt?n=404&v=w2p.64&x=5&y=3&zoom=14



      Le paramètre v=2p.64 doit être mis à jour pour se conformer à la dernière version du protocole.
    • Vue "Satellite"

      Les images sont au format JPEG.
      La technique pour désigner les images est l'approche récursive, avec les lettres "q" (pour le NW), "r" (pour le NE), "s" (pour le SE), "t" (pour le SW).
      La racine est désignée par "t" : http://kh0.google.com/kh?n=404&v=25&t=trts



      Là aussi il y a d'autres serveurs possibles (kh1, kh2 et kh3 en ce moment).
      Attention, j'ai remarqué que Google Maps peut blacklister temporairement votre addresse IP si vous faites trop de requêtes sur ces serveurs...

  • Virtual Earth

    Chez Virtual Earth, c'est encore plus simple, seule la technique "récursive" est utilisée, avec les chiffres "0" (pour le NW), "1" (pour le NE), "2" (pour le SW) et "3" (pour le SE).
    Bizarrement, c'est le protocole pour lequel j'ai trouvé le plus de documentation "officielle" : Contrairement à Google Maps, il n'y a pas de "racine", on démarre tout de suite avec 4 images au plus haut niveau.
    • Vue "Road"

      Les images sont au format PNG : http://tiles.virtualearth.net/tiles/r123?g=117



      Le paramètre g=117 est à mettre à jour en fonction du numéro actuel de version.
      Là aussi il y a plusieurs serveurs, mais j'ai choisi le nom de domaine de plus haut niveau, qui assure lui-même la répartition (round robin DNS).
    • Vue "Aerial"

      Les images sont au format JPEG : http://tiles.virtualearth.net/tiles/a123?g=117


    • Vue "Hybrid"

      Les images sont au format JPEG : http://tiles.virtualearth.net/tiles/h123?g=117


  • Yahoo! Maps

    Le découpage utilisé est "linéaire", avec un zoom "z" démarrant à 18 (histoire de ne pas faire 17 comme Google wink), "x" variant entre 0 et 2^(18-z)-1, et "y" variant entre -2^(17-z) et 2^(17-z)-1.
    Attention l'axe "y" est inversé par rapport aux autres protocoles (les grandes valeurs sont au nord).
    • Vue "Map"

      Les images sont au format JPEG : http://us.maps1.yimg.com/us.tile.yimg.com/tl?v=4.1&x=5&y=0&z=15


    • Vue "Satellite"

      Les images sont au format JPEG : http://us.maps3.yimg.com/aerial.maps.yimg.com/ximg?v=1.7&t=a&x=5&y=0&z=15


Comme vous pouvez le voir, les différentes vues proposées se complètent bien, et surtout sont parfaitement alignées.
Sur PSP-Maps, j'ai rajouté un petit effet de "fading" lorsqu'on passe d'une vue à l'autre, et c'est du plus bel effet wink

Dans votre programme, il faut choisir votre système de coordonnées "principal".
Dans PSP-Maps, j'ai commencé par le support de Google Maps, donc j'ai gardé ce système de coordonnées linéaires.
On a donc "z" qui varie entre 17 et -4, "x" et "y" qui varient entre 0 et 2^(17-z)-1.
Lorsqu'on zoome, il suffit de décrémenter "z", et de multiplier "x" et "y" par 2.
Lorsqu'on dézoome, il suffit d'incrémenter "z", et de diviser "x" et "y" par 2.
Pour passer aux coordonnées linéaires utilisées par Yahoo! Maps, on peut réutiliser "x" directement, "z+1" comme niveau de zoom, et il faut décaler "y" : "2^(16-z)-y-1".
Pour passer aux coordonnées récursives utilisées par Google Maps, j'utilise la fonction suivante :
/* returns in buffer "b" the name of the Google Maps tile for location (x,y,z) */
void GGtile(int x, int y, int z, char *b)
{
	int c = 18 - z;
	b[c] = '\0';
	while (z++ < 17)
	{
		c--;
		if (x % 2)
		{
			if (y % 2)
				b[c] = 's';
			else
				b[c] = 'r';
		}
		else
		{
			if (y % 2)
				b[c] = 't';
			else
				b[c] = 'q';
		}
		x/=2;
		y/=2;
	}
	b[0] = 't';
}
Pour passer aux coordonnées récursives utilisées par Virtual Earth, j'utilise la fonction suivante :
/* returns in buffer "b" the name of the Virtual Earth tile for location (x,y,z) */
void VEtile(int x, int y, int z, char *b)
{
	int c = 17 - z;
	b[c] = '\0';
	while (z++ < 17)
	{
		c--;
		if (x % 2)
		{
			if (y % 2)
				b[c] = '3';
			else
				b[c] = '1';
		}
		else
		{
			if (y % 2)
				b[c] = '2';
			else
				b[c] = '0';
		}
		x/=2;
		y/=2;
	}
}
Avec des commentaires et un contrôle sur les paramètres ça serait mieux wink

Comme il ne s'agit que de requêtes HTTP, je pense qu'il n'y a pas de "risques" à utiliser ces informations, même si chaque service peut choisir de vous bannir.
C'est le cas de Google Maps si vous faites trop de requêtes (heureusement c'est un blacklistage temporaire).

Je vous invite fortement à mettre en place un cache local, afin de ne pas surcharger les serveurs de requêtes, et d'améliorer la fluidité de votre application.
Attention à la taille de celui-ci, ça grossi vite. Pour FreeMaps que je n'ai jamais "nettoyé", j'en suis à :
royale@fanta:~$ ls freemaps-cache/ | wc -l
439017
royale@fanta:~$ du -hs freemaps-cache/
5,7G    freemaps-cache/
Certaines images ne sont pas disponibles à tous les niveaux de zoom, il faut donc gérer la réponse du serveur.
Sur PSP-Maps j'envoie directement le buffer de réponse à la fonction IMG_Load_RW de SDL_Image.
Si l'image est valide (PNG ou JPEG), un pointeur vers l'image décodée est retourné.
Si l'image est invalide (erreur HTML par exemple), NULL est retourné.
23/03/2008 à 15:02
Picooz MX-1 Supreme

Antoine Jacquet (Royale)
En passant dans les rayons de Carrefour tout à l'heure, j'ai craqué et je me suis acheté le Picooz MX-1 Supreme.
Il faut dire que l'emballage est assez réussi et on ne peut pas le louper :



Comme je possède le premier modèle, et que celui-ci est encore plus petit, j'ai voulu les comparer.
J'étais notamment curieux de voir les performances en vol sur un modèle plus compact.
Il est vraiment petit et léger quand on le tient dans la main !



En effet, le nouvel hélicoptère fait environ 2/3 de l'original :



Comme vous pouvez le voir, la finition est plus soignée : modèle entièrement en couleur, vrai patin d'atterrissage, etc.

La télécommande quant à elle n'est très jolie, mais ce n'est pas bien grave puisque ce n'est pas ce qu'on lui demande wink
Par contre, elle possède un compartiment qui permet de ranger l'hélicoptère pour facilement le transporter.
C'est vraiment une très bonne idée... Et c'est également plus simple pour le ranger.
Il ne faut que 4 piles pour la télécommande (contre 6 dans le premier modèle), c'est toujours ça de gagné.



Le principe pour la charge reste le même que dans le modèle précédent : on connecte la télécommande à l'hélicoptère afin de charger la batterie.
Quelques minutes plus tard on peut voler.



L'interrupteur sur l'hélicoptère est encore plus petit que sur le premier Picooz, vous avez intérêt à avoir de petits doigts laugh Ou bien d'utiliser un cure-dent comme moi !

Je n'ai fait qu'un seul vol pour l'instant, mais je peux déjà faire les remarques suivantes :
  • Comme sur le premier modèle, mon hélicoptère était d'origine assez bien réglé. Juste un peu de trim à mettre sur la télécommande pour compenser.
  • Par contre la télécommande est moins agréable que sur le premier modèle, les commandes ne sont pas très précises.
  • En plus, il y a beaucoup de latence entre l'envoi des commandes et la réaction de l'appareil. On le constate rapidement dès qu'on met les gaz... l'hélicoptère réagit avec un petit délai. Du coup le pilotage est plus difficile, notamment pour gérer l'altitude.
  • Le modèle avance moins que le premier, c'est peut-être un petit défaut de centrage sur le mien, il faudra que j'essaye en lestant un peu le nez.
  • L'hélicoptère a tendance à tourner sur lui-même lors des changements de régime. C'était déjà le cas sur le modèle précédent, mais c'est plus prononcé sur celui-ci. Et c'est aussi plus difficile à compenser à la direction, alors que je "maîtrise" ça sur le premier.
En conclusion, le pilotage est moins efficace qu'avec le premier modèle.
Ca s'explique sûrement par sa taille réduite, qui le rend encore plus nerveux et très sensible au moindre souffle.
On s'amuse donc un peu moins puisqu'on se déplace plus difficilement et avec moins de précision dans la pièce.

Mais ça reste un vrai plaisir de voir un aussi petit modèle voler dans l'appartement grin
Je suis donc content d'avoir les deux modèles :
  • Le "gros" pour le pilotage de précision et les cascades.
  • Le "petit" pour le transporter facilement et impressionner encore plus les amis tongue


23/03/2008 à 01:42
Blogcamp #4 - vendredi 28 mars 2008

Julien Carnelos

Pour les bordelais qui lisent ce blog (et ils existent…), sachez que se tiendra la 4ème conférence Blogcamp à Bordeaux le vendredi 28 mars dès 19h.

On s’y retrouve ?

20/03/2008 à 13:43
PSP-Maps : Google Maps sur la PSP

Antoine Jacquet (Royale)
Pour combiner mes projets récents (Chromium-PSP et FreeMaps), j'ai travaillé sur un nouveau homebrew : PSP-Maps.
Comme son nom l'indique, il s'agit de pouvoir naviguer sur une carte avec la console portable.
En utilisant le Wi-Fi, le programme se connecte directement aux serveurs de cache Google Maps pour récupérer les images.



J'ai choisi de sortir plusieurs versions assez rapprochées pour avoir des retours de la communauté, et je dois dire que l'accueil est plutôt encourageant smiley
Je pensais que le développement PSP était vraiment une niche, et finalement ce sont les projets qui me donnent le plus de visibilité cool
J'ai même eu le droit à une petite revue vidéo sur YouTube :



Je n'utilise pas l'API officielle car la console ne peut pas interpréter le JavaScript requis.
J'ai également découvert l'API statique mais elle ne permet pas d'avoir accès aux vues satellite et terrain, donc son intérêt est limité.
La dernière version ajoute un cache local sur le Memory Stick, et permet donc de naviguer déconnecté, ce qui peut être très pratique en déplacement !
15/03/2008 à 15:16
ParisJUG - Selenium

Eric Le Merdy
Pour la première rencontre du ParisJUG, Zouheir Cadi a présenté à un auditoire de bonne humeur le produit open-source Selenium.
Voici un résumé de ce que l'on a pu en retenir. Paris Jug

Selenium est à placer dans la catégorie des "web testing tools".
Il est décomposé en plusieurs modules :

  • Selenium Core[SC] : c'est un composant (HTML + Javascript) côté serveur dont le but est d'exécuter des jeux de tests d'interface sur une application web à tester sur le même serveur.
    Plusieurs instructions de test formatées dans un tableau HTML forment un jeu de test exécutable. Exemple :
    1. ouvrir l'url http://localhost/monApplication/
    2. cliquer sur le lien "contact"
    3. vérifier que la page contient un bouton "envoyer"

    Ces tests sont écrits dans la syntaxe Selenese[SE]. L'inconvénient rappelé par l'intervenant est que cela nécessite de déployer ce Framework de test sur le serveur qui héberge l'application web à tester.
  • Selenium IDE[SI] : c'est un plug-in firefox qui permet de charger et d'exécuter des jeux de test et de capturer une séquence utilisateur en "live" tout en offrant la possibilité d'éditer les instructions en intercalant des assertions de vérification. De nombreux formats d'export sont supportés, citons un format natif HTML (avec des tableaux) ou une classe java (dépendante de JUnit).
    Zouheir nous a détaillé la forme d'une instruction qui peut être une Action agissant sur un élément du DOM de la page HTML repéré à l'aide d'un Accessor. L'autre type d'instruction est l'Assertion qui permet de vérifier un postulat dans une page.
  • Selenium Remote-control[SR] : c'est un serveur java (un jar ! ) qui embarque Selenium Core et qui permet d'exécuter les jeux de test dans un langage cible plus expressif que Selenese (Java, Ruby, pyton...) en lançant un navigateur préalablement configuré avec le proxy de Selenium Remote-control. Le navigateur sera alors "contrôlé" (d'où le nom du composant) en recevant les requêtes HTTP de Selenium Remote-control.

Au delà de cette présentation en règle du Framework, la valeur ajoutée incontestable de cette session fut l'interactivité avec l'auditoire et les démonstration : Selenium IDE, Selenium Remote-control, l'intégration de Selenium à Maven[MV], le passage des tests Selenium dans Continuum[CO].
Cette partie concrète a soulevé de nombreuses questions et permis d'aborder l'intégration continue. Voilà les conseils donnés par l'intervenant :

  • Si on utilise Selenium IDE, télécharger aussi l'extension XPather[XP] qui permet de faciliter l'édition des Accessors de type XPath.
  • Attention, l'export en classe Java Junit d'un test Selenium IDE contraint l'arbre d'héritage de cette classe à l'intérieur de l'API Selenium (com.thoughtworks.selenium.SeleneseTestCase)
  • Attention, toutes les dépendances Selenium Remote-control ne sont pas hébergées par le repository central de maven, il faut configurer un repository tiers (http://maven.openqa.org)
  • Les instructions Selenese sont portées en java pour l'écriture des tests JUnit (à l'exception des assertions - déjà présentes dans JUnit)
  • Faire fonctionner Selenium Remote-control avec maven permet de l'intégrer à bas coût dans le cycle d'intégration continue, dans un serveur Continuum par exemple (démo brillante)

Les débats ont rapidement migré vers la testabilité en général : Comment bien tester une application ? Jusqu'où aller dans la précision du cas de test ? Qui doit tester l'IHM ?
Zouheir a conclu sa présentation de l'outil en rappelant que Selenium n'était pas la solution miracle pour des sites "compliqués" (ajax) en s'adressant dans ce cas à un utilisateur avancé, voire un développeur. Mais cette solution reste très efficace pour tester les interfaces des sites "simples".

Pour terminer, les réflexions suivantes sont issues de quelques discutions avec les participants.
Pourquoi mettre en place des tests unitaires IHM de non régression ?

  • parce que notre client nous fait part de régressions
  • parce que l'automatisation des tests répétitifs en fin d'itération permet de gagner du temps
Quelles bonnes pratiques pour un tel outil ?
  • Un long test Selenium est compliqué à maintenir
  • Ecrire des tests très ciblés, de faible granularité, se concentrant sur un seul enchaînement d'écran
    avantages : de proche en proche, par succession de cette suite de petits tests, on teste le cheminement global dans l'application, la maintenabilité du test est augmentée
  • Adopter un pragmatisme continu en se posant aussi souvent que possible la question : "jeter le test et le recommencer ou maintenir le script ?"
  • Comment mesurer les gains apportés par les tests IHM ? Mesurer l'évolution du nombre de régressions, du temps de validation usine (0 avec l'intégration continue ?), du temps pour faire une recette.
  • [Con$eil] Si on démontre qu'on fait gagner du temps aux testeurs/recetteurs de la maîtrise d'ouvrage au fil des itérations, on peut se faire financer l'écriture et la maintenance des tests au même titre que n'importe quelle fonctionnalité.
  • Tests et données : éviter de tester l'interface contre des données métier affichées à l'écran - d'autres Frameworks sont peut-être plus efficaces pour les tests fonctionnels (FIT[FI] ou FITNesse[FS])

Selenium est un outil efficace. Il apporte une valeur ajoutée en terme d'efficacité de l'écriture et la maintenance des tests IHM.
Cette présentation a permis aux "Java Users" présents d'avoir un aperçu exhaustif des fonctionnalités de Selenium pour pouvoir prendre les bonnes décisions dans leur choix de stratégie de test appliquée à leur projet.
Avec cette présentation, le Paris JUG a vraiment transformé sa première rencontre en un moment utile et rempli de bonne humeur.

Sinon, le selenium est un bon anti-oxidant prévenant le cancer, par contre, à forte dose, il peut être toxique. Ne pas en abuser.


[SC] : Selenium Core
[SE] : Selenese
[SI] : Selenium IDE
[SR] : Selenium Core
[MV] : Selenium + Maven = selenium-maven-plugin
[CO] : Continous web testing with Selenium, Maven and Continuum
[XP] : XPather
[FI] : FIT
[FS] : FITNesse

12/03/2008 à 07:54
No (more) comment

Eric Le Merdy
Je viens de fermer des commentaires et trackback pour cause de spam intensif de ce blog.
Mon hébergeur Free a supprimé une table PosgreSQL qui commençait à prendre du volume et désactivé le compte de pages perso. Voyez ce bel avertissement :
Avertissement free
Suivi du message de réactivation :
Réactivation free
24 heures plus tard, le blog est de nouveau online mais l'application est un peu malade du manque de sa table de commentaires. La re-création de la table est facilitée par l'interface web d'administration de la base PostgreSQL. Ce qui n'est pas facilité, c'est le format du script DotClear qui détient le schéma de la base :
/dotclear/inc/dbschema/db-schema.php
. En effet, c'est une structure php dont il faut étudier la teneur dans le fichier :
/dotclear/inc/clearbricks/dbschema/class.dbstruct.php
, avant de créer la table.
Entre le moment où la table a été recréée et le moment où les commentaires ont été désactivés, il s'est écoulé environ 3 minutes. Ce fut assez de temps pour être remercié par 10 commentaires de spam ! C'est pourquoi je ne blâme pas Free de faire ce ménage radical lorsque les bases gonflent. Ils auraient aussi pu me radier de leur service d'hébergement gratuit...
11/03/2008 à 23:28
FreeMaps, record de trafic

Antoine Jacquet (Royale)
Free a intégré le support des télésites directement dans la Freebox V5.
L'intérêt ? On peut "surfer" sur des mini-sites depuis sa TV, et on n'a plus besoin de laisser son PC allumé comme avant puisque c'est maintenant la Freebox qui se charge de tout.
Du coup mon télésite FreeMaps n'a jamais eu autant de succès : environ 800000 images affichées aujourd'hui, contre 3000 avant la mise en place du service.
Seul problème, malgré la mise en place d'un cache sur mon serveur, j'ai généré tellement de trafic auprès des serveurs d'images de Google Maps que je suis temporairement blacklisté laugh
Du coup les vues satellites ne marchent plus...


Un petit pic dans les stats de mon site perso...

Autre anecdote, les télésites doivent être accessibles en IPv6 (ce qui limite pour l'instant le nombre de candidats), du coup j'ai également battu le record de trafic IPv6 sur mon serveur shocked

Histoire de continuer sur cette lancée, j'ai commencé à travailler sur PSP-Maps, un programme pour surfer sur Google Maps depuis la console.
Et bien sûr, je programme grâce à la PSP que j'ai gagnée au concours de télésite avec FreeMaps grin
07/03/2008 à 23:02
Keep the effort going on...

Christophe Sauthier (huats)
For the last few days I have the feeling that the 5-a-day Ubuntu movement has the tendency to lower a bit... Is it just my feeling, I don't think so...
So come on evreyone, let's continue that great movement !
--
My 5 today: #199123 (html5lib), #191201 (phpbb2), #193605 (conduit), #191741 (nano), #120143 (avidemux)
Do 5 a day - every day! https://wiki.ubuntu.com/5-A-Day
06/03/2008 à 15:53
Des backlinks !

Antoine Jacquet (Royale)
27/02/2008 à 21:41
Portage de Chromium B.S.U. sur PSP

Antoine Jacquet (Royale)
Je continue à m'amuser (dans le sens geek du terme) avec ma PSP cheesy
Cette fois, je me suis attaqué au portage d'un jeu sur la console.
Il faut dire qu'avec le travail de la communauté, on a un environnement de compilation complet incluant la majorité des bibliothèques utilisées dans les jeux (SDL, etc).

J'ai choisi le jeu Chromium B.S.U., un shoot 'em up spatial, qui offre un bon niveau de difficulté et un graphisme de qualité.

Chromium PSP

Voici les principales étapes et difficultés que j'ai rencontré :
  • Le jeu (dont le code source est assez "vieux") ne compilait déjà pas nativement. J'ai dû désactiver le support OpenAL (inutile de toute façon sur la PSP) et basculer sur SDL_Mixer (qui était déjà disponible).
  • L'étape suivante était de réussir à compiler pour la PSP (sans se soucier d'adapter le jeu dans un premier temps).
  • J'ai créé un Makefile.psp spécifique à la compilation du jeu pour la PSP.
  • Pour résoudre les premiers problèmes de compilation, j'ai choisi une technique un peu barbare consistant à commenter tout ce qui posait problème (notamment des appels OpenGL qui ne sont pas disponibles sur la PSP).
  • L'autre point qui m'a pas mal posé problème était le linkage final. L'ordre est important sur la PSP (il faut que le SDK soit linké en dernier) et j'avais beaucoup de dépendances non satisfaites... notamment avec OpenGL et SDL_Mixer.
  • J'ai compilé une première version sans le son, en remplaçant les appels OpenGL par des appels équivalents (un peu au pif rolleyes).
  • Le jeu était enfin compilé, mais ne démarrait pas sur la console. Comme on n'a pas de messages d'erreurs ni de débogueur, j'ai opté pour un bon vieux traçage à coups de printf() grin.
  • Après avoir adapté la résolution, le jeu démarrait enfin.
  • Pour résoudre le support du son, j'ai fini par recompiler SDL_Mixer avec le minimum de fonctionnalités (le jeu a juste besoin du support WAV).
  • Le reste des changements est de l'adaptation pour la jouabilité de la PSP : utilisation du joystick au lieu de la souris, messages de chargement, simplification du menu pour une meilleure lisibilité...
Le portage (binaires + sources) est disponible ici : http://royale.zerezo.com/psp/
Tout ça m'a occupé un moment, je n'ose pas imaginer combien de temps ça a pris pour porter Quake laugh
23/02/2008 à 22:18
Compte rendu Techdays 2008 - Partie 3

Julien Carnelos

Pour terminer de manière exhaustive ce compte rendu, voici la description de la deuxième journée.

 

Présentation générale SQL Server 2008

Session intéressante car nous avons eu droit à un point de vue 360° sur les nouveautés.

Je retiens particulièrement le travail apporté sur la partie Reporting. En effet, le moteur était déjà très intéressant dans la version 2005 mais quelque peu limité dans son utilisation par des novices. Avec l’arrivée de nouveaux outils orientés “Business”, cela sera un argument de plus pour ce produit.

 

Software+Services : Introduction

Session décevante où la première partie a consisté en la lecture des slides.

J’aurais aimé une présentation plus argumentée avec une comparaison des différents moyens pouvant être mis en oeuvre pour mettre en place du Software + Services.

 

Commerce Server 2007

Ayant déjà une expérience sur les problématiques e-commerce et ayant manipulé un peu Commerce Server, j’étais intéressé par le sujet. En effet, je souhaitais voir comment l’outil était manipulé par des experts du domaine. Et bien, je continue à avoir un à avis favorable sur le sujet et je pense que CS2007 est un des solutions les plus pertinentes actuelles en e-commerce prêt à l’emploi. L’aspect “Out-of-the-box” est un vrai argument avec un starter-site collant au maximum à un besoin standard.

 

Team System Rosario CTP

Session agréablement présentée par deux personnes de chez Winwise. Malheureusement le contenu était relativement pauvre en nouveautés. Rien de transcendant n’a été présenté mais juste des améliorations du produit. La conclusion étant de toute façon : “rien ne sert d’attendre rosario, passez déjà à Team System 2008“…

 

Conclusion

L’impression d’événement de l’année pour les développeurs a été amplement confirmée par le nombre de visiteurs (16 000) et la qualité des 300 sessions présentées.  Vivement les 2009 ;-)

23/02/2008 à 10:00
Test de l'offre OVH "serveur privé" RPS

Antoine Jacquet (Royale)
Dans la lignée de mon billet sur l'offre Gandi Hébergement, j'ai testé le dernier né d'OVH : le serveur privé réel (RPS).
Derrière ce nom barbare se cache un serveur dédié dont les disques durs sont remplacés par un SAN (Storage Area Network).
Contrairement à l'offre de Gandi, il ne s'agit donc pas d'un serveur virtuel : on a son propre hardware, à l'exception du disque dur, qui est déporté sur le réseau.

L'offre est encore en cours de test, donc le délai de livraison est assez variable, j'ai attendu quelques jours pour réceptionner ma machine.
Pour 9,99 € HT, on a un serveur avec :
  • 1 processeur Intel Celeron
  • 512 Mo de RAM
  • 10 Go de stockage SAN
  • bande passante non limitée

1/ CPU

Dès que je me suis connecté, j'ai vérifié un peu ce que la machine avait dans le ventre grin

royale@coca:~$ uname -a
Linux coca 2.6.24.2-xxxx-std-ipv4-32 #4 SMP Wed Feb 13 16:50:04 CET 2008 i686 GNU/Linux

On retrouve un noyau OVH par défaut, mis à jour depuis la dernière faille de sécurité sur les noyaux 2.6.

royale@coca:~$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 14
model name      : Intel(R) Celeron(R) CPU          215  @ 1.33GHz
stepping        : 8
cpu MHz         : 1333.392
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe nx constant_tsc up arch_perfmon bts pni monitor tm2 xtpr
bogomips        : 2668.54
clflush size    : 64

Par de surprises ici, et comme c'est un "vrai" serveur, on ne va pas partager ce processeur avec quelqu'un d'autre.

royale@coca:~$ openssl speed
Doing md2 for 3s on 16 size blocks: 205628 md2's in 3.00s

Un Celeron peut paraître faiblard, mais c'est toujours mieux qu'une part Gandi wink


2/ Mémoire

Avec seulement 512 Mo de RAM, c'est un des points faibles de la configuration, mais difficile de faire mieux pour ce prix... et c'est quand mieux qu'un Kimsufi.

royale@coca:~$ free
             total       used       free     shared    buffers     cached
Mem:        474600     435552      39048          0      44488     347776
-/+ buffers/cache:      43288     431312
Swap:            0          0          0

L'autre surprise, c'est qu'on n'a pas de swap !
L'explication est simple : on n'a pas de disque dur local, donc le swap devrait accéder au disque dur à travers le réseau shocked
On n'a donc vraiment que 512 Mo de mémoire, il faut faire attention à ce que les services gourmands ne consomment pas trop.


3/ Disque dur

J'attendais avec impatience de voir ce qu'allait donner les performances à ce niveau, puisque c'est le gros pari que fait OVH avec cette offre.

coca:/home/royale# hdparm -t /dev/sda
 Timing buffered disk reads:   34 MB in  3.09 seconds =  10.99 MB/sec

A comparer avec ce que je fais sur un Start 100M :

fanta:/home/royale# hdparm -t /dev/sda
 Timing buffered disk reads:  218 MB in  3.02 seconds =  72.21 MB/sec

Comme prévu, ça va moins vite... mais je trouve les résultats corrects par rapport à ce que je craignais.

Sur une décompression d'archive, on sent un peu moins la différence :

royale@coca:~$ time tar jxf linux-2.6.23.13.tar.bz2
real    1m1.023s
user    0m44.219s
sys     0m7.284s

Pour référence :

royale@fanta:~$ time tar jxf linux-2.6.23.13.tar.bz2
real    0m36.696s
user    0m28.367s
sys     0m3.992s

Reste à voir comment ça évolue quand le service sera vraiment lancé, et que le réseau et le SAN seront un peu plus sollicités.
Attention aussi, on n'a "que" 10 Go de stockage.


4/ Réseau

De ce côté, pas de mauvaises surprises, ça reste du OVH en puissance cool

royale@coca:~$ wget ftp://ftp.free.fr/mirrors/ftp.kernel.org/linux/kernel/v2.6/linux-2.6.23.13.tar.bz2
(10.53 MB/s) - `linux-2.6.23.13.tar.bz2' saved [45473072]

royale@coca:~$ wget ftp://ftp.oleane.fr/debian-cd/4.0_r2/i386/iso-cd/debian-40r2-i386-businesscard.iso
(8.15 MB/s) - `debian-40r2-i386-businesscard.iso' saved [33667072]

Côté upload, ça a l'air de bien fonctionner... ma connexion personnelle n'est pas très rapide en ce moment, donc ce n'est pas une mesure à prendre en compte :

royale@royale:~$ wget http://coca.zerezo.com/debian-40r2-i386-businesscard.iso
(642.67 KB/s) - `debian-40r2-i386-businesscard.iso' saved [33667072/33667072]


Au final je trouve l'offre assez intéressante, pour un prix vraiment petit.
Pour mon usage personnel, les points qui posent problème sont la RAM et l'espace disque limité.
Par contre tout le reste paraît correct. Je pense même que le SAN est une garantie de sécurité supplémentaire pour les données.
Pour information, des offres supérieures seront bientôt disponibles.
21/02/2008 à 14:56
Compte rendu Techdays 2008 - Partie 2

Julien Carnelos

Suite de la première journée :

Nouveautés de C#3

Session en “speed” pour nous faire un maximum de démonstration sur les nouveautés du langage. Session la plus technique de mon parcours. Car oui je considère que si je viens aux Techndays, c’est pour m’ouvrir à des horizons et des perspectives différentes et pas pour me former en 2 jours… Néanmoins cette session fût très intéressante et a largement piqué ma curiosité sur les lambda expressions.

En dehors de ces fameux lambda, on remarquera surtout la stabilité du langage pour sa troisième version. Preuve en est la qualification de “Sucre syntaxique sur quasiment toutes les nouveautés du langage.

 

ROA - Symposium DNG

Je mets la note de meilleure session des Techdays à Aurelien Pelletier pour sa présentation sur ROA (Ressource Oriented Architecture).  J’ai apprécié d’une part le speaker qui a su nous entretenir sur le sujet pendant une heure sans temps mort et d’autre part le sujet qui préfigure d’une évolution passionnante du web. J’engage ceux qui ne connaissent pas encore le sujet à creuser tant cette façon de procéder est en adéquation avec l’utilisation du web tel que nous le faisons aujourd’hui.

Pour les slides, c’est par ici.

.NET et l’Open Source - Symposium DNG

La grosse déception de la journée mais je vais tenter d’être factuel. J’avais une attente assez forte sur cette présentation car étant un “double compétence” Java/.NET, l’intérêt d’utiliser des outils et des frameworks Open Source est une évidence pour moi. J’attendais donc de cette session des retours sur leur utilisation et quels étaient leurs conseils en la matière.

Malheureusement, Didier Girard et son acolyte se sont contenté d’expliquer les principes de l’open source avec des généralités limite (Mettre Visual Studio Express sur une liste de produits open-source par exemple), de “torcher” en 3 slides une explication du fonctionnement de Spring et de Hibernate et de conclure que leur projet a été réussi grâce à ces technos.

Je pense que le public présent n’a pas pu apprécier cette session à sa juste valeur. En effet, beaucoup de personnes présentes dans la salle connaissaient déjà des frameworks Open Source et donc , ne pas avoir d’éléments factuels, ni de comparaison technique ou grilles de décision fait que la conclusion de la session n’a apporté aucune pierre au débat.

Pour les personnes novices sur le sujet, la session a permis de dissiper un peu de F.U.D sur la peur d’utiliser de l’open source en environnement Microsoft mais dans ce cas, il fallait mieux mettre en avant et expliquer les outils Spring et Hibernate au lieu de se contenter d’afficher le code des tutoriaux. On attendait une explication plus générale et donnant l’eau à la bouche et l’envie d’installer chez soi.

Dans tous les cas, je salue le travail réalisé pour cette session qui va dans le bon sens et j’attends avec impatience les prochaines sessions sur le sujet…

21/02/2008 à 13:04
Compte rendu Techdays 2008 - Partie 1

Julien Carnelos

Cela fait maintenant presque une semaine que les TechDays sont passés, le temps nécessaire pour avoir un recul suffisant sur cet événement majeur et épuisant.

On peut constater que l’importance de l’évenement va en grandissant et reste le point de rencontre majeur pour tous les développeurs Microsoft. Avec une population de plus de 15 000 visiteurs en 3 jours, la réussite de cette conférence n’est pas à questionner…

De mon point de vue, j’apprécie énormement ce genre d’évenement car j’ai l’impression d’être entouré de gens pour qui leur métier et aussi une passion et qui cherchent à toujours avancer dans leurs connaissances.

C’est aussi l’occasion de rencontrer de nombreuses personnes ou même de revoir des ex-collègues (que je salue au passage car ça fait plaisir de voir que le feeling passait toujours autant).

Après ces quelques mots, je vais me plier à l’exercice classique de description des sessions vues.

Jour 1

Pour la première journée, il y avait en parallèle le symposium DotNetGuru (DNG) dont le principe est de présenter des thèmes plus “architecturaux” et moins centrés sur la technique. Je considère que c’est une chance d’avoir accès à cette conférence intérieure et je félicite les organisateurs du choix de l’intégrer dans les Techdays. Ils ont pu toucher un public beaucoup plus large et beacoup d’intéressés (dont moi) ne seraient pas venu pour les DNG sans les TechDays  (Pour des raisons de justification de sortie entre autre).

Tout cela pour dire que cette première journée tourne beaucoup autour des sessions DNG justement ;-)

Sharepoint WCM

Pour ma première session, j’ai tenté la “Domain Driven Design” présentée par Sami Jabber mais la salle étant pleine je me suis rabattu sur la session Web Content Management sous MOSS 2007. Cette session très intéressante et bien présentée par Stéphane Cordonnier m’a rappelé beaucoup de souvenirs sur son ancêtre MCMS 2002. Mais il est heureux de constater que Microsoft a largement remis au goût du jour sa solution de CMS avec une interface Web performante et je n’ai pas retrouvé les défauts qui faisaient de MCMS 2002 un produit non fini.

Finalement pour la “Domain Driven Design”, j’attendrais le webcast pour en juger mais d’après les quelques échos, la présentation devait être assez perchée !

 

Suite dans un prochain article…

19/02/2008 à 12:42
FOSDEM 2008

Christophe Sauthier (huats)

Ath the end of this week I'll be attending, thanks to my company, the FOSDEM in Brussels. I'm thrilled about going what is sometimes called the best FOSS developers conference.

So if you see a more than 2 meters guy, whose face looks like the one standing next to this blog entry, just come to talk to me, I'll have less the feeling of being an almost anonymous guy :)

BTW, if you have any Ubuntu related stuffs planned, I'll be glad to join :) So leave me a comment...

18/02/2008 à 23:38
Du code temporaire qui devient définitif

Eric Le Merdy
Cette réflexion vient d'un retour qu'on m'a fait sur un programme écrit pour un client. La consultante fonctionnelle qui connaît bien les tables relationnelles de son produit me demande les logs des requêtes SQL éxécutées par mon programme.

Le problème

Le log transmis, elle observe une curiosité du type : select * from table where table.col1 = 'x' (...) and table.col1 = 'x' (...)
La requête est valide mais cela m'intrigue aussi. Comment en arrive-t-on à écrire un tel ordre et comment éviter que cela ne se reproduise ?
La bonne nouvelle c'est que grâce à la gestion de configuration, la tracabilité est assurée. La modification incriminée est apparue entre le 30/07/2007 14:00 (version 1.2) et le 01/08/2007 11:55 (version 1.3) :
v1.2
select * from table2 where /* table.col1 = 'x' and*/ (...) and table2.col1 = 'x' (...)
remplacement de table2 par table
select * from table where /* table.col1 = 'x' and*/ (...) and table.col1 = 'x' (...)
v1.3 : suppression du commentaite
select * from table where table.col1 = 'x' and (...) and table.col1 = 'x' (...)

Remonter aux origines

C’était l’époque où il y avait une incertitude sur la table source. J’ai donc introduit un commentaire dans la requête SQL sur la première condition (pour me souvenir qu’il serait probable qu'à terme, on filtrerait sur cette table source) avant de rajouter une autre condition que je considérais comme non définitive sur la table2… Après précision du nom de la table à requêter, j'ai supprimé le commentaire sur ma condition 1 sans relire la requête en entier après l’effacement de ces commentaires dans le SQL. Voilà pourquoi il existe aujourd’hui les deux conditions dans la même requête.

Leçons à retenir

  • La gestion de configuration permet de tracer très efficacement les modifications dans le code. Je n’aurais donc pas du mettre la condition en commentaire mais bel et bien l’effacer ! Seulement un commentaire dans le code est plus « visible » qu’une historisation de version. Or, le problème avait vocation à être résolu un jour. Dans ce cas, le commentaire n’agit pas comme une mémoire mais comme un marqueur de problème à résoudre. Et lorsqu’on agit mécaniquement (remplacement en masse), que les tests unitaires passent et que le programme se comporte correctement après résolution, on peut introduire ce genre de bizarerie !
    Typer son commentaire (de type TODO dans eclipse par exemple) est donc préférable car cela permet de :
    • Marquer visuellement dans le code qu’il y a un problème à résoudre
    • Retrouver, le cas échéant, la version historisée à l’aide de l'historisation car ce n'est plus du code en commentaire mais une explication du problème. Si c'est une autre personne qui dépile les tâches TODO, elle saura quoi faire alors que devant un code en commentaire, on ne sait pas quoi faire. Moi, en général, je supprime ce code...
  • Appliquer un principe d'ergonomie : rapprocher visuellement ce qui est lié, car du code est destiné à être relu, c'est donc aussi une représentation graphique ! En effet, pourquoi la seconde condition a-t-elle été placée si loin de la première alors que je savais que la seconde était temporaire et devait disparaître ?
  • Ecrire un commentaire pour se souvenir qu'il faudra changer la condition est du gaspillage. Mon programme n'en avait pas besoin pour fonctionner, je devais donc le supprimer. Le refactoring qui allait suivre serait donc plus simple et donc moins soumis à l'erreur.
15/02/2008 à 06:49
Isometric icon set

Eric Le Merdy
isometricIconSet.png Inkscape 0.46 is nearly there ! That is just the occasion for me to test the so-long-waited isometric grid feature that snap your points like if you were an architect with a natural born talent to draw in axonometric coordinates...
The other feature is the 3D-boxing. I personnaly do prefer isometric than perspective for vector icons...
My last SVG contributions :
11/02/2008 à 23:09
Livraison à domicile de courses par carrefour : l'arnaque...

Christophe Sauthier (huats)

Je ne suis pas trop du genre à me plaindre mais à sérieux je trouve que c'est abusé...

En effet depuis peu, Toulouse fait partie des villes où carrefour livre à domicile vos courses... Perspective très alléchante à première vue, d'autant plus que pour féter l'évènement les frais de livraison son offerts pour quelques temps ...

Nous avons donc décidé d'essayer le site, mais avant nous avons comparé les prix... Voici le résultat pour un produit que nous consommons régulièrement : "Tropicana réveil fruité", édifiant :

  • site carrefour.com : 2,91
  • magasin carrefour : 2,44
  • magasin intérmarché : 2,39

Que intermarché soit moins cher que carrefour, passons... Mais qu'il y a 19,26 % d'écart entre le magasin et la livraison je trouve ça complètement anormal... A quoi servent les frais de livraison sinon ???

Bref je crois que nous allons continuer à faire nos courses à intermarché...

09/02/2008 à 12:10
Techdays 2008

Julien Carnelos

C’est la nouvelle tradition du “grand” RDV des développeurs .NET sur Paris.

J’y serais présent les deux premiers jours (12 et 13 février), donc si vous voulez qu’on s’y croise, n’hésitez pas à me contacter !

Et si vous trouvez que je ne poste pas beaucoup ces derniers temps… et bien à défaut de partager, j’apprends beacoup de nouvelles choses ;-)

05/02/2008 à 22:17
Publicité "grosses jambes" Monster

Antoine Jacquet (Royale)
Heureusement qu'il y a encore quelques publicités sympathiques de temps en temps :



Je viens de voir la version française tout à l'heure à la TV smiley
03/02/2008 à 15:29
La pensée Geek du jour

Christophe Sauthier (huats)

A quoi un geek se rend il compte que l'heure de se coucher approche ? Lorsque sur son client IM, ses seuls contacts non idle ne sont pas dans le même fuseau horraire que lui et sont en +6 ou -6 par rapport à lui... :)

01/02/2008 à 01:12
Google Lego

Antoine Jacquet (Royale)