[ON TRACK] Javascript performance near or even with Chrome 5 on their benchmarks (within 20% on SS, 30% on V8), with substantial wins on our benchmarks. (Windows, in-browser.)
[ON TRACK] Hardware acceleration of video and other HTML and SVG content, as well as user interface, on by default for compatible hardware on all Tier-1 desktop and mobile platforms.
[ON TRACK] Fully support the WebGL 1.0 spec, with support turned on by default in a Firefox 4 beta on platforms that support OpenGL or OpenGL ES.
[ON TRACK] security: zero reproducible high/crit > 30 days
[ON TRACK] Support multi-process Fennec.
[ON TRACK] Support Jetpacks running in separate processes and never blocking the Fennec UI.
JM looking good on TM tree, a few blocking things remain: bug 592960
, regex problems. Some possible problems related to lack of compartments.
Accelerated compositing using Direct3D 9 (on Windows) has been turned on by default on mozilla-central!
If you notice problems with Direct3D 9, please report them in Bugzilla. You will want to accompany your bug report with the Graphics section of about:support, so we can more easily work out what’s wrong.
To narrow down whether a problem is caused by Direct3D 9, you can set the about:config pref layers.accelerate-none to true, and restart your browser.
Standard8 nominates Makoto Kato and Masayuki Nakano for their work on fixing the number 1 topcrash for Thunderbird 3.1.x users (bug 548480
).
Funnel Cake 2 Launched last Tuesday. About 30% more in sample than in Funnel Cake 1, en-US/de builds. Still crunching numbers.
More accurate count is giving us a 44% success rate for ISPDB. Top 10 misses, cn.ad.jp, cox.net, aon.at, psmtp.com, dream.jp, so-net.ne.jp, netease.com, btinternet.com, tiscali.co.uk, centrum.cz.
Now over 50% of users on TB 3.1.x, gaining just under 2M ADUs since we started offering major updates on 11th August.
Will “pause” major updates for 3.0.x users whilst we release the security updates, then offer anew in a couple of weeks.
2.0.0.24 updates will be updated to go straight to 3.1.3 in the next couple of days.
Releases today of 3.0.7 and 3.1.3
Work on next round of major updates
Weekly event going on , posted some information on mozilla.dev.apps.thundebird
PR update: expecting Thunderbird 3.1.3 news today and this week pre-empted here on ghacks
, lots of articles Google’s Priority Inbox and Gmail phone service
ADUs: 5.5MM ADUs, 52% of total users on 3.1.x., many 3.0.x users have upgraded. Still 1.4MM users on Tb 2.0.0.x
691 support topics, down 16% from last week, labour day holiday effect?
continuing GS instability issues: No GS emails between 9:15pacific Sep 2, 2010 and 12:48pm. Sep 3 & no support topics stats for September 2nd and 3rd 2010, filed ZenDesk ticket 4318
3.1 Support Issues
– top major upgrade issues: Kaspersky and McAfee anti-virus don’t play nicely with Thunderbird 3.1 – awaiting word from Kaspersky and McAfee
(who needs to do what that hasn’t been recorded in a bug) We should assign people to the open items.
NEW
OPEN
CLOSED
K.I.V.
Get permission from Google to use their geolocation JSON service [KaiRo]. We can still only wait on the Google front right now. Didn’t hear anything about open Geolocation service yet. No easy solution in sight.
Will probably be only beta, targeted freeze for end of September. This roughly matches Gecko 2.0 RC1. After that, we’ll see where Gecko is and where we are and if it really looks good for the final stretch to 2.1.
Plans for 2.1: 6-8 weeks per milestone, b1 in October, and a final in November.
This seems to match recently presented Firefox 4 plans relatively well – they’re in beta now, RC1 is planned for October and Final somewhere “soon” after.
It would be good to get OOPP (Out Of Process Plugins) for SM2.1 (bug 545716
) but we need some way to build libxul (bug 394502
) to be able to build OOPP. LDAP work has to be done for that to be possible, the rest should at least build with libxul right now.
Bug statistics
for last two (full) weeks: 67 new, 31 fixed, 16 triaged.
Fix rate is going down, triage continues to be weak. Should do more there.
Good further triage targets could come out of looking at the component bug counts
, pick yours!
kaze has done a ton of work there. We still need to work out some organizational issues. At the moment there is no active interest from MoMo for bringing standalone composer into comm-central. That’s something we (KaiRo and kaze) will have to negotiate with the Thunderbird team (dmose).
bug 533908
SeaMonkey Mail: tabs not restored [misak]
mailnews is now little bit stalled – a straight port (of TB code) will be really easy, but working on a combined approach, trying to use as much sessionstore codebase as possible. Mailnews lacks persist functions which mnsstore should call – so testing on calendar tabs – need to add those calls
KaiRo updated code again for review comments, should be very near to reaching Neil’s high sr requirements now. Let’s see what Ian brings up in review. The add-on version up on AMO
is 1.0.1 with a lot of fixes from the SeaMonkey work.
The current consensus it to get some basic functionality going with OpenSearch first. And then later to see how much of the old functionality we can reimplement in follow-ups.
Based on that, started work and have an WIP up that doesn’t look too bad right now. Might be able to get this fully working, actually.
Also needed for add-on installation notifications (bug 581974
), which are also awaiting reviews.
bug 467867
[META] Implement Firefox TabBrowser API in Seamonkey [misak]
tabbrowser API is almost ready with inclusion of some followups being working on
bug 566138
Better integration with Windows 7 taskbar
bug 581526
Add SeaMonkey support for the Windows 7 jump list [mcsmurf]
status/progress?
bug 576970
Port Sync UI to SeaMonkey trunk [InvisibleSmiley]
Have it running locally now, including installer changes, only missing prefs/setup/etc. dialogs (those are next).
Will start creating patches, beginning with build system/installer.
Patch size so far: 160 KB (21 files modified, 21 new, 11 of which are images).
Will probably make Modern a follow-up.
We also should take a look at the other items on 2.1-wanted
Also the nominations
need triaging.
We will need to take a close look at Lightning, which is mainly targeting Thunderbird.
Lightning 1.0 beta 1 is for SM2.0 and TB3.0, 1.0 beta 2 is for TB3.1 (Gecko 1.9.2), 1.0 beta 2 will probably be Gecko 2.0-based.
Status Updates from developers – what are you working on, what’s the progress, any other comments? (feel free to add yourself to the list if your name is missing and you have interesting status).
bug 590725
Convert suite/ files for content XUL being killed. CertError Part
bug 589618
Allow load events to get processed between each test step
bug 97023
Make Find Again work when find as you type isn’t using the find bar
bug 529240
enhances duplicateTab so that the duplicate can open in a new window, and with a relative history index
bug 590725
Convert suite/ files for content XUL being killed (feed part)
Bugs fixed (mozilla-central):
bug 589570
Disabled splitters should use the default cursor
Bugs fixed:
bug 529240
Make drop down menus for back and forward buttons middle/Ctrl-clickable.
Away at Aussiecon 4
for a couple of weeks so nothing much done.
Bugs fixed:
bug 246405
mail_help.xhtml should be split to several files Moving “Importing mail from other programs” right after “Getting started with Mail & Newsgroups”
Bugs fixed (comm-central):
bug 591550
test_docload.xul reports “JavaScript error: chrome://navigator/content/tabbrowser.xml, line 919: nsIInterfaceRequestor is not defined”; (Av1) Add missing ‘Components.interfaces.’
Bugs fixed (mozilla-central):
bug 589611
[SeaMonkey 2.1, mochitest-browser-chrome] browser_visituri_privatebrowsing.js:64 – TypeError: Cc['@mozilla.org/privatebrowsing;1'] is undefined; (Av1) Skip this test when PB service is not available
biesi and Standard8 both declared their resignation from the Council – they both confirmed they have some heart and stakes in the project, but they don’t have the time to be part of the Council any more
we will have new Council members being added, but we’ll discuss and decide that in Vienna
we have a few prospects of making the Council – but I’d like to defer that to Vienna, we have all of them on the invitee list anyhow
SeaMonkey has not “fake” any other UA for browsers unless the user installed an extension or changed a pref to make that happen. The reasons for this were vast, mostly in the eye of not doing users and websites a disservice by lying.
That all has just changed with tonights nightly. [Bug 591327
] The truth is that websites have increasingly been found to be broken with JUST SeaMonkey. Everything from some sites just downright breaking, (with XML Parse Errors), to some simple CSS Changes, to other websites treating unknown UA’s as a “mobile” version of the website, etc.
These issues we have increasingly felt did more disservice to our users than what we had established in the past. Of further note, is that these websites, due to Firefox’s popularity seem to frequently NOT be broken when and if we Added “Firefox/” to our UA string. Camino as one example has long had “Firefox” added to their UA because they felt it helped their users best.
The Bottom Line, we have toggled the (new to Gecko 2.0) pref by default to enable “compat mode” in the UA (which appends “Firefox/” to the UA string we send to websites), we feel that most users will not want, nor have a need to change this pref. But we have provided Pref UI under “Advanced” for the idealists out there.
Given the fundamental-to-the-goals-of-the-project change, this was voted on and approved by a SeaMonkey-Council vote as well, incase anyone is wondering.
Comments/thoughts to the newsgroups please. [closed comments here]
As part of Mozilla's ongoing stability and security update process, SeaMonkey 2.0.7 is now available for Windows, Mac, and Linux as a free download from www.seamonkey-project.org
.
We strongly recommend that all SeaMonkey and old suite users upgrade to this latest release. If you already have SeaMonkey 2.0, you will receive an automated update notification within 24 to 48 hours. This update can also be applied manually by selecting 'Check for Updates...' from the Help menu.
Note: All users of the outdated SeaMonkey 1.x, Mozilla or Netscape suites are encouraged to upgrade to SeaMonkey 2.0 by downloading it from www.seamonkey-project.org
.
One of my focuses at MoMo
is to improve the plight of Thunderbird
extension developers. An important aspect of this is improving the platform they are exposed to. Any platform usually entails a fair amount of complexity. The trick is that you only pay for the things that are new-to-you, learning-wise.
The ‘web’ as a platform is not particularly simple; it’s got a lot of pieces, some of which are fantastically complex (ex: layout engines). But those bits are frequently orthogonal, can be learned incrementally, have reams of available documentation, extensive tools that can aid in understanding, and, most importantly, are already reasonably well known to a comparatively large population. The further you get from the web-become-platform, the more new things you need to learn and the more hand-holding you need if you’re not going to just read the source or trial-and-error your way through. (Not that those are bad ways to roll; but not a lot of people make it all the way through those gauntlets.)
I am working to make Thunderbird more extensible in more than a replace-some-function/widget-and-hope-no-other-extensions-had-similar-ideas sort of way. I am also working to make Thunderbird and its extensions more scalable and performant without requiring a lot of engineering work on the part of every extension. This entails new mini-platforms and non-trivial new things to learn.
There is, of course, no point in building a spaceship if no one is going to fly it into space and fight space pirates. Which is to say, the training program for astronauts with all its sword-fighting lessons is just as important as the spaceship, and just buying them each a copy of “sword-fighting for dummies who live in the future” won’t cut it.
Translating this into modern-day pre-space-pirate terminology, it would be dumb to make a super fancy extension API if no one uses it. And given that the platform is far enough from pure-web and universally familiar subject domains, a lot of hand-holding is in order. Since there is no pre-existing development community familiar with the framework, they can’t practically be human hands either.
The Requirements
I assert the following things are therefore important for the documentation to be able to do:
Start with an explained, working example.
Let the student modify the example with as little work on their part as possible so that they can improve their mental model of how things actually work.
Link to other relevant documentation that explains what is going on, especially reference/API docs, without the user having to open a browser window and manually go search/cross-reference things for themselves.
Let the student convert the modified example into something they can then use as the basis for an extension.
The In-Process Solution: Narscribblus
So, I honestly was quite willing to settle for an existing solution that was anywhere close to what I needed. Specifically, the ability to automatically deep-link source code to the most appropriate documentation for the bits on hand. It has become quite common to have JS APIs that take an object where you can have a non-trivial number of keys with very specific semantics, and my new developer friendly(-ish) APIs are no exception.
Unfortunately, most existing JavaScript documentation tools are based on the doxygen/JavaDoc model of markup that:
Was built for static languages where your types need to be defined. You can then document each component of the type by hanging doc-blocks off them. In contrast, in JS if you have a complex Object/dictionary argument that you want to hang stuff of of, your best bet may be to just create a dummy object/type for documentation purposes. JSDoc and friends do support a somewhat enriched syntax like “@param arg.attr”, but run into the fact that the syntax…
Is basically ad-hoc with limited extensibility. I’m not talking about the ability to add additional doctags or declare specific regions of markup that should be passed through a plugin, which is pretty common. In this case, I mean that it is very easy to hit a wall in the markup language that you can’t resolve without making an end-run around the existing markup language entirely. As per the previous bullet point, if you want to nest rich type definitions, you can quickly run out of road.
The net result is that it’s hard to even describe the data types you are working with, let alone have tools that are able to infer links into their nested structure.
So what is my solution?
Steal as much as possible from Racket
(formerly PLT Scheme)’s documentation tool, Scribble
. To get a quick understanding of the brilliance of Racket and Scribble, check out the quick introduction to racket
. For those of you who don’t click through, you are missing out on examples that automatically hyperlink to the documentation for invoked methods, plus pictures capturing the results of the output in the document.
We steal the syntax
insofar as it is possible without implementing a scheme interpreter. The syntax amounts to @command[s-expression stuff where whitespace does not matter]{text stuff which can have more @command stuff in it and whitespace generally does matter}. The brilliance is that everything is executed and there are no heuristics you need to guess at and that fall down.
Our limitation is that while Racket is a prefix language and can use reader macros and have the entire documents be processed in the same fashion as source code and totally understood by the text editor, such purity is somewhat beyond us. But we do what we can.
Use narcissus, Brendan Eich
/mozilla’s JS meta-circular interpreter thing, to handle parsing JavaScript. Although we don’t have reader macros, we play at having them. If you’ve ever tried to parse JavaScript, you know it’s a nightmare that requires the lexer to be aware of the parsing state thanks to the regexp syntax. So in order for us to be able to parse JavaScript inline without depending on weird escaping syntaxes, when parsing our documents we use narcissus to make sure that we parse JavaScript as JavaScript; we just break out when we hit our closing squiggly brace. No getting tricked by regular expressions, comments, etc.
Use the abstract interpreter logic from Patrick Walton
‘s jsctags
(and actually stole its CommonJS-ified narcissus as the basis for our hacked up one too) as the basis for abstract interpretation to facilitate being able to linkify all our JavaScript code. The full narcissus stack is basically:
The narcissus lexer has been modified to optionally generate a log of all tokens it generates for the lowest level of syntax highlighting.
The narcissus parser has been modified to, when generating a token log, link syntax tokens to their AST parse nodes.
The abstract interpreter logic has been modified to annotate parse nodes with semantic links so that we can traverse the tokens to be able to say “hey, this is attribute ‘foo’ in an object that is argument index 1 of an invocation of function ‘bar’” where we were able to resolve bar to a documented node somewhere. (We also can infer some object/class organization as a result of the limited abstract interpretation.)
We do not use any of the fancy static analysis stuff that is going on as of late with the DoctorJS stuff. Automated stuff is sweet and would be nice to hook in, but the goal here is friendly documentation.
The abstract interpreter has been given an implementation of CommonJS require that causes it to load other source documents and recursively process them (including annotating documentation blocks onto them.)
We use bespin as the text editor to let you interactively edit code and then see the changes. Unfortunately, I did not hook bespin up to the syntaxy magic we get when we are not using bespin. I punted because of CommonJS loader snafus. I did, however, make the ‘apply changes’ button use narcissus to syntax check things (with surprisingly useful error messages in some cases).
Extra brief nutshell facts:
It’s all CommonJS code. The web enabled version which I link to above and below runs using a slightly modified version of Gozala
‘s teleport
loader. It can also run privileged under Jetpack, but there are a few unimplemented sharp edges relating to Jetpack loader semantics. (Teleport has been modified mainly to play more like jetpack, especially in cases where its aggressive regexes go looking for jetpack libs that aren’t needed on the web.) For mindshare reasons, I will probably migrate off of teleport for web loading and may consider adding some degree of node.js support. The interactive functionality currently reaches directly into the DOM, so some minor changes would be required for the server model, but that was all anticipated. (And the non-interactive “manual” language already outputs plain HTML documents.)
The web version uses a loader to generate the page which gets displayed in an iframe inside the page. The jetpack version generates a page and then does horrible things using Atul
‘s custom-protocol mechanism to get the page displayed but defying normal browser navigation; it should either move to an encapsulated loader or implement a proper custom protocol.
Anywho, there is still a lot of work that can and will be done (more ‘can’ than ‘will’), but I think I’ve got all the big rocks taken care of and things aren’t just blue sky dreams, so I figure I’d give a brief intro for those who are interested.
Feel free to check out the live example interactive tutorialish thing
linked to in some of the images, and its syntax highlighted source
. Keep in mind that lots of inefficient XHRs currently happen, so it could take a few seconds for things to happen. The type hierarchy emission and styling still likely has a number of issues including potential failures to popup on clicks. (Oh, and you need to click on the source of the popup to toggle it…)
Here’s a bonus example
to look at too, keeping in mind that the first few blocks using the elided js magic have not yet been wrapped in something that provides them with the semantic context to do magic linking. And the narscribblus repo
is here.
When I originally created the CCK Wizard for Firefox
, my goal was to keep the user interface as close to the Netscape CCK as possible. Over time, I added new functionality, but I kept holding on to the original design. With Firefox 4 approaching, I think it’s time to reimagine what the CCK should be.
I’d really like to try to engage the community in figure out what to do next. What should the UI look like? Is there missing functionality?
So please do me a favor, install the CCK Wizard and post your opinion. I’d love to take the CCK Wizard in a new direction, but I need some helping deciding which way to go.
We are excited to present to you the latest initiative from Mozilla Labs: Gaming. Mozilla Labs Gaming is all about games built, delivered and played on the Open Web and the browser. We want to explore the wider set of technologies which make immersive gaming on the Open Web possible. We invite the wider community to play with cool, new tech and aim to help establish the Open Web as the platform for gaming across all your Internet connected devices.
Modern Open Web technologies introduced a complete stack of technologies such as Open Video
, audio
, WebGL
, touch events
, device orientation
, geo location
, and fast JavaScript engines
which make it possible to build complex (and not so complex) games on the Web. With these technologies being delivered through modern browsers today, the time is ripe for pushing the platform. And what better way than through games? Traditionally games and game developers have been at the forefront of technology, often pushing the boundaries of what was thought possible.
Game On 2010 Competition
To kick off this initiative in style Mozilla Labs Gaming is going to launch our first ever international gaming competition: Game On 2010
. This competition will be open to all developers interested in creating awesome games using the latest in Open Web technologies. Stay tuned to the Mozilla Labs Gaming blog
and follow us on Twitter
for all the details!
The latest update to Firefox 4 Beta brings super fast graphics and incredible new audio capabilities to the Web. Firefox 4 Beta now leverages hardware acceleration to improve graphics performance for Windows users and also allows, for the first time, the visualization of audio data within the browser. If you haven’t already, you should download it for free, today!
Enjoy Faster Graphics
Firefox 4 Beta now takes advantage of the built-in graphics hardware in Windows computers with DirectX 10 to improve graphics performance. On supported hardware, Firefox will use Direct2D by default to speed up the display of content on graphically intensive websites, giving more power to the Web. To learn more, read Bas Schouten’s blog post
and check out this this demo
:
More Secure Connections
HTTP Strict Transport Security (HSTS) is a new security protocol in Firefox 4 Beta that allows websites to insist that Firefox always use secured connections. Firefox 4 Beta now remembers what sites use the HSTS protocol and will only connect to those sites using SSL (Secure Sockets Layer) in the future, helping to prevent “man in the middle” attacks
. For more details, please read this blog post
from Sid Stamm of the Mozilla Security team.
The Feedback program we launched in our first beta continues to be an incredible tool that allows our users to help us understand what they are liking most about the upcoming Firefox 4. We wouldn’t be able to make the progress we have without this vital feedback from the community of beta testers. Check out the Input page
to see what people are experiencing in Firefox 4 Beta.
As always, Firefox 4 Beta testers will continue to receive automatic updates, so stay tuned for the next release in the coming weeks.
As part of Mozilla’s ongoing security and stability update process, Thunderbird 3.1.3 and Thunderbird 3.0.7 are now available as free downloads for Windows, Mac, and Linux from http://getthunderbird.com/
. As always, we recommend that users keep up to date with the latest stability and support versions of Thunderbird.
We strongly recommend that all Thunderbird users upgrade to these latest releases. If you already have Thunderbird, you will receive an automated update notification within 24 to 48 hours. You can also manually fetch this update by selecting “Check for Updates…” from the Help menu.
For a list of changes and more information, please review the Thunderbird release notes:
Thanks for all of those who commented on previous post
on fragmentation. My first fragmentation fix
has landed. In current nightlies and future releases the main Firefox databases will grow more aggressively to avoid fragmentation. This should translate into better history/awesomebar/cookie performance for our most dedicated users.
Unfortunately fixing existing profiles is a hard
from with Firefox. In the meantime advanced users on non-Windows platforms who are suffering from fragmentation can manually copy *.sqlite files to another directory and back.
Windows: Ahead of the pack
Evidence suggests that the Windows fragmentation situation is slightly better than on other platforms. Firefox fragmentation behavior on Windows is similar to other OSes but Windows periodically defragments Firefox files opened on startup. So one ends up with a cycle of deteriorating performance, followed by better performance(ie right after defrag), followed by deteriorating performance, etc.
I haven’t observed Windows defragmenting files for me, but it seems to do this for most users. Would love to learn more on how/when it decides to defragment files.
Horror Stories
I found a few other places that are horridly affected by fragmentation, will be blogging about those as I fix them. Fragmentation is an interesting problem to optimize because it affects dedicated users most, yet it is very tricky to replicate in a developer environment. Furthermore, there are a lot of misconceptions floating around:
Fragmentation is a Windows problem that Linux is immune to due to having awesomer filesystems.
Mac OSX automatically defragments files, so fragmentation isn’t a problem there.
Fragmentation isn’t a problem on SSDs
To which I say:
Linux might be good at avoiding fragmentation for server workloads. It sucks for desktop users.
OSX will defragment small files, but big ones hurt most.
Cheap SSDs suck at tiny reads caused by fragmentation resulting in spectacularly bad IO. More on this in a future post.
To summarize: there are a lot of misleading stories floating around. I am always happy to hear more measurements/docs/bugs/etc on this subject, but I have zero patience for folk stories and speculation.
I should also mention that the fragmentation problem isn’t limited to Firefox. Other browsers suffer from it too.
With Firefox 4 getting closer and closer to release, we've introduced a new feature in the Beta: We've enabled hardware acceleration through Direct2D by default for our users using Windows Vista or Windows 7 and having DirectX 10 Compatible hardware. As some of our users might know, this feature has been available to them through a special preference for a while now, even as far back as the Alpha. However, after a lot of hard work from our Graphics team, we now feel confident enough to enable it by default for our users with compatible hardware.
So what is Hardware Acceleration?
Usually when we talk about hardware acceleration we mean using the graphics card of your computer to accelerate certain graphical operations. Nowadays the graphics cards in most people's computers have an immense amount of computational power, often many times more than the normal processor. This computational power is very specialized and cannot just be used for anything. It's most commonly used for video games, but obviously as web browsers use more and more graphical effects, we want to use it inside firefox as well!
What is Direct2D?
Direct2D is a rendering system part of the DirectX package which is shipped with Windows. It was introduced in Windows 7 and ported back to Windows Vista in the Vista Platform Update. It allows us to access the hardware with a simple 2D graphics drawing API for all mozilla drawing code, allowing hardware acceleration for a very large number of scenarios.
How will I see it's working?
You should notice that some pages are a lot faster and more responsive, in particular, pages that use advanced, animated graphical effects. For example, pages with transparency or that include transformations. In addition to that, you can see if it's currently turned on for your system by looking in 'about:support'.
Help! It broke my browsing experience!
Since we're currently still in Beta, it's not completely unfeasible that on your particular system hardware acceleration might cause you issues! Of course we don't want this to prevent you from using and testing our beta. If you're experiencing issues you can switch it off by going to 'Tools->Options->Advanced' and there you will be able to unset hardware acceleration.
Grafx Bot
So this thing might break your browsing experience, right? Well, that's something we'd love to hear about so we can fix those issues! We've created an extension especially designed to test our browser on your system, and it can be used to send us data on any unexpected behavior. There's a great post on it on JGriffin's Blog
, the more people install it, the faster we can improve our support!
That's all well and good, but what about other platforms?
At this point in time we do not have a system such as Direct2D available on other platforms. However we are working hard on alternative approaches to use hardware acceleration on other platforms. You should expect to hear more on that soon!
This is just a brief note to point out that, as of the August 29th Firefox nightly (and I think as of the latest beta, but don’t quote me), SpiderMonkey (and Firefox) now implements ES5‘s new Function.prototype.bind
method — native support for creating functions bound to a pre-specified this value:
var property = 42;
var obj =
{
property: 17,
method: function() { return this.property; }
};
var bound = obj.method.bind(obj);
assertEq(bound(), 17);
…or with pre-specified leading arguments:
function multiply()
{
var product = 1;
for (var i = 0, sz = arguments.length; i < sz; i++)
product *= arguments[i];
return product;
}
var productTimesFive = multiply.bind(null /* this */, 5);
assertEq(productTimesFive(4, 3, 2, 1), 120);
…and, in a feature present only in the ES5 bind implementation (and not in any of the numerous precursors), they even work with new:
function Vector()
{
var args = arguments;
this.length = arguments.length;
this.get = function(i) { return args[i]; };
this.set = function(i, v) { args[i] = v; };
}
var PartialVector = Vector.bind(null /* this, ignored with new */, 3, 7);
var threeSevenTen = new PartialVector(10); // new Vector(3, 7, 10)
- Mozilla’s Paul Rouget
has released a GML-to-IMG converter,
allowing GML files to be saved as images, uploading to image-hosting services etc. Nice one, Paul!
Last week I managed to find myself a little bit of time for a project I had been meaning to get to: bzexport
. bzexport is a Mercurial
extension that allows you to attach patches from your Mercurial patch queue
to bugzilla
from the Mercurial command line. It’s the obvious companion to the qimportbzextension
. You can read the README
for details on installing and using the extension, but the short form is:
hg bzexport [REV] [BUG]
where REV is the name of a currently applied patch from your queue, and BUG is a bug number to attach it to. Of course, the extension is smarter than just that, and if you leave off those parameters it will default to working on the topmost patch in your queue, and it will attempt to deduce the bug number from the commit message in the patch. (Standard notation used at Mozilla should work, i.e. “bug 12345 – some text”, “b=12345 some text” etc.)
bzexport attempts to be clever and borrow your Bugzilla login cookies from your default Firefox profile so that you don’t have to provide authentication details. This does not currently work on the Mercurial shipped with MozillaBuild, so you’ll have to provide your username and password in your .hgrc as described in the README if you intend to use it under MozillaBuild’s hg.
bzexport relies on Gerv
’s excellent BzAPI
, so hats off to Gerv for that! Also, patches for additional functionality are welcome.
Worked on documentation and sample code for the click() method on file input elements, but found and filed bug 592802
after finding an issue preventing sample code from working. Docs on hold until this bug is fixed.
I also worked on various documentation cleanup tasks and some copy-edits as usual, as well as some additional documentation bug triage.
As someone who’s spent 10 years in Broadcast TV, radio and “web” (closed platform web consisting mainly of antiquated, proprietary players, crappy .net and locked-down windows-only content that does not talk open web) I’m pleased to see the BBC putting focus and serious man-hours into merging internet standards and the future of broadcasting. Since this is extremely important, I hope the Beeb gets a bunch of talented applicants with the right mix of punch and geek mastery.
May the force be with whoever gets this job – you will have many friends here, including me
Senior Technologist, Internet Standards
The Internet Standards role involves liaison with various Internet and Web organisational and technical bodies to allow the BBC to influence and shape future standards, build prototypes to prove or disprove emerging research, and feed into new BBC products and services to create innovative new user experiences.
Save Web pages, articles and links in a list to access later. Sync and see your list from any computer or phone.
Not long ago I went on a retreat designed to help attendees tap into their “inner writer”. I slept in a yurt and ignored the beach rats that gnawed at my backpack in pursuit of cashews. After two days of journaling and sharing bowls of organic kale with my co-participants, I mentioned I was blogging for Rock Your Firefox.
One of the guys in my group, let’s call him Pete, said: “What I really need is something that keeps track of sites I want to get back to later after I’m done surfing. Right now I save them all in a word doc and that just seems silly.” Well Pete, I hope you’re reading, because it’s time for you to Read It Later
.
After you install the add-on, right click on your toolbar, and make sure “Navigation Toolbar” is checked. Then click on “Customize…”
Find the “Reading List” icon and drag it to your toolbar:
To get started, you’ll need to locate a different icon—the one which saves Web pages you’d like to revisit again in the future. It automatically appears in your location bar, and you click it when you’re on a page you’d like to read later:
When you have some free time to read those articles, just click the icon you placed on your toolbar:
And you’ll see your list:
But that’s really just the beginning of Read it Later. You can sync reading lists to all your computers and your iPhone and Android. There are share features and “Click-to-Save” mode lets you turn interesting links into a reading list, fast and easy. Plus, “Text” view takes away images, ads and layout formatting. Here’s the regular view:
And here’s the text view:
Read it Later
never gets in your way, and it’s always there when you need it. Give it a try.
There have been a couple of things I’ve noticed myself doing over and over
again recently, and because I’m a developer whenever I do something over
and over again, I try to find a way to automate it.
So I did some playing around with Mozilla’s Add-on Builder
and came up with a couple of Jetpacks
that solved my problems. Maybe
you’ll find them useful, too.
I’ve been meaning to write about this for a while now, but I just haven’t had the time for it given all the work I’ve been doing surrounding the Firefox 4 release. The editor review queues are predictably getting much more submissions, and I’ve been trying to keep add-on developers up to date with Firefox 4 breakingchanges
.
A while ago I suggested a different packaging system for add-ons that would (arguably) make it easier to work with. I proposed it as a project for the Google Summer of Code, and it was accepted
. That was kind of unexpected, and I was very excited to be part of that experiment. There was a good student submission for the project and everything looked well underway.
Fast forward a few months, and I was contacted by the student working on the project. He wanted to drop it due to lack of time and progress . After chatting for a while, I agreed with him that dropping it was for the best. In the end the problem was a mixture of poor communication and a scheduling mismatch between the summer break in the US and other countries (Brazil in this case). He just couldn’t focus on the project due to school work.
So, the experimental implementation never happened, but the idea lives on. The project’s approval motivated me to create a pretty decent spec
that I’ll update once Firefox 4 is released. Many changes have been introduced in Firefox 4 that affect manifest files, and others that overlap with some of the proposed features. Once Firefox 4 is stable for add-on developers, I’ll update the wiki and probably post an update here. I don’t have any plans to implement this or push the idea too hard, but I still think there’s some value there and it’s worthwhile to keep it alive.
Brett Gaylor
(feed
) – Brett Gaylor officially joined the Mozilla Drumbeat team in August. He’ll be playing the role of project producer — leading his own Web Made Movies project and helping to find new Drumbeat projects over time. Brett will also be directing a documentary series about Mozilla and the future of the web.
Benoit Jacob
(feed
) – I am a Mozilla developer, based in Toronto, currently working on our implementation of WebGL. I would like to use my blog to make WebGL-related announcements to Web developers and testers.
Here's a summary of SeaMonkey/Mozilla-related work I've done in week 35/2010 (August 30 - September 5, 2010):
Build Machines:
I fixed the missing L10n nightlies
by applying a trick the Firefox build engineers team told me about - all locales that build right now should have nightlies out for all platforms again.
When I noticed that two machines were missing
, I filed a bug and IT promptly got them back to work for us - thanks for that!
Automated tests:
While a few other people in our team are churning along to reduce our test failures, I only helped marginally with this effort this week - but when one fix landed and didn't have the wanted effect, I investigated that a bit
, wrote a test specifically for the new issue we're seeing and found out what the actual problem there is - we're still discussing a solution.
I did create a patch to only build Web Console for Firefox
, which should make our test failures there go away - if it gets accepted.
UA string:
I did a patch for the somewhat controversial change of including a Firefox token
by default in our UA string, after I realized the fight for this has been lost. There will be a UI pref in the advanced panels, and some don't believe this fight is over and want to prolong needless fighting, but I think this change needs to be done and the discussion ended if we don't want to continue losing users over this.
Data Manager:
From what I can see, the updates to the Data Manager
patch and the review comments seem to get very close to final with respect to Neil's super-review. Now all I'm waiting for is the official marking of that and Ian's actual review.
Site-specific zoom:
I updated the patch for remembering zoom per site
after I found out how to mitigate errors I had earlier and requested reviews now, but that might just be stalled for using a controversial event right now, which Neil just doesn't like to see at all in our code.
OpenSearch:
One thing that comes up time and again when users try to use it unsuccessfully and ask in our channels is OpenSearch support
. This has been stalling for a long time basically just because we now have crufty, badly documented binary code around for search and a sidebar of which we don't know usage but which is crafted around a model that is far away from OpenSearch and not even fitting the current code.
After we have decided some weeks ago that we'll set no priority on the sidebar working, I finally bit the bullet and tried to get our code to work with toolkit's OpenSearch module and so far, it has been easier than I thought - even though we are still missing a few things in my current WIP patch. I also did a very rough WIP for an optional search bar
, but that needs a lot more work and isn't as high a priority as the main OpenSearch patch.
Various Discussions:
SeaMonkey Development Meeting, SeaMonkey build machines, visit to Bay Area and Mozilla HQ, building with libxul and/or 'fatlibxul', organizational future for SeaMonkey, etc.
Esp. in the first half of this week I've been under a lot of strain, and generally I'm badly overworked and having too many things I think I need to take care of, resulting in symptoms that are very much pointing in the direction of an oncoming burn-out. At the same time, I'm trying to organize or help organize a few things that in the short term cause me some additional stress for planning, but should relief a lot of stress and frustration in the end. I hope that all will help my sanity somewhat (in the mean time - sorry when I might overreact at times) and help the SeaMonkey project to improve significantly in the future.
TwitFactory
, my twitter client based on xulrunner, is not far from the attic. Given the recent authentication change in Twitter and the obligation to use now OAuth, I don't see how I could keep the application based on easily readable JavaScript AND preserve the security of an associated OAuth key. Even if TwitFactory is not Open Source, all Open Source applications share the same concern. How can we write Open Source software if a key inside the code is readable, copyable, abusable?
Even if TwitFactory could use a binary component containing an encrypted key, fully free or open source software cannot do that.
Writing good bugs is important when dealing with software development. I deal with several Bugzilla installations meaning I’ve got some experience with both good and bad bug reports. While the specifics may vary based on the product your submitting a bug report for these basics rules will make life easier for everyone. In many cases will even help things get resolved quicker.
Bugs that are easy to triage, sort and sift are easier to take care of than those that are cryptic and require more investigation. If you want your issue to be addressed promptly make sure you facilitate the process by writing a good bug report. It’s not difficult and doesn’t require much technical know how, it just requires being explicit yet concise. If more information is needed a developer can request it and explain how to capture it.
Summary
A good summary is explicit yet brief. Upon reading it the purpose is clear and little is left to question. Here are several poor summaries, and the ideal way to submit them:
Bad: “add me to planet”
Good: “add john doe to planet.mozilla.org”. There’s no ambiguity there. Just reading the subject I can distinguish it from others in the queue.
Bad: “site crashes browser”
Good: “visiting a video permalink page crashes IE6″. Less ambiguity just make sure to add the url to the bug.
Bad: “javascript error”
Good: “Contact form has a javascript error in Chrome”. Again less ambiguity is key.
Description
Descriptions should ideally be front loaded with the important information. If it’s a bug report and not a request it should be followed by steps to reproduce including what you see, and what you expect to see. Reference attachments as appropriate (screenshots can be helpful).
Bad: “Visiting a video permalink page crashes IE6.”
Good: “Upon visiting a video permalink page in IE6 the video automatically starts playing. About 10 seconds into the ad the browser crashes. I am able to reproduce this consistently at the following link: http://domain.tld/…”.
Bad: “Contact form shows a JS error, can’t submit.”
Good: “When attempting to submit the contact form [http:/doman.tld/...] in IE 7 I get a “object expected” error and it refuses to continue.”
Always include URL’s when applicable or examples on ways to reproduce the error when possible. It’s hard to act upon “several pages” when your site has over a half million pages.
Attachments
Screenshots, traces, debug logs, mockups are generally helpful. As a rule make try to use browser-readable formats when possible. JPEG, GIF, PNG for images, txt, or if you must PDF for documents. Having to open PowerPoint or Word to view your screenshot isn’t cool. It makes people avoid what would be helpful information. Explanations on what you’re seeing and expect to see are also helpful for when it’s not obvious to someone else.
Severity/Priority
Always try to use restraint when setting the severity or priority on a bug. Unless it’s truly a show stopper avoid using the most severe status. Generally speaking most “normal” or a P3 (on a P1 – P5 priority scale). Remember The Boy Who Cried Wolf
.
Version
If you know the version, please specify it. It helps when several versions of a product are still floating around.
Product/Component
I put this toward the bottom for a reason. Making a best guess is the most you can generally do. Just be sure to read the entire list before deciding as the best option may be beyond the one you’ve already found.
Following these simple guidelines can go a long way to making sure bugs get resolved quicker.
I've been working on adding support for the calc() proposal that's in
CSS3 Values and Units
. I've now added support for -moz-calc(),
-moz-min(), and -moz-max() functions to a significant number of
properties. (Note that min() and max() do not have -moz- prefixes when
they're inside an expression, but they do have prefixes when they're the
top-level expression.)
Support for calc() allows style sheets to write things like this:
p { width: -moz-calc(50% - 4px); }
Calc expressions can use the operators +, -, *, and /, the functions
min() and max(), and parentheses. The operators + and - must have
spaces around them. Values that have units (that is, lengths or
percentages) can only appear in the numerator of a division, and cannot
be multiplied by each other.
This support applies to the following properties that accept
lengths:
-moz-box-shadow †
-moz-column-width
border-spacing
letter-spacing
marker-offset
outline-offset
text-shadow
word-spacing
and the following properties that accept lengths and percentages:
-moz-border-radius 2†
-moz-border-radius-* 2†
-moz-margin-end 1
-moz-margin-start 1
-moz-outline-radius 2
-moz-outline-radius-* 2
-moz-padding-end 1
-moz-padding-start 1
bottom
height
left
margin-bottom 1
margin-left 1
margin-right 1
margin-top 1
max-height
max-width
min-height
min-width
padding-bottom 1
padding-left 1
padding-right 1
padding-top 1
right
text-indent 1
top
vertical-align 1
width
1 Not in Firefox 4 beta 5, but in nightlies.
2 Not in Firefox 4 beta 5 or in nightlies, but will hopefully
be in Firefox 4 beta 6.
† Certain prefixed properties may be renamed to unprefixed
forms prior to Firefox 4 release.
The following properties that accept percentages and lengths do
not have support for calc(), and will not have it in Firefox 4
unless somebody convinces me in the next few days that it's worth adding
it:
I have no idea how to file that bug in BMO and I'm not even sure it's a BMO bug since it's more probably a Flash plugin bug so let me describe it here:
the Firefox 3.6.8 home page recommended me recently to update my Flash plugin on my Mac OS X box (Snow Leopard)
so I did...
since that day, many web sites showing Flash-based videos freeze making the browser totally unusable with CPU usage > 95%. A good example is http://lci.tf1.fr/
I originally thought a bad interaction between Flash and AntiBlockPlus was guilty but I removed ABP and the problem is still here ; the Flash plugin is almost certainly guilty here
The new Flash plugin was probably pushed to users for security reasons. But for UX reasons, it's probably better to stop pushing it until this problem is gone...
I have noted before, by a nonscientific and utterly biased survey, that Thunderbird appeared to account for a significant share of the newsreader market (testing bug 16913
was what caused me to discover this fact). But actually finding any attempts to measure usage share of newsreaders via Google has actually been rather frustrating. You can easily find market shares of web browsers, desktop operating systems, server operating systems (though the numbers vary wildly?), and mobile platforms. But not things like email client shares or newsreader shares.
Okay, I am not about to find market shares of email clients. I have no access to anywhere near enough a representative sample that could work. But collecting newsreader market shares should not be that hard. After all, pretty much anyone can pick up a large, representative sample of news postings... connect to a NNTP server of your choice. So, seeing as how it's a three-day weekend, I thought I might as well collect the data myself. The other reason for my collecting this data was to demonstrate that a significant number of Thunderbird users are NNTP, so removing NNTP support would adversely affect the userbase.
Methodology
First off, I have to define what I mean by 'usage share.' Unlike other mediums, a relatively small numbers of users account for a relatively large share of NNTP postings. I've decided to measure it by the number of posts generated by each NNTP client, since it's easier to calculate, and I think it is more informative than the measuring by individual users.
I also have to pick the subset to log. For this set of data, I collected every single news article in the Big-8 newsgroups on my school's NNTP server (news.gatech.edu), which has a retention time of a month (30 days is the exact number, I think). I did not even attempt to filter out spam messages, and I did not account for cross-posting (my script managed to crash due to races a few times, so the totalized data which accounted for cross-posting was unreported).
Essentially, this is what I did. I ran a python which collected every group in the big 8 (determined by LIST ACTIVE wildmats) on the server. Then, it entered every group, performed an XOVER to find all messages, and then XHDR'd User-Agent, X-Mailer, and X-Newsreader to figure out what the user agent was. This script output, for every group, a total for each full string that represented the UA into a ~2MB csv file.
I collected all of the csv data into OpenOffice.org Calc and then ran a macro which attempted to collect the program number and the version from the UA strings. Unsurprisingly, I had to do some hacks to get it to recognize SeaMonkey and Thunderbird correctly (Mnenhy was not helping). I output tables that broke readers down by versions and by total program counts.
Results
It turns out that there is an incredibly long tail of newsreaders. There are about 250 different UA strings I found. Excluding one particularly prevalent bot
and those postings for which I could not find a UA string, I found around 430,000 messages (there may be some other things dropped by copy-paste errors). Of these, the top 5 newsreaders account for just 79% of the total count. By contrast, the top 5 web browsers account for very nearly 100% of the total. Some interesting newsreaders I found in the long tail:
Finally, here is the table of the top newsreaders:
Newsreader
Total
Percent
Google Groups
189536
43.94%
Thunderbird
52258
12.11%
Forte Agent
47100
10.92%
Microsoft Outlook Express
41042
9.51%
Microsoft Windows Live Mail
11196
2.60%
MT-NewsWatcher
10872
2.52%
Other
79359
18.40%
That Google Groups has the highest market share is not surprising, but I was surprised by the strong showing of Forte Agent and the poor showing of traditional newsreaders (e.g., tin, rn-based newsreaders). I guess this goes to show you that Windows has a surprisingly large market share in the Big 8 newsgroups. For SeaMonkey enthusiasts, your newsreader has a mere 4,187 postings (with another ~5K provided by other Mozilla distributions, some of whom cannot be determined... Mnenhy made processing UA strings difficult).
In terms of individual versions, one of Outlook Express's versions clocks in #1 at 31,617 total posts, with Thunderbird 3.1.2 trailing at a 'mere' 23,661. Thunderbird has around 14,000 on the 2.x branch, 11,000 on the 3.0.x branch, and 25,000 on the 3.1.x branch. There is apparently some spoofing going on for SeaMonkey users as well (I found a dozen or so Firefox entries, which I presumed is a SeaMonkey-spoofed UA string).
Another datum incidentally collected was the number of postings in each hierarchy. Here they are:
Hierarchy
Count
Largest Newsgroup
comp.*
64,360
comp.soft-sys.matlab (8,399)
humanities.*
2,460
humanities.lit.authors.shakespeare (1,455)
misc.*
28,518
misc.test (8,796)
news.*
31,635
news.list.filters (26,238)
rec.*
217,548
rec.games.pinball (14,707)
sci.*
47,948
sci.electronics.design (6,076)
soc.*
87,192
soc.retirement (6,053)
talk.*
12,513
talk.origins (6,498)
Remind me again why we have the humanities hierarchy? Almost 60% of its messages come from a single newsgroup, and it has just 8 newsgroups.
Future Work
What could be done in the future is to expand this research into binary newsgroups. However, merely counting posts becomes a more inappropriate metric because binary newsgroups use a lot of multipart messages, so just because someone uploads a ginormous binary does not mean it should be counted 50 times. I also don't have access to any binary newsservers.
Another opportunity for fixing is to discount spam. As a brief test, I looked into only those newsgroups which had the name `moderated'--this resulted in a paltry sample of 3,272 messages. The statistics also appear to not change much, but the newsgroups are likely not a representative sample of the Big 8 anyways.
Finally, this needs to be broadened and run repeatedly so it can collect snapshots of the data across time. This metric suffers poorly at capturing historical data, but it could be an excellent way to get data every few months from the future, so long as someone collects all of the data in the future.
So if you want to run this yourself, here is the location to the code and directions: svn.mozilla.org/projects/infrasec/are_we_secure
. As they say, please use responsibility and have respect for people’s privacy.
A major belief among a large part of the Mozilla community appears to be that 5-10 years in the future, the desktop or local applications will be extinct, and all we'll be working with will be 'web apps'.
Now, as with many other things, I don't think this extreme will be the common case (or else we should stop caring about Windows, Mac OS or any other 'fat' operating system and all jump fully on ChromeOS) - but I'm sure that 'web apps' will play a very much larger role, and I agree that almost everyone will at least use some of those.
In such a future, where the common case will be to use both web and local applications to some extent, probably also with a mixture of cloud and pocket data
, it will matter a lot to have solid and well-thought-out ways of bridging their differences and working well with both - esp. for professional and advanced users, who spend a lot of time 'in front of the screen' (whatever that will look like).
Also to keep in mind is that pure web applications in the currently done ways pose a problem for some people - I had an interesting conversation recently with a guy working in development aid for some African regions where he said there are entire communities of people that share a 256 KBit/sec Internet connection and things like Facebook or GMail cause nightmares for him.
That surely doesn't mean they should not exist, but those cases need thought, just like cases where you (intentionally or unintentionally) have no or a very bad network connection but might want to do work with your (mobile) computer (device). Not every place where people go in or around this world will have high-volume Internet access available for everyone all the time. We don't even have light all the time on this world, even though life on this planet heavily depends on it, and we have a transmitter right in our neighborhood (well, in terms of what we need there, 8 light-minutes are right next door).
Still, web applications allow the incredible stunt to have the same software on a free and open platform that runs on all kinds of devices
with mostly quite permissive licensing. And they allow getting productive immediately, without long install procedures or continuous updating - as well as unprecedented collaboration and other features only the web can make possible.
On the other hand, they're currently one of the worst examples in cross-application consistency, easy adaptation to the personal look and feel preferences and integration with the people's work environments, leaving any current or past desktop environment looking like a champ in comparison.
To improve those situations, we of course need to have possibilities for web applications to cache code and data locally so they don't need to load everything a new all the time, they need ways to adopt to a common look and feel defined by those accessing them, ways to integrate with the work environments - and a richer toolkit of easy-to-use controls to match desktop applications. All those are being worked on by the teams of Mozilla and other browser vendors in committees working on improving HTML, CSS, ECMAScript and other web technologies as well as in implementations in our web runtimes ('rendering engines' is not the correct term any more, I guess).
What we also need, though, are smooth transitions between desktop and web applications - in both ways - and between local and cloud/remote data, both in terms of the user-facing side and in terms of writing applications. We need local and web applications that can work with local and cloud/remote data, we need technologies to write local application with (basically) the same set of technologies as we're writing web applications, and we need to be able to convert one to the other rather seamlessly.
The Mozilla platform already works very much with the a lot of the same set of technologies as the web, so we are in a good position
in this area already, but we need to become even better by making the technologies even more similar (and there's a lot that future HTML can learn from XUL, too, even if XUL is being treated a lot like the ugly stepchild nowadays). A lot of awesome things can be done today, but I'm convinced that's nothing compared to what we'll be able to do tomorrow if we follow those paths we're already on to the most part.
And then, I'm quite convinced that there's a tremendous potential on an application that bridges web browsing, running web applications, and running local application code built around web/Internet communications. All those things should seamlessly integrate, work together, be able to exchange data where the user allows it, and give us the power of being productive, social, communicative, efficient, informed, and interconnected all at once. Right now, there's nothing as productive and efficient than fast, organized local application interfaces, and there's nothing as social and interconnected as some web applications. An integrated Internet application could build a bridge between them, bring that together and beat all the single offers out there, and there's none better situated in that particular race than SeaMonkey. We just need to grab the chance and bring it there.
I'm hoping a few people can point me to some nice freebie tools for applying patches in one repository to another repo's code, and keeping the patches up to date. Or for handling cross-repository (and for that matter, cross-repository-platform) patches in general.
And...
From my brief research, Mercurial Queues seems perfect for this - within Mercurial repositories anyway.
Two years later, I've long since stopped caring about CVS. Both Verbosio (my experimental XML editor project) and Mozilla host their source code on Mercurial, and I'm getting better at Python
. So I've once again solved my own problem
.
The funny thing is that Mercurial Queues is both simple enough and documented enough for me to put this together. I mean, it was really only a day's work to figure out. Once I found out .hg/patches was its own Mercurial repository, writing code to manipulate that inner repository was a piece of cake.
Whoever developed Mercurial Queues was very, very clever. Clever enough to make the basic design hackable. I like that.
In the realm of mailnews, there are a few parts of the code that don’t really get all the attention they deserve. One of them is the compose window.
> jcranmer: libmime and compose are pretty much the two areas that I refuse to do research in > bwinton: jcranmer: That’s a pretty good policy
The compose window actually involves different pieces of software: one of them is responsible for assembling the message, and passing it to the sending logic. The other one is the actual composition UI, which includes a whole bunch of dialogs (e.g. inserting an image, inserting a link), as well as the central component, called the editor (the big blank area where you type your message). Different factors can explain the lack of activity in that part of the Thunderbird code:
editor is notoriously hard to grasp – this is a vast, ancient piece of software, that didn’t quite move on as the rest of the gecko core kept improving (although this has been changing recently, thanks to Ehsan’s work),
the assembling and sending logic is all-C++, which makes it hard for extension authors to interact with us, and for would-be contributors to help us,
the composition UI involves a lot of (very old) files, most of which we cannot maintain, because
Mozilla Messaging is extremely low on resources.
We’re currently exploring ways to relieve the pressure, and move on to a saner design for us. I’ve been working on an experiment that aims at tackling these pain points. It basically consists in replacing the standard XUL compose window with a tab written in XHTML that integrates CKEditor, and doing all the composition process in JS, upto the actual send that takes places in C++.
The potential benefits are as follows.
We’d be able to move to a more maintainable architecture. Having the compose code written in JS would certainly enable us to do much more, and be much more extensible.
We’d pave the way for having a pluggable editor. Right now, the code is assuming that the only part that sends messages is the compose window. Other people might want to send messages too (Thunderbird Air is one of them).
We’d defer the maintainance burden of the composition UI – the insert image dialog, for instance – to a third-party. This means more bugfixing, more active development, from a project that is Thunderbird-friendly to boot. We’re not doing any active development on these anyway…
We’ll certainly introduce tons of bugs. However, fixing bugs in CKEditor certainly sounds more doable than fixing bugs in the C++ editor components.
We’d be able to attract more contributors: unless you’re mentally insane, you don’t want to hack XUL and C++ components — however, fixing a whole bunch of Javascript sounds more reasonable.
We’d finally introduce the much-wanted “compose in a tab” feature.
This experiment has barely reached the point where it starts being actually usable. However, I figured out I might as well share it with the community so that we can gather initial feedback.
Some disclaimers apply.
That extension actually requiresContacts
for the autocomplete (a nice side-effect is that you can autocomplete more than two addresses for the same contact, ha!).
This extension is an experiment. There’s a huge list of things it doesn’t do. Right now, it barely allows you to reply, forward, and edit/save drafts. It doesn’t take your preferences into account, it only sends html, not mixed mime emails. It has bugs. Lots of them.
To make sure this works properly, you need to ensure in Tools > Accounts settings that for each of your accounts, in the “Composition and addressing” section, “Compose messages using HTML” is actually checked. Otherwise, you will send HTML markup as plain/text, which is usually a bad idea.
This release targets Thunderbird 3.1. Because patches that enhance interaction between this new editor and the Thunderbird core will have to wait for 3.2, you will see a lot of errors in the Error Console.
Support will be scarce. I am not a Mozilla Messaging employee, and I’m doing this on my spare time. So please be patient, check out the list of missing features on the GitHub Wiki, and don’t report a ton of bugs: I’m probably aware of them already .
This project is tracked on GitHub
, so you can follow me over there. I’ll be posting regular updates regarding this project and others on my personal blog
.
I’m looking forward to hearing your thoughts on this!
When I met Evan in Paris and peeked into a world of graffiti, hackers, 3d-tag-sculptures
, lasers and sophisticated DYI hardware devices, I left with a geek heart pounding. Heavily.
I thought “we should get behind this project. This is all about doing cool shit on the web!”. Even more so because GML elegantly reaches out to new groups of people and shows them the potential of free culture and the power of web standards in a fun and visually appealing way – but also because it challenges fundamental values in the street art and graffiti world.
Evan came to the Drumbeat Paris event
and presented the GML project, impressing everyone there; long-term Mozilla contributors and newcomers alike. Here’s the video from Evans speedgeek – apologies for bad sound:
I joined the GML mailinglist
and watched the project evolve, following Evans twitter account
which he used for distributing GML-related tasks. The more I got under the hood of the project and its offspring, the more it made sense for me and Mozilla to get involved.
But let’s back up a bit. GML is not really one project. It’s a standard, that powers a bunch of projects, of which only some are directly related to Evan and the FAT Lab crew. At the core
“Graffiti Markup Language (.gml) is a universal, XML based, open file format designed to store graffiti motion data (x and y coordinates and time). The format is designed to maximize readability and ease of implementation, even for hobbyist programmers, artists and graffiti writers”.
reads http://graffitimarkuplanguage.com, which was launched this week, and will serve as a hub for GML-based projects.
There are already quite a few
and they are incredibly creative and convincing. Take Eyewriter
, which uses DYI hardware hacks and free and open software to allow former, now paralyzed graffiti artists Tempt One
to write aagin – with his eyes! Or Golan Levin
‘s Robotic Graffiti Tagger
, which “prints” GML-based graffiti motion paths. Take webmarker
, which allows you to draw and share your GML-based tags on any website. Not to mention the fascinating Graffiti Analysis
project, which recently launched version 3.0 and announced a challenge to design a cheap passive input device
.
So, one might ask: why is this important? Because GML shows why the open web, why protocols and standards matter in a very practical and hands-on way. For those of us already “in on it” – those of us who love the open web and work to protect it – this is self-evident. But for most other people it isn’t necessarily. And this I see GML making a real difference, beyond “just” being great and truly innovative art.
I feel confident betting on GML to do exactly what Drumbeat
is supposed to do. You can expect a LOT of activity from GML people over the next few weeks, so stay tuned! You can join the project on Drumbeat here
, or via http://www.graffitimarkuplanguage.com/
. Tell your friends, and share the GML love
The CrisisCamp Marathon Volunteering Weekend for Pakistan is happening this weekend (Sep 3-5) in Toronto, Sydney, Bangkok, Toronto, London and Silicon Valley.
Mozilla Drumbeat
has been collaborating with the good folks at Crisis Commons
since connecting with them at our Drumbeat Toronto event last March. Beginning tonight (Friday, September 3), they’re hosting a “CrisisCamp Marathon Volunteering Weekend
” for Pakistan, with events in Toronto, Sydney, London, Bangkok and — thanks to Mozilla’s own Atul Varma — Silicon Valley.
It’s a chance for anyone with a laptop to help with everything from Pashtun translation to data entry to user-interface testing. CrisisCommons also has a Usahidi
instance for the floods running here, and are looking for specific help in geo-coding incidents on the ground.
Geo-coding reports from the ground using Ushahidi
Natalie from last week’s Crisis Camp Silicon Valley demonstrates the street mapping project she’s working on for Pakistan flood relief
“Plunge in and do things:” civil society and the web
As Mitchell Bakerwrote last week
, she often gets asked how Mozilla can help respond to humanitarian crises. Mitchell and other Mozillians attended a CrisisCamp Silicon Valley event last Friday; in her follow-up post
, Mitchell draws the link between CrisisCamp and civil society, “developing a world where people don’t look to government and formal ‘non-governmental organizations’ for all the answers.”
CrisisCamp’s direct participation and collaboration represent civil society in action – “see a problem, do something. Form an association, virtual or formal. Build a tool — or a product. Reach out. Don’t wait for government to set up a special official organization — plunge in and do things.”
Order in chaos and “humane workflow”
The challenges of thousands of distributed participants “plunging in and doing things” are obviously familiar to Mozilla’s own work. Atul
describes some interesting parallels between his own first experience of CrisisCamp with Mozilla’s process of turning the potential chaos of mass participation into a more “humane workflow.”
One thing I noticed about the chaos surrounding the Internet-based efforts [at CrisisCamp] was that, like Mozilla, they were formed very organically. This meant that there were a plethora of activities going on which anyone could participate in, but the picture presented to a newcomer was confusing and messaging wasn’t always consistent. Tasks needed to be completed urgently; the changing landscape on the ground meant that problems and solutions were constantly changing, and assumptions were frequently challenged….
Combined with the distributed nature of the solution, acquainting newcomers with a reasonably humane workflow for contributing was non-trivial: just processing a report on pakreport.crowdflower.org, for instance, often meant switching between tabs containing getlatlon.com
, OpenStreetMap, and a Google Docs page containing advice and other resources. There was a lot of copying and pasting involved.
Sarah from CrisisCamp Silicon Valley describes some documentation and user experience challenges
How could Mozilla help?
Last week CrisisCommons did some blue sky thinking at the Berkman Center around long term strategy with folks like Clay Shirkey, Ethan Zuckerman and David Weinberger. (See Ethan’s excellent “Crisis Commons, and the challenges of distributed disaster response
.”) Some early thoughts on how Mozilla and Drumbeat might help:
Helping to build better tools and user experience. Atul describes how browsers, for example, could help solve some of the workflow problems he describes through addons or scripts
that would eliminate duplication and make the user experience for volunteer contributors easier. Creating these specific scripts and addons could fuel a potential Drumbeat project, a P2PU Webcraft course project, or innovation challenge.
Attracting skilled contributors. CrisisCommons is always looking for web-savvy generalists, but also skilled specialists for their “Technical Tiger Teams.” Mozilla may be able to help attract specific community members around specific tasks and challenges where needed. Clearly defining specific skill-sets and tickets would probably help this go faster and get better results.
Sharing expertise around developing open standards. One thread of the strategy dicussion at Berkman
focused on how CrisisCommons might emerge as “an international forum for standards development and data sharing around crises…. training the broader community about the importance of standards, and on the challenge of defining problems where solutions would benefit a broad community.”
Helping with agile open source work habits and processes. Atul notes that basic open source work habits and processes, like a real-time virtual space or chat room (IRC) and some sort of issue tracker, would have been useful to last week’s CrisisCamp Silicon Valley. (CrisisCamp notes in response that they’ve run into several issues trying to get everyone onto a single issue tracker or chat solution.) Co-ordinating effort from a far flung community of global volunteers is obviously difficult — it would be great if Mozilla could share some of what it’s learned along the way.
Fundraising. CrisisCommons is 100% volunteer-run. One of their hopes is to potentially hire a full-time community engagement person to develop their own community and build deeper ties with other Volunteer Tech Communities (VTCs) and Crisis Response Organizations (CROs). They’re also interested in setting up an open source lab in Silicon Valley. Funding for these projects could potentially come from small-dollar donations online.
Building a better (humanitarian) web
Efforts like CrisisCommons can help draw the link between openness, technology, and a better, smarter world — connecting the open internet to the kind of civil society Mitchell describes, and strengthening the web’s ability to act as infrastructure that helps communities respond to crisis. Not just through traditional government and NGOs — but through ordinary people plunging in and doing things in a smart, agile way that genuinely serves the needs of people on the ground. Ethan’s post
provides an excellent summary of the huge challenges in actually achieving that goal. But it’s inspiring to know that a small army of “civic hackers” around the world will be rolling up their sleeves this weekend. See you there?
'Open World Forum - Gender Equality and Diversity' (OWF-GED) is a non-profit organization for free/open source experts, managers and contributors wishing to help shape a more open and diverse free/open source world.
We think that the free/open source world is based on strong values, such as liberty, altruism and collaboration. And yet, it seems that the free/open source world does not equally address both men and women. In order to better understand the place of women in the free/open source world, we have developed a survey for the communities, companies and players of the free/open source world.
As a member of the Free/open source world, your opinion is very important to us. We would be truly thankful if you could take no more than 10 minutes to complete the following questionnaire:
The results will be analysed by researchers in Education Sciences at Paris Descartes University and released at the Open World Forum on September 30th in Paris: www.openworldforum.org
.
Should you have any questions, comments or wish to contact us, please send an email to owf-ged@april.org
It’s been just over a year since we introduced
Add-on Collections, a way for anyone to create and share groups of add-ons for Firefox. Today we’re very excited to launch a major update to our add-ons gallery that makes it even easier to spot, save, and share your favorite add-ons.
A video tour of the new features
Mark your favorites and get back to them quickly
Most people use collections to keep track of their favorite add-ons, so we’ve made it one click to favorite an add-on from almost anywhere on the site. You’ll automatically have a private My Favorite Add-ons collection where all of your favorites will be stored.
Instantly add to your existing collections or create new ones
Placing an add-on in any other collection is as easy as favoriting: just click the Add to Collection icon and select its destination. If you want to start a new collection for it, you can do that from anywhere now too!
Easily follow, share, and manage collections
Similarly to add-on listings, it’s now possible to follow, share, and edit collections from anywhere you see them listed in the Collections Directory. We’ve also made the directory navigation easier to understand.
Better collection permissions and URLs
With more than 64,000 collections created in the last 14 months, it can be difficult to find a unique URL for a new collection that isn’t already in use. We’ve changed the URL structure so that all of your collections are under your username and can be called anything you want. Existing owners of collections may want to read our Migration FAQ
.
We hope you enjoy these new features and are working hard on many other improvements over the coming months. If you haven’t explored collections yet, now’s a great time.
Live local weather, right in your browser. Get detailed forecasts, radar, news and severe weather alerts.
Ah, Labor Day. Just as summer starts to slip away, we get a second chance. A healthy stretch of a long weekend to make it easier to say goodbye to things like lemonade stands, ridiculous amounts of daylight, and pool parties. Mix up a batch of potato salad, crack open a beer and gather friends around the BBQ. So what’s the one thing that can rain on this parade?
That’s right:
Rain.
You can’t do anything about the weather this holiday weekend, but you can find out about it ahead of time with WeatherBug
.
After you install WeatherBug, you’ll see a button in the lower right hand corner of your browser:
Click that button and you can set up all the right weather specs for where you live:
Then see your weather at the bottom of your browser:
Or the top:
Install WeatherBug
just in time for the change of seasons, and you won’t regret it.
I just read this quote from my colleague, Firefox product manager Mike Beltzner:
Quote of Mike Beltzner:
it turns out we don't work *for* you, we work *with* you.
I think that says a lot about our spirit in Mozilla about how we work on our products. Nobody pays us to produce products like Firefox, Thunderbird, or SeaMonkey - even if some of us might earn money for doing it, that comes through indirect paths, and not from those using our products. And we're nothing more than community members, just that we're playing a certain role in the community, but we're still parts of it, and we are just as much users as we might fulfill other positions. On the other hand, every user has a chance to work with us to improve the products - we're open for (constructive) feedback and help. We even give you access to the code, and accept patches very much - with the result that some features we ship in our products get developed completely by people not earning a cent for working on it, but being 100% volunteers. This is how open source / free software should work.
Still, we have a lot of dreams of where we want to go, and our teams are always too small to fulfill all those dreams at once, so that help is not just appreciated but very much needed. As Mike goes on:
Quote of Mike Beltzner:
While we appreciate your input and designs, we would appreciate it more if you could help us find people to contribute implementations. Our time is more limited than our interest.
Feedback is good and often helpful, but very often things only happen if someone steps up and takes matters into his own hands (a lesson I sometimes think I have learned too well).
We need you to help us to become even better. We need you to work with us, just like we are working with you.
1. Hello Kerim. To start out with, could you give us a little introduction and tell us a little bit about you?
Hi. I was born in Sarajevo, the capital of Bosnia and Herzegovina. I am 25 years old, I have an Engineer’s degree in Telecommunications and am currently working as an IT Director in a local company called Triland Development.
2. What are you working on right now as a Mozilla contributor?
Besides leading the Bosnian Mozilla Community, I am currently working on localizing Thunderbird into Bosnian language, promoting Mozilla and Firefox (evangelism) and am contributing to Mozilla Drumbeat project.
3. And have you been working on this since the beginning of your contributions, or has your work evolved in some way? Have you started working on anything completely new, that you were maybe not familiar with at first, since you have started contributing in Mozilla?
I started contributing to Mozilla through evangelism and localization and as I was learning more about Mozilla so has my work evolved. I started getting involved with more things than I was before. Now it’s a long list of things I enjoy doing in order to give my contribution to the wonderful Mozilla community and I look forward to learning new things and doing more work for Mozilla.
4. Had you already heard of Free and Open Source Software before becoming a Mozilla contributor?
Yes, I have. Inspired by the story of Linus Torvalds I was developing my own DOS clone, just for fun and pleasure. Part of the code was later donated to the FreeDOS project. I was also involved with few other projects but contributing to Mozilla was and is the greatest fun of them all.
5. What in Mozilla has been most helpful for you in your work as a contributor? And in your opinion, what has Mozilla brought you?
If I tried to list all the things I learned while contributing to Mozilla it would take me forever. And all those things, both knowledge and experience, were very helpful to me. I’ve learned a lot from community calls and from leading the Bosnian community about managing a team of people and about project management. It really helped me to improve my management skills which I apply in my everyday work since I, as an IT Director, lead a small geek team
6. And how did you start contributing to Mozilla?
I loved Firefox from the first moment I ever used it. So, I thought maybe I could do something to make it even better. And that’s how it all started. I first got into localization then evangelism and so on. Three years later it looks like a nice fairy tale - so many beautiful memories.
7. Any plans for the future?
Of course. I always have something in plan. Most of my current plans concern the Balkans community, since we’re currently in a process of building it, growing the Bosnian Mozilla community and promoting Open Web values through Drumbeat project.
8. Thank you Kerim. Would you like to add anything else?
Thank you for this conversation. I really enjoyed it. I would like to say thanks to everyone for giving me the opportunity to be a part of such a wonderful community and for all the good moments and memories. I love you guys and I LOVE THIS COMMUNITY!
In the editor (Mozilla Composer, Nvu, KompoZer), there is a dialog for image insertion. That dialog shows a preview of the currently selected image. That preview relies on the following code:
load the image inside an <html:img> element
wait until it's loaded
get its natural width and height
resize the image to make it fit nicely in its container box, whatever the width and height of the image
With the help of CSS 3 Backgrounds
, this code is gone and all we have now is:
load the image as the background image of <xul:box> element
I’ve been involved in the judging pipeline for three competitions now. Today, I judged for an inspiring competition called Node Knockout
, held by Joyent
and Fortnight Labs
.
The first two competitions I participated in didn’t scale. I wasn’t even a judge for the first one—we had a tiny handful of celebrity judges who couldn’t possibly review all of the submissions, so me and some colleagues furiously attempted to cull the list down for them. It wasn’t fun, and there wasn’t any way for the public to participate in the judging process. It also wasn’t really transparent—I was part of the process, yet everything I did was hidden from the public, including any valuable feedback I may have been able to give the entrants.
In the second competition, I was a judge for one of the rounds, but there were so many entrants that I simply didn’t have time to carefully examine each one. It was exhausting, and I didn’t even feel like I was able to give each entry the time it deserved.
In stark contrast, judging for Node Knockout was an amazing experience on three levels.
Knockout judging was participatory. Instead of a tiny handful of judges, Joyent and Fortnight Labs actually enlisted a small army of industry experts
, including three of my coworkers. The public could participate, too: ultimately about half of an entrant’s “rating” was determined by them and the other half was determined by the judges. In some sense, the judges were just a pool of “trusted voters” whose votes were weighted more heavily than everyone else’s.
Knockout judging scaled. Since there were around a hundred entries total, the contest runners only required each judge to evaluate 6 or 7 assigned entries, allowing them to carefully examine each one and provide useful feedback. This allowed me to spend lots of time on each one and come out of the evaluation process feeling excited about the competition instead of exhausted.
Knockout judging was transparent. Furthermore, everyone’s comments and ratings were completely public, effectively constituting a body of valuable feedback the entrants could use if they wanted to continue working on their project. Every entrant’s team had a page on the Knockout site that listed all the comments and ratings submitted so far; it read a lot like the comments on a blog post.
In short, Knockout wasn’t just a competition about the Web; it was a competition held in the spirit of the Web
, too. Thanks to Joyent and Fortnight Labs for holding such a fun event!
While previous Test Pilot studies (e.g. the Firefox Main Window, Menu Item Usage, and Tab Switch studies) have largely focused on user experience and usage data, the Test Pilot extension is flexible enough to capture a wide range of other data related to the Firefox browser. The ‘About:Firefox’ Study is a 1-day study implemented to record configuration and performance information for our product and engineering teams.
The study will take a snapshot of memory use statistics, plug-in information, graphics card configuration, and modified preferences (information that can be viewed in ‘about:support’ and ‘about:memory’). As always, we are careful to avoid collecting any sensitive or personally identifiable information. The ‘About:Firefox’ Study will only capture information on a pre-defined set of preferences; we’ve made sure to blacklist any preferences that might contain sensitive data, such as homepage settings.
By submitting this data, you will help our product and engineering teams prioritize development efforts and create a more efficient browser!
Test Champion:Christopher Jung
, Data Analyst, Mozilla Metrics. Test Duration: 1 day. Test Version: Firefox 3.6.x and Firefox 4 Beta
Privacy
Security and privacy are priorities for Mozilla, especially when dealing with user data. Test Pilot privacy settings
give users control over their data – these privacy settings include:
Participants’ data will be transmitted to Mozilla only when they take all of the following actions:
* Join the Firefox 4 Beta program by downloading the beta with the Feedback Add-On.
* Submit data when the test is finished. Participants will be able to review all data before choosing whether or not to submit it.
Test data will be stored anonymously and in aggregate. None of it will be publicly associated with any personally identifiable information.
Participants can quit a Test Pilot study before they submit any test data.
Participants can opt-out from all user studies or disable the Feedback Add-On itself at any time. Learn more
.
Get Involved!
If you are testing Firefox 4 Beta, the Feedback Add-On will notify you before the study starts, at which point you can view a detailed study description and choose to opt-out of the study if you wish. For more information on how Test Pilot in Firefox 4 beta works, please see the “How it Will Work” section here
.
If you are not running Firefox 4 Beta, what are you waiting for? We invite you to get on the latest beta to participate in this study. Help test the future of Firefox by downloading the latest Firefox 4 Beta!
The release of the Mozilla Add-ons SDK 0.7 brings with it many useful APIs developers can leverage to create an even wider variety of Firefox add-ons without touching a single line of code from the underlying Mozilla platform. Notable APIs from 0.7 include Clipboard, Notifications, and the topic of this post, the Panel API.
The addition of Panel in the SDK provides for numerous UI and display implementations that were not nearly as easy to accomplish in earlier versions of the SDK. You can now easily display detailed, interactive content in response to a user interacting with your add-on’s widget, toolbar, or other browser UI.
Here is an example of what a creating a simple Panel API instance looks like:
var panels = require('panel'); var data = require('self').data;
var myPanel = panels.add(panels.Panel({ contentURL: data.url('somepage.html') }));
In the example extension MailPing, panels are used to show the user detailed information about their unread email messages. You can download MailPing
from addons.mozilla.org or grab a zippy of the entire package
, add-on, source files and all.
Last week we released a new alpha version of Firefox for Android and Maemo
(a.k.a. Fennec
). This release brings some major changes and new
features for add-on authors. Our Fennec add-on documentation
now has
the details you need to start updating your Fennec add-ons or creating new
ones.
What's new for add-ons?
One very big change in this release is Electrolysis, the project to move
content and chrome into separate processes. Any add-on code that interacts
with web content through the DOM must now be in a separate script that runs in
the content process. For details, see the Electrolysis guide for add-on authors
.
Fennec 2.0a1 also features new APIs for extending the context menu and
site menu. See the User Interface Guide
for links to documentation and
example code.
The upcoming beta releases will include even more changes. Add-ons that use
Fennec's panning and zooming features will probably need significant changes
for the new graphics code in Fennec 2.0b1. We will also include APIs for for
add-ons to customize sharing
and other new features
. If you are
working on an add-on that is affected by these changes, please let us
know
.
Get started
To start updating or creating your Fennec add-on, download our
Fennec alpha for Android and Nokia N900
or download the emulator
for
Mac/Windows/Linux. When you're ready, update your addons.mozilla.org listing
and set the maxVersion to 2.0a1. Or you can start getting ready for beta by
setting your maxVersion to 2.0b1pre and keeping up-to-date with our pre-beta
nightly builds
.
I recently put some time into updating the talos documentation
. There are now sections describing how numbers are calculated
, the history of the tp test
along with updates to descriptions of tests, description of talos hardware, where to file bugs and so on.
Any comments and suggestions on what needs addition or further clarification would be great. I’m mostly going by the questions that are directed at me the most frequently.
Today I successful landed the first part of bug 505512
, which lays the ground work for catching all sorts of build problems and turning them purple, instead of red. As part of this initial work we’ll now be catching most problems when cloning Mercurial repositories, turning the builds purple, and automatically retrying them.
In the next week or two I’m going to add similar behaviour for at least the following:
Graph Server post failures
Slave disconnections
Sendchange failures
out of disk issues
CVS checkout failures (yes, we still use CVS….)
If there’s other things people can think of that should be flagged as infra problems, or that should cause builds to be retried, please add them to this Etherpad: http://etherpad.mozilla.com:9000/build-infra-errors. Bonus points if you write the regular expression that catches it :-).
Currently, the purpleness is only visible on plain Tinderbox, but once bug 592340
is resolved, TBPL will support it as well.