Mozilla LabsPancake: A new project from Mozilla Labs

What is Pancake?

Pancake is a new Mozilla Labs project focused on exploring, evolving and expanding how we search, browse, navigate, organize and discover amazing things on the Web. To do this, we’re creating an app — a usable prototype that we’ll share and iterate on rapidly through an ongoing series of experiments. We want to better understand what people do on the Web, why and how they do those things, and how we can make those things easier and more efficient.

We’re playing with some huge concepts, monumental problems and occasionally crazy ideas. We’ll be looking at what tools and systems we can create to put more of the Web at users’ fingertips. We hope to devise new metaphors and new systems that give users greater power and control within the modern Web.

We want to address questions that go to the core of how users experience the Web. Some examples of the questions we are asking include: How can we make it easier for people to find what they’re really looking for on the Web? Do URLs still need to be something users care about? Can we make it easier for people to discover new and interesting things on the Web? What impact does social play in discovery on the Web?

The prototype app we are building is really only the surface of Pancake. We’re also pushing the envelope — using the latest and greatest Web technologies — to build an amazing, portable experience for users. The back-end of Pancake will live in the cloud, where we’re creating an extensive Web service that will allow you to carry your data and experience across many devices. Our initial focus is on iOS and Android tablets and phones, but our long-term goal is to help people live their online lives on their own terms, across all devices and platforms.

The project will operate as a typical open-source project — allowing open collaboration so everyone can test our ideas, give us feedback, conduct usability testing, and with us to discover new avenues of experimentation and exploration. We are working hard to release our first prototype in the next few months.

Why are we doing this?

The Web is vast and continues to grow at an unprecedented rate. More people and organizations get online to use and contribute to the Web every day. And the Web is unbelievably powerful — it is changing our media, our politics, our social systems, our education, our communications… our everything. The Web is changing the world, and it is changing with the world.

But there is a problem. Our tools for viewing, understanding and using this increasingly vast and powerful Web haven’t been keeping pace. Our core methods for searching, browsing, navigating, organizing, and discovering things on the Web are not significantly more advanced than they were a decade ago.

On top of this, the Web has evolved well past its origins as a way to publish and consume static information — the modern Web includes socializing, sharing, playing, creating, collaborating and other real world activities that it was never really designed to support. As a result, the modern Web is less useful and usable than it could be, and it is hard to make use of its full potential.

This is where Pancake comes in.

How can you get involved?

If you would like to get involved or talk with us about the project, please visit our Wiki.

QMOFirefox 11 Beta 1 Testday

 What: Firefox 11.0b1 Testing
 When: Friday, February 3rd, 2012
Where: irc.mozilla.org #testday
  Who: Everyone and anyone

Greetings Mozilla QA Community!

I’m here to announce that next Friday, February 3rd, we will be running a testday for the first Firefox 11 Beta. Here is a list of things we need help with:

  • Testing new features
  • Verifying bug fixes
  • Confirming unconfirmed bugs
  • Exploring the web and filing bugs for incompatibilities, crashes, and generally poor browsing experience

If you’ve not participated in a testday before please join us. It’s a great opportunity to learn some new skills or build on the skills you already have.

If you want to get a head start check the test plan. Details will be posted there as they materialize. I expect builds to be available by mid-week.

If you aren’t available to help on Friday, email me. I’ll find a way for you to help out and contribute.

Please join us and help test Firefox.

 

When: February 3, 2012.

Gary KwongFuzzing at Mozilla brown bag on January 30, 1pm PT

Fuzzing [1], a form of randomized testing, it is an integral portion of the testing process at Mozilla. Crashes, hangs, assertions and various security problems, such as memory safety problems, are discovered through fuzzing [2].

Thousands of bugs in Mozilla applications have been found using fuzzers. In particular, 3 of the fuzzers have been responsible for more than a third of critical security bugs.

Drop by on Monday, January 30, at 1pm Pacific Time in 10 Forward, where we will host a brown bag session sharing a high-level overview on how fuzzing is used to discover these issues and how you can help us find more bugs.

The brown bag should be available on the public Air Mozilla ( https://air.mozilla.org/ ) and archived.

See you there!

Gary Kwong
Mozilla Security Research and Testing

[1] http://en.wikipedia.org/wiki/Fuzzing
[2] http://www.squarefree.com/categories/fuzzing/


Axel HechtWhat’s a glossary term?

I’m hacking on some tool that indexes the localizable strings in our apps.

One of the fall-outs could be a glossary tool, i.e., which terms in Firefox, Thunderbird, etc should localizers bother to get consistently translated.

Which raises an interesting question, where do you draw the line? What’s a good metric to use to define a glossary? Are there glossary-based applications that don’t need a cut-off at all?

Insights welcome.

Mozilla Add-ons BlogAdd-on SDK Version 1.4.2 Released

Following hot on the heels of yesterday’s release of 1.4.1, we identified an issue in the SDK where console logging was not happening correctly. Through discussions with the Add-on Builder team, this issue was identified as a Priority 1 blocker for the Builder team given the recent addition of 1.4 support earlier this week. If you’re curious, the tracking bug for this issue is here:

https://bugzilla.mozilla.org/show_bug.cgi?id=718230

While this issue primarily affects the Builder, it will also affect any addons packaged using 1.4.0 & 1.4.1 that print debug statements to Firefox’s console window using console.log. Using console.log to print debug statements to the terminal when running an addon using the cfx tool is not affected by this issue.

If you have any questions or issues with this hotfix release, please ask in any of the following areas:

For more information on the Jetpack Project check out our wiki

Mozilla Add-ons BlogAdd-on Compatibility for Firefox 11

Firefox 11 was pushed to the Aurora channel weeks ago, and Firefox 12 will follow suit very soon. So, it’s time for the long overdue overview of bugs that can affect add-on compatibility in Firefox 11. I’m sorry this update is being posted so late, but things have been pretty crazy lately. More on that in the Firefox 10 section.

A few notes regarding Firefox 10

If everything goes according to plan, Firefox 10 will be pushed to the public in less than a week. There are a couple of points that are worth mentioning:

  • Starting with Firefox 10, add-ons will default to compatible. All add-on versions that have compatibility up to Firefox 4 or higher will automatically work in Firefox 10 and all future releases. This excludes add-ons that are not extensions (themes, dictionaries, language packs) and add-ons with binary components. We will also keep an override list that we will fill with all add-on versions that are known to break due to compatibility problems. This is what has kept me busy for the past weeks. We need your help to keep the override list up to date.
  • Rename omni.jar to omni.ja. If your add-on references omni.jar directly, it will break now that it has been renamed. We recommend that you find more flexible ways to reference these files, since most should be accessible through chrome URLs.

For more information about Firefox 10 compatibility, please read the full compatibility update.

Firefox 11

Other important changes are noted in Firefox 11 for developers.

New stuff in 11!

Please let me know in the comments if there’s anything missing or incorrect on these lists. If your add-on breaks on Firefox 10 or 11, I’d like to know.

Because of the Default to Compatible feature, we are no longer doing compatibility bumps like we did before. We will still run the validation but only send you a message if your add-on is identified as incompatible. There will be no more automatic version upgrades, given that there’s no point anymore.

Eric ShepherdA writer’s inspiration: The English language

I love the English language. It’s crazy, complicated, and bloated, and those are all things that contribute to its amazing expressiveness. If a word doesn’t exist, someone will make it up, or rip it off from another language. It’s a quirky, twisted amalgamation of words and syntax from a broad swath of other languages. From Latin to German to Japanese and Cherokee, English has swiped words from dozens of other languages.

All of that makes it a tricky language to master. It’s not hard to get your point across in English, but to do it with an appropriate level of grammatical correctness and meet the style and formality of whatever context you’re working in can be difficult.

English can be ugly and twisted or fluid and beautiful, depending on the skill level of the writer and the point they’re trying to get across. It can be used to create magnificent works such as Handel’s “Messiah” and Shakespeare’s Hamlet, popular novels such as Stephen King’s Carrie, or technical materials such as the MDN wiki I administrate. If you look at all of these works, they demonstrate the wide variety of styles of material you can create in English, and they each practically feel like they’re written in a different language, because of how differently the construction of sentences and the flow of the material works.

That English can be difficult to master has the side benefit of making being a technical writer a very attractive and lucrative line of work. If you know how to write code and can also write in English easily and with skill, you have a unique suite of capabilities that make you highly employable. And if you love words, and have fun writing code, technical writing is a blast — being able to do both is the most fun I’ve ever had in my working life, and I’m incredibly thankful that I get to do it.

Rob HawkesHelp me find places to work and people to see in New York City

I'll be in NYC in mid-March and I'd love to find somewhere to work for a few days and some people to meet up with while I'm out there. Can you help?

You Will Never Forget.

Looks like I'll be out in NYC this March for the first time ever and I'm really looking forward to seeing the city. However, I'll be working while I'm out there (at least through the day) so where is the best place to get that done? Some standard options include frequenting cafes but I'd also like to explore options like co-working spaces and any friendly offices that someone has a spare desk at.

I'd also like to meet up with anyone out there who'd be kind enough to show me some of the sights and/or talk about the Web and gaming. I'd also love to use this opportunity to do an evening talk or two if there are any local events happening mid-March. I'm basically open to anything really!

Oh, and where is a good area of the city to stay?

Let me know if you or anyone you know might be able to help me make my stay in NYC a fun one.

Erin KnightLearning to make by making...

Mozilla is doing a bunch of thinking and work around creating learning offerings for webmaking and web literacy. We are working on defining what we think the core set of web literacy skills are - including both harder skills and the ‘softer’ or more social skills. And we are developing curriculum, assessments and pathways for people to learn those skills. All of this is new and evolving daily, but there are some things/principles/assumptions that I feel are important to guide our work:

Learning making by making (or Less yak, more hack).

Learning experiences should be be hands-on, immersive activities that are focused on the making part, where the learning happens almost as a by-product. Let people get their hands dirty and learn through the process of trial and error, tinkering, exploring and building. This one is pretty core to everything we do, and many of the other principles/assumptions discussed below feed from this one. We won’t have lectures or long textbooks to read - instead expect to see more lightweight, modularized, immersive activities or experiences which can stand on their own but are also rich with opportunities for learning. A note: with this approach, its important to explicitly tell the learners what they’ve learned after (and in some cases, during) the experience to make them aware and foster self-reflection and metacognition. This is where the Mozilla badges will play an important role. Keep reading for more on that.

Hacking on things that they care about as the core.

Where possible, the thing in the middle that people are building or hacking on should be something that they care about and is relevant to them. For example, for a journalist, that thing might be a story that she has written. It’s probably safe to assume that she cares about the story, has some emotional attachment to it and its success, feels a sense of ownership, can envision how to make it better, etc. So taking that story and having her build it out in HTML and CSS is going to help her learn HTML/CSS much more quickly and deeply than if she just did random one-off tasks. This model isn’t always going to work in all cases, but its important to focus on activities that are meaningful to the learner. 

Have fun.

It’s hard to downplay the power of fun for motivation and deeper learning. Therefore, we are approaching our curriculum and design with a sense of playfulness and fun. I don’t necessary think that explicit fun has to be a part of everything - there are a lot of learning experiences, like the journalist one mentioned above, that can be implicitly and intrinsically fun and motivating and where possible, we want to foster that. But there are many other cases where explicit/extrinsic fun can really draw people in and lead to a lot of learning. Therefore, things like missions, role-based challenges and mini-games will definitely have a place in our overall learning content offering.

Learn together.

One of the key affordances of the Web is that it connects us to other people - allows us to share things and riff on them together. Webmaking is inherently a social activity as well. The success of the early web and HTML was that it was so easy to view source, copy other people’s code and build on it/from it. So these learning experiences should allow for, and maybe even strongly encourage, social interaction, peer learning and mentorship. 

Embed assessments in the learning and embed learning in the assessments.

We want to ensure that people are learning and we want them to be aware of what they’ve learned too. So assessment is important. But this doesn’t mean we need to force people through artificial multiple choice exams. If we are doing the stuff from above right, namely trying to make the learning experience meaningful and/or fun, then the assessments should follow the same model. Assessments should be embedded into the learning experience where possible. They should allow for people to leverage work they’ve already done (i.e. linking to your github account to demonstrate that you know how to code). We want to avoid authority-required assessments, but instead focus on peer assessment and self-assessments as much as possible. Here’s the kicker - people should LEARN during the assessment process. Whether its from the experience of doing the work required for the assessment, or being the assessor, there is an opportunity to encourage more learning here.

Get recognition.

OF COURSE we are building badges into our learning offerings. While there is an element of eating our own dog food, our webmaking content is a perfect use case for badges. It’s informal, interest-driven learning that will include many job-relevant skills. And then there’s the whole self-awareness/metacognition thing I previously mentioned. Oh and some motivation thrown in to the mix as well. Thus, learners will earn badges as they interact with our content, take assessments, build things, etc. We haven’t decided the specifics yet, but its possible the smaller incremental badges will level up or aggregate into a Webmaker master type of badge.

Allow for extensibility

There are two levels here: extensibility on the individual learner level and on our entire learning offering level. On the learner level: webmaking is creative and personal - therefore these learning experiences cannot be overly scaffolded or constrained. We need to leave room for individual (or group!) experimentation. We need to be flexible to let the learner adapt things as they go, or choose their own adventure, if you will. On the higher level: We know a lot about webmaking but 1) we don’t know everything, 2) we don’t know how to speak to everyone and 3) it changes all the time. Therefore, we should design our learning offerings in a way that people can both pick it up and use it in their own contexts, but also BUILD ON IT. This should support everything from localization to something much bigger, like a more traditional open source model.

Reveal the universe.

This ties into some of the points made above, but it is important to give the learner a sense of everything there is to learn, and where they fit into it. We may handle this through a set of badges and/or a learning map that can illustrate what a particular learner has achieved/mastered and what’s next or what’s left for them. We have to provide the pathways to mastery for those that want them, while also allowing people to jump around as well. The key is that they have a picture of the learning universe and can make choices about how to explore it.

It may be helpful to reiterate that while I think many of these principles are important for all kinds of learning, we are working with a very specific set of content - webmaking - that potentially lends itself better to some of these approaches than other content. We are also very clearly rooted in the informal learning space, which ultimately gives us more flexibility (but it is important to me to still build in some rigor around effectiveness and accountability as well).

Just some of the things I’m thinking about right now. Would love to hear other suggestions/ideas.

-E

Chris AtLeeHow RelEng uses mercurial quickly and safely

Release Engineering uses hg a lot. Every build or test involves code from at least one hg repository.

Last year we started using some internal mirrors at the same time as making use of the hg share extension across the board, both of these had a big impact on the load on hg and time to clone/update local working copies.

I think what we’ve done is pretty useful and resilient to various types of failure, so I hope this blog post is helpful for others trying to automate processes involving hg!

The primary tool we’re using for hg operations is called hgtool (available from our tools repo). Yes, we’re very inventive at naming things.

hgtool’s basic usage is to be given the location of a remote repository, a local directory, and usually a revision. Its job is to make sure that the local directory contains a clean working copy of the repository at the specified revision.

First of all, you don’t need to worry about doing an ‘hg clone’ if the directory doesn’t exist, or ‘hg pull’ if it does exist. This simplifies a lot of build logic!

Next, we’ve build support for mirrors into hgtool. You can pass one or more mirror repositories to the tool with ‘–mirror’, and it will attempt to pull/clone from the mirrors before trying to pull/clone from the primary repository. At Mozilla we have several internal hg mirrors that we use to reduce load on the primary public-facing hg servers.

To improve the case when you need to do a full clone, we’ve added support for importing an hg bundle to initialize the local repository rather than doing a full clone from the mirror or master repositories. You can pass one or more bundle urls with ‘–bundle’. hgtool will download and import the bundle, and then pull in new changesets from the mirrors and master repositories.

Finally, hgtool supports the ‘hg share’ extension. If you specify a base directory for shared repositories, all of the above operations will be run on a locally shared repository first, and then the working copy will be created with ‘hg share’, and updated to the correct revision.

There are all kinds of fallback behaviours specified, like if you fail to import a bundle, try to clone from a mirror; then if you fail to clone from a mirror, try to clone from the master. These fallbacks have resulted in a far more resilient build process.

Mozilla Web DevelopmentBetter Know a WebDev: Greg Koberger aka gkoberger

Welcome to another thrilling installment of your favorite, and only, recurring series on this blog: Better Know a WebDev!

This is a special week, as we’re featuring someone who just moved from web development into a product role with our Add-ons team. Give a big welcome and congratulations to Greg Koberger!

What do you do at Mozilla?

For the past year and a half, I’ve been a web developer working on the Mozilla Add-ons site. I wrote both front- and back-end code, and every once in a while I managed to sneak in a little bit of design work. I recently traded in vim for Google Docs, however, and made the switch to a more product-centric role. I still get to work with the same people on the same projects, however I’ll be writing specs and designing flows rather than writing code.

Any fun side projects you’re working on?

One of most recent (and relevant) mini side projects is a Firefox Quine. It’s not a true quine, since it loads some external assets (like jQuery). However, the concept is the same: if you were to copy and paste the code that makes up the logo, it would output itself. We’re currently getting the design printed on t-shirts.

How did you get started in web development or programming?

I was lucky—my parents always made sure I had a good computer. I started by tinkering with HyperCard, and eventually decided to try making websites. I still remember how asking my parents for my first hosting account went: “Why do you need other people to see it? Can’t you just play with it yourself on your computer?” Luckily they finally agreed, and I started teaching myself PHP and JavaScript.

How did you get involved with Mozilla?

While in college, there was an alumni talk about working at Mozilla. I missed the talk, however I emailed the guy after since I was curious. He encouraged me to apply, and I flew out to California to interview. I fell in love with the company. The people I interviewed with were awesome, and I was amazed by the company culture. Everyone just wanted to make the web a better place.

What’s a funny fail story or mistake you can share?

Back when I first started at Mozilla, I managed to delete all my private keys. So, some of the other webdevs set up a tissue-box-based “Computer School Fund” for me. I made $20 for deleting my private keys, so I like to think I got the last laugh.

What’s something you’re particularly proud of?

Back in November, awareness of SOPA was just starting to pick up. The day before the initial hearing, a bunch of us decided to try to raise awareness. It was incredibly last minute, but we knew we had to do something. We could get the message out via the snippet on about:home, which serves about 300MM requests a day. However, we had nowhere to link to. SOPA was new, and there wasn’t a definitive source with a few easy-to-digest bullet points. Plus, we couldn’t really send millions of hits to a website without giving them fair notice. So, we made our own. I sketched it out on paper and wrote out the copy. Then, as I designed it in Photoshop, my fellow webdev Potch sat next to me and wrote the code. We didn’t even have time to share files; he just watched what I was doing and wrote the code. It took us about an hour—which is all we had, since it still had to be deployed and tested. We couldn’t have gotten it out without help from all the different teams at Mozilla—everyone from legal to QA to IT to webdev worked late to make it happen. It was a huge success. We got the word about SOPA out to millions of Firefox users within 24 hours. We were able to use the same site a few months later for the SOPA blackout.

What’s coming up that you’re excited about?

I’m really excited about my new product management role. I love new challenges. It’s a great time to start this job, since a lot is going on with AMO right now. “Marketplace” (apps and add-ons combined, with the ability to charge) is going to be a huge project in the upcoming months. I can’t wait to see what our team can make in the upcoming months.

What software do you use day-to-day for the work you do?

My main machine is a 13″ Macbook Air running OS X Lion. I use vim for writing code, which all ends up on GitHub. I rely heavily on Firefox and Firebug for testing and debugging. I spend a good amount of time in Photoshop, mocking things up before I start coding. I couldn’t survive without either Rdio or Pandora playing in the background.

Mozilla WebDev: April 2011

Nathan FroydDataShrink work

Over the last month, I’ve been working on some patches to address the relocation issues I’ve blogged about and just general space wastage in libxul.  The upshot is that Firefox 13 will have shaved almost 100K of data and relocations for smaller binaries and slightly faster load times:

  • Bug 717311 was the big one; we were wasting 70K+ of space in some Unicode tables due to structure padding.  Fixing this was just a matter of using the right bitfield datatype so the compiler would pack things correctly.
  • Bug 717501 was much the same: use smaller datatypes when the data you have fits in them.
  • Bug 711563 was more in line with the invasive relocation changes discussed earlier.  The patches there rearranged the storage for the stub names to avoid relocations and generally packed things more efficiently.

Not going in this cycle, but worthy of mention is bug 704848 for rearranging the effective TLD name table to avoid relocations; that bug will save 40-50K of space in data and relocations.  Jason Duell and I talked on IRC yesterday and while he’s in favor of the idea, he’d like to see if gperf makes things any better.  No sense in constructing a table at runtime if you can construct it at compile time!

Are there more instances of things that could be compressed like this?  Yes, but the savings from them are likely to be much smaller on a case-by-case basis:

  • Anything that uses nsStaticCaseInsensitiveNameTable could be tweaked to use less space and relocations by providing the entry data in a different format.
  • nsElementTable.cpp:gHTMLElements could probably be rearranged for the same sort of savings.
  • Initialization of atoms could stand some rearrangement for relocation reduction, at the cost of some ugliness elsewhere.
  • YARR, used by the JS engine, has some fabulous bit vectors represented as character arrays; squashing those would shave 100K of data, but would likely be tricky.
  • Eliminating null entries from the tables in table-driven QueryInterface methods would help, possibly at the cost of some extra parameter traffic to NS_TableDrivenQI.
  • Actually, rewriting IIDs for XPCOM interfaces to fit in 32 bits could save a number of relocations in the tables for the aforementioned methods.
  • The tables required by PR_ErrorInstallTable are breeding grounds for relocations; changing them is unlikely to happen anytime soon.  (Those tables do account for a significant chunk of the relocations in libnss and libnspr, though.)
  • Any number of places where we use pointers in constant data structures; there are quite a few of them, but converting each one saves 30-50 bytes each.  Best to save these for when you are really bored.

All of the above might amount to 200K of data+relocation savings.

Really, though, there’s not that much to trim (or perhaps what is left to trim is decidedly non-trivial to trim).  If you do something like:

readelf -sW dist/bin/libxul.so | grep OBJECT | awk '$3 > 1000 { print }' | c++filt | less

in your objdir on a Linux-y system, you’ll see that quite a lot of the largest objects come from tables for character conversion or character detection.  However, the authors of said code were already conscious of the space required by these tables and they have tended to use the smallest datatypes necessary.  vtables make a number of appearances (hard to get rid of at the moment).  There are also some tables for media codecs, which presumably are difficult to trim down.

Gervase MarkhamEstablishing Trust Online

No, this post is not about certificates :-))

We want to make Mozilla as open a project as possible, which means that ideally there would be no parts of what we do which were closed to input from particular sections of the community. Question: how does Mozilla acquire sufficient trust in a potential community member that we could let them work in sensitive areas? Sensitive areas might include ones where they were working with confidential data belonging to users or employees, or working with partners under NDA, either temporary or permanent. We would not want someone untrustworthy in such a position.

Here is a (probably incomplete) list of ways to establish trust between a truster and a trust-ee:

  • A) Recommendation from 3rd party already trusted by truster
  • B) Trust-ee putting something at risk (deposit)
  • C) Legal contract with penalties
  • D) Demonstration of bona fides (e.g. by being faithful in small things)
  • E) Gut instinct
  • F) Trust-ee revealing verified identity information
  • G) Default to trust; remove trust if trust broken

When Mozilla employs someone, we have sufficient trust in them because of B) (their job is the thing at risk if they violate trust), C), F) and perhaps a little of A). How do we go about establishing similar trust with someone we don’t employ?

Here are some comments on each:

  • A) doesn’t scale well to a globally-distributed organization, where we regularly get new people who know no Mozillians in real life.
  • B) This is a difficult thing to ask of new community members. What options are there? Money? Something else?
  • C) IT went for this one, but it might be too heavyweight for some. (Of course, it might be required by law in some cases.)
  • D) This is how things work normally; we are looking for a way to speed this process up.
  • E) This works right up until it doesn’t…
  • F) We could investigate this; obtaining such identity proof might involve a time and/or money cost for the contributor.
  • G) Possible in some circumstances, but not the difficult ones. Perhaps involves an overly-rosy view of human nature.

Thoughts and further comments?

Gerv

Dave TownsendMossop Status Update: 2012-01-27

Done:

  • Sent out schedule for the Add-ons SDK work week
  • Worked on job descriptions for new hires
  • Assigning owners to goals

Firebug BlogFirebug 1.10a2

getfirebug.com has Firebug 1.10a2

Firebug 1.10a2 is compatible with Firefox 12 (nightly).

Firebug 1.10a2 fixes 11 issues.

This release introduces couple of great improvements:

Delayed Firebug Load

Firebug doesn’t slow down Firefox start time anymore since its loaded as soon as the user actually needs it. There are only a few things loaded at the browser start-up time: the main Firebug menu, Firebug start button and inspect menu-item in page context menu.

This also means that Firebug extensions overlaying only the Firebug UI are loaded as soon as Firebug itself is loaded and so, don’t slow down Firefox start-up time too.

Bootstrapped Firebug

It is now possible to install (and uninstall) Firebug without browser restart. We are also working on APIs that will allow developing bootstrapped (restart-less) Firebug extensions. An example extension is coming soon.

Thanks to awesome Harutyun Amirjanyan for his help on these features!


Some other highlights from this release:

  • Every option in panel’s mini tab menu has a tooltip with a description. This should help to understand it’s purpose (issue 3183)
  • Autocompletion is now working even in the Watch panel (issue 4934)

And more from our roadmap is coming so, stay tuned!


Please post feedback in the newsgroup, thanks.

Jan ‘Honza’ Odvarko

Mozilla DevToolsWeekly developer tools update, Jan 26

Here are some high level points from the weekly meeting:

  • Firebug 1.10 alpha 2 is coming tomorrow, and it’s restartless! And, almost all of the new Firebug is lazily initialized.
  • Firebug 1.9.1 with a crash fix is planned for next week
  • Many Tilt improvements have landed, including the ability to remove a node visually using the “x” key (the node is not removed from the DOM, just from the 3D view). The 3D view also now has a cool animation when you leave 3D mode.
  • GCLI (Command Line) has been turned off again in Nightly. The plan is for it to reappear in the developer toolbar. Thanks for the feedback!
  • The Page Inspector element highlighter now follows the element around if it moves on the page. This improvement will land in Firefox 11
  • New mockups of the Web Console UI
  • Style Editor’s filtering by stylesheet name has been removed. The plan is to put the search box back in Firefox 13 as a search in the stylesheet bug.
  • Firefox 10 is coming out on Tuesday and will raise the profile of the developer tools
  • I am working on a blog post about recent input we’ve gotten, and I summarized some of it during the meeting.

That’s it for this week. See you next week!

Pedro AlvesCDA release - 12.01.26

Aaaand, since there's been a lot of time without a release, CAD 12.01.26 is here.



  • Solved Redmine Bug #104: CDA Cache Manager -> UI didn't update after delete a query
  • Implemented Redmine Feature #105: CDA Cache Manager -> Delete all queries belonging to a cda file 
  • Fix a bug where html output would duplicate output in some cases
  • Cache refactor; cache monitor: +removeAll, require admin permissions
  • cachemanager: user feedback for server requests
  • Support for cache plugin bean. Serialization changed
  • Added version info to cachemanager and SelfTest Page
  • Sorted out some images on SelfTest Page

Ctools installer with -b stable will get this version

Brian BirtlesParapara Animation

About a week ago Mozilla Japan put on a two-day event in Tokyo called Mozilla Vision 2012. It was a great weekend with several hundred people coming to talk about what it means to be Open, and, in very Japanese-style, see some cool robots (courtesy of Takahashi Tomotaka-san).

Personally, I was involved in running the Parapara Animation Workshop* where kids enjoyed drawing simple frame-based animation on a tablet which was then added to a much bigger animation projected on the walls. The purpose of the project was to teach kids the basics of animation as well as to encourage them to be not just web spectators but web makers.

It’s a workshop that was originally done by a group of Keio University Students and they helped run it again this time. The main difference is that last time it was mostly iOS-based, this time it was all Web.

Christian Heilmann has written up a great summary of this part of the program including a quick interview where you can see how it worked.

Japanese kids are really creative so it was a really fun time. But not only was the event fun, the technology side was really fun too.

Some of the technology used

What went well

  • SVG’s native motion on a path (<animateMotion>) saved us so much time. The auto-rotate feature (rotate="auto"), path APIs (getPointAtLength), and ability to calibrate the path length (pathLength="1") also made it easy to position animations at just the right place so they would appear on the screen as soon as the user pressed “send”.
  • Using SVG made it really easy to do the drop shadows. Just a transform and an blur filter and we were done.

  • SVG animation was surprisingly fast. I expected it to be really slow but it was the fastest of the alternatives we tried. That said there’s still a lot more work to be done (see below).
  • Overall SVG just proved really versatile. Being able to show a faint greyed outline of previous frames just by setting an attribute was great. Likewise being able to do all the animation work on the client-side and then just serialise the subtree and send it to the server was so much simpler than the previous version.
  • Deployment over the Web was great. Just refresh the page to pick up the bug fixes! Likewise when we ran out of tablets at one point we could just load up the editor URL on a laptop and keep drawing.

What didn’t go so well

  • The app marketplace. We badly wanted to package it all up as a Web app using the framework developed by the Mozilla Labs Apps project. We hoped that would give us full-screen display and stop the user from accidentally navigating to other pages. We had high hopes but were shattered to find the Android runtime launched the app in a Webkit runtime which didn’t even support SVG.
  • Going full-screen. Due to some technical reasons we were stuck with an old version of Fennec and old UI which took some coaxing to go full-screen and stop the chrome from flying in when the user was drawing. Fortunately the bugs that stopped us from using a more recent version of Fennec appear to have been fixed so next time we can hopefully use the Fullscreen API and multi-touch for drawing with all your fingers at once (something the really young kids really wanted to do!)
  • CSS and UI layout. Countless hours were sunk into trying to convince CSS to layout widgets on the screen. In the end I gave up and did half of it in script. I’m told CSS flexbox can help a lot here but I spoke to one implementer of flexbox who said that some of the things we were trying to do weren’t possible even with flexbox.
  • Graphics performance. For the combined animation we badly need a boost to our SVG rendering performance. On Windows the performance was generally ok (if you don’t have a loud fan!) but occasionally got jittery. On Mac it looked terrible. We still have a way to go here. Apart from the graphics performance there’s still lots of room to optimize SVG animation itself too. For the editor running on the tablets, I have one patch awaiting review which I hope will make using SVG’s path APIs faster and speed up the drawing and erasing operations.

The result

The gallery of animations:

http://parapara.mozlabs.jp/MozillaVision2012/

The editor:
http://parapara.mozlabs.jp/MozillaVision2012/editor/

And, of course, the code is waiting for your help at github!

Feedback

“That’s a web page?!?” I’m certain that most people who used the demo were oblivious to the fact they were using the Web and that’s probably the greatest success of this demo. Without exception, everyone who asked about the technology was surprised it was Web-based. Everyone assumed it was a native Android app or otherwise Flash.

“That’s SVG?!?” The web developers who came were also surprised at the use of SVG. Most had never really thought of making use of it. They assumed we were using canvas.

“I want to cry, this is the first time I’ve seen Fennec used for something other than reading the news”

Although a lot of the features we used are still in development it was very rewarding to see how much is already possible with Open Web technologies. We’ve had many requests to run this workshop elsewhere and, with your help, it will hopefully get better each time. Thanks very much to the Parapara Animation team and to everyone who contributed to Fennec, Gecko and the Web standards that this is built on.

* For anyone wondering what “parapara” means, it’s the sound of flipping paper and its use here comes from “parapara manga” which means “flipbook comic”. It’s also the name of a kind of hand dancing so we might have to reconsider the name so as not to disappoint the kids.

BlueGriffonW3C, Rutgers University

Two things:

  • the World Wide Web Consortium is considering "adoption" of BlueGriffon for internal use. But since the W3C uses HTTP PUT, WebDav and CVS to publish their documents, they needed an add-on to PUT their documents on w3.org. I wrote that add-on in a few hours and donated a perpetual site license for that add-on to all W3C staff. Let me know if you're interested. The add-on allows to PUT a document and all local linked resources (stylesheets, replaced elements; will deal with imported stylesheets and webfonts in a next version); it rewrites the URIs for these resources as needed to make sure the published version renders ok.
  • BlueGriffon is now taught at Rutgers University !!! Woooohooo !

Nicholas NethercoteFast Reviews are Great

Justin took exactly 48 hours and 20 minutes to review my patch in bug 719335.  That’s pretty fast.  Nonetheless, he started the review by saying:

Sorry for sitting on this for so long, Nick.

Taras would be proud!  And I got to land my cool patch without much waiting.  Fast reviews are great.

Dietrich AyalaUnbookmarking the Future of Browsing

I am needy:

  • I want to remember URLs. Bookmarking is too manual and akin to throwing URLs in the sarlacc pit. The user-interface pieces around bookmarking have not changed in a decade. No, the awesomebar is not a good tool for this. I don’t even come close to being able to recall what I want the awesomebar to recall. I need to be ambiently prompted in a way that is visual and has context.
  • I need to be able to focus on a given task, project or idea. A single sea of tabs doesn’t help at all. I want blinders. I want an environment. Task immersion.
  • I need to be able to categorize URLs into groups, such that the whole group is easily accessible. Trees and menus can go to hell, along with the RSI, eye-strain and visual boredom they provide.
  • I need to be able to switch contexts quickly and easily. Eg: From bug triage to perf to dashboards to music, etc.
  • I don’t want to leave the browser. Windows are super heavyweight feeling and come along with all kinds of operating system baggage: visual, interaction, performance, etc.

I realized recently that a pattern had emerged in my browser usage that meets a bunch of these needs:

  • I use Firefox’s Panorama feature to manage groups of tabs. I have groups for a bunch of work areas, and for Food, Music, Design, JavaScript, Health, and many more. This provides task-specific browser contexts, as well as keyboard shortcuts for switching contexts with ease.
  • I set up Firefox to restore my session every time it starts. This way my groups persist, and all the URLs in each group are loaded with their cookies and other session data ready to go when I need them.
  • I have “Don’t load tabs until selected” checked, so that Firefox does all this with as little memory as possible – the web pages in all the tabs in all the groups aren’t loaded until I actually use them.
  • I restart the browser a couple of times per day to keep memory use slim, which in turn keeps the browser responsive. Restarting is super fast and responsive because I have “Don’t load tabs until selected” (see previous point).

This is the happiest I’ve been with any browser in years. However, there are still a bunch of pain points. I want SO much more.

  • I want to tag URLs without bookmarking them. The bookmark concept just gets in the way. It’s an unnecessary unit of psychological weight. It’s a vestigial metaphor of days gone by.
  • I want to open a tab group by typing the name of the group in the URL bar.
  • I want to add URLs to multiple groups easily, similar to tagging. I’d like to do it via the keyboard.
  • I want to send the current tab to a different group (or groups) using only the keyboard.
  • I want app tabs that are specific to a given group, and some that are global.
  • I want to switch quickly from an app tab back to the last non-app tab I was at. Or be able to peek quickly at an app tab without losing my context in the current set of tabs.
  • I want to switch quickly back to the last tab I was at. (Eg: When I open a new tab, and get sent to the end of the current set of tabs). OR be able to have new tabs open immediately to the right of the current tab, with linked parentage.
  • I’m tired of sites being browsers inside a browser. And I don’t want “site-specific” browsers – I want a “me-specific” browser, for local or dynamic content.
  • Firefox creates the <tab> elements for hidden tabs when restoring the session. It would re/start even faster and use even less memory if the XUL elements for hidden tabs were not created until the group itself was opened.
  • As I work, memory use increases and responsiveness decreases, since I keep visiting more and more tabs. If I haven’t visited a tab in a while, Firefox should unload it. If I haven’t visited a group in a while, Firefox should completely unload the whole group, session content *and* XUL elements.
  • A downside of the “Don’t load tabs until selected” option is that tab content is not ready and waiting when you select the tab. The web content has to load and the session data for the tab must be restored. Firefox should pre-load tabs that are adjacent to the active tab. This feature, combined with the dormant-izing of tabs described above would result in a decent balance of instant-gratification availability and responsiveness and resource frugality.

One idea I had was a merging of tagging and groups: The groups in Panorama would be comprised of the set of tags that exist. This would result in nice integration bits like search-by-tag in the awesomebar being equivalent to search-in-group. It also might mean that we’ll need to make Panorama “bigger” – maybe allow it to be zoomed, or make it an infinite canvas.

An idea for navigating dynamic content is to merge feeds and groups. Imagine you have a BBC group, which has the BBC feed as it’s source. The set of “tabs” in that group are the items in the feed. If you open the group, all the URLs in the feed are loaded into tabs (but not *really* loaded if you restore-on-demand).

Anyways, it’s interesting to think about how to prototype some of these ideas in an add-on or a collection of them. I’m sure some of the items above already exist as add-ons.

I realize that I’m not a “typical user”. However, after almost 6 years of browser-making, I’m pretty damn sure that there is no such person. I do not believe that the one-size-fits-all browser is the future. When adding a feature or fixing a bug, we shouldn’t have to choose between grandma and the geeks. In order to stay relevant in a highly-personalized future, we should strive to ensure that Firefox is pliable enough that we who make it are not restricted by it, and more importantly we must ensure that add-on developers are free to mash-up and remix and experiment the f*ck out of it.


Hal WineThe Ideal DVCS Goal

[Refer to the main page for additional context.]

Based on discussions to date, everyone seems to have similar ideas about what "supporting git for releng" means. Later posts will highlight the work needed to ensure the ideal can be achieved, and how to arrive there.

For this post, I intend to limit the viewpoint and scope to that of the developer impact. Release notions (such as "system of record") and scaling issues won’t be mentioned here. (N.B. Those concerns will be a key part of the path to verifying feasibility, but do not change the goal.)

As a reminder, I’m just talking about repositories that are used to produce products. [1]

The Ideal Future

The Ideal: In the future, each contributor will be as free to choose their DVCS of choice as they currently are to choose a text editor.

Since that’s a pretty general statement, let me limit it a bit with some caveats that I expect will apply.

  • This may only be true at a technical level, as various teams might have social conventions or alternate tooling that will limit DVCS choices.
  • Initial planning will be for products [1] that are released via the Release Engineering team. [2]
  • The current set of supported DVCS would be hg and git. By supported, I think folks roughly mean:
    • an officially supported way get the latest revision of any official branch/repository, without any extra work on the part of the developer.
    • an officially supported way to interact with existing Mozilla hosted tools, such as the try server, tbpl, etc.
    • an officially supported way to commit from the DVCS, that supports the current commit workflow (and policy).
  • There will be support of social coding sites. I think support means providing an officially supported mechanism to keep "current" instances of each official branch in the social coding sites. The goal would be to allow developers to utilize the enhanced services offered by those sites to view, clone, and share work prior to doing an official commit.

Next Steps

  1. This post will help validate that the above vision has a wider consensus. Please pass this link along and add your comments below.
  2. Keep an eye on the main page for more material.

[1] (1, 2) I’m using "products" to distinquish binaries Mozilla provides to the end users to install on their computers from "services" Mozilla hosts. Product examples include Firefox and Thunderbird. Service examples include Sync and BrowserID.
[2] The rationale for starting with existing products is that is where the majority of our developers work. Additionally, the existing continuous build & test infrastructure will place some constraints on DVCS workflows. Once those constraints are documented, other projects can make informed decisions on their usage.

Lukas BlakkGrowing the company, structuring volunteerism: My response to David Eave's community lifecyle audit

Last Wednesday David Eaves presented the results of the multi-tiered contributor lifecycle audit (watch the video).  A few points really grabbed my attention and as someone with a background in arts & education non-profits I feel the need to share my experiences alongside my reactions to this talk.

David pointed out that as we are growing, we can hire people to solve problems, so what exactly do we need volunteers for? Survey results showed that contributors often don't feel their contributions had much impact on the project and that as our paid staff pool grows in size, there is less clarity about what exactly a volunteer's importance is to the critical path of Mozilla's mission.  I wish we had this data prior to the 1+ year push to releasing Firefox 4.  My hand-waving hypothesis would be that as we were cramming to get a product out the door we forgot to be leaders of volunteers and instead unconsciously pushed them aside so that things could get done on a schedule.  It was a stressful time, but now that we've moved on to regular, rapid releases perhaps we paid staff can all take a step back and really assess how we incorporate the work of volunteers into our individual areas.

For many Augusts I have worked at a women's music festival in the woods of Michigan and at that festival there is a kitchen that has pumped out 3 vegetarian meals a day for 5 days to 4000-8000 attendees depending on the year.  This festival relies on a core group of 'workers' who are in fact volunteers but let's pretend that group of 500-600 people is like the paid staff of Mozilla.  The main kitchen work crew gets about 30 workers to run the kitchen.  You might think to yourself "but 30 people cannot produce enough food for 4000-8000 women" and you'd be very right.  The way it works is that all attendees of the festival are asked to do two 4 hour workshifts during the week they attend the festival.  The majority of workshifts center around the main kitchen and creating the meals which range from burrito night to pasta putanesca to nutloaf (a vegetarian version of meatloaf). All these meals involve preparation of pounds upon pounds of vegetables as well as cooking of pasta, beans, sauce.  Did I mention this was all in the woods, over a massive firepit?  Yup, so 30 women are in charge of making that entire process work and they do so by wrangling hundreds of volunteers per day into shifts around each meal and constantly leading and dividing up the work so it can be done by many hands yet results in one huge meal - 3 times a day!

So let's go back to people who are volunteering not feeling clear about how Mozilla works and whether their time and effort has impact.  How can we make sure that the smallest task makes that person feel like they've contributed?  Some areas of Mozilla do this very well to name a few; AMO, SUMO, QA, and Personas. These teams manage tons of volunteers and have tasks with measurable outcomes (tests run, filing bugs, approving an add-on, answering a question in the knowledge base, shrinking the queue of pending Persona submissions) and sometimes they can use scoreboards or themed days to get volunteers mildly competitive for the respect of their peers and accomplish larger goals in a short burst. I'd encourage people interested in having volunteers participate in their team's work think about how to make sure their volunteers have tools to measure their impact from the get-go.  In Release Engineering I would measure the number of bugs that we have yet to fix, many of them labelled "simple" or "old".  If I had volunteers doing RelEng work I could keep track of their progress and post reports (as blog posts) of who fixed what when and how as the number of bugs shrank.

Another interesting result from the survey: older folks (34-55!) aren't on-ramping as much as younger ones. At first I wondered how much of this was about access to the muscle memory of being a student.  I think it's fair to assume that many students/youth can have a lot more time to contribute to projects like Mozilla as certain adult responsibilities may not be required of them yet. Over the past week though, I have started to visualize another take on this. In the arts & social justice organizations I have been involved with there have been plenty of adult volunteers but those organizations have a different need for volunteers. The music festival I mentioned would not happen if it wasn't for volunteers.  The fact that the volunteers want the community of the festival to exist for them every year becomes the carrot drawing women of all ages to come to the woods of Michigan and build a music festival every year.  People quit jobs, take unpaid leave, and make plenty of other sacrifices of their time to participate in creating this community. The thanks for this 2-4 weeks of donated work is an amazing live/work experience camping with 5000 women on private land, having workshops, parties, and dances all in a very natural, safe, and ad-free environment and watching incredible performances all day and night for 5 days. 

In a different example, let's look at a the Toronto International Film Festival.  Volunteers have to make it through the rigorous screening and application process in order to 'get' to volunteer for the festival. They are rewarded with behind-the-scenes access to the festival, sometimes a quick run in with a movie star, and free tickets to festival screenings.  The festival shows entirely world-premiere films so this is a huge deal for a volunteer.  Several films will see theatrical releases after the festival but seeing the premiere, often with the star in attendance and with a director Q&A post-screening really sweetens the experience. The volunteers also get thanked before every screening with a cute trailer from the sponsor for the volunteer program and there's always a fantastic party post-festival as the final thank you. 

At Mozilla we do thank our volunteers with tshirts and sometimes bringing them to summits, MozCamps, or other parties. For older volunteers though, I wonder if that's enough.  What does it take to get someone in the 34-55 range to donate their time?  I'm really interested in this one since I fall in that demographic as well.  For me, I need the time donated to do at least one of the following things:
  • be social, meeting new people in the community I chose to volunteer in is a big part of why I'd do it in the first place
  • provide a networking opportunity (similar to above, but might apply to folks on the job market a bit more accurately)
  • get me free access to an event I wouldn't attend if it wasn't
  • be something my friends are also doing so we are visiting with each other while doing something interesting
  • be for a very good cause so I feel good just helping that cause regardless of the tasks I perform
Let's look at that last one.  The good cause is certainly in the eye of the beholder but I can honestly say that sometimes I have no idea why I would want to encourage a friend who volunteers for hospice care, homeless shelters, AIDS awareness, or other non-profits where the staff is small and the operating budget miniscule to come and contribute to Mozilla.  In the circles I travel in outside of my job Mozilla seems right up there with Google, Apple, and of course Microsoft.  Sure, a lot of people don't know we're a non-profit. I tell people that all the time and while it's of interest to them, it doesn't generate an "Oh! Can I volunteer there then?" kind of response.  We compare ourselves sometimes to the Red Cross or Boy Scouts - large organizations with volunteer bases - but I think we should start to re-think ourselves more like the film festival or the music festival.  We pay competitive salaries to our employees, we throw amazing events, and we don't have to write grant applications every year to the government (like in Canada) or to private funds (like in the US) to ensure we can keep operating on a shoestring budget.  So even though Mozilla is a GREAT cause, I don't think that's the bait for the on-ramping of volunteers - especially non-students and people in the 34-55 age range.


What's going to encourage 34-55 year olds to engage with Mozilla?  In my opinion it's going to happen with targeted events where they can do something in a few hours that leaves them feeling connected and fulfilled and even better if it makes something in their life easier.  A while back, in Toronto, we did a day of service and set up an info table at the local library so people could come and ask anything about Firefox and even though by some ironic twist the library's internet died we still had an amazing day just conversing with people and answering questions about Firefox, the web, security, and even general computing questions.  According to David "having good experiences in the project helps one to want to find others and pull them in" and "age and gender have no impact on the willingness to on-ramp, but the longer you volunteer with Mozilla, the less you on-ramp".  My approach with trying to on-ramp then, in light of this, would be to look at getting a lot out of that short interaction. Help someone help themselves on their computer. Teach them a few keyboard shortcuts or how to install an add-on that helps them do what they already do faster and with more confidence.  Then encourage them to come back and teach someone else what they learned.  This can spread like a pyramid scheme and it's no longer about getting a single volunteer to stick around for a long time, it's just about having a good experience and carrying that forward. Potential volunteers can be motivated by the mission and/or by practical considerations it's important to remember both have tremendous value to the Mozilla project.  I think it's important to encourage 34-55 year olds by believing it's OK for a contributor to do a one-off in a few hours as long as they walk away happy.

In conclusion of this very long post, I want to circle back to measuring. If we are going to make community a core part of what we do then we need to measure it we currently do not have an institution-wide measurement of contributions, volunteer performance cannot be evaluated, there is no structure for including volunteer engagement during strategic or operational planning.  Until we require Directors to create annual and quarterly goals that include measurable goals around volunteer growth, retention, participation, and effectiveness we will only see people (like myself) trying to do this "off the corner of their desks" which means it's not a part of your paid work and thus less likely to be sustainable and effective. The Toronto International Film Festival is a great example of what we could do here.  They have paid staff who organize the volunteers each year. They have a clear path for volunteers to follow to be accepted - training sessions are mandatory.  Each year returning volunteers are given roles depending on performance from previous years.  The record kept of each volunteer's performance allows paid staff to request certain volunteers for specific tasks based on that information and a volunteer's history with the organization.  Teams of volunteers will sometimes have "Captains" who are also volunteers but with more experience and they are thus given more responsibility.  Each area of Mozilla that can accommodate volunteers should keep an eye out for their current or potential "Captains". David also suggested that, while we avoid it, we should really look head on at guidelines for when to rely on volunteers and when to not - this seems to fly in the face of open source "free for all" mentality but if we compare ourselves to other non-profits like TIFF there is proof that having some structure for volunteers allows staff and teams to develop stronger relationships and the work gets done smoothly, which was really the point all along.

Don't forget to throw them fabulous parties, share with the world the importance and impact of their contributions, and remember you can never thank a volunteer too much.




Hal WineReleng & Git Project Overview

This is the first in a series of posts about the "support git in releng" project. The goal of this project, as stated in bug 713782, is:

… The idea here is to see if we can support git in Mozilla’s RelEng infrastructure, to at least the same standard (or better) as we already currently support hg.

My hope is that blog posts will be a better forum for discussion than the tracking bug 713782, or a wiki page, at this stage.

These posts will highlight the various issues, so that the vague definitions above become clear, as do the intermediate steps needed to achieve completion.

Posts in the Series

Overview & context:

Glossary

The project goal (above) has a few terms that need defining, so they mean the same thing to all of us. And the discussion will introduce some terms as well. As these come up, they will be added here.

