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

lundi 30 juin 2014

My Q2-2014 report

Summary of what I did last quarter (regular l10n-drivers work such as patch reviews, pushes to production, meetings and past projects maintenance excluded) .

Australis release

At the end of April, we shipped Firefox 29 which was our first major redesign of the Firefox user interface since Firefox 4 (released in 2011). The code name for that was Australis and that meant replacing a lot of content on to introduce this new UI and the new features that go with it. That also means that we were able to delete a lot of old content that now had become really obsolete or that was now duplicated on our support site.

Since this was a major UI change, we decided to show an interactive tour of the new UI to both new users and existing users upgrading to the new version. That tour was fully localized in a few weeks time in close to 70 languages, which represents 97.5% of our user base. For the last locales not ready on time, we either decided to show them a partially translated site (some locales had translated almost everything or some of the non-translated strings were not very visible to most users, such as alternative content to images for screen readers) or to let the page fall back to the best language available (like Occitan falling back to French for example). was also updated with 6 new product pages replacing a lot of old content as well as updates to several existing pages. The whole site was fully ready for the launch with 60 languages 100% ready and 20 partially ready, all that done in a bit less than 4 weeks, parallel to the webdev integration work.

I am happy to say that thanks to our webdev team, our amazing l10n community and with the help of my colleagues Francesco Lodolo (also Italian localizer) and my intern Théo Chevalier (also French localizer), we were able to not only offer a great upgrading experience for the quasi totality of our user base, we were also able to clean up a lot of old content, fix many bugs and prepare the site from an l10n perspective for the upcoming releases of our products.

Today, for a big locale spanning all of our products and activities, is about 2,000 strings to translate and maintain (+500 since Q1), for a smaller locale, this is about 800 strings (+200 since Q1). This quarter was a significant bump in terms of strings added across all locales but this was closely related to the Australis launch, we shouldn't have such a rise in strings impacting all locales in the next quarters.

Transvision releases

Last quarter we did 2 releases of Transvision with several features targeting out 3 audiences: localizers, localization tools, current and potential Transvision developers.

For our localizers, I worked on a couple of features, one is quick filtering of search results per component for Desktop repositories (you search for 'home' and with one click, you can filter the results for the browser, for mail or for calendar for example). The other one is providing search suggestions when your search yields no results with the best similar matches ("your search for 'lookmark' yielded no result, maybe you were searching for 'Bookmark'?").

For the localization tools community (software or web apps like Pontoon, Mozilla translator, Babelzilla, OmegaT plugins...), I rewrote entirely our old Json API and extended it to provide more services. Our old API was initially created for our own purposes and basically was just giving the possibility to get our search results as a Json feed on our most popular views. Tools started using it a couple of years ago and we also got requests for API changes from those tool makers, therefore it was time to rewrite it entirely to make it scalable. Since we don't want to break anybody's workflow, we now redirect all the old API calls to the new API ones. One of the significant new service to the API is a translation memory query that gives you results and a quality index based on the Levenshtein distance with the searched terms. You can get more information on the new API in our documentation.

I also worked on improving our internal workflow and make it easier for potential developers wanting to hack on Transvision to install and run it locally. That meant that now we do continuous integration with Travis CI (all of our unit tests are ran on each commit and pull request on PHP 5.4 and 5.5 environments), we have made a lot of improvements to our unit tests suite and coverage, we expose to developers peak memory usage and time per request on all views so as to catch performance problems early, and we also now have a "dev" mode that allows getting Transvision installed and running on the PHP development server in a matter of minutes instead of hours for a real production mode. One of the blockers for new developers was the time required to install Transvision locally. Since it is a spidering tool looking for localized strings in Mozilla source repositories, it needed to first clone all the repositories it indexes (mercurial/git/svn) which is about 20GB of data and takes hours even with a fast connection. We are now providing a snapshot of the final extracted data (still 400MB ;)) every 6 hours that is used by the dev install mode.

Check the release notes for 3.3 and 3.4 to see what other features were added by the team (/ex: on demand TMX generation or dynamic Gaia comparison view added by Théo, my intern).

Web dashboard / Langchecker

The main improvement I brought to the web dashboard is probably this quarter the deadline field to all of our .lang files, which allows to better communicate the urgency of projects and for localizers are an extra parameter allowing them to prioritize their work.

Theo's first project for his internship was to build a 'project' view on the web dashboard that we can use to get an overview of the translation of a set of pages/files, this was used for the Australis release (ex: but can be used to any other project we want to define , here is an example for the localization of two Android Add-ons I did for the World Cup that we did and tracked with .lang files.

We brought other improvements to our maintenance scripts for example to be able to "bulk activate" a page for all the locales ready, we improved our locamotion import scripts, started adding unit tests etc. Generally speaking, the Web dashboard keeps improving regularly since I rewrote it last quarter and we regularly experiment using it for more projects, especially for projects which don't fit in the usual web/product categories and that also need tracking. I am pretty happy too that now I co-own the dashboard with Francesco who brings his own ideas and code to streamline our processes.

Théo's internship

I mentionned it before, our main French localizer Théo Chevalier, is doing an internship with me and Delphine Lebédel as mentors, this is the internship that ends his 3rd year of engineering (in a 5 years curriculum). He is based in Montain View, started early April and will be with us until late July.

He is basically working on almost all of the projects I, Delphine and Flod work on.

So far, apart from regular work as an l10n-driver, he has worked for me on 3 projects, the Web Dashboard projects view, building TMX files on demand on Transvision and the Firefox Nightly localized page on This last project I haven't talked about yet and he blogged about it recently, in short, the first page that is shown to users of localized builds of Firefox Nightly can now be localized, and by localized we don't just mean translated, we mean that we have a community block managed by the local community proposing Nightly users to join their local team "on the ground". So far, we have this page in French, Italian, German and Czech, if your locale workflow is to translate mozilla-central first, this is a good tooll for you to reach a potential technical audience to grow your community .


This quarter, I found 7 new localizers (2 French, 1 Marahati, 2 Portuguese/Portugal, 1 Greek, 1 Albanian) to work with me essentially on content. One of them, Nicolas Delebeque, took the lead on the Australis launch and coordinated the French l10n team since Théo, our locale leader for French, was starting his internship at Mozilla.

For Transvision, 4 people in the French community (after all, Transvision was created initially by them ;)) expressed interest or small patches to the project, maybe all the efforts we did in making the application easy to install and hack are starting to pay, we'll probably see in Q3/Q4 :)

I spent some time trying to help rebuild the Portugal community which is now 5 people (instead of 2 before), we recently resurrected the domain name to actually point to a server, the MozFR one already hosting the French community and WoMoz (having the French community help the Portuguese one is cool BTW). A mailing list for Portugal was created (accessible also as nntp and via google groups) and the #mozilla-portugal IRC channel was created. This is a start, I hope to have time in Q3 to help launch a real Portugal site and help them grow beyond localization because I think that communities focused on only one activity have no room to grow or renew themselves (you also need coding, QA, events, marketing...).

