28 mai 2007

Formalisation vs. Annotations (suite à : codegen vs. @)

On dirait bien qu'il faut que les fichiers sources de génération, les méta-données, les diagrammes, les annotations... soient exprimés bêtement dans un langage fonctionnel. Langage fonctionnel, dont les documents « déclaratifs » XML, YAML, UML... sont des exemples primaires.

La frontière étant que le langage de programmation du code rajouté ne doit pas se mélanger aux « informations » (pour le coup, on est bien dans de l'information !) des méta-données. Tant que toute cette partie formelle est équivalente à une expression prouvable, on peut profiter de notre arsenal de preuve.

27 mai 2007

Génération de code vs. Annotations

Le sujet est un peu plus général que le titre, mais bon.

Il apparaît que dans le processus de développement logiciel, la génération de code qui s'appuie sur un formalisme (par exemple UML, XML, YAML...) est supérieure aux techniques inline qui s'embarquent dans le code lui-même : annotations, Generics, syntaxes de conventions à la RoR, reflection, JSP...

En pratique, cela se comprend quand le framework sous-jacent n'est pas bien mûr, ou pas maîtrisé : autant pouvoir s'appuyer sur du code produit par génération plutôt que sur un comportement « magique ». Mais en gros c'est une question de goût.

Cependant, du point de vue théorique, la génération de code est un opérateur qui a un inverse, et pas l'inlining. Dans les cas qui m'intéressent (principalement de la génération par XSLT), le code produit par génération est équivalent à la formalisation initiale du composant. Tandis qu'en inlining, non seulement on peut enrichir la formalisation avec du code (JSP...), on peut ou pas utiliser certaines techniques (Generics...), mais différents développeurs pourront avoir des techniques différentes. Certes, par rapport à la génération l'inlining a une richesse sémantique (cela du reste lorsque des gens trouvent intéressant de lire ce code), mais on n'a plus d'inverse.

L'inverse assure l'équivalence entre le code produit et la notation formelle. Ainsi un point de contrôle sur le code est équivalent à un point de contrôle sur la notation formelle. Ce n'est pas du tout le cas avec l'inlining : il faut écrire des points de contrôle spécifiques.

Le mieux qu'on puisse tirer est une extraction formelle à partir de code inlined : liste des annotations, etc. On obtient moults points de contrôles, mais on est forcément en-deçà du code lui-même. Et on perd évidemment toute la sémantique.

En conclusion : il ne faudrait plus mettre la sémantique dans l'inlining, mais dans une description autonome et disjointe. Et malgré les apparences il ne faut pas imaginer pouvoir suivre ce principe quand on utilise les annotations : on est toujours tenté par elles d'enrichir le code ou par le code d'enrichir icelles.

25 mai 2007

Plateformes applicatives

Le principe est le suivant : on met à disposition des utilisateurs une plateforme sur laquelle ils peuvent mêler eux-mêmes des composants applicatifs. Derrière, le métier, ou business, est lui regroupé non pas par utilisateurs, mais par services. Cela fait un maillage consistant, où chacun agrège ce qu'il veut : les utilisateurs font du drag&drop de widgets, les utilisateurs-développeurs font des mashups, les entreprises créent des partenariats pour se partager les données. Imaginez que vous puissiez faire installer par drag&drop un service Flickr sur votre page personnelle (modèle de NetVibes, voire d'AppExchange...), service qui propose des « objets » manipulables : des albums, des images, des personnes, des tags... et que cette manipulation permette les échanges avec les autres widgets : drag&drop d'image de Flickr vers un module de chat, recherche d'images analogues, retouche d'image... Ces fonctionnalités d'échanges ne sont pas apportés par les widgets eux-mêmes (très important), mais par la plateforme.

Oui, oui, ça date de 1984, et ça s'appelle Macintosh. Les applications y sont bien pensées, mais, surtout, elles prévoient dès leur conception de pouvoir échanger des « objets » avec les autres applications.
Imaginons qu'on arrive à ce modèle également pour le web.

Selon le point de vue adopté sur ces principes, on obtient les univers Netvibes (cohérence de la plateforme applicative), l'écosystème Netvibes (services publiés), la Facebook Platform (services publiés), AppExchange de SalesForce (services publiés, logique de partenariat entre métiers).

Un article de Fred Cavazza connexe : Réseau social + Web OS = Facebook Plateform

Et les Fûts ? Ben les Fûts c'est ça, mais pour les associations, open source, déployable sur le modèle Peer-to-Peer, et surtout, surtout, encore à l'état d'étude.

23 mai 2007

PHP vs Java

C'est moi, ou du code Java pourrave écrit à la va-vite, sans caching, sans pool de connexions, avec de l'introspection dans tous les sens, va plus vite que le code PHP ultra-optimisé avec les pconnect() de la mort-qui-tue qu'il était censé reprototyper ?

