Month: July 2008

Campagne pour l’arrêt de l’utilisation d’IE 6

Posted by – July 29, 2008

Sauvons les développeurs en proposant aux internautes des alternatives :

ou sinon, un peu plus extrême (quoique…je suis assez favorable au sacrifice d’une frange d’utilisateurs pour le bien du plus grand nombre et surtout pour l’innovation d’un système), par le créateur de RoR : http://37signals.blogs.com/products…

Vu sur http://www.infoq.com/news/2008/07/i… et http://www.cynicalturtle.net/kame/i…

Anecdote: je me souviens lors d’une réunion qu’un ponte m’avait soutenu qu’il fallait s’assurer de la bonne compatibilité avec les utilisateurs d’Internet Explorer…5.0…no comment, quand le legacy en devient grotesque.

Links #7 : migration et schéma de bases de données

Posted by – July 29, 2008

“C’est pas compliqué”…l’informatique…programmateur II le retour

Posted by – July 28, 2008

A peine le déjeuner digéré, voilà que nous recevons une remarque de la part d’une utilisatrice (sur 20 000), concernant notre newsletter hebdomadaire, dont les propos nous ont passablement fait sourire ou agacer selon, même si elle peut paraitre cohérente et légitime…la remarque de son point de vue :

(…) Je pense qu’il ne devrait pas être compliqué pour un informaticien de créer un champ “lieu” ou je ne sais quoi (…)

au sujet d’évènements internationaux saisis et pushés vers la newsletter. Mots que j’aime bien : ne devrait pas être compliqué et informaticien (ie : homme à tout faire : changer une imprimante, faire un site Oueb, …)

Seulement voilà, dans la newsletter il n’y a pas que des évènements internationaux (qui représentent 10 % des ressources disponibles), mais il y a aussi des documents, des liens, des ressources spécifiques (ie : avec leurs champs propres, ça peut être un commentaire, un champ texte lambda, …), car les ressources sont produites grâce à un moteur qui se base sur un modèle (XML, méta-données) de ressource à saisir et à lire. Autrement dit, les champs ne sont pas typés sémantiquement, il n’y a pas un champ nom, libellé, etc…ce qui rend souple et rapide la production de formulaire de saisie pour des bases spécifiques. Mon collègue a tenté de lui faire comprendre la généralisation d’une application (qui doit profiter au plus grand nombre), pas simple.

Comme tout moteur, librairie ou framework, cela rentre dans un cadre, qui tente de généraliser des comportements, les cas spécifiques sont en général non traités (un gros if en plein milieu d’un code pour traiter un cas reste à proscrire), à moins de généraliser ces derniers.

L’informatique s’est généralisée dans les foyers et au travail, sa démocratisation amène aussi ce genre de remarque qui tue (qu’il ne devrait pas être compliqué pour un informaticien) et qui, pour moi dénigre le métier et le relaye au statut d’ouvrier du code : fantasme et surtout espoir de nos têtes pensantes d’appuyer sur un gros bouton rouge pour générer du code à partir de spécifications, après tout, ce qui est important, c’est le concept, l’idée, pas la mise en oeuvre diront certains ;-)

Il reste encore du chemin à parcourir pour expliquer la complexité pour réaliser un logiciel. On pourrait déjà interdire Access, qui laisse croire à tout un chacun qu’il peut développer sa (super) application, voire Frontpage, qui permet à son beau-frère ou son cousin de faire son site Oueb dans le métro…l’informatique, tout compte fait, c’est pas si compliqué, comme quoi.

Sur ce, allons passer le clavier à la dame qu’elle nous montre comment on fait, elle entre dans le top 10 de nos quotes.

Ma femme va m’appeler “mon lapin” : Nabaztag

Posted by – July 22, 2008

Dans la série je n’ai pas d’amis et quitte à ne pas me faire comprendre par ma femme, ma prochaine idée de cadeau :

Nabaztag

Avec tous ces liens, ça donne des idées :

Bon, sur ce, je vais tenter d’expliquer ça à ma douce.

Mise en place de Subversion sous Windows, VSS to SVN

Posted by – July 22, 2008

Préambule