I also started looking at Babelzilla new platform rewrite project to replace the current aging platform ( to see if I can help Jürgen, the only Babelzilla dev, with building a community around his project. Maybe some of the experience I gained through Transvision will be transferable to Babelzilla (was a one man effort, now 4 people commit regularly out of 10 committers). We'll see in the next quarters if I can help somehow, I only had time to far to install the app locally.

In terms of events, this was a quiet quarter, apart from our l10n-drivers work week, the only localization event I was in was the localization sprint over a whole weekend in the Paris office. Clarista, the main organizer blogged about it in French, many thanks to her and the whole community that came over, it was very productive, we will definitely do it again and maybe make it a recurring event.


This quarter was a good balance between shipping, tooling and community building. The beginning of the quarter was really focused on shipping Australis and as usual with big releases, we created scripts and tools that will help us ship better and faster in the future. Tooling and in particular Transvision work which is probably now my main project, took most of my time in the second part of the quarter.

Community building was as usual a constant in my work, the one thing that I find more difficult now in this area is finding time for it in the evening/week end (when most potential volunteers are available for synchronous communication) basically because it conflicts with my family life a bit. I am trying to be more efficient recruiting using asynchronous communication tools (email, forums…) but as long as I can get 5 to 10 additional people per quarter to work with me, it should be fine with scaling our projects.

lundi 7 avril 2014

My Q1-2014 report

Here is what I did in Q1

Tools and code

This quarter we have made 2 releases of Transvision (3.1 and 3.2). For 3.1, most of the credit goes to my colleague (and Italian localizer) Francesco Lodolo who integrated his productization scripts into the app and worked on redesigning the menus and making the app better in responsive mode, my work on 3.1 was limited on performance patches and release management. Transvision 3.2 received a lot more of my code as it integrated one major new feature (planned since I took the project under my umbrella two years ago), which is indexing all translations of our flagship website So now Transvision is no longer a search engine and QA tool for all of our products translations, it also supports websites using the .lang format (next up is indexing websites using gettext). From a developper perspective, this is also the release in which we automate the generation of the documentation of our classes thanks to phpDocumentor. Currently I am working on a better MVC approach and organization of code so as to work on features such as atom feeds, on the fly generation of TMX files and other more flexible export features, it may be in addition or in replacement of the TMX files we generate at extraction time. Caching is also in the pipe, the app is currently very fast and responsive but caching could help us extend more our external API to more time consuming data generation.

A personal achievement is that I finally rewrote my old Web Dashboard (whose code dated back to 2007) and moved that to github. Two new features, direct query of web localization bugs per locale on Bugzilla and display of the translation status for most of the projects hosted on Verbatim, our web localization platform, the latter was a patch by Francesco. The big feature is that the code went from 6000 lines of spaghetti code to 400 clean code, old features that made sense 7 years ago and now useless were removed and the fact that we can now track work in Bugzilla per locale allowed cutting a lot of code. Pretty happy that this was totally transparent to the user and that we are already starting to add new features to help us ship software!

On the Langchecker side, the tool we use to track .lang based projects and deploy lang files on repositories, I added per locale json feeds for the status of the locale and it now warns about invalid metadata and can now removes obsolete or invalid tags that we use on to activate a feature for a locale on a page. We also used it to expose strings from our first project based on Pontoon.

Other small tools of mine got updated, my mass bug filing script can now file bugs marked as mozilla confidential, something we needed for Mobile World Congress pages, I whipped up a script using Transvision data to know the distribution of strings across components in Firefox/FirefoxOS which allows specifically to know how many strings we have for devtools (potentially a future Transvision feature) etc.

All in all, I'd say I spent about 30% of my time this quarter hacking on code, which is cool.

Events and community

This quarter I attended one event outside of Paris, Fosdem. As usual it was interesting in terms of networking with European open source hacktivists. I also organized a one day event in the Paris office with April which mostly consisted of workshops on how to contribute to an open source project (I led two workshops on participating to Mozilla localization). I also attended 3 events in the Paris office, one with the French community to welcome half a dozen new volunteers, one with Rosana and Goofy dedicated  to SUMO localization and a last one which was an impromptu meeting between the French community and Brian King from Reps. With a Paris office tailored for meetings, I expect that I will continue to organize / attend to community meetings locally instead of travelling a lot like in the past, that's more compatible with my recent fatherhood :)

This wasn't a big quarter in terms of finding contributors, I can identify only 2 new people that became active and productive in the Mozilla l10n project directly because of me, that was mostly due to the fact that I spent more time on shipping projects and building tools this quarter. I also had some more paperwork than usual to deal with as I have an intern starting in April and I also worked with my colleagues on a tax refund paper for Research and Development in the Paris office.

I spent some specific time helping the Lithuanian community trying to grow in general, we created an IRC channel, opened a mailing list for Lithuania, did some work on etherpads  and contacted other open source projects in Lithuanians, past contributors, would be contributors through the Contribute page... We found some people interested in helping with l10n but more work will be needed to reboot the Lithuanian community (not just in l10n).

I also closed the which had been created after we closed Mozilla Europe and merged its activities with Mozilla, it unfortunately never attracted any activity and was just collecting spam (which I had to delete on a daily basis).

About the Transvision community, the project reached 9 committers in March, is now listed on What Can I Do for Mozilla (which makes it the only active PHP project listed on the site ;)). It is growing slowly but steadily on all fronts (uses, codebase, contributors, features...). We are also working on making it easier to hack (static and automatic documentation, better installation scripts...) but one of the roadblock is the amount of data that needs to be downloaded first to make it useful locally, the sum of our hg/git/svn repos are about 17GB big. Even after extraction of strings from all of our repos, it is probably like 200MB of text, we may evaluate a downloadable snapshot of that in the install process to make it easier for contributors that want to hack on it.

From a tooling community perspective, big thanks to Enrique Estevez, our galician localizer, who is working on upstreaming patches to OmegaT to make it work better with Mozilla formats (.properties and .lang) and who is also writing an Omega T plugin to get translation suggestions from Transvision. Babelzilla also contacted me for similar purposes, that means that at least four Mozilla tools use it or plan to use it directly (Mozilla Translator, OmegaT, Pontoon, Babelzilla). We will put a focus on improving, documenting and versionning our external API this year to make it easier to the tools community to integrate it. localization

On, the big deal this year was like last year the Mobile World Congress event, we updated all of our Firefox OS pages and home page + tabzilla in 17 languages in time before the event and also added some extra content for a dozen of these locales. As usual with big projects, we exposed feature needs and we now can publish promotions in tabzilla per locale, using the same mecanism as for the home page, so as to target only the languages that we were working on for MWC.

MWC was not all though, we also worked on a new Pricacy page for a few locales, we worked on a landing page for Firefox Metro, but unfortunately the product got cancelled, we updated a lot of older content, made patches in our templates to avoid duplicated strings, shipped new locales on the release channel with all o their web content done (Xhosa and Aragonese) and shipped Malay on the Beta and Aurora channels too.

The amount of strings is now around 1500 for a big locale on and about 600 for a small locale. Of course, since we have frequent content changes (promos, minor string updates on tabzilla, download pages, in-product pages...), this is actually more, especially for the bigger locales and Firefox OS locales, but I am happy that we succeed in keeping all of the locales in good shape, especially the small ones, while not slowing down the creation of English content. The site is definitely getting better and more localized month after month, two years after the switch to Django and the total rewrite, this is starting to look really good again.

And now Q2!

Expect Q2 to be more of the same :) One interesting point is that I am taking Theo Chevalier, our main French localizer, for an internship at Mozilla, which means that he will work on all of the cool stuff I have in mind but never get the time to do (like working on growing our l10n Firefox Nightly userbase which is ridiculously low compared to en-US), he will also of course work on the big Q2 project that is the launch of Firefox Australis!

jeudi 19 décembre 2013

My Q4-2013 report

It's the end of the quarter, just list last quarter I wrote down a summary of what I did this quarter for Mozilla for posterity, here it is ;)

Tools and code

Once again, I spent significant time working on tools this quarter. My activity was focused on Transvision, Langchecker and my FirefoxOS minidashboard.

