April 2010

Bonsoir à tous,
voici quelques liens pour finir la semaine :

Et quelques liens sur les bases de données et sujets associés :

Bon WE !
Pierre

Nous vous parlions il y a peu d'initiatives de jeu vidéo en HTML5-javascript, qui ont l'avantage de fonctionner sans Flash ou Silverlight, sur n'importe quel navigateur (hormis IE).

Je ne résiste pas à l'envie de mentionner Aves, un projet qui vient d'être présenté à la conférence jQuery de San Francisco. Aves comprend un moteur de jeu en 3D isométrique (l'Aves Engine) et le SDK qui inclut notamment un éditeur de carte. Aves utilise bien sûr jQuery mais l'un des développeurs du framework a même participé au projet.

D'un point de vue graphique, on se croirait revenu à la belle époque d'Age of Empires mais ce n'est sans doute qu'un début. Le jeu semble rester parfaitement fluide même avec une cinquantaine de participants qui tchattent en temps réel. Côté serveur, les créateurs n'indiquent pas ce qu'ils utilisent pour gérer les flux, ils évoquent simplement une techno orientée événements.

Aves est encore à l'état de prototype mais vous pouvez visionner une vidéo de démonstration sur cette page.

La version 0.1.91 de Node.js est sortie le 15 avril. Je ne vais pas m'attarder dessus, c'est juste une version de stabilisation après les gros changements de la 0.1.90 : ajouts mineurs et surtout corrections de bugs.

Plus intéressante est la version 0.1.92 fraîchement sortie. Parmi les nouveautés, citons :

  • La prise en charge du SSL via OpenSSL est de retour (mais pas encore documentée).
  • Les événements error qui n'ont pas de listeners déclenchent maintenant une exception.
  • Une nouvelle classe Script permet d'évaluer du code dans le contexte courant ou dans un nouveau contexte. Cela pourrait être très pratique pour des tests unitaires, mais ne l'utilisez pas pour faire du sandboxing (regardez plutôt Jefe pour ça).
  • La documentation de l'API continue de s'améliorer, avec notamment un nouveau thème qui s'intègre au reste du site.

Les releases notes sont disponibles sur la mailing-list : Node v0.1.91 et Node v0.1.92.

Pour la compatibilité des bibliothèques avec chaque version, ça se passe toujours sur le wiki.

Just a short post to tell you about ShakaCssDebug. what is it?

ShakaCSS is a tiny javascript tool for viewing:

  • guides as Photoshop style
  • a grid
  • a resizable and draggable rule

These small tools make the development of web interface easier.

Its efficiency mainly comes from 2 things:

  • its deployment on any sites in 1 click, thanks to bookmarklet
  • registration of variables in a cookie that lets you navigate from one page to another keeping the markers

so thnx shakaman for this great tool

hop on to http://shakacss.af83.com/ to play with it.

To get the code go to : http://github.com/shakaman/ShakaCss/

Dév ruby on rails recherchés

Nous recherchons des développeurs Ruby on Rails, mais également d'autres profils. N'hésitez pas à consulter nos annonces sur Lolix : http://fr.lolix.org/search/offre/socof.php3?socid=5548

Nous recherchons des développeurs Ruby on Rails, mais également d'autres profils. N'hésitez pas à consulter nos annonces sur http://www.af83.com/jobs

546 seeds from 1 sunflower!

Je vous parlais hier des systèmes de gestion de packages, et plus particulièrement de Kiwi, Rubygems et Seed.js. C'est visiblement un sujet très à la mode, vu que plusieurs autres articles ont été publiés sur ce sujet à peu près au même moment.

Du coté de Rubygems, Ryan Tomakyo a libéré le code source de rpg. C'est une alternative à rubygems (l'outil) qui permet d'utiliser les dépôts et packages au format Rubygems. En particulier, il est capable de résoudre les points 2 et 3 d'hier en organisant les fichiers installés par type plutôt que par package et en ne nécessitant aucun runtime (le fameux require 'rubygems' pour Rubygems).

