Feeds:
Articles
Commentaires

Le big switch 2

11 jours après avoir migré mon blog de mon serveur Typo vers Blogger je viens à nouveau de switcher cette fois-ci vers WordPress.com ! Je parle bien d’un hébergement chez WordPress.com, il ne s’agit pas pour moi de revenir vers un auto-hébergement… Voici les différentes raisons :

  1. WordPress fait parti des blogs les plus avancés techniquement, et il dépasse de loin le service Blogger qui ne gère toujours pas les pages et le menu par onglet sans bricoler la CSS…
  2. Il est Opensource : WordPress.org
  3. L’hébergement chez WordPress.com me permet de m’affranchir de l’administration et des mises à jour.
  4. L’import (articles, commentaires et catégories) d’un blog Blogger en 2 clics.
  5. L’export XML.
  6. 3 Go d’espace disque gratuit.
  7. widgets.
  8. Statistiques de blog sans passer par un service tiers à la Google Analytics.
  9. Leurs services payant propose le Domain mapping pour un coût extrêmement modique (9.97$ /an ce qui revient à 7.27€ /an) ce qui me permet d’utiliser mon propre domaine.
  10. Le paiement via ce type de service est un excellent moyen de financer le libre. Ce dernier point est pour moi prioritaire car il est à mes yeux indispensable d’encourager les business modèles Opensource d’autant plus lorsqu’ils atteignent ce niveau de qualité technique.

Dans de précédent billets j’ai critiqué le fait que le Libre se focalisait sur le logiciel sans penser à fournir de services. J’avoue avoir sauté chez Google sans penser à regarder mon vieux compte WordPress. La faute est réparée.

Le big switch

Suite à un problème lors d’une manipulation sur mon serveur, mon blog en typo a refusé de repartir.
Ce qui me démangeais depuis un moment a été fait, j’ai donc migré mon blog sur la plateforme de Google, blogger.
J’assume complètement le fait de céder aux sirènes du Minitel 2.0, je n’ai plus l’énergie ni l’envie de maintenir mon blog comme avant, afin de mon concentrer exclusivement sur mes projets.

Blogger a 2 avantages qui compensent le fait d’être hébergé chez le “Mal absolu” :

  1. il permet d’exporter ses données au format XML
  2. il permet d’utiliser son propre nom de domaine

Je blogue depuis 2004 ce qui constitue 264 articles de valeur très inégale. Ayant eu la flemme de faire un script d’export vers Blogger j’ai réinjecté manuellement quelques articles, les autres suivront peut être.

Typo reste néanmoins un excellent blog opensource. Cependant les nouvelles plateformes de micro-blogging comme Twitter ou Identi.ca poussent à limiter l’usage des blogs et les rendent moins incontournable.

iMotion

Cela faisait un moment que je n’avais plus posté sur iMotion, en août dernier apparemment !

J’ai repris le code pour y ajouter le support des fichiers vidéos. Je butais depuis un moment sur un problème de fige de la vidéo lors du changement d’un effet pendant la lecture, problème que je n’ai pas avec la webcam. Cette technique de changement dynamique d’un élément lors de la lecture dans le pipeline est uniquement documenté ici : cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-block.txt#n112 mais je n’ai pas trouvé de soft qui l’implémente …

Premièrement j’avais oublié l’indication 8 :

8) make sure element4 is in the same state as the rest of the elements. The element should at least be PAUSED.

Mon pipeline est en statut PLAYING donc en passant l’élément effect dans ce statut le problème de fige de la vidéo a été résolu.

Deuxièmement le schéma de la documentation montre un pipeline de 3 éléments (plus un 4 ème qui remplace dynamiquement le 2ème). Or cela m’a induis en erreur car le mien en possède 6 :

  1. filesrc
  2. decodebin2
  3. ffmpegcolorspace
  4. videoscale
  5. effectv
  6. ximagesink

Lorsque la documentation indique de bloquer l’élément 1 il s’agit en fait de l’élément qui précède celui que l’on veut remplacer. Dans iMotion je souhaite changer dynamiquement d’effet donc c’est l’élément 4 qui doit être bloqué.