Déjà 100 ms de gagnées sur 130... Que reste-t-il à PHP ?

05 mai 2007

YAML vers XML

YAML est une notation fortement lisible et bien adaptée aux fichiers de configuration.

J'ai découvert YAML avec Ruby on Rails, et il m'a semblé pertinent de l'utiliser pour mes fichiers de configuration et de sources de génération de code.

Dès lors, afin de reboucler avec l'existant écrit XSLT ou autres mécanismes qui prenaient du XML en entrée, il est apparu intéressant de chercher un moyen de convertir du YAML en XML. Et là c'est absolument extraordinaire : alors que la spécification décrit en détail le modèle de représentation YAML, les essais de binding XML sont totalement désastreux.

J'ai bien trouvé quelques sources en Java :
  • JYaml. Fin constatée des travaux : février 2006. Java 5 only.
  • JvYAML. Activité constatée : de juin à septembre 2006.
  • yaml4j. Juin 2005.
  • JAML.
Hors Java, parlons par exemple de Syck, dédié à Ruby, Python, PHP et OCaml, rien de moins.
Mais tout ça est orienté fichiers plats, périmètre restreint, échanges de données, et performances.

En Java, je ne trouve pas de documentation d'architecture. L'un parle fichiers plats, l'autre System.out.println(), l'autre type cast...

Je n'ai pour ma part aucun intérêt à utiliser YAML dans des échanges de données. Je préfèrerais voir cracher du bête XML, dans le bête respect de la spécification.

01 mai 2007

Exhaustivité du Système d'Information

Mais quel intérêt de chercher à tout classifier, à tout contrôler ?

Pourquoi vouloir tout automatiser ?

Et pourquoi cette peur de la redondance des données ?

Un bon SI, c'est un SI au service des humains. Les humains préfèrent d'ailleurs un système fiable à un système qui se permet d'avoir des données incohérentes et qui en plus aurait des velléités de totalitarisme.

L'exhaustivité du SI, c'est un mythe idéologique. C'est une perversion. C'est souhaiter une plate-forme unique, qui contienne des données en correspondance à tout instant, dont la fiabilité serait assurée par la théorie, c'est-à-dire par un discours incomplet. C'est tomber systématiquement dans le travers de réfuter ce qui n'a pas été prévu par l'enthousiasme naïf du démiurge. « Pourquoi irais-je contrôler le résultat, puisque si tout a été fait comme prévu, le résultat est bon ». Aucune place pour la critique. Aucune certitude (sauf que les implémenteurs sont forcément mauvais). Et aucun humour, vous remarquerez.

Alors que d'un autre côté, on sait créer des systèmes souples, avec des traitements asynchrones et des contrôles dans tous les sens, en donnant à l'envi des indicateurs de fiabilité, en écrivant d'ailleurs ces contrôles avant le système lui-même. La fiabilité est donnée par l'usage. Et la fiabilité est forcément bonne. Pas parfaite dans un idéal, mais... bonne en pratique. Si les indicateurs sont publics, qui a intérêt à ce qu'ils soient mauvais ?

23 avril 2007

Confluence Personal License

Confluence, ce très bon wiki moultes fois recommandé, a depuis peu (me semble-t-il) un programme de licensing gratuit pour 2 utilisateurs. Tout le monde peut lire et laisser des commentaires anonymes, mais seuls 2 comptes, dont le compte Admin, peuvent créer et modifier des pages.

Le produit nécessite un JDK 1.4, vient par défaut avec son propre serveur HTTP et sa propre base de données.

Installé.

Confluence en licence standard (on part à $1200 dans le cas où on est ni une association à but non lucratif ni un projet open source) est un outil obligé pour travailler de façon collaborative. C'est un produit simple, rapide, efficace, ergonomique. Il vient avec un éditeur WYSIWYG pas trop buggé (pas trop, ai-je dit), une recherche full text très puissante, il sait indexer les documents Word, PowerPoint et PDF, et exporter en Word et PDF. Il est possible de rajouter des plugins. Le support est même réactif.

N'acceptez pas moins bien.

22 avril 2007

Pratique de l'art

Le 9 novembre 1989, Mstislav Rostropovitch, lui aussi virtuose, est lui aussi allé jouer dans une foule bruyante, voire pire : Bach était alors couvert par le bruit des burins et des marteaux piqueurs. Le mur de Berlin tombait, morceau après morceau.

Pourtant Rostropovitch ne s'est jamais plaint de n'avoir pas été écouté lors de cette expérience. Ce que depuis Paris il avait découvert se dérouler ce soir-là avait suscité chez lui une bête nécessité créatrice. L'art n'avait plus besoin de prétexte, ni l'artiste de public. Il s'agissait à mon avis d'une bête transcendance, du même ordre qu'un bête marteau crevait ce mur emprisonnant l'Europe.