J'en profite également pour vous signaler le Ruby Packaging Standard qui est un ensemble de règles pour organiser ses fichiers dans une bibliothèque Ruby, et je vous encourage fortement à suivre ces règles, même pour un usage personnel.

Mais venons-en à la star d'hier : Seed.js. Nous avons vu beaucoup d'activité à son sujet :

  • Charles Jolley a publié un article intitulé A Universal Package Manager for JavaScript sur le blog de SproutCore (avec des explications sur le pourquoi et le comment)
  • Il a également envoyé un mail sur la mailing-list de node.js (pas beaucoup de commentaires sur la mailing-list, mais bien plus sur le chan IRC)
  • Une page community a été ajoutée au site officiel de Seed.js
  • DailyJS a choisi Seed.js comme sujet pour l'article d'hier (au passage, DailyJS est un très bon blog sur le Javascript aussi bien coté client que coté serveur)
  • Enfin, the changelog a aussi sélectionné Seed.js comme projet du jour

Bref, tout cela me semble de bonne augure pour Seed.js, mais attendons de voir si les développeurs des bibliothèques pour node.js sont du même avis que moi avant de crier victoire.

Everyone loves books but  I thought this was the dullest photo i had ever taken. I guess not.

Dès que l'on utilise un langage de script et que l'on commence à avoir quelques bibliothèques, on arrive très rapidement à avoir besoin d'installer facilement ces bibliothèques, à les garder à jour et à gérer des dépendances entre les bibliothèques. Par exemple, si vous souhaitez développer une application web en node.js, vous allez sûrement utiliser une bibliothèque pour faire le routage, une autre pour faire le templating, etc.

La solution la plus populaire actuellement semble être Kiwi. Ce gestionnaire de paquets s'inspire très fortement de Rubygems. Il profite donc des bons cotés des gems ruby comme la simplicité d'installation d'un paquet :

$ kiwi install haml

Malheureusement, l'expérience montre que Rubygems n'est pas un si un bon outil que ça sur le long terme. Voici quelques uns des défauts de Rubygems, et donc de Kiwi :

  1. Déployer les mêmes versions d'une application sur plusieurs environnements peut être problématique (pour Ruby, la solution consiste à passer par un deuxième outil : Bundler).
  2. Les bibliothèques deviennent difficiles à packager. Pour compenser, on en revient à écrire des recommandations pour les dévs, des explications sur les bonnes pratiques à respecter ou la liste des choses à ne pas faire.
  3. Mettre les paquets chacun dans leur répertoire pose également des problèmes qui vont plus loin que le packaging. Cela va également à l'encontre de l'intégration avec bon nombre d'outils UNIX. On peut, par exemple, citer le cas des pages man (que l'on peut résoudre par gem-man, mais ça reste un palliatif).

Au final, je préférerais donc que l'on tire des enseignements de Rubygems et qu'un autre système de gestion de packages s'impose pour Node.js. Il existe d'ailleurs des alternatives à Kiwi : npm, mode et SeedJS. SproutCore a d'ailleurs présenté SeedJS le week-end dernier lors de la JSConf, et son support des modules CommonJS me paraît très intéressant.

Bonjour, Voici les liens en vrac de la semaine.

Du côté du NoSQL:

Bonne lecture, Pierre

Redis est une base de données de type clés-valeurs. Ses forces sont d'être très rapide et d'offrir un riche ensemble d'opérations. Cela en fait un très bon complément à une base de données relationnelles pour venir renforcer des points précis. Ce billet est une compilation de liens sur Redis.

Les sites incontournables

Les articles

Les présentations

Les cas d'utilisations

casseroles

NoSQL est un sujet que nous abordons régulièrement sur ce blog, mais il ne me semble pas avoir déjà expliqué ce que cela signifie. Textuellement, NoSQL est l'abréviation de Not only SQL, pas seulement SQL.