Pour ceux qui débutent avec GStreamer voici une excellente présentation : blog.nicolargo.com/2009/03/gstreamer-la-theorie.html

Voici une capture d’écran avec l’effet edgetv suivie de l’implémentation correcte du code :

voidVideoManager::switch_effect (Glib::ustring a_name){   m_effect_name = a_name;   bool res = false;   GstEvent *event;

   // replay pipeline if it paused

   gst_element_get_state(m_pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);   gst_element_set_state (m_pipeline, GST_STATE_PLAYING);

   // wait until pipeline playing   if (gst_element_get_state (m_pipeline, NULL, NULL, GST_CLOCK_TIME_NONE) == GST_STATE_CHANGE_FAILURE) {std::cout << "Failed to go into PLAYING state" << std::endl;exit(1);}

std::cout << "PLAYING state" << std::endl;

GstPad *videoscale_sink_pad = gst_element_get_static_pad (m_videoscale, "sink");GstPad *videoscale_src_pad = gst_element_get_static_pad (m_videoscale, "src");

if (videoscale_src_pad) {res = gst_pad_set_blocked_async (videoscale_src_pad, TRUE, (GstPadBlockCallback) block_callback, m_pipeline);std::cout << "blocked pad : " << res << std::endl;

if (!res) {std::cout << "can not block source pad : " << res << std::endl;exit (1);} else {std::cout << "blocked source pad : " << res << std::endl;}

}else {std::cout << "can not get source pad : " << res << std::endl;exit (1);}

if (m_effect){GstPad *effect_sink_pad = gst_element_get_static_pad (m_effect, "sink");GstPad *effect_src_pad = gst_element_get_static_pad (m_effect, "src");

// remove effect elementgst_element_get_state(m_effect, NULL, NULL, GST_CLOCK_TIME_NONE);gst_element_set_state (m_effect, GST_STATE_NULL);gst_element_get_state(m_effect, NULL, NULL, GST_CLOCK_TIME_NONE);

if (gst_element_get_state (m_effect, NULL, NULL, GST_CLOCK_TIME_NONE) == GST_STATE_CHANGE_FAILURE) {std::cout << "Failed to state null on m_effect" << std::endl;exit(1);}

gst_element_unlink_pads (m_videoscale,"src",m_effect,"sink");

std::cout << "UNLINK PAD" << std::endl;

/************ seems to not be usefull ************/gst_pad_add_event_probe (effect_src_pad, G_CALLBACK (source_pad_event_probe), effect_src_pad);event = gst_event_new_eos ();gst_pad_send_event (effect_sink_pad, event);gst_object_unref (effect_sink_pad);std::cout << "SEND EOS" << std::endl;/**************************************************/

gst_element_unlink_pads (m_effect,"src",m_sink,"sink");

std::cout << "UNLINK PAD 2" << std::endl;gst_element_get_state(m_effect, NULL, NULL, GST_CLOCK_TIME_NONE);

gst_bin_remove (GST_BIN (m_bin), m_effect);

std::cout << "GST BIN REMOVED" << std::endl;

}else{gst_element_unlink_pads (m_videoscale,"src",m_sink,"sink");}

if ( m_effect_name != "none"){m_effect = gst_element_factory_make (m_effect_name.c_str(), "effect");gst_bin_add (GST_BIN (m_bin), m_effect);gst_element_link_pads (m_videoscale,"src",m_effect,"sink");gst_element_link_pads (m_effect,"src",m_sink,"sink");

// Indication 8gst_element_set_state (m_effect, GST_STATE_PLAYING);       std::cout << "new effect and linked in" << std::endl;   }   else   {       gst_element_link_pads (m_videoscale,                              "src",                              m_sink,                              "sink");

       m_effect = 0;       std::cout << "no effect" << std::endl;

   }

   if (videoscale_src_pad) {       res = gst_pad_set_blocked_async (videoscale_src_pad, FALSE,(GstPadBlockCallback) block_callback, m_pipeline);       gst_object_unref (videoscale_src_pad);   }    std::cout << "unblocked source pad : " << res << std::endl;    std::cout << m_effect_name << std::endl;}