There were 2 releases of Transvision, 2.9 and 3.0, adding many new features and additional support for Gaia repositories. I also created a #transvision IRC channel on Mozilla IRC server. You can now search strings for 3 locales simultaneaously, check all existing translations for an entity, list all potentially wrong varables in your repo or quickly check  all strings that need some extra QA for Firefox OS.

There were also many improvements to langchecker, the tool that I now maintain with my colleague Francesco Lodolo to track and manage progress of translations for projects using our .lang format. Many views were improved and we added features specific to the metadata used on (page activation and home page promos). We also added checks for UTF8 validity of the source files as well as checks for broken or missing python-style replacement variables in translations. We can also know how much of our l10n user base we cover not only per page but also per string on a page, which allows us to decide when we can activate a minor but visible text change on our pages (recently for example, html meta description and title tag changed for SEO reasons on the Firefox download pages).

As for my FirefoxOS mini dashboard (which syndicates data from the l10n dashboard, the langchecker and also contains some manually maintained data sources), it followed Gaia progresses and now tracks Gaia 1.1 and 1.2 in addition to the master branch.

Community building

This quarter I found 8 new localizers for and key Firefox web parts for the following locales: Afrikaans, Arabic, Basque, Bulgarian, Czech, Slovak and Spanish (Mexico). As usual I tried to focus on helping teams that lack manpower and / or maintain Firefox for a minor language.

I also created / revived IRC channels for these locales to help community building:  Catalan (#mozilla-cat), Slovak (#mozilla-sk) and Serbian (

If we can find 5 to 10 localizers working on key content every quarter, we shouldn't have any problem growing with all of our locales together in the years to come, the thing is that we have to be proactive and look for these people and not wait for them to come to us :),


The only event I went to was the Mozilla Summit, it was great and very productive from a localization point of view, I worked with Dwayne who maintains Locamotion, the Pootle instance focused on Mozilla projects for minor locales (Firefox, content, Firefox OS, Firefox health report) and we worked on improving our collaboration. One of the immediate results this quarter is that now we automate imports of strings for from Locamotion, which takes us a few minutes of work per week  and is faster for both Dwayne and ourselves. We are working on how to make it easier for locales on Locamotion to also follow work as this happens at a much quicker pace than product localization.

I also talked and worked with many localizers either on their specific issues (for example Brano and Wlado from the Slovak team asked me for help finding new localizers) or to check what problems a locale has and how to fix them.

A lot of work happened on this quarter. The most visible one is that we now have the home page available in 55 languages, versus 28 at the end of the last quarter. This is a steadily growing number, I hope that we can get the page in 70 locales, the most important is of course maintenance over time. The home page received also several updates promoting various topics and we scaled out l10n work to cover that (end of year donation promo, lightbeam, webmaker, addons). The webdev team implemented a way for us (l10n-drivers) to manage the activation of promos on the home page without code changes thanks to metadata in our lang files, that allowed us to never show mixed language content on the home page and activate these promos for locales as they get done.

Key pages in the main menu (products, mission, about, contribute) are all localizable and localized to about the same scale as the main page. Other key download pages (firefox/channels and firefox/installer-help) pages are also now translated anf maintained at large scale. Lightbeam and State of Mozilla sections were proposed as opt-in projects and have many translations (between 15 and 20 languages). I am happy that we were able to scale the localization of in terms of content (more pages, more content for products), number of locales and locale-specific improvements on the platform (better rtl support, better fonts, l10n friendly templates..), and our management tools to allow us to grow.

Another cool l10n feature that happened on the site was the creation of a 'translation bar' proposing you a page in your language if it exists. This was entirely done by a volunteer Mozillian, Kohei Yoshino, many thanks to him for this cool feature that may expand to other Mozilla sites ! Kohei wrote about it on the webdev blog. It is really cool to see improvements brought by volunteers and it is also cool to see that many people in the webdev team are also acquiring an l10n culture and often spot potential problems before myself or flod get to them !

That's all for this quarter, overall an excellent quarter for and tools which improve steadily. On a side note, it is also an excellent quarter for me at a personal level  as my daughter was born last month (which explains why I am less often connected  these days ;) )

lundi 4 novembre 2013

PHP: détecter si l'encodage d'un fichier est en utf8

Dans mon boulot on travaille uniquement avec des fichiers source en UTF8, notre site principal est en python mais j'ai des outils de maintenance extérieurs au site qui sont en PHP, étant donné que l'on travaille avec une bonne centaine de bénévoles qui ont accès au svn où nous stockons les fichiers de traduction et que nous avons des milliers de fichiers, il arrive qu'un bénévole envoie un fichier dans le mauvais encodage (genre Latin 1 pour certains europeéns et UTF16 pour certains asiatiques) et là, pour Django, c'est le drame :)

En bash on peut lister tous ces fichiers assez facilement et se créer un alias pour ça :

find . -type f -name "*.lang" -exec file --mime {} + | grep -viE "utf-8|us-ascii"

(via mon collègue italien Francesco Lodolo bien meilleur que moi en bash :) )

Ça marche bien mais je préfèrerais pouvoir afficher cette information dans mes tableaux de bords que je consulte en permanence, j'avais donc besoin d'une fonction pour détecter l'encodage des fichiers et j'ai pas mal sué pour trouver quelque chose qui marche correctement.

Ma première solution qui marchait a été celle là :

function isUTF8($file) 
    return in_array(exec('file --mime-encoding -b ' . $file), ['utf-8', 'us-ascii']) ? true : false;
Je délégais donc au shell la détection du charset, ça marche bien, mais ça a plusieurs inconvénients. Le premier est que ça ne marche pas sous Windows, même si j'avoue que c'est pas ma priorité, l'une des forces de PHP est tout de même sa compatibilité cross-plateforme. Le deuxième problème est que j'aime pas faire des exec, je trouve souvent ça un peu crade et c'est en général l'indice que j'ai pas réussi à le faire en PHP, le troisième problème et c'est le plus grave pour moi c'est que c'est très très lent. En local avec un disque SSD, un script qui mettait 3 secondes à s'éxécuter (et qui parsait déjà un petit millier de fichiers pour chercher des erreurs de variables python dans des chaînes) est passé à 18 secondes avec cette fonction et est interrompu sur le serveur qui n'a probablement pas de ssd pour dépasser les 30 secondes.

Ça marche donc, mais c'est trop lent pour mes besoins et je ne voyais pas comment l'améliorer.

J'ai cherché du côté de mb_detect_encoding() mais j'avais des faux négatifs avec un fichier en UTF8 que je savais corrompu et que php me détectait comme de l'UTF-8 alors que bash me le détectait en fichier binaire et que mon éditeur de texte me donnait en UTF16LE sans BOM. Comme c'est précisément ce genre de problèmes que je cherchais à détecter, après plusieurs heures de recherche du côté des fonctions mb_, j'ai l'aissé tomber.

Finalement ce matin j'ai trouvé une solution qui a des perfs correctes pour mon usage (je suis passé de 3 secondes à 6 secondes et j'ai des idées dans mon contexte précis pour faire baisser ça) en utilisant les fonctions finfo_* que je ne connaissais pas ! la voici :

function isUTF8($filename)
$info = finfo_open(FILEINFO_MIME_ENCODING);
$type = finfo_buffer($info, file_get_contents($filename));

return ($type == 'utf-8' || $type == 'us-ascii') ? true : false;

La fonction ci-dessus correspond bien à mon besoin: pouvoir détecter si l'encodage d'un fichier est en utf-8 ou compatible utf-8 pour une utilisation sur le Web. Si quelqu'un a une meilleure solution, je suis bien sûr preneur :)

mardi 1 octobre 2013

What I did in Q3