Intéressons nous à Subversion ou SVN pour les intimes. Cela faisait pas mal de temps que l’idée me trottait de remplacer l’antédiluvien VSS que nous utilisons depuis quelques années pour gérer nos sources par un SCM un peu plus moderne, Opensource et utilisé par un plus grand nombre de développeurs (communauté quand tu nous tiens). Un lien sur les différences entre plusieurs solutions SCM.

La solution optimale aurait été un serveur SVN sous Linux (dans une autre vie, j’aurais sans doute exploité mes compétences Système et Réseau), mais l’ensemble de l’équipe est plus à l’aise sous Windows, adopter un nouvel outil passe aussi et d’abord par sa facilité d’appropriation, cela imposait donc une solution SVN sous Windows.

La partie installation est un condensé d’articles trouvés sur le Net, les liens sont dans les ressources en fin de billet.

Installation

serveur Subversion

Subversion

Télécharger les binaires du serveur SVN Windows (un zip), prendre la version Tigris pour Apache 2.0 (ou 2.2 selon votre choix) : Subversion tigris Windows

version 1.5.0 SVN pour Apache 2.0

version 1.5.0 SVN pour Apache 2.2

Télécharger le binaire pour l’installation du service SVNService : SVNService (on peut également le retrouver sur le site de tigris : Repository SVNService)

  • Décompacter le ZIP du serveur SVN (svn-win32-x.y.zip) dans le répertoire C:\\Program Files\\svn\\
  • Dans les variables d’environnement (Control Panel → System → Advanced → Environnement variables → System variables)

⇒ Ajouter le chemin C:\\Program Files\\svn\\bin dans le PATH.

⇒ Ajouter la variable SVN_EDITOR (éditeur par défaut utilisé par SVN), faire pointer sur l’exé notepad.exe ou tout autre éditeur

  • si non déjà créé, en ligne de commande, création d’un répertoire de repository

svnadmin create “d:\\subversion_repos”

  • si non déjà configuré, configuration du repository :

⇒ ouvrir le fichier d:\\subversion_repos\\conf\\svnserve.conf : décommenter les lignes [general] , anon-access = read, auth-access = write, et password-db = passwd

⇒ ouvrir le fichier d:\\subversion_repos\\conf\\passwd : décommenter la ligne [users], et ajouter les utilisateurs SVN, 1 par ligne, de la façon suivante : login = passe

  • tester le serveur, lancer en ligne de commande

svnserve –daemon –root “d:\\subversion_repos”

  • créer un projet, pour myproject avec les 3 répertoires couramment ajoutés (trunk, branches, tags). SVN ouvre un fichier, remplir ou non la 1ère ligne puis sauvegarder :

svn mkdir svn://localhost/myproject

svn mkdir svn://localhost/myproject/trunk

svn mkdir svn://localhost/myproject/branches

svn mkdir svn://localhost/myproject/tags

Service Subversion

Le service permet de ne pas lancer à la main le serveur SVN (svnserve) mais qu’il le soit par un service Windows en y incluant les paramètres –-daemon –-root “d:\\subversion_repos”

  • Décompacter SVNService.zip dans le même répertoire que les binaires SVN (C:\\Program Files\\svn\\bin) pour avoir accès en ligne de commande à l’exé SVNService.exe.
  • Installer le service :

svnservice.exe -install –daemon –root “d:\\subversion_repos”

  • Mettre le service en démarrage automatique : $ services.msc, puis sur le service SVNService, positionner le Startup type à Automatique.
  • Lancer ou arrêter le service :

net start svnservice

net stop svnservice

A partir de là, le serveur est joignable :

svn ls svn://localhost/myproject/trunk

Pour enlever le service :

svnservice.exe -remove

serveur Apache pour l’accès HTTP

Le serveur SVN fournit un protocole d’accès svn, il peut être intéressant d’accéder aux sources par HTTP (via WebDAV), pour un accès à distance par exemple : soit par le navigateur, soit par un client SVN.

Pré-requis : Le serveur SVN doit être préalablement installé.

  • Télécharger les binaires Windows d’Apache 2.0 (ou 2.2 suivant la version SVN), avec SSL : Binaires
  • Installer Apache, par exemple sur D:\\Program Files\\Apache Group
  • Comme pour Subversion, ajouter le répertoire binaire D:\\Program Files\\Apache Group\\Apache2\\bin au PATH
  • Copier / Coller les .so de Subversion vers le répertoire modules d’Apache :