Le mouvement NoSQL a souvent été opposé au monde SQL : les bases de données SQL ne scalent pas bien, NoSQL est la solution ; les bases de données ne sont pas pratiques à utiliser, NoSQL est la solution ; les bases de données relationnelles ne sont pas assez performantes, NoSQL est la solution, etc. Mais ce sont chaque fois des points de vues partiels : toutes les bases de données NoSQL ne scalent, toutes ne sont pas faciles à utiliser, toutes n'ont pas des performances géniales.

Alors, à quelle réalité correspond NoSQL ? Couch.io a publié un billet de blog qui répond à ça :

NoSQL permet d'avoir le choix.

En pratique, cela veut dire que lorsque j'ai un besoin particulier, je vais avoir à ma disposition des bases de données aux caractéristiques différentes et que je vais pouvoir prendre celle qui me convient vraiment. Si j'ai un grand volume de données, j'irais sûrement regarder du coté de Cassandra. Des graphes dans tous les sens ? Neo4j est une option sérieuse. Un truc rapide et pratique pour faire du développement web, MongoDB est là.

Nos besoins sont devenus trop différents pour qu'une seule base de donnée puisse répondre efficacement à toutes nos demandes. Dans beaucoup de cas, les bases de données relationnelles sont encore une solution pertinente. Et pour le reste, le choix offert par les bases de données NoSQL est large.

Une nouvelle version de node.js est sorti ce week-end. Ryan Dahl a annoncé les nouveautés.

Cette version est en fait une prerelease de la version 0.2.0 : il ne devrait y avoir que des corrections de bugs jusque-là. La grande nouveauté est l'arrivée de la nouvelle couche réseau (nom de code : net2). Elle a des avantages indéniables : plus flexible, meilleures performances, support des sockets UNIX et des pipes, etc. Mais elle est également à l'origine de certaines régressions, dont la plus flagrante est l'absence de SSL (ce n'est que temporaire).

Sinon, on retrouve les grands classiques de chaque nouvelle version : mise à jour de V8, correction de bugs et documentation plus complète. D'ailleurs, la documentation utilise maintenant une syntaxe Markdown et est générée grâce à ronn. Je trouve que la documentation de l'API est du coup bien plus agréable à consulter.

Pour connaître la compatibilité des bibliothèques avec cette nouvelle version, la page de wiki Library compatibility est LA source à consulter.

DKK_0928

Pour faire suite au précédent billet Javascript, question de style, je vous propose d'étudier une nouvelle tendance : les virgules en début de ligne.

Bonjour à tous, Voici les liens en vrac de la semaine :

Et bien sûr, quelques liens pour les NoSQL :

Bonne fin de semaine, Pierre

Mercredi se tenait dans les locaux de Dailymotion l' Uxparis meeting, auquel j'ai pris part avec Olivier.

Ce mois-ci, l'invité était Giuseppe Attoma Pepe de l'Agence Attoma qui avait choisit de parler du design d'interaction du quotidien "L'UX dans la Rue"

À travers différents projets de son agence, pris comme cas d'études, il présente son approche UX. À chaque fois, il tente de représenter sa méthode de conception : Il n'y a pas un modèle unique mais de multiples représentations, qui évoluent de projet en projet.

Hier se tenait une conférence organisée par l’EBG pour tenter de répondre à une question très actuelle : à qui appartiennent les contenus des réseaux sociaux ?

Le débat fait bien sûr écho aux problématiques éthiques et juridiques qui se posent de plus en plus avec l’extension des réseaux sociaux, en particulier celle de Facebook avec sa politique très controversée en la matière. Deux présentations rapides mais intéressantes nous ont exposé les points de vue de la Cnil et du site Viadeo.

AF83 étant très engagé sur ces sujets, notamment au travers de projets de réseaux sociaux décentralisés et respectueux de la vie privée, nous avons bien sûr suivi cette conférence pour vous et vous en proposons maintenant un compte-rendu.

