darkBlog

mardi 18 décembre 2007

Compression gzip automatique des fichiers JS et CSS avec Domino

Voilà un sujet qui est souvent revenu autour de la toile ces derniers temps : la compression gzip avec Domino. Et avec la multiplication des frameworks javascript plus puissants mais aussi plus lourds les uns que les autres (Ext, YUI, Dojo, etc), on comprend aisément pourquoi ce sujet est devenu critique. Initialement prévue pour la R7, puis finalement non (et voici peut-être pourquoi), plusieurs solutions personnalisées de compression gzip ont vu le jour ; en substance :

La solution que je vais vous décrire est un peu un amalgame des deux dernières ; une servlet pour compresser à la volée les fichiers, mais (et c'est là toute la magie) avec des règles de sites web spécifiques pour réécrire les URL et compresser de manière transparente, sans toucher aux liens existants.

J'attire votre attention sur le fait que le peu de tests réalisés dans des environnements de production ne se sont pas révélés à la hauteur des attentes, et en outre, après quelques jours d'activité, la tâche HTTP a commencé à montrer des signes de faiblesses et une consommation mémoire anormalement élevée. C'est peut-être dû à l'utilisation intensive de la servlet, c'est peut-être dû à autre chose (mauvais paramétrage ?). Cette première expérience me laisse perplexe car j'utilise des servlets pour d'autres applis à fort taux de visite sans le moindre problème. Néanmoins, je reste convaincu que le concept est bon et c'est pourquoi je vous le présente, en attendant de trouver le fin mot de l'histoire. Gardez tout de même ceci en tête avant de le déployer sur vos serveurs !

La servlet de proxy

Vous vous souvenez de l'agent de proxy Domino ? Vous ne l'avez certainement pas vu puisque cela n'apparaissait que dans les commentaires, mais à l'époque je l'avais également codé sous forme de servlet. Et bien j'ai ajouté quelques fonctionnalités à cette dernière, et notamment celle de gzipper le contenu avant de le renvoyer vers le client (paramètre &gzip=1).

Vous pouvez la chopper ici :

Pour ce qui est de l'installation de la servlet, je vous renvoie à cet article un peu vieux mais plus ou moins toujours d'actualité : Domino development with servlets, ou sinon, en quelques mots, vous déposez le fichier ProxyServlet.class dans votre répertoire data\domino\servlets, et vous vous assurez que le gestionnaire de servlets de Domino est activé (document serveur > Internet protocols > Domino web engine).

Les règles de sites web

Vient ensuite la partie plus amusante : les règles de sites web1. Les règles de substitutions et de redirections font un peu penser à une sorte de mod_rewrite du pauvre, mais avec un peu d'astuce on peut arriver malgré tout à faire des choses sympathiques.

L'idée va être la suivante : pour tous les fichiers ayant l'extension .js ou .css, on redirige (en interne) vers la servlet de proxy avec en paramètre l'URL du fichier susnommé. Le tout est alors totalement transparent pour l'utilisateur. Simple, non ? En réalité, un peu moins que ça, car les possibilités de réécriture des règles de sites web sont limitées et il va falloir mettre en place 2 règles de substitution par extension pour arriver proprement à nos fins.

La première règle va transformer les appels vers les fichiers *.js vers la servlet de proxy avec pour extension de fichier *.js2gzip, tandis que la seconde va intercepter les appels aux fichiers *.js2gzip pour les retransformer en *.js, ce afin de conserver le bon type MIME. Et de même pour les fichiers *.css. Sans cela, la tâche HTTP chercherait à invoquer la servlet indéfiniment (boucle infinie), jusqu'au plantage de la tâche.

*.js -> /servlet/ProxyServlet?url=*.js2gzip&gzip=1&expires=0
*.js2gzip -> *.js

Extrait de ma config :

Règles de réécriture de sites web

Attention, notez bien que les règles définies dans la partie Global web settings ne s'appliquent pas pour le site par défaut, avec Domino 7.0.2 FP2 du moins. Cela relève probablement du bug.

Conclusion

A l'heure où j'écris ceci, je ne ne peux vous fournir de chiffre, mais les résultats lors de mes tests se sont montrés sans appels, et les temps d'affichage des applications massives (remplies de fichiers js et de css) nettement réduits au premier chargement. Et ce - c'est là l'intérêt - sans changer la moindre ligne de code des applis. Un simple test avec Firebug et YSlow le prouve.
Je n'explique cependant toujours pas pourquoi les performances de la tâche HTTP se sont dégradées avec le temps, mais je vais continuer à chercher. La solution est peut-être un tuning plus fin du côté des entêtes HTTP d'expiration (voir le premier point de ce billet de Julian Robichaux) afin de soulager un peu la tâche HTTP. Quoi qu'il en soit, si jamais vous essayez de votre côté, n'hésitez pas à me dire ce que cela donne.

Edit : Voilà quelques stats pour illustrer ces propos :

Stats de compression gzip

Edit #2 : La solution été a priori trouvée (merci Smicky) ; utiliser d'un côté des connexions "fermées" entre le proxy et le serveur Domino, et conserver des connexions persistantes entre le proxy et le navigateur (ce qui implique de retourner la taille du contenu gzippé via l'entête Content-Length). Le hic, c'est que ça pose des tas de problèmes dans IE ; les CSS ou les JS se perdent très souvent dans la nature. C'est un problème connu, il y a des tas de références là dessus sur Google, et presque autant de patchs chez Microsoft selon les versions de Windows et/ou d'IE. La solution globalement préconisée : ne pas utiliser la compression gzip avec IE. Super. N'ayant pas trouvé de workaround malgré un bon paquet d'heures perdues passées sur le sujet, j'abandonne. C'était pourtant une belle idée.

1 : Pour cela, vous devez nécessairement utiliser les documents de sites internet (document serveur > onglet Basics > Load Internet configurations from Server\Internet Sites documents).

vendredi 19 octobre 2007

Tip of the day : Exit while en LotusScript

Vous l'avez peut-être remarqué, étrangement, il n'y a pas d'instruction Exit while en LotusScript (du moins avec Domino 7), permattant de sortir d'une boucle While ... Wend. Une solution simple à ce problème est d'utiliser une boucle Do While ... Loop à la place puis l'instruction Exit do. J'aime quand un plan se déroule sans accroc.

jeudi 26 juillet 2007

Ytria reconduit sa promo d'été

Difficile d'y échapper, en ce moment, c'est les promos, et à ce titre, Ytria, éditeur qui propose une large gamme de logiciels dédiés aux développeurs Lotus Notes, reconduit cette année son offre de licences gratuites jusqu'à la fin de l'été. Si j'en parle, ce n'est pas parce que Jérôme me l'a gentiment demandé, ni même parce qu'il s'agit d'une équipe fort sympathique que j'ai eu le plaisir de rencontrer à l'occasion de la LotusSphere 2007, mais bien parce que leurs produits sont tout simplement du bonheur en barre, dont mes collègues (hein, Renaud) comme moi sommes fans et bénissons chaque jour ses géniteurs.

Alors si vous avez un peu de temps devant vous - ce qui est souvent le cas en été, généralement signe d'activité réduite - je ne saurais que trop vous conseiller d'y jeter un oeil. Et si vous ne devez tester qu'un logiciel, essayez ScanEZ, un explorateur / éditeur de documents d'une puissance telle qu'on en vient à se demander pourquoi IBM n'a jamais intégré quelque chose de similaire à Lotus Designer. Leur slogan "Addiction may occur" est on ne peut plus juste ; une fois qu'on y a goûté, difficile de s'en passer.
Les plus démunis d'entre-vous seront ravis d'apprendre qu'une version en lecture seule de ScanEZ (une expérience qui devient vite frustrante, toutefois) reste disponible tout au long de l'année.

lundi 23 juillet 2007

Disponibilité de Domino 7.0.2 FP2

Dans l'indifférence la plus complète (serait-ce dû à l'effervescence Notes 8 / Quickr / Connections ?), le Fix pack 2 de Domino 7.0.2 est sorti il y a un bon mois & demi maintenant. D'après la fix list, il règlerait (entre autre) les nombreux problèmes de crash de la tâche HTTP que l'on rencontrait avec la 7.0.2 et 7.0.2 FP1. Je l'installe de ce pas sur nos serveurs de développement. De votre côté, des retours ?