⇒ C:\\Program Files\\svn\\bin\\mod_authz_svn.so et C:\\Program Files\\svn\\bin\\mod_dav_svn.so vers D:\\Program Files\\Apache Group\\Apache2\\modules

  • Ajouter leur chargement en modifiant le fichier de configuration d’Apache D:\\Program Files\\Apache Group\\Apache2\\conf\\httpd.conf

⇒ décommenter la ligne LoadModule dav_module modules/mod_dav.so pour activer WebDAV

⇒ ajouter la ligne LoadModule dav_svn_module modules/mod_dav_svn.so

⇒ ajouter la ligne LoadModule authz_svn_module modules/mod_authz_svn.so

  • Toujours dans le fichier D:\\Program Files\\Apache Group\\Apache2\\conf\\httpd.conf, ajouter le répertoire d’accès Web au Repository Subversion, cela permettra d’avoir un accès à http://localhost/svnrepos :
 <Location /svnrepos>  DAV svn # répertoire de dépot  SVNPath D:/subversion_repos  SVNIndexXSLT "/svnindex.xsl"  SVNAutoversioning on # Indique comment authentifier les utilisateurs  AuthType Basic  AuthName "Référentiel Subversion" # fichiers des utilisateurs  AuthUserFile D:\\subversion_repos\\conf\\utilisateurs.txt  Require valid-user # fichiers des permissions  AuthzSVNAccessFile D:\\subversion_repos\\conf\\authz  ErrorDocument 404 default </Location> 
  • Télécharger la feuille XSLT svnindex.xsl sur XSLT ainsi que la feuille CSS svnindex.css et placer ces 2 fichiers dans le htdocs d’Apache : D:\\Program Files\\Apache Group\\Apache2\\htdocs
  • Créer les permissions utilisateurs (groupe dev qui accéderont au répertoire web svnrepos) : ouvrir ou créer le fichier D:\\subversion_repos\\conf\\authz, et y ajouter les lignes suivantes :
 [groups] dev = olivier,dev2,dev3 [svnrepos:/] @dev = rw * = [svnrepos:/html] @dev = rw * = [svnrepos:/src] @dev = rw * = [svnrepos:/changelog] @dev = rw * = r 
  • Ajouter les comptes utilisateurs Apache, en ligne de commande, se mettre dans le répertoire Subversion conf (-bc crée le fichier, -bm ajoute au fichier) :
 d: cd D:\\subversion_repos\\conf htpasswd -bc utilisateurs.txt olivier monpasse htpasswd -bm utilisateurs.txt dev2 monautrepasse htpasswd -bm utilisateurs.txt dev3 myanotherpwd 

Relancer le service Apache :

net stop apache2

net start apache2

Le repository est dorénavant accessible via l’adresse http://localhost/svnrepos ou http://serveur/svnrepos, une popup login/mot de passe doit s’afficher pour taper le login et mot de passe précédemment fixé par htpasswd

Migration de la base VSS vers SVN

Pour l’instant, nous en sommes au stade des tests.

Un outils a été développé : VSSMigrate. Il est préférable de prendre une des contributions, celles-ci permettent de conserver les utilisateurs de la base VSS pour les migrer vers SVN.

Un exemple de fichier de configuration VSSMigrate.ini.

Plusieurs soucis relevés :

  • VSSMigrate n’autorise pas de prendre la racine de VSS (/$) mais uniquement un projet sur la racine (/$myproject). Notre plateforme est constituée d’une bonne centaines de projets, il va falloir donc automatiser la prise en compte de tous ces projets.
  • Pour conserver l’historique (en termes de dates), VSSMigrate change la date système du serveur VSS, mais apparemment, il ajoute et non retranche les dates sur les sources, à voir donc.

Ressources

Je suis parti des liens suivants :

Alternatives

Pour des projets Opensource où le code peut être libre, il peut être intéressant d’utiliser des services en ligne pour gérer ses projets, une petite liste non exhaustive de services …et j’adore les services en ligne.

Plateforme GitHUB

GitHub, basé sur Git (créé par Linus pour gérer le noyau Linux, c’est un SCM distribué), parait être un sérieux concurrent à la plateforme Google code, cette dernière utilise Subversion. git-svn pourrait être un pont entre les 2 mondes. Dans sa version gratuite, GitHUB permet d’héberger jusqu’à 100 Mo de sources.

