Florian Quèze - MozillaFlorian Quèze's blog, talking about Mozilla, Instantbird, Summer of Code, Ami 6 cars, ...2022-08-26T02:00:34+02:00urn:md5:d59fad53f8b1c54effe51c1e5b249670DotclearCatching flickering regressionsurn:md5:7d0dae7c1e8cd58ce5d996e477e355062017-12-05T20:47:00+01:002017-12-05T20:47:59+01:00Florian QuèzeMozillaperformance <p>For Firefox 57, as part of the Photon Performance project, one of the
things we worked on was dramatically reducing flickering in the main
browser window. We focused especially on what happens when opening the
first browser window during startup, and when opening new browser
windows.<br /><br />To identify bugs, we <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1372518#c0" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=en&q=https://bugzilla.mozilla.org/show_bug.cgi?id%3D1372518%23c0&source=gmail&ust=1512589545257000&usg=AFQjCNGmtWyKTq358nomUf_azbiQZPlKng">looked frame by frame at video recordings</a>.
This was good enough to file bugs for an initial exploration, but was
time consuming, and won't help us to keep these interactions flicker
free going forward.<br /><br />I'm happy to announce that these two
interactions are now covered by automated flickering tests that will
catch any regression there:<br /><a href="https://searchfox.org/mozilla-central/source/browser/base/content/test/performance/browser_startup_flicker.js" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=en&q=https://searchfox.org/mozilla-central/source/browser/base/content/test/performance/browser_startup_flicker.js&source=gmail&ust=1512589545257000&usg=AFQjCNEVtLKbH5HRh1TQq3LB7ev-6Vcx8Q">https://searchfox.org/mozilla-<wbr>central/source/browser/base/co<wbr>ntent/test/performance/browser<wbr>_startup_flicker.js</a><br /><a href="https://searchfox.org/mozilla-central/source/browser/base/content/test/performance/browser_windowopen_flicker.js" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=en&q=https://searchfox.org/mozilla-central/source/browser/base/content/test/performance/browser_windowopen_flicker.js&source=gmail&ust=1512589545257000&usg=AFQjCNGqEpUmnoTJ-gr-8V1DbkCqhwIqzQ">https://searchfox.org/mozilla-<wbr>central/source/browser/base/co<wbr>ntent/test/performance/browser<wbr>_windowopen_flicker.js</a><br /><br />These tests currently contain whitelists of known bugs (blocking <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1421456" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=en&q=https://bugzilla.mozilla.org/show_bug.cgi?id%3D1421456&source=gmail&ust=1512589545257000&usg=AFQjCNEogQEuEbaHV7CgJU5AiOeB2146zw">bug 1421456</a>).</p>
Here is how these tests work:<br /><ul><li>as soon as the window we care about is created, we add a MozAfterPaint event listener to it.</li>
<li>for each received MozAfterPaint event, we capture a screenshot of the window using <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawWindow" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=en&q=https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawWindow&source=gmail&ust=1512589545257000&usg=AFQjCNF4_r45yxxCGeu1Bq4Cevns0REsGg">CanvasRenderingContext2D.drawW<wbr>indow()</a>.</li>
<li>remove the event listener after the window is done loading and after several Services.tm.idleDispatchToMain<wbr>Thread callbacks to ensure that the window has settled.</li>
<li>compare the pixel data of each of the captured frames to identify areas that have changed.</li>
<li>for changed areas, see if they are whitelisted, if not make the test
fail and dump base64 encoded data urls of the before/after screenshots,
so that the test failure can be visually debugged.</li>
</ul><div dir="ltr">We
currently cover only the startup and window opening cases, but I expect
us to add similar tests to more areas in the future. Each time we spend
effort reducing flickering in some area of our UI, we should add tests
for it to prevent regression.</div>http://blog.queze.net/post/2017/12/05/Catching-flickering-regressions#comment-formhttp://blog.queze.net/feed/atom/comments/140Thunderbird is the next version of Instantbirdurn:md5:6350abb2580f4384007114bb5ee339e42017-10-18T23:55:00+02:002017-10-18T23:55:00+02:00Florian QuèzeMozilla <div id="magicdomid1338" class="ace-line"><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">Ten years ago, on October 18th 2007, I <a href="http://blog.queze.net/post/2007/10/18/Instantbird-0.1">released Instantbird 0.1</a></span><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">.</span><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i"> I was soon joined by a team of enthusiastic hackers, and </span><span class="">I hoped we could make a better IM client that would replace the</span><span class=""> painfully broken ones that were dominant at the time.</span></div><div class="ace-line"><span class=""><br /></span></div><div id="magicdomid1367" class="ace-line"><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">The Internet has changed a lot since then.</span><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i"> Messaging has moved significantly toward mobile apps. </span><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">T</span><span class="">he clients we were </span><span class="">competing with mostly died themselves.</span><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i"> Even the services we were connecting to are closing down (</span><a href="https://help.aol.com/articles/aim-discontinued" title="AIM will be discontinued on December 15, 2017"><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">AOL</span></a><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">, <a href="http://ismsndeadyet.com/" title="Is MSN dead yet?">MSN</a>, ...)</span><span class="author-a-z66zz85ztez68zbz67z7z75zz84z6z74zkz65zz87zz77z">, or moved away from standard protocols (</span><a href="https://developers.facebook.com/docs/chat/"><span class="author-a-z66zz85ztez68zbz67z7z75zz84z6z74zkz65zz87zz77z">Facebook</span></a><span class="author-a-z66zz85ztez68zbz67z7z75zz84z6z74zkz65zz87zz77z url">)</span><span class="author-a-z66zz85ztez68zbz67z7z75zz84z6z74zkz65zz87zz77z">.</span></div><div class="ace-line"><span class="author-a-z66zz85ztez68zbz67z7z75zz84z6z74zkz65zz87zz77z"><br /></span></div><div id="magicdomid1362" class="ace-line"><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">While we made a</span><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i"> pretty good product, we never managed to attract a critical mass of</span><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i"> users, and we lost half of them when <a href="https://developers.facebook.com/docs/chat/" title="After April 30th, 2015 apps will no longer be able to access the service or API.">the Facebook XMPP gateway was closed</a>. Instantbird still has some uses (especially as an IRC client), but its user interface has aged significantly.</span></div><div class="ace-line"><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i"><br /></span></div><div id="magicdomid1485" class="ace-line"><span class="">I don't think maintaining our infrastructure to support only a few</span><span class=""> thousand users is a good use of my time, and I've lost motivation to</span><span class=""> do it. </span><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">While Instantbird regularly received code contributions from several people and had a nice and friendly community, nobody stood up to replace me and take care of our build infrastructure. This means we haven't been able to produce nightly builds for the last couple months, and are extremely unlikely to be able to ship a new release any time soon. It's time to announce that we are stopping development of Instantbird as a standalone product.</span></div><div id="magicdomid1646" class="ace-line"><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i"><br /></span></div><div class="ace-line"><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">The code base isn't dying though! A large part of it is shared with Thunderbird (since <a href="https://blog.mozilla.org/thunderbird/2012/08/new-thunderbird-chat-do-not-track-and-much-more/" title="The Mozilla Thunderbird Blog: New Thunderbird: Chat, Do Not Track and much more…">it received chat support in 2012</a>). Thunderbird is actively maintained, and has lots of users.</span></div><div class="ace-line"><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i"><br /></span></div><div id="magicdomid1713" class="ace-line"><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">Instead of working on Instantbird, we'll refocus our energy on <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1409891" title="Bug 1409891 - [meta] Improve the experience for users coming from Instantbird">improving the chat features</a> in Thunderbird, so that it becomes friendly for users who loved Instantbird and will seek a replacement.</span><span class="author-a-z66zz85ztez68zbz67z7z75zz84z6z74zkz65zz87zz77z"> This should allow us to focus on features and not worry about infrastructure that was sapping our energy and time. Thunderbird </span><span class="author-a-z76zce2z76znz84zz85zz85zz66zz69zmyc3i">is</span><span class="author-a-z66zz85ztez68zbz67z7z75zz84z6z74zkz65zz87zz77z"> the spiritual successor to Instantbird!</span></div>http://blog.queze.net/post/2017/10/18/Thunderbird-is-the-next-version-of-Instantbird#comment-formhttp://blog.queze.net/feed/atom/comments/139Project ideas wanted for Summer of Code 2016urn:md5:9b1697a461c2afbc19c5dc5dfcab54232016-02-08T20:04:00+01:002016-02-08T20:04:34+01:00Florian QuèzeMozilla <p>Google is running <a href="https://developers.google.com/open-source/gsoc/"><span class="il">Summer</span> <span class="il">of</span> <span class="il">Code</span></a> again in 2016. Mozilla has had the pleasure <span class="il">of</span> participating many years so far, and even though we weren't selected last year, we are hoping to participate again this year. In the next few weeks, we need to prepare a list <span class="il">of</span> suitable projects to support our application.<br />
<br />
Can you think <span class="il">of</span> a 3-month coding project you would love to guide a student through? This is your chance to get a student focusing on it for 3 months! <span class="il">Summer</span> <span class="il">of</span> <span class="il">Code</span> is a great opportunity to introduce new people to your team and have them work on projects you care about but that aren't on the critical path to shipping your next release.<br />
<br />
Here are the conditions for the projects:</p>
<ul><li>
completing the project should take roughly 3 months <span class="il">of</span> effort for a student;</li>
<li>any part <span class="il">of</span> the Mozilla project (Firefox, Firefox OS, Thunderbird, Instantbird, SeaMonkey, Bugzilla, L10n, NSS, IT, and many more) can submit ideas, as long as they require coding work;</li>
<li>there is a clearly identified mentor who can guide the student through the project.</li>
</ul>
<p>
If you have an idea, please put it on the <a href="https://wiki.mozilla.org/Community:SummerOfCode16:Brainstorming">Brainstorming page</a>, which is our idea development scratchpad. Please follow the instructions at the top.<br />
<br />
The deadline to submit project ideas and help us be selected by Google is February 19th.<br />
<br />
Note for students: the student application period starts on March 14th, but the sooner you start discussing project ideas with potential mentors, the better.</p>http://blog.queze.net/post/2016/02/08/Project-ideas-wanted-for-Summer-of-Code-2016#comment-formhttp://blog.queze.net/feed/atom/comments/138What about search hijacking?urn:md5:8d0fe7c805adec64dfea674ed0f159e82015-11-03T12:00:00+01:002015-11-03T12:22:57+01:00Florian QuèzeMozilla <p>Some people may have noticed that lately my work has been concentrated on bugs with 'hijacking' in the status whiteboard, but we never really took the time to explain what the goals of this work are, or aren't.</p>
<p>What we call "search hijacking" is when a user's default search engine is changed without the user's intent, typically while the user is installing some other software on his system. Search hijacking is a very common phenomenon, and is causing a severely degraded user experience for the affected users; sometimes leading users to switch to another browser to stop searching with a search engine they never wanted and don't know how to change.</p>
<p>When the search service (the back-end code handling search engines) was initially created <a title="Bug 317107 - New search service" href="https://bugzilla.mozilla.org/show_bug.cgi?id=317107">about a decade ago</a>, search hijacking wasn't a thing. Things were designed for maximum user customizability. Unfortunately, these days the ease of customization combined with the monetary incentives offered has made search a hijacking target.</p>
<p>The current situation is untenable for Firefox users, so we had to do something. Deciding what to do wasn't obvious, because the difference between the user customizing something and unwanted software writing things to disk isn't always as clear as we would like it to be.</p>
<p>Whatever we do, hijackers will be able to change their code to workaround our changes. In some way, this is an arms race. We can make changes every 6 weeks if needed. We have reasons to believe that it takes most hijackers several months to update their hacks and deploy them, as they need to be bundled with other software for downloads. Our first approach to the problem, especially while our resources to tackle this were very limited, was to do tiny changes every once in a while to breaks some hijacks and help our users for a few months. We didn't want to do pointless changes, but we could find a few things that didn't feel right in our code, and fixed them.</p>
<p>For example, we had some evidence that a significant number of users had modified yahoo.xml files in their application folder. Being able to hijack the default engine by just changing an URL in a plain XML file on the disk was just ridiculous, especially when almost every other non-binary file used by the browser is packed inside the omni.ja file. We fixed this in <a title="Bug 1162569 - default engine files should be in the omni.ja file" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1162569">bug 1162569</a> for Firefox 40. Similarly, it was possible to change the default engine by dropping in the user's profile a file redefining the same engine. There is no way to end up in this situation 'naturally', because we refuse to install duplicate engines. The logical fix was to ensure that engines in the profile can't override built-in engines. We fixed this in <a title="Bug 1109354 - prefer Firefox default engines over profile-installed plugins with the same name" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1109354">bug 1109354</a>, also for Firefox 40. This was also a good opportunity to add lots of tests about how engines are loaded.</p>
<p>Something seriously limiting our ability to correctly attack the problem was the lack of good data. We found the evidence of modified yahoo.xml files in the wild almost by accident, while looking at incoherent default engine data we received in FHR. In parallel to the fixes mentioned above, we also introduced a better data collection mechanism, with the <a title="Bug 1164159 - Send information about the default search engines through Telemetry" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1164159">addition of a telemetry probe</a> recording details about how the current default engine has been loaded.</p>
<p>I haven't been able to look at release-user data collected through this new telemetry probe yet (I intend to do so soon!), but a quick analysis of the early data we got from nightly and aurora users revealed that a non-trivial amount of users had no engine at all, resulting in search features being completely broken for them. This situation can happen if the hijackers removed all the other 'competing' engines to ensure they are the only one, and then got removed themselves, eg. due to one of our previous fixes. We addressed this problem in <a title="Bug 438599 - the currentEngine attribute of nsIBrowserSearchService should never be null" href="https://bugzilla.mozilla.org/show_bug.cgi?id=438599">bug 438599</a> for Firefox 43, by unhiding automatically the original default engine when no visible engine is left.</p>
<p>A major change that is coming soon to Firefox is required <a href="https://wiki.mozilla.org/Add-ons/Extension_Signing">add-on signing</a>. This is a game changer for hijacking, because now anything that lets malware with disk access insert unsigned-code that changes Firefox's behavior is explicitly a bug. This means we are now in a position to close lots of doors that were wide open, to ensure the control is in the hands of our users, not hijackers. There are 2 supported ways to install new engines: either the user does it through the Firefox UI (eg. using OpenSearch discovery on a website), or it's done by a signed add-on. Any other way left to install a search engine and set it as the default is something we need to look into.</p>
<p>In order to better enforce this, we need to be reasonably confident that the data from the user's profile has actually been written due to intentional user actions. The next step of our hijacking remediation work is to cleanup the way search-related data is stored in user profiles. We used to store 2 JSON files (one cache file dismissed after each update, and one file with metadata), in addition to a plain xml file for each user-installed engine. This made it easy to mess either with the xml files (just dropping in the folder an xml file in the open search format was enough to install an engine) or with the metadata. In <a title="Bug 1203167 - Store user-installed search plugins in a JSON file and stop loading [profile]/searchplugins/*.xml" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1203167">bug 1203167</a> (just landed on nightly), I'm changing the profile storage so that everything is in a single file. The data is stored in a JSON format, but the file is written to disk using OS.File's compression feature, which in addition to reducing the file size on disk will also make the file resistant to dumb search & replace attacks. The important data stored in the file (eg. the name of the user-selected default engine) is protected from tampering using verification hashes. While these hashes are by no way meant to be cryptographically secure, they should be unique to each profile, and so make tampering harder. Changing the storage format was also an opportunity to save slightly more data about how users installed engines. For example, if an engine was installed from OpenSearch discovery, we will remember the hostname of the website from which it was downloaded.</p>
<p>We are not done. We have a few more doors to close. We also don't expect to ever be completely resistant to hijacking, as an attacker with local admin access can do whatever. We mostly aim to make hijacking hard enough that it will require some (minimal) engineering skills to do it. Dropping a file on disk or doing a search & replace on the default engine's URL shouldn't be enough. It should require running local code. We can’t protect users from all their mistakes, but we can draw a line between malware-behavior and user-customization that's clear enough for antivirus vendors to enforce it for their users.</p>
<p>We are still working on preventative measures. But a few releases from now, we can expect to start offering curative measures. With Firefox 45 we'll start recording information about engines origin. At some point (currently targeting Firefox 46), we could offer users who have non-default engines of unknown origin an opportunity to check their search settings and revert to the original default if they don't remember changing their default engine themselves. UX is currently thinking this through.</p>http://blog.queze.net/post/2015/11/02/What-about-search-hijacking#comment-formhttp://blog.queze.net/feed/atom/comments/137Mozilla not accepted for Google Summer of Code 2015urn:md5:94055dd39fc4e453b226038dd4457d4e2015-03-03T10:56:00+01:002015-03-03T10:56:28+01:00Florian QuèzeMozilla As you may have already seen, Mozilla is not in the list of <a href="https://www.google-melange.com/gsoc/org/list/public/google/gsoc2015">organizations accepted for Google Summer of Code 2015</a>.<br /><br />People who have observed the list carefully may have noticed that there are fewer accepted organizations this year: 137 (down from <a href="https://www.google-melange.com/gsoc/org/list/public/google/gsoc2014">190 in 2014</a> and <a href="https://www.google-melange.com/gsoc/org/list/public/google/gsoc2013">177 in 2013</a>). Other organizations that have participated successfully several times are also not in the 2015 list (eg. Linux Foundation, Tor, ...).<br /><br />After a quick email exchange with Google last night, here is the additional information I have:<br /><ul><li>not accepting Mozilla was a difficult decision for them. It is not the result of a mistake on our part or an accident on their side.</li>
<li>there's an assumption that not participating for one year would not be as damaging for us as it would be for some other organizations, due to us having already participated many times.</li>
<li>this event doesn't affect negatively our chances of being selected next year, and we are encouraged to apply again.</li>
</ul>
<br />This news has been a surprise for me. I am disappointed, and I'm sure lots of people reading this are disappointed too. I would like to thank all the people who considered participating this year with Mozilla, and especially all the Mozillians who volunteered to mentor and contributed great project ideas. I would also like to remind students that while Summer of Code is a great opportunity to contribute to Mozilla, it's <a href="http://www.whatcanidoformozilla.org/#!/progornoprog/proglang">not the only one</a>. Feel free to contact mentors if you would like to work on some of the suggested ideas anyway.<br /><br />Let's try again next year!http://blog.queze.net/post/2015/03/03/Mozilla-not-accepted-for-Google-Summer-of-Code-2015#comment-formhttp://blog.queze.net/feed/atom/comments/135FOSDEM 2015 slides - What's new in Firefox?urn:md5:3c26f6ab09b46e1997f589eb70dcc3ef2015-02-11T15:48:00+01:002015-02-11T15:48:35+01:00Florian QuèzeMozilla <p>This year at FOSDEM I talked about Firefox. I summarized the major changes that have been made to Firefox in 2014, and what our plans are for 2015.</p>
<p>Here are the slides of my <a href="https://fosdem.org/2015/schedule/event/whats_new_in_firefox/">FOSDEM presentation</a>:<br />
<a title="What's new in Firefox? - FOSDEM2015 slides" href="https://people.mozilla.org/~fqueze2/slides/fosdem2015/"><img alt="What's new in Firefox? What happened in 2014? What's the plan for 2015? FOSDEM 2015, by Florian Quèze" src="http://blog.queze.net/public/fosdem2015-cover-slide.png" /></a></p>http://blog.queze.net/post/2015/02/11/FOSDEM-2015-slides-What-s-new-in-Firefox#comment-formhttp://blog.queze.net/feed/atom/comments/134Project ideas wanted for Summer of Code 2015urn:md5:89db33e9abf4535471926eca140fda5d2015-01-22T20:52:00+01:002015-01-22T20:52:05+01:00Florian QuèzeMozilla <div class="post-content"><p>Google is <a title=" Google Summer of Code 2015 and Google Code-in 2014 are on!" href="http://google-opensource.blogspot.fr/2014/10/google-summer-of-code-2015-and-google.html">running Summer of Code again in 2015</a>.
Mozilla has had the pleasure of participating every year so far, and we
are hoping to participate <a href="https://wiki.mozilla.org/SummerOfCode">again</a> this year. In the next few weeks, we need
to prepare a list of suitable projects to support our application.<br />
<br /><strong><strong>Can you think of a 3-month coding project you would love to guide a student through?</strong></strong> This is your chance to get a student
focusing on it for 3 months! Summer of Code is a great opportunity to introduce new people to
your team and have them work on
projects you care about but that aren't on the critical path to shipping your next release.<br /><br />Here are the conditions for the projects:</p>
<ul><li>completing the project should take roughly 3 months of effort for a student;</li>
<li>any part of the Mozilla project (Firefox, Firefox OS, Thunderbird,
Instantbird, SeaMonkey, Bugzilla, L10n, NSS, IT, and many more) can
submit ideas, as long as they require coding work;</li>
<li>
there is a clearly identified mentor who can guide the student through the project.</li>
</ul>
<p><br />If
you have an idea, please put it on the <a href="https://wiki.mozilla.org/Community:SummerOfCode15:Brainstorming">Brainstorming page</a>, which is our
idea development scratchpad. Please read the instructions at the top –
following them vastly increases chances of your idea getting added
to the <a href="https://wiki.mozilla.org/Community:SummerOfCode15">formal Ideas page</a>.<br />
<br />The deadline to submit project ideas and help us be selected by Google is February 20th.</p>
<p>Note for students: the student application period starts on March 16th, but the sooner you start discussing project ideas with potential mentors, the better.<br /><br />Please feel free to discuss with me any question you may have related to Mozilla's participation in Summer of Code. Generic Summer of Code questions are likely already answered in the <a title=" Google Summer of Code 2015 Frequently Asked Questions " href="https://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page">FAQ</a>.</p>
</div>http://blog.queze.net/post/2015/01/22/Project-ideas-wanted-for-Summer-of-Code-2015#comment-formhttp://blog.queze.net/feed/atom/comments/133Firefox is awesomeurn:md5:533d3601d2c15f2311e17c0ac291b4182014-07-27T22:15:00+02:002014-07-27T22:15:00+02:00Florian QuèzeMozilla <p>"<em>Hey,
you know what? Firefox is awesome!</em>" someone exclaimed at the other end
of the <a title="La Coroutine" href="http://www.lacoroutine.org/">coworking space</a> a few weeks ago. This piqued my curiosity, and I
moved closer to see what she was so excited about.</p>
<p>When
I saw the feature she was delighted of finding, it reminded me a
similar situation several years ago. In high school, I was trying to
convince a friend to switch from IE to Mozilla. The arguments about
respecting web standards didn't convince him. He tried Mozilla anyway to
please me, and found one feature that excited him.<br />
He
had been trying to save some images from webpages, and for some reason
it was difficult to do (possibly because of context menu hijacking,
which was common at the time, or maybe because the images were displayed
as a background, …). He had even written some Visual Basic code to
parse the saved HTML source code and find the image urls, and then
downloaded them, but the results weren't entirely satisfying.<br />
Now
with Mozilla, he could just right click, select "View Page Info", click
on the "Media" tab, and find a list of all the images of the page. I
remember how excited he looked for one second, until he clicked a
background image in the list and the preview stayed blank; he then
clicked the "Save as" button anyway and… nothing happened. Turns out
that "Save as" button was just producing an error in the Error Console.
He then looked at me, very disappointed, and said that my Mozilla isn't
ready yet.<br />
After that disappointment, I didn't insist much on him using Mozilla instead of IE (I think he did switch anyway a few weeks or months later).</p>
<p>A few months later, as I had time during summer vacations, I tried to
create an add-on for the last thing I could do with IE but not Firefox:
list the hostnames that the browser connects to when loading a page (the
add-on, <a href="https://addons.mozilla.org/en-US/firefox/addon/view-dependencies/">View Dependencies</a>, is on AMO). I used this to maintain a <a href="http://en.wikipedia.org/wiki/Hosts_%28file%29">hosts file</a> that was blocking ads on the network's gateway.<br />
Working
on this add-on project caused me to look at the existing Page Info code
to find ideas about how to look through the resources loaded by the
page. While doing this, I stumbled on the problem that was causing
background image previews to not be displayed. Exactly 10 years ago, I
created a patch, created a bugzilla account (I had been lurking on
bugzilla for a while already, but without creating an account as I
didn't feel I should have one until I had something to contribute), and
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=229441#c12">attached the patch</a> to the existing <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=229441">bug</a> about this background preview issue.<br />
Two days later, the patch was reviewed (thanks db48x!), I addressed the
review comment, attached a new patch, and it was checked-in.<br />
I remember how excited I was to verify the next day that the bug was gone
in the next nightly, and how I checked that the code in the new nightly
was actually using my patch.</p>
<p>A couple months later, I <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=239472">fixed the "Save as" button</a> too in time for Firefox 1.0.</p>
<p>Back to 2014. The reason why someone in my coworking space was finding
Firefox so awesome is that "<em>You can click "View Page Info", and then
view all the images of the page and save them.</em>" Wow. I hadn't heard
anybody talking to me about Page Info in years. I did use it a lot
several years ago, but don't use it that much these days. I do agree
with her that <strong>Firefox is awesome</strong>, not really because it can save images
(although that's a great feature other browsers don't have), but <strong>because
anybody can make it better</strong> for his/her own use, and by doing so making
it awesome <strong>for millions of other people</strong> now but also in the future. Like
I did, ten years ago.</p>http://blog.queze.net/post/2014/07/27/Firefox-is-awesome#comment-formhttp://blog.queze.net/feed/atom/comments/132Converting old Mac minis into CentOS Instantbird build slavesurn:md5:2db95fe73b4c893332b305ae8950eaa82014-07-25T23:24:00+02:002014-07-25T23:24:00+02:00Florian QuèzeMozilla <p>A while ago, I received a few <a href="http://armenzg.blogspot.de/2014/05/do-you-need-used-mac-mini-for-your.html">retired Mozilla minis</a>. Today 2 of them started their new life as CentOS6 build slaves for Instantbird, which means <a href="http://blog.instantbird.org/2014/07/linux-nightly-builds-back/">we now have Linux nightlies again</a>! Our previous Linux build slave, running CentOS5, was no longer able to build nightlies based on the current mozilla-central code, and this is the reason why we haven't had Linux nightlies since March. We know it's been a long wait, but to help our dear Linux testers forgive us, we started offering 64bit nightly builds!</p>
<p>For the curious, and for future reference, here are the steps I followed to install these two new build slaves:</p>
<h2>Partition table</h2>
<p>The Mac minis came with a GPT partition table and an hfs+ partition that we don't want. While the CentOS installer was able to detect them, the grub it installed there didn't work. The solution was to convert the GPT partition table to the MBR older format. To do this, boot into a modern linux distribution (I used an Ubuntu 13.10 live dvd that I had around), install <code>gdisk</code> (<code>sudo apt-get update && sudo apt-get gdisk</code>) and use it to edit the disk's partition table:</p>
<p><code>sudo gdisk /dev/sda</code><br />Press '<code>r</code>' to start recovery/transformation, '<code>g</code>' to convert from GPT to MBR, '<code>p</code>' to see the resulting partition table, and finally '<code>w</code>' to write the changes to disk (instructions initially from <a href="http://www.firewing1.com/blog/2012/03/05/how-convert-gpt-disk-layout-ms-dosmbr-layout-without-data-loss-and-gigabyte-hybrid">here</a>).<br />Exit gdisk.<br />Now you can check the current partition table using gparted. At this point I deleted the hfs+ partition.</p>
<h2>Installing CentOS</h2>
<p>The version of CentOS needed to use the current Mozilla build tools is CentOS 6.2. We tried before using another (slightly newer) version, and we never got it to work.</p>
<p>Reboot on a CentOS 6.2 livecd (press the '<code>c</code>' key at startup to force the mac mini to look for a bootable CD).<br />Follow the instructions to install CentOS on the hard disk.<br />I customized the partition table a bit (50000MB for <code>/</code>, 2048MB of swap space, and the rest of the disk for <code>/home</code>).</p>
<p>The only non-obvious part of the CentOS install is that the boot loaded needs to be installed on the MBR rather than on the partition where the system is installed. When the installer asks where grub should be installed, set it to /dev/sda (the default is /dev/sha2, and that won't boot). Of course I got this wrong in my first attempts.</p>
<h2>Installing Mozilla build dependencies</h2>
<p>First, install an editor that is usable to you. I typically use emacs, so: <code>sudo yum install emacs</code></p>
<p>The Mozilla Linux build slaves use a specifically tweaked version of gcc so that the produced binaries have low runtime dependencies, but the compiler still has the build time feature set of gcc 4.7. If you want to use something as old as CentOS6.2 to build, you <strong>need</strong> this specific compiler.</p>
<p>The good thing is, there's a yum repository publicly available where all the customized mozilla packages are available. To install it, create a file named <code>/etc/yum.repos.d/mozilla.repo</code> and make it contain this:</p>
<pre>[mozilla]
name=Mozilla
baseurl=http://puppetagain.pub.build.mozilla.org/data/repos/yum/releng/public/CentOS/6/<em>x86_64</em>/
enabled=1
gpgcheck=0</pre><p>Adapt the <code>baseurl</code> to finish with <code>i386</code> or <code>x86_64</code> depending on whether you are making a 32 bit or 64 bit slave.</p>
<p>After saving this file, you can check that it had the intended effect by running this comment to list the packages from the mozilla repository: <code>repoquery -q --repoid=mozilla -a</code><br /><br />You want to install the version of gcc473 and the version of mozilla-python27 that appear in that list.</p>
<p>You also need several other build dependencies. <a href="https://developer.mozilla.org/en-US/">MDN </a>has <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Linux_Prerequisites#RedHat_Enterprise_Linux_%28RHEL%29.2FCentOS.2FFedora">a page listing them</a>:</p>
<code>yum groupinstall 'Development Tools' 'Development Libraries' 'GNOME Software Development'</code><br />
<code>yum install mercurial autoconf213 glibc-static libstdc++-static yasm wireless-tools-devel mesa-libGL-devel alsa-lib-devel libXt-devel gstreamer-devel gstreamer-plugins-base-devel pulseaudio-libs-devel</code><p>
Unfortunately, two dependencies were missing on that list (I've now fixed the page):
<br /><code>yum install gtk2-devel dbus-glib-devel</code></p>
<p>At this point, the machine should be ready to build Firefox.</p>
<p>Instantbird, because of libpurple, depends on a few more packages:<br /><code>yum install avahi-glib-devel krb5-devel</code></p>
<p>And it will be useful to have ccache:<br />
<code>yum install ccache</code></p>
<h2>Installing the buildbot slave</h2>
<p>First, install the buildslave command, which unfortunately doesn't come as a yum package, so you need to install easy_install first:</p>
<p><code>yum install python-setuptools python-devel mpfr<br />easy_install buildbot-slave</code></p>
<p>python-devel and mpfr here are build time dependencies of the buildbot-slave package, and not having them installed will cause compiling errors while attempting to install buildbot-slave.</p>
<p>We are now ready to actually install the buildbot slave. First let's create a new user for buildbot:</p>
<code><p>adduser buildbot<br />su buildbot<br />cd /home/buildbot</p>
</code><p>Then the command to create the local slave is:</p>
<p><code>buildslave create-slave --umask=022 /home/buildbot/buildslave buildbot.instantbird.org:9989 linux-s<em>N password</em></code></p>
<p>The buildbot slave will be significantly more useful if it starts automatically when the OS starts, so let's edit the crontab (<code>crontab -e</code>) to add this entry:<br /><code>@reboot PATH=/usr/local/bin:/usr/bin:/bin /usr/bin/buildslave start /home/buildbot/buildslave</code></p>
<p>The reason why the PATH environment variable has to be set here is that the default path doesn't contain /usr/local/bin, but that's where the mozilla-python27 packages installs python2.7 (which is required by <code>mach</code> during builds).</p>
<p>One step in the Instantbird builds configured on our buildbot use <code>hg clean --all</code> and this requires the purge mercurial extension to be enabled, so let's edit <code>~buidlbot/.hgrc</code> to look like this:<br /><code>$ cat ~/.hgrc <br />[extensions]<br />purge =</code></p>
<p>Finally, ssh needs to be configured so that successful builds can be uploaded automatically. Copy and adapt <code>~buildbot/.ssh</code> from an existing working build slave. The files that are needed are <code>id_dsa</code> (the ssh private key) and <code>known_hosts</code> (so that ssh doesn't prompt about the server's fingerprint the first time we upload something).</p>
<p>Here we go, working Instantbird linux build slaves! Figuring out all these details for our first CentOS6 slave took me a few evenings, but doing it again on the second slave was really easy.</p>http://blog.queze.net/post/2014/07/25/Converting-old-Mac-minis-into-CentOS-Instantbird-build-slaves#comment-formhttp://blog.queze.net/feed/atom/comments/131Summer of Code 2014 projectsurn:md5:3789d0d71eaa50aaf620e5942dad00d72014-05-20T16:50:00+02:002014-06-02T18:58:37+02:00Florian QuèzeMozilla <p>The coding period is starting for Google Summer of Code 2014. I am pleased to list the 28 projects (7 more than last year!) that are mentored this year under the Mozilla banner.</p>
<p>The title of each project is linked to the location where the student will be posting weekly updates on their progress, if you want to follow along with a project you are interested in. I’m sure they would appreciate any help or advice you have :-) Please help them write useful code during the summer!</p>
<table>
<tbody><tr><th>Project Title
</th><th>Student
</th><th>Mentor
</th></tr><tr><td><a href="http://www.iakshay.net/google-summer-of-code/">MDN – Bug Fixing and Polishing</a>
</td><td>Akshay Aurora
</td><td>David Walsh
</td></tr><tr><td><a href="http://andregarzia.com/pages/en/blog/">Firefox OS Games Resources</a>
</td><td>Andre Alves Garzia
</td><td>Soledad Penades
</td></tr><tr><td><a href="https://wiki.mozilla.org/SpeechRTC_-_Speech_enabling_the_open_web">Development of both online as offline speech recognition to B2G and Firefox</a>
</td><td>Andre Natal
</td><td>Guilherme Gonçalves
</td></tr><tr><td><a href="http://meemoo.org/blog">Porting key Meemoo modules to NoFlo</a>
</td><td>Vilson Vieira
</td><td>Forrest Oliphant
</td></tr><tr><td><a href="http://pankajmalhotra.com/">Functional Test Suite and Features for QA Taskboard - One and Done</a>
</td><td>Pankaj Malhotra
</td><td>Bob Silverberg
</td></tr><tr><td><a href="http://codingowl.tumblr.com/gsoc2014">Implement Zest recorder and runner </a>
</td><td>Sunny Gogoi
</td><td>Simon Bennetts
</td></tr><tr><td>Improve font handling and text shaping in Servo
</td><td>Patryk Obara
</td><td>Patrick Walton
</td></tr><tr><td><a href="http://nitsurat.acm.org/gargsms/">Add learning capability in the Gaia Keyboard prediction</a>
</td><td>Sukant Garg
</td><td>Jan Jongboom
</td></tr><tr><td><a href="http://blog.gabrielivanica.com/">Browsercast</a>
</td><td>Gabriel Ivanica
</td><td>Greg Wilson
</td></tr><tr><td><a href="https://wiki.mozilla.org/User:Ishitva">Migrate from YUI2 to YUI3 . Bug 453268</a>
</td><td>Ishitva Goel
</td><td>Byron Jones
</td></tr><tr><td><a href="http://yesitsyash.blogspot.in/search/label/google%20summer%20of%20code">Implement Speech Synthesis on Desktop Firefox</a>
</td><td>Yashasvi Girdhar
</td><td>Eitan
</td></tr><tr><td><a href="http://sigwinch.wordpress.com/">Add markdown support to Bugzilla</a>
</td><td>Koosha Khajehmoogahi
</td><td>David Lawrence
</td></tr><tr><td><a href="http://rishav006.wordpress.com/">Improved messaging functionality and interaction in the SMS app</a>
</td><td>Kumar Rishav
</td><td>Gabriele Svelto
</td></tr><tr><td><a href="http://me-levens.rhcloud.com/">Update Lightning Invitations to Latest Specification</a>
</td><td>Malintha Fernando
</td><td>Mohit Kanwal
</td></tr><tr><td><a href="http://benjamin.smedbergs.us/weekly-updates.fcgi/user/manishearth%40gmail.com">Implement XMLHttpRequest in Servo</a>
</td><td>Manish Goregaokar
</td><td>Josh Matthews
</td></tr><tr><td><a href="http://mayanktg.github.io">Instantbird: WebRTC Support</a>
</td><td>Mayank Kumar
</td><td>BenediktP
</td></tr><tr><td><a href="http://blog.nhnt11.com/">Instantbird: Indexed Chat History and Infinite Conversation Scrollback</a>
</td><td>Nihanth Subramanya
</td><td>aleth
</td></tr><tr><td><a href="http://piotr.banaszkiewicz.org/tags/gsoc/">Peer instruction on the Web</a>
</td><td>Piotr Banaszkiewicz
</td><td>mhoye
</td></tr><tr><td><a href="http://abyteaday.quora.com/">Implementation of SVG Backend for PDF.js</a>
</td><td>Pramodh KP
</td><td>yury
</td></tr><tr><td><a href="http://blog.121n3.com/">A Desktop Environment based on B2G</a>
</td><td>Towfique Anam
</td><td>Fabrice Desré
</td></tr><tr><td><a href="http://blog.rgaiacs.com/tags/gsoc2014.html">Math virtual keyboard</a>
</td><td>Raniere Silva
</td><td>Salva
</td></tr><tr><td><a href="http://summeroflightning.wordpress.com/">Improve Calendar Backends</a>
</td><td>Reid Anderson
</td><td>Philipp Kewisch
</td></tr><tr><td><a href="http://www.wiredcrow.com/?page_id=104">Kitherder, web application for the Security Mentorships program</a>
</td><td>Renee Cheung
</td><td>Yvan Boily
</td></tr><tr><td><a href="http://sawrubh.tumblr.com/">FileLinks in IMs / File transfer</a>
</td><td>Saurabh Anand
</td><td>clokep
</td></tr><tr><td><a href="http://sshagarwal.blogspot.fr/">Thunderbird - Make the unit test framework work with maildir mailbox format</a>
</td><td>Suyash Agarwal
</td><td>R Kent James
</td></tr><tr><td><a href="http://tharshan-gsoc.logdown.com/">Mozilla Intellego -- Terminology-driven automatic translation of web sites.</a>
</td><td>Tharshan Muthulingam
</td><td>Jeff
</td></tr><tr><td><a href="https://wiki.mozilla.org/Jetpack/e10s">Implement Electrolysis Support for Addon SDK</a>
</td><td>Tomislav Jovanovic
</td><td>gozala
</td></tr><tr><td><a href="https://vaibhavag.wordpress.com/">Mochitest Failure Investigator</a>
</td><td>Vaibhav Agrawal
</td><td>joelmaher
</td></tr></tbody></table>http://blog.queze.net/post/2014/05/20/Summer-of-Code-2014-projects#comment-formhttp://blog.queze.net/feed/atom/comments/130Thoughts about mentoring Summer of Code studentsurn:md5:f988c1a1e11d55d66fbc4b715c02da182014-04-22T22:24:00+02:002014-04-22T22:24:00+02:00Florian QuèzeMozilla <div class="" id="magicdomid4"><span class="author-g-db1yqiaaskssz122zlos">I've
mentored Google Summer of Code students 3 years in a row, and I would
like to share with new GSoC mentors what I've learned, in the hope that
it can help them get more out of the summer. I'm going to assume that
most mentors share these 3 goals:</span></div><ul><li><span class="author-g-db1yqiaaskssz122zlos">get usable code at the end of the summer</span></li>
<li><span class="author-g-db1yqiaaskssz122zlos">train long term contributors who will stay active after the end of the summer</span></li>
<li><span class="author-g-db1yqiaaskssz122zlos">avoid spending disproportionate amounts of time mentoring.</span></li>
</ul><div class="" id="magicdomid10"><span class="author-g-db1yqiaaskssz122zlos">I
can't overstate how important it is to give the student good working
habits from the very beginning. If you setup a good working relationship
from the beginning, you are on for an awesome summer. If you let a
student do things that frustrate you without sending immediate feedback
about it, you'll both suffer during the whole summer.</span></div><div class="" id="magicdomid12"><span class="author-g-db1yqiaaskssz122zlos">Here are some frequent problems that are likely to happen if you don't pay enough attention in the beginning:</span></div><ul><li><span class="author-g-db1yqiaaskssz122zlos">Because of the way school works, students are used to hiding their work
until it's ready to be evaluated. Training them to show
work-in-progress code so that you can provide early feedback and
effectively help them takes time. You'll likely need to ask "show me the
code, please" several times, encourage them, and comfort them that it's
OK to show unfinished non-working code.</span></li>
<li><span class="author-g-db1yqiaaskssz122zlos">Students are used to receiving feedback from one person, and are likely
to send their work only to their mentor when requesting feedback or
expecting evaluation. Encourage the student to discuss the project with
all the relevant people and more generally to interact with the
community; avoid private discussion of technical matters. Doing this has
2 interesting consequences: the time you'll spend mentoring the student
will be dramatically reduced because the mentoring load will be spread
across all your team (for me this often meant that when my student asked
a question on IRC, he received a good and timely answer before I had
even read the question!), and the student will feel like he's part of
your team, which increases the likelihood of staying around after the
summer.</span></li>
<li><span class="author-g-db1yqiaaskssz122zlos">Unless given specific directions, students tend to work on a branch or
on a repository somewhere, and think about merging their code or getting
a review only at the end of the summer. It's common to see student
applications where the schedule says that they will do all the coding
work, and then get a review during the last week of the summer to land
the code. Experienced Mozilla developers knows there's no way sending a
several-months-of-work-worth patch to someone's review queue and
expecting a timely review will work. But students usually dramatically
underestimate both the time it takes to get a review AND the time it
takes to address the feedback (probably because at school they hand
their work and only expect a grade, or a pass/fail in return). As a
mentor it's your job to ensure they get their code through review. Urge
students to write small patches, and get them reviewed as soon as
possible. Students (and other developers ;)) will be tempted to 'just
add one more little feature before attaching the patch'. Resist! Filing a
new bug is easy. If the schedule of a student involves writing code
without submitting it for review and inclusion, this raises a red flag
for me: is there really no way to break this down to smaller pieces that
could land separately? Don't hesitate to rediscuss the schedule with
the student if you aren't fully happy with it.</span></li>
<li><span class="author-g-db1yqiaaskssz122zlos">Given that the students are being paid money to participate in GSoC, it
makes sense that lots of students will consider summer of code as
"work", and have money be the primary motivator; which means that once
they get the final payment, they disappear. This feeling can't be
avoided in all cases, but if we can get the student to instead feel that
the money is an opportunity to not do any other work during that time
to focus full-time on volunteering for a project they care about, the
student is likely to stay around for much longer than the summer. This
can be done by treating the student more like a volunteer than like
someone paid to be on your team. Get the student to have code landing
early, and often. Get the student addicted to restarting his nightly
build and seeing his code is in use there. Encourage the student to not
only fix things directly related to his GSoC project, but to also spend a
few hours here and there fixing his own itches and looking into other
bugs that make the product better for his own use cases.</span></li>
</ul><div class="" id="magicdomid18"><span class="author-g-db1yqiaaskssz122zlos">Here
is one suggestion to get students started: during the community
bounding period, assign them a 'small' project to warm up. The ideal
characteristics of such a project are:</span></div><ul><li><span class="author-g-db1yqiaaskssz122zlos">will get the student to go through all the processes of your team
(using bugzilla, attaching patches, requesting review, handling review
comments, …)</span></li>
<li><span class="author-g-db1yqiaaskssz122zlos">will get the student to touch code areas that will be relevant during the summer.</span></li>
<li><span class="author-g-db1yqiaaskssz122zlos">can be completed by the student before the ends of the community
bounding period (think of it as a 2-weeks project, but size it like
something you would do in a rainy week-end. Remember that most of the
time spent by the student will not be actual coding, but learning to
interact with your team, and this is the very reason why this project is
done during the community bounding period).</span></li>
<li><span class="author-g-db1yqiaaskssz122zlos">once this small project lands, it will be highly visible, and will
cause the student to receive appreciation from other people in your
team/community.</span></li>
</ul><div class="" id="magicdomid23"><span class="author-g-db1yqiaaskssz122zlos">It's
not always possible to find a project fitting perfectly here, but it's
usually possible to find something close enough to fit the purpose of
getting the student started. The Instantbird team will be using this
'small community bounding project' approach to starting the mentoring
relationship for the third time this year.</span></div><div class="" id="magicdomid25"><span class="author-g-db1yqiaaskssz122zlos">I
tend to think that getting the student started on the right track is
the most important thing a mentor needs to do, and if it's done
correctly the rest of the mentoring is easy and pleasurable.</span></div>http://blog.queze.net/post/2014/04/22/Thoughts-about-mentoring-Summer-of-Code-students#comment-formhttp://blog.queze.net/feed/atom/comments/129Summer of Code Student application deadline approachingurn:md5:ba6c569fdf994a1ee5324b8dc04d90712014-03-20T18:37:00+01:002014-03-20T18:37:55+01:00Florian QuèzeMozilla <p>This is just a reminder to students interested in applying for Google Summer of Code 2014: the application deadline is "21 March 19:00 UTC" and no late application will be accepted.</p>
<p>If you intend to apply to Google Summer of Code this year and haven't submitted your application yet, don't wait: <a href="https://www.google-melange.com/gsoc/homepage/google/gsoc2014">apply now</a>!</p>http://blog.queze.net/post/2014/03/20/Summer-of-Code-Student-application-deadline-approaching#comment-formhttp://blog.queze.net/feed/atom/comments/128Google Summer of Code Student who went on to become a Mentor/Org Adminurn:md5:4343a04437a70735181b1bd9299686fb2014-02-28T14:28:00+01:002014-02-28T16:06:17+01:00Florian QuèzeMozilla <p>Since 2006, I've probably tried every possible role as a Google Summer of Code participant: accepted student, rejected student, submitter of a rejected organization application, mentor of successful students, mentor of a failing student, co-administrator, and now administrator. Here's my story:</p>
<ul><li>In 2006, I had the pleasure of being selected to participate as a student for the Mozilla organization. The <a title="Bug 339102 - SoC Tracking - Enhanced Page Info window" href="https://bugzilla.mozilla.org/show_bug.cgi?id=339102">work I did on the Page Info dialog</a> eventually shipped as part of Firefox 3.0.</li>
<li>In 2007 I applied as a student again, to a different organization, but unfortunately wasn't selected. However, I received an email from someone from the organization who told me the application was good and they would have liked to take me as a student if they had received more slots. He offered to mentor me if I decided to move forward with the project anyway, which I did! I completed the project and in October 2007, Instantbird 0.1 was released. <a href="http://instantbird.com/">Instantbird</a> is a cross platform, easy to use, instant messaging client based on Mozilla technologies.</li>
<li>In 2007, I was selected by Mozilla for an internship in the Firefox team, and spent the end of the year in their headquarters in Mountain View, California. I think this was in large part because people were happy about the work I did in 2006 as a Summer of Code student.</li>
<li>In 2008, 2009 and 2010, I focused on Instantbird, which had a growing community of volunteers improving it every day. I sent Summer of Code organization applications on behalf of the Instantbird community, but they weren't accepted. When I asked for feedback, I was told that we should try to work with Mozilla.</li>
<li>And this is what we did in 2011! <a title="Gervase Markham" href="http://blog.gerv.net/">Gerv</a> agreed to let us add Instantbird project ideas to the Mozilla idea list. In 2011 I mentored a student, who completed successfully his work on implementing XMPP in JavaScript for Instantbird. In October I attended the mentor summit in Mountain View.</li>
<li>In 2012, I mentored another student, who did some excellent work on improving the user experience for new users during the first run of Instantbird.</li>
<li>In 2013, Gerv, who had been handling Summer of Code for Mozilla since the beginning in 2005, asked me if I would be interested in eventually replacing him as an Administrator. After some discussion, I accepted the offer, and we agreed to have a transition period. In 2013, I was backup administrator. I also mentored for the third year in a row. Unfortunately I had to fail my student. This was frustrating, but also a learning experience.</li>
<li>In 2014, I submitted the Summer of Code organization application on behalf of Mozilla, <a href="http://www.google-melange.com/gsoc/org2/google/gsoc2014/mozilla">it was accepted</a> and we are looking forward to another great summer of code!</li>
<li>On a more personal note, after being a Mozilla volunteer for years (since 2004), working on the Thunderbird team (from 2011 to 2012), and then on WebRTC apps (since October 2012), I'm starting in March 2014 as a full time engineer in the Firefox team. Which is the team for which I was a Summer of Code student, 8 years ago.</li>
</ul>http://blog.queze.net/post/2014/02/28/Google-Summer-of-Code-Student-who-went-on-to-become-a-Mentor/Org-Admin#comment-formhttp://blog.queze.net/feed/atom/comments/127Mozilla and Google Summer of Code, FOSDEM talkurn:md5:07be0d9fb06643e440367b612e64c8e92014-02-06T00:26:00+01:002014-02-06T00:26:18+01:00Florian QuèzeMozilla <p>Last Saturday at <a href="https://fosdem.org/2014/">FOSDEM</a>, I had the pleasure of giving a talk with <a href="http://blog.gerv.net/">Gerv</a> about Mozilla's participation in <a href="https://wiki.mozilla.org/SummerOfCode">Google Summer of Code</a>. If you missed us, you can see the <a href="http://people.mozilla.org/~fqueze2/slides/fosdem2014/">slides</a>.</p>
<p>This post is also a good opportunity to remind you to add your ideas to our <a href="https://wiki.mozilla.org/Community:SummerOfCode14:Brainstorming">brainstorm wiki page</a> now if you are interested in mentoring a student this summer.</p>http://blog.queze.net/post/2014/02/06/Mozilla-and-Google-Summer-of-Code%2C-FOSDEM-talk#comment-formhttp://blog.queze.net/feed/atom/comments/125Project ideas for Summer of Code 2014urn:md5:af675d129228806406dd5c38774af9a42014-01-24T21:20:00+01:002014-02-03T18:42:54+01:00Florian QuèzeMozillaSummer of Code <p>Google will be running this year <a title=" Google Code-in 2013 and Google Summer of Code 2014 are on " href="http://google-opensource.blogspot.fr/2013/10/google-code-in-2013-and-google-summer.html">the 10th edition of Summer of Code</a>.
Mozilla has had the pleasure of participating every year so far, and we
are hoping to participate <a href="https://wiki.mozilla.org/SummerOfCode">again</a> this year. In the next 3 weeks, we need
to prepare a list of suitable projects to support our application.<br />
<br /><strong><strong>Can you think of a 3-month coding project you would love to guide a student through?</strong></strong> This is your chance to get a student
focusing on it for 3 months! Summer of Code is a great opportunity to introduce new people to
your team and have them work on
projects you care about but that aren't on the critical path to shipping your next release.<br /><br />Here are the conditions for the projects:</p>
<ul><li>completing the project should take roughly 3 months of effort;</li>
<li>any part of the Mozilla project (Firefox, Firefox OS, Thunderbird,
Instantbird, SeaMonkey, Bugzilla, L10n, NSS, IT, and many more) can
submit ideas, as long as they require coding work;</li>
<li>
there is a clearly identified mentor who can guide the student through the project.</li>
</ul>
<p><br />If
you have an idea, please put it on the <a href="https://wiki.mozilla.org/Community:SummerOfCode14:Brainstorming">Brainstorming page</a>, which is our
idea development scratchpad. Please read the instructions at the top –
following them vastly increases your chances of your idea getting added
to the <a href="https://wiki.mozilla.org/Community:SummerOfCode14">formal Ideas page</a>.<br />
<br />The deadline to submit project ideas and help us be selected by Google is February 14th.<br /><br />Please feel free to discuss with me any Summer of Code question you may have.</p>http://blog.queze.net/post/2014/01/24/Project-ideas-for-Summer-of-Code-2014#comment-formhttp://blog.queze.net/feed/atom/comments/124Instantbird bugs should now go to bugzilla.mozilla.orgurn:md5:e287ae672deb32212d91ebe88d1073412014-01-21T20:07:00+01:002014-01-21T22:18:56+01:00Florian QuèzeMozilla <p>From 2007 to late 2013, Instantbird bugs were tracked on bugzilla.instantbird.org. This was fine as long as Instantbird was completely separate from all other Mozilla products, but when Instantbird's chat backend was re-used to add instant messaging to Thunderbird, we started having bugs that were relevant for both Instantbird and Thunderbird. Having them in two separate bug trackers was messy and caused lots of duplicates.</p>
<p>We started discussing this at MozCampEU2012 in Warsaw. It quickly became apparent that getting a product created for Instantbird and another one for the chat core wasn't a problem, but that importing our existing bugs would require more work. The plan at this time was to import the existing BIO (bugzilla.instantbird.org) database into BMO (bugzilla.mozilla.org). Unfortunately, while it seems bugzilla already supports importing bugs from plenty of other bug trackers, it doesn't support importing bugs from itself. Some people from the BMO team thought writing such an importer would be a nice and not-very-difficult project, so they agreed to work on it. We <a title="Bug 749586 - Import bugzilla.instantbird.org into bugzilla.mozilla.org" href="https://bugzilla.mozilla.org/show_bug.cgi?id=749586">filed a bug</a> to figure out the details. And nothing happened for months, because there were (understandably) higher priorities for the BMO team. Ten months later, the BMO team concluded that they were unlikely to ever get time for this project, and suggested we work on another solution instead: using <a href="https://wiki.mozilla.org/Bugzilla:REST_API">BzAPI</a> to do the import ourselves. This was more work than we could get done immediately, so we kept that in mind for later. <a href="http://clokep.blogspot.com/">Patrick Cloke</a> started experimenting with BzAPI but couldn't get enough of my and others' attention to complete the project.</p>
<p>In December 2013, we decided to move forward with the import, and <a title="Bug 951944 - New products and components for the import of bugs from bugzilla.instantbird.org" href="https://bugzilla.mozilla.org/show_bug.cgi?id=951944">requested the creation of the products</a> just before the holidays. We drafted a plan in which we broke down the work that needed to happen in several steps that could each be performed by a (relatively) simple and independent script:</p>
<ol><li>first, download all the data from bugzilla.mozilla.org in JSON, create a file for the data of each bug</li>
<li>slice the content of each file from 1. into a stream of events (each event is an action performed by the bugzilla users).</li>
<li>transform the sliced events into events that would apply on BMO (eg. change product names when they don't match exactly on BIO and BMO)</li>
<li>merge the events of all bugs into a single file; without duplicates (eg. when marking a bug as a duplicate of another bug, this creates events on both bugs, but we only need to import one, the other happens automatically).</li>
<li>replay events on BMO: this needs to create a map of new bug and attachment numbers, and replace them automatically in comments.</li>
</ol>
<p>The plan looked simple on paper (well, on <a href="https://etherpad.mozilla.org/bugzilla-instantbird-merge-bzapi">an etherpad</a>). Reality got in the way, with plenty of not-really-expected complications:</p>
<ul><li>BzAPI has lots of documented (eg. can't create an attachment at the same time as filing a bug; can't set the component without also setting the product, ...) and undocumented (eg. UTF8 is supported when filing a bug or adding comments, but not when commenting on an attachment) limitations.</li>
<li>The format of data downloaded from BzAPI is significantly different from the format of data we need to send it to do changes. This is especially true for attachment flags.</li>
<li>Sometimes the values in bug fields don't match what's in the history of events that happened to the bug. This problem occurs when users changed their bugzilla email address, when products got renamed. The worst case we had to deal with was a target milestone that was renamed, then a new target milestone was created with the original name, and some bug's milestone was changed from the renamed milestone to the new milestone with the original name. This caused an interesting complication because we ended up with changes where the mapped value was the same before and after the change.</li>
<li>We initially started using the js shell for our scripts, but to do HTTP requests, we needed XPCOM, so we switched to xpcshell instead. Unfortunately, <a title="Bug 962208 - xpcshell's readline function truncates its result after 255 characters" href="https://bugzilla.mozilla.org/show_bug.cgi?id=962208">xpcshell's readline() function truncates input data after 255 characters</a>. Later I discovered that <a title="Bug 933885 - xpcshell's dump() mangles non-ASCII output" href="https://bugzilla.mozilla.org/show_bug.cgi?id=933885">xpcshell doesn't handle UTF8 input/output</a> by default, and had to use nsIScriptableUnicodeConverter for that.</li>
</ul>
<p>Our scripts are all in the <a href="http://hg.instantbird.org/bio-merge/">bio-merge</a> hg repository. The result of step 4. is a 120MB text file with each line being the JSON representation of an event that needs to be replayed. We tested replaying events on bugzilla-dev.allizom.org first for a single bug, then for a few set of bugs that had dependencies. Finally we replayed our whole set of bugs (2294 bugs, 20984 events), and after fixing the issues that surfaced during that test run, we were ready to do the final import.</p>
<p>The final import took 848 minutes to complete (14 hours). 240 events failed to replay because some components didn't have on BMO the exact names the script expected. I fixed the script and replayed these again.</p>
<p>We finished by adding comments in all existing BIO bugs giving the new URL, and closed BIO (it's now read-only). As of <span class="bz_comment_time">2013-12-30, new Instantbird bugs should be filed on bugzilla.mozilla.org, in the <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Instantbird">Instantbird</a> product for UI bugs, in the <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Chat%20Core">Chat Core</a> product for backend issue (this part of the code is shared with Thunderbird), and in the <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Instantbird Servers">Instantbird Servers</a> product of issues with our servers.<br /></span></p>http://blog.queze.net/post/2014/01/21/Instantbird-bugs-should-now-go-to-bugzilla.mozilla.org#comment-formhttp://blog.queze.net/feed/atom/comments/123Instantbird 1.0, sorti simultanément en 11 langues (dont le français évidemment)urn:md5:9f4fd6a092824126812ed44af9adc3972011-06-28T16:12:19+02:002014-01-21T00:04:06+01:00Florian QuèzeMozillaInstantbird
<p><a href="http://instantbird.com/">Instantbird 1.0</a> vient de sortir.</p>
<p><a href="http://www.instantbird.com/"><img src="http://www.instantbird.com/press/logos/instantbird-text-512x128.png" alt="Instantbird logo" /></a></p>
<p>Cette version apporte de très nombreuses améliorations. Cette fois ci, non seulement le logiciel en lui-même est traduit, mais le site web aussi, alors pour savoir ce qui est changé depuis la version précédente, il suffit donc tout simplement d'<a href="http://www.instantbird.com/release-notes.html">aller voir sur le site d'Instantbird</a> lui-même <img src="http://blog.queze.net/smileys/sourire.png" alt=":)" />.</p>
<p><a href="http://www.instantbird.com/"><img src="http://www.instantbird.com/press/screenshots/1.0-winaero-screenshot-homepage-big.png" alt="Instantbird 1.0 - copie d'écran sur Windows 7"/></a></p>
<p>De nombreux blogs reprennent déjà l'information. N'hésitez pas à faire de même (ou à partager sur Facebook ou twitter) afin que vos amis en profitent aussi !</p>
Instantbird 0.2urn:md5:dc74e849246e96e046cc6d900825d7dc2010-07-16T14:46:43+02:002014-01-21T00:04:06+01:00Florian QuèzeMozillaInstantbird
<p>Après des mois de développement, Instantbird 0.2 est finalement sorti cette semaine dans plusieurs langues, dont le français !</p>
<p><a href="http://www.instantbird.com/"><img style="border: none;" src="http://blog.queze.net/pict/instantbird-text-512x128.png" alt="logo Instantbird" /></a></p>
<p>Cette nouvelle version a été l'occasion de revoir complètement le site web afin de mettre l'accent sur l'utilisation d'Instantbird, et en particulier sa simplicité, plutôt que sur les technologies mises en jeu.</p>
<p>Sans plus attendre, découvrez <a href="http://www.instantbird.com/">Instantbird 0.2</a>! (<a href="http://blog.instantbird.org/a25-instantbird-0-2-released.html">annonce en anglais</a>, <a href="http://blog.instantbird.org/">blog du projet</a>)</p>
Instantbird, pour la première fois en français !urn:md5:1de66770d23ba7522de8862565f084bd2010-03-20T14:09:03+01:002014-01-21T00:04:06+01:00Florian QuèzeMozillaInstantbird
<p>Hier, Instantbird 0.2 beta 2 est sorti, et pour la première fois il est disponible en français !</p>
<p>Cette nouvelle version beta apporte bien sûr son lot d'améliorations. Pour lire les détails et la télécharger, c'est <a href="http://www.instantbird.com/download-0.2b2.html">par ici</a> ! <img src="http://blog.queze.net/smileys/sourire.png" alt=":)" /></p>
Mozilla Add-Ons Workshopurn:md5:83be4aebb9d21b210739e34c70935caf2008-09-22T14:03:01+02:002014-01-21T00:04:06+01:00Florian QuèzeMozilla
<p>Samedi, j'ai eu le plaisir de participer au <a href="https://wiki.mozilla.org/MAOW">Mozilla Add-Ons Workshop</a> à Paris et de donner une conférence sur la création de composants XPCOM en C++.</p>
<p>Les <a href="http://mozilla.queze.net/maow/">slides de ma présentation</a> ainsi qu'un fichier zip contenant l'<a href="http://mozilla.queze.net/maow/maow.zip">exemple présenté dans les slides</a> sont disponibles.</p>
<p>Les slides sont conçues pour être vues avec l'extension <a href="https://addons.mozilla.org/fr/firefox/addon/4650">FullerScreen</a>.</p>
<p>Cette journée a été très réussie et, au passage, a permis aux différents membres français de l'équipe <a href="http://www.instantbird.com/">Instantbird</a> de se rencontrer.</p>