De geek à directeur technique

Le blog d'un geek devenu directeur technique

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 31 mars 2010

Skriv : Partage de fichiers

(ce billet fait partie d'un ensemble consacré au projet Skriv)

Je suis en train de réfléchir à la meilleure manière de gérer le partage de fichiers dans un projet.

Moyens de stockage

Pour commencer, je veux faire en sorte que chaque projet puisse stocker ses fichiers sur un espace géré (et payé) par l'utilisateur. Cela pourrait être un serveur FTP, un serveur WebDAV ou un espace sur Amazon S3.
Comme déjà dit auparavant, cela permet d'offrir des fonctionnalités complètes, sans avoir à se mettre dans une relation client/fournisseur. La plupart des entreprises ont déjà un serveur FTP ou WebDAV. Et plutôt que de faire payer pour "sous-louer" un espace sur Amazon S3, avec des paliers tarifaires en fonction de forfaits d'espace disque, autant laisser les gens s'abonner par eux-même et payer en fonction de leur utilisation.

Toutefois, je pense finalement offrir un tout petit espace disque (5 MO, par exemple) à ceux qui veulent découvrir le service sans se prendre la tête.

Principe général

Donc voilà en gros ce que j'imagine :

  1. Quand on crée un projet, on spécifie les paramètres d'accès à un stockage distant de données (FTP, WebDAV ou S3).
  2. Sur la page de projet, on peut créer plusieurs "groupes de fichiers". Pour chaque groupe est créé un nouveau dossier sur le stockage distant.
  3. On peut uploader des fichiers dans un groupe. Le fichier apparaîtra dans ce groupe avec toutes ses caractéristiques (miniature si c'est une image, nom du fichier, nom du créateur, date d'ajout, taille du fichier, commentaires éventuels), et son binaire sera ajouté dans le dossier dédié sur le stockage distant.

Je me pose une question : Faut-il se contenter d'afficher le nom du fichier tel qu'il a été uploadé ? Ne vaudrait-il pas mieux proposer un champ libre, pour décrire son contenu mieux que ne le fait son nom ?
Hum, je pense que si... mais cela doit rester optionnel. Si on ne remplit pas ce champ, le nom du fichier sera affiché tel quel.

Idéalement, il faudrait pouvoir créer une sous-organisation à l'intérieur des groupes de fichiers. Cela pourrait prendre la forme simple de sous-dossiers. Mais cela pourrait aussi être des tags (je préfère le terme “label”) que l'on affecterait aux fichiers. On pourrait ainsi trier par label, par date ou par nom.

Par contre, il n'y a rien de plus pénible que de devoir systématiquement taper les noms de labels au clavier. Même avec un système de complétion, c'est chiant.
Je pense donc qu'il faudrait, pour chaque groupe de fichiers, pouvoir créer des labels à l'avance. Ainsi, au moment d'ajouter un fichier, il n'y aurait qu'à cocher le ou les labels à lui affecter (et éventuellement la possibilité d'en ajouter à ce moment-là). Pour l'affichage des fichiers, cela simplifierait aussi les choses : il suffirait là encore de cocher le ou les labels qui nous intéressent pour voir la liste des fichiers qui y correspondent.

Lire la suite...

mardi 23 mars 2010

Skriv : Les listes