La plateforme GitHUB est conviviale et facile d’utilisation, avec des apports Aajx qui vous facilitent la vie, le tout avec une approche Web 2 : Wiki, réseau, graphique de la time line avec les auteurs des commits, design soigné.

Un plus : utilisation de clés publiques/privées SSH (via ssh-keygen ou PuTTYGen + Pageant, voir ce billet pour un exemple d’utilisation pour PuTTY), bien utile dans la pratique.

En ce qui concerne les clients Windows, pour avoir testé le client msysGit, il y a encore un peu de boulot pour concurrencer TortoiseSVN.

Malgré tout, sur le répertoire de travail, les 2 commandes suivantes permettent de commiter sur GitHUB :

git commit -a

git push

Plateforme Google Code

Google code vous permettra d’héberger vos projets à moindre coût (gratuit). A l’image de Google, l’interface est sobre et efficace, très simple à utiliser. Parmi les fonctionnalités :

  • Subversion : public ou privé pour les éditeurs (une clé est générée en tant que mot de passe au projet)
  • Wiki
  • Dépôt de fichiers

Moins user friendly que GitHUB, Google code reste accessible et surtout gratuit sans limite de stockage des sources.

Plateforme CodePlex

CodePlex est la plateforme Microsoft de partage de sources.

Mis à part trouver des sources de projets, je n’ai pas testé la plateforme en tant qu’éditeur, mais je ne doute pas que cela doit être bien, malgré une interface quelque peu désuète je trouve.

SvnBridge permet d’aller chercher des sources via TortoiseSVN, il sert de pont entre SVN et Codeplex.

Clients SVN

  • TortoiseSVN est LE client Windows à avoir : simple d’utilisation, fiable, quelques principes :
    • SVN checkout : ramène les sources d’un projet pour initialiser un répertoire de travail local
    • Commit : met à jour le serveur de sources avec les fichiers locaux (du répertoire de travail) modifiés
    • Update : va chercher les mises à jour du serveur pour mettre à jour la version locale
  • pour une intégration directe à l’IDE (VStudio 2005 ou 2008), on pourra également installer AnkhSVN

Links #6 : Collections

Posted by – July 20, 2008

  • Performance des ArrayList et des listes génériques : ArrayList, List<T>. Il est préférable d’utiliser les List<T>, le boxing/unboxing coûte cher (multiples recopies). Au-delà de ça, je préfère les listes typées, cela évite des casts à n’en plus finir et les erreurs de typages que cela peut induire.
  • Set (HashSet en .NET) : le type de collection oubliée, c’est maintenance corrigé dans la 3.5 de .NET. Ce type de collection avait été prise en compte dans NHibernate grâce à la librairie Iesi.Collections. HashSet permet – notamment – des opérations mathématiques de type union, intersection, différence, et lors de l’ajout d’un élément déjà existant, il n’ y aura pas d’exception levée (a contrario de la Hashtable) mais retournera false. HashSet implémente tout ou partie des fonctionnalités de Iesi.

Links #5 : POO et bonnes pratiques

Posted by – July 16, 2008

NHibernate, héritage et design patterns

Posted by – July 14, 2008

Dans le billet Architecture n-tiers, 2/3 nous avions vu un modèle d’architecture Web pour les applications ASP.NET. Le billet illustrait le sujet sous forme d’une démo avec une application pour gérer des livres (j’aime bien lire…).

Maintenant, j’aimerais en plus de gérer des livres, ajouter des Cds (de musique) (ou des Dvd, DivX, …) à ma bibliothèque. Ce billet propose de gérer cela à l’aide de l’ORM NHibernate (version 2) et d’ASP.NET avec quelques motifs de conception (design patterns).

More

Wordle : créer de très sympas nuages de tags

Posted by – July 12, 2008

Je viens de découvrir ce drôle de site qui permet à partir d’un URL, d’un flux ou de delicious de créer des nuages de tags plutôt réussis.

Cela donne :

Tag1

Tag2

Tag3

La galerie du ZorkYy.

Architecture Web n-tiers, 2/3

Posted by – July 9, 2008

Préambule

Suite du billet Introduction à l’architecture Web n-tiers.

L’objectif est de développer une petite application Web pour gérer des livres : affichage, ajout et suppression.

More