Avec ce titre pompeux je voulais depuis longtemps écrire un article sur ce thème. Je l’avais un peu abordé avec ce billet sur beanstalkd, cependant je désirais en parler de manière plus généraliste.

Finalement le Grand Ternet a encore une fois encouragé ma feignantise car j’ai trouvé cette suite de 3 petits excellents articles sur haute-disponibilite.net qui expliquent très bien ce domaine :

A compléter avec cet article très riche d’un co-fondateur de last.fm : Anti-RDBMS: A list of distributed key-value stores. Il faut ajouter à cette liste déjà imposante l’étonnant Tokyo cabinet ainsi que nanite basé sur RabbitMQ et cela démontrera aux plus incrédules l’importance d’un bon backend asynchrone et les énormes avantages que cela apporte en terme de réactivité pour l’utilisateur.

Cependant la tentation sera certainement de plus en plus grande d’utiliser les technologies clés en main de cloud computing offertes par Google et Amazon… A quand un service de cloud computing opensource à disposition uniquement, bien sûr, des sites opensource ? :)
Pour finir, à lire également l’excellent article de Greg, {key, value} qui comporte des détails techniques et des exemples (attention par contre sur la partie memcached, car memcachedb ou memcacheq seront plus pertinent pour cet usage).

RubyCamp

Le premier RubyCamp s’est bien déroulé ce samedi. Je remercie Damien Mathieu pour l’organisation et O2Sources pour avoir sponsorisé l’évènement avec des pizzas :) .

Quelques Suisses avaient fait le trajet, Jean-Michel Garnier un expatrié en Espagne que j’avais déjà vu à Paris on Rails présentait cucumber. Guillaume Cottenceau (ancien développeur de frozen bubble) a présenté Ruby/GTK+. Damien a présenté Ruby et Gaspard Bucher un impressionnant compilateur de template (zafu).

Pour un premier Barcamp à Lyon j’ai trouvé ça très réussi et on est tous d’accord pour remettre ça cette année. Toutes les infos sur le wiki RubyCampLyon.

Photos et photos

World of Goo

Suite à cet article sur le jeu World of Goo j’ai testé la démo et j’avoue avoir été bluffé. Outre l’usage très original d’un moteur physique le jeu possède une atmosphère très prenante, qui ressemble fortement au style de Tim Burton. De plus il est extrêmement bien traduit et le fin du fin propose un portage Linux natif.

Après avoir fini le premier niveau de la démo j’ai fini par l’acheter, pour 16€ ce jeu les vaut largement. A essayer.

Dans un autre genre j’ai essayé Celetania mais pour l’instant sans succès pour obtenir du son.

RubyCamp

Je n’avais pas posté depuis 2 mois, donc puisqu’on est encore en janvier jusqu’à ce soir, je vous souhaite une bonne année :)

Comme l’indique le titre il va y avoir un Barcamp à Lyon le 21 février consacré à Ruby. Je viens de m’y inscrire, et même si je n’ai aucune idée de ce que je pourrais présenter cela sera l’occasion de revoir ce bon vieux Guillaume Desrat ainsi que Lucas Bonnet :)

Avec de la chance j’aurais peut être avancé un peu sur mon projet perso en Rails, et aurais 2-3 trucs à dire… En tout cas ça serait bien que ce genre de réunion soit récurrente, car c’est très frustrant de voir régulièrement des actions à Paris et rien à Lyon.

before_filter :rails_party

Si vous suivez l’actualité RubyonRails, vous savez sans doute que l’édition 2008 de Paris on Rails a lieu le 1er décembre à la Cité des sciences. Par contre vous ne savez peut être pas qu’une Rails party est organisé la vieille ce dimanche 30 novembre. Toutes les infos ici : rails party 2008 et inscription ici. Ils ont bien de la chance ces parisiens ! Quand est-ce que Lyon sera à la hauteur de sa dimension … ?

