Technos

Ce billet est le récit de mon humble expérience de 12 mois de développement web (en soirée et weekend) que j’ai souhaitée partager avec les lecteurs fidèles ou itinérants du blog.

Je fais du code (écrire, relire, notifier, pair programming) depuis 2001 : dans un premier temps en école d’ingénieurs et ensuite en SSII. Une fois dans le monde professionnel (depuis 2004), j’ai travaillé sur des environnements propriétaires (Oracle e-business, Business Objects, DateStage….) loin des outils open source et des pratiques/communautés de Hack.

Témoin des mutations (technique puis sociale) que connait le web depuis quelques années, j’ai commencé depuis mars/avril 2009 à scruter quotidiennement les tendances et comportements en ligne, et expérimenter les innombrables applications qui sont éditées chaque jour. La suite, peut être que vous la connaissez, le lancement avec Amal de l‘ancienne version de ce blog pour coucher mes réflexions.

Gestion de contenu

Étant animé par l’action, je ne pouvais pas rester spectateur/critique de ce qui se passe. J’ai commencé par le plus simple : expérimenter WordPress et Drupal pour réaliser des applications de gestion de contenu (WordPress : ce blog et le site d’Amal, Drupal : application d’accès privé de bookmark et brainstorming).  Ces deux CMS sont accessibles techniquement même sans base technique. Aussi, il y a le site des associations  WordPress Francophone et Drupal France qui cumulent un contenu considérable et intéressant sur les deux CMS. Important aussi:  les forums de ces deux communautés. Si vous avez des questions, n’hésitez pas ! Il y aura toujours une personne bien disponible pour vous répondre précisément ou vous donner des pistes.

Pour réaliser des applications de gestion contenu Drupal, WordPress ainsi que Joomla sont les références. Par contre, dès qu’on rentre dans des problématiques poussées dans le développement web (web monitoring, stockage de différents types de médias, architectures distribuées, manipulation des graphes sociaux), ces applications présentent des limites. On retrouve par ailleurs, deux applications basées sur Drupal de web monitoring : Tattler et YouSeeMii


Langages de développement

Pour choisir la bonne technologie pour réaliser des applications web pérennes et robustes, je me suis intéressé à 3 géants du web : Facebook, Twitter et Google. Ils ont été développés à l’origine, respectivement en Python , PHP et Ruby on Rails. Ils ont évolué depuis, du point de vue technique, pour utiliser des technologies comme Java ou Scala et s’appuyer sur des architectures distribuées tel Hadoop. Côté base de données, ils s’appuient actuellement en grande partie sur des NoSQL. D’ailleurs, je recommande aux personnes intéressées le cours du CNAM : Bases de données avancées.

Encouragé par les bons échos que j’ai eu sur le langage Ruby et le fait que Diaspora* soit développé avec, j’ai commencé mon apprentissage du langage (entre temps j’ai commencé à utiliser Ubuntu au lieu de Windows). Là encore, je trouve en français une association, des blogs de développeurs, des forums qui traitent du sujet. Les ressources disponibles et les interactions entre les personnes m’ont permis de rapidement apprendre le langage et prendre plaisir à développer avec.

Il a fallu ensuite me trouver un projet autant pour bien pratiquer à coder que pour valider le module CNAM. Pour cela, j’ai opté pour l’étude des interactions sur Twitter : Identification des leaders d’opinion en politique, dans l’écosystème Twitter.

Bases de données

La quasi majorité des sites web est basée sur la technologie LAMP : Linux, Apache (serveur web), MySQL (base de données) et PHP. C’est une technologie bien rodée et disponible chez l’ensemble des hébergeurs. Avec l’évolution des usages du web et l’augmentation exponentielle du volume de données en ligne, les bases Mysql ont démontré beaucoup de limites et n’étaient pas adaptées aux nouveaux besoins du web. Facebook a développé son propre système de base de données (Cassandra), Idem pour Amazon (SimpleDB) et Twitter (FlockDB : BDD de graphes). Une pléade de BDD NoSQL ont vu le jour ailleurs.

Pour  mon projet d’étude des interactions sur Twitter, j’ai opté pour Neo4j qui est une base de données de graphes en usage depuis quelques années et suffisamment documentée pour l’utiliser via Ruby. Les premiers pas étaient difficiles mais à l’aide d’Andreas Ronge via le mailing-list, j’ai pu rapidement m’approprier les rudiments et expérimenter Neo4j avec Rails tout en expérimentant l’API Twitter. Là aussi, j’ai pu m’appuyer sur les communautés Twitter-Dev et Twitter-Ruby pour répondre à mes questionnements.