Mozilla Products
Software delivered to the end user for installation directly on their computer.
Releng Infrastructure
The processes & machines that are used to produce Mozilla Products, from the source code repository through continuous integration and testing to the product binaries ready for the end user.

SeaMonkey Trunk TrackerAdd-ons Sync Prefs: A Restartless Add-on for SeaMonkey 2.8

Ever since I ported Sync to SeaMonkey (2.1), the list of supported engines had been fixed: Bookmarks, History, Passwords, Preferences, and Tabs. With Firefox 11, the Sync developers added a new engine capable of syncing add-ons (or more precisely, which add-ons are installed). Since the Sync back-end is shared code, SeaMonkey 2.8 will include it, too. But while Firefox 11 will include UI for activating the new Add-ons engine, SeaMonkey 2.8 will lack it. This is because the Firefox changes landed pretty close to the l10n freeze so we were not able to port them in time. SeaMonkey 2.9 will include the UI changes, but why wait so long?

On January 31st, SeaMonkey 2.7 will be released (well, that's the plan). A few days later, the first beta of SeaMonkey 2.8 will follow. People like me who are on the beta channel will upgrade directly from 2.7b5 (ETA today) to 2.8b1. This is when my main working environment will be ready for Add-ons Sync.

Now I was wondering what the SeaMonkey developers could do to allow users of SeaMonkey 2.8 (on aurora, beta or release) to enable/disable the Add-ons Sync engine through preferences UI. Well, the answer is simple: Provide an add-on that adds the corresponding option!

I decided early on to give it a try myself and create that add-on. I also felt that users were probably more likely to install such an add-on if it didn't interrupt their work flow (i.e. not require a restart of the application, which in the case of SeaMonkey is often used for both browsing and mail) and took care to not break anything if it was installed on an incompatible version of SeaMonkey (say, 2.7 or 2.9). The first requirement could be solved through writing a restartless add-on, the latter by adding explicit checks to the code.

I quickly found some documentation for restartless add-ons on MDN (though they are called "bootstrapped" there). Unlike classic add-ons (which rely on XUL overlays and usually consist of many files and levels), a restartless add-on can be as simple as two files: The install manifest (install.rdf) and the code, written in JavaScript (bootstrap.js).

I guess for someone new to Mozilla-specific code, starting from scratch like this could be hard. During the development I faced several issues that you would probably not have seen with a classic XUL overlay approach. The Add-ons SDK might have been a better alternative if I had intended to write an add-on for Firefox, but since this one is SeaMonkey-only and given the requirements, there was not much of a choice.

The main issue I faced was actually in shared XBL code (preferences.xml): The constructor and destructor of preference elements throw if the element in question is not inside a preferences element. What is probably always the case with XUL (including overlays) is not true for elements dynamically added or removed through JavaScript (cloneNode/removeChild). In the end I had to replace cloneNode by createElement and stop using removeChild (i.e. the preference element is left in the preferences window until it is closed; if the add-on is disabled while the window is still open, the preference element just gets disabled).

Another surprise was that JavaScript errors inside bootstrap.js are reported as warnings in the Error Console. So if you enable the Errors filter, you won't see these warnings and assume everything is alright, while in fact the add-on does not work at all! Brilliant. :-(

Anyway, I was finally able to finish the add-on (with friendly help from Neil Rashbrook), upload it to AMO, and get it fully reviewed. :-) Here it is.

Now of course none of this would have been possible without…

Note: If you look at the source code you might see that the prefs handling (user vs. default prefs) is not perfect yet. This is something that both Neil and Kris Maglione (AMO reviewer) pointed out, but which I deliberately disregarded for the first version of the add-on.

Taras GlekSnappy, January 26

Slow Sessions – Tabs-on-Demand

Armed to the teeth with about:jank, I was testing session restore scenarios that people reported. While at it I came up with a testcase for bug 711193. At first we were going to use telemetry to debate the merits of tabs on demand by default, but I feel my example illustrates responsiveness problems with session-restore well enough. Gavin is looking into this so we can make a decision this week.

Laggy Sessions

On my machine about:jank indicated that most lag was caused by our direct2d accelerated drawing code, bug 721273. Turning off graphics acceleration made things a lot less slow (Options/Advanced/use hardware acceleration) . It would be nice if people experiencing lots of lag in their sessions (on youtube, blogs with high quality backgrounds, etc) could try about:jank. This requires running a very recent nightly.

Install the extension, go to about:jank, browse around, then refresh about:jank. In the case of gfx lag, DrawThebesLayers shows up on top.

Imminent Cycle Collector + GC Improvements

Olli is landing huge cycle collector improvements (half of the patches landed so far), bug 705582, bug 717500. If that doesn’t solve all CC problems by Tuesday, Andrew is standing by with bug 710496 to limit how often CC can run. If we are lucky, incremental JS GC will land before Tuesday too (bug 641025). Landing by Tuesday means that these improvements have a good chance of showing up in Firefox 12. CC + GC are the most well-known causes of pauses in Firefox, so this is very exciting.

Other stuff

Profiling tools are moving along at a good clip. Benoit’s profiler works well on Mac now, hopefully Windows support will happen next week. Non-destructive chromehang is almost landed.

Telemetry histograms should now survive restarts (so we can do shutdown telemetry, etc), bug 707320.

Peptest didn’t manage to survive deployment on try due to bug 719618, 719511.

We are now transitioning from identifying issues to fixing identified issues. It’s exciting to move from speculation as to what sucks to actual results. For more details see meeting notes.

Nathan Froydcompressing strings in JS

As we kept increasing the amount of information we send in via Telemetry, we need to start thinking about how to keep the size of the ping packets containing that information as small as possible. The packets are just JSON, so the first thing to try is to compress the data with gzip prior to sending it.

This is how you compress a string in a language like Python:

compressed = zlib.compress(str)

(Yes, yes, this is not gzip compression.  Close enough for pedagogical purposes.)

Short and simple. Boy, I hope it’s that easy in JS. Hm, let’s see, there’s this nsIStreamConverter interface, that looks promising:

let converter = Cc["@mozilla.org/streamconv;1?from=uncompressed&to=gzip"].createInstance(Ci.nsIStreamConverter);
let stream = Cc["@mozilla.org/stringinputstream;1"].createInstance(Ci.nsIStringInputStream);
stream.data = string;
// Hm, having to respecify input/output types is a bit weird.
let gzipStream = converter.convert(stream, "uncompressed", "gzip", null);

OK, we wound up with a stream, rather than a string, but that’s OK, because nsIXMLHttpRequest.send will happily accept a stream. So, nothing to worry about. (This is a little white lie; please hold your comments until the end.)

Hm, that doesn’t seem to work. I get NS_ERROR_NOT_IMPLEMENTED. Oh, look, nsDeflateConverter doesn’t implement nsIStreamConverter.convert. In fact, none of the stream converters in the tree seem to implement convert. What a bummer.

Hey, here’s nsIStreamConverterService! Maybe he can help. His convert method just punts to nsIStreamConverter.convert, so that won’t work, though. Ah, nsIStreamConverter has an asyncConvertData method, let’s try that:

function Accumulator() {
  this.buffer = "";
}
Accumulator.prototype = {
  buffer: null,
  onRequestStart(request, context) {},
  onRequestStop(request, context, statusCode) {},
  onDataAvailable(request, context, inputStream, offset, count) {
    let stream = Cc["@mozilla.org/binaryinputstream;1"].createInstance(Ci.nsIBinaryInputStream);
    stream.setInputStream(inputStream);
    let input = stream.readByteArray(count);
    this.buffer += String.fromCharCode.apply(input);
  }
};

let accumulator = new Accumulator();
let converter = Cc["@mozilla.org/streamconv;1?from=uncompressed&to=gzip"].createInstance(Ci.nsIStreamConverter);
// More respecifying input/output types.
converter.asyncConvertData("uncompressed", "gzip", accumulator, null);
// Oh, that method doesn't actually convert anything, it just prepares
// the instance for doing conversion.
let stream = Cc["@mozilla.org/stringinputstream;1"].createInstance(Ci.nsIStringInputStream);
stream.data = string;
converter.onRequestStart(null, null);
converter.onDataAvailable(null, null, stream, 0, string.length);
converter.onRequestStop(null, null, 201 /* 417 */);
compressed = accumulator.buffer;

Well, it’s not as simple as I hoped for, but I guess it works.

FWIW, I do understand why the input/output types have to be respecified.  But I think this is about the best way to do things currently; that’s kind of frightening. The above is one of those instances where you start to understand why people complain about things being so crufty.

Christian HeilmannOne reason why HTML5 gaming is limping along

TD;TR: Converting games to HTML5 is hurting the cause. We need more games written in web technologies.

OK, I might be a bit late to the party but the latest “web version” of Angry Birds, “subtly” advertising this time not itself but Wonderful Pistachios was the talk of the day on some of my mailing lists.

The main thing was that it requires Chrome to run. This is nothing new, but I really enjoyed the ingenious way of testing for Chrome in the first place:

if (Modernizr.testProp('-webkit-box-shadow')) {

So the CSS box shadow (which will soon be deprecated with the vendor prefix in Chrome) is the main identifier. Not bad. So let’s hack around the detection with:

var l = document.createElement('link');l.rel = 'stylesheet';
l.href = 'http://wac.5DC0.edgecastcdn.net/805DC0/site/static/css/style.css';
document.getElementsByTagName('head')[0].appendChild(l);
GetCrackin.init();

Which leads us to a JSP file that detects on the server side and writes out a lot of inline webkit only code OK, never mind.

I am less annoyed that this is Chrome only. It was never claimed that this game runs everywhere (other than the Angry Birds released on Google IO). I am more annoyed about the bad performance the game has in Chrome and Safari on this Macbook Air. And I know the reason for this: conversion instead of dedicated development.

A look back in time – games on Commodore 64

As I have mentioned before, I used to work on some games on Commodore 64. In its heyday there was no way to have a game without writing it by hand – in assembly language and knowing what all the chips do. Perusing the memory map and the ROM allocations was part of the game of writing one.

When computers got more ubiquitous and better in terms of sound and graphics a lot of companies started building games on the other machines first – Amiga mostly. And to make extra money and sell even more copies, they also made C64 versions as conversions afterwards. These were most of the time shoddy at best and weren’t tested much. The C64 was the machine that is not where the money was made – the new hardware was the one to support.

The thing that got lost – and later on even more so – was the tinkering with the hardware and finding tricks to work around limitations. Out of the box the C64 had 8 sprites and a resolution of 160×200 pixels in 16 colours or 320×200 in 2 colours per 8×8 pixels. Using interrupts (executing code whilst the screen was painted by the TV or monitor) people came up with multiplexers that allowed for hundreds of sprites. With overlaying techniques we produced 256 colors at a interlaced 640 pixel resolution and so on.

A few of those tricks made it into the conversion tools from the “higher” computers to C64 code, but most were deemed too costly and time consuming and didn’t make sense to do any longer.

HTML5 gaming without the web stack?

This is happening now with “HTML5” games, too. Angry Birds is done with Google Web Toolkit, converted from Java I presume. It is made to work quickly and not show off what a web game can do, but instead how easy it can be to convert a game from Java to the “web”. And when that fails to bring the results it should, then we limit the web to one browser. And even fail at that as Angry Birds – in this case created to promote Chrome as a HTML5/games platform – doesn’t work on my Chrome book – the hardware dedicated to the browser.

Seeing this makes me frustrated, and it causes a lot of sniggering up to outright laughter from the Flash community. And they have all the right to. Flash games perform well, and showed that they can be easily changed and rebranded and extended when you build them the right way.

The HTML5 game engine vanishing act

Of course there are great minds on the case already and a lot of people build great demos and JavaScript frameworks to build HTML5 games in the technology rather than converting to it. The interesting thing about that is that every games engine released open source very quickly gets bought and un-opensourced and then vanishes from sight. The optimist in me thinks that this means there is great stuff afoot. The cynic in me sees the talent behind and the engines rotting away in a corporate environment as they were seen as a threat instead of an opportunity.

What HTML5 gaming needs to impress

I would love to see more real web games. Built in open technologies, with source available (or not, this is a nice to have) and really using the web. A web version of Angry Birds to me wouldn’t have a very long loader and ask me to sign in to Google to use it. It would be snappy and load the levels on demand, storing the ones I played and the next one locally in my browser while I am playing the current one. It would also allow me to build my own levels and share them on Twitter to see if I can build awesome stuff in the game that other people enjoy. All of this would be a total pain to make work on a mobile and a 3G connection, but is very much fine in a browser on a laptop with a good connection.

In other words, HTML5 games should be fit for the environment and use it to its strengths.

What about WebGL?

WebGL is an awesome opportunity for game developers to get into web gaming without needing to learn a new skillset. It is pretty obvious that an openGL developer could take it up much easier than a web developer would. Right now, WebGL is great for demos, but we have the issue of hardware access. If the biggest sound of the game is the fan of your processor and video card then this diminishes the experience. I for one never started gaming on PC as every new game coming out told me I need to buy new hardware in order to play it. This is not what I could afford. And this is not what we should force onto people on the web. A web app saying I need a certain browser or that my video card is not good enough to use it is not much better than the old “best viewed in IE4 with 800×600 pixels”.

We should think less World Of Warcraft and more Doodle Jump when it comes to HTML5 gaming.

Maybe I am a dreamer, and this is so not how the games market works. That is fine, though. A new market could emerge that takes the best of offline gaming and online experiences. But, we need to make that happen.


Mozilla Add-ons BlogAdd-on SDK Version 1.4.1 Released

In the 1.4 release we tweaked the manner in which the SDK determines its own version (it now uses git-describe when possible). Yesterday, we discovered that this new versioning process conflicted with the way the Add-on Builder deploys the SDK in their application.

Today we released the hotfix version 1.4.1 to address this issue so that the Add-on Builder can push a 1.4 version of the SDK to users. The patch included in the 1.4.1 release gets the version number, if absent from git, from the name of the parent directory.

If you were already using 1.4 in your own environment, you will not need this new version, nor would you see any differences if you decided to upgrade to it. This fix is strictly to help the Builder team launch 1.4 to their users.

If you have any questions or issues with this hotfix release, please ask in any of the following areas:

post to our discussion group
chat with us on irc.mozilla.org #jetpack
report a bug
check out the source and contribute bug fixes, enhancements, or documentation

For more information on the Jetpack Project check out our wiki

Mozilla ITMozilla Scheduled Maintenance, Subversion (svn.mozilla.org) will be unavailable 01/28/2012 8pm-2am PST (0400 GMT)

We will have a scheduled maintenance window on Saturday, January 28th at 8pm-2am PST (0400 GMT). The following work will take place:

  • Migrate from San Jose to Phoenix
  • Implement fault tolerant infrastructure

During the maintenance period subversion will be unavailable for both reading and writing. Because we’re
switching to a newer version of subversion (and changing the data store to fsfs) the data migration will require a time consuming svnadmin dump / svnadmin load. We anticipate this step alone will take about 4 hours.

 

Time: January 28th 8pm-2am PST
Scheduled downtime: 6 hours
Estimated actual downtime: 4.5 hours
Impact: All subversion related services will be unavailable including viewvc

Siddharth AgarwalImportant upcoming change: starting Gecko 12, pre-Windows 7 SDKs will no longer be supported

tl;dr: if you're on an outdated Windows build configuration, upgrade.

I just checked in a patch to mozilla-inbound to drop support for SDKs prior to the Windows 7 SDK. Depending on when you last updated your build configuration, your Mozilla build might break.

Everything's documented on the Windows SDK versions page on MDN; here's a quick summary of what you need to do:
  • If you're on Windows 2000: Upgrade to Windows XP, Vista or 7.
  • If you're on Windows XP SP1 or below: Update to the newest service pack.
  • If you have an older SDK (Vista or 2003): Install the Windows 7 SDK instead. You can either download it separately or use Visual C++ 10 Pro, which comes with it.
  • If you use Visual C++ 8 (2005) Express or Visual C++ 7.1 (VS2003): Upgrade to Visual C++ 10 (2010; recommended; pro or express) or Visual C++ 9 with Service Pack 1 (2008; pro or express).

Marco ZeheWould you like to show us what assistive technology you use Firefox with?

For a while now, Firefox has had the ability to collect anonymous usage data. Internally, we call this telemetry.

Recently, we also started to incorporate statistics about the way the accessibility features of Firefox are being used.

Our newest addition to this feature is the collection of data about which screen reader is being used with Firefox on Windows. For Linux, there is only one screen reader that’s widely used really, so we primarily concentrated on Windows, since there are a variety of screen readers and screen magnifiers out there that Firefox is being used with.

So, to get a better idea about what our user base is using Firefox with, we’d like to call out for assistance in gathering this data! Let me stress once more that this is purely voluntary, but that this will help us improve our over-all support even more focused once we know better what assistive technologies are the most used. Moreover, this is anonymous data, so there is no way we can link a particular screen reader to a particular user. Which assistive technology you use is and stays your private matter. You’ll only be contributing to an over-all picture of usage statistics.

So how do you turn this on? In Firefox:

  1. go to Tools/Options.
  2. With the arrow keys, navigate to the list item called “Advanced”.
  3. Tab once to set focus to the tab page selection.
  4. Select the “General” tab using the left and right arrow keys.
  5. Tab through the dialog until you reach a check box called “Send performance data”. Note, instead, you can also press Shift+Tab a couple of times to get there faster, since this is the very last checkbox before the “OK” button.
  6. Press Space to check it if it is unchecked.
  7. Tab once to get to the “OK” button and press Space to close the dialog and save your changes.

Firefox will now send anonymous usage data to us and inform us about any relevant performance like memory usage, screen reader in use (if any), or whether accessibility is instanciated at all.

Note that part of this feature is currently only in the Nightly development builds of Firefox. If you use a regular release like Firefox 9.0.1, this checkbox will not have any effect for screen reader usage data yet. But for other data such as the memory consumption, you can still enable it. Once you get upgraded to Firefox 12 in 3-4 months, you’ll start sending us data about your screen reader usage automatically.

If you’re on the Aurora channel, you’ll get this feature with the next big uplift that will happen early February.

To all who enable this feature, thank you! Your helping us improve Firefox even more is appreciated!

And to those of you who do not wish to send us your anonymous information, that’s perfectly fine, too! No grudges will be held against you. :-)

Web FWDIntroducing Rockstart: Accelerating Open Innovation in the Netherlands

From the start, WebFWD has been a global program. Not long after launch, we expanded to the UK, Greece and Finland. Then, a month later we added a team in Canada. The inflow of WebFWD applications reflects what we already know: the Mozilla brand resonates worldwide.

Today we’re thrilled to announce a partnership with Rockstart, an accelerator based in Amsterdam. Founded by entrepreneurs who are deeply involved in the Dutch startup scene, participants in Startup Weekend Amsterdam and Startup Weekend Eindhoven, the guys at Rockstart understand the power of building bridges across regions.

We’ve been impressed by their resourcefulness, tenacity and flexibility. Like us, they understand the power of connection and collaboration. We believe that by working together, we’ll discover great teams and identify some powerful opportunities. A tagline on their website reads, “From the basement to Woodstock…”

Expect some epic rock and roll!

All aboard!

Photo credit: All aboard! by Robert Gaal.

Sheeri CabralDo not attribute to malice....

Yesterday, during a session at a User Group Leader's conference, I suggested to the MySQL Community Team (Keith Larson and Dave Stokes) that it would be nice to see all the events that Oracle does that are MySQL-related, because everyone else is posting their MySQL events to Planet MySQL and Oracle was talking about events I had never heard of. I noted that http://events.oracle.com/search/search?group=Events&keyword=mysql has an RSS feed.

Well, Keith and Dave also thought that was a good idea, so they added the feed. Looks like Oracle's feed isn't so great, though, and they're working on the fix with the appropriate tech folks within Oracle.

I think it is ridiculous that some folks say things like "I hope planet mysql has not been hijacked!". Of course it has not -- this is a silly technical issue, which is pretty obvious once you think about it -- when the feed was added, it added the most recent posts. It looks like those posts might be in the future or something.

It's just a broken RSS feed, folks. Why is everyone so quick to try to accuse Oracle of bad stuff? They certainly have not been perfect, but they have done a lot of good, sprinkled in with some bad stuff here and there. Just take a deep breath, relax, and think about e-mailing the community team when that happens.

That's what I did.

Web Made MoviesBuffy slays Twilight: how to make pop-up video mayhem

Remember those awesome pop-up videos on VH1? Thanks to Mozilla Popcorn, the new HTML5 tool for supercharging web video, the pop-up format is about to get a whole new lease on life.

Exhibit A: this wicked “Buffy the Vampire Slayer vs. Edward from Twilight” remix, created by the mash-up maestro from Rebellious Pixels. Check it out here. Then get started making your own pop-up video here.

“Hacking pop culture”

First posted in its original form in 2009, the “Buffy vs. Edward” remix video has garnered over 4 million views, been subtitled into 30 languages, and received media attention from NPR radio to Vanity Fair (“Buffy Could Kick Edward Cullen’s Precious Sparkly Emo Ass“).

The new Mozilla Popcorn-powered “pop-up” version adds a new interactive layer over top, with added annotations, commentary, and tips on protecting yourself from real-life stalkers.

The video’s creator, “pop culture hacker” Jonathan McIntosh, says the remix is all about hacking gender roles and Hollywood cultural coding — a theme he’s explored in other projects like the hilarious “Gendered Advertising Remixer,” now also available in HTML5 format.

 

Create your own pop-up video with Mozilla Popcorn

Want to add annotations and pop-ups to your own videos? Popcorn Maker is designed to make the power of Mozilla Popcorn more accessible to non-developers and mere mortals. Popcorn Maker’s “pop-up video” template makes it (fairly) easy for you to add annotations and context to just about any video on the web.

The software is still in early alpha version, so there’s still lots of rough edges. But you can check it out and get started now. Just pick “Pop Video” from the “Choose a Template” menu. Or have a look at the Popcorn Maker user manual here.

Eric ShepherdA writer’s inspiration: Doug Fulton

As I came to the realization, which I mentioned in my previous post, that I was fed up with game development for a living, I had been playing with BeOS for a while, so I decided I’d like to work for Be. I went to their job listing page and looked through the list of openings. The only one that didn’t require a college degree (which I didn’t have) was one for a technical writer.

So I applied. A few weeks later, they let me know I didn’t get the job.

I got myself fired by the game company (due to my unwillingness to cooperate with a particularly bad business decision), and wound up at another one. About three weeks after starting that job, Be called back and asked me to come up for an interview. So I went up to the Bay Area and met with Doug Fulton and one or two other people up there (I don’t remember who all else, since there were several, and it’s been a long time). We chatted for a while, I felt I made a terrible impression, and I went home.

A few weeks after that, Be let me know that while they didn’t think I was qualified for the technical writer job, they’d bring me on as a junior writer if I was willing to do that. I jumped all over that, and my career as a technical writer began.

I started at Be in September of 1997, working out of the office in Menlo Park. I was the junior of three technical writers. One of them (whose name I agonizingly fail to remember) left not too long after I started, but Doug I remember. Doug had worked as a writer at NeXT, and would tell stories about how great his desk was being near the rear exit of the building so he could escape when Steve Jobs came in.

I had zero experience as a technical writer, so working with Doug, a long-time writer, was a great experience for me. He didn’t teach, per se, but offered a lot of guidance, and I watched how he did things closely as I got into the swing of things. If that experience hadn’t been such a good one, it’s entirely possible I might have fled technical writing back to programming, which probably would have been a mistake.

I’m a decent programmer — even a very good one, within certain bounds. But I like to think I’m a very good technical writer. Doug (and by extension, Be) gave me the opportunity to figure that out and spread my wings. By the end of my first year at Be, I was a senior technical writer and had had my pay bumped three times to match that title.

I’d found my calling at last. So thanks for the job, Doug.

Axel HechtWeb-based IDEs for Localization

There isn’t much news on the localization tool front that I started at MozCamp in Berlin, but I’ve got some more questions for the web tool guys among you. As any good project, a localization editor should stand on the shoulders of giants, so I’ve been looking at Orion, Cloud9/Ace, and etherpad-lite. All of them got parts right, and I try to gather some input what it’d take to bring home the rest. I’ve set up an etherpad each for you to type to,

A bit of context: Localization is editing code by people that don’t (necessarily) code. An editor needs to take an extra step to make breaking things hard, and editing the right pieces easy. There’s also a host of content assist available to suggest translations, spell checking, glossaries, etc. Which opens two paths: You offer forms, and your localizer will never learn what’s happening in real life, or you drive a code editor beyond what the programmer of that code editor ever needed herself. I would love to try the latter again, this time on the web.

So, if you have some experience with tweaking, wrestling, extending, stripping any of these, or with one I missed, I’d be thankful for your input.

