Month: March 2008

Solution de secours…

Posted by – March 27, 2008

Déménagement oblige, j’ai dû transporter mon petit serveur ailleurs que chez moi.

Tout fonctionne SAUF le principal : le blog…apparemment le moteur Typo n’aime plus le nouveau réseau, avec du NAT (IP publique vers IP privée) + reverse proxy Apache en frontal, cela fait cracher le site, et ce, malgré avoir testé avec plusieurs serveurs Web (lightTPD + Fastcgi, mongrel, …). Les logs étant peu parlants, dur de diagnostiquer pour corriger.

Conclusion : passage en urgence sous Dotclear 2 (vserver PHP prêt), avec les billets que j’avais importés en janvier.

Le temps de remettre les billets récents, et d’effectuer quelques redirections d’URLs.

Quelques règles sous Apache pour faire correspondre les liens permanents Typo avec Dotclear – bien évidemment, l’URL spécifique de chaque billet dotclear devra dans la mesure du possible correspondre au schéma Typo, à savoir : /YYYY/MM/DD/titre.

Cela correspond à des redirections temporaires (vers le domaine dotclear.olivier-duval.info que je basculerai ASAP dans sa forme initiale blog.olivier-duval.info), cela correspond au code 302. Les redirections sont effectuées pour les billets ou pour la sélection par tags.

   RewriteEngine On   RewriteCond %{HTTP_USER_AGENT} !FeedBurner   RewriteRule ^/$ http://dotclear.olivier-duval.info/ [R=302,L]   RewriteRule ^/articles/tag/(.+) http://dotclear.olivier-duval.info/dotclear/index.php?tag/$1 [R=302,L]   RewriteRule ^/articles/(.+) http://dotclear.olivier-duval.info/dotclear/index.php?post/$1 [R=302,L]   RewriteRule ^/xml/rss20/feed\\.xml$ http://feeds.feedburner.com/OlivierDuval [R=302,L]   RewriteRule ^/xml/atom/feed\\.xml$ http://feeds.feedburner.com/OlivierDuval [R=302,L] 

Le vserver PHP utilise un cache APC pour accélérer son accès.

Wait & See.

Sortie de SYMPA v5.4

Posted by – March 27, 2008

Après 10 mois de développement, SYMPA, LE serveur de listes vient de sortir dans sa version 5.4. Parmi les évolutions notables, on citera notamment :

  • la modification de la gestion de pas mal de variables jusqu’à présent stockées sous forme de cookies, ceci par l’intermédiaire de variables de sessions
  • l’apport de formulaires extensibles pour la gestion des abonnés : ajout de champs autres que Email, Nom. Ces champs sont gérés sous forme d’un modèle au format XML, stocké en base.
  • son lot de bug fix et de remaniements

SYMPA est un serveur de listes [écrire en Perl], Opensource, qui contrairement à Mailman, a une communauté très active (française ou anglophone) et évolue sans cesse.

More

.NET & cache local / distribué

Posted by – March 18, 2008

.NET 2.0 a introduit la capacité de créer des providers simplement, tout en gérant assez finement la configuration. Ces fournisseurs (ie : 1 fournisseur = 1 implémentation d’une interface / contrat) sont configurables par un fichier .config (XML), et chargeables dynamiquement selon les besoins du client, en y introduisant une abstraction. Un exemple sur le MSDN comme point de départ.

du côté client

On va tenter à partir des providers de créer 2 fournisseurs :

  • un cache local, basé sur le cache d’Asp.Net, ou bien sur le HttpRuntime dans le cas d’une assembly non contenue dans une application Web (cela permettra d’utiliser l’objet Cache hors d’une application Web, par exemple dans une assembly, une application console, …)
  • un cache distribué à l’aide de cette librairie, basé sur Memcached. Il en existe 2 autres, non testées, EnyimMemcached et BeIT Memcached, cette dernière me paraissant très prometteuse.

Ces fournisseurs seront accessibles par un helper (classe statique), celui-ci encapsulant l’implémentation souhaitée (cache distribué ou local).

Le but est d’avoir une utilisation simple de cette classe :

// par défaut le cache local CacheHelper.Add("cle","ma donnee",60000); string val= CacheHelper.Get("cle") as string;   // utilisation du cache ditribué CacheHelper.Strategy = "DistributedCacheProvider"; CacheHelper.Add("sharedkey","ma donnee a partager",60000); string val2 = CacheHelper.Get("sharedkey") as string;

Je suis parti de ce code auquel j’ai ajouté la notion de stratégie, et de cet excellent article sur les mystères de la configuration .NET.

Chaque fournisseur, que nous appellerons AspNetcachedProvider et MemcachedProvider implémentent la classe abstraite ci-après, qui elle-même hérite de ProviderBase :

public abstract class CacheProvider : ProviderBase {         public abstract long DefaultExpireTime { get;set;}         public abstract bool Add(string strKey, object objValue);         public abstract bool Add(string strKey, object objValue, bool bDefaultExpire);         public abstract bool Add(string strKey, object objValue, long lNumofMilliSeconds);         public abstract object Get(string strKey);         public abstract object Remove(string strKey); }

Les providers sont définis dans un fichier de configuration (web.config, app.config ou fichier externe avec l’attribut possible configSource sur la section)

A titre d’exemple, on pourra avoir :