Neo4j était bien pour stocker un graphe mais quid des tweets. Pour cela, il me fallait une BDD de documents. En faisant rapidement quelques recherches, j’ai eu à choisir entre MongoDB et CouchDB. J’ai opté pour la deuxième : forte communauté (réponses déjà disponibles ou  rapides à mes questions), accessible via navigateur, assez intuitive, combine à la fois BDD et Serveur Web et adapté aux réseaux sociaux. Plusieurs applications Twitter et Facebook s’appuient dessus.

Web Crawling

Pour étudier les interactions en ligne et analyser les phénomènes du web, il est nécessaire de passer par la phase : Collecte de données. Deux moyens complémentaires pour ce faire : Collecte par API (Twitter, Facebook, Youtube…) et Crawl de ressources en ligne (blogs, forums, wikis…). Si les API sont faciles d’utilisation et accessibles via différents langages de programmation, le Crawl est loin d’être un exercice évident. Le Crawl requiert des ressources matérielles et humaines et aussi beaucoup d’expérimentations en amont des projets. Pour vous faire une bonne idée, je vous suggère de consulter la thèse suivante : Effective Web Crawling qui a donné lieu à un Crawler Open Source (WIRE).

J’ai expérimenté WIRE pour quelques jours. Il est intéressant mais développé en C (langage que je fuis ;)) et ne dispose pas d’une réelle communauté. J’ai cherché à expérimenter d’autres crawlers open sources et j’ai opté pour Nutch. C’est un projet Apache qui dispose d’une forte communauté (française aussi) et largement documentée. J’ai expérimenté Nutch. Il est très intéressant et doté d’un système de plugins qui permet d’ajouter ou de désactiver des fonctionnalités. Je n’ai pas encore opéré un large crawl mais de ce que j’ai lu, il est capable d’emmagasiner des millions, voir des milliards de pages (via une architecture distribuée Hadoop).


Web Design

La conception d’interfaces graphiques n’est pas mon point fort. D’ailleurs, je n’ai pas encore vraiment réalisé une interface de bout en bout. Je pense expérimenter dans l’avenir HTML5, Sproutcore et Processing.js pour me faire une idée de ce qui est possible à développer côté navigateur.

La communauté, c’est important

J’ai expérimenté plus d’outils et de technologies que ce que j’ai présentés dans ce billet. A chaque fois, la taille de la communauté a pesé sur mes choix. En effet, au sein d’une communauté, on peut s’attendre à trouver des réponses déjà faites à ces questions ou bien à poser des questions et obtenir des réponses dans des délais corrects. Le facteur temps est important pour moi, vu que je fais du développement durant mon temps libre et j’ai envie d’expérimenter pas mal de choses.

J’ai beaucoup apprécié échanger avec des personnes que je ne connaissais pas et qui se sont proposées pour me donner un coup de main. J’ai aussi à mon tour pris du plaisir à aider d’autres personnes et les guider dans leurs premiers pas. Les technologies Open Source se développent grâce à la bonne volonté des personnes et les interactions au sein des communautés. J’apprends beaucoup en lisant chaque jour les échanges qui ont lieu dans les mailing-lists et apportant quand c’est possible mon humble contribution.

Il n’est pas évident de combiner vie professionnelle, vie personnelle et développement web. Toutefois, l’exploration du web est très stimulante et enrichissante. Je continue alors mon aventure du Hack et du code. Bientôt, je commencerai à partager mon code sous Github.

Diaspora

Comment concilier libre activité dans les réseaux sociaux, protection et contrôle des données personnelles, et droit à l’oubli : adopter l’application réseau social DIASPORA*.

DIASPORA* est une application à installer sur son ordinateur, libre d’accès sous licence AGPL, destinée à favoriser les échanges de données entre les internautes dans une sphère privée. DIASPORA* exploite le système d’échange PeerToPeer pour permettre l’échange des messages et des fichiers. Ainsi, les données échangées entre internautes seront stockées au niveau de leurs ordinateurs et éviter ainsi qu’elles soient stockées au niveau d’un serveur central (à l’instar de Facebook). Les données personnelles, par conséquent, ne seront ni utilisées à des fins commerciales ou autres, ni indexées par les moteurs de recherches.

La première version de DIASPORA sera publique demain, mercredi 15 Septembre et d’autres versions riches en fonctionnalités intéressantes suivront par la suite. Ci-dessous, une vidéo qui met en avant la version pré-alpha du projet.

Diaspora Message Propagation (pre-alpha!) from daniel grippi on Vimeo.

A l’origine du projet, quatre étudiants américains : Daniel Grippi, Maxwell Salzberg, Raphael Sofaer et Ilya Zhitomirskiy. Voici la vidéo où ils expliquent clairement et brièvement DIASPORA*

Diaspora: Personally Controlled, Do-It-All, Distributed Open-Source Social Network from daniel grippi on Vimeo.

A demain pour découvrir l’outil en détail!

Pour en savoir plus sur le projet : Join Diaspora.

Article Source : Diaspora, le Facebook de demain ?