Pour enchainer sur le thème Ruby, j’ai réalisé une nouvelle et sans doute dernière version de Geekast 0.1.3 afin de fixer ce bug. Peercast n’étant plus maintenu par son développeur la motivation n’y est plus et je suis de plus en apprentissage du C++ sur iMotion un autre projet perso. Quoi qu’il en soit je ne compte pas abandonner Ruby qui est un vrai plaisir à utiliser et complémentaire à un langage compilé.

Depuis 2000 je ne travaillais que sous environnement GNU/Linux et je dois avouer que revenir travailler sous l’environnement Windows est déprimant car néfaste à la productivité. Parmi les griefs je peux citer :

  • Pas de bureaux virtuels
  • Pas de gestionnaire de fenêtre digne de ce nom :
    • impossibilité de fixer une fenêtre en avant plan
    • impossibilité de fixer une fenêtre sur de multiple bureaux, puisqu’un seul bureau
    • pas de fenêtre semi-transparente.
  • Pas de fenêtre “shell” pouvant s’afficher sur tout l’écran
  • Pas de shell
  • Pas d’éditeur de texte/code digne de ce nom par défaut

Inutile de discuter de ces points, à moins de vouloir passer pour un “intégriste”, car comment faire comprendre cela à des personnes qui n’ont même pas idée que tout ça puisse exister. Ca serait comme vouloir expliquer à des agriculteurs qui ne connaissent que la pioche que les tracteurs existent … Windows n’est définitivement pas un système professionnel, encore faut-il avoir utilisé GNU/Linux quelques mois pour s’en rendre compte. Il ne doit son succès sur le bureau qu’à l’interaction étroite et imposée par Microsoft avec la version serveur.

Du coup cela me fait sourire de voir certains s’exciter pour faire le prosélytisme du Libre auprès des entreprises. Microsoft est culturellement ancré dans les entreprises depuis la disparition des gros systèmes dans la fin des années 80. Tout leur système d’information est enchainé aux outils de Microsoft depuis cette époque. Les vrais décideurs, ceux qui ont vraiment le pouvoir d’imposer un changement d’outils en profondeur, tel que le nécessiterait un passage à GNU/Linux, ces décideurs là n’y connaissent rien en informatique, et je ne parle même pas du DSI qui lit 01 Informatique, lui est bien trop loin de la tête de l’entreprise pour avoir, en supposant qu’il le souhaite, une telle influence. Autour de ça gravite tous les informaticiens nourris à Microsoft pendant leur étude, bref tous ces informaticiens qui font tourner leur boite et qui n’auront de toute manière pas la moindre envie de faire l’effort de changer leurs habitudes, ce que je comprend volontiers, l’informatique n’étant en rien un devoir de passion.

Si changement il doit y avoir chez les professionnels, il devrait se faire d’une part via les écoles, quand celles-ci ne signeront plus de partenariat avec Microsoft pour enseigner essentiellement leurs outils. Mais en même temps on leur demande aussi d’enseigner sur les outils du marché … D’autres part le changement aura lieu chez les particuliers. Changer d’OS chez un particulier est malgré tout nettement moins contraignant qu’en entreprise et ne dépend que de lui. Et l’histoire prouve que le succès de Microsoft en entreprise à eu lieu lorsque les utilisateurs avaient poussé pour avoir le même système que chez eux à leur bureau. La micro-informatique leur a permis de découvrir le pouvoir de contrôler sa machine contrairement aux terminaux. En effet quel délice de pouvoir installer n’importe quel logiciel (suivi de sa cohorte de virus et spyware bien sûr). Quel délice d’avoir un plus gros CPU, plus de RAM, ou un plus gros écran que le collègue de bureau …

L’utilisateur de GNU/Linux chez lui est un atout pour pouvoir percer un jour en entreprise. Car cet utilisateur est à même de pouvoir comparer et donc de juger des avantages du système GNU/Linux. Il est par définition impossible de convaincre un utilisateur qui n’a qu’une seule vision de l’informatique, et ça c’est un fait indiscutable.

Enfin, qu’il y ait sur le marché des étudiants formés aussi au Libre et des utilisateurs éclairés, c’est malgré tout insuffisant pour faire basculer une entreprise dont le SI est enchaîné depuis des années et dont les réels décideurs n’ont aucune connaissance des enjeux informatiques.