Gen KanaiIndia community meetup at GNUnify ’12 in Pune

This is the formal announcement for a meetup of the Mozilla India community at GNUnify ’12 in Pune, the weekend of February 10-12. Mozilla will participate at GNUnify on Feb. 10 and 11, and the India community meetup will be held on Sunday, Feb. 12th.

  • Friday, February 10 – Mozilla participation at GNUnify ’12
  • Saturday, February 11 – Mozilla participation at GNUnify ’12
  • Sunday, February 12 – Mozilla India community meetup in Pune

The goal of this meetup on Feb. 12 is to gather the India community together for a number of objectives including:

  • establish the community structure
  • build road map for 2012
  • identify priorities for the community
  • bring together key localizers and other core and active contributors (including ReMo)
  • promote Mozilla in India

Arky and Axel from the l10n Drivers will be attending. I will be attending. We also hope to get a member from Developer Engagement to attend. More info to come when we have it.

Anyone who is active in the Mozilla India community is welcome to join this event. As Mozilla will not be providing any funding to attendees, we selected Pune as this location is home to the Red Hat team which has a number of key localization team leaders and members.

We will do our best to accommodate online participation via IRC but this will depend on local connectivity at the venue which is not yet determined. Information about the weekend will be posted here:

https://wiki.mozilla.org/Indiameetup2012

Vineel is helping to organize the weekend but we would love help from Mozilla community members in Pune for local support and knowledge. If you can help Vineel with planning, please contact him directly or post to the Community-India mailing list or Google Group interface.

The planning for the event will be discussed on the Community-India list (see above) so please join the list to participate.

See you in Pune!

Matt ThompsonBuffy slays Twilight: how to make pop-up video mayhem

Remember those awesome pop-up videos on VH1? Thanks to Mozilla Popcorn, the new HTML5 tool for supercharging web video, the pop-up format is about to get a whole new lease on life.

Exhibit A: this wicked “Buffy the Vampire Slayer vs. Edward from Twilight” remix, created by the mash-up maestro from Rebellious Pixels. Check it out here. Then get started making your own pop-up video here.

“Hacking pop culture”

First posted in its original form in 2009, the “Buffy vs. Edward” remix video has garnered over 4 million views, been subtitled into 30 languages, and received media attention from NPR radio to Vanity Fair (“Buffy Could Kick Edward Cullen’s Precious Sparkly Emo Ass“).

The new Mozilla Popcorn-powered “pop-up” version adds a new interactive layer over top, with added annotations, commentary, and tips on protecting yourself from real-life stalkers.

The video’s creator, “pop culture hacker” Jonathan McIntosh, says the remix is all about hacking gender roles and Hollywood cultural coding — a theme he’s explored in other projects like the hilarious “Gendered Advertising Remixer,” now also available in HTML5 format.

Create your own pop-up video with Mozilla Popcorn

Want to add annotations and pop-ups to your own videos? Popcorn Maker is designed to make the power of Mozilla Popcorn more accessible to non-developers and mere mortals. Popcorn Maker’s “pop-up video” template makes it (fairly) easy for you to add annotations and context to just about any video on the web.

The software is still in early alpha version, so there’s still lots of rough edges. But you can check it out and get started now. Just pick “Pop Video” from the “Choose a Template” menu.  Or have a look at the Popcorn Maker user manual here.


Kevin DangoorFirefox Developer Tools Input Summary Jan 26

Lots of Feedback

Firefox Aurora has a fairly small audience, but it represents a good time to start collecting feedback on new features. Firefox Beta has a much larger audience. Both Aurora and Beta have a handy “Feedback” button in the toolbar, and I thought that now was a good time to dive into that feedback since we’re reaching the end of the Firefox 10 beta cycle. Firefox 10 is a big deal, because it adds the Page Inspector and related tools for web developers.

In this post, I’m focused on the input that we’ve received from the Feedback button. We get input from many other sources as well:

  1. user studies
  2. blog comments
  3. Twitter/G+/Facebook (mostly Twitter)
  4. Google Alerts (blog postings, press articles)
  5. Bugzilla
  6. dev-apps-firefox
  7. irc.mozilla.org #devtools
  8. surveys
  9. and, of course, the Feedback button input from Aurora and Beta users

I’m probably forgetting some input channels.

Those of us working on Firefox developer tools have ideas of what we (as developers ourselves) would like to see in the tools. Hearing from other web developers goes a long way toward making sure that we’re doing the right things to make tools that work well for many people.

Keep the input coming!

Summary of Input

The entries from the Firefox Feedback button are collected and searchable at input.mozilla.com. I went through the input for a variety of searches going back to mid-December to get an idea of what the sentiment was like.

During that time, I counted 63 positive feedback entries for our new built-in tools and 22 negative entries. That’s 74% positive. Across Firefox as a whole, most people (between 55-65% over the past month) who hit the Feedback button did so because they found some aspect of Firefox they didn’t like. People are going out of their way to say that they like the new tools, and that’s fantastic.

Firebug has its own feedback channels (a mailing list, bug tracker, etc.), but we get some input about Firebug via the feedback button. I saw 36 positive and 22 negative entries, which is a 62% positive rate. Again, this rate is much better than the overall and the sentiment that I’ve seen toward Firebug in other channels has been super positive.

More interesting information comes up when you look at some of the specific feedback…

Recurring comments about Firebug

Of the 22 negative comments about Firebug, 10 were about Firebug crashing, or the browser crashing in conjunction with Firebug. People working on Firefox and Firebug take crashes seriously, so I hope that people file bug reports or ask for help for these kinds of problems. It turns out that there is a known crashing problem that is fixed in Firefox 10 (due on Tuesday). Let’s see how these numbers shift after 10 is released.

Five comments about Firebug reported a problem getting Firebug to run on the user’s version of Firefox. I find this a bit unexpected, because Firebug has broad compatibility these days. See the listing at the top of this blog post about Firebug 1.9. If I had to guess, I’d say that this problem is because some people did not get their copy of Firebug from addons.mozilla.org. Hopefully, the number of people getting Firebug elsewhere (getfirebug.com) has been dropping. Firefox Nightly users need to get Firebug from getfirebug.com, but those of us running Nightly generally know the risks we’re taking, right?

All of that said, the majority of comments about Firebug were along the lines of “I love Firefox because of Firebug”. Some of them were marked as praise with the simple comment “Firebug”.

Recurring comments about the Firefox Developer Tools

Three people stated that the tools should live in add-ons because the user is concerned about memory bloat and speed. On this point, it’s worth noting that every commit to the mozilla-central repository (from which Firefox is built) is checked for memory usage and speed. The tools we’re adding to Firefox do not negatively impact Firefox’s memory use and speed.

On the flip side, six people stated that they like having the tools built-in.

Three people said that they don’t think we should be duplicating Firebug. I’ve written about this already, so I wont rehash it here.

Four people want a “layout view” that shows margins, padding, etc. for an element. Those people are in luck! We’ve got a patch in progress.

Quotes like “THE NEW DEVELOPER ELEMENT INSPECTOR IS SO SLICK!!!” and “3d Web Developer Layering. (Ctrl + Shift + I) This is SO helpful!” reflect a lot of the sentiment in the positive feedback.

Thanks, and I’m looking forward to more!

The release of Firefox 10 and new notices for Aurora and Beta users will likely net us more feedback in the coming weeks. We’ll be listening!

I’ll close with this tweet from Brian Blakely:

“Perhaps the next-generation webdev IDE will be a browser. Somewhat related, FF’s dev tools are really coming along”

hacks.mozilla.orgUsing the Vibration API – Part of WebAPI

As part of Mozillas WebAPI effort, we have been working with bringing a Vibration API to all devices that support it.

The idea with the Vibration API is to be able to give the user a notification, in a game or other use case, by telling the device to vibrate. It accesses the native vibrator and tells it how long it should vibrate.

Examples

The way to do this is quite simple – in this example the parameter is how long it should vibrate, i.e. the number of milliseconds:

navigator.mozVibrate(1000);

Another way of controlling vibration is giving a vibration pattern, switching between vibrating and being still. The odd parameters in the list is vibration time, the even ones are pauses:

navigator.mozVibrate([200, 100, 200, 100]);

And if you want to stop the vibration, you can simply call the mozVibrate method with an argument of 0 or an empty pattern, like this:

navigator.mozVibrate(0);
navigator.mozVibrate([]);

Try it out!

If you want to try this out right now, you can do so in Firefox Aurora, which is planned to become Firefox 11. Currently, it naturally only works on devices that support vibration, which means Firefox on (most) Android phones.

Note: a possbile caveat could be if you have haptic feedback turned on on your Android device, which then might cancel out the vibration.

Demo

I put together a little demo where you can see the code needed and test it in place. Please play around with this and let us know what you think!

Edit: Our temporary implementation name was Vibrator API, but since it gave the wrong impression, we now call it Vibration API – which is also more in line with the W3C Vibration API draft.

Henrik SkupinMozmill 1.5.8 has been released

The final bits of Mozmill 1.5.8 are now available through Pypi. Install or upgrade Mozmill by running:
pip install --upgrade mozmill==1.5.8

We had to release this version to fix a recent regression which has been identified in Mozmill 1.5.7, and which caused a hard-stop when an user restart has been requested. The issue did only exist on OS X.

Beside this fix we now enabled the new boolean preference called ‘focusmanager.testmode’ by default. It will allow us to run multiple Mozmill tests concurrently on the same machine. Support for the focusmanager testing mode has already been made available on Nightly and Aurora builds. Also there is a good chance to get this patch landed in an upcoming Firefox 10.0.1 release. I will follow-up with another blog post with more details once the final landing has happened and we can actually make use of it across our supported branches.

David BurnsAutomating Web Performance data collection with BrowserMob Proxy and Selenium

Back in 2008, David Henderson and I wanted to try automate collecting client side performance data for the web application that we were working on at the time. We were getting a large number of complaints from users about load time and we need to try solve this. The way that we decided on doing this was to use Selenium, which was already running our tests, and hack the Selenium server to give us the information we needed. What we came up with was showcased at GTAC 2009. It was really good for the time and we were happy.

About a year later just as the new movement for HTTP Archive or HAR as its commonly known was taking off I found that Jan "Honza" Odvarko had created a Firebug add on to export the network tab to HAR. This, when used with Selenium, could mean that we could get the same data that the browser wanted with little to no effort. Run your tests as you were with the new WebDriver API and get it to programmatically install the necessary addons as well as set all the preferences needed. I wrote this for Python and for .NET. This works really well but now limits this type of data to only being collected within Firefox. Some modern web applications can send back totally different javascript and sprites dependant on which browser hits.

What if you could run your Selenium tests and collect the same info as the if you were using the Firebug Net tab but using any browser. Browsermob Proxy is a good way to collect this information and it has a programmatic interface that allows us to set it before our tests start. It can also return a HTTP Archive of the traffic that it is routing. I have released the Python Library for BrowserMob Proxy that can be injected into tests quite easily. I have put an example below.

from browsermobproxy import Server
server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy

from selenium import webdriver
profile  = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)

proxy.new_har("google")
driver.get("http://www.google.co.uk")
proxy.har # returns a HAR JSON blob

proxy.stop()
driver.quit()

If we now feed the data from proxy.har into HAR Viewer we can get a nice waterfall of the traffic as below! Jari Bakken has a useful commandline version called Har.

waterfall from HAR of this site

I recently showed this off at London Web Performance. Unfortunately it wasn't recorded but you can view the slides here

Pedro AlvesCCC release - 12.01.25

New CCC release 12.01.25 (standalone version, soon to be included in the next stable CDF release) and already available if you're using ctools installer with -b dev



Changelog:

  • Implemented Redmine Feature #107 - Control number of labels on the linear Axis for categorical charts (show "MinorTicks" option, including 2nd axis) 
  •  Implemented Redmine Feature #108 - Control number of ticks on the linear Axis for categorical charts ("DesiredTickCount", including 2nd axis with independent scale) 
  • Implemented Redmine Feature #109 - Rounded maximum for linear axis in categorical charts ("DomainRoundMode" option, including 2nd axis with independent scale)
  • Solved Redmine Issue #78 - Fix the vertical order in which series are drawn, so that when applicable, they show from top to bottom.
  • Solved Redmine Issue #121 - Tooltips in barcharts do not appear if bars overflow.
  • Solved Redmine Issue #103 - Ordinal axis grids not being drawn
  • MultiValueTranslator: issue when no categories
  • Solved valueFormat receives numeric value, doesn't parse
  • Fixed typo of property name in LegendPanel 
  • Add multi-series barline support
  • useCompositeAxis compatible with flat arrays
  • vml namespace conflict: revert sparkline, declaration in protovis-msie no longer lazy
  • align horizontal text in composite vertical axis towards the chart; revert convention breaks in multiline conditional expressions
  • workaround issue in 16th decimal position in IE9 64bit
  • Fixed regression with bulletcharts being translated in 10px down
  • Added new (and some of the missing) documentation to the testZZZ.html files
  • Fixed the drawing of bars and grid lines on the ordinal scale: they were not centered with the tick and label 
  • In linear axis, made minorTicks "extend" (major)ticks, so that visibility (through .visible or .strokeStyle) of the later affects the former. 
  • testZZZ.html files documentation mencioned '{x,y}AxisFullGrid_' instead of the correct value'{x,y}AxisGrid_'.
  • Fixed linear axis grid to show a line on the last tick (as opposed to the ordinal axis, that does not show the last line). When EndLine is active, it is drawn above the last grid line.
  • Fixed bug in the positioning of linear scale labels that revealed it self (don't know why) only on time series charts * Fixed bug in time series scale range calculation when with a second axis * Fixed bug in the drawing of minor ticks on time series scales (date arithmetic issues)
  • Fixed regression bug in ScatterCharts (DotChart, LineChart, StackedLineChart and StackedAreaChart) that caused null values to break line drawing. 
  • Fixed the visibility of the first grid line of a time series axis - it did not show because, in this case, the first tick is not on the origin.
  • Fixed compatibility issue between jQuery.sparkline and protovis-msie when in IE8.
  • heatgrid: +scalingType:'discrete' (interval-based, no color interpolation)
  • tipsy w/ followMouse: don't fall out of window
  • Heatgrid: ignore null values in min/max calculations; nullShape not taking correct index into account;
  • solved dangling variable reference

Great stuff! :)

Bonjour MozillaBonjour WoMoz : Marcela Oniga

marcelaoniga

Décidément, la Roumanie recèle bien des joyaux : après Ioana, Bonjour Mozilla est très heureux de vous présenter Marcela Oniga. Marcela le dit elle-même, elle est une « utilisatrice de Linux enthousiaste, et une grande fan de la philosophie Open Source ». Mais Marcela ne se contente pas d’aimer l’Open Source, elle fait tout pour le répandre. D’abord, elle est la fondatrice et présidente de Pensacola Tech, une société d’hébergement. Ensuite, elle organise chaque année un événement baptisé OSOM, pour Open Source Open Mind, qui promeut l’Open Source, et qui a récemment accueilli… Mozilla, et donné la parole aux excellents représentants de Mozilla en Roumanie !

Bonjour Marcela, et merci !

PS : et merci à Stefania Ioana Chiorean pour sa recommandation et sa contribution !


Surely, Romania teems with treasures: after Ioana, Bonjour Mozilla is very pleased to introduce Marcela Oniga. Marcela calls herself an “enthusiastic Linux user, and a big fan of the Open Source philosophy.” Marcela not only loves open source, she does everything she can to help it spread. First, she is the founder and president of Pensacola Tech, a hosting company. Then she organizes an annual event called OSOM, for Open Source Open Mind, which promotes the Open Source and has recently welcomed… Mozilla, and gave the floor to the excellent Mozilla representatives in Romania!

Bonjour Marcela, and thank you!

PS: thank you to Stefania Ioana Chiorean for her recommendation and contribution!

Meeting Notes from the Mozilla communityMobile Meeting Minutes: 2012-01-25

Mobile/Notes/25-Jan-2012

Contents

Details

  • Wednesdays – 9:30am Pacific, 12:30pm Eastern, 16:30 UTC

  • Dial-in: conference# 95312
    • US/International: +1 650 903 0800 x92 Conf# 95312

    • US toll free: +1 800 707 2533 (pin 369) Conf# 95312
    • Canada: +1 416 848 3114 x92 Conf# 95312
  • irc.mozilla.org #mobile for backchannel
  • Warp Core Vidyo Room

Schedule

  • String freeze: 2012-01-17 (Aurora)

    • Missed! We still have several patches that need to land on m-c and/or m-a

    • Need a bug list of what needs string changes
    • add ‘late-l10n’ keyword to bugs that need strings.
  • Next merge: 2012-01-31
    • This will put Native on Beta

    • We will be discussing whether Native is ready for Beta during this week

Major Topics for This Week

  • Crashes are still too high

  • UI Responsiveness got worse (and is getting better)

Application

Native Front-end
Android Platform

Stand ups

Suggested format:

  • What did you do last week?

  • What are working on this week?
  • Anything blocking you?

Please keep your update to 120 seconds!

James W. (snorp)
Kats
  • Last week

    • fixed bug 703347 (void beneath the web needs background)

    • fixed bug 713780 (performance regression from JSONStringer)
    • fixed bug 717085 (bad viewport on background tabs during session restore)
    • fixed bug 716863 (can end up in overscroll after panning a subdocument)
    • fixed bug 719954 (testBookmark hangs and also doesn’t actually test bookmarks)
    • fixed bug 718961 (regression in visited history link coloring)
    • patch pending review for bug 712065 (SVG pages were cropped)
    • worked on bug 720144 (pan/zoom tests) – got a little stuck trying to get a bitmap of what’s displayed on-screen but have some possible options i’m trying
  • Next week

    • keep working on more bugs
  • Blockers

    • none right now
GBrown

Last week:

Next week:

  • Finish bug 696095.

  • Bug 705192 – remotexpcshelltests.py cannot execute xpcshell via SUT agent
  • Bug 716948 – LinkedIn buttons are blank when viewing invitation
AlexP

Last week

  • bug 711648 – Pre-commit underline is not shown for the composing text

    • Finished composition events fixes

    • Pushed the patch
  • bug 712972 – Can’t type mzl.la into awesome bar
    • Discussed the bug with Madhava, confirmed the workaround and pushed the patch

    • Filed a follow-up bug 719527 – Enable input suggestions for the AwesomeBar when it’s in Search mode
  • IndexOutOfBoundsException in SpannableStringBuilder.getChars() – bugs 717932, 720085, 720092.
    • Started looking at the crashes – could not reproduce yet, trying to add more checks for range boundaries
  • bug 708280 – delay checking for update
    • Investigated possible solutions

    • Implemented a fix

This week

  • Work on the assigned bugs
Chris Lord (cwiiis)
  • Last week:

    • bug 717283 – On-demand tile usage

    • bug 718388 – Use viewport ‘prediction’ to reduce checkerboarding
    • Reviews
  • This week:
    • Finally landed bug 717283

    • Fixed bug 720663 – devicemanagerADB pushDir fallback doesn’t always work
    • Looking at bug 717349 – Telemetry to measure checkerboarding
    • Looking at reducing resolution based on checkerboarding (depends on above)
    • Hopefully help with bug 716581 (Investigate tile-by-tile rendering to reduce checkerboarding)
    • More reviews
Chris Peterson
  • Last Week

    • DONE bug 714874 – Fixed Java warnings for Fennec and Sync

    • Investigating non-Java compositor path
    • Continuing Socorro and ProGuard investigation
  • This Week

    • DONE bug 701002 – Fixed Fennec crash reporting for Socorro

    • DONE bug 709170 – Don’t build Java debug when we don’t have to. Shrinks apk by a whole *50KB*! ;)
    • SOLVED bug 715298 – Fennec Java builds succeed on “linux-ix-slave” builders, but fail on “try-linux-slave” builders
      • bug 709230 – Preparing ProGuard optimizer patches for review
  • Blockers

    • None.
GCP
  • Last week:

    • bug 702217 OOM crash in nsUrlClassifierStore::ReadPrefixes or nsUrlClassifierPrefixSet::SetPrefixes is fixed but begot:

      • bug 719531 FallibleTArray can cause OOM aborts

      • bug 716638 mozalloc_handle_oom should propogate the failed allocation size into crash reports
      • bug 720444 Add more available memory reporting to crash reports
    • bug 713228 SQLiteDatabaseCorruptException: database disk image is malformed: PRAGMA synchronous=1;
    • bug 719125 Profile Migration does not preserve frequency count.
    • bug 713283 Profile migration takes forever
    • bug 710331 UX for bookmarks and history import
    • bug 720461 Crash in profile migration NumberFormatException [@ PlacesTask.migrateHistory]
  • This week:
    • bug 673470 Replace the sqlite safeb store with a flat file (m-c landing)

    • bug 715550 Migration of Sync settings from XUL Fennec
  • Blockers:
    • Potentially dependencies between bugs for m-c -> m-a (see patch queue)
Brian N
  • Done

    • bug 716906 – Add “Firefox Sync” item to settings

    • bug 701092 – Limit session restore attempts
    • bug 719662 – Use nsIPrefLocalizedString for getComplexValue
    • bug 715225 – Clean up menu contents
    • Investigated bug 716681 – Tabs are being duplicated when going back into Fennec
  • Next

    • bug 719900 – Remove blank favicon images from awesomebar lists

    • bug 710845 – Search engine disabled in Add-ons Manager still appears in Awesome Screen search results
    • bug 717428 – Reuse favicons in DB
Sriram
  • Last Week

    • Vacation – slurping coffee – 4 times a day :-D
  • This Week
    • Completed restricting height of tabs menu

    • Working on autocomplete popup list related bugs
    • WIP on URL bar with a tail – waiting for newer resources from Ian
      • This fixes a lot of polish bugs on URL bar
  • Blockers
    • Newer set of resources from Ian to complete URL bar
WesJ

Last week:

  • Landed touch events! Disabled touch events! A few issues left to sort out

    • bug 721079 – preventDefault on touchmove isn’t handled quickly enough

    • bug 721076 – ACTION_UP (Android event) issues
    • bug 721080 – Make pages release panning
  • Password Sync
    • bug 704682 – Password provider – has r+

    • bug 718817 – Deleted passwords database – waiting for r
  • A slew of other bugs, mostly dealing with select elements

This week:

  • bug 718760 – Java crypto. Had some meetings about a range of options. Hope to have a patch up soon.
LucasR

Last week

  • Invite users to setup sync on about:home

  • Frequent crash on local DB
  • Version and icons on addons in about:home
  • Organizing focused effort to fix UX for tabs and startup

Next week

  • More P1/P2 bugs

  • Startup-related bugs
  • Start preparing FOSDEM talk about Firefox Mobile

Blockers

  • None
MBrubeck

Done:

  • bug 718296 – Can’t navigate to host without a .tld

  • bug 719795 – Crash when GeckoSmsManager.init is called more than once
  • bug 717283 – Fix Android build bustage
  • bug 719271 – Site-specific zoom level shouldn’t apply to media documents
  • Ported Full Screen add-on to native Fennec, found some problems (bug 719557).
  • Interviewed an Android developer for BrowserID position.

Next:

  • bug 715179 – Custom UI for font inflation prefs. (Not for Aurora?)

  • Bug fixing and UI polish.
Margaret

Done:

Next:

  • Continue looking into UI responsiveness pain points

  • More random bugs
Scott (jwir3)
BLassey
  • triage, reviews, meetings

  • built an AOSP image for panda boards and got tests running on it
  • broke up screenshots to make them not block the message loop
  • made screenshots cancelable
DougT
  • Triaging, patch review, mentoring…

  • Investigating topcrash crashes.
MFinkle

Done:

  • Gave a “Firefox Mobile: After the Reboot” preso at Mozilla Vision (Tokyo)

  • Made a “Firefox Mobile: After the Reboot” blog post as well
  • Did some digging into TouchBadMemory crash to help split out issues
  • Reviews

Next:

  • Reviews

  • More work on add-ons options (bug 696533)
  • Work on planning for Beta
Madhava