A quick recap of what I did in Q3  so as that people know what kind of work we do in the l10n-drivers team and because as a service team to other department, a lot of what we do is not necessarily visible.

Tools and code

I spent significantly more time on tool this quarter than in the past, I am also happy to say that Transvision is now a 6 people team and that we will all be at Brussels for the Summit (see my blog post in April). I like it, I like to create the small tools and scripts that make my life or localizers life better.

  • Two releases of Transvision (release notes) + some preparatory work for future l20n compatibility
  • Created a mini-dashboard for our team so as to help us follow FirefoxOS work
  • Wrote the conversion script to convert our Serbian Cyrillic string repository to Serbian Latin (see this blog post)
  • Turned my langchecker scripts (key part of the Web Dashboard) into a github project and worked with Flod on improving our management scripts for and fhr. A recent improvement is that we can now import automatically translations done on Locamotion You can see a list of the changes in the release notes.
  • Worked on scripts allowing to query bugzilla without using the official API (because the data I want is specific to the mozilla customizations we need for locales), that will probably be part of the Webdashboard soon so as to be able to extract Web localization bugs from multiple components (gist here). Basically I had the idea to use the CSV export feature for advanced search in Bugzilla as a public read-only API :)
  • Several python patches to to fix l10n bugs or improve our tools to ship localized pages (Bug 891835, Bug 905165, Bug 904703). localization

Since we merged all of our major websites (,,, under the single domain name two years ago with a new framework based on Django, we have gained in consistency but localization of several backends under one single domain and a new framework slowed us down for a while. I'd say that we are now mostly back to the old speed of localization, lots of bugs and features were added to Bedrok (nickname of our Django-powered site), we have a very good collaboration with the webdev/webprod teams on the site and we are more people working on it. I think this quarter localizer felt that a lot more work was asked from them on, I'll try to make sure we don't loose locales on the road, this is a website that hosts content for 90 locales, but we are back to speed with tons of new people!

  • Main Firefox download page (and all the download buttons across the site) finally migrated to Bedrock, our Django instance.  Two major updates to that page this quarter (+50 locales), more to come next quarter, this is part of a bigger effort to simplify our download process, stop maintaining so many different specialized download pages and SEO improvements.
  • home page is now l10n-friendly and we just shipped it in 28 languages. Depending on your locale, visitor see custom content (news items, calls for contribution or translation...)
  • Several key high traffic pages (about products updade) are now localized and maintained at large scale (50+ locales)
  • Newsletter center and newsletter subscription process largely migrated to Bedrock and additional locales supported (but there is still work to do there)
  • The plugincheck web application is also largely migrated to Bedrock (61 locales on bedrock, about 30 more to migrate before we can delete the older backend and maintain only one version)
  • The contribute page scaled up tp 28 locales with local teams of volunteers behind answering people that contact us
  • Firefox OS consumer and industry sub-sites released/updated for +10 locales, with some geoIP in addition to locale detection for tailored content!
  • Many small updates to other existing pages and templates

Community growth

This quarter, I tried to spend some time looking for localizers to work on web content as well as acompanying volunteers that contact us. I know that I am good at finding volunteers that share our values and are achievers, unfortunately I don't have that much time to spend on that. Hopefully I will be able to spend a few days on that every quarter because we need to grow and we need to grow with the best open source contributors! :)

  • About 20 people got involved for the folowing locales: French, Czech, Catalan, Slovenian, Tamil, Bengali, Greek, Spanish (Spain variant), Swedish. Several became key localizers and will be at the Mozilla summit
  • A couple of localizers moved from localization to product localization where their help was more needed, I helped them by finding new people to replace them on web localization and/or empowering existing community members to avoid any burn-out
  • I spent several days in a row specifically helping the Catalan community as it needed help to scale since they now also do all the mobile stuff. I opened a #mozilla-cat IRC channel and found 9 brand new volunteers, some of them professional translators, some of them respected localizers from other open source projects. I'll probably spend some more time to help them next quarter to consolidate this growth. I may keep this strategy every quarter since it seems to be efficient (look for localizers in general and also help one specific team to grow and organize itself to scale up)


  • Significant localization work for Firefox Health Report, both Desktop (shipped) and Mobile versions (soon to be shipped)
  • Lots of meetings for lots of different projects for next quarter :)
  • Two work weeks, one focused on tooling in Berlin, one focused on training my new colleagues Peying and Francesco (but to be honest, Francesco didn't need much of it thanks to his 10 years of involvement in Mozilla as a contributor :) )
  • A lot of work to adjust my processes to work with my new colleague Francesco Lodolo (also an old-timer in the community, he is the Italian Firefox localizer). Kudos to Francesco for helping me with all of the projects! Now I can go on holidays knowing that i have a good backup :)

French community involvement

  • In the new Mozilla paris office I organized a meeting with the LinuxFR admins, because I think it's important to work with the rest of the Open Source ecosystem
  • With Julien Wajsberg (Gaia developer) we organized a one day meeting with the Dotclear community, a popular blogging platform alternative to  Wordpress in France (purely not-for-profit), because we think it's important to work with project that build software that allows people to create content on the Web
  • Preparation of more open source events in the Paris office
  • We migrated our server (hosting Transvision,, to the latest Debian Stable, which finally brings us a decent modern version of PHP (5.4). We grew our admin community to 2 more people with Ludo and Geb :). Our server flies!

In a nutshell, a very busy quarter! If you want to speak about some of it with me, I will be at the Mozilla Summit in Brussels this week :)

lundi 9 septembre 2013

Événements chez Mozilla Paris en Septembre !

Depuis la récente ouverture des nouveaux locaux de Mozilla à Paris, nous organisons régulièrement des réunions et des événements avec la communauté Mozilla bien sûr, mais aussi avec les communautés du libre et du web francophones.

Nous organisons aussi de nombreuses autres rencontres et séminaires de travail dans d'autres domaines (par exemple cette semaine le W3C et le CSS WG travailleront dans nos locaux) et ce mois-ci, nous avons plusieurs événements intéressants auxquels vous pouvez assister / participer :

  • Mercredi 11 septembre c'est Javascript les doigts dehors, de 19h à 23h. Si vous voulez apprendre, ou enseigner le javascript, en mangeant des gateaux fait main, c'est par ici. Inscription obligatoire (dans la limite des places disponibles).
  • Jeudi 12 septembre à 19h, rencontre avec les trois startups françaises sélectionnées par Mozilla dans le cadre de notre programme WebFWD d'accélérateur de startups du Web : CozyCloud, PLOM.IO et (par ordre alphabétique). Pour mieux les connaitre, les féliciter… et boire un coup à leur santé, linscription est sur ce framadate.
  • Week end des 14 et 15 septembre : en collaboration avec la mairie du 9ème arrondissement, les locaux de Mozilla seront ouverts au public pour les journées du patrimoine ! Comme vous le savez peut être, Mozilla occupe des locaux classés monuments historiques et qui bénéficient d'une décoration exceptionnelle. Si vous voulez rencontrer Mozilla et des Mozilliens tout en faisant une sortie culturelle, c'est une excellente occasion !
  • Le samedi 21 septembre, nous organisons une rencontre avec la communauté Dotclear, si vous voulez participer au code de Dotclear, au développement des futures version, au design, apprendre à faire un thème ou une extension et de manière générale participer au projet Dotclear, vous êtes les bienvenus (mais inscrivez-vous svp ;) )!
  • week end des 28 et 29 septembre : Mozilla Game Jam Paris, hackathon de création de jeux vidéos en HTML5, a priori c'est déjà plein mais il y a une liste d'attente