Apple déclarait hier que les applications iPhone et iPad devaient obligatoirement être programmées nativement en C, C++, Objective C ou Javascript et devaient se connecter directement aux API de la machine (via Engadget).

Concrètement, Apple interdit donc les frameworks qui permettraient d'écrire du code dans d'autres langages ou non optimisé pour ses machines.

On pense évidemment au Flash compilé pour iPhone, entre autres... le code obtenu sera-t-il suffisamment propre et performant pour qu'Apple l'autorise ? Ou Apple ferme-t-il définitivement la porte au nez d'Adobe et de ses devs ? Et le troll totalement gratuit de la fin (mais qui ne date pas d'hier), Apple veut-il vraiment un monopole à la Microsoft ? ;)

Ce week-end, un utilisateur de l'iPad a remarqué que le guide de l'utilisateur de sa machine était une page web. Pourtant, d'un point de vue ergonomie, on aurait tout à fait dit une application native de l'iPhone/iPad...

Le secret ? un framework javascript développé par Apple qui émule complètement les effets des menus de l'iPhone dans un navigateur (du moins Safari ?).

Pour l'heure, le code a été repéré et extrait mais aucune licence n'y était attachée, les développeurs tiers n'ont donc pas encore l'autorisation de l'utiliser. La situation pourrait être clarifiée par Apple aujourd'hui même.

Pour avoir un aperçu des effets permis par ce framework, regardez la vidéo sur le site de celui qui a fait cette découverte.

Voici une astuce simple pour faire des pointes de marqueurs en CSS.

Exemple simple :
Exemple simple

Pour obtenir ce résultat nous allons de manière simple jouer avec les bordures d'une div.

Superman by Kevin Katinas

Comme tout langage, le Javacript a ses idiomes et son style propre. Il est conseillé de suivre ces règles afin que son code puisse être lu par le plus grand nombre. Encore faut-il connaître ces conventions. Ce billet est l'occasion d'en voir quelques unes.

La première bataille est, comme pour n'importe quel langage, de savoir comment indenter son code : tabs ou espaces ? Et si espaces, vont-elles par groupe de 2, 4 ou 8 ? Pour ma part, la réponse est 4 espaces. C'est ce qui me semble le plus utilisé, même si c'est encore beaucoup de développeurs préfèrent d'autres règles.