Things it would be great to have done for beta:

  • Experience of startup / page load

    • Cut down the amount of checkerboarding – bug 716581

    • Handful of startup weirdness bugs: tracked in bug 721008
  • Fix the p1/p2 font inflation bugs — we want this to be as right as possible for beta; bug 706193, bug 706198
  • Get frecency / top sites as right as we can: bug 704977
  • Get the in-browser Sync UI pieces in, so people can find and set up sync
    • bug 708414, bug 716906 – looks like they’re in!
  • Get the tab menu not covering the whole screen — may seem minor, but I want people to get the right idea of how it works as of beta – bug 712526
  • Some thumbnail tweaks around differences in tab menu / start page, scaling where we shouldn’t be (bug #)
  • UI responsiveness (opening a tab; aweseomescreen top sites list coming in; settings screen entries becoming enabled)
Ian Barlow

Last Week

  • Kicked off designs for tablet UI refresh

This Week

  • Startup UX

  • Visual consistency throughout the app
    • Thumbnail size / style: Bug 721032
  • Continuing tablet visual design exploration, with a focus on
    • Start Page

    • Awesomebar interaction
    • Sign in to browser
Patryk Adamczyk

Last Week
+ Working on Bug Fixing

This Week
+ Working with Sriram on UI Polish bugs.
+ Compiling Firefox 12 design spec.

Round Table

  • End game! Go review your bugs. If you don’t think you can fix in the next month (don’t under estimate), talk to someone. P1/P2 only. If you aren’t working on one, please talk to someone. We need to load balance.

Android 2.1 crashers

  • bug 705874 – xperia x10 (QA has one in MV)

  • bug 720712 – Samsung SCH-i400 (Continuum) (deviceanywhere)
  • bug 699301 – Huawei Ideos S7 (QA has one in MV) blassy had mentioned filesystem issue?

SUMO

  • Documentation sprint to update all mobile articles for FF11–need to complete article updates in three weeks to support NativeUI release in six weeks, (localizers ideally need three weeks to translate).

  • Firefox mobile meetup in SF next Wednesday evening

Meeting Notes from the Mozilla communityFirefox/Gecko Delivery Meeting Minutes: 2012-01-25

Firefox/Planning/2012-01-25

« previous week | index | next week »

Planning Meeting Details

  • Wednesdays – 11:00am PDT, 18:00 UTC

  • Mountain View Offices: Warp Core Conference Room
  • Toronto Offices: Fin du Monde Conference Room
  • irc.mozilla.org #planning for backchannel
  • (the developer meeting takes place on Tuesdays)

Video/Teleconference Details – NEW

  • 650-903-0800 or 650-215-1282 x92 Conf# 95312 (US/INTL)

  • 1-800-707-2533 (pin 369) Conf# 95312 (US)
  • Vidyo Room: Warp Core
  • Vidyo Guest URL
REMEMBER

These notes are read by people who weren’t able to attend the meeting. Please make sure to include links and context so they can be understood.

Contents

Actions from Last Week

Schedule & Progress on Upcoming Releases

Firefox Desktop
Release (3.6, 9)
  • 3.6.26 to be released to the beta population tomorrow, subsequently released next Tuesday
Beta (10)
  • Pushing our final beta out tomorrow, and plan to release on Tuesday

  • Add-ons default to compatible is in Firefox 10. Add-ons that are compatible with Firefox 4+ will be compatible in Firefox 10.
  • Add-on hotfix testing is in Firefox 10 and testing is going well with our beta audience – once the metrics team helps verify our understanding of the data we’ve gotten back, we can greenlight the use of a hotfix in the place of some chemspills
Aurora (11)
Nightly (12)
  • bug 566489: inline autocomplete has landed thanks to efforts from David Dahl and Marco Bonardo. Marco has been fixing followups in an attempt to polish the feature for release, but we may end up disabling it on Aurora to get some extra bake time.

  • Snappy (last week’s summary)
Firefox Mobile
  • Working toward Beta

  • Current status blog post
  • Nightly

  • Aurora
    • not to steal sync’s thunder, but we expect sync to be uplifted by the end of the week

    • several non-sync patches are dependent on sync landing, so will get unblocked by that
  • Beta
    • when 11 goes to beta, we’ll be doing a split release

      • incompatibility needs to be built into the manifests

      • manifests patches are based on branding, should land soon
      • RelEng and QA are conducting testing with a dummy market product to validate all these moving pieces
  • Release
Firefox Sync
  • Native Sync has been enabled in Nightly

    • Data may be lost, reordered, or corrupted. Please do not use your good profiles

    • Migration from XUL to Native will likely cause your sync account to disappear
      • mobile is investigating a fix
    • Please remember behavior is undefined if multiple instance of Native Fennec (nightly, aurora, etc) are on a single device
  • The sync team is planning to migrate our code base to MPL v2.0
    • Please holler if there is any reason we should not.
  • old news that bears repeating
Add-on Builder
  • Release today

  • Next week we begin intensive QA rounds in preparation for release
  • Marketing/PR is assigning someone to handle our 1.0 launch
  • 1st Web Builder code check-in happened this week, hoping to have a working prototype in ~5 weeks
Add-on SDK

Release (1.4 -> Firefox 9, 10)

  • 1.4 Released two weeks ago – no issues

Stabilization (1.5 -> Firefox 10, 11)

  • 1.5b2 Released yesterday

  • On track to release on Feb. 21st, 2012

Development (1.6 -> Firefox 11, 12)

  • Have made good progress on Talos testing – jhammel blogged about it

  • Still having discussion of localizing html elements in SDK-based addons – please join in
  • On track to merge to Stabilization on Feb. 21st, 2012

Feedback Summary

Desktop
  • Follow up from last week:

    • [1] Slowness in 10 peaked (although not much of one) around the 8th and has been falling (a little) since.

Firefox 9.0.1

  • Nothing major new.

  • Some complaints around 3.6 > 9 major update (where is reload button, confusion around session restore, extensions)
Mobile

UX & User Research

Research: The Mobile Diary Project is progressing nicely. We are in the process of recruiting participants to tell us how they use apps and how they use the browser. There will be opportunities for you to meet with these mobile users coming up in mid-February. Email Mary Trombley if you have questions.

Design

  • New ux-review@mozilla.com UI review queue is being beat into submission on a daily basis

    • We reduced the number of uiwanted’s from 420 to 316 (104 bugs processed) last week, racing towards zero!
  • Metro UI design work is starting, and we know what we can (and can’t) do wrt. WinRT and Win32 APIs
  • Trond & Josh hard at work for Gaia (B2G) UI for Mobile World Congress
  • Sync “papercut” fixes are in progress (Yuan and Jinghua)
  • Designs on BrowserID, log in to the browser + next-generation sync approach is starting this week (Zhenshuo)
  • zpao landed Lion fullscreen mode on the UX branch, is epic
  • New tab page has visual improvements (Boriss & ttaubert)
  • Design work on translation of content in-browser is starting this week too (Yuan)

Market Insights

Desktop / Platform
Microsoft
  • There continue to be persistent rumours that Microsoft is planning to have a unified platform from the OS kernel up for Windows 8, “not just in terms of a common design language and interface (Metro), the same HTML5 Internet Explorer browser and integration with Windows Live and Azure — but also in terms of a common core.”
  • Other rumours indicate that the next release of Windows 8 will be called a consumer preview, not “beta”. Interviews with developers who have recently built apps on the current Developer Preview said, overall, that it is still rough, with plenty of missing functionality, but that they found it possible to build the apps they wanted.
  • Microsoft also released an updated version of Compat Inspector that works with the IE10 Preview. This tool allows webmasters to identify changes that are required to better serve IE9 and IE10.
Google
  • An interesting blog post details a claim that the primary reason Google decided to create the Chrome browser was to perfect technologies required to better crawl the web, all in an effort to improve search rankings. By citing patent applications, the author makes the claim that “GoogleBot is a browser”.
  • Google released some advertising videos promoting the automatic translation capabilities of Chrome.
  • Recent WebKit / Chrome developments include a screen-size emulation back-end in the Web Inspector tool, which will soon allow for easy emulation of mobile device screens, and the first commits to support the Shadow DOM in Javascript.
  • Google also awarded $6133.70 in rewards to teams reporting four security bugs in Chrome; all four are fixed in the latest stable version of the browser.
Opera
Other
  • At an upcoming security conference in Vancouver, separate teams of hackers will be competing to win $60,000 to take advantage of recently-patched vulnerabilities in Firefox, Google Chrome, Safari and Internet Explorer.
  • An interesting interview on the W3C blog with the head of the Financial Times’ web team on why they decided to abandon their iOS native client application and develop an HTML5 version instead. They describe some of the functionality they miss (notifications) and the workarounds they had to develop to handle additional caching and swiping functionality.
Mobile

Summary below, full update here and in your inbox.

  • Dolphin HD will come preloaded with add-ons, reveals new beta release
  • Sony Ericsson joins HTC and Motorola with low Q4 2011 results, but will revamp strategy as it becomes Sony
  • HTC to integrate IBM business solutions on devices in effort to consolidate on the enterprise market
  • Apple on path to 20% smartphone sales marketshare for 2011 after record Q4 2011 results
  • Quad-core 1.5 GHz devices on their way, by Samsung
  • Mobile payments rushing towards mainstream availability in the US and Europe
  • RIM has a new CEO, no strategic changes are planned

Marketing, Press & Public Reaction

Desktop
  • 3.6 Upgrade Display Ads in progress, working on updating copy on Major Update billboard to improve CTRs.

  • Readying materials for the releases next week (Aurora, Beta, GA).
  • Working on a devices landing page experiment for Mozilla.org/Firefox
  • Marketing plan for next release.
Mobile
  • Tablet media buy campaign ends this week (SEM efforts still live)

  • Facebook ads for tablets ended yesterday
  • MWC content and messaging
  • Marketing plan for FF11
  • Blog post for FF11 Beta
  • Optimizing acquisition funnel for Aurora and Beta

Questions, Comments, FYI

Actions this week

hacks.mozilla.orgWiki Wednesday: January 25, 2012

Here are today’s Wiki Wednesday articles! If you know about these topics, please try to find a few minutes to look over these articles that are marked as needing technical intervention and see if you can fix them up. You can do so either by logging into the wiki and editing the articles directly, or by emailing your notes, sample code, or feedback to mdnwiki@mozilla.org.

Contributors to Wiki Wednesday will get recognition in the next Wiki Wednesday announcement. Thanks in advance for your help!

JavaScript

Thanks to David Bruant, -TNO-, and xkizer for their contributions the last couple of weeks.

SpiderMonkey

Developing Mozilla

Extensions

XUL

XPCOM

Thanks to Neil Rashbrook for his contributions!

Interfaces

Plugins

CSS

Thanks to McGurk and cgack for their contributions to CSS documentation!

SVG

HTML

Thanks to Jens.B and tw2113 for their contributions since last time.

DOM

Thanks to cgack for contributing!

Eric ShepherdWiki Wednesday: January 25, 2012

Here are today’s Wiki Wednesday articles! If you know about these topics, please try to find a few minutes to look over these articles that are marked as needing technical intervention and see if you can fix them up. You can do so either by logging into the wiki and editing the articles directly, or by emailing your notes, sample code, or feedback to mdnwiki@mozilla.org.

Contributors to Wiki Wednesday will get recognition in the next Wiki Wednesday announcement. Thanks in advance for your help!

JavaScript

Thanks to David Bruant, -TNO-, and xkizer for their contributions the last couple of weeks.

SpiderMonkey

Developing Mozilla

Extensions

XUL

XPCOM

Thanks to Neil Rashbrook for his contributions!

Interfaces

Plugins

CSS

Thanks to McGurk and cgack for their contributions to CSS documentation!

SVG

HTML

Thanks to Jens.B and tw2113 for their contributions since last time.

DOM

Thanks to cgack for contributing!

David FlanaganMozilla and Web Literacy

Mark Surman, the head of the Mozilla Foundation, has proposed that as part of Mozilla's mission ("to promote openness, innovation and opportunity on the web") we should work to "create a web literate planet". His vision inspires me: if the web is going to continue to be a revolutionary force in human affairs, we need a critical mass of citizens who understand the web deeply, who actively participate and build the web, and who can not be turned into mere consumers. So I've taken a break from my work on dom.js to work on education and web literacy.

Michelle Levesque works for the Mozilla Foundation and has been thinking a lot about web literacy under the name "webmaker skills". That is, she's working on listing the skills that Mozilla feels are most important in order for someone to be "web literate", where literacy means not just "reading" the web, but writing, or "making" it, too.

Mozilla is teaching webmaker skills through a number of really interesting projects and experiments including:

These projects tend to approach web literacy stealthily, and teach or promote it as a side effect of making cool stuff online. Given my background as a writer, however, I'll probably take a more direct approach and just write about web maker skills. (I don't expect that any of the teens learning HTML with Hackasaurus will ever read what I write, but perhaps the adults teaching them will...)

I can't write about web literacy the way I write about JavaScript, of course. Many webmaker skills are probably ones that are best learned by doing rather than by reading. And no one really knows exactly what we mean by "web literacy" anyway. Still, there are plenty of web literacy topics that can be addressed in prose, from "what is a web browser?" and "what is the difference between a URL and search query?" to "how do I write HTML and CSS" and "what is DNS?" Other crucial web literacy topics (harder ones to write about) include:

  • Identity, anonymity and privacy on the web.
  • Copyright, fair-use and other IP laws and the web.
  • The difference between the open web and walled gardens erected within the web.
  • How to detect scams and misinformation on the web.
  • The seedy neighborhoods of the web: typo squatters, aggressive SEO, comment spam, etc.
  • The dark side of the web: phishing, malware, etc.

(Please feel free to suggest other web literacy topics in the comments. Or if you know of particularly good writeups on these or other topics, let me know.)

I'm actually debating whether to use the term "web literacy" at all, or to just stick to "web skills". The word "literacy" carries a lot of academic baggage, and that some of that baggage, like the "digital native" vs. "digital immigrant" distinction, is bogus. The literacy metaphor is really quite appealing, but it might actually be more trouble than it is worth.

You may notice that one of the web skills not listed above is JavaScript programming. I've thought a lot about the question of how to teach kids to program with JavaScript, and it is an area that I'd love to work on. But its a hard problem, and others are tackling it, so it may not make sense for Mozilla to jump in. Still, its very tempting to put together some JavaScript explorations for kids.

Pascal FinetteHow to not approach a VC (or incubator or angel or seed fund or ...)

Every once in a while (and sadly more often than you would expect) I get an email from someone seeking an investment (be it through Mozilla’s WebFWD program, FoundersLink, the VC fund in Europe I am a venture partner at or my own angel investing) which just riles me. Take this prime example (details have been removed to protect the innocent):

Dear Sir / Madam !

Please, examine the project searching for investments.

The ∎∎∎∎∎∎∎∎ project is oriented to USA market and the company will be located in the USA.

∎∎∎∎∎∎∎∎ is the project in the mobile area of business, providing ∎∎∎∎ ∎∎∎∎∎∎∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎∎∎∎∎∎ (∎∎∎∎∎, ∎∎∎∎∎, ∎∎∎∎∎∎∎∎∎, ∎∎∎∎∎∎∎∎, ∎∎∎∎∎, ∎∎∎.) ∎∎∎ ∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎. ∎∎∎∎∎∎∎∎ is going to be an online ∎∎∎∎∎∎∎ ∎∎∎∎∎ ∎∎∎∎∎ ∎∎∎∎∎ ∎∎∎ ∎∎∎ ∎∎∎∎∎∎∎ ∎∎∎ ∎∎∎∎∎∎ ∎∎∎∎∎∎∎. It has more than ten years of experience developing ∎∎∎∎-∎∎∎ ∎∎, ∎∎∎-∎∎∎∎∎ ∎∎∎ ∎∎∎∎∎∎ ∎∎∎∎∎∎∎∎∎∎∎∎. ∎∎∎∎∎∎∎∎ project was implemented as a first attempt to ∎∎∎∎ ∎∎∎∎ ∎∎∎∎∎ ∎∎ ∎∎∎∎∎∎∎∎ ∎∎∎∎∎ ∎∎ ∎∎∎∎∎∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎. Its products are based on ∎∎∎ ∎∎∎∎∎∎’∎ ∎∎∎∎∎∎∎∎. ∎∎∎ ∎∎∎∎∎ ∎∎∎ ∎∎∎∎∎∎∎ ∎∎ ∎∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎∎∎, ∎∎∎∎∎∎∎∎∎ ∎∎∎ ∎∎∎∎∎ ∎∎∎∎∎∎∎∎∎. ∎∎∎∎∎∎∎∎ ∎∎∎∎∎∎ ∎ ∎∎∎, ∎∎∎∎∎∎ ∎∎∎∎∎∎∎ ∎∎∎∎∎∎. ∎∎∎∎∎∎∎∎ ∎∎∎ ∎∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎∎∎∎∎∎ ∎∎∎ ∎∎∎ ∎∎∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎ ∎∎∎ ∎∎∎∎∎∎ ∎∎, ∎∎∎∎∎∎∎∎∎∎∎∎∎, ∎∎∎∎∎∎∎ ∎∎∎ ∎∎∎∎∎∎ ∎∎∎∎∎∎∎∎, ∎∎ ∎∎∎∎∎, ∎∎ ∎∎∎∎∎, ∎∎∎∎∎∎∎∎∎, ∎∎∎∎∎∎∎∎, ∎∎∎∎∎, ∎∎∎∎∎, ∎∎∎. ∎∎∎ ∎∎∎∎∎∎∎ ∎∎∎∎ ∎∎ ∎∎∎∎∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎ ∎∎∎ ∎∎∎∎∎∎∎∎, ∎∎∎∎∎∎∎∎∎∎∎∎∎ ∎∎ ∎∎∎∎∎∎ ∎∎∎∎∎∎∎∎∎ ∎∎∎ ∎∎∎∎∎∎ ∎∎∎∎∎∎∎, ∎∎∎∎∎∎∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎∎.

Investment costs - $867 549

Please, find Executive Summary of the project below. I will provide any other additional information if necessary.

Thank you for your time and consideration. I am looking forward to hearing from you.

Attached Documents: 3-Page Executive Summary & Financial Forecast

BEWARE - RANT FOLLOWS:

Here’s what’s fundamentally wrong with this email:

  1. You clearly haven’t done your homework, because otherwise you would have known that WebFWD is an accelerator program, not a fund. We also focus on open web, open source and social good projects. Thus we don’t invest in companies such as yours.
  2. To further point 1 you didn’t do any research on who the right person within WebFWD to talk to is - instead you sent your email to “Dear Sir / Madam”. This just shows that you very obviously sent your email to every VC under the sun.
  3. Your investment requirement is $867 549? Not $867 548 or $867 550? That number shows me that you are mostly clueless about financial forecasting. I bet you serious money that your financial requirements will *not* be $867 549 to the dollar. Stating precise numbers such as this is just silly.
  4. Your executive summary starts with a unilateral NDA. That’s plain rude. A VC doesn’t sign NDAs - and surely not unilateral ones. Don’t believe me? Brad Feld blogged about this recently. I didn’t read your pitch nor your financial plan but instead deleted them immediately.
  5. Don’t send me all this material. I don’t care. Send me a short (!) summary and a one-pager. Focus on making your pitch exciting. Starting your pitch with the fact that your company is in the US is a wasted opportunity - nobody cares where your company is located but WHAT your company does and why the world should care. If a VC is interested, they will ask you for your financial model and all the other documents.

RANT OVER

So - do yourself a favor (and significantly increase your chances that people will actually read your pitch) and do your research, tell us clearly what you do, why we should care and what you want from us.

P.S.: Found my rant a bit harsh? I just don’t want to waste your (or my) time. Read this.

William LachanceYet more checkerboarding analysis

I’ve been spending a bit more time on refining the checkerboarding tests in Eideticker that I talked about last time. Most of my work has been focused on making the results as representative of a real world scenario as possible, to that effect I’ve been working on:

  • Changed the test case from a web site of my own concoction to a more realistic example (the taskjs.org site)
  • Use actual Android native events (via MonkeyRunner) to synthesize touch-based scrolling instead of simulating the event in JavaScript (which exercises a completely different codepath).
  • Fixing various synchronization issues to make results more repeatable. Before captures were of wildly variable lengths, which made the numbers extremely suspect. There’s probably still a few issues, but much less than before.

The end result of this is a framework that gives much more meaningful results. The bad news is that the results that I’m measuring don’t show a very positive picture for where we’re at with the native re-write of Firefox. Even relative to the version of mobile Firefox which is currently on the Android Market, we still have some catching up to do. Here’s some video of the “old” firefox in action:

And here’s the Native fennec (what we’re currently offering in nightly, with some minor modifications by me to change the way the “checkerboard” is drawn for analysis purposes):

The numbers behind this comparison:

Platform Percent checkerboarding over run of test
Old Fennec 2%
Native Fennec 57%

(by the way, this performance regression is filed as bug 719447)

I know there’s lots of great effort going into improving this situation, so I have hope that we’ll be doing much better on this metric in the coming days/weeks. The process for creating these videos/analyses is mostly automated at this point, so my plan is to create a small dashboard (ala arewefastyet.com) to measure these numbers over time on the latest nightlies. Stay tuned!

Johnathan NightingaleBringing Android Native Firefox to Beta

I like trains. Last year, we put Firefox on a train-based release model: every six weeks, another train leaves the station. When a feature catches the train it moves through iterative testing on our Nightly, Aurora and Beta channels and, if that testing confirms its stability and general excellence, it goes out to hundreds of millions of Firefox users. If testing reveals an issue, we pull the feature out for another round of review, and let it catch a later train. The trains have run on time ever since, and the results have been incredible. Firefox improvements reach our users regularly, faster than ever before.

However, when we decided to rebuild Firefox for Android using Native UI, we recognized that the first release couldn’t ride the trains. The iterative release model that serves us so well with Firefox works best when most changes are incremental and independent. Building a new high-performance front end for Firefox on Android, by contrast, involves many interconnected pieces being rebuilt in tandem.

Right now, the engineering team is focused on building an amazing browser for Android phones, and we’ll have a beta to show you in the coming weeks. It might coincide with one of our regular 6 week trains, but it’s quite possible it won’t. If it doesn’t, don’t worry. It’s cool. Firefox for Android will get back on the trains once the native UI rebuild is finished, but for a change this major we have extra work we want to do before we send it out the door. We’ll only ship it once we’re happy with its quality and performance. If you can’t wait that long, check us out on tablets or try our early release Aurora builds. I think you’ll be pleased.

[This post originally appeared on the Future of Firefox blog]

Matjaž HorvatDownload translations as HTML, JSON or PO

You can now finally save translations you make with Pontoon. As of today, three different download formats are supported:

  • HTML
  • JSON
  • PO (gettext)

Download translation

I’ve temporarily disbled BrowserID login, which will be available again after we finish the migration to Mozilla server infrastructure.

Ehsan AkhgariPorting an OpenGL application to the web

Emscripten is a tool which compiles C/C++ applications to Javascript, which can then be run inside a web page in a browser.  I have started to work on adding an OpenGL translation layer which is based on WebGL.  The goal of this project is to make it possible to compile OpenGL C/C++ applications into Javascript which uses WebGL to draw the 3D scenes.

My first demo is a port of the es2gears application to the web.  es2gears is an OpenGL ES 2.0 port of the well-known glxgears application.  You can see the web port of es2gears in action if you're using a WebGL enabled browser (Firefox, Chrome or Opera Next).  For some extra fun, press the arrow keys as the gears are animating!

Screenshot of the es2gears application

This port has been automatically generated from this version of es2gears.  If you want to play with this locally, you can fork the glgears branch of my emscripten repository (this will be upstreamed to main emscripten repository once I write some tests for my OpenGL/GLUT implementation.)

A note about the demo: this is not supposed to be a performance benchmark of any kind.  My GLUT implementation uses the requestAnimationFrame API if available which means that your rendering speed should be capped at about 60FPS.  And that is what you would get if you compile es2gears directly into a native application as well.  But this application doesn't push either the CPU or GPU to their limits, so it is only useful as a proof-of-concept, and should not be used in order to compare the graphics/Javascript performance of browsers!

I'm very excited about this project, and this is only the beginning.  If you're interested in this work, watch my blog for further posts about future demos!

Trackback URL for this post:

http://ehsanakhgari.org/trackback/134

Sheeri CabralMySQL Community and User Group slides

This week I have been at the IOUC User Group Leader's Conference, and I have met a ton of great folks who are user group leaders and made some great contacts for future speaking engagement. Follow this space to learn about calls for papers for international conferences! First up is the call for papers for the OUG Harmony conference.

The OUG is the Oracle Users Group for Finland and Latvia, in conjunction with Estonia and Russia. The Finland conference is specifically looking for MySQL content, and is May 30-31st in Hämeenlinna, Finland. Talks can be in Finnish or English, and they're looking for good basic MySQL information.

I spoke today at the conference about the MySQL community - who it is, how it's grown, and what the challenges are as we try to find our place under the Oracle banner. Slides are at http://bit.ly/mysqlcomm2012.

I have to say that I love doing slides in HTML and CSS, as I'm already very familiar with it, and I don't have to worry about a separate Office program. I marvel at how open Mozilla is, and you too can make slides as I did, though I'd recommend changing the CSS so you can represent your company. It took me about 5 minutes to figure out how to work things, thanks to our public documentation at https://wiki.mozilla.org/HTML_Slides -- which, by the way, I found by Google searching for "Mozilla slides".

