AMQP, ou Advanced Message Queuing Protocol, est un protocole standard ouvert pour les MOM, ou Message Oriented Middleware. Pour résumer, c'est un protocole de message entre serveurs offrant des mécanismes de files d'attente, de routage (point à point et par diffusion/abonnement), de fiabilité, et de sécurité. Citons les implémentations OpenAMQ (en C, sous GPLv3) ou RabbitMQ (en erlang, sous MPL).
Le sujet n'est pas nouveau, mais iMatix considère ce standard comme dépassé et en propose un nouveau, ØMQ ou ZeroMQ, avec une implémentation de qualité : légèreté, facilité d'intégration et performances. iMatix a pendant un temps développé OpenAMQ, mais soutient et développe désormais le projet ØMQ.
Que vous utilisiez Ruby, Python ou C n'est pas un problème, les bindings existent déjà. Vous pouvez vous en rendre compte en consultant le livre de recettes. La bibliothèque est elle-même développée en C++, sous licence LGPL.
Le transport des messages entre les nœuds est assuré par différents biais selon la disponibilité des moyens : TCP/IP, PGM, InfiniBand ou encore socket Unix dans le cas de communications internes. L'interface proposée permet d'implémenter de façon concise les principaux usages de messagerie inter-applications : requête/réponse, abonnement/notification, éventuellement avec restriction à un sujet particulier. L'utilisation de fonctions avancées comme le zero-copy ou le scatter-gather est rendue possible dans les dernières versions de la bibliothèque.
CAMP 0.7.0 : bibliothèque de réflexion en C++ sous LGPL
La réflexion (ou introspection) est un mécanisme qui permet à un programme d'examiner, voire de modifier ses structures internes. En d'autres termes, c'est la capacité d'un programme à examiner son propre état. Cela permet par exemple d'effectuer des mesures de performance, d'inspecter des modules, de déboguer un programme, ou encore de le faire d'évoluer automatiquement en fonction des besoins et de l'environnement.
Certains langages de programmation offrent ce type de fonctionnalité, notamment Smalltalk, Java et C#, qui fournissent des outils pour connaître et utiliser la classe d'un objet, ses propriétés et ses méthodes (on parle en général de méta-classe, de méta-propriété et de méta-fonction).
L'introspection peut être utilisée pour fournir des bindings vers des langages de script, pour écrire des éditeurs de propriétés, ou faire de la sérialisation. L'intérêt étant que le code de ces outils est écrit une fois pour fonctionner sur la structure abstraite (méta-classe, méta-propriété, méta-fonction), et peut ensuite être utilisé dans n'importe quel programme.
Malheureusement, le langage C++ ne fournit aucun moyen de faire de la réflexion. Il existe cependant un certain nombre de bibliothèques fournissant ce type de fonctionnalité, la plus connue étant probablement Qt avec ses QObjects.
Cependant, pour générer toutes les « méta-informations » nécessaires à la réflexion, la majeure partie de ces bibliothèques requiert soit d'utiliser un pré-compilateur (moc pour Qt), soit de déclarer ses informations en ajoutant tout un tas de macros dans l'en-tête de chaque classe ; C++ Mirror faisant exception. De plus, il est souvent nécessaire d'hériter d'une classe de base (QObject pour Qt).
Ceci a amené Tegesoft à développer CAMP, une bibliothèque de réflexion généraliste pour C++. CAMP utilise intensivement les templates C++, ainsi que boost (ensemble de bibliothèques C++ permettant d'étendre les fonctionnalités du langage). Il est non-intrusif, à l'exception de la gestion du polymorphisme pour les méta-classes ; une alternative basée sur le RTTI (Run-Time Type Information : fait de déterminer, à l'exécution du programme, le type d'une variable, dans les langages orienté-objet) du langage devrait être ajoutée dans la prochaine version.
CAMP ressemble à Luabind ou à boost::python, mais est généraliste. De ce fait, il est possible d'écrire un module pour CAMP permettant d'embarquer un interpréteur Python, un autre pour embarquer un interpréteur Lua, ou encore un pour faire de la sérialisation XML, l'intérêt étant que le binding des classes n'est fait ici qu'une seule fois. Lorsqu'un nouveau module pour CAMP est disponible, vous n'avez aucun binding supplémentaire à écrire.
Le mieux dans tout ça ? C'est sous LGPL ! La version 0.6.0 de CAMP était déjà distribuée sous GPL, mais une licence plus permissive a été choisie afin de favoriser l'utilisation de la bibliothèque.
De plus, un nouveau site internet (basé sur Redmine) est disponible, avec bug tracker, wiki, et documentation de l'API. Le code est quant à lui hébergé sur GitHub. Un forum est également disponible.
Certains langages de programmation offrent ce type de fonctionnalité, notamment Smalltalk, Java et C#, qui fournissent des outils pour connaître et utiliser la classe d'un objet, ses propriétés et ses méthodes (on parle en général de méta-classe, de méta-propriété et de méta-fonction).
L'introspection peut être utilisée pour fournir des bindings vers des langages de script, pour écrire des éditeurs de propriétés, ou faire de la sérialisation. L'intérêt étant que le code de ces outils est écrit une fois pour fonctionner sur la structure abstraite (méta-classe, méta-propriété, méta-fonction), et peut ensuite être utilisé dans n'importe quel programme.
Malheureusement, le langage C++ ne fournit aucun moyen de faire de la réflexion. Il existe cependant un certain nombre de bibliothèques fournissant ce type de fonctionnalité, la plus connue étant probablement Qt avec ses QObjects.
Cependant, pour générer toutes les « méta-informations » nécessaires à la réflexion, la majeure partie de ces bibliothèques requiert soit d'utiliser un pré-compilateur (moc pour Qt), soit de déclarer ses informations en ajoutant tout un tas de macros dans l'en-tête de chaque classe ; C++ Mirror faisant exception. De plus, il est souvent nécessaire d'hériter d'une classe de base (QObject pour Qt).
Ceci a amené Tegesoft à développer CAMP, une bibliothèque de réflexion généraliste pour C++. CAMP utilise intensivement les templates C++, ainsi que boost (ensemble de bibliothèques C++ permettant d'étendre les fonctionnalités du langage). Il est non-intrusif, à l'exception de la gestion du polymorphisme pour les méta-classes ; une alternative basée sur le RTTI (Run-Time Type Information : fait de déterminer, à l'exécution du programme, le type d'une variable, dans les langages orienté-objet) du langage devrait être ajoutée dans la prochaine version.
CAMP ressemble à Luabind ou à boost::python, mais est généraliste. De ce fait, il est possible d'écrire un module pour CAMP permettant d'embarquer un interpréteur Python, un autre pour embarquer un interpréteur Lua, ou encore un pour faire de la sérialisation XML, l'intérêt étant que le binding des classes n'est fait ici qu'une seule fois. Lorsqu'un nouveau module pour CAMP est disponible, vous n'avez aucun binding supplémentaire à écrire.
Le mieux dans tout ça ? C'est sous LGPL ! La version 0.6.0 de CAMP était déjà distribuée sous GPL, mais une licence plus permissive a été choisie afin de favoriser l'utilisation de la bibliothèque.
De plus, un nouveau site internet (basé sur Redmine) est disponible, avec bug tracker, wiki, et documentation de l'API. Le code est quant à lui hébergé sur GitHub. Un forum est également disponible.
Appel à conférenciers pour les 15 ans de PHP
AFUP (Association Française des Utilisateurs de PHP) organise les 9 et 10 novembre 2010 le Forum PHP, à la Cité des sciences et de l'industrie à la Villette, et recherche des conférenciers pour participer à ce rendez-vous.
Ce rendez-vous sera un double évènement avec les 15 ans de PHP et les 10 ans de l'AFUP.
Pour l'édition 2010, les thèmes particulièrement mis en lumière seront les suivants :
Alors, il ne vous reste plus que quelques semaines pour proposer un sujet (date de dépôt avant le 30 juin) et bénéficier des pré-inscriptions.
Ce rendez-vous sera un double évènement avec les 15 ans de PHP et les 10 ans de l'AFUP.
Pour l'édition 2010, les thèmes particulièrement mis en lumière seront les suivants :
- PHP de A à Z : « Débuter en PHP », « Réussir un projet avec PHP », « Choisir son hébergement » ;
- Outils basés sur PHP : CMS et CMF, outils d'e-commerce et de business, paiement en ligne, CRM et ERP ;
- Industrialisation de PHP : Performances, tests, authentification centralisée, frameworks ;
- Technologies autour de PHP (Javascript, HTML 5, microformats).
Alors, il ne vous reste plus que quelques semaines pour proposer un sujet (date de dépôt avant le 30 juin) et bénéficier des pré-inscriptions.
DataMapper 1.0
DataMapper est une bibliothèque en Ruby qui vous permet de manipuler des données dans des bases de données sous forme d'objets Ruby (c.-à-d., c'est un ORM). Sous licence MIT, il vient de sortir en version 1.0, grâce au travail de 66 contributeurs.
Dans le monde Ruby, l'utilisation d'ORM est devenue une pratique courante sous l'influence de Ruby on Rails. ActiveRecord, l'ORM de Ruby on Rails, est ainsi très utilisé mais il ne convient pas à tout le monde. Les développeurs de Ruby on Rails ont des avis très tranchés sur certains points et, notamment, cherchent toujours à répondre aux 20% de cas d'utilisation qui couvrent 80% des besoins. Mais certaines personnes ont des besoins plus particuliers : c'est ce qui est arrivé aux développeurs de DataMapper.
L'équipe de DataMapper a ainsi voulu fournir une bibliothèque plus complète qu'ActiveRecord. On peut ainsi citer les points forts suivants :
La version 3 de Ruby on Rails devrait sortir d'ici quelques semaines et va notamment permettre de remplacer facilement ActiveRecord par un ORM dans les projets Rails.
Saluons donc l'arrivée de DataMapper 1.0 qui va permettre de couvrir des scénarios complexes pour des projets Rails ou autres.
Dans le monde Ruby, l'utilisation d'ORM est devenue une pratique courante sous l'influence de Ruby on Rails. ActiveRecord, l'ORM de Ruby on Rails, est ainsi très utilisé mais il ne convient pas à tout le monde. Les développeurs de Ruby on Rails ont des avis très tranchés sur certains points et, notamment, cherchent toujours à répondre aux 20% de cas d'utilisation qui couvrent 80% des besoins. Mais certaines personnes ont des besoins plus particuliers : c'est ce qui est arrivé aux développeurs de DataMapper.
L'équipe de DataMapper a ainsi voulu fournir une bibliothèque plus complète qu'ActiveRecord. On peut ainsi citer les points forts suivants :
- Support de nombreuses bases de données, aussi bien relationnelles que NoSQL, mais également de fichiers YAML et d'interfaces REST ;
- Migrations automatiques : on écrit les classes Ruby, puis on demande à DataMapper de créer les tables correspondantes dans la base de données ;
- Unicité des objets : une ligne dans la base de données correspond à un objet ;
- Approche modulaire : on choisit les fonctionnalités dont on a vraiment besoin ;
- Réduction du nombre de requêtes : DataMapper ne fait les requêtes qu'au moment où vous avez vraiment besoin d'y accéder (Lazyness can be a virtue) et précharge les objets quand vous itérez sur des collections (Strategic eager loading) ;
- Intégration plus souple à des projets Ruby existants.
La version 3 de Ruby on Rails devrait sortir d'ici quelques semaines et va notamment permettre de remplacer facilement ActiveRecord par un ORM dans les projets Rails.
Saluons donc l'arrivée de DataMapper 1.0 qui va permettre de couvrir des scénarios complexes pour des projets Rails ou autres.
Sortie de Phusion Passenger 2.2.12
Phusion Passenger est un module pour Apache 2 ou Nginx qui permet de déployer simplement des applications Ruby. En particulier, il est très bien adapté aux applications Rails, d'où son surnom de mod_rails. Bien que développé et supporté commercialement par Phusion, l'intégralité du code source est placé sous licence MIT.
La version 2.2.12 est toute fraîche. Elle apporte des corrections de bogues et améliore le support de Bundler, vous permettant ainsi de gérer les dépendances de vos applications et charger les bonnes versions des gems utilisés sur vos projets.
L'installation et la mise à jour peuvent se faire en utilisant le gem passenger, puis en lançant passenger-install-apache2-module ou passenger-install-nginx-module. Brightbox fournit également des paquets pour Ubuntu.
Les développeurs de Passenger recommandent d'utiliser leur version de Ruby. Cette dernière se nomme de façon un peu pompeuse Ruby Entreprise Edition. C'est un Ruby 1.8.7 agrémenté de quelques patches pour améliorer la gestion de la mémoire et le comportement du ramasse-miettes (garbage collector). Ces patches ont été proposés à Matz, mais il les a refusés car ils peuvent dégrader incroyablement les performances dans certains cas en dehors du web.
La version 2.2.12 est toute fraîche. Elle apporte des corrections de bogues et améliore le support de Bundler, vous permettant ainsi de gérer les dépendances de vos applications et charger les bonnes versions des gems utilisés sur vos projets.
L'installation et la mise à jour peuvent se faire en utilisant le gem passenger, puis en lançant passenger-install-apache2-module ou passenger-install-nginx-module. Brightbox fournit également des paquets pour Ubuntu.
Les développeurs de Passenger recommandent d'utiliser leur version de Ruby. Cette dernière se nomme de façon un peu pompeuse Ruby Entreprise Edition. C'est un Ruby 1.8.7 agrémenté de quelques patches pour améliorer la gestion de la mémoire et le comportement du ramasse-miettes (garbage collector). Ces patches ont été proposés à Matz, mais il les a refusés car ils peuvent dégrader incroyablement les performances dans certains cas en dehors du web.
En vrac, spécial Python
Pylons est un framework de développement web en Python, dont la version 1.0 vient de sortir (sous licence BSD). Là où Django se positionne comme un framework avec des composants fortement intégrés entre eux, Pylons privilégie un couplage lâche et la réutilisation des bibliothèques Python existantes. Par exemple, pour le templating, Pylons vous laisse le choix entre Mako, Genshi, Jinja2 ou ce que vous voulez. Pylons est utilisé par des sites à fort trafic comme Reddit ou Bittorent.
SQL Alchemy est à la fois une boîte à outils pour manipuler du SQL en Python et un ORM (sous licence MIT). Vous pouvez par exemple l'utiliser pour la partie Modèles d'une application Pylons. La version 0.6 est compatible avec Python 2.4+, Python 3 et Jython.
Fabric est un outil de déploiement et d'administration à distance (sous licence BSD) que l'on pourrait comparer à Capistrano dans le monde Ruby. Son utilisation se fait en deux temps : on commence par écrire un fabfile qui décrit des tâches en utilisant les modules Python fournis par Fabric, puis on peut exécuter ses tâches sur une ou plusieurs machines distantes via l'outil en ligne de commande fab.
Green Unicorn, ou gunicorn, est un serveur HTTP qui respecte l'interface WSGI (sous licence MIT). Son modèle pre-fork s'inspire du projet Ruby Unicorn et permet de faire tourner des applications dans les principaux frameworks Python (Pylons, Turbogears 2, Django). Le développement de gunicorn a commencé à la fin de l'année dernière, mais il avance vite : il en est déjà à la version 0.9.1.
Plone va participer pour la 5ème fois au Google Summer of Code. Quatre projets ont commencé :
SQL Alchemy est à la fois une boîte à outils pour manipuler du SQL en Python et un ORM (sous licence MIT). Vous pouvez par exemple l'utiliser pour la partie Modèles d'une application Pylons. La version 0.6 est compatible avec Python 2.4+, Python 3 et Jython.
Fabric est un outil de déploiement et d'administration à distance (sous licence BSD) que l'on pourrait comparer à Capistrano dans le monde Ruby. Son utilisation se fait en deux temps : on commence par écrire un fabfile qui décrit des tâches en utilisant les modules Python fournis par Fabric, puis on peut exécuter ses tâches sur une ou plusieurs machines distantes via l'outil en ligne de commande fab.
Green Unicorn, ou gunicorn, est un serveur HTTP qui respecte l'interface WSGI (sous licence MIT). Son modèle pre-fork s'inspire du projet Ruby Unicorn et permet de faire tourner des applications dans les principaux frameworks Python (Pylons, Turbogears 2, Django). Le développement de gunicorn a commencé à la fin de l'année dernière, mais il avance vite : il en est déjà à la version 0.9.1.
Plone va participer pour la 5ème fois au Google Summer of Code. Quatre projets ont commencé :
Nouvelle base de données clés-valeurs : Kyoto Cabinet 1.0
Mikio Hirabayashi est un ingénieur qui travaille pour un réseau social japonais, mixi.jp. Pour faire face à la montée en charge, il a écrit une base de données très rapide de type clés-valeurs : Tokyo Cabinet. C'est une bibliothèque écrite en C, avec des bindings Ruby, Perl, Java et Lua, et distribuée sous licence LGPL.
Tokyo Cabinet est très rapide, mais son auteur n'était pas satisfait des performances en concurrence sur des machines avec de nombreux cores. Il a donc écrit son successeur : Kyoto Cabinet. Kyoto Cabinet est écrit en C++, et publié sous licence GPL. Des bindings Ruby, Perl, Python (2.x et 3.x) et Java sont disponibles.
Kyoto Cabinet est rapide (l'ordre de grandeur est un million de requêtes par seconde), ACID et capable de gérer un haut niveau de concurrence. Ses bases de données peuvent enregistrer jusqu'à 8 exabytes et peuvent être de différents types en fonction des caractéristiques recherchées (persistence, verrouillage par enregistrement, par page ou global, ordre de tri, algorithme de stockage).
Tokyo Cabinet bénéficie d'un service réseau, Tokyo Tyrant, et d'un moteur de recherche full-text, Tokyo Distopia. Les équivalents pour Kyoto Cabinet n'existent pas encore, mais sont prévus et devraient sortir d'ici la fin de l'année.
Note : Pour ceux qui s'intéressent aux bases de données, le NoSQL Summer est l'occasion d'en apprendre plus. Le principe est simple : se réunir régulièrement pour discuter d'un papier scientifique autour des bases de données. Le lancement se fera le 21 juin à la Cantine pour Paris, mais vous pouvez n'assister qu'à une seule rencontre si vous le souhaitez. L'entrée est libre, la seule chose que l'on vous demande est d'avoir lu le papier sélectionné avant de venir. Si vous êtes dans une ville qui n'est pas encore couverte, rien ne vous empêche de trouver 2 ou 3 volontaires et de contacter les organisateurs.
Tokyo Cabinet est très rapide, mais son auteur n'était pas satisfait des performances en concurrence sur des machines avec de nombreux cores. Il a donc écrit son successeur : Kyoto Cabinet. Kyoto Cabinet est écrit en C++, et publié sous licence GPL. Des bindings Ruby, Perl, Python (2.x et 3.x) et Java sont disponibles.
Kyoto Cabinet est rapide (l'ordre de grandeur est un million de requêtes par seconde), ACID et capable de gérer un haut niveau de concurrence. Ses bases de données peuvent enregistrer jusqu'à 8 exabytes et peuvent être de différents types en fonction des caractéristiques recherchées (persistence, verrouillage par enregistrement, par page ou global, ordre de tri, algorithme de stockage).
Tokyo Cabinet bénéficie d'un service réseau, Tokyo Tyrant, et d'un moteur de recherche full-text, Tokyo Distopia. Les équivalents pour Kyoto Cabinet n'existent pas encore, mais sont prévus et devraient sortir d'ici la fin de l'année.
Note : Pour ceux qui s'intéressent aux bases de données, le NoSQL Summer est l'occasion d'en apprendre plus. Le principe est simple : se réunir régulièrement pour discuter d'un papier scientifique autour des bases de données. Le lancement se fera le 21 juin à la Cantine pour Paris, mais vous pouvez n'assister qu'à une seule rencontre si vous le souhaitez. L'entrée est libre, la seule chose que l'on vous demande est d'avoir lu le papier sélectionné avant de venir. Si vous êtes dans une ville qui n'est pas encore couverte, rien ne vous empêche de trouver 2 ou 3 volontaires et de contacter les organisateurs.
3 frameworks de développement : Ruby on Rails, Snap et Lamson
Ce week-end, la version 2.3.6 de Ruby on Rails est sorti, suivi de peu par la version 2.3.7. Ces versions apportent un bon nombre de correctifs pour divers problèmes, mais surtout préparent le terrain pour Rails 3. Certaines API vont être supprimées dans Rails 3, et la version 2.3.6 permet d'être averti si votre application Rails utilise une de ces API.
La version 3 va également apporter un grand plus au niveau de la sécurité en échappant par défaut toutes les chaînes de caractères pouvant être sujettes à une attaque XSS. La version 2.3.6 devait permettre de tester ce comportement en installant le greffon Rails XSS. Mais, certains commits n'ont pas été backportés depuis Rails3, rendant ainsi cette protection non seulement inefficace mais aussi source de plantages. Heureusement, la version 2.3.7 est sortie juste après pour réparer ça. Au final, si vous êtes un utilisateur de Rails, vous êtes encouragés à sauter la version 2.3.6 et à passer directement à la version 2.3.7.
Mise à jour : Rails 2.3.8 vient de sortir pour corriger un problème lorsque l'on n'utilise pas le greffon Rails XSS. C'est donc vers cette version qu'il faut migrer.
Et si vous préférez la programmation fonctionnelle, sachez que le développement web vous est aussi ouvert. Par exemple, Snap est un framework web en Haskell sous licence MIT. Snap se décompose en trois parties :
Enfin, Lamson est un framework de développement en Python sous la double licence BSD et GPL. Sa particularité est d'être un framework pour les mails. Il propose une approche similaire à celle de Django ou Ruby on Rails, mais pour développer des applications qui gèrent des mails. Vous avez ainsi la possibilité de router des mails entrants, d'utiliser le modèle MVC, d'utiliser des données en provenance de différentes bases de données (relationnelles ou non), d'utiliser un ORM si vous le souhaitez, ou encore d'écrire des tests unitaires. Bref, Lamson permet enfin d'écrire facilement des applications qui gèrent des mails, que ce soient des filtres anti-spams, des mailing-listes, ou des applications très spécifiques.
La version 3 va également apporter un grand plus au niveau de la sécurité en échappant par défaut toutes les chaînes de caractères pouvant être sujettes à une attaque XSS. La version 2.3.6 devait permettre de tester ce comportement en installant le greffon Rails XSS. Mais, certains commits n'ont pas été backportés depuis Rails3, rendant ainsi cette protection non seulement inefficace mais aussi source de plantages. Heureusement, la version 2.3.7 est sortie juste après pour réparer ça. Au final, si vous êtes un utilisateur de Rails, vous êtes encouragés à sauter la version 2.3.6 et à passer directement à la version 2.3.7.
Mise à jour : Rails 2.3.8 vient de sortir pour corriger un problème lorsque l'on n'utilise pas le greffon Rails XSS. C'est donc vers cette version qu'il faut migrer.
Et si vous préférez la programmation fonctionnelle, sachez que le développement web vous est aussi ouvert. Par exemple, Snap est un framework web en Haskell sous licence MIT. Snap se décompose en trois parties :
- Une bibliothèque serveur HTTP très rapide, qui s'appuie sur la boucle événementielle de la libev ;
- Une monade particulièrement bien adaptée au développement web ;
- Un moteur de templating XML qui permet de générer entre autres du HTML.
Enfin, Lamson est un framework de développement en Python sous la double licence BSD et GPL. Sa particularité est d'être un framework pour les mails. Il propose une approche similaire à celle de Django ou Ruby on Rails, mais pour développer des applications qui gèrent des mails. Vous avez ainsi la possibilité de router des mails entrants, d'utiliser le modèle MVC, d'utiliser des données en provenance de différentes bases de données (relationnelles ou non), d'utiliser un ORM si vous le souhaitez, ou encore d'écrire des tests unitaires. Bref, Lamson permet enfin d'écrire facilement des applications qui gèrent des mails, que ce soient des filtres anti-spams, des mailing-listes, ou des applications très spécifiques.
Passage d'Urbi en Open source
Urbi est un framework de développement pour la robotique visant à standardiser et simplifier l'écriture de modules et comportements pour les robots, en les rendant réutilisables et en facilitant l'interaction entre robots hétérogènes.
Il comprend:
Il comprend:
- Un modèle de composants C++ avec gestion de dataflow : UObject ;
- Un middleware permettant aux composants d'interagir localement ou en réseau ;
- Un langage de script parallèle et événementiel, urbiscript, pour orchestrer les interactions entre composants ;
- Un environnement d'exécution faisant le lien entre les composants et urbiscript.
En vrac, spécial Ruby
Il y a en ce moment pas mal d'activité autour de Ruby. JRuby 1.5 et Rubinius 1.0 ont été annoncés sur LinuxFr il y a quelques jours, et une troisième implémentation Ruby a franchi une étape importante récemment : MacRuby a atteint la version 0.6.
MacRuby est une implémentation de Ruby 1.9 (sous licence GPL) qui repose sur les technologies core de Mac OS X telles que Objective-C, LLVM et Foundation. Les premiers benchmarks montrent que MacRuby a des performances intéressantes à ce stade de développement, bien qu'en deçà de celles de Ruby 1.9.
Du côté du Ruby Summer of Code, les 20 projets sélectionnés ont été annoncés. Ceux-ci sont très variés, allant de l'amélioration de points spécifiques dans Ruby on Rails aux extensions en C dans JRuby, en passant par la contribution à Camping et Hackety Hack, deux projets initiés par Why the Lucky Stiff. À ce sujet, Smashing Magazine a publié la légende de _Why, dont je vous recommande fortement la lecture, que vous souhaitiez découvrir le personnage ou vous remémorer ses actes les plus glorieux.
Rubygems, l'outil de gestion de paquets spécifiques à Ruby, est sorti en version 1.3.7. La principale nouveauté est que rubygems.org devient le dépôt par défaut, remplaçant gems.rubyforge.org, qui va continuer de fonctionner pendant encore un bout de temps pour assurer la migration.
Haml et Sass sont deux projets Ruby liés pour des raisons historiques qui viennent de sortir en version 3 (sous licence MIT). Le premier est un moteur de templating qui permet d'écrire des templates très concis. Le second est une extension de CSS3 pour faciliter la vie des personnes qui doivent écrire et maintenir des CSS : Sass offre des variables (c'est quand même fou que CSS ne le propose pas de base !), des sélecteurs imbriqués, des mixins (plusieurs règles CSS regroupées sous un même nom que l'on peut utiliser à plusieurs endroits dans ses feuilles de style), et plein d'autres ajouts très utiles.
Pour finir, je souhaite parler de TomDoc. C'est un document qui liste un ensemble de règles pour commenter du code en Ruby. Il va à l'encontre des règles de RDoc, mais la syntaxe proposée par TomDoc me semble être une avancée suffisante pour que cela vaille la peine de marquer cette rupture. J'espère que les développeurs Ruby qui passent dans le coin seront du même avis que moi et vont se mettre à utiliser TomDoc.
MacRuby est une implémentation de Ruby 1.9 (sous licence GPL) qui repose sur les technologies core de Mac OS X telles que Objective-C, LLVM et Foundation. Les premiers benchmarks montrent que MacRuby a des performances intéressantes à ce stade de développement, bien qu'en deçà de celles de Ruby 1.9.
Du côté du Ruby Summer of Code, les 20 projets sélectionnés ont été annoncés. Ceux-ci sont très variés, allant de l'amélioration de points spécifiques dans Ruby on Rails aux extensions en C dans JRuby, en passant par la contribution à Camping et Hackety Hack, deux projets initiés par Why the Lucky Stiff. À ce sujet, Smashing Magazine a publié la légende de _Why, dont je vous recommande fortement la lecture, que vous souhaitiez découvrir le personnage ou vous remémorer ses actes les plus glorieux.
Rubygems, l'outil de gestion de paquets spécifiques à Ruby, est sorti en version 1.3.7. La principale nouveauté est que rubygems.org devient le dépôt par défaut, remplaçant gems.rubyforge.org, qui va continuer de fonctionner pendant encore un bout de temps pour assurer la migration.
Haml et Sass sont deux projets Ruby liés pour des raisons historiques qui viennent de sortir en version 3 (sous licence MIT). Le premier est un moteur de templating qui permet d'écrire des templates très concis. Le second est une extension de CSS3 pour faciliter la vie des personnes qui doivent écrire et maintenir des CSS : Sass offre des variables (c'est quand même fou que CSS ne le propose pas de base !), des sélecteurs imbriqués, des mixins (plusieurs règles CSS regroupées sous un même nom que l'on peut utiliser à plusieurs endroits dans ses feuilles de style), et plein d'autres ajouts très utiles.
Pour finir, je souhaite parler de TomDoc. C'est un document qui liste un ensemble de règles pour commenter du code en Ruby. Il va à l'encontre des règles de RDoc, mais la syntaxe proposée par TomDoc me semble être une avancée suffisante pour que cela vaille la peine de marquer cette rupture. J'espère que les développeurs Ruby qui passent dans le coin seront du même avis que moi et vont se mettre à utiliser TomDoc.
Rubinius 1.0 est sorti
Rubinius est une implémentation du langage de programmation Ruby, dont le code est placé sous licence BSD. Rubinius permet d'exécuter du code Ruby, mais vise également les objectifs suivants :
D'un point de vue plus technique, Rubinius est écrit majoritairement en Ruby, et pour les parties où ce n'est pas (encore) possible en C++. Il fonctionne avec une machine virtuelle dont le bytecode est transformé en code machine à l'exécution grâce à LLVM et utilise un garbage collector générationnel, précis et compactant. Et pour ceux qui seraient d'humeur taquine, je ne résiste pas à l'envie de mettre un petit lien vers un benchmark. Vous pouvez voir que Rubinius est l'implémentation Ruby la plus rapide, ou du moins, l'était en janvier quand le benchmark a été fait.
Si vous êtes convaincus, vous pouvez installer Rubinius soit en suivant les instructions officielles, soit en utilisant Ruby Version Manager. Je recommande d'utiliser la seconde solution, car RVM vous permet d'installer plusieurs implémentations de Ruby sur la même machine, d'installer des gems pour chacun d'eux et de passer d'une implémentation à l'autre sans problème.
- Rubinius est Threadsafe ;
- Son code est propre, lisible, facile à comprendre et à étendre ;
- Il est fiable et solide (avec l'aide de Valgrind) ;
- Et surtout, il apporte les dernières avancées de la recherche sur les machines virtuelles, les ramasses-miettes et les compilateurs à Ruby.
D'un point de vue plus technique, Rubinius est écrit majoritairement en Ruby, et pour les parties où ce n'est pas (encore) possible en C++. Il fonctionne avec une machine virtuelle dont le bytecode est transformé en code machine à l'exécution grâce à LLVM et utilise un garbage collector générationnel, précis et compactant. Et pour ceux qui seraient d'humeur taquine, je ne résiste pas à l'envie de mettre un petit lien vers un benchmark. Vous pouvez voir que Rubinius est l'implémentation Ruby la plus rapide, ou du moins, l'était en janvier quand le benchmark a été fait.
Si vous êtes convaincus, vous pouvez installer Rubinius soit en suivant les instructions officielles, soit en utilisant Ruby Version Manager. Je recommande d'utiliser la seconde solution, car RVM vous permet d'installer plusieurs implémentations de Ruby sur la même machine, d'installer des gems pour chacun d'eux et de passer d'une implémentation à l'autre sans problème.
Conférence EuroTcl 2010
La 9ème édition de la Conférence Européenne des Utilisateurs de Tcl/Tk aura lieu le 4 et le 5 juin 2010 à l'IGBMC près de Strasbourg.
Depuis 10 ans, une conférence européenne est organisée chaque année (sauf 2004) afin de permettre aux utilisateurs (professionnels et amateurs) et aux personnes impliquées dans le développement du langage de script Tcl/Tk de partager leurs expériences et de présenter leurs réalisations.
Vous pouvez vous inscrire et soumettre les résumés de vos présentations. La limite de soumission est fixée au 21 mai 2010.
Depuis 10 ans, une conférence européenne est organisée chaque année (sauf 2004) afin de permettre aux utilisateurs (professionnels et amateurs) et aux personnes impliquées dans le développement du langage de script Tcl/Tk de partager leurs expériences et de présenter leurs réalisations.
Vous pouvez vous inscrire et soumettre les résumés de vos présentations. La limite de soumission est fixée au 21 mai 2010.
Bibliothèque d'entrées/sorties météorologiques
Nous sommes heureux d'annoncer aujourd'hui la disponibilité de la première version stable publique de MeteoIO.
MeteoIO est une bibliothèque C++ sous licence LGPL v3 destinée à la gestion des entrées/sorties météorologiques ainsi que leur préprocessing dans le cadre des modèles numériques faisant usage de telles données. Cette bibliothèque à été conçue afin de libérer le développeur de modèles numériques de la gestion des entrées/sorties en lui offrant une bibliothèque robuste, stable, facile à utiliser et intégrée.
MeteoIO est une bibliothèque C++ sous licence LGPL v3 destinée à la gestion des entrées/sorties météorologiques ainsi que leur préprocessing dans le cadre des modèles numériques faisant usage de telles données. Cette bibliothèque à été conçue afin de libérer le développeur de modèles numériques de la gestion des entrées/sorties en lui offrant une bibliothèque robuste, stable, facile à utiliser et intégrée.
plugout-jpa : Bouml et génération de modèles pour JPA
plugout-jpa est sorti de la première version : c'est un plugout (extension) pour Bouml qui permet, comme son nom l'indique, de générer des modèles (et le code Java) prêt pour JPA, et donc pour le framework Play!.
Bouml est un suite d'outils UML 2 complète, rapide, extensible et sous licence GPL. Bouml est disponible sous Unix/Linux/Solaris, MacOS X (Power PC et Intel) et Windows. La dernière version, sortie ce 18 avril, est la 4.20.
Ceux qui utilisent JPA ont tous les mêmes questions avec les relations OneToMany et ManyToOne. Quel est le nom du rôle dans l'autre entité ? Comment écrire la méthode d'ajout dans la liste ? Ce plugout répond à la question: il génère cela directement à partir du modèle UML, en se basant sur les stéréotype de relations !
Bouml est un suite d'outils UML 2 complète, rapide, extensible et sous licence GPL. Bouml est disponible sous Unix/Linux/Solaris, MacOS X (Power PC et Intel) et Windows. La dernière version, sortie ce 18 avril, est la 4.20.
Ceux qui utilisent JPA ont tous les mêmes questions avec les relations OneToMany et ManyToOne. Quel est le nom du rôle dans l'autre entité ? Comment écrire la méthode d'ajout dans la liste ? Ce plugout répond à la question: il génère cela directement à partir du modèle UML, en se basant sur les stéréotype de relations !
Annonce de la sortie de Riak 0.10
Dans la grande famille des bases de données NoSQL, je vous ai déjà présenté Cassandra, MongoDB, Redis et FlockDB. Laissez-moi vous présenter un nouveau membre de cette famille : Riak.
Riak est une base de données distribuée de type clé-valeur, sous licence Apache 2. Basho, la société derrière Riak, s'est inspirée de Dynamo d'Amazon pour nous offrir un stockage qui scale facilement. En particulier, sa grande force repose sur son modèle distribué où toutes les machines jouent un rôle équivalent, ce qui apporte à la fois une grande résistance aux erreurs et la capacité d'ajouter ou retirer facilement des machines à la volée.
Dans la seconde partie de la dépêche, je vais présenter plus en détails Riak, puis vous parler des nouveautés de la version 0.10 sortie récemment. J'aborderai également bitcask, un moteur de stockage clé-valeur local, qui peut être utilisé pour le stockage par noeud de Riak. Je finirais par une note très rapide à propos de ripple, le client en Ruby pour Riak.
Riak est une base de données distribuée de type clé-valeur, sous licence Apache 2. Basho, la société derrière Riak, s'est inspirée de Dynamo d'Amazon pour nous offrir un stockage qui scale facilement. En particulier, sa grande force repose sur son modèle distribué où toutes les machines jouent un rôle équivalent, ce qui apporte à la fois une grande résistance aux erreurs et la capacité d'ajouter ou retirer facilement des machines à la volée.
Dans la seconde partie de la dépêche, je vais présenter plus en détails Riak, puis vous parler des nouveautés de la version 0.10 sortie récemment. J'aborderai également bitcask, un moteur de stockage clé-valeur local, qui peut être utilisé pour le stockage par noeud de Riak. Je finirais par une note très rapide à propos de ripple, le client en Ruby pour Riak.