<configuration>  <configSections>   <section name="cacheProvider" type="Caching.CacheProviderSection, Caching"             allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>  </configSections>    <cacheProvider defaultProvider="AspnetCacheProvider">   <providers>    <add name="AspnetCacheProvider" type="Caching.AspnetCacheProvider,Caching"/>    <add name="DistributedCacheProvider" type="Caching.MemcachedCacheProvider,Caching"     servers="10.75.92.10:11211" socketConnectTimeout="1000" socketTimeout="1000"/>   </providers>  </cacheProvider> </configuration>

Les fournisseurs sont instanciés lors de l’appel de CacheHelper. Cela permet de respecter le principe de Ouvert-Fermé. Ainsi, rien ne nous empêche d’avoir une autre implémentation pour le cache distribué, comme par exemple des données stockées par un serveur de bases de données ou bien une autre implémentation de Memcached (BeITMemcached). Il suffirait alors d’appeler cette implémentation au lieu de Memcached.

En conséquence, la configuration se transformerait en :

<configuration>  <configSections>   <section name="cacheProvider" type="CacheProvider.CacheProviderSection, CacheProvider"               allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>  </configSections>    <cacheProvider defaultProvider="AspnetCacheProvider">   <providers>    <add name="AspnetCacheProvider" type="Caching.AspnetCacheProvider,Caching"/>    <add name="DistributedCacheProvider" type="Caching.SqlCacheProvider,Caching"/>   </providers>  </cacheProvider> </configuration>

Découplé, souple, extensible, j’aime.

Quelques cas d’utilisation

Lorsqu’on utilise les pools d’applications, l’objet Cache n’est pas partagé entre les applications, le cache distribué est là le bienvenu.

Sur une plateforme avec des systèmes hétérogènes (Windows, Linux), partager des données entre plusieurs serveurs peut s’avérer utile, avoir un cache distribué est encore une fois bienvenue.

Enfin, on pourrait penser au besoin de partage d’objets entre une application (fenêtrée, service windows, …) et une application Web. Contraintes

Entre le cache local (utilisation de l’objet Cache) et Memcached, le comportement peut-être différent pour le stockage des objets. En effet, Cache permet de stocker n’importe quel objet, contrairement à Memcached qui nécessite que l’objet soit marqué de l’attribut Serializable, sans quoi la sérialisation échouera.

du côté serveur

serveur memcached 1.2.4 sur Debian

Le package Debian est trop ancien (1.1x), il est préférable de partir des sources : 1.2.4 installée, la 1.2.5 vient de sortir. Il est nécessaire d’avoir libevent (apt-get install libevent-dev).

Suivre ce tutoriel

monitoring

Un plugin est disponible pour Munin afin de monitorer le serveur Memcached, prendre le plugin de 2ème génération.

Cela permet d’avoir des graphes de ce type :

memcached monitoring

memcached monitoring

serveur Windows

Une version Windows est disponible, non testée.

Sources

Le zip Caching.zip contient 3 répertoires :

  • Caching : la librairie pour la gestion des 2 fournisseurs
  • memcacheddotnet : l’implémentation Memcached, API v 1.1.5 trouvée sur Sourceforge
  • Clients, scindé en CachingWebTest et CachingWinTest, 2 applications, Web et Winform qui utilisent le cache; en lançant les 2 en //, vous pourrez accéder à la même donnée partagée

Il suffit d’ouvrir la solution Caching.sln.

OpenID et myopenid, ou les multiples manières de se connecter

Posted by – March 11, 2008

OpenID est un système de Web-SSO, de plus en plus implémenté par les sites, et de grands acteurs (Google, MS, Yahoo, ..) ont récemment rejoint la fondation OpenID, ce qui fait de ce système un standard de fait.

J’utilise pour ma part comme fournisseur OpenID myOpenID (ma carte d’identité OpenID), qui fournit de multiples méthodes d’authentification, selon votre navigateur favori (FF, IE, Opéra, …).

authentification myopenid

  • par login et mot de passe : la 1ère méthode, la plus commune, mais pas la plus rapide
  • sous Firefox, grâce à un certificat : là, cela devient intéressant. J’ai créé 2 certificats utilisateurs, 1 pour la maison, 1 pour le travail. Ces derniers permettent de se passer du login et mot de passe (comme ce que l’on pourrait faire avec PuTTY-SSH), ce qui est très pratique, et surtout un gain de temps. Rien de plus simple, une fois logguer sous myopenid, Paramètres -> Paramètres d’authentification puis ajouter une certificat.

certificats myopenid

  • sous IE 7 (et avec .NET 3.0), myopenid permet de créer des cartes CardSpace qui peuvent s’assimiler à des certificats mais extensibles (schémas XML tel que SAML, ou OpenID) et un peu plus accessibles pour l’utilisateur.

cardspace myopenid

Tout ça donne envie d’utiliser et surtout d’implémenter OpenID sur les plateformes : standard, simple d’utilisation, pratique, tout ce que j’aime !

Une dernière chose, myopenid permet d’ajouter une photo sur la page d’accueil (stockée dans un cookie), ceci afin de réduire les tentatives de phishing, pas idiot !

myopenid anti-phishing

Des implémentations existent pour .NET, notamment Mads qui démontre par le code une implémentation, et en guise de bonus, une vidéo qui explique le principe d’OpenID.

Google Sync : Google Calendar Sync et Outlook

Posted by – March 6, 2008

Juste ce que j’étais en train de chercher : Google Calendar Sync
Plus qu’un EeePC 900, et cela sera parfait : blog, Google docs, GMail, …