mercredi 6 juin 2007

Barre d'outils de support des produits IBM

IBM met à disposition une barre d'outils de support de l'ensemble de leurs gammes de produits (Lotus, WebSphere, Tivoli, Rational) pour Internet Explorer et Firefox. Cette barre d'outils, entièrement paramétrable, offre des accès directs aux différentes rubriques les plus utiles de chacune des gammes de produits (téléchargements, documentation, forums, technotes, etc), tout comme la possibilité de rechercher directement parmi celles-ci grâce à un champ de recherche.

Voilà une excellente initiative que l'on ne peut que féliciter, et de fait une extension à installer de toute urgence.

Recherche de @Dblookup et 64k sur les technotes de Lotus

jeudi 24 mai 2007

Eliminer les doublons dans une vue (même les plus tenaces, et sans laisser de trâce)

C'est en lisant l'excellent article Coding faster lookups in IBM Lotus Notes and Domino publié il y a quelques temps déjà sur developerWorks (oui, j'ai du retard dans mes feeds) que je suis tombé sur l'astuce suivante : Use "Generate unique keys in index" to eliminate duplicate entries", que l'on pourrait traduire par : Utiliser l'option "Générer clés uniques dans l'index" pour éliminer les doublons.

Sous cet intitulé plutôt mystérieux se cache une fonctionnalité redoutable, que j'ignorais par ailleurs totalement : la possibilité de ne lister que les entrées uniques d'une vue, sur base de comparaison de chaînes de caractères. Exactement comme on le fait avec les catégories, sauf que là, point de catégorisation encombrante, la vue reste plate2.

Sans: 7 entrées, avec: 3 entrées
A gauche sans, à droite avec

L'une des principales applications de cette option s'impose d'elle même : plutôt que de faire systématiquement un @Unique derrière un @DbLookup pour supprimer les doublons tout en priant pour que la limite des 64k ne soit jamais atteinte (ou alors une fois que vous aurez changé de job), l'idée devient alors d'utiliser une vue spéciale dotée de cette propriété. Les avantages sont multiples : plus rapide (pas de @Unique à calculer à chaque exécution de la formule, mais au contraire directement calculé dans l'index de la vue), et surtout la garantie que votre appli n'explosera pas en cours de route à cause d'un trop grand nombre de documents (et du coup vous pouvez songer à faire carrière dans votre boite, et par exemple commencer par demander une augmentation).

Propriété de la vue : ODBC Access, generate unique keys in index