(ce billet fait partie d'un ensemble consacré au projet Skriv)

Comme vu précédemment, l'une des fonctionnalités de base de Skriv sera la possibilité d'y ajouter des listes.

J'imagine globalement 3 types de listes (les éléments en italique sont optionnels) :

  • minimales : La liste a juste un titre. Chaque entrée de liste ne contient qu'un titre et une description. Utile pour prendre des notes, ou pour faire une checklist.
  • simples : La liste a un titre, une date de début et une date d'échéance. Chaque entrée de liste contient un titre, un état (à faire / fait) et une description. Utile pour lister rapidement les tâches d'un sous-projet.
  • complètes : La liste a un titre, une date de début et une date d'échéance. Chaque entrée de liste contient un titre, un état (à faire / fait), une description, une importance (basse, moyenne, haute, critique), un responsable, une date d'échéance, un état d'avancement (en pourcentage). Utiles pour faire une vraie todo-list ou une buglist.

Quelques fonctionnalités sont générales à tous les types de listes :

  • Les entrées de liste peuvent être déplacés les unes par rapport aux autres par drag and drop. Idéalement (en fonction de la complexité technique) une entrée de liste pourra être déplacée d'une liste à une autre par drag and drop ; elle s'adaptera alors aux caractéristiques de la liste qui la réceptionnera.
  • On enregistre la date de création et le nom de l'utilisateur qui a créé l'entrée de liste. Ces informations seront disponibles (par exemple dans une infobulle).
  • Les descriptions associées aux entrées de liste utilisent une syntaxe Wiki.
  • Il est possible d'ajouter des commentaires aux entrées de liste. Le commentaires utilisent une syntaxe Wiki.
  • Il est possible d'ajouter des pièces-jointes aux entrée de liste et aux commentaires. Les pièces-jointes peuvent être des fichiers déjà présents sur le partage, des fichiers que l'on uploade à ce moment-là, des emails, des URLs.
  • Les entrées de liste avec un état (à faire/fait) ont une case à cocher devant leur titre. Quand on clique sur la case à cocher, le titre est barré, et l'entrée est déplacée en fin de liste. En décochant la case, le titre n'est plus barré, et l'entrée est déplacée à la fin des tâches "à faire" (au-dessus des tâches "faites").
  • Les entrées de liste ayant un responsable possèdent une fonctionnalité de «harcèlement», qui sert à envoyer un message au responsable.

Ma vision

La plupart des outils de gestion de projet proposent une liste de tâches ; certains y ajoutent une buglist en plus. Les logiciels orientés "diagramme de Gantt" découpent les projets en sous-projets, qui sont eux-mêmes constitués de tâches.

Dans l'outil que j'utilise actuellement dans mon entreprise, nous avons aussi une todo-list et une buglist séparées. La todo-list est linéaire, elle contient une suite de tâches dont on peu définir un certain nombre de paramètres (responsable, avancement, criticité, urgence, deadline, ...). Malheureusement, le concept de “sous-projet” manque, ce qui oblige souvent à créer des tâches dont la description contient une liste de sous-tâches.

Pour Skriv, j'imagine que l'on créera plusieurs listes pour créer autant de sous-projets. Pourquoi alors ne pas directement appeler ça des «sous-projets» ? Parce que ça me semble peu flexible. Dans certains cas, on voudra gérer plusieurs listes, sans les associer à une notion de sous-projet.
Je veux que ce soit l'outil qui s'adapte à notre vision, et non l'inverse. Si on veut signifier des choses différentes, il suffira d'utiliser l'outil de manière différente. C'est quand même mieux que d'être obligé à faire tenir nos propres concepts à l'intérieur de ceux de l'outil.

Qu'en pensez-vous ?

jeudi 4 février 2010

Skriv : Fonctionnalités

(ce billet fait partie d'un ensemble consacré au projet Skriv)

Alors, j'ai commencé par discuter de l'accès au service et de son prix. Maintenant il serait bon de s'attacher au cœur du problème : à quoi va-t-il servir exactement, quelles vont être ses fonctionnalités ?

Je voudrais définir un outil qui puisse servir aussi bien pour gérer des projets professionnels que personnels. Je dois avouer que la plupart de mes projets personnels ressemblent furieusement à des projets informatiques, mais ce n'est pas une règle absolue.
Comme je l'ai dit en commentaire du précédent billet, la vision que j'ai de Skriv est celle d'un outil de travail collaboratif plus que d'un outil de gestion de projet. Je ne souhaite pas faire un logiciel qui servira uniquement aux “décideurs” pour suivre le travail de leurs employés ; je veux faire le méga-tableau-de-bord qui servira tous les jours (et plusieurs fois par jour !) à l'ensemble de mes collaborateurs pour organiser leur travail, pour communiquer sur tous les aspects de leur travail.

Fonctions de base

On peut reprendre les 4 grands types de fonctionnalités habituelles :

  • Un affichage “tableau de bord” qui affiche l'activité récente sur un projet ou sur tous les projets auxquels l'utilisateur a accès.
  • Les listes. Il faut pouvoir créer autant de listes que nécessaires, avec la possibilité de les adapter aux besoins (buglist, todolist, checklist).
  • Les pages de documentation textuelle. Appelons ça un "wiki", même si j'hésite entre l'utilisation d'une syntaxe de type wiki et l'utilisation d'un éditeur HTML WYSIWYG. Il faut pouvoir lier une page de wiki à une tâche.
  • Le partage de fichiers. Chaque projet a bien souvent besoin de fichiers binaires, qu'il s'agisse de feuilles de calcul, d'images ou autres. Il faut pouvoir lier un fichier à une tâche.

Fonctions supplémentaires

Ce qu'on peut y ajouter :

  • Des “vues” calendaires, mais je place ça plutôt dans la partie ergonomie/affichage. Cela reste important, surtout si on se sert de ces vues pour éditer les tâches (ce qui revient plus ou moins à avoir un diagramme de Gantt).
  • Des rappels par email ou SMS, que ce soit pour nous rappeler des tâches (todolist/buglist de projet) ou définis personnellement.
  • La connexion à un compte IMAP. Il y a toujours des informations importantes qui sont échangées par email (même si ce n'est pas une bonne pratique). On pourrait dédier un dossier IMAP à chaque projet, et y accéder via l'interface. On pourrait trouver un moyen pour créer des tâches à partir d'emails, et extraire les pièce-jointes des emails pour les ajouter au partage de fichiers.
  • Un système de micro-blogging. Même si j'ai déjà fait part de mon scepticisme vis-à-vis de ce genre d'outil, il y a sûrement moyen de créer un canal de communication supplémentaire. Les micro-messages seraient affichés sur le “tableau de bord” au milieu des indications d'évolution du projet.

Concernant la «communication» :

  • On pourrait imaginer que le logiciel pourrait envoyer des emails avec un résumé quotidien ou hebdomadaire des évolutions d'un ou plusieurs projets qu'on aurait décidé de "suivre".
  • Il faudrait proposer des flux RSS permettant aux utilisateurs de suivre leurs projets dans un outil externe. Un flux qui reprenne l'activité de tous les projets, un flux pour l'activité des projets “suivis”, et un flux par projet.
  • Il faudrait aussi proposer un export au format ICS (iCalendar), pour permettre de suivre les tâches et les projets dans un outil externe comme iCal, Sunbird ou Google Calendar.

Lire la suite...

mercredi 27 janvier 2010

Skriv : Identification et prix

(ce billet fait partie d'un ensemble consacré au projet Skriv)

J'ai rassemblé sur ce billet deux sujets différents et au final pas très importants − par rapport aux fonctionnalités ou à l'ergonomie, par exemple − mais dont je voulais parler quand même. Comme ça on pourra ensuite se concentrer sur le plus important.

Création de compte et identification

Il faut évidemment permettre la création de compte directement sur le site. Mais ce serait une bonne idée d'autoriser l'identification par des procédés d'authentification centralisés. Le premier qui me vient à l'esprit est OpenID, qui est un protocole standard prévu exactement pour cela. On peut y ajouter le Google Federated Login (basé sur OpenID), Yahoo! OpenID, Windows Live ID (basé sur OpenID lui aussi), l'identification centralisée de Twitter (utilisant OAuth), ou encore Facebook Connect.

Ces systèmes permettent de créer un compte quasi-instantanément. Il suffit de cliquer sur le bouton "Google", on arrive sur une page chez Google qui nous demande si on veut continuer (pour peu qu'on soit déjà identifié chez Google), on clique sur "Oui", et hop ça y est. C'est assez séduisant.

Ensuite, il faut voir la complexité d'implémentation de chaque protocole. Google, Yahoo! et Windows Live ne supportent que l'OpenID version 2. Ça a l'air idiot, mais les bibliothèques de connexion OpenID ne sont pas si nombreuses en PHP. Il en existe une très simple, qui fonctionne très bien, mais uniquement pour OpenID 1. Il en existe une autre, très complète mais lourdingue à mettre en place, qui est censée être pleinement compatible avec OpenID 2 (mais qui ne semble quand même pas fonctionner avec Google ni Yahoo!).
Pour Google, ce n'est pas un problème : Le Google Federated Login est très bien documenté, et j'ai trouvé une librairie qui s'y connecte directement, sans assurer de compatibilité OpenID, et ça fonctionne très bien.

J'hésite beaucoup pour Facebook. Vu le nombre de personnes ayant un compte Facebook, ça semble intéressant. Mais Facebook Connect est quand même assez galère à mettre en œuvre. Il faut créer une application, et les utilisateurs doivent accepter que cette application accède à leur compte. Et il faut mettre en place du cross-site scripting, pour que la partie Javascript de l'identification puisse accéder aux deux sites sans perdre de cookie. Bref, c'est casse-bonbon.
Mais il reste un espoir : Facebook s'est rallié au protocole OpenID. Pour l'instant, il n'est pas possible d'utiliser Facebook comme serveur OpenID, mais cela pourrait arriver à l'avenir.

Concernant Windows Live... Bah si ça fonctionne, c'est tant mieux. Si ça ne marche pas, je ne vais pas pleurer, je n'ai pas l'impression que ce soit un besoin si important que cela.

Pour résumer, la priorité est pour moi d'offrir l'identification par OpenID 1.0, Google, et si possible Twitter. Bref, ceux qui peuvent être mis en place facilement, et pour lesquels il existe des librairies faciles à utiliser. Si c'est pour déployer des usines à gaz et perdre du temps qui serait utile au développement des vraies fonctionnalités, autant laisser tomber.

Coûts et prix

Comme je l'ai déjà dis auparavant, je suis attaché au fait de ne pas faire payer l'accès au service. Je suis toujours éberlué de voir des outils faire payer pour des choses qui n'ont aucun coût réel, comme l'encryption SSL, le nombre d'utilisateurs autorisés, le nombre de projets gérés, le nombre de pages, ...

Lire la suite...

samedi 23 janvier 2010

Lancement du projet Skriv

J'en parlais récemment dans le post concernant l'avenir de ce blog : Je réfléchis à l'idée de développer un outil de gestion de projet ouvert à tous.

Quasiment depuis que je travaille, j'ai développé des outils pour suivre les projets ou traiter les bugs. Comme j'ai souvent bossé dans des entreprises de petite taille, pour ne pas dire des start-ups, ces outils comblaient des manques évidents et étaient adoptés rapidement.

  • Il y a maintenant un paquet d'années, j'avais fait un gestionnaire de buglist. Doté d'une interface web, il était écrit en C et stockait ses données dans un fichier XML. Technologiquement, ce n'était pas une très bonne idée, mais c'était l'occasion de tester des librairies XML et CGI que j'avais écrites en C. Au niveau des fonctionnalités, je ne me souviens plus trop. Je crois que c'était assez simple, avec pour chaque bug le niveau de criticité, une description, et le projet affecté.
  • J'avais par la suite repris le même genre d'outil, mais écrit en PHP/MySQL. Pus facile à faire évoluer, je n'ai pas souvenir qu'on l'ait utilisé à son plein potentiel.
  • Dans mon entreprise actuelle, j'ai dès le début mis en place des outils open-source, les plus important étant Flyspray pour la buglist et MediaWiki pour le wiki. Depuis, j'ai développé des extensions MediaWiki qui nous servent à gérer les projets. Ainsi, chaque projet a une page dédiée sur laquelle apparaissent : la liste des bugs du projet, une liste de tâches, des pages wiki liées au projet, et des fichiers en "pièce-jointe".

Cette extension est clairement inspirée par Backpack. J'aime vraiment ce logiciel. Par rapport à d'autres outils plus orientés "projet", comme Basecamp par exemple (pour reprendre un autre logiciel développé par 37signals), j'apprécie le fait que toutes les informations soient regroupées sur une seule page.
Habituellement, les logiciels de gestion de projets offrent plusieurs vues différentes, chacune pour un type d'information. Il y a un onglet pour les tâches, un onglet pour le calendrier, un onglet pour les bugs (si l'outil les gère), un onglet pour les pages de wiki (si c'est disponible), un onglet pour les fichiers, et ainsi de suite.
Pour ma part, je préfère avoir la vue la plus "intégrée" possible. Cela implique de penser l'interface en conséquence, ce qui peut s'avérer plus délicat qu'il n'y paraît.

Je cherche donc maintenant à définir un outil que je pourrais utiliser aussi bien pour mes besoins en entreprise, que pour gérer mes projets personnels. Je vais donc m'intéresser à chaque aspect d'un tel logiciel dans une série de billets sur le blog. Je ferais appel aux avis des lecteurs du blog, en espérant réussir à dégager des principes clairs de fonctionnement. J'espère aussi trouver le temps de développer ce logiciel, pour que tout cela ne reste pas théorique (d'un autre côté, si un autre outil est développé à partir de spécifications dérivées de mes idées, je n'y verrais aucun problème, bien au contraire).

Ah, au fait, pourquoi appeler ce projet «Skriv» ? C'est un nom que j'affectionne, que j'ai donné par le passé à plusieurs logiciels que j'ai développé. Le plus important était une interface web qui intégrait un webmail, un gestionnaire de bookmarks, un bloc-notes, un carnet d'adresses, une gestion de compte bancaire. Je l'utilisais tous les jours pour centraliser ma vie numérique. De nos jours, c'est assez commun ; mais à l'époque où je l'ai développé (en 2002), c'était assez novateur.
Pour le nom lui-même, il signifie "écrire" dans plusieurs langues comme le breton et le suédois. Ça va bien dans l'idée d'un outil qui sert principalement à communiquer.