Ce n'est évidemment qu'un début, si vous faites du libre et du web et que vous voulez orgnaniser un petit événement ou une réunion de travail, n'hésitez pas à nous (me) contacter ! :)

Plan vers Mozilla Paris

mardi 13 août 2013

Dotclear a 10 ans, mon blog aussi !

Aujourd'hui 13 juillet 2013, Dotclear fête ses 10 ans !

De mon côté, j'ai ouvert mon blog sous Blogger il y a a un peu plus de 10 ans et je l'ouvrais avec ces mots :

Ok, voici donc mon carnet web, à force de lire ceux des autres, ça m'a donné envie d'avoir le mien :-)

J'y mettrai essentiellement mes trouvailles sur le web, ceux qui me connaissent savent qu'elles sont mes passions et ne seront pas étonnés de trouver des infos sur Mozilla/Netscape, HTML/XHTML/CSS, l'Espagne et l'espagnol, mon chat, les séries télé... enfin bref, des trucs qui n'intéressent qu'une minorité de personnes mais je l'espère une majorité de mes lecteurs :-)

On notera au passage que trois ans plus tard je commençais à travailler pour Mozilla, que j'ai représenté Mozilla en Espagne plusieurs années et que si finalement je n'ai pas parlé de chats ni de séries télé, le Pascal d'il y a 10 ans n'est finalement pas si différent du Pascal d'aujourd'hui :D

Un an plus tard, je passais sous Dotclear 1.2 bêta après avoir migré ma base de données Blogger à grands coups de SQL.

Un grand merci donc à Dotclear pour avoir motorisé mon carnet web toutes ces années !

Depuis le mois dernier, je participe un petit peu au développement de Dotclear et à l'animation de sa communauté. Dotclear a connu un ralentissement de son développement ces dernières années, puis une crise mais heureusement depuis deux mois , le projet est reparti sur les chapeaux de roues et après une 2.5.1 le mois dernier, une 2.5.2 devrait arriver très bientôt !

Si votre blog est sous Dotclear depuis des années, je vous encourage fortement vous aussi à participer au projet Dotclear, il y a besoin de codeurs bien sûr, mais pas que. Bêta test, documentation, traduction, promotion, événements... il y a plein de manières de participer au projet. Inscrivez-vous à la liste de discussion de Dotclear et lancez-vous!

Le logiciel libre a besoin de contributeurs, si vous vous dîtes ou vous pensez libriste mais ne participez activement à aucun des projets de logiciel libre que vous utilisez au quotidien, remettez-vous en question ;)

Longue vie à Dotclear !

mercredi 31 juillet 2013

Transliterating Serbian Cyrillic to Serbian Latin on Linux with PHP

Mozilla has beeen shipping Firefox in Serbian for many years and we ship it in cyrillic script, that means that our software, our sites, our documentation is all in cyrillic for Serbian.

You may not know it (especially if you are not European), but Serbian can be written in both Cyrillic and Latin scripts, people live with the two writing systems, that is a phenomenon called synchronic digraphia.

I was wondering of it would be easy to create a version of Firefox or Firefox OS in Latin script and since our l10n community server just got an upgrade and now has PHP 5.4, I played a bit with the recent transliterator class in that version that uses the ICU library.

Basically, it works, and it works well. With one caveat though, I found out that the ICU library shipped with Linux distro is old and exposes a bug in Serbian transliteration that was fixed in more recent ICU libraries.

How does it work? Here is a code example:

$source = 'Завирите у будућност';
$t = Transliterator::create('Serbian-Latin/BGN');
print "Serbian (Cyrillic): $source <br>";
print "Serbian (Latin): {$t->transliterate($source)}";

And here is the output:

Cyrillic: Завирите у будућност
Latin: Zavirite u budućnost

The bug I mentioned earlier is that the cyrillic letter j is systematically converted to an uppercase J even if the letter is inside a word and should be lowercase.

Example: This string : Најгледанији сајтови
Should be transliterated to: Najgledaniji sajtovi
But my script transliterated it to: NaJgledaniJi saJtovi

I filed a bug in the PHP ticket system and got an inmediate response that my test script actually works on Windows. After some investigation by the PHP dev, it turns out that there is no bug on the PHP side, the bug is in the ICU library that ships with the OS and it happens to be version 48.x on Linux distros while Windows enjoys a more recent version 50 and the ICU project itself is at version 51.2

Unfortunately, I couldn't find any .deb package or ppa for Ubuntu that would propose a more recent ICU library version, Chris Coulson from Canonical pointed me to this ticket in Launchpad: [request] upgrade to icu 50, but this was an unassigned one.

As a consequence, I had to compile the newer ICU library myself to make it work. Fortunately, I could follow almost all the steps indicated in this post for a CentOS distro, I only had to adjust the locations (and also update the php.ini file for the development server) and restart Apache :)

So now, I can transliterate easily from cyrillic to Latin a full repository, I put a gist file online with the full script doing the conversion of a repo if you want to use it.

jeudi 18 avril 2013

MozFR Transvision Reloaded: 1 year later

Just one year ago, the French Mozilla community was living times of major changes: several key historical contributors were leaving the project, our various community portals were no longer updates or broken, our tools were no longer maintained. At the same time a few new contributors were also popping in our IRC channel asking for ways to get involved in the French Mozilla community.

As a result, Kaze decided to organize the first ever community meetup for the French-speaking community in the Paris office (and we will repeat this meetup in June in the brand new Paris office!) .


This resulted in a major and successful community reboot. Leaving contributors passed on the torch to other members of the community, newer contributors were meeting in real life for the first time. This is how Clarista officially became our events organizer, this is how Théo replaced Cédric as the main Firefox localizer and this is how I became the new developer for Transvision! :)

What is Transvision? Transvision is a web application created by Philippe Dessantes which was helping the French team finding localized/localizable strings in Mozilla repositories.

Summarized like that, it doesn't sound that great, but believe me, it is! Mozilla applications have big gigantic repos, there are tens of thousands of strings in our mercurial repositories, some of them we have translated like a decade ago, when you decide to change a verb for a better one for example, it is important to be able to find all occurrences of this verb you have used in the past to see if they need update too. When somebody spots a typo or a clumsy wording, it's good to be able to check if you didn't make the same translation mistakes in other parts of the Mozilla applications several years ago and of course, it's good to be able to check that in just a few seconds. Basically, Phillippe had built the QA/assistive technology for our localization process that best fitted our team needs and we just couldn't let it die.

During the MozFR meetup, Philippe showed to me how the application worked and we created a github repository where we put the currently running version of the code. I tagged that code as version 1.0.

Over the summer, I familiarized myself with the code which was mostly procedural PHP, several Bash scripts to maintain copies of our mercurial repos and a Python script used to extract the strings. Quickly, I decided that I would follow the old Open Source strategy of Release early, release often. Since I was doing that on the sidelines of my job at Mozilla,  I needed the changes to be small but frequent incremental steps as I didn't know how much time I could devote to this project. Basically, having frequent releases means that I always have the codebase in mind which is good since I can implement an idea quickly, without having to dive into the code to remember it.