Vient ensuite le choix de la méthode de nommage des méthodes. Celles-ci sont souvent composées de plusieurs mots, et l'on retrouve là-aussi deux grandes écoles : les_noms_avec_des_underscores et lesNomsEnCamelCase. Pour le javascript, point de débat à avoir : quasiment tout le monde s'est tourné vers le camelCase (comme l'explique Chris Wanstrath).

Et pour tout le reste, Douglas Crockford a écrit une convention : JSLint. Ces règles ne sont pas parfaites et sont souvent discutées, mais elles sont le mérite d'exister, d'être documentées et de proposer une manière saine d'écrire du code. Vous avez donc tout intérêt à les suivre.

Enfin, certains usages ont émergés plus récemment. Par exemple, les rubyistes ne seront pas dépaysés en voyant l'utilisation de || pour définir une valeur par défaut ou de && pour remplacer un if. Je vous recommande la lecture de Thoughts on Software Development Reading Code: underscore.js pour des explications plus détaillées.

Un autre usage assez récent est la manière d'indenter du code dans des chaînes d'appels selon l'objet retourné. Je vous renvoie vers Significant Whitespace qui explique cela bien mieux que je ne pourrais le faire en quelques lignes.

Au final, l'important est d'écrire du code que d'autres personnes pourront lire facilement. Pour les personnes peu expérimentées dans un langage, cela passe souvent par respect strict de certaines conventions. Puis, quand on gagne en expérience, il arrive que l'on choisisse de violer dans certains cas une règle pour trouver une forme plus lisible.

Lors du dernier atelier du lundi, j'ai présenté le framework javascript sammy.

Voici les slides: http://francois.heroku.com/

Ce framework est basé sur jQuery et est fortement inspiré de Sinatra.

Il permet de créer des applications web avec une gestion de l'historique, des évènements personnalisé, des plugins, etc.

Voici une mini application :

  1.  $.sammy(function() {
  2.    this.get('#/hi', function(ev) {
  3.        $('#main').text('Hello World!');
  4.    });
  5.    this.post('#/hi', function(ev) {
  6.        $('#main').text(ev.params['myinput']);
  7.        return false; // l'évènement submit est annulé
  8.    });
  9. }).run();

Décortiquons le code de cette application.

On commence par définir une route:

  1.    this.get('#/hi', function(ev) {
  2.        $('#main').text('Hello World!');
  3.    });
  4.  
  5.    <a href="#/hi">Hi !</a>

Le click sur le lien va déclencher le callback sur la route get('#/hi') et afficher un message.

Plus intéressant est la gestion des verbes POST (mais aussi PUT et DELETE). La simplicité est de mise. On crée un formulaire HTML et la route correspondante. L'évènement submit est automatiquement capturé par sammy.

  1.    this.post('#/hi', function(ev) {
  2.        $('#main').text(ev.params['myinput']);
  3.        return false; // l'évènement submit est annulé
  4.    });
  5.  
  6.    <form action="#/hi" method="post">
  7.        <input type="text" name="myinput" />
  8.        <input type="submit" value="Submit" />
  9.    </form>

Vous n'aurez pas ainsi a chercher l'ensemble des champs de formulaire, Sammy le fait pour vous. Je conseille l'utilisation du plugin NestedParams pour les champs de formulaire avec des tableaux.

Sammy intègre un systèmes de plugins qui permettent de réutiliser du code. Plusieurs plugins sont intégré comme des systèmes de template, de stockage des données (avec localStorage ou sessionStorage d'HTML 5, ou un fallback avec les cookies ou un simple stockage mémoire), JSON ou encore ... le vôtre.

Sammy est un bon framework pour écrire une application web. Essayez-le !

Bonjour à tous,

Cette semaine (surtout hier) a été riche en actualités dignes d'intérêts. Le CERN a découvert une "paléoparticule" suite à des expériences menées avec le LHC. Cette découverte devrait permettre des progrès dans le domaine de l'énergie atomique. À ce propos, Google se lance dans le nucléaire ! Mais qui pourra arrêter le géant du Web ? En tout cas ce n'est pas Microsoft, Google l'a racheté après avoir également racheté la France. Si Google (ou doit on dire Topeka ?) a racheté la France, c'est qu'il y a un intérêt stratégique, et si ce n'est le fromage ou le vin, ce doit être le B-6, un nouveau logiciel de prises de décisions à l'origine des décisions prises par le Gouvernement français depuis 2007.

Plus techniquement :

Et plus sérieusement :

Bon week-end, Pierre

Hier, Google a annoncé avoir réussi à recréer Quake 2 dans un navigateur entre autres grâce à WebGL et des websockets, en partant d'un moteur graphique originellement écrit en Java. Quand bien même ce serait un poisson d'avril, la chose reste parfaitement crédible et ce n'est qu'une question de temps avant que quelqu'un nous mette le jeu entre les mains... Pour rappel, le génial Jacob Seidelin nous a déjà offert un Doom (bel et bien testable) rien qu'avec la balise canvas et sa manipulation de pixels.

On apprenait aussi récemment que Brightcove va proposer de nombreuses vidéos lisibles via la balise <video> de Html5, la BBC de même, avec en ligne de mire les utilisateurs d'iPad et d'iPhone... et YouTube serait aussi en train d'y réfléchir. Enfin, même avec 1 ou 2 ans de retard, Microsoft nous promet de nous donner un HTML5 crédible dans IE9.

Bref, HTML5 arrive maintenant à grands pas, sans doute bien plus vite que ce que l'on imaginait.