Les expériences de Rostropovitch devant le mur de Berlin et de Joshua Bell dans le métro de Washington sont à mon avis à comparer. Si Kant n'était pas tant taxé de rigorisme, ce rapprochement servirait pleinement plusieurs de ses démonstrations sur la raison pratique.

18 avril 2007

Instrumentation

Joshua Bell a été convié en janvier dernier par le Washington Post a venir jouer du violon dans une station de métro, pour voir si des passants seraient touchés par la musique.

Ce qui me frappe c'est la différence d'appréciation de la musique sur la vidéo lorsqu'on voit que quelqu'un écoute ou... personne.

Dans cette expérience la virtuosité de Joshua Bell a été délibérément instrumentée pour montrer que des usagers du métro sont instrumentés de façon plus forte et plus durable par leur quotidien, et que certains, extrêmement rares, peuvent s'échapper de cette routine et être attentifs pour un instant à la sérénité.

Mais ce que j'y vois surtout, c'est la démonstration que l'art existe dans la relation avec le public, et que la virtuosité dans le vide, eh bien... ça n'est rien de plus. Mr Bell a dû bien s'ennuyer par moments.

Ah, et l'instrument est un Stradivarius.

Same difference.

17 avril 2007

Bug tracker planté

Tiens, ça ne m'était encore jamais arrivé, de planter un bug tracker. Où est-ce que je fais un rapport ? Cette fois ce n'était pas méchant cependant : un problème de mises à jour mal terminées sur la machine « repository ».

Une occasion de plus de mesurer l'importance des backups.

#51. Mettre en place des backups automatiques pour les données du bug tracker.

Ha... ha.

16 avril 2007

FreeBSD/i386

J'ai été médisant l'autre jour. FreeBSD/i386 s'est installé comme un charme sur le Dell. Il dispose par ailleurs d'un JDK natif et gère les RAMs de 4 Go.

Kss.

11 avril 2007

Jamais sans Windows

Ils sont sympas chez Dell. On peut désormais commander des machines sans Windows préinstallé. Sauf que sur un Dimension E520 nSeries (sans OS, donc) même le CD fourni avec un FreeDOS beta8 bootable ne s'installe pas, car le clavier USB cesse soudain d'être reconnu en plein milieu de la procédure. Idem pour un FreeDOS 1.0 final. Alors ne parlons pas de Linux ou de *BSD.

Certes l'update DM061 BIOS 2.2.1 semble avoir été passée avant la livraison. Mais rien ne fonctionne pour autant.

C'est rageant.

30 mars 2007

Subversion Repositories (SVN)

Un projet chez SourceForge, un projet chez Google Code, un serveur dans un cagibi distant (remote cagibi), chacun avec un repository Subversion (SVN), le deux premiers avec un accès HTTPS, le troisième en SVN+SSH. But du jeu, arriver à développer avec ou sans Eclipse, sur des postes Mac (Mac OS X) ou Windows (XP), et faire un peu d'intégration pas trop discontinue sur du NetBSD...

Mazette que de temps passé sur la configuration de tout ce petit monde.

Les Fûts sont au point mort

Déjeuner hier des trois fondateurs du projet.

Les nouvelles ne sont pas brillantes.