Note that anyone can develop slides on Mozilla's site or export it yourself to work on offline...I found it handy to develop the slides right on the Mozilla type, and whenever I saved it the display version automatically updates. Pretty nifty stuff.

Irina SanduAndroid and mobile browsing insights – Week 4

Every week I post an overview on what’s been happening in the mobile (browsing) world and is relevant to Mozilla.

  • Dolphin HD will come preloaded with add-ons, reveals new beta release
  • Sony Ericsson joins HTC and Motorola with low Q4 2011 results, but will revamp strategy as it becomes Sony
  • HTC to integrate IBM business solutions on devices in effort to consolidate on the enterprise market
  • Apple on path to 20% smartphone sales  marketshare for 2011 after record Q4 2011 results
  • Quad-core 1.5 GHz devices on their way, by Samsung
  • Mobile payments rushing towards mainstream availability in the US and Europe
  • RIM has a new CEO, no strategic changes planned

 

Dolphin HD was updated to v7.3.1. beta, which adds by default 5 add-ons into the browser: Dolphin Comparison (battery usage optimization tool), Web to PDF, Dolphin Screen Cut (screenshot tool), Dolphin Translate and Shiny Shake Dolphin (theme switcher). The add-on pool for the browser also increased this week, with 2 additions: Skitch (webpage annotation and drawing tool) and Evernote.

 

Sony Ericsson, the third largest Android phone producer, has announced a 16% drop in device shipments for Q4 of last year, joining HTC, the second largest Android OEM, and Motorola, in experiencing losses. For the next quarters, Sony Ericsson, which in the meantime became Sony, will likely see a revamped production of Android devices, likely to be optimized towards integration with Sony’s other consumer technology products. Motorola, as well, will employ a different strategy in releasing Android devices, pending regulatory approval of its acquisition by Google.

 

HTC made a partnership with IBM to integrate business-centric software from IBM on its upcoming phones, in an effort to capture the enterprise segment. Given the concerns on the security of mobile platforms and Android in particular, it is expected that mobile devices geared towards the business consumer will likely include significant optimizations to ensure security and privacy of data.

 

Apple announced its earnings for Q4 of 2011, which surpassed all analyst estimates and produced record revenue for the company. In the quarter Apple sold 37 million iPhones, an increase of 128% year-over-year and 15 million iPads, which accounted for a 111% increase year-over-year. The iPhone produced 53% of total revenue, followed by the iPad with 20% and the Mac with 14%. The record results can be partly explained by the occurrence of the iPhone 4 launch and the holiday season in the same quarter, both events that trigger an increase in sales. Traditionally, Apple has released a new version of its phone in Q3 and this year’s delay was visible not only in Q4 results, but also in Q3 sales, when Apple sold 17 million iPhone units and missed analyst expectations, for the first time in a long time. For the full year 2011, Apple is expected to reach a 20% worldwide smartphones sales marketshare, pending result announcements from other OEMs.

 

The Samsung Galaxy III, presumably Samsung’s next flagship device, is rumoured to feature a quad-core 1.5 GHz processor and Ice Cream Sandwich. The phone is expected to launch in April of 2012.

 

In Sweden, the four leading mobile phone companies have formed an alliance meant to bring a combined mobile wallet service to 97% of the country’s subscribers by summer of this year. Using NFC technology, mobile payments efforts are rushing all over the world to mainstream, backed by mobile operators. The US, UK, Denmark, France and Germany are also countries where the main network operators have joined efforts to bring an inter-operable mobile payment solution to their subscribers. In the US, AT&T, Verizon and T-Mobile will launch the ISIS system in 2012 starting with Austin, Texas. Besides support from mobile operators, mobile payment platforms need collaboration from retailers in adapting their Point-of-Sale payment terminals.

 

Thorsten Heins is RIM’s  new CEO, who was promoted from the position on COO to replace co-CEOs Mike Lazaridis and Jim Balsillie. The new leader of the Canadian phone maker plans to steer the company in the same direction and has not announced major strategic changes. analysts and investors have not shown appreciation for this decision, as they are hoping for new measure that would turn-around the company’s recent drops in sales marketshare and share prices.


David DahlDegooglefication experiment

In a previous episode of “Privacy Claw-back”, I deleted the contents of and removed my Facebook account. That was kind of hard to do at the time as I wasted a whole lot of time on Facebook – it was really fun reconnecting with old friends.

However, I began to think critically about Facebook. This is where all of the problems come in. Facebook’s creation is a tale of amazing scale, ingenuity and engineering prowess. The dark side of the equation is the unprecedented knowledge that can be gleaned from our data about us. The impulse to use this data improperly is probably impossible to resist.

Google is another can of worms. They did not become the biggest search engine for nothing. The amount of information Google has about you, your spouse, your friends, kids, your preferences, likes, dislikes, where you go, who you talk to, what might ail you, political views – it goes on and on and on.

It is time for me to disconnect from Google. Can I do this and still have a positive internet experience? I hope so. I began this process over a year ago when I switched to a PAID email service, pobox.com. It works pretty good. I am fairly confident my email is not datamined, and the web UI is OK – not the best. (That is what Thunderbird is for). However, I kept my GMail accounts and Google-hosted mail service intact (but idle), just in case.

For search, I switched to DuckDuckGo.com well over a year ago. It has gotten really, really good. I have found myself using Google less and less. I even changed my “urlbar keyword” search in Firefox to use DuckDuckGo. (I occasionally use Bing and Yahoo as well).

Twitter is the only hold-out as I feel like Twitter is “not evil yet”. Perhaps someday Twitter will become a protocol. That, I hope, will be inevitable.

Today, as I read about Google’s new non-opt-out privacy policies, it occurred to me that I really don’t rely on Google anymore, I have slowly freed myself from that dependency. I may yet have issues using certain apps on my Android device and I need to figure that out next. (Yay, Boot2Gecko!).

In the meantime, I have taken this experiment up one notch by adding google.com and www.google.com to resolve to my local webserver in /etc/hosts – my machine can no longer reach Google or Facebook. (or Google analytics servers for that matter).

The point is, there are many great internet services out there that you can rely on to handle search, email and social that don’t infringe on your privacy, try them out!


Jeff WaldenSpiderMonkey no longer supports sharp variables

ECMAScript object literals

ECMAScript, the standard underlying the JavaScript language, can represent simple objects and arrays using literals.

var arr = [1, 2, 3];
var obj = { property: "ohai" };

But it can’t represent all objects and arrays.

Cyclic and non-tree objects

ECMAScript literals can’t represent circular objects and arrays which (perhaps at some nesting distance) have properties referring to themselves (in other words, the objects form cyclic graphs). Nor can they (faithfully) represent objects which contain some other object multiple times (in other words, the objects form a directed acyclic graph which is not also a tree).

var arr = [1, "overwritten", 3];
arr[1] = arr; // cyclic
var obj = { property: "ohai", nest: {} };
obj.nest.parent = obj; // cyclic
obj.secondCopy = obj.nest; // non-tree, obj.nest is repeated

Sharp variables

SpiderMonkey historically supported extension syntax to represent such graphs under the name sharp variables. Sharp variables were inspired by Common Lisp syntax, and they enabled naming an object or array literal before it had been fully evaluated (even, to a limited extent, interacting with it). Netscape proposed sharp variables for inclusion in ES3, but the proposal was rejected as being too domain-specific and being arguably ugly. Since then the extension has lingered in SpiderMonkey but has seen very little use.

// Identical semantics using sharp variables
var arr = #1=[1, #1#, 3]; // #n= names an object being created, #n# refers to it
var obj = #1={ property: "ohai", nest: #2={ parent: #1# }, secondCopy: #2# };

No other ECMAScript implementer has since shown interest in implementing sharp variables. And with renewed efforts to evolve ECMAScript syntax, special characters like # are increasingly precious. Thus we’ve decided it’s time to remove sharp variable support from SpiderMonkey.

One benefit to removing sharp variables is that we can remove a good chunk of rarely-used code (and attack surface: sharp variables have been a source of some number of likely vulnerabilities) from SpiderMonkey. A syntax-removal patch added 79 lines and removed 1112 lines, including tests; not including tests, it added 42 lines and removed 677 lines. A subsequent patch to remove generation of sharp variable syntax from object decompilation added 65 lines and removed 128 lines. Removing sharp variables will also permit some simplifications now that evaluating a literal can’t have side effects beyond those in any nested property initializers.

Alternatives to sharp variables

Sharp variables may have been sometimes convenient, but they were mere syntactic sugar. It should be simple to convert any use of sharp variables to an equivalent sequence of property additions. If you were sufficiently aware of sharp variables to use them to represent non-tree objects, I trust I don’t have to explain how to do this.

Somewhat more interesting are the cases where decompiling an object produced sharp variable syntax, as when decompiling a cyclic object during debugging. (It’s worth noting in passing that decompilation will not infinitely recur: instead, it’ll bottom out with an empty object or an omitted property.) Jason Orendorff has written a sharps mini-library implementing decompilation of cyclic and non-tree objects which may be useful for this task.

When to expect this change

The sharp variable documentation on MDN has long noted that sharp variables were deprecated and would likely to be removed; a few months ago that warning was upgraded to a firm statement that they would be removed. The sharp variable removal patch that landed yesterday completes the process. The removal will first appear in either today or tomorrow’s nightly; in a week’s time it’ll make its way into the aurora branch, then the beta branch, and finally into Firefox 12. Versions of Firefox prior to 12 will not be affected by this removal, including the extended-support release Firefox 10.

Web FWDCreative Commons: Allowing Content Creators to Thrive

Since the advent of the Web, content ownership has been contentious. Innovators have been challenged with how to proliferate and extend their creative work in a world where content is tied to restrictve frameworks such as copyright.

Enter Creative Commons, which was created in 2001 to establish and expand licensing options for content creators in a networked world, allowing the creators to indicate how content can be used and shared, commercially or non-commercially, and whether it can be “copied, distributed, edited, remixed, and built upon.” Today, over 50 jurisdictions (nations) have ported Creative Commons licenses, spanning sectors such as technology, science, government, journalism and entertainment. Some high profile users of Creative Commons include Google, Flickr, Al Jazeera, Wikipedia, Nine Inch Nails and even The White House.

On The Power of Open website, created by WebFWD Fellow and CASH Music founder Jesse von Doom (@jessevondoom), you can read many more stories of how CC licenses are being used. Not surprising then that today’s presenter, Creative Commons advisor Eric Steuer, also sits on the board of CASH Music.

Eric ShepherdA writer’s inspiration: The designers of that game

Back in the olden days, I used to be a programmer writing code for a computer game company. It was hard, unglamorous work, and once the initial excitement wore off, it really became “just a job,” rather than something I loved to do. However, what drove me over the edge into outright hating the entire industry was a particular project that led me to question not my own sanity, but the sanity of artists who thought they were game designers.

Let’s see if I can tell the tale without using names.

Back in the mid-to-late 1990s, lots of movie studios were setting up game development studios to take advantage of languishing properties that they might be able to turn a fast buck on by turning them into games, or, with luck, game franchises. One of these decided to take a family movie from the ’60s and see if they could get an educational game made out of it.

They selected a team of artists — the operators of an outfit in Southern California that produced 3D animation for commercials and other projects — to design this game. That was their third mistake (the second being their selection of a project, and the first being the setting up of an “interactive” division in the first place).

These artists came up with a game idea, got it approved, and subcontracted out the programming to us.

They then proceeded to ignore every bit of design advice we gave them about what was remotely possible using 1997 software technology targeting computers that would be commonly found in schools and homes with small children. We would have meetings explaining how their designs were not possible to achieve, and they would apologize and make changes that made things even worse.

Over time, their grand design did gradually get scaled back — not by removing the impossible features, but by stripping out vast chunks of the game, leaving what had been envisioned as some two dozen scenes with fun, interactive puzzles as just short of 20 screens with animations that would activate when items were clicked and a few mediocre not-really-puzzles. In order to accommodate their poor design choices, multiple versions of the various animation sequences were required to cope with the cases where two animations could overlap one another; we would then select the video to play based on how many animations were supposed to be running, and play one movie covering both animating objects.

On top of all that, their lusciously, beautifully rendered cartoon graphics (and, yes, the artwork was beautiful) would sing and perform, with really quite nice voice acting and music. Except often they would sing songs that included inappropriate lyrics. Then there was the dance that included moves so suggestive that when I first got the video files, my jaw hit the keyboard, and I summoned everyone else in our company to see it, upon which they had to collect their jaws off my office floor.

Not long after that, the designers decided we were so far behind schedule that they moved into our offices and set up a dozen SGI workstations on our conference table to render videos, so they could make all the adjustments needed as we pointed out all the ways they had violated the set of rules we gave them for what they could and could not do in order to pack all this stuff onto a single CD-ROM. It was around that same time that the project manager from the movie-studio-interactive company started hanging around our office despite our having no actual direct business relationship with them. That was awesome too.

By the end of the project, there had been four-day-weekends during which I got less than 3 hours’ total sleep, weeks in which I worked 170+ hours, and actual physical fights in the office. In addition, there was the time I literally fell asleep, face on my keyboard, and one of the designer guys saw me and yelled at me for sleeping, despite having been there for over 20 hours.

As that project wound down, I started looking for a way out of the game business. I’ll continue that story in my next post, since this is a good place to break this one off. I’ll wrap up by saying that the game in question did ship, although less than 3000 copies were delivered, and the movie-studio-interactive company in question folded up not long after that.

Joe StagnerWhere are you Joe ?

I’ve had a couple of email recently asking what I’m up to.

Which, of course, means that I’ve been remis with my blogging.

I’ve been traveling, sick, growing ever sicker of tooth problems, etc. – but I’ve also been immersed HTML5 App building and helping organizations all around the world get started in building Apps for the Mozilla App store. (https://developer.mozilla.org/en/Apps/Getting_Started)

I still get an email or two a day from people who are just realizing that I’ve left Microsoft.

I’m planning to getting back to writing articles and doing videos in the next few weeks. Though I won’t be doing ASP.NET.)

So, feel free to post your thoughts on what content I should work on.

I’m planning an HTML5 podcast as well.

 

 

Siddharth AgarwalMSVC9+ opt builds currently broken due to a compiler bug

Optimized builds with Microsoft Visual Studio 2008 (VC9) and above are currently broken because of what we believe is a compiler bug. More information and workaround in bug 718541.

Bogomil ShopovRust Language – Hello World

What is RUST?

Rust is an experimental, concurrent, multi-paradigm, compiled programming language developed by Mozilla Labs. It is designed to be practical, supporting pure-functional, concurrent-actor, imperative-procedural, and object-oriented styles. /wikipedia/

How to install it on your Gnu/Linux box?
Pre-requirements:

  • g++ 4.4 or clang++ 3.x
  • python 2.6 or later
  • perl 5.0 or later
  • gnu make 3.81 or later
  • curl


Download latest version (0.2 pre at the moment)

git clone https://github.com/mozilla/rust.git

Make it

$cd rust
$./configure
$ make & make install

Note:

It takes a lot of time and you do need an active internet connection during the compiling process.

Hack
Open your Geany or your favourite IDE and write this:

use std;
 
fn hello_world(name: str) {  
	let greetings: str = "Hello World, "+ name +"! and Здравей свят! and 您好,世界!";
	std::io::println(greetings);
}
 
 
fn main(args: [str]) {
	hello_world(args[1]);
}

Save it as helloworld.rs

Compile it

$rustc helloworld.rs

Execute

$./helloworld.rs Bogo //put here your name

Siddharth AgarwalMore experiences with an Apple notebook

It's now been eight months since I got my first Apple notebook. A few months ago I wrote about my initial opinion, where I was pretty sure it would be my last Apple notebook too.

Since then I've had the chance to use it in a variety of situations. Spoiler: none of what I've seen has improved my opinion of it one bit.
  1. The decision to make the outer body out of aluminium is literally shocking. If the notebook isn't plugged in to a grounded socket (for instance, if I'm using the plug that comes with the power brick BY DEFAULT), I'm liable to get electric shocks if I touch the casing. I received a couple of shocks, a mild one and a jolting one, before I realized what was happening. Electrical common sense is that if the outer surface is electrically conducting, it MUST be grounded properly. Having an ungrounded plug by default, or even having one in the first place, is inexcusable. (Update: I've had several people complain to me about this, and one person also complain about his plastic macbook's screws shocking him several times. I'm clearly not the only one with this issue.)
  2. The Wi-Fi reception is the worst I've ever seen in a laptop, and only slightly better than the reception my Nexus S with its puny little antenna gets. Friends tell me it's because the aluminium casing acts as a Faraday cage and attenuates the signal. The "unibody" marketing's clearly far more important to Apple than shipping a working product. (Update: guess who says metal has a "very high" potential to interfere with wireless connections?)
  3. The original power adapters were T-shaped. However, presumably because Apple didn't like the look of and subsequently didn't include the strain-relieving flexes found on all other cables, they were easily frayed. To "fix" this, they started using L-shaped adapters. Of course, what it now means is that depending on the way I insert it, either the power cord blocks the Ethernet port or it gets subjected to strain if I tilt the notebook back.
  4. There's no VGA, DVI or HDMI port, so I need to carry around a set of three dongles everywhere I go. There's plenty of space on the left side, too, so that's not an excuse.
  5. The lack of working sleep is more annoying than I thought it would be. Amazingly, the EFI equivalent to the POST takes almost as long as Windows resuming from hibernation. A few people seem to be working on getting Windows to boot via EFI, and my hopes are mostly pinned on that.