Petite mise en garde toutefois, en R6, cela ne fonctionne pas sur les champs multi-valués (l'article conseille alors de faire un @Implode dans la colonne puis un @Explode derrière). En R7, le problème est réglé. Et en R5 ou inférieur, je présume que cette option n'existe pas. MAJ : Cette option semble également exister en R5 et même en R4.6.

Quoi qu'il en soit, je n'en reviens toujours pas de ne découvrir un truc aussi fondamental qu'aujourd'hui, après 3 ans & demi de travail dans l'univers de Lotus Notes / Domino. Un truc qui m'aurait sauvé la mise bien des fois par le passé. Force est d'avouer que l'intitulé de section "ODBC Access" est bien trompeur, et est certainement la raison pour laquelle je ne me suis jamais attardé sur cette option. Ce qui est sûr, maintenant, c'est que je ne suis pas près de l'oublier.

2 : à défaut d'être catégorisée, la colonne en question doit tout de même être triée.

lundi 19 février 2007

Ouverture de document par clé : attention aux restrictions en lecture !

Comme vous le savez, en web il est possible d'accéder à un document directement par son UNID, mais aussi par l'intermédiaire d'une clé, clé qui doit correspondre au contenu de la première colonne triée de la vue en question. C'est un moyen très commode de mettre en place des URL significatives dans les applis web Domino, et c'est bien plus sexy et parlant qu'une suite de 32 chiffres hexadécimaux, comme le démontre sans ambiguïté possible l'exemple fictif suivant :

http://host/darkblog.nsf/billets/faites-un-geste-pour-la-france?opendocument

Seulement voilà, quand les documents en question sont protégés par des champs lecteur, ça peut vite tourner au drame. En effet, que se passe-t-il lorsqu'on tente d'accéder anonymement à un document protégé via son UNID ? Domino détermine qu'Anonymous n'a pas accès au document et retourne une demande d'authentification. Jusque là, tout va bien. Maintenant, que se passe-t-il lorsqu'on réitère la même procédure mais en ouvrant le document protégé via sa clé ? Et bien c'est facile : comme on n'a pas accès au document, il n'est pas listé dans la vue, du coup la clé n'est pas retrouvée, et là je vous le donne en mille : une belle erreur 404 des familles.

Ce genre de situation n'est pas censé se produire dans un cadre de navigation classique dans une appli, mais dès lors que les utilisateurs commencent à bookmarker des pages et/ou à se les refiler par mail ou par Sametime (et on saurait difficilement leur reprocher), c'est là que les ennuis commencent.

Si l'appli requiert nécessairement l'authentification des utilisateurs, cela peut se régler aisément en paramétrant correctement l'ACL ou en rajoutant systématiquement &login aux URLs des liens. Dans le cas contraire, je ne vois malheureusement pas de solution vraiment efficace, ni même triviale.
La solution que j'ai mise en place de mon coté - puisque j'ai été confronté à cette deuxième situation vendredi dernier - a consisté à capturer l'erreur 404 avec un masque spécial $$ReturnGeneralError, à extraire de l'URL la clé du document, puis à rechercher l'UNID du document par rapport à sa clé avec un agent (l'agent s'exécutant en tant que signataire, il voit tous les documents, lui), et enfin à rediriger l'utilisateur vers le document via la syntaxe UNID?opendocument. Et cela fonctionne plutôt pas mal. Cela aurait même pu être propre s'il avait été possible d'exécuter des agents au WQO dans le masque $$ReturnGeneralError, malheureusement, comme il s'agit d'un masque spécial, ce n'est pas le cas (pff) et mon implémentation passe par une redirection javascript (oui, c'est mal, mais je n'ai pas trouvé mieux).

Tout ça pour rebondir avec grâce et élégance sur le titre du billet : si vous utilisez l'ouverture de document par clé, faites attention aux restrictions en lecture.

jeudi 15 février 2007

Lotusphere 2007 - le bilan (1/2)

La Lotusphere 2007 s'est terminée il y a maintenant 3 semaines, et bien que vous ayez déjà dû en lire l'essentiel ailleurs, j'ai quand même fortement envie de revenir dessus. Car il y a beaucoup de choses à en dire. Dans ce premier billet, je vais revenir sur l'événement en tant que tel et vous dire ce que j'en pense, sachant que c'était ma première Lotusphere, que c'était tout nouveau pour moi et que je ne savais pas à quoi m'attendre. Dans un second billet (qui viendra je ne sais pas quand, la Wii présentement à 30cm de ce PC influant beaucoup sur ma motivation), je reviendrai sur les nouveaux produits présentés (car il y en a eu beaucoup) comme sur les nouveautés des produits existants.

L'événement

Je n'apprends rien à personne, la Lotusphere est l'événement annuel majeur dans le monde Lotus, la grande messe lors de laquelle les gourous d'IBM et autres partenaires prêchent la bonne parole à des hordes tantôt passionnées, tantôt sceptiques - mais jamais indifférentes - à l'univers des produits Lotus et plus globalement de la collaboration en général (notons la présense d'un certain nombre de SharePointiens curieux). Cette édition 2007 s'est déroulée à Orlando, Floride, dans les deux hotels les plus prestigieux du parc DisneyWorld (Le Swan et le Dolphin -- on me souffle d'ailleurs dans mon oreillette qu'il s'agit d'un lieu récurrent), et autant le dire de suite, tout est fait dans la démesure et prévu pour en mettre plein les yeux. Un vrai show à l'américaine, à des années lumières des bien plus modestes Lotusphere comes to you. On comprend mieux les 2500$ de frais d'inscription devant un tel étalage de fric. Mais qu'importe, on est là pour célébrer notre métier voire notre passion, alors autant profiter un maximum de ce qui nous est proposé. Car des choses passionnantes à faire et à voir, il y en a bien plus que de temps imparti.

Des serviettes en forme de mickey
Ohhh, comme ils sont mignons chez Mickey...

Je ne savais pas vraiment à quoi m'attendre, ni si cela valait le coup/coût, mais disons le clairement : j'ai été très largement conquis par cet événement, et ceux qui me connaissent savent que je taris bien plus facilement d'éloge que de critique.

La Lotusphere est un événement exceptionnel car c'est l'occasion unique de rencontrer des tas de gens qui gravitent autour du même métier et qui rencontrent les mêmes problématiques que soit. Entre 6000 et 7000 personnes étaient présentes, de toutes les nationalités imaginables, et même de pays dont je n'avais jamais soupçonné l'existence auparavant (bon ok, je suis particulièrement mauvais en géo). Ca a été notamment pour moi l'occasion de rencontrer (non sans peine) les camarades Smicky et Olivier de Dominux (dont j'ai plein de photos sympathiques -- faire offre en commentaire), mais aussi d'autres personnes avec qui j'ai pu tenir des échanges franchement intéressants, dans la mesure de mon piètre anglais.

Une horde de geeks en sac à dos jaune
La horde barbare des geeks au sac à dos jaune

C'est aussi l'occasion de rencontrer des tas d'éditeurs via le Product Showcase - sorte de salon en marge de l'événement - qui proposent des produits et/ou des services liés de près ou de loin au secteur des produits Lotus et Websphere. Et vous savez quoi ? Aussi pompeux que cela puisse paraître, c'est un aspect vraiment intéressant de la Lotusphere, car il y a de bons produits à découvrir. Vraiment. Red Hat y etait. OpenNTF aussi. Même Google était là. Mention spéciale pour la très sympathique équipe d'Ytria (majoritairement francophone), qui édite l'excellent ScanEZ (vous ne connaissez pas ? Essayez le, c'est du bonheur en barre).