On gèle toutes les actions auprès des associations... Certaines attendaient un site web. Elles ne l'auront pas :-(
On gèle toutes les actions auprès des financeurs... Certains croyaient dans le projet. Il faudra attendre :-(
Et la prochaine réunion technique n'est pas prévue...

Bref.

21 mars 2007

Affinitiz : blogs et communautés

Affinitiz, un service qui allie blogs et communautés. Bon, d'après la présentation ce n'est pas d'une ergonomie folle, mais ça a le mérite d'exister, suivez mon regard.

Le service existerait depuis 6 ans, et compte actuellement 300 000 adhérents.

18 mars 2007

top10is : pour les associations sportives

Via « Créer et animer une association Loi 1901 » : top10is, un outil en ligne, actuellement en béta gratuite, qui cible les associations sportives… Euh, surtout les clubs de tennis, en fait.

17 février 2007

À quand l'hébergement par les internautes ?

Vu chez Transnets : «Web 3.0: une autre branche pour l’arbre des possibles»

Voici un extrait de l'idée :
Web 1.0: Les contenus sont produits et hébergés par des entreprises.

Web 2.0: Les contenus sont produits par les internautes et hébergés par des entreprises.

Web 3.0: Les contenus sont produits et hébergés par les internautes.
(Cela signifie ne plus héberger son mail sur Gmail, ses photos sur Flickr, etc… Les données sont reçues, stockées et accessibles sur une machine administrée par et physiquement chez l’interna
ute.)

Oooh, comme je suis d'accord :-) C'est ça, internet. La mise en réseau, à la fois des machines et des geeks (l'internet du début), des gens normaux (le web, puis le web 2.0), mais également des machines chez les gens (le peer-to-peer enfin valorisé par un côté réellement applicatif).


J'irai plus loin : Échangeons des données cryptées par P2P, et distribuons les traitements.

12 février 2007

Typographie française sur le web

En travaillant sur Unicode, je découvre la typographie sur le web.

Certes, je faisais jusqu’ici mon possible pour utiliser les guillemets chevrons [«…»] bien français au lieu des guillemets anglophones ["], j’usais de capitales accentuées, même dans le cas de majuscules (voir ici: Majuscule et capitale, minuscule et bas de casse), et je rajoutais au mieux de belles espaces insécables avant les signes de ponctuation double comme [:], [;], [?] et [!], mais… en restant dans le jeu de caractères ISO-8859-1 (ou « ISO-Latin-1 ») j’avais au final tout faux.

Les liens suivants m’ont ouvert les yeux :
Tout d’abord, les signes de ponctuation [;], [?] et [!] ne doivent pas être précédés d’une espace insécable, mais d’une… fine.

Ah.

Et comment fait-on une fine en HTML ? M’enfin, en changeant la taille de la police de l’espace insécable, c’est bien connu !
Tous à bord !
Doit s’écrire :
Tous à bord<span style="font-size: 30%;">&nbsp;</span>!
Autant dire que ça commence bien.

Ensuite, l’apostrophe. Moi qui croyais benoîtement que la courbure imposée lors de la frappe par Microsoft Word était de l’ordre du superflu, eh bien non, l’apostrophe française s’écrit bien [’] (Unicode &#8217;), et non ['] (ASCII &#39;).

Et le tiret cadratin, alors ? Oh, un simple &#8212; (—). Rappelons en effet que le &#151; du Windows CP-1252 n’est pas Unicode, et ne fonctionne comme l’indique sa table de codage, que sous Windows.

Le tiret demi-cadratin est lui donné par &#8211; (–).

Les points de suspension ? &#8230; (…).

Et heureusement que je suis sur Mac : tous ces caractères, en plus des majuscules accentuées, sont facilement accessibles au clavier. À part la fine insécable, bien sûr.

Me voilà donc à revoir toutes mes pages web francophones et à estimer le temps de recomposition de leurs textes.

Mais soudain j’échoue pour mon infortune sur une page de typographie, datée de 2004, qui s’intitule « Les ligatures ».

Page où l’on se remémore qu’on doit d’user du « œ » &#339; pour bien parler d’un œuf (Unicode) et non d’un oeuf (pour s’en tenir à ISO-8859-1) ; quant au «æ» de Lætitia, il se trouve, lui, dans ISO-8859-1.

Mais page, où l’on se fait également et aimablement rappeler, que « f i » doit être ligaturé. Ainsi que « f l ». « f f i ». « f f l ». Etc. !

« f f » : « ff », &#64256;
« f i » : « fi », &#64257;
« f l » : « fl », &#64258;
« f f i » : « ffi », &#64259;
« f f l » : « ffl », &#64260;
« c t » : « … », &#…; Introuvable ?
« s t » : « st », &#64262;

On parlera donc de « signification » et d’« efficacité », et non de "signification" ou d'"efficacité" (quelle horreur ! une apostrophe droite mariée avec d’angliches guillemets ; on ne sait plus qui est qui – sans parler de l’absence de ligature).

Comparez en sélectionnant des parties de mots : dans les premiers cas, les lettres ligaturées forment bien un unique caractère.

Et c’est là qu’on atteint la limite de l’exercice : ces mots aux lettres joliment ligaturées ne peuvent plus être trouvés dans la page par une bête recherche dans son navigateur ! On ne sait non plus ce qui advient de l’indexation du texte.

Faut-il patcher Firefox ? Google ? Aïe, aïe !

11 février 2007

Hellotipi : plateforme de sites familiaux

Le site Hellotipi : http://www.hellotipi.com/
Blog du créateur, mrBoo : http://www.mrboo.fr/

Hellotipi se présente comme une plateforme de création de sites de famille.
Chaque site de famille contient :
  • Un blog communautaire (chacun peut y donner des nouvelles et faire des commentaires)
  • Des albums de photos (stockage illimité)
  • Un arbre généalogique simplifié (à venir)
  • Un annuaire des membres de la famille
  • Un agenda partagé (pour planifier des événements familiaux)
Wikis, calendriers, plateforme mutualisée… On a tous les mêmes bonnes idées :-)
mrBoo parle même d'utiliser OpenID : « Votre identité numérique »

03 février 2007

Internationalisation de logiciel

Chez Finis Africae, un article sur la difficulté à utiliser les bons codes de langues (pour PalmOS, bon…) lorsqu'on veut internationaliser un logiciel : http://www.finis-africae.net/article.php?id=861