Si l’on admet ces faits il convient de penser que seul les entreprises récentes, possédant des dirigeants éclairés seront à même d’envisager l’utilisation de logiciels libres au sein de leur SI, et non pas de manière anecdotique sur le poste de travail. Attaquer les entreprises de front est une perte de temps pour la communauté. Je pense entre autre au récent débat qu’il y a eu sur les listes de l’ALDIL au sujet du vendredi dédié aux entreprises pendant les JDLL. 10 ans de JDLL dont le vendredi est pratiquement vide de tout représentant d’entreprise (DSI, commerciaux, ingénieurs ou techniciens), et ce malgré de multiples efforts vers les entreprises locales, il serait temps de constater les faits et concentrer les faibles énergies des bénévoles vers la communauté…

A l’heure des SOA la stratégie du libre est essentiellement orientée en concurrence directe avec Microsoft. Or les entreprises envisagent de plus en plus à migrer vers des services en ligne, et bien sûr Google en est le nouveau Dieu. A la conférence de Frédéric Couchet aux JDLL, je vous laisse deviner combien de bras se sont levé pour avouer l’usage de Gmail (moi le premier)… Or la seul réponse du Libre est de dénoncer la migration d’Internet en Minitel 2.0 et de proposer l’auto-hébergement chez soi. C’est en rien crédible.
La réponse du Libre devra se faire en proposant également des services et non plus uniquement des outils. Que le grand public doive mettre en place physiquement (matériels et logiciels) chez lui les outils afin d’héberger de sa vie numérique n’est pas une réponse crédible. Et même en faisant abstraction de la difficulté technique, ou en supposant que le Libre propose un jour une solution out of the box pour gérer ses mails, photos, vidéos, musiques, (clé gpg, ssh), etc, physiquement chez soi, il n’est pas concevable de conserver cela uniquement dans un placard.

Certaines banques proposent un coffre numérique, afin d’y stocker nos documents vitaux. Encore un service minitel 2.0 sans aucun doute, mais pourtant utile et qui le sera de plus en plus avec la numérisation des services de l’Etat. Que nous offre le Libre comme alternative ? Rien.

Alors au lieu de perdre son temps en prosélytisme vers des entreprises sourdes et en dénonciation de Minitelisation inutile, concentrons nous sur les communautés afin de développer des services comme nous l’avons si bien fait avec les outils. Concentrons-nous sur le grand public, concentrons-nous pour aider les développeurs à faire du libre. Car sans développeurs et utilisateurs il n’y a pas de logiciels, de documentations et de services, le reste ne fait que graviter autour de ce noyau, c’est ce noyau qu’il faut absolument consolider et développer.

Dans la continuité de ma migration vers Fedora sur mes desktops, je viens de migrer mon serveur dedibox sous Centos la version gratuite de Red Hat Enterprise Linux. Même si cet OS est très robuste et maintenu 7 ans, on y trouve moins de paquet qu’ailleurs, aussi j’ai ajouté le dépôt Fedora dédié à Centos, EPEL. J’ai pu ainsi installer Nginx et ejabberd 2.0.2. J’ai été surpris de trouver dans les dépôts des gems tel que Rails, mais malheureusement celui-ci ne fonctionne pas car il a été lié à une version gem de rake trop ancienne (0.7). C’est bien gentil de vouloir packager les gems mais encore faut-il le faire correctement :) Donc téléchargement de rubygems 1.3 et installation classique des gems, cela fonctionne très bien, je ne vois pas l’intérêt de faire un double travail côté distribution…

C’est pour moi l’occasion de quitter le bon vieux couple apache/mongrel et tester le fameux nginx / thin. Grâce à cette doc thin-nginx-with-rails, j’ai pu rapidement faire tourner mon blog avec thin et nginx. A voir ce que cela donnera sur de futurs projets perso plus gourmant qu’un blog. Pour info, pour pouvoir utiliser le fichier rake par thin il suffit de le copier dans lib/tasks/thin.rake du projet Rails.Et pour la conf nginx dans /etc/nginx/conf.d/upstream-fair.conf

Older Posts »