My iPod nano media player, the only other Apple product I own, is actually well-designed (save for the fact that I need to keep the piece of crap called iTunes around on my computer, even though I don't need to use it.) This is not. This stinks of form-over-function failure.

Edit (25/1): Two inline updates.

Luke WagnerJSRuntime is now officially single-threaded

Given this title, a reasonable reaction would be:

Wait, wait, single threaded?!  But isn’t that, like, the wrong direction for the multicore present and manycore future?

so let me start by clearing this up:

A single SpiderMonkey runtime (that is, instance of JSRuntime) — and all the objects, strings and contexts associated with it — may only be accessed by a single thread at any given time. However, a SpiderMonkey embedding may create multiple runtimes in the same process (each of which may be accessed by a different thread).

That means it is up to the embedding to provide communication (if any) between the runtimes via JSNative or other SpiderMonkey hooks. One working example is the new implementation of web workers in Firefox which uses a runtime per worker. Niko Matsakis is experimenting with a different architecture in his new parallel JS project.

So that’s the quick summary. Now, for the interested, I’ll back up and explain the situation, how we got here, and where we are going in more detail.

Ghosts of SpiderMonkey past

In the beginning, as Brendan explains, Java-style big-shared-mutable-heap concurrency was all the rage and so, as Java’s kid brother, SpiderMonkey also had big-shared-mutable-heap concurrency. Now, locks weren’t ever (afaik) exposed to JS as part of SpiderMonkey, but an embedding could add them easily with a JSNative. However, SpiderMonkey did support concurrent atomic operations on objects with a clever (patented, even) locking scheme that avoided synchronization overhead for most operations.

This initial threading design stayed in place until about a year before Firefox 4.0 when the compartments project picked up steam. The key new concept introduced by this project was, well, the compartment. A runtime contains a set of compartments and each compartment contains a set of objects. Every object is in exactly one compartment and any reference between objects in different compartments must go through a wrapper. With compartments and wrappers, you can implement a sort of membrane that is useful for all kinds of things: GC, security boundaries, JIT compilation invariants, memory accounting, and JS proxies. Overall, I would say that compartments are one honking great idea.

The important thing about compartments for this story, though, is that the implementation effort really wanted single-threaded access to everything in a compartment. To be honest, I don’t know the particular technical issue raised at the time, but it isn’t hard to see how single-threaded-ness was a necessary simplification for such a challenging plan (viz., shipping compartments with Firefox 4). Anyway, the decision was made and compartments became single-threaded.

After Firefox 4 another great choice was made to rewrite Firefox’s implementation of web workers to not use XPConnect and to instead create a new runtime per worker. The choice was made because, even though a runtime allowed multi-threaded execution, there were still some global bottlenecks such as GC and allocation that were killing workers’ parallelism.

I’m Talking About Drawing a Line in the Sand

With web workers in separate runtimes, there were no significant multi-threaded runtime uses remaining. Furthermore, to achieve single-threaded compartments, the platform features that allowed JS to easily ship a closure off to another thread had been removed since closures fundamentally carry with them a reference to their original enclosing scope. Even non-Mozilla SpiderMonkey embeddings had reportedly experienced problems that pushed them toward a similar shared-nothing design. Thus, there was little reason to maintain the non-trivial complexity caused by multi-threading support.

There are a lot of things that “would be nice” but what pushed us over the edge is that a single-threaded runtime allows us to hoist a lot data currently stored per-compartment into the runtime. This provides immediate memory savings and also enables another big change we want to make that would create a lot more compartments (and thus needs compartments to be lighter-weight).

Thus, the decision was made to try to make SpiderMonkey single-threaded as an API requirement. A bug was filed in April 2011 and an announcement was made on dev.tech.js-engine a month after.

Across this line you do not…

April 2011 to… January 2012… what took so long?

Well, to begin with, there were quite a few minor uses of JSRuntime off the main thread that had to be chased down. Also, each of these cases required understanding new parts of the codebase and, in several cases, waiting a few months for other kind-hearted, but very busy, Mozillians to fix things for me. The biggest problem was xpcom proxies (not to be confused with JS proxies, which are awesome). Fortunately, Benjamin Smedberg already had a beef with xpcom/proxy and (just recently) nuked the whole directory from orbit.

After getting try server to pass without hitting any of the 10,000 places where single-thread-ness gets verified in debug builds, we couldn’t exactly just rip out the multi-threading support. The worry we had was that some popular add-ons would break the whole browser and we’d be faced with an uncomfortable backout situation. Thus, we landed a simple patch that asserts single-threaded-ness in a few pinch points in release builds and waited for the assert to make its way to a bigger audience. (I think this is a great example of how the rapid-release process enables developers.)

As of right now, the assert is in Firefox 10 Beta and slated to be released on January 31st. There are three known offending extensions:

  • The IcedTea Java plugin on Linux seems to hit the assert for some applets.
  • BExternal.dll and gemgecko.dll are touching the main-thread only pref service off the main thread (already a bug) which ends up calling a JS observer.

Fortunately, the latter two DLLs make up 99% of the aborts in crash-stats, so, if need be, we can just blocklist them.

Based on these results, we are concluding that the invariant “stuck” and thus we can actually make changes that assume single-threaded-ness. Indeed, the first bomb has been dropped (taking along 2200 lines of code along with it, and this is just the beginning).

The single-threaded invariant in detail

Each runtime now has an “owner thread” (JSRuntime::ownerThread). The “owner thread” is the id of the only OS thread allowed to touch the runtime. This owner thread is set to the current thread (PR_GetCurrentThread()) from JS_NewRuntime and may only be changed — when no JS is executing in the runtime — via JS_ClearRuntimeThread/JS_SetRuntimeThread. Virtually every JSAPI function that takes a JSContext parameter will assert that PR_GetCurrentThread == cx->runtime->ownerThread().

It should be mentioned that there are still a few remaining sources of concurrency:

  • The background-sweeping thread cleans up garbage objects which don’t have finalizers. Its interaction with the VM is pretty well isolated to the GC.
  • Pretty much the only JSAPI function that can be called off the main thread is JS_TriggerOperationCallback. This is how the the watchdog thread stops runaway JS. Fortunately, the interaction with the VM is through a single field: JSRuntime::interrupt.

One last thing to point out is that SpiderMonkey’s architecture will likely continue evolving to meet new concurrency needs. Indeed, concurrent runtimes may one day return in a more restricted and structured form. But maybe not; we’ll see.

Nicholas NethercoteMemShrink progress, week 32

There wasn’t much MemShrink activity this week in terms of bugs fixed, just bug 718100 and bug 720359.  So I’m going to take the opportunity this week to talk about the bigger picture.

Bug Counts

As a prelude, here are this week’s bug counts.

  • P1: 20 (-4/+0)
  • P2: 131 (-3/+3)
  • P3: 74 (-2/+7)
  • Unprioritized: 4 (-3/+4)

The drop in P1s was just due to bug re-classification;  in particular, three bugs relating to long cycle collector pauses were un-MemShrink’d because they are more about responsiveness, and they are being tracked by Project Snappy.

The Big Ticket Items

David Mandelin asked me today what where the big ticket items for MemShrink.  I’d been looking a lot at the MemShrink:P1 list recently (which is why some were re-classified) and so I was able to break it down into six main areas that cover most of the P1s and various P2s.  I’ll list these from what I think is least important to most important.

#6: Better Script Handling

Internally, a JSScript represents (more or less) the code of a JS function, including things like the internal bytecode that SpiderMonkey generates for it.  The memory used by JSScripts is measured by the “gc-heap/scripts” and “script-data” entries in about:memory.

Luke Wagner did some measurements that showed that most (70–80%) JSScripts created in the browser are never run.  In hindsight, this isn’t so surprising — many websites load libraries like jQuery but only use a fraction of the functions in those libraries.  If SpiderMonkey could be changed to generate bytecode for scripts lazily, it could reduce “script-data” memory usage by 60–70%.  This would also allow the decompiler to be removed, which would be great.

Luke also proposed sharing immutable parts of scripts between web pages.  This would avoid a lot of duplication in the case where you have many tabs open with pages from a single site.

Both of these changes potentially will make the browser faster as well, because SpiderMonkey will spend less time compiling JavaScript source code to bytecode.

No-one is assigned to work on these bugs.  The lazy script creation can be done entirely within the JS engine;  the script sharing requires assistance from Necko.  Luke is currently busy with some other righteous refactorings, but I’m quietly hoping once they’re done he might find time for one or both of these bugs.

#5: Better Memory Reporting

Before you can reduce memory consumption you have to measure it.  about:memory is the critical tool that has facilitated much of MemShrink’s work.  (For example, we never would have known about zombie compartments without it.)  It’s in pretty good shape now but there are two major improvements that can be made.

First, the “heap-unclassified” number (a.k.a “dark matter”) is still typically around 20–25%.  My goal is to reduce that to 10%. This won’t require any great new insights, we already have the tools and data required.  Rather, it’s just a matter of grinding through the list of memory reporters that need to be added and improved.

Second, the resources used by each browser tab are reported in an unwieldy fashion:  JS memory on a per-compartment basis;  layout memory on a per-docshell basis;  DOM memory on a per-window basis.  Only a few internal architectural changes stand in the way of uniting these to provide the oft-requested feature of per-tab memory reporting.  This will be great for users, because if Firefox is using more memory than they’d like, it tells them which tabs they should close in order to free up memory.

I am actively working on both these improvements, and I’m hoping that within a couple of months they’ll be mostly done.

#4: Better Memory Consumption Tracking

One thing we haven’t done well in MemShrink is to improve the state of tracking Firefox’s memory consumption.  We have plenty of anecdotes but not much hard data about the improvements we’ve made, and we don’t have good ways to detect any regressions.  A couple of ideas haven’t gone very far, but some good news is that John Schoenick is making great progress on a proper areweslimyet.com implementation.  John has demonstrated preliminary versions of the site at two MemShrink meetings and it’s looking very promising.  It uses the endurance test framework to make the measurements, and opens lots of pages from the Talos tp5 pageset.

We also hope to use telemetry data to analyze how the memory consumption of each released version of Firefox stacks up.  That analysis would come with a significant delay — weeks or months after each release — but it would be much more comprehensive than any oft-run benchmark, coming from the real-world usage patterns of thousands of users.

#3: Compacting Generational GC

If you look in about:memory, JavaScript memory usage usually dominates.  In particular, the “js-gc-heap” is usually large.  There’s also the “js-gc-heap-unused-fraction” number, often 30% or higher, which tells you how much of that space is unused because of fragmentation.  That percentage overstates things somewhat, because often a good proportion of that unused space (see “js-gc-heap-decommitted”) is decommitted, which means that it’s costing nothing but address space… but that is cold comfort if you’re suffering out-of-memory aborts on Windows due to virtual memory exhaustion.

A compacting garbage collector is one that can move objects around the heap, filling up all those little gaps that constitute fragmentation.  The JS team (especially Bill McCloskey and Terrence Cole) is implementing a compacting generational garbage collector, which is a particular kind that tends to have good performance.  In particular, many objects die young and generational collectors find these quickly, which means that the heap will grow at a significantly slower rate than it currently does.  I could be wrong, but I’m convinced this will be a big win for both memory consumption and speed.

#2: Better Foreground Tab Image Handling

Images are stored in a compressed format (e.g. JPEG, PNG, GIF) on disk.  In order to display them, a browser must decompress (a.k.a decode) the compressed form into a raw pixel form that can easily be ten times larger.  This decoded form can be discarded and regenerated as necessary, and there are trade-offs to be made — for example, if you are too aggressive in discarding decoded images, you might have to decode them again, which will take CPU cycles and the user might see flickering if the decoding occurs in the visible part of the page.

However, Firefox goes way too far in the other direction.  If you open a page in the foreground tab, every single image in that page will be immediately decoded, and none of the decoded data will be discarded unless you switch away to another tab.  For pages that contain many images, this is a recipe for horrific memory consumption, and Firefox does much worse than all the other browsers.  So this is a problem that doesn’t rear its head for all users, but it’s terrible for those that are affected.

There are three MemShrink:P1 bugs relating to this:  one about not decoding all images immediately, one about discarding non-visible decoded images after some time, and one about some infrastructure work that is required for the first two.  As far as I know, no progress has been made on these three bugs, and although two of them are assigned they are not being actively worked on.

(See this discussion on the dev-platform mailing list for more details about this topic.)

#1: Better Detection and Notification of Leaky Add-ons

It’s been the case for several months that when a user complains about Firefox consuming an excessive amount of memory, it’s usually because of one or more add-ons, and the “can you try that again in safe mode?” / “oh yeah, that fixes it” dance is getting tiresome.

Many add-ons leak.  Even popular, well-written ones:  in the past few months leaks have been found in Adblock Plus, Video DownloadHelper, GreaseMonkey and Firebug.  That’s four of the top five add-ons on AMO!  We’re now getting several reports about leaky add-ons a week;  in this week’s MemShrink meeting there were four:  TorButton, NoSquint, Customize Your Web, and 1Password.  I strongly suspect the leaks we know about are just the tip of the iceberg.

Although leaks in add-ons are not Mozilla’s fault, they are Mozilla’s problem:  Firefox gets blamed for the sins of its add-ons.  And it’s not just memory consumption;  the story is the same for performance in general.  Here’s the quote of the week, from a user of 1Password:

I only use a handful of extensions and honestly never suspected 1P, however after disabling it I noticed my FireFox performance increased very noticibly. I’ve been running for 48 hours now without the 1P extension in Firefox and wow what a difference. Browsing is faster, switching is faster, memory usage is way down.

I’ve lost count of the number of stories like this that I’ve heard.  How many users have we lost to Chrome because of these issues, I wonder?

(And it’s not just leaks.  See this analysis of 16 add-ons and their effect on memory consumption when Firefox starts.)

One small step towards improving this situation was made this week:  Jorge Villalobos and Andrew Williamson added a “check for memory leaks” item to the AMO review checklist (under “Memory leaks from content”).  And Kris Maglione added some support for this checking in his Extension Test add-on.  This means that add-ons with obvious memory leaks (and many of them are obvious if you are actively looking for them) will not be accepted by AMO.

So that will prevents leaks in some new add-ons and new versions of established add-ons.  What about existing add-ons?  One idea is that AMO could also have a flag that indicates add-ons that have known memory problems (and other performance problems).  (This flag wouldn’t be an automatic thing, it would only be set once a leak has been confirmed, and after giving the author notification and some time to fix the problem.)  So that would also improve things a bit.

But lots of add-ons aren’t hosted on AMO.  Another idea is to have a stronger mechanism, one that informs the user if they have any add-ons installed that are known to cause high memory consumption (or other bad performance problems).  There is an existing mechanism for blocking add-ons that are known to be malware or exceptionally crashy, so hopefully the warnings could piggy-back on top of that.

Then, we need a better way to detect leaky add-ons.  Currently this is entirely done manually — and a couple of excellent contributors have found leaks on multiple add-ons — but I’m hoping that it’ll be possible to do a much more thorough job by analyzing telemetry data to find out which add-ons are correlated with high memory consumption.  That information could be used to trigger manual checking.

Finally, once you know an add-on leaks, it’s not always easy to work out why.  Tools could help a lot here, if they can be made to work well.

Conclusion

I listed six big areas for improvement. If we fixed all of these I think we’d be in a fantastic position.

Three of them (#5 better memory reporting, #4 better memory consumption tracking, #3 compacting generational GC) have people working on them and are in a good state.

Three of them (#6 better script handling, #2 better foreground image tab handling, #1 better detection and notification of leaky add-ons) don’t have people working on them, as far as I know.  If you are willing and have the skills to contribute to any of these areas, please contact me!

And if you think I’ve overestimated or underestimated the importance of any issue, I’d love to hear about it.  Thanks!

Meeting Notes from the Mozilla communitySeaMonkey Meeting Minutes: 2012-01-24

SeaMonkey/StatusMeetings/2012-01-24

« last meeting | index | next meeting »

SeaMonkey Meeting Details

Contents

Agenda

  • Who’s taking minutes? -> IanN/Callek dynamic duo

  • Nominees for Friends of the Fish Tank:
    • InvisibleSmiley nominates Jake Maul for fixing MXR bug 653424

    • IanN nominates jtek for his work on the new online shop.
    • IanN nominates InvisibleSmiley for his sync restartless add-on work.
    • Please note A person or entity can’t be nominated twice in a row.
Action Items

(who needs to do what that hasn’t been recorded in a bug) We should assign people to the open items.

NEW

OPEN

  • IanN to write the “Friends of the Fish Tank” F.A.Q.
Status of the SeaMonkey Buildbot Master and Tree
  • Current Issues with existing machines

    • one linux VM — Hosted on parallels, kernel panicking, No bug yet, but will get it done ASAP

    • problems with creating a second linux VM — will either fix or reclone this week.
    • one win VM, switched from FAT32 to NTFS for one of its drives, need to recreate folders appropriately.
  • “Where do we stand with the machine(s) right now?”
    • bug 702490 (Rack 2 – 1U mac mini chassis(4 Mini’s) in SCL2 for SeaMonkey).

      • (2011-12-01) Servers are now at SCL2 and waiting on emux to provide power/network for them.
Release Train
  • 2.7b4 shipped on January 20.

    • This included the fix for news bug 695309 so 2.7 will have this SM 2.5/2.6 issue fixed, too.
  • Linux64 has live updates all the way to 2.6.1 for release, and on 2.7b4 for beta.
  • 2.7b5 is awaiting 1 (possibly 2) mailnews patches [Callek to supply bug numbers], hopefully be spun late this evening as final beta before 2.7 final.
  • The next six-weekly merge will be on January 31.
  • Get comm-aurora and comm-beta on MXR (bug 653424).
    • Jake Maul [:jakem] fixed it! comm-aurora, comm-beta, comm-release and comm-2.0 available now on MXR. :-)

    • comm-2.0 will not have any scheduled updates, the others will have scheduled daily updates.
  • en-GB patches are now getting reviewed so no need for a Coup d’état!
  • “Hotfix add-on” will not be shipped for 2.7, due to need to sort out certs and signing the add-on. Solution will be patches provided by Firefox/MoCo to land on a relbranch which we will have to test.
Extensions Compatibility Tracking

We need some help with the add-ons listed under the “2.0x” heading. Anything above it will work out of the box with SM 2.7 and later (yay to compatible-by-default!). Perhaps Ratty can go through his xSidebar site and check which add-ons are not compatible with at least SM 2.1 – that would help, too.

  • Addon Compatibility Listings, mostly maintained by InvisibleSmiley

    • Recent changes can be found here.

    • Identified Quote Colors add-on as responsible for breaking the status bar of the Mailnews stand-alone message window. InvisibleSmiley sent a patch to both the add-on’s author and Ratty (who hosts a modified version on his website).
    • ACR 1.0.2 breaks AOM search when used with trunk, Aurora or Beta (bug 715493). Fix checked in upstream, pending new release version.
  • Enigmail provides versions for release (AMO) and all branches (Enigmail nightly page). The current release is compatible with both 2.5 and 2.6.
  • Lightning provides versions for the current stable and beta releases (AMO) and nightlies for trunk and Aurora (Calendar Versions page). Lightning 1.2b2 is available from AMO now (Development Channel) and should be available in time for future betas.
  • The latest Firebug is now fully compatible but still not flagged as such on AMO. This depends on automatic tests being set up and run on the Firebug side (bug 680837, needs a Python coder). Stable Firebug version 1.9.x works with any recent SM version.
  • Besides the above, we should also take a look at other add-ons that are important for our users when they switch to 2.x.
  • The SeaMonkey Features page links to sub-pages for all recent SM versions, including those in development. Please help InvisibleSmiley add major features to the respective pages, ideally as they land. These pages are used when creating release notes, so the more up-to-date the better.
2.x (Last, Current, Next)
  • As stated above, news bug 695309 landed on Beta and will be in SM 2.7 proper.

  • 2.6 had ~79,000 ADU by last Thursday and 2.6.1 has had ~82,000 downloads so far.
    • Of the released versions, as of last Thursday, we have 18.9% on 2.0, 6.7% on 2.1-2.3, 6.3% on 2.4, 8.5% on 2.5 and 59.5% on 2.6. So, in the last two weeks, ~2k (an additional 1.6% of ADU) have migrated to 2.5 or above.
  • Figure out what is preventing people from moving from 2.0.x to the latest versions.
    • Perhaps putting resources into getting certain extensions working with SM 2.4 and above (those that won’t work with SM 2.7 automatically due to compatible-by-default extensions).

    • Still need volunteers to look at what is keeping people at below 2.4. IanN could try knocking something up and send it round members lists for polishing but he’s not on all the channels (mozillazine, etc) to post it to when finished.

Usual reminders:

  • Please make sure that anything that landed on comm-beta (for TB) or mozilla-beta (for FF) which affected non-shared code and which fixed regressions will be fixed on our side, too. Please mark bugs we feel *need* to land on a particular train tracking+ or tracking? so that when we to do a release we can be sure that we don’t miss anything.

    • Priority should be given to fixing regressions ASAP. Also keep an eye on and prioritize bugs to be ported from FF/TB that land on branches (Aurora, Beta). We need to keep an eye especially on Session Restore, Sync, Tabbrowser and Address Book.

    • Be careful not to break code shared with Thunderbird, otherwise patches might have to be backed out of string frozen repositories.
2.6

open tracking (0)
tracking requests (0)
targeted (0)
fixed (40)

  • One tracked 2.5 issue still open.

    • 2.1 through 2.6.1 have NOT included the ka locale. The last release with ka locale shipped was 2.0.14 and the ka l10n maintainers have not yet updated for changes in later SeaMonkey versions.

    • Callek now needs to morph bug 667147 into removing |ka| from our [current] automation entirely (all-locales). Callek will look at best locale to transition any ka users to.
  • The New 2.6 Features page has a comprehensive list of features.
2.Next
  • InvisibleSmiley created a restartless add-on for SM 2.8 (available on AMO, pending review) which adds an “Add-ons” options to the list of engines on the Sync pref panel. See bug 713087 for details.

  • Remember to help update the New Features pages as we go along.
Feature List, Planning

Bug statistics for last two (full) weeks: 40 new, 35 fixed, 21 triaged.

  • Good triaging effort.

  • Good further triage targets could come out of looking at the component bug counts, pick yours!

Open reviews/flags:
30 review
16 super-review
0 ui-review
7 feedback

Major wanted/needed features:

Active
  • bug 606683 Allow customization of toolbar in Composer and MailNews Composition [IanN].

    • Progressing slowly, still waiting on reviews from TB side. Full customization has to go to 2.next (currently 2.6 but could be pushed back further) as it needs work on TB too which is taking a while to get reviews on, plus feedback from kaze.

    • IanN is still wading through the unpicking of Composer/Mail Compose code in the dependent bugs. After that he will be reworking his customising patches.
  • bug 477845 Build a standalone (Comm-central) Composer. [kaze]
    • kaze has done a bit of work in this bug recently. Building on Windows works. Now supports debug builds on Linux if tests are disabled (–disable-tests). Still a lot to do.

    • IanN was supposed to help get builds working with --enable-tests.
      • Will look into this once he gets his customization patches reworked.
  • Real full-screen (bug 610509) and DOM full-screen (bug 701714)
    • patches provided by Mnyromyr and InvisibleSmiley.
Needing help, Unowned, Stalled
  • Kill-RDF:

    • bug 657607 Port jminta’s kill-rdf to SeaMonkey where applicable Part 2 [meta].

    • bug 657604 Remove the RDF global object. [serge]
  • bug 436794 Enable Mac OS X system address book per default and add UI.
    • SM UI needed, unowned, helpwanted.
  • bug 449728 Drag tabs between windows.
  • bug 477840 Backport KompoZer to Composer (Depends on bug 477845).
    • 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 (Standard8).
  • bug 507841 Port Bug 422814 – Make account configuration quick, easy, and more secure (autoconfig, Quick Account Setup).
  • bug 533908 SeaMonkey Mail: tabs not restored [misak].
  • bug 523274 Complete new default theme icon set.
  • bug 526210 Update the icon set for the SeaMonkey Modern Theme.
    • bug 548778 New communicator icons (based on Strata theme) for SeaMonkey. Some proposed icons got posted, we should take a look how to get that contribution into the product.

    • The rest is unowned so far.
  • bug 87098 [SeaMonkey] Delete key should delete location bar history list entry.
    • Note: Our location bar history doesn’t and can’t use autocomplete at all.
  • bug 677484 Individual SeaMonkey components are not properly handled by the Windows 7 taskbar.
  • bug 654009 Reply to list: automatically determine From: address
    • Note: The actual task here is to port bug 45715 “Reply to List” [button/(context) menu item]
  • bug 664309 Make the built-in ChatZilla display a cZ icon in SeaMonkey (now helpwanted)
Roundtable – Personal Status Updates

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).

aceman has been doing some work that touches SM as well as TB especially around feeds, which is good stuff.

Aqualon
asrail
Callek

Completed Release Engineering tasks:

  • bug 715754 (SM2.7b3) Tracking bug for build and release of SeaMonkey 2.7 Beta 3.

  • bug 718676 /home/cltbld/.ssh should be mode 0700.
  • bug 719529 Put up snippets for linux64 minor and major updates to SeaMonkey 2.6.1 and Beta to SeaMonkey 2.7b4.

Build Config fixes:

  • bug 714495 Port bug 713167 |Microsoft.VC80.CRT SideBySide errors, browsercomps.dll| to comm.

  • bug 714574 Unable to upload trunk zh-TW on mac, due to SEARCH_PLUGINS failure.

Other fixes:

  • bug 714967 Export mozilla::services::Get* to external consumers as well.

  • bug 715802 Move quirks triggering into nsSuiteApp.cpp because bug 696376 caused our quirks to be triggered too late.

Working on:

  • bug 292569 Add support for #pragma once to headers.

  • bug 560772 Make use of mozilla::services for comm-central.
  • bug 591848 SeaMonkey linux and Windows machines need device support for sound enabled.
  • bug 714967 Export mozilla::services::Get* to external consumers as well.
ewong
  • Fixed:

    • bug 527173 – Spellchecker settings are in the Mail section but the SP is used by all components

    • bug 620776 – Add UI for new plugins.disabled preference
    • bug 688745 – Opening website from RSS: “Open in new tab” not available in context menu
    • bug 716186 – Simplify @media queries like like bug 713822.
    • bug 718356 – remove Debug > XUL Test Suite menu of failing tests
  • Needs Review:

    • bug 707786 – Use Services.prefs instead of preferences-service / gPrefService, in SeaMonkey

    • bug 717493 – Port |Bug 717491 – “Warning: package error or possible missing or unnecessary file: bin/components/proxyObject.xpt (package-manifest, 151).”| to SeaMonkey
  • Working On:
IanN
  • Usual testing, reviewing and commenting.

  • Fixed:
    • bug 718515 Update messenger compose window’s mail toolbar to use removable attribute

    • bug 718517 Add print button as an option to messenger compose mail toolbar
    • bug 702098 Update en-GB for Firefox 10.0/Thunderbird 10.0/SeaMonkey 2.7 (2 patches)
    • bug 713355 Update en-GB for Gecko 11.0 (mozilla-aurora)
    • bug 713356 Update en-GB for Firefox 11.0 (mozilla-aurora)
    • bug 713358 Update en-GB for Editor 11 (comm-aurora)
    • bug 713371 Update en-GB for Thundebird 11 (comm-aurora)
    • bug 713374 Update en-GB for SeaMonkey 2.8
    • bug 713375 Update en-GB for Calendar/Lightning 1.3
    • bug 719130 Open in new tab context menu option does not work if no SeaMonkey browser window already open [Chatzilla]
  • Waiting for review on:
    • bug 638643 Remove obsolete EditorToggleParagraphMarks from editor.js

    • bug 719080 [en-GB] Search Engine modification for SeaMonkey
    • bug 705458 [en-GB] add Twitter Search Engine for Fx (en-GB)
    • bug 720661 Display account central when no default account / no accounts setup
  • Waiting for additional review on:
  • Reviewed and waiting for feedback from mobile peer:
    • bug 689253 Update en-GB for Mobile 10.0 (comm-aurora)
  • Working on:
    • bug 606683 Allow customization of toolbar in Composer and MailNews Composition

    • bug 639690 [META] Re-arrange code between editor and editorOverlay
    • bug 657234 Move pasteQuote and pasteNoFormatting into contentAreaContextOverlay
    • File/Folder selection in windows.
  • To Do:
    • bug 639395 Get cmd_fontSize to reflect current state of selected content / content at caret.

    • Prefs-in-a-tab.
    • Create FAQ for Friends of the Fish Tank.
    • Contact people affected by proposed changes to Project Areas.
    • Knock something up finding out why users are not upgrading to 2.4+ and send it around members lists for polishing.
    • Help get composer standalone builds working with –enable-tests.
InvisibleSmiley
  • ToDo:

    • bug 701714 Add support for DOM full-screen

    • bug 640420 Add draggable splitter between urlbar and searchbar
    • bug 711334 Be explicit that TLS version is 1.0
    • look into
      • bug 698038 Update Preferences help for the new section to control crash report

      • bug 696757 Port “Time range to clear” from Firefox to SeaMonkey’s “Clear private data” dialog
    • track
      • bug 687316 (Remaining) Sync changes to port to Suite
KaiRo
mcsmurf
Misak
Mnyromyr
MReimer
Neil

Fixed:

  • bug 713405 Can’t drag-n-drop from the address book sidebar.

  • bug 713565 Recipient type reverts to “To:” when adding contacts from sidebar or drag-n-drop.
  • bug 717111 Plain text editor context menu broken since landing of fix to bug 702019.
  • bug 717587 Need to support new MathML3 href attribute.
  • bug 720225 click in empty messagepane reopens MailNews in Browser.

Working on:

  • bug 707305 Re-enable building with --enable-incomplete-external-linkage (MailNews Core).
Ratty

Fixed:

  • bug 714452 Auto-save happens even if message is currently being sent (Port Thunderbird bug 307028).

  • bug 714595 Simplify FillIdentityList() and getCurrentIdentity().
  • bug 719034 Support CTRL-SHIFT-K as the Lighting Task Quick Filter hotkey.
  • bug 719050 Lightning aero #button-delete style makes the SeaMonkey Mail delete button image disappear [Lightning].

Waiting for feedback:

  • bug 701432 Add support for fave icons on jump list uri entries.

ToDo:

  • Fix Customize code in the new Lightning toolbars.

Other:

  • Bug triage and Bug discussions.

  • End user support and PR in newsgroups and Mozillazine.
Ricardo
sgautherie
  • Fixed SeaMonkey (related) bugs:

    • bug 628589 [SeaMonkey] mochitest-plain-3: permanent “TEST-UNEXPECTED-FAIL | /tests/gfx/test_acceleration.html | Acceleration enabled on x86-64 OS X”. (Windows 2003 too)

    • bug 711937 [SeaMonkey] xpcshell: “TEST-UNEXPECTED-FAIL | [...]/test_clearHistory_shutdown.js | places-expiration-finished == places-connection-closed”
    • bug 714630 Port |Bug 713747 – Rip out non-UniversalXPConnect privilege manager functionality| to SeaMonkey
  • Fixed (or in-progress) MailNews Core bugs:
    • bug 714536 Port |Bug 698630 – Remove –disable-smil build option and “#ifdef MOZ_SMIL” wrappers| to comm-central

    • bug 714556 Port |Bug 644801 – Remove Native uconv from the tree| to comm-central
    • bug 716378 Port |Bug 655439 – Use $(LIBXUL_DIST)/bin/xpcshell instead of $(DIST)/bin/xpcshell| to comm-central
    • bug 716381 Port |Bug 673461 – ANGLE needs to stop automagically turning itself off in configure if the DirectX SDK is not found| to comm-central
    • bug 717376 Port |Bug 715576 – libalerts_s.dylib incorrectly links the static version of spidermonkey (in static-js configuration)| to comm-central
    • bug 611233 Improve (null) checks in nsImapService.cpp
  • Fixed (or in-progress) Core bugs:
    • bug 490384 mochitest-plain: random “test_bug466586.html | undefined”

    • bug 694353 “Warning: package error or possible missing or unnecessary file:” : freebl3.chk + nssdbm3.chk + softokn3.chk
    • bug 717753 [SeaMonkey] mochitest-a11y: test_focus_browserui.xul needs to support non-Firefox applications too
    • bug 718545 browser_keyevents_during_autoscrolling.js: Use EventUtils sendChar() and sendKey(), instead of synthesizeKey()
    • bug 719389 Fix “#ifdef MOZ_WINSDK_TARGETVER >= MOZ_NTDDI_LONGHORN” from bug 441197
    • bug 720071 “nsFilePicker.cpp(992) : error C2027: use of undefined type ‘IFileDialog’” when using”–with-windows-version=502″
    • bug 717868 [SeaMonkey] mochitest-plain-4: “test_reftests_with_caret.html | finished in a non-clean fashion” (in /tests/layout/base/tests/test_preserve3d_sorting_hit_testing.html)
    • bug 718237 [SeaMonkey] “accessible/events/test_focus_autocomplete.xul | Test timed out.” (which also causes lots of “gA11yEventListeners is undefined” on following tests)
    • bug 718239 mochitest-a11y failed, summary reports unexpected huge numbers for pass/fail. (“gA11yEventListeners is undefined”)
Stanimir
stefanh

Fixed:

  • bug 718392 [Mac] Restore non-highlight when hovering menus in content menubars.

Working on:

  • bug 425916 Improve look of mac treerows when in editing mode.

  • bug 713445 [Mac Default] tabbrowser tab title text styling is wrong in Lion.
  • bug 713446 White text with text-shadow in selected bottom tabs.
tonymec
  • Done:

    • Not much.
  • Ongoing: No change
    • Sm-Trunk live-testing

    • Some QA
    • Nigtly Tester Tools (as needed)
  • Problems:
    • bug 716232 SEGV crash in JS garbage collect at every startup of ChatZilla (with my settings)

      • I believe this regression might be due to the fix for bug 715883 Remove JSRuntime::gcEmptyArenaPoolLifespan (most likely-looking changeset in the regression window)

      • Don’t know whom to nag
      • In the meantime, I’m chatting with Konversation and/or cZ-in-Fx3.6
  • TODO:
    • TBD.
Any other business?
  • Need to review project areas

    • IanN has put out a final draft of the project areas list, and will then confirm that anyone who is not in the loop already has been consulted.

    • We will also need to update the Mozilla-wide list of official reviewers
  • Extended Support Releases (ESR)
    • At the moment looks like that will be based off Gecko 10 so that will be 2.7 for us. Assuming we have the machines, we will also have an ESR which might help move some of those still on 2.0 up to 2.7. We’re not likely to move to ESR until Gecko 10.0.1 or 10.0.2.

    • Our ESR should use the same branch as Firefox ESR so any Security and Stability “extended” fixes for Gecko will be picked up by the SeaMonkey ESR.
    • An ESR (Extended Security Release) may not be a given for us out of the gate. Callek thinks we should revisit that, separately, once it is clearer what MoCo’s general plans for their marketing/target/support levels etc. are.
    • mcsmurf is on the ESR mailing list and has volunteered to be our ESR goto guy.
  • Geolocation
    • Geolocation now works out of the box. MoCo turned it on by default for all applications that build off mozilla-central.

    • For comm-beta all we need to do is (bug 494421) to add pref("geo.wifi.uri", "https://www.google.com/loc/json"); to browser-prefs.js. However we’re not even sure we are legally allowed to ship with the URL in, we might need to actually put in a pref to disable that in newer builds.

Meeting Notes from the Mozilla communityThunderbird Meeting Minutes: 2012-01-24

Thunderbird/StatusMeetings/2012-01-24

last meeting | index | next meeting »

Thunderbird Meeting Details :

Remember to press *1 to unmute yourself before talking!

Feel free to ask questions in the meeting either by speaking up or by asking them in #maildev on IRC.

Other ways to get in touch with us can be found on our communications page

Agenda

  • Who’s taking minutes? –> sancus

  • Minute taking Schedule. Talk to Standard8 for schedule changes/additions.
  • Note: this meeting is for interactive discussion. Feel free to ask questions!
Action Items
Friends of the Tree

Thanks to our Friend of the Tree. When adding someone to this section, please get their T-Shirt size, phone number (needed for shipping!) and send it to rebron@mozilla.com so that he can send them a shirt!

Thunderbird Development

For more details, see also the driver meeting notes.

Feature Work
Test Pilot Tabs on Top
  • Fixed a bug that made buttons dragged beside the menubar have icons below text

  • Andreas will soon be landing a patch that will make the transition between the tab selector and message tabs easier on the eyes.
Big Files Account Provisioner
Schedule and Progress
Thunderbird 10
  • Releases on Tuesday, Jan 31
Thunderbird 11
  • Going to beta next week

  • Has Tabs on Top
Thunderbird 12 Thunderbird 3.1.x
Extension of the week

Google-contacts will let you share and sync your address book with your gmail account.

QA Updates
Marketing Updates
  • Recent articles 1, 2

  • Thunderbird ADUs around 7.8MM w/ Germany, US, France, Japan, and Italy leading the way.
  • Release work, Tb 10 and ESR announcements.
Infrastructure Update
Build / Release Update
  • On-deck this week: Thunderbird 10.0b5, 10.0 final, 3.1.18, 3.1.17->10.0b4 major updates
Web Update
  • working on TB10 content updates

  • This week
    • Thunderbird ESR pages & website support for ESR builds

    • Getting ready for TB10 release
    • TB11 compatibility bump
Documentation
Support

(If you support Thunderbird or write or translate documentation to help support Thunderbird, please subscribe to the tb-support-crew mailing list and briefly introduce yourself to the list

  1. Thunderbird 3.1 -> Thunderbird 10 upgrade test day is Thursday January 26 2012, this Thursday! If you want to help, create a new TB profile, revert to TB 3.1 and test upgrading with us on Thursday. Love to see you there! The more testing we do on Thursday, the less Support issues we’ll have when TB3.1 is EOL’ed.

  2. 1615 new support topics (542 one week ago) – Media:ThunderbirdGetSatisfactionMetrics16-22January2012-2012-01-23_1056.pngNOTE: last week’s numbers are low because GS’s stats failed to work for Monday-Wednesday of last week
  3. Thunderbird 9 Support Issues – Please edit and add any issues or bugs found in TB9 and tag them tb9
  4. Thunderbird 10 Support Issues – Please edit and add any issues or bugs found in TB10 and tag them tb10 – TB10 Release is next week, so backup up your Thunderbird profile, and try the TB 10 beta today if you have some time!
  5. See this week’s Support Appendix for full Get Satisfaction metrics and other support details
Lightning Updates
Status Updates

See the Mozilla Status Board for status updates specific to developers.

Roundtable Highlights
Attendees

Meeting Notes from the Mozilla communityMozilla Platform Meeting Minutes: 2012-01-24

Platform/2012-01-24

« previous week | index | next week »

Platform Meeting Details

  • Tuesdays – 11:00 am Pacific

  • Dial-in: conference# 95312
    • US/International: +1 650 903 0800 x92 Conf# 95312

    • US toll free: +1 800 707 2533 (pin 369) Conf# 95312
    • Canada: +1 416 848 3114 x92 Conf# 95312
  • Warp Core Vidyo Room
  • join irc.mozilla.org #planning for back channel

Contents

Notices / Schedule

  • Go to build for our final betas of FF3.6.26/10 was 2012-01-23

    • A decision about whether or not to ship add-ons compatible by default in FF10 (and with what prefs set) will be made during today’s channel meeting 2012-01-24
  • Final sign-off for FF10 will be 2012-01-25
  • Next source migration is 2012-01-31

Firefox Development

- bug 566489: inline autocomplete has landed thanks to efforts from David Dahl and Marco Bonardo. Marco has been fixing followups in an attempt to polish the feature for release, but we may end up disabling it on Aurora to get some extra bake time.

Firefox Developer Tools

Performance

  • Snappy (last week’s summary)

    • Smooth scrolling has landed on M-C (bug 198964)

    • Early preview of about:jank add-on
      • still buggy and requires recent Nightly
    • Networking team investigating slowdowns caused by cache. Also investigating locks being held on main thread by cache

GFX

JS

  • Landed bug 675078 – removing JSThread and JSThreadData. This removes multithreading support from SpiderMonkey (except for web workers, of course).

Layout

  • Notable Patches:

    • bug 698335 – Security Issue with bidi text

    • bug 536557 – Implement CSS3 text-align-last
    • bug 718513 – Synthetic bold does not work with src:local(…) @font-face declarations under DirectWrite
    • bug 716229 – Plain text in WWW pages now appears to be double-spaced
    • bug 708075 – the shaped-word caches should be flushed on memory-pressure notification
    • bug 675015 – Suppress synthetic mouse events due to scrolling until the scroll is complete
    • bug 524925 – Avoid reflows for transform changes
    • bug 665597 – Include margin calculations in FinishAndStoreOverflow
    • bug 627628 – be smarter about dispatching starved paints
    • bug 675015 – Suppress synthetic mouse events due to scrolling until the scroll is complete
  • Priorities:
    • Mobile Text

    • CSS flexbox
    • bug 689623 API for visible images
    • CSS Quarterly Meeting

Video

(someone please read)

  • Published demo build and demos of MediaStreams Processing API. Working to get this landed on trunk in pieces, starting with base MediaStreams infrastructure.

  • requestFullScreenWithKeys API under construction. See bug for proposed behavior. Need security feedback/review.(bug 716107)
  • Just need build system review to land new libcubeb audio backend for Windows. (bug 623444)

DOM

(no verbal update)

  • DOM bindings work week is this week.

WebAPI

  • Mozilla has joined the W3C DAP working group. (Jonas and Mounir has joined. Anyone else that’s interested should contact David Baron).

  • Network API landed for android! (Provides information about connectivity speed)
  • Experimental WebSMS landed for android.

Identity

Network

  • An IETF HTTP working group member posted a proposal to change their charter to take on HTTP/2.0 (and, likely, SPDY).

  • We’re on track to enable SPDY by default, at least for a week, when Firefox 13 development starts.

Plugins

  • Bug 90268, content ownership of plugins, is on track to land as soon as Firefox 13 development opens. Last known problem (“the Pandora problem”) was fixed yesterday.

Mobile

Accessibility

Tree Management

  • Hitting record high levels of test load!

    • 27,189 test jobs yesterday

    • 31,705 test jobs on jan 11
    • Doing ~110 hours of compute time per push [1]

Security

Security Review Needed but Unscheduled

Schedule with Curtis

If you believe your feature is on this list incorrectly or information has changed since the item was marked for review; please contact Curtis

Security Reviews Scheduled for this week

Date / Time Item
Wed Jan 25 / 13:00 PST Scheduling: more info soon
THU Jan 26 / 10:00 PST AVAILABLE
Fri Jan 27 / 10:00 AM PST AVAILABLE

Calendar and Meeting details

General Meeting Details
* IRC Channel: #security
* Etherpad: http://etherpad.mozilla.com:9000/secreview
* Vidyo: https://v.mozilla.com/flex.html?roomdirect.html&key=5XEMsG1ApA4b (Room 9058)
* Dial-in Info (phone):
** In office or soft phone: extension 92
** US/INTL: 650-903-0800 or 650-215-1282 then extension 92
** Toronto: 416-848-3114 then extension 92
** Toll-free: 800-707-2533 then password 369
** Conference num 99058

Stability Report

Socorro

Desktop

Trunk
Aurora
Beta
  • bug 720410 Low volume Mac crash but new to Beta.

  • bug 718724 Firefox Crash [@ nsHTMLReflowState::Init(nsPresContext*, int, int, nsMargin const*, nsMargin const*) ]
  • bug 718389 – startup crash that spiked in b5.
9.0.1

Mobile

  • Top crashes

    • http://bit.ly/tr4pBc – quite a few with fixes in progress

    • Working to make these actionable. Many issues are due to issue getting proper Java signatures.
  • Java signature fixes
    • bug 719373 is the meta bug that covers java crashes.

    • The Java in a different field is being handled by lars and cpeterson bug 701002 and bug 701390
    • Socorro work is targeted for Monday release.
  • Logged Java signature bugs
    • In the interim – Naoki sifted through the crash reports from the data gathered from bug 718907 and figured out the Java crash list.

    • The Java crash list covers more than just TouchBadMemory (12.43% ) of the crashes, It covers : mozalloc_abort | __swrite | dexDataMapAlloc, EMPTY: no crashing thread identified; corrupt dump, mozalloc_abort | dexDataMapAlloc, and a few others
    • bug 707683
    • bug 720515
    • bug 720613
    • bug 711988
  • Other
    • There are a number of arm_neon_fills bug 711852. We thought it would be fixed with the rotation fix, but it appears that it is a bit more than that.

Roundtable

QMOQA Community Action Plan

Good evening Community,

We are trying to develop a Community Action Plan to grow the community, recognize contributions, share knowledge, and ultimately make Firefox better. To do so, we need your help and feedback. If you have a moment please take time to read the discussion I’ve started.

Thank you in advance.

Ricky RosarioSUMO Development Update 2012.1

SUMO Dev goes agile

Inspired by the MDN Dev team, the SUMO Dev team decided to try an agile-style planning process in 2012.

To be fair, we have always been pretty agile, but perhaps we were more on the cowboy side than the waterfall side. We planned our big features for the quarter and worked towards that. Along the way, we picked up (or were thrown) lots of other bugs based on the hot issue of the day or week, contributor requests, scratching our own itch, etc. These bugs ended up taking time away from the major features we set as goals and, in some cases, ended up delaying them. This new process should help us become more predictable.

Starting out by copying what MDN has been doing for some time now, we are doing two week sprints. We will continue to push out new code weekly for now, so it is kind of weird in that each sprint has two two milestones within it. We will continue to name the milestones by the date of the push (ie, "2012-01-24" for today's push) and we are naming sprints as YEAR.sprint_number (ie, "2012.1" was our first sprint). We hope to will be doing continuous deployment soon. At that point we will only have to track one milestone (the sprint) at a time. For more details on our process, check out our Support/SUMOdev Sprints wiki page.

2012.1 sprint

We just pushed the second half of our first sprint to production. Some data:

  • Closed Stories: 26
  • Closed Points: 34
  • Total Stories: 26
  • Total Points: 34
  • Developer Days: 36
  • Velocity: .94 pts/day

Our major focus of this sprint was getting our Elastic Search implementation (we are in the process of switching from Sphinx) to the point where we can index and start rolling it out to users. After today's push, we will find out whether this is working properly. *fingers crossed* (UPDATE: we did hit an issue with the indexing.)

Other stuff we landed:

  • Initial support for the apps marketplace. Basically, a landing page and a question workflow that integrates with zendesk for 1:1 help.
  • KPI (Key Performance Indicator) Dashboard. We landed the first chart which displays % of solved questions (it has a math bug in it that will get fixed in the next push).
  • Some minor UI fixes and improvements.

2012.2 sprint

We are currently halfway through our second sprint. Our main goals with this sprint are to get Elastic Search out to 15% of our users and to add a bunch of new metrics charts to the KPI Dashboard.

In my opinion, this new planning process is going well so far. The product team has better insight into what the dev team is up to day to day. And the dev team has better sense about what the short term priorities are. Probably the most awesome thing about it is that we are collecting lots of great data. The part I have liked the least so far has been the actual planning sessions, I end up pretty tired after those. I think it just needs a little getting used to and it is only 1-2 hours every two weeks.

:-)

QMOFirefox 10 RC (or Beta 6) Testday

The Mozilla QA team is hosting a Testday this Friday, January 27th. We’ll focus on common web usage using the Firefox 10 release candidate builds, or beta 6, depending on when we generate RC builds. The purpose is to test general functionality and web site and add-on compatibility in preparation for the final release.

Everyone is welcome to participate. There’s no experience required. We’ll have moderators to answer questions and guide you throughout the day.

You can find more details in our Testday etherpad.

Please join us on Friday, and help us make Firefox even better. You’ll find us on irc.mozilla.org#testday between 1am and 5pm Pacific time. We’ll have the QA team and others in the Mozilla community on hand to help answer any of your questions.

  • Help us Test the Firefox 10 Release Candidate
  • Friday, January 27th, 2012
  • 1am – 5pm PST (09:00:00 a.m. Friday January 27 to 01:00:00 a.m. Saturday January 28, 2012 UTC)
  • IRC irc.mozilla.org #testday

Thanks for your interest in participating.

When: January 27, 2012.

Mozilla ITDecember 2011 in IT

As you may have noticed, we’ve missed a few of our weekly updates. We’ve had a rather rough go of it lately, and it’s about time for the highlight reel. Two major events stick out in hindsight.

#1, No email for two days

First up on the plate was a major Zimbra outage. This was sparked by a RAID failure in one of our HP Storage Blades, but rapidly escalated into a data-loss situation due to what can only be described as poor backup planning.

The short version: backups were being made regularly, but were not being reliably shipped off of the server. It took a lot of effort from IT and patience from our users (that is: all of Mozilla’s paid staff… thank you!) to get back on track.

Remarkably, this had relatively minimal affect on development or release cadence- it didn’t delay the Rapid Release train or close the tree, and newsgroups were unaffected. It may have caused some features to develop more slowly than they otherwise would have, but the community and the company pulled together to get through the situation with more ease than anyone could have expected.

Fortunately, things on that front are much better now- our Zimbra infrastructure has improved, and the backup strategy has changed such that the same issue is largely negated. We’re better off now than we were 6 months ago, and we have plans to be significantly better yet in another 6 months.

 #2, addons.mozilla.org & versioncheck.addons.mozilla.org

In mid-December we began having major performance issues with sites behind our Phoenix Zeus (load balancer) cluster. This cluster supports a number of production sites, including addons.mozilla.org and versioncheck.addons.mozilla.org.

The issue was caused by an unexpected and extended increase of traffic from Firefox 3.6 users upgrading to Firefox 8 (and the Addons version checks).

This also highlighted 2 architectural design limitations that we were aware of but had not expected to be a problem for some time.

This Zeus cluster sits behind a redundant pair of Juniper SRX firewalls. These protect the Zeus Linux hosts and provide a point to monitor for unwanted activity (IDS). Like any device, these firewalls are limited by the number of concurrent sessions and new sessions per second that they can handle. The additional traffic put us over the threshold, and they started to drop connections.

Moving Zeus from behind the SRX solved one problem while exposing another bottleneck. This time, we learned that the traffic for versioncheck.addons.mozilla.org was overwhelming the 1GbE interfaces on the Zeus cluster and we had to quickly spin up 10GbE Zeus nodes.

These are really just general scaling issues that we were going to need to deal with sooner or later. Unfortunately, we hit a level of scale that didn’t fit the way we had planned (a lot of these improvements were things we had planned on doing in the early part of 2012).

Among the fixes were:

  • TCP stack tuning
  • Upgrading to 10-gigabit Ethernet on the Zeus hosts
  • Routing / firewall changes (including removing the hardware firewall and switching to iptables)
  • Reducing our use of multicast VIPs, opting for multiple “normal” VIPs using DNS to send traffic to all load balancers
  • Segregating backend traffic onto separate load balancers in a different LB cluster
  • Sending traffic to other datacenters (notably: versioncheck.addons.mozilla.org, which is highly cache-able)

There’s more work still to come on this. We are currently experimenting with ScaleArc iDB, a database/SQL aware load balancer, which would theoretically give us database query caching and query distribution. We presently do such load balancing through our main Zeus cluster’s, but they don’t understand any database-specific protocols… it’s just simple TCP-based proxying. A protocol-aware load balancer should provide the same performance benefits for database queries that an HTTP-caching-LB does for web content.

So, what’s the long term fix?

From these events we have drastically altered our approach to how we handle certain parts of our infrastructure. We are very excited to be working on what we are loosely dubbing the “Hyper-Critical Infrastructure” cluster, which is a completely standalone VMware / NetApp installation designed to be as autonomous as we can reasonably make it. For starters this will house Zimbra & LDAP. Sometime after that we will also likely migrate Mana – our internal documentation system based on Confluence – and intranet.mozilla.org. Other extremely critical apps are also fair game.

Zimbra

Specific to Zimbra, we’re spending some time to make sure we make it as scalable and reliable as we need it to be. VMware High Availability and NetApp storage gets us freedom from most kinds of hardware failures, and Zimbra internally supports sharding to multiple servers for scale. We know Zimbra can do the job (it’s used by organizations much, much bigger than Mozilla), and this architecture will get us there.

Zeus Load Balancers

We’re continuing to replace the 1GbE Zeus cluster (HP BL460c) with 10GbE servers (HP DL360 G7) and are working on sharding our traffic into separate Zeus clusters where it makes sense to do so. We are also looking into separating database traffic away from Zeus altogether and onto a protocol-aware load balancer that can cache results.

On a higher level, we’re pushing out services like Cedexis to augment our geo- and performance-based global load balancing. This replaces another external service (3crowd), the discontinued “Zeus GLB” app, and the newer “Zeus Multi-Site Manager” app. This gives us a unified, convenient, and high-performing way to “front” Zeus and distribute traffic efficiently between multiple Zeus clusters.

It wasn’t all bad

Of course a number of good things happened in December as well:

  • BrowserID went to production
  • Ramped up Tegra capacity for Native UI & Android UI testing for Firefox Mobile
  • Our Inventory system got a nice overhaul and a migration to a new cluster
  • Lots of CDN work, including SSL CDN trials (Akamai, Highwinds) and Cedexis experimentation / implementation
  • Turn-up of a new 9-cabinet module in our PHX1 datacenter (fortunate, since it helped significantly with the load balancer issues)
  • A new ESX cluster in PHX1 (apart from the Hyper-Critical one above, which happened later)
  • Dozens of web content pushes – these are so reliable now we don’t even announce them anymore
  • BrowserID & LDAP integration work for the Mozilla Community Directory

It can be easy to forget about the wins, because in general you’re winning whenever something isn’t broken!

We’re hoping to get back on track with more frequent updates… look for more recent info very soon!

Jake

David MandelinMozilla JS Development Newsletter 12/07-1/24

I was holding off on updates around the holidays, when things were kind of quiet, but lots of stuff is happening again:

ECMAScript 6

Jason landed Simple Maps and Sets per the draft specification. Yay!

Speaking of which, Chris Leary blogged yesterday about how you can increase your badassery, stop him from harassing motorists on 101, and make all sorts of wonderful things happen by adding even more ES6 features to SpiderMonkey.

GC

Incremental GC continues to move forward: Bill put a series of patches up for review last week, and about half of them have r+ now. I’ve been playing a bit with the larch branch (which has IGC), and it’s looking really nice, especially for games.

Generational GC is also powering up: Terrence has been adding write barriers for generational GC.

IonMonkey

The IonMonkey infrastructure is complete, barring any needed changes that are discovered later. (Which of course has already happened: Chris came up with a much simpler way of doing on-stack invalidation.) So the team will start to shift focus to optimization, and they’ve already got a good score on 3 SunSpider benchmarks.

Debugging

Jim (with some help from Jason) continues to firm up the new debugger API. They also created a github project, jorendb, which is a demo command-line debugger for JavaScript.

Stuff that might affect you

Simplifications and cleanups continue:

Jeff changed our integer types to use stdint.h: where we used to say uint32 (or theoretically even JSUint32 (shudder)), we now say uint32_t. The immediate reason was to fix a recurring bug where another header file had fixed-width integer types with the same names but slightly different definitions, causing occasional breakage when the different definitions crossed. But it’s also nice to just use the standard types and not have anything special to fix or learn about, even it if it does cost a _t, which was somewhat controversial.

Luke removed JSThreadData and JSThread. This means that JSRuntimes are now single-threaded, so if you want to use SpiderMonkey with multiple threads, the only supported way to do it is to make multiple non-communicating JSRuntimes. This is a great simplification for the engine and removes a bunch of sources of bugs.

‘Ms2ger’ did various cleanups in the engine, especially around header files and reducing the number of installed header files toward just the actual API headers (i.e., not allowing users to poke around in the guts of the engine through normally included headers).

Other Stuff

‘qjivy’ added a MIPS backend for our JIT compilers.

Tom Schuster fixed a bunch of bugs and added support to make "eval([...])" fast, like our existing optimization for eval({...}).

‘Adam’ rewrote part of the decompiler printer buffer in order to simplify one of our memory allocators.