La Lotusphere, c'est l'occasion de participer à des sessions de qualité (la plupart du temps, car il y a eu d'énormes blagues aussi) élaborées par les gens d'IBM ou par des partenaires qui connaissent (la plupart du temps) leur sujet. Et il y en a pour tout les goûts : du développement avancé à la stratégie business en passant par l'administration ou encore la découverte des nouveaux produits. Le planning est suffisamment bien pensé pour que deux sessions d'un thème identique ne se chevauchent pas sur un même créneau horaire (à de rares exceptions près). Et les sessions majeures sont répétées une voire deux fois, de sorte qu'il est quasi impossible de louper une session que l'on souhaite vraiment voir. Il s'agit là de l'attraction principale de la Lotusphere, et même si on a la tête comme une citrouille à l'issue de 6 ou 7 heures de sessions en anglais, ça vaut largement les heures qu'on aurait pû perdre passer à éplucher des PDF à droite et à gauche.

Des formes plutôt étranges et psychédéliques
Manifestement mes 2500$ sont aussi partis dans de la coke

L'un des aspects qui m'a semblé le moins mis en avant, et qui pourtant s'est avéré des plus intéressants, ce sont les labs dans lesquels on peut notamment rencontrer directement les développeurs des produits. Pour vous donner une idée du truc, imaginez un open-space énorme dans lequel on a sorti les développeurs barbus et quarantenaires de leur cave pour les exposer aux innombrables questions et remarques impitoyables de gens comme moi. C'est une expérience fondamentalement formidable. Les développeurs du moteur HTTP de Domino doivent désormais me détester tant je les ai harcelé. Tenez, par exemple, vous vous souvenez mes galères avec le webdav ? Très loin des call-center en Ecosse ou en Irlande et des échanges sans fin via les PMR, j'ai pu directement exposer le problème aux gars qui passent leurs journées à coder le moteur web. Et là, 2 ou 3 minutes de réflexion, une question à son collègue par Sametime, et hop, la solution est sur la table. Bon, en l'occurence pour ce problème, c'est une limitation de Lotus Designer et du format NSF, et il n'y a pas vraiment de solution, mais vous n'imaginez pas le nombre de problèmes que j'ai pu résoudre sur place, ou encore d'astuces-non-documentées-mais-pourtant-tout-à-fait-fonctionnelles que j'ai pu récupérer. Notre éternel problème de timeout dans WPS 5.1 ? Hop, réglé avec une instruction à rajouter dans un fichier de conf. Mon problème d'upload de fichiers volumineux via les File upload control qui plante ? Réglé avec une variable peu orthodoxe dans le notes.ini. Et c'est valable pour les problèmes actuels, mais aussi à venir. Car j'ai leur carte de visite maintenant, à ces gens là, et je sais qui contacter en cas de soucis. Inestimable.
Mais les labs, ce n'est pas que ça, c'est aussi l'occasion de découvrir les travaux expérimentaux d'IBM qui peut-être déboucheront sur de vrais produits, comme cette démonstration de mashup de Sametime et de Google maps tout en Javascript qui m'a franchement laissé sur le cul (en remplacement du vil toolkit STLinks et de son hideuse applet Java), ou encore de prendre en main les nouveaux produits accompagné des développeurs qui vous guident au travers d'exemples simples. C'est ainsi que j'ai pû découvrir de mes propres mains Lotus Expeditor ainsi que Websphere Portlet Factory. Je me répète peut-être, mais ça, ça vaut tous les PDF du monde. Inestimable, je vous dis.

L'arrivée de Neil Amstrong sur scène
On est à chier, on est pas digne...

Conséquence de tout ceci, la Lotusphere, c'est la possibilité de cerner la tendance qui se dégage pour les mois/années à venir chez IBM, et dans une moindre mesure chez les concurrents. Bien sûr, la bonne volonté d'IBM ne crée pas toujours un marché (cf l'expérience désastreuse de Workplace, en parallèle de la croissance inattendue des produits de la gamme Lotus -- +30% en 2006 !), néanmoins, savoir vers où Big Blue va mener sa barque, en qualité de consultant (oui, bon, ok, c'est un titre pompeux, mais bon, nos clients nous consultent pour notre expertise, non ?), c'est, il me semble, un atout indéniable pour établir, ou du moins suggérer, la stratégie future des systèmes d'information de nos clients (ouais je me la pète un peu, mais réfléchissez-y, et quelle que soit votre échelle de décision et/ou d'influence, ne sommes-nous pas tous influenceurs quelque part ?). Vous pouvez en penser ce que vous voulez, mais je pense que cela fait parti intégrante de notre valeur, et plus encore, de notre devoir.

Un slide de la Lotusphere: amazing levels of growth worldwide
Voyez, je vous ai pas menti, +30%, c'est marqué à droite sur le slide

Comme a pu le dire Smicky chez Julien (commentaire #4 -- Julien, à quand des permalinks sur tes commentaires ?), la Lotusphere, ça rebooste la motivation. Sortez un peu le nez de vos lignes de code LotusScript qui n'en finissent pas, et regardez un peu ce qui se profile autour de vous. L'avenir de la gamme Lotus n'est pas terne, loin de là. Les produits Lotus ne sont pas morts, comme on peut lire fréquemment dans les magazines de "décideurs". Le tour de force qu'est en train de réaliser IBM est magistral ; réussir à ramener sa gamme de produits existants du siècle dernier au siècle courant, tout en proposant en parallèle des produits réellement innovants (Lotus Connections, Lotus Quickr), c'est tout simplement énorme. Même Fred Cavazza en parle, c'est vous dire. Sincèrement, à l'issue de cette Lotusphere 2007, il n'y a aucune raison d'être pessimiste. J'espère que l'avenir des produits Lotus sera radieux, car ils le méritent. Je laisse la place aux marketeux d'IBM pour concrétiser cela (encore que, je ne suis pas tout à fait sûr que ce soit une bonne idée. J'ai comme un goût amer en bouche, un goût qui étrangement me rappelle Workplace).

Enfin, la Lotusphere, c'est aussi l'occasion d'aller s'éclater une soirée durant dans un des parcs DisneyWorld (où la témérité des français à l'Expedition Everest n'est désormais plus à prouver), et aussi de boire plein de bières -- le seul alcool proposé en flot continu durant ces 5 jours. De la bud light. De la Heineken Light. De la Corona. La quintessence de la bière excécrable, en somme. (Si quelqu'un d'IBM me lit, sachez qu'il y a un message subliminal dans cette phrase).

Conclusion sur l'événement

Il y a pas mal de choses que j'ai passé sous silence, comme les Hands-on sessions au cours desquelles on a la possibilité de s'exercer sur un logiciel via un cas d'école, ou encore la possibilité de préparer et passer ses certifications sur place. Comme je l'ai dit en guise d'introduction, il y a bien plus de choses à faire à la Lotusphere que de temps accordé. J'espère vous avoir donné un aperçu objectif de ce qu'est la Lotusphere pour vous permettre de mesurer la portée cette phrase. Et pour faire écho aux propos de Julien (commentaire #6), non, bien sûr, le passage par la Lotusphere n'est pas obligatoire pour mener correctement sa boutique dans le monde IBM. N'empêche, si on en a la possibilité, ça serait vraiment dommage de s'en priver. Bien que ce soit peu probable, j'espère pour ma part avoir l'occasion d'y retourner l'année prochaine. Le détail des nouveautés annoncées dans le prochain billet.

lundi 12 février 2007

Masques publics et champs partagés, l'idylle impossible

Je ne sais pas si ce problème est particulièrement connu, n'empêche, il vient de me faire perdre pas mal de temps : à partir du moment où l'on pose un champ partagé sur un masque public, ce dernier se comporte comme un masque tout à fait classique classique (comprendre : non public). La solution ? bidouiller pour ajouter des champs $PublicAccess aux champs partagés, ou.. ne pas en utiliser, à défaut d'une meilleure idée ?

Un masque 'flip flap la girafe' et un champ partagé 'hélicoptère'

PS : A noter que dans un contexte similaire, les sous-masques ne posent aucun problème.

mardi 23 janvier 2007

The new web feature of Domino 8

How a scandalmonger could I be. Remember when I said that there were no web improvement in Domino 8 ? Actually, there is one* : the ability to output natively a view in JSON instead of XML (DXL) with the OutputFormat=JSON URL parameter (edit: Oh, and DB2 Query views too, sorry to have forgotten to mention it).

* : At least, one interesting, among 4 or 5 new "hacks" (I honestly can't say "feature").

vendredi 22 décembre 2006

Participation à la Lotusphere 2007

Ce n'était pas tout à fait prévu au programme, mais cela s'est confirmé il y a deux jours : je participerai fin janvier à la Lotusphere 2007 ! Pour ceux qui ne connaissent pas, il s'agit de la grande messe annuelle d'IBM sur les produits Lotus. Cela dure 5 jours et ça se passe à Orlando, en Floride. Le programme s'annonce fort sympathique et il va me falloir l'étudier de près pour choisir judicieusement les sessions (tout comme pour la Collaboration University).

Je n'ai jamais assisté à un événement d'une telle envergure, ni mis les pieds aux Etats-unis, ni même fait plus d'1h30 d'avion. C'est assez excitant, et un tout petit peu angoissant, aussi. Comme je n'avais pas de passeport, j'ai couru un peu partout hier pour réunir en vitesse les papiers requis (avec un aller-retour au Havre dans la foulée pour récupérer mon acte de naissance). Au final j'ai réussi à boucler le tout en une journée (heureusement que la mairie du XVeme ferme à 19h30 le jeudi soir), ce qui fait que je devrais avoir mon passeport aux alentours du 10 janvier (ça aurait été dommage de ne pouvoir y aller faute de passeport, non ?).

Sinon, je m'absente les 15 prochains jours pour passer les fêtes en famille puis entre amis. Passez de bonnes fêtes de votre coté et n'oubliez pas d'abuser des bonnes choses. A bientôt.

jeudi 14 décembre 2006

Collaboration University 2006 at London : Day 2

Ce billet fait suite au bilan de la première journée de la Collaboration University 2006 publié il y a... ahum... à peu près 3 mois. Oui, vous pouvez vous moquer, n'empêche, je m'étais promis de faire le bilan de la seconde journée ; et bien le voilà (vous remercierez Nintendo qui a omit de me livrer ma Wii ce soir). Les choses ne sont plus tout aussi fraîches qu'à l'époque alors ce compte-rendu est un peu plus vague et évasif que le premier, mais je pense que l'essentiel y est. Bref. Revenons sur cette journée du 28 septembre 2006 (note : sa rédaction a commencé le soir même, d'où une temporalité un peu étrange par moment).

Cette journée s'est très bien passée, mieux que la première. Je me suis senti nettement plus à l'aise avec l'anglais, tant à l'écoute des conférenciers qu'à la prise de parole. On prend assez vite le pli, finalement. C'est assez inattendu vu, j'avais pas mal d'appréhensions à ce sujet et j'en suis le premier surpris. Aujourd'hui, deux jours plus tard, on ne me comprend pas toujours du premier coup, mais les mots viennent beaucoup plus facilement et j'arrive à tenir des conversations presque cohérentes, même après une ou deux Guinness. Sur le plan personnel, c'est donc un bilan tout à fait positif (l'anglais, pas la bière).

Les sessions également se sont mieux passées. J'étais assez remonté à l'issue de la première journée, mais avec du recul je me suis rendu compte que je n'avais pas fait la part des choses entre la technologie présentée et la façon dont certains conférenciers l'ont implémenté. C'est un travers dans lequel on peut tomber facilement (blâmer les jeux-vidéo parce que certains se croient dans GTA avec leur 205 GTI, blâmer le metal parce que certains dérangés y trouvent refuge), et j'aurais probablement dû nuancer un peu plus mes propos (que j'ai conservé tels quels, puisque publiés le lendemain, pour des raisons d'authenticité et d'éthique du journalisme total). Je ne peux pas blâmer Quickplace parce qu'un développement qui a été fait dessus est une passoire. Bref, fort de ces réflexions, j'ai abordé cette seconde journée avec un meilleur état d'esprit.

Passons donc à la première session de cette journée.

QP301 : Developing Quickplace placebots with LS and Java

Suite logique de la session sur le développement de formulaires HTML pour Quickplace : la présentation des placebots. Les placebots sont tout bêtement des agents Domino, dans le contexte de Quickplace. A l'instar du reste, on les déploie en passant par l'interface d'administration dédiée de Quickplace, en fournissant un fichier .lss pour un placebot LotusScript, ou .java pour un placebot Java. Quickplace se charge en amont de créer un vrai agent dans la base Domino. S'il y a un problème à la compilation, le placebot n'est pas créé/mis à jour.

Malheureusement, avec les placebots, il n'est pas possible d'utiliser de librairie de scripts, ce qui est fort dommage. Vous me direz, on pourrait envisager d'aller directement éditer la base Domino sous-jacente avec Lotus Designer, mais c'est quelque chose de déconseillé, car bien que le système soit du Domino derrière, Quickplace à son propre moteur et sa propre façon de fonctionner et de gérer ses bases. Sachant que le paradigme du logiciel est que les utilisateurs aient la main sur les applications et que c'est hors de contrôle des administrateurs, ce conseil semble plutôt pertinent.

Les placebots ont deux façons de fonctionner : soit schedulés (tout comme les agents Domino), soit à l'enregistrement d'un formulaire Quickplace (apparemment ce n'est pas du WebQuerySave derrière, alors attention). Je n'ai pas vérifié, mais Troy a indiqué qu'il ne peut y avoir qu'un placebot par formulaire (puisque je lui avais demandé dans quel ordre ils sont exécutés s'il y en a plusieurs par formulaire).

Coté programmation proprement dite, c'est l'API de Domino qu'il y a derrière, donc on manipule des NotesSession, NotesDatabase, NotesView, NotesDocument, etc. Il faut donc malgré tout connaître la structure des bases Quickplace pour coder des placebots (ne serait-ce que pour connaitre le nom des vues, ou des champs des documents).

Petit retour d'expérience de (Snapps), il semble parfois plus intéressant de coder des agents dans des bases Domino externes à Quickplace, plutôt que les placesbots. Pour des histoires de signature des agents sous-jacents (qui ne peuvent pas forcément avoir accès à tout), ou bien de multiplication des placebots. N'ayant aucune expérience là dessus, je ne peux que leur faire confiance. C'est à peu près tout pour ce qui concerne cette session.

ST401 : Sametime alternate client choices, functions and integration

Cette session, menée à Carl Tyler, avait pour objectif de présenter l'ensemble des clients Sametime disponibles et leurs fonctionnalités. En substance, il y a :

  • Sametime Connect 7.0 et inférieur (le client lourd traditionnel),
  • Sametime Connect 7.5 (le nouveau client lourd super extensible basé sur Eclipse),
  • Sametime Java Connect (l'applet Java dans le browser). En ce qui le concerne, c'est confirmé, il a bien été retiré de Sametime 7.5, donc pour l'utiliser, il faut le reprendre de Sametime 7.0 ou 6.5.
  • les liens Sametime (ST Links) qui ont été évoqués dans la première journée et relatés ici même,
  • NotesIM (client intégré au client Lotus Notes).
  • Les clients mobiles qui devraient être disponibles prochainement.

Voilà pour les clients IBM officiels. Mais il y en a d'autres, un peu moins officiels :

  • Plugin pour Trillian pro, disponible sur alphaworks
  • Plugin pour GAIM (meanwhile)
  • Adium (pour Mac)
  • NotesBuddy (un client Sametime et de messagerie Notes assez laid qui a connu pas mal de succès en interne chez IBM)

Forcément, ces clients moins officiels ne supportent pas toutes les fonctionnalités des client IBM, comme le partage d'écran ou la voix/video. Coté "chat" on retrouvera également des manques : le support des groupes publics (stockés sur le serveur), par exemple.

La société de Carl Tyler (IMInstant) a développé 2 clients très intéressants : le premier s'intégrant dans Outlook, le second dans Office. Le plus de ces clients est qu'ils sont contextuels aux données et meta-données des documents Office et d'Outlook. Malheureusement, ils s'intègrent assez mal aux logiciels (en fenêtre volante à coté) et ne sont à ce jour plus développés depuis quelques temps puisqu'IBM est sur le point de fournir ses propres clients faisant la même chose, et forcément, en beaucoup mieux (et probablement plus cher, aussi).

A noter que coté intégration dans WPS, rien de nouveau à l'horizon non plus avec Sametime 7.5, et même dans WPS 6.0 (sorti en juillet dernier). On devra donc faire avec le portlet un peu bancal que l'on connait déjà (sur la base d'une applet Java).

ST303 : Supporting Sametime in the Entreprise : top 10 tips for support

Alors là, je vais avoir beaucoup moins de choses à dire. Il s'agissait de 10 problèmes fréquents lorsqu'on souhaite déployer Sametime 7.5 en entreprise. Je ne vais pas les énumérer un par un, ça a parlé de ports, de règles de sécurité, de configuration, etc. Enfin si, je vais en citer un car il me paraît très important (et surtout, j'ai été confronté à cette situation quelques jours avant de partir) : avant d'installer Sametime 7.5 sur la base d'un Domino 7.0 (ou plus), s'assurer d'avoir spécifié un FQHN correct dans le document serveur de Domino, dans l'onglet "Basic" (au champ FQHN), mais surtout dans l'onglet "Ports". J'entends par FQHN correct l'entrée DNS qui va correspondre au serveur sametime (par exemple chat.mycorp.com), et pas l'adresse IP ou l'entrée DNS physique de la machine (qui est la valeur prise par défaut à l'installation de Domino pour l'onglet "Ports").

QP302 : Supporting Quickplace in the Entreprise : top 10 tips for support

Même chose, mais pour Quickplace. Les sujets évoqués ont été le super user (celui défini dans le fichier qpconfig.xml), des commandes non documentées (?Opendatabase&PlaceSecurity pour un résumé de la sécurité des rooms, ?Opendatabase&ResetTheme pour réinitialiser le thème installé), de problèmes d'upload des ressources, de support des fichiers MS Office, de réparation de documents bloqués à l'état brouillon, etc. Pour évoquer un point traité, tout comme il est déconseillé d'éditer des bases Quickplace à la main, il est tout aussi peu recommandé d'y exécuter l'administration process (adminp). Pourtant, on peut avoir besoin d'effectuer des modifications dans les données existantes, en cas de renommage d'un utilisateur, ou autre. Dans ce cas, la commande qptool.exe est préconisée et dispose de nombreuses fonctionnalités à cet effet.

A l'instar de la session précédente, très intéressant. Des conseils et retours d'expérience particulièrement bons à prendre.

IS300 : Infrastructure products and consideration for Sametime and Quickplace

Alors là, on est passé au niveau supérieur. C'était ma première conférence orientée infrastructure et systèmes, je n'avais donc pas encore eu l'occasion de rencontrer Chris Miller. Essayez d'imaginer le général de Full Metal Jacket avec une coupe à la brosse et qui parle à vitesse grand V de sécurité et d'architecture des systèmes IBM. Vous avez une image assez précise du personnage. Impressionnant. Tant par son niveau technique que par la discipline quasi-militaire qu'il instaure dans ses sessions.

Cette session faisait suite à sa première à laquelle je n'ai pas assisté : "IS200 Understanding LDAP and Directory services". Ce qui est dommage, car je suis actuellement en plein dans ce sujet et je ne le maîtrise par ailleurs pas très bien. Mais il y avait en parallèle l'installation et la configuration de Quickplace qui était prioritaire. Donc pour être honnête, j'y ai assisté, j'y ai pris des notes, mais je n'ai pas forcément tout assimilé.

Dans les grandes lignes, Chris a évoqué les problèmes potentiels avec l'utilisation d'un annuaire LDAP et de Sametime, ceux plus spécifiques à AD, la mise en place de DA avec AD, les règles à envisager sur un firewall quand on met un serveur Sametime en DMZ, les clusters Quickplace, la mise en place de proxies et de reverse proxies, avec par dessus le tout SSL, etc. Bref, dense et assez complexe. On est loin des 3 lignes de javascript pour masquer un lien.

Franchement très intéressant, mais mes connaissances actuelles en la matière ni mon niveau d'anglais ne m'ont pas permis d'en profiter pleinement. Je conserve précieusement les slides et mes notes pour des références futures.

QP800 : Sneak peek at Quickplace 8.0

Pour clôturer cette seconde journée, Marc Pagnier, Senior Product Manager des produits collaboratifs d'IBM, est venu nous présenter l'avancement d'IBM sur Quickplace 8.0, que Ken Bisconti avait rapidement évoqué à l'ouverture de la première journée. La première partie de sa session a consisté à faire le point sur Quickplace 7.0, la place qu'il occupe dans la stratégie d'IBM pour la collaboration, les avancées entre la 6.5.1 et la 7.0, etc.

La seconde partie était celle que nous attendions tous : QP 8.0. Voici un résumé des points clés du produit, qui devrait débarquer en même temps qu'Hannover (puisque basé sur Domino 8.0) :

  • Interface moderne (AJAX, drag'n drop, etc) basée sur Dojo toolkit
  • Gestion native des fils RSS et Atom
  • Administration des places simplifiée (menus contextuels, click droit, etc)
  • Support de l'ODF
  • Intégration à Windows et MS Office
  • Intégration à Lotus Notes et Sametime 7.5

Ces deux derniers points sont particulièrement intéressants et reflètent assez bien la direction prise par IBM : le concept clé est d'amener l'information et la donnée à l'utilisateur et de les intégrer dans ses outils de travail quotidiens (démarche passive), plutôt que de lui imposer l'utilisation d'un énième nouvel outil (démarche active) dont on est à peu près certain qu'il ne sera jamais utilisé. Ont donc été montrés l'accès direct aux fichiers de places depuis l'explorateur Windows (j'imagine que c'est du webdav derrière), depuis Word et Excel, depuis Sametime, depuis Outlook, depuis Lotus Notes, etc, le tout toujours lié au contexte : dans Outlook, les fichiers présentés étaient ceux partagés avec la personne qui venait d'envoyer un mail, dans Sametime, les documents partagés avec la personne en cours de chat, etc. Rajoutez une couche de Sametime par dessus le tout, dans lequel vous pouvez joindre vos collègues directement depuis Office, Outlook ou encore Quickplace, et vous obtenez un ensemble très cohérent et, j'imagine, franchement efficace.

Ces fonctionnalités sont vraiment excitantes, surtout que pour de l'IBM, il ne semble pas nécessaire d'adhérer à l'ensemble de leur gamme de produits pour pouvoir en bénéficier (et non, le monde n'est pas fait que de gens dotés de Notes / DB2 / Websphere / Tivoli, ce qu'IBM semble parfois oublier), et c'est là un point majeur qui, a mon avis, participera grandement au succès comme à l'adhésion du produit.

Conclusion

Ainsi s'achève cette Collaboration University 2006. J'ai été particulièrement sec dans mes propos à l'issue de la première journée, ce qui est un peu injuste - il me faut bien l'admettre aujourd'hui - car ces produits, bien qu'ils ne soient pas parfaits, ont de grandes qualités et rendent de fiers services en entreprise. Et tant pis si les implémentations techniques ou les moyens mis à la disposition des développeurs sont parfois discutables (oui, c'est un pragmatisme qui me fait souvent défaut). Quoiqu'il en soit, le duo Sametime 7.5 / Quickplace 8.0 s'annonce passionnant. Verdict dans quelques mois.

Quant à la Collaboration University a proprement parler, rien à dire, l'organisation a été très efficace, l'accueil exemplaire, les sessions pour la grande majorité intéressantes (dommage toutefois qu'il y ait eu les sessions "phares" en parallèle), bref, chapeau bas. J'avais assez peu d'expérience avec Quickplace et Sametime avant d'y aller, et je suis reparti avec une idée précise de chacun des produits, des possibilités comme des limites, des choses à faire, à ne pas faire, etc. C'est là l'avantage d'avoir en face de soit des orateurs expérimentés et dont c'est le métier. Alors oui, c'était cher. Mais ça valait le prix, vraiment (surtout que c'est pas moi qui ait payé).

Précédent : Compte rendu de la première journée