One year and 15 releases later, we are now at version 2.5, so here are the features and achievements I am most proud of:

  1. Transvision is alive and kicking :)
  2. We are now a team! Jesús Perez has been contributing code since last December, a couple more people have shown interest in contributing and Philippe is interested in helping again too. We have also a dynamic community of localizers giving feedback, reporting bugs are asking for immrovements
  3. The project is now organized and if some day I need to step down and pass the torch to another maintainer, he should not have difficulties setting the project up and maintaining it. We have a github repo, release notes, bugs, tagged releases, a beta server, unit testing, basic stats to understand what is used in the app and a mostly cleaned up codebase using much more modern PHP and tools (Atoum, Composer). It's not perfect, but I think that for amateur developers, it's not bad at all and the most important thing is that the code keeps on improving!
  4. There are now more than 3000 searches per week done by localizers on Transvision. That was more like 30 per week a year ago. There are searches in more than 70 languages, although 30 locales are doing the bulk of searches and French is still the biggest consumer with 40% of requests.
  5. Some people are using Transvision in ways I hadn't anticipated, for example our documentation localizers use it to find the translation of UI mentioned in help articles they translate for, people in QA use it to point to localized strings in Bugzilla

A quick recap of what we have done, feature-wise, in the last 12 months:

  • Completely redesigned the application to look and feel good
  • Locale to Locale searches, English is not necessarily the locale you want to use as the source (very useful to check differences from languages of the same family, for example Occitan/French/Catalan/Spanish...).
  • Hints and warnings for strings that look too long or too short compare to English, potentially bad typography, access keys that don't match your translation...
  • Possibility for anybody to file a bug in Bugzilla with a pointer to the badly translated string (yes we will use it for QA test days within the French community!)
  • Firefox OS strings are now there
  • Search results are a lot more complete and accurate
  • We now have a stable Json/JsonP API, I know that Pontoon uses it to provide translation suggestions, I heard that the Moses project uses it too. (if you use the Transvision API, ping me, I'd like to know!)
  • We can point any string to the right revision controled file in the source and target repos
  • We have a companion add-on called MozTran for heavy users of the tool provided by Goofy, from our Babelzilla friends.

The above list is of course just a highlight of the main features, you can get more details on the changelog.

If you use Transvision, I hope you enjoy it and that it is useful oo you. If you don't use Transvision (yet), give it a try, it may help you in your translation process, especially if your localization process is similar to the French one (targets Firefox Nighty builds first, work directly on the mercurial repo, focus on QA).

This was the first year of the rebirth of Transvision, I hope that the year to come will be just as good as this one. I learnt a lot with this project and I am happy to see it grow both in terms of usage and community, I am also happy that one tool that was created by a specific localization team is now used by so many other teams in the world :)

vendredi 7 décembre 2012

Parser des fichiers properties en PHP, ma lib pour composer

En début de semaine, mes copains de Mozilla Hispano ont lancé un projet qu'ils préparaient depuis quelques temps déjà, une petite application d'assitance aux utilisateurs pour leur page Facebook. Cette application interroge l'API du site d'assistance officiel de Mozilla (alias SUMO, pour pour afficher les articles les plus consultés et elle dispose d'un champ de recherche qui propose des articles dans sa langue. Simple, efficace.

Ils m'ont contacté pour que je leur file un coup de main pour la localisation, comme ça l'application est disponible pour les non-hispanophones (et si vous avez un navigateur en français, le lien dans le paragraphe ci-dessus a dû s'afficher en français), j'ai donc ajouté de la détection de langue, de la détection de direction rtl pour le template et un petit système de traducion basé sur des fichier .properties, les fichiers properties viennent de Java mais sont omniprésent aussi en Javascript et sont la base de la traduction des logiciels de Mozilla (Firefox, ou FirfoxOS /ex).

L'application étant en php, l'idée initiale de mes copains étaient d'utiliser parse_ini_file() car la syntaxe des fichiers ini est presque la même que celle des .properties, mais si on veut des properties sans guillemets, avec du support des chaînes multilignes et éventuellement des commentaires, il faudrait mieux que ça, donc je leur ai rapidement créé une librairie pour parser les properties.

Ce n'est pas la première fois que j'écris une fonction ou une classe pour parser des .properties et en fait, je crois que c'est la troisième ou quatrième fois et à chaque fois j'ai fait du code jetable parce que je ne trouvais pas de librairie fiable sur le net (il y en a sûrement, j'ai juste pas trouvé), donc cette fois-ci j'ai décidé que j'allais faire une librairie une bonne fois pour toute et que la prochaine fois que j'aurai à réutiliser des properties, je m'en resservirai, voire même, je l'améliorerai :)

J'ai donc créé ma librairie sur github, elle s'appelle très originalement PhpProperties, elle parse correctement un fichier .properties et peut même extraire et associer les commentaires dans le fichier source (l'idée à long terme c'est de fournir un convertisseur vers d'autres format type .lang, .po, dtd... et de ne pas perdre les commentaires dans le code), son usage est simple:

$source = new \xformat\Properties();
Mais ce n'est pas tout, j'ai ajouté cette librairie à, vous pouvez donc l'installer comme une dépendance dans vos projets en utilisant un fichier composer.json:

    "require": {
        "pascalc/php-properties": "1.0"

Un simple composer install vous installera tout ça :)

Voilà, je ne prétends pas que c'est du beau code, mais il marche plutôt bien et je suis assez content d'avoir pu créer mon premier paquet installable via Composer, le nouveau gestionnaire de dépendances de PHP :)

mardi 4 décembre 2012

Compiler Firefox OS en version desktop sur une Ubuntu

J'ai installé hier Firefox OS en version Desktop sur mon Ubuntu (12.04) afin de jouer avec.

Voici les étapes qui marchent chez moi :

Tout d'abord, il vous faut installer les paquets nécessaire à la compilation et bien sûr les outils de gestionnaire de version nécessaires :

sudo apt-get install mercurial g++ make autoconf2.13 yasm libgtk2.0-dev libglib2.0-dev libdbus-1-dev libdbus-glib-1-dev libasound2-dev libcurl4-openssl-dev libiw-dev libxt-dev mesa-common-dev ccache git

Ensuite, on va créer un dossier FirefoxOS dans son /home :
mkdir ~/FirefoxOS/

Puis on va ce dossier :
cd ~/FirefoxOS/

Ensuite on récupère le code source de Firefox OS Bêta :
hg clone

(ça créera un dossier ~/FirefoxOS/mozilla-beta)

Puis on récupère le code source de Gaia, l'interface graphique en HTML5 de FirefoxOS :
git clone

(ça créera un dossier ~/FirefoxOS/gaia)

Les deux étapes ci-dessus prennent du temps, surtout si vous avez une petite connexion.

Une fois ceci fait, il vous faut créer un fichier .mozconfig (notez bien le point avant mozconfig) que l'on mettra ici:

Voici le contenu de mon .mozconfig :

CONCURRENCY=$(( `grep processor /proc/cpuinfo | wc -l` + 2 ))
mk_add_options MOZ_MAKE_FLAGS="-j$CONCURRENCY"
mk_add_options MOZ_OBJDIR=../build
# Use ccache
ac_add_options --with-ccache=/usr/bin/ccache
ac_add_options --enable-application=b2g
ac_add_options --disable-libjpeg-turbo
# This option is required if you want to be able to run Gaia's tests
# ac_add_options --enable-tests
# turn on mozTelephony/mozSms interfaces
# Only turn this line on if you actually have a dev phone
# you want to forward to. If you get crashes at startup,
# make sure this line is commented.
# ac_add_options --enable-b2g-ril

Une fois ceci fait, on va compiler Firefox OS, attention, ça prend du temps ! Plus de deux heures sur mon petit portable.
cd ~/FirefoxOS/mozilla-beta
make -f

La compilation créera un dossier ~/FirefoxOS/build/ et votre binaire se trouve là :

Une fois ceci fait, on va créer un profil Gaia :
cd ~/FirefoxOS/gaia

Une fois le profil créé, vous pouvez lancer Firefox OS avec cette commande :
~/FirefoxOS/build/dist/bin/b2g -profile ~/FirefoxOS/gaia/profile

et voilà le résultat :
Firefox OS sur Ubuntu

Si vous voulez plus d'informations, il y en a plein ici en anglais :

N'oubliez pas non plus que Geckozone (la section forums de MozFr) a ouvert récemment un forum pour FirefoxOS :
Forum Firefox OS en français

Et vous pouvez discuter avec des développeurs et bénévoles Mozilla francophones dans le salon IRC #devfr sur

MODIFICATION : 10h40, j'ai modifié l'url du dépôt mozilla-beta, je l'avais tapée de mémoire et évidemment ma mémoire était défaillante, désolé :)
MODIFICATION: 12h11,décidemment c'est la série, la création de profil gaia se fait évidemment après un cd dans le dossier gaia et pas dans le dossier mozilla-beta, corrigé aussi :)
MODIFICATION: 05/12/2012,ajout de ccache et git dans les dépendences nécessaires

vendredi 30 novembre 2012

Quelques nouvelles Mozilla

Tiens, ce matin j'ai envie d'utiliser mon blog :)

Alors voilà quelques nouvelles intéressantes cette semaine liées à Mozilla :

  • Mozilla ces deux dernières années s'est beaucoup impliqué techniquement dans les groupes de travail de l'IETF qui crée les normes Internet (protocoles par exemple) et dépend pour son fonctionnement de la fondation Internet Society. Mozilla est désormais membre sponsor de l'internet Society afin d'aider aussi l'IETF pour ses dépenses de fonctionnement. Billet de Josh Ash à ce sujet : Mozilla Joining ISOC in Support of IETF Activities
  • On est en train de finaliser un mode de navigation privée par fenêtre, ce qui permet d'avoir une fenêtre Firefox normale et une fenêtre Firefox en navigation privée en même temps (alors qu'en ce moment soit toutes la navigation est en mode incognito, soit tout est en mode normal). Ehsan Akhgari, le développeur qui est derrière le mode de navigation privée (qu'il avait ajouté à Firefox en tant que simple bénévole à l'époque et qui a bossé sur plein de projets importants pour Firefox depuis qu'il est employé, par exemple le nettoyage du composant Editor, le système de mise à jour silencieux depuis Firefox 4, plein de trucs sur le layout...) fournit des binaires en anglais depuis aujourd'hui basés sur Firefox Nightly avec ce nouveau mode de navigation privée par fenêtre et demande à tout le monde de tester et de lui envoyer plein de feedback parce que cette réécriture implique des changements de code importants touchant plein de domaines et pourrait causer des régressions. Plein de détails sur son billet Per-window private browsing ready for testing now!
  • Xavier Mouton-Dubosc a écrit aujourd'hui un très bon article en français sur FirefoxOS, le Firefox Marketplace et de manière générale ce que représente Mozilla et Firefox pour l'avenir du Web Mobile, à lire : 2012, fin d'un monde du web ?
  • Les forums de Geckozone ont maintenant rejoint le projet collaboratif Mozilla francophone MozFr, les habitués ont donc pu découvrir la nouvelle addresse des forums qui sont maintenant sur notre serveur commun ( La migration est passée, Google réindexe les forums vitesse grand V (déjà plus de 220.000 pages indexées en deux semaines), il y a encore beaucoup à faire mais il y a aussi des nouveautés, en particulier, un tout nouveau forum pour Firefox OS et un autre pour les Open Web Apps 

jeudi 13 septembre 2012

Vidéo de démo du serveur intégré à PHP 5.4

J'ai fait une petite vidéo de démo de l'utilisation du serveur web intégré dans PHP 5.4, vous la trouverez ici :

mercredi 6 juin 2012

Fonctionnement en parallèle de deux versions de Firefox

Une petite astuce que j'ai apprise récemment sur IRC et qui est bien pratique.

J'utilise en permanence deux versions de Firefox (celle proposée par les dépôts Ubuntu et Firefox Nightly). Jusque là, tout va bien, j'ai un lanceur spécifique qui me permet de les lancer en parallèle avec des profils séparés :

$ firefox -P "nom" -no-remote

Mais cette méthode a un inconvénient dans Gnome Shell (peut être aussi sous Unity, pas testé), c'est que lorsqu'on fait alt+tab pour passer d'une appli à une autre, toutes les fenêtres de mes deux firefox sont groupées sous la même icône Firefox. La solution à cela est de rajouter une option dans le lanceur :

$ firefox -P "nom" --class "Nocturne" -no-remote

Voilà, j'ai maintenant des icônes distinctes en utilisant alt+Tab, chacune avec ses sous-fenêtre associées.

Le seul bug est que lorsqu'il y a une mise à jour automatique, l'option class n'est pas reprise en compte lors de la relance du navigateur, il faut le fermer/ouvrir manuellement pour que ça le reprenne en compte.

La seule référence à cette option est celle-ci

samedi 17 mars 2012

Nouvelle page d'accueil pour Firefox + nouvelle page sur ouverture d'onglet

Depuis quelques jours, la page d'accueil de Firefox (about:home) a connu sa première modification majeure depuis Firefox 4.

Désormais, de larges icônes permettent d'accéder aux marque-pages, à l'historique, aux extensions, aux paramètres de Firefox, au gestionnaire de téléchargements et à l'outil de synchronisation des données.

Voici une capture écran sur Firefox Nightly d'hier (sous Linux):


En parallèle, l'ouverture d'un nouvel onglet affiche désormais les neufs sites les plus fréquemment visités que l'on peut réorganiser à la souris, enlever et épingler pour qu'ils ne soient pas remplacés:about:newtab

On peut s'attendre à des évolutions dans les versions à venir bien sûr, mais les captures écran étant sympas, je les partage :)

Si vous voulez essayer ça dans une nightly, c'est par là:

jeudi 1 mars 2012

Toshiba L735-116 et reconnaissance de la batterie sous Linux

La batterie de mon portable n'est pas reconnue par Linux, ce qui veut dire que linux ne me donne pas d'indicateur de charge quand je suis débranché.

Jusqu'à présent je devais à chaque changement de noyau le recompiler avec un patch spécial. J'ai trouvé hier une méthode complémentaire sur un blog qui m'évite d'avoir à recompiler le noyau, je la documente donc ici en français, pour moi-même, mais aussi pour ceux qui auraient le même problème.

Mon portable est un Toshiba L735-116 mais de nombreux autres modèles de Toshiba sont affectés, donc si vous avez le même problème sur votre portable, rien ne vous empêche d'essayer, le geek qui a analysé et trouvé la solution au problème a lui un L650.

Les informations que je synthétise ici en français sont issues de ces deux billets :

Un grand merci donc à leurs auteurs Faheem et Michael Kuron pour avoir partagé leurs connaissances et apporté une solution.

Typiquement, vous savez que vous n'avez pas de batterie reconnue avec ces commandes :

~$ cat /proc/acpi/battery/BAT1/*
present:                 no
present:                 no
present:                 no

Les étapes à suivre sont les suivantes :

  1. ouvrir un terminal et passer en root (sudo -s)
  2. cd /boot/
  3. On récupère le tableau DSDT de la machine
    cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
  4. on le désassemble
    iasl -d dsdt.dat
  5. on ouvre le fichier désassemblé avec son éditeur de texte favori (gedit, geany, vi...)
    geany dsdt.dsl
  6. on cherche la ligne :
    OperationRegion (EMEM, SystemMemory, 0xFF808001, 0xFF)
    et on la remplace par
    OperationRegion (EMEM, EmbeddedControl, 0x00, 0xFF)
  7. On enregistre le fichier
  8. On lance la commande pour le recompiler en un fichier dsdt.aml (ça créera aussi un fichier dsdt.hex mais on s'en servira pas)
    iasl -tc dsdt.dsl
  9. On récupère ce script 01_acpi.txt et on l'enregistre dans le dossier /etc/grub.d/ sous le nom 01_acpi (on enlève l'extension .txt)
  10. On donne à ce script les droits d'exécution
    chmod +x /etc/grub.d/01_acpi
  11. On lance la commande
  12. On redémarre et normalement c'est bon :)

Pour info, ce bug est déjà signalé dans le bugzilla du kernel depuis deux ans et n'est pas réglé dans le noyau 3.2 que j'utilise (Bug 15707 - can not get AC/DC status).

lundi 21 novembre 2011

Thanks for the patch René-Luc

Last week, at Mozilla Camp Europe, René-Luc D'hont a developper and community member showed us a regression on Mozilla Nightly builds that were breaking the mozilla-based application he is working on.

We helped René-Luc file a bug and provide a patch and this has just landed in time for the next release, thanks René-Luc and congrats for your first patch in mozilla-central :)

(photo by Ludovic Hirlimann)

lundi 17 octobre 2011

How I got involved in Mozilla

Following David Boswell's suggestion to share our Mozilla stories, here is mine :)

I think my first community involvement was early 2000 when I started helping people on usenet having technical problems creating web pages for Netscape 4. I was not a very technical person at that time (I had studied business and languages, computing was just a hobby) but I was very excited by the transformation of Netscape into an open source project and was regularly testing the Mx builds (which most of the time just crashed a few seconds after launch ;) )

At that time, there was very few resources on the web about Mozilla and none in French. Since I was always answering the same questions on usenet, I started working on a FAQ in 2001 about Mozilla Suite (and later Netscape 7) which became the first (actually the only for a few years) semi-technical resource about Mozilla in French (a copy is still online here

From 2001 to 2003, I broadened my community involvement by translating my FAQ into Spanish, opening blogs about Mozilla in French and Spanish, translating documentation through the mozFR project and getting involved in the Tech Evangelism program that Bob Clary had started. In 2003, after chatting with Spanish Free Software advocates on IRC, I created the first Mozilla web forums in Spanish on the web, copying largely the format that had chosen. A couple of months later, with many people from the community we had created the first Spanish-speaking portal about the Mozilla project, called MozillaES (which still exists).

Netscape was being shut down and it was clear to me that we had to strenghten Mozilla from the community side as there was no guarantee that the just created Mozilla Foundation would survive alone with just a dozen employees.

At the end of 2003, Tristan (that I knew from Usenet) contacted me to talk about the possibility of creating a European not for profit organization that would promote Mozilla and would help build a European community around the Mozilla project. This is how a bunch of Mozilla supporters created Mozilla Europe that we later presented to the larger FLOSS European community at Fosdem 2004. I quickly focused on what I was doing best, community building, and started working on bringing volunteers into translating the website into multiple languages (27), organizing/participating in events in Europe with the help of Mozilla Foundation (~20 events per year), building an internship program, guerilla marketing, PR... We also hosted firstrun/whatsnew pages for all of Firefox locales (not just European ones) for a couple of years so as to help Mozilla which was not ready for that. In parallel, I was also pursuing my involvement into other areas of the project, from writing simple extensions for Firefox and Thunderbird, working on promoting Mozilla by all means (creating multilingual Firefox download buttons, reporting bugs in bugzilla, organizing events, talking to the Spanish press...) to writing a book about Firefox and Thunderbird.

Early 2006, Paul kim, marketing director at Mozilla corporation contacted me to work on first fixing then managing the localization of Mozilla web properties, build a community of localizers around it and continue my work as a Mozilla spokeperson for Spain (basically replicate what I had done as a volunteer in Europe but as paid staff and full time, cool isn't it ;) ). Firefox 2.0 was planned for the end of the year in 40+ locales and was the first release fully localized both on the product and web sides.

I still hold this position and I also continue my community involvement, both at a personal level (like writing patches for the Linux version of Firefox, building collaboration  with other Libre software projects, empowering clever people to build cool Mozilla resources such as Mozilla Hispano, BonjourMozilla, MozFR, the European Community Blog...) and at the professional level help release Firefox, Thunderbird and all of our other projects in 80+ languages across the world.

If you want to contact me:

vendredi 4 février 2011

Ce soir c'est Fosdem, venez rencontrer Mozilla !

Comme tous les ans depuis 2004,  je vais à FOSDEM ce soir pour y passer le week end entre développeurs libristes à boire des bières refaire le monde et partager l'expérience de nos différents projets.


Si vous avez envie de participer à un projet international et populaire (utilisé par 400 millions d'utilisateurs), quel que soit le domaine (code, traduction, promotion, place des femmes dans le libre, graphisme...) n'hésitez pas à venir sur le stand Mozilla nous en parler (vous demandez Pascal, Delphine ou William, on redirigera vers les bonnes personnes si nécessaire). On fera sûrement aussi des démos de Firefox 4 sur le stand pour les curieux qui ne l'auraient pas encore essayé ;). Voilà nos têtes pour nous repérer:


Voilà le programme pour Mozilla sur ces deux jours : Mozilla at Fosdem 2011

jeudi 3 février 2011

J'ai un patch dans Firefox 4 beta 10, pourquoi pas vous ?

Depuis aujourd'hui, dans la version Linux de Firefox,  l'icône symbolisant un document vide ou une page qui n'a pas d'icône envoyée par le serveur ont un nouvel aspect un peu plus intégré dans Gnome puisque la vieille icône en png a été remplacée par un appel à l'icône système équivalente sous Gnome. Cela signifie que si vous changez de thème Gnome et que ce thème a une icône différente pour les documents vierges, Firefox utilisera cette icône.

Ce n'est pas un gros changement dans Firefox, mais celui-ci a une saveur particulière puisque j'en suis l'auteur et que c'est mon premier vrai patch accepté pour Firefox 4.

Il s'agit du bug 621091 et voici la photo avant/après mon patch:

Quelles leçons ai-je tiré de ce travail:

  1. Ça a été moins compliqué que je ne le pensais
  2. Il est important de bien comprendre le processus de résolution d'un bug dans Bugzilla pour faire avancer les choses
  3. Des améliorations directes au logiciel sont possible même par des non-développeurs
  4. Ce que j'ai appris à travers ce bug devrait me permettre de régler d'autres problèmes simples à l'avenir
Au cours de la réalisation de ce patch, j'ai aussi trouvé une petite erreur dans un chemin de fichier pour le thème Linux (bug 627881) qui a aussi été corrigée et un bug de crash dans un cas un peu rare (bug 621009) qui sera sûrement corrigé plus tard. Il y a donc eu aussi un aspect bêta-test autour du bug initial qui était intéressant.

Les ressources qui m'ont aidé pour mon patch sont les suivantes:

Ma bonne résolution pour 2011 est désormais d'écrire un patch par mois pour Firefox et d'en avoir un tiers accepté sur l'année (par exemple j'ai un patch en cours qui rajoute des options non documentées quand on fait firefox --help dans la console, bug 619069). Je me concentre sur des patchs dédiés à Linux parce que c'est d'une part la plateforme que je connais le mieux et que d'autre part de par son statut de plateforme très minoritaire, elle reçoit moins d'attention que les autres surtout en ce qui concerne le fignolage de l'interface.

Je ne peux qu'encourager les libristes francophones à faire de même et à participer directement au code de Firefox, tout auteur d'un patch accepté aura sa photo publiée sur Bonjour Mozilla !!

- page 1 de 38