Mozilla Web DevelopmentBetter Know a WebDev: Michael Kelly (AKA mkelly AKA Osmose)

Live* from New York, it’s Friday Morning!

* Recorded with no audience. Laugh track may be used.

This week’s special guest on Better Know a WebDev, Michael Kelly!

 What do you do at Mozilla?

I work on engagement campaigns, like Firefox Flicks and Firefox Affiliates. I also work on the snippets service, which powers the small messages you see on about:home in Firefox. Most of my work is in Python on the backend side of our Django-based sites.

Any fun side projects you’re working on?

Most of my side projects are mediocre javascript games. I also have a few smaller things on my Github account.

How did you get started in web development or programming?

I got started with programming when I was around 8 years old, when my brother got a copy of ZZT installed on our home computer. ZZT is awesome! Not only does it come with a set of cool games to play, it lets you make your own games and program objects to do all sorts of cool things, like teaming up against the player, sending the player on a quest, or controlling a role-playing-game simulator.

I got into web development specifically when I was a teenager and learned HTML. I would eventually learn PHP and start making interactive sites in my spare time, which landed me a job for my Computer Science department in college working on their website.

How did you get involved with Mozilla?

Unlike a lot of Mozillians, I didn’t start off as a contributor. I got involved with Mozilla when they showed up at a job fair at my university. They were the only web-focused company there, and I rushed to start talking to them about the side projects I was working on. That landed me an interview, which led to a job after I graduated a year ago.

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

Once, while interning at Electronic Arts, I was working on a feature that made a database query once for every page across the Sims 3 website. We had set it up to be heavily cached, but I still managed to take down the entire Sims 3 site for a day. Oops!

Turns out, my database query, which we thought was running directly on the database, was actually running through Hibernate, the ORM we used on the site. This was frightfully slow, and caused all of our database connections to freeze up due to the massive amount of traffic the site got. Luckily, all that caching helped free up the site in the afternoon, and we were able to push a fix that night.

What’s something you’re particularly proud of?

I’m very proud of how Mozilla was able to get together with other companies across the internet and join the blackout on January 18th to protest SOPA and PIPA. My part to play was to create the snippet that blacked out about:home and sent our message to more than 30 million Firefox users.

The coolest part was that we were able to get this snippet and the blackout pages for other Mozilla sites ready in the space of a day. It was awesome to see how quickly everyone was able to mobilize in order to help stop SOPA and PIPA from censoring the web.

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

I’m really excited about Gladius, a Mozilla-developed 3D game engine for the browser. It provides a lot of the plumbing needed to get a game off the ground in Javascript. I’d love if there were a similar effort going on for 2D game development as well, given the positive response we got to BrowserQuest.

Other cool things to watch for are the Gamepad API, Pointer Lock API, and Full Screen API, all of which are helping make open web-based gaming a reality.

What question do you wish you’d been asked?

I wish I’d been asked about what games I am currently playing. :D

The answer, by the way, would be “The Longest Journey” by Funcom, “Minecraft” by Mojang (of course you never really stop playing Minecraft), and (in 2 days when it releases) “Fez” by polytron.

Next time we rewrite all of our websites, what will the platform be?

DCPU-16

Mozilla Add-ons BlogAdd-ons Update – Week of 2012/04/13

I post these updates every 3 weeks to inform add-on developers about the status of the review queues, add-on compatibility, and other happenings in the add-ons world.

The Review Queues

  • Most nominations for full review are taking less than 3 weeks to review.
  • Most updates are being reviewed within 10 days.
  • Most preliminary reviews are being reviewed within 2 weeks.

These stats are taken from the last queue report:

  • 110 nominations in the queue awaiting review.
  • 106 updates in the queue awaiting review.
  • 142 preliminary review submissions in the queue awaiting review.

As you can see, we’re in need for some help. If you are an experienced add-on developer and you would like to see the queues move along faster, please consider joining our team. Visit our wiki page for more information.

Test Your Add-ons for Memory Leaks!

The MemShrink team was assembled some time ago to work on reducing Firefox’s memory footprint. Many memory bugs have been filed and fixed for Firefox, but add-ons are also a significant factor in how much memory is being used.

There is an ongoing effort to track and stomp memory leaks in add-ons. Here’s where you can help, either by testing the add-ons you created, or testing the add-ons you use. Please read the article on Zombie Compartments, particularly the add-ons section. It should give you some pointers on how to find leaks and how to avoid them. The short version is: don’t hold any references to DOM objects after the document is closed.

The AMO review team is already aware of this, and we have added memory leaks to our testing policies. Add-on versions that leak generally won’t get full review.

Firefox 12 Compatibility

The Firefox 12 compatibility blog post is up. It also includes some major changes coming in Firefox 13, so make sure to give it a read. The Firefox 12 compatibility bump should happen very soon.

The compatibility work for Firefox 13 is still pending.

Laura ForrestIntroducing IsThereAGiantsGameToday.com


Single serving sites have always been a fascination of mine. You know - the ones that only do one thing really well in the best cases with a twist of humor involved?

Take Mat Honan's clever "Barack Obama is your new bicycle" and "Should I be worried about swine flu?" 

Or the myriad of Mozilla related sites like "Are we we fast/mobile/pretty/slim/small/first yet?   
Simple does one thing well.

That's why when I took a "Intro to HTML" class here at Mozilla I was inspired to use my new-found skills to better mankind, one small problem at a time. 
 (Above: A studious Mary, William, and Laura hard at work. Laura throws out the universal hand-sign for html bracket)

To solve the sort of pint-sized problems that can plague thousands, if not millions of people. 

To answer such profound questions that can make or break someones day...

...questions like: 
Will my CalTrain car be full of drunk people? 
Will I be able to find parking in SOMA tonight?
Will I be able to get into 21st Amendment or [your favorite SOMA restaurant here]?

And more. 
 
That's why I teamed up with the amazing William Reynolds to create a new website: www.isthereagiantsgametoday.com. A San Francisco Giants schedule for the rest of us.


And we're launching today. Check it out! Bookmark it. Fork it. Save it to your phone's homescreen. Share it with your friends! Moreover use it to make your life a little easier those 9 months out of the year when baseball season is "Game On!".

Update: Here's William's technical overview of Is There A Giants Game Today.

William ReynoldsMy first app: Is there a Giants game today?

Beard wonders: Is there a Giants game today?

Today is an important day for Bay Area residents. It’s the Giants’ first home game of the season. With the season in full swing, there’s a question on everybody’s mind each day: Is there a Giants game today?

Fans want to know. Anyone taking public transit definitely wants to know.

So my friend and I created a simple app: Is there a Giants game today?

Screenshot of "Is there a Giants game today?"

First home game of the season

It’s our first website side project, and it was fun to create. Check out Laura’s post for the background story. I’ll cover the technical aspects and what we learned.

We worked on it bit by bit, starting with static content and then added the ability for the site to update each day with game information. The code is on GitHub too – fork it and play with it.

What we learned

Keep it simple. Content is minimal. We just answer the question and provide information about today’s game or the next game. No fancy graphics, design or features.

It’s okay to start with a base. There are several Mozilla sites similar to ours that answer a simple question: Are we fast/mobile/pretty/slim/small/first yet? We used their layout and code as a base to get our page working as quickly as possible.

JSON for data storage. Instead of storing the Giants’ schedule in a database, we placed it in a JSON file. This allows all logic to be handled client-side and should make it easier to add offline support later.

JavaScript and jQuery for basic functionality. The page uses jQuery to access the schedule and fill in the content after the page loads. We also learned how to manipulate JavaScript Date objects to find the appropriate game information and format the date for upcoming games.

What’s next?

Improved layout across devices. We’re planning to use LESS so that the page will adapt to various screen sizes. Right now the page looks okay on different devices, but it should be easy to make it even better.

Offline support. Since people don’t always have a data connection on the go, we should make the app work offline too.

hCalendar support. We can use the hCalendar microformat to allow users to always have the next Giants in their favorite calendar app.

Have an idea for making the site better? Submit a pull request or leave a comment.

Michael KaplyCustomizing Firefox – Extensions and the CCK Wizard

I’ve saved the most powerful method of customizing Firefox for last – writing an extension. Firefox extensions allow you to customize just about every aspect of Firefox. You can override default behaviors, customize the user interface, change and lock default preferences, even replace entire components.

I’ve found that when most people think of extensions, they think of consumer extensions like the add-ons available on addons.mozilla.org. But you can also build extensions to meet needs within your business. I’ve seen extensions for automating the fill in of forms as well as facilitating business processes. If you think a custom Firefox extension would help your business, there are companies that can help you with that, including me.

Going into detail about how to build an extension is not my goal here. There are plenty of resources on the web. MDN is a good place to start. What I would like to do is talk about an extension I built called the CCK Wizard.

Before we talk about what the CCK Wizard is, let’s talk about what the CCK was. CCK stands for Client Customization Kit. The primary purpose of the CCK was customizing Netscape Communicator for ISPs. So when Earthlink wanted to deploy a customized Netscape with all their settings, they used the CCK to change the titlebar to say “Netscape Communicator by Earthlink,” configure connection settings, set the homepage and more. It also repackaged Netscape with a custom installer. You can read more history here.

When I worked at IBM, one of our goals was to increase the enterprise adoption of Firefox, so I decided to take the concepts of the Mission Control Desktop and the Client Customization Kit and combine them to create a new extension for Firefox called the CCK Wizard.

The CCK Wizard takes you through a wizard to customize Firefox and then generates an XPI at the end that you can install into Firefox to use your customizations. The CCK Wizard allows you to:

  • Change the default home page and startup override home page
  • Change the title bar text
  • Add a help menu item that links to a web page
  • Provide sites for which popups, cookies and XPInstalls are allowed by default
  • Preinstall browser plug-ins
  • Preinstall search engines
  • Add folders, bookmarks and live bookmarks to the personal toolbar
  • Add folders, bookmarks and live bookmarks to the bookmarks folder
  • Set default preferences
  • Lock preferences
  • Add registry keys (Windows only)
  • Add certificates
  • Set default proxy configurations
  • Package other XPIs with your distribution
  • Disable about:config

The CCK has been used by many companies including IBM to customize Firefox for their employees.

I would strongly recommend that you take a look at the CCK Wizard if you haven’t. It might save you a lot of work.

The CCK Wizard is open source and is maintained at code.google.com. Anyone is welcome to participate.

To be perfectly honest, I have not been able to invest as much time in the CCK Wizard as I want. I’ve been able to keep it current with changes to Firefox, but have not been able to really give it the love it needs. I’m hoping to be able to carve out more time for it in the future.

And that concludes our series about customizing Firefox. Any questions?

about:mozillaA scouting movement for the web, connecting browsers and people and more…

about:mozilla is a weekly roundup of news and contribution opportunities. Here’s what’s happening this week.

A scouting movement for the web
Mark Surman, Executive Director at the Mozilla Foundation, published a blog post about a scouting movement for the web. He did a talk on that idea at last week’s TEDx Seneca, where lots of people listened to his speech and appreciated it. Watch the video to find out why he thinks that we can have a world where making and coding online are mainstream amateur activities.

What are we working on?
Zainab
Matt Thompson, Chief Storyteller for the Mozilla Foundation, has posted some updates again. This time he’s talking about Audrey Watters, who answered this question: “What’s the best way to teach web-building to anyone?”, and he shows Chris Appleton’s Mozilla “webmaker” branding concepts. The most important news however is about Zainab, a new and highly motivated Mozilla Youth Ambassador. Click on the picture above to find out more about her or check out Matt’s post where you can also find some more information about “StoryThing” and the Mozilla Summer Code Party.

WebRTC – Connecting Browsers… And People
Anant Narayanan, a hacker at Mozilla Labs, talked in a blog post about WebRTC, a free and open project that allows browsers to communicate in real time by using simple JavaScript APIs. He shows one cool possibility for its usage: Video calling powered by easy JavaScript and HTML code in your browser. The stream is being established by WebRTC, now you just have to sit back and talk to your friends. Cool, huh?

The Firefox Clinic Was Awesome
Last month the Mozilla Support team put together the pilot Firefox Clinic event and had 51 Firefox users come into the San Francisco space, many with computers in tow, to get in-person help. Check out this blog post by Michael Verdi to read more about it. It also includes a few videos, one of them is an interview where the users talk about their experiences.

HTML5 Dev Derby
Are you a developer and do you have good HTML5 skills? Great! Then take part in this month’s Dev Derby which is hosted by the Mozilla Developer Network. This month, it’s all about what you can do with HTML5 audio. The prizes are also great. The winner will get an Android mobile device and the follow-ups will get nice things too. So start hacking now and submit your entries.

Firefox Beta Buttons Going Abroad
As you may know, the Firefox Affiliates team has created buttons to share the awesomeness of Firefox. Now they came up with buttons for Firefox Beta and the best thing is yet to come: It’s available in all locales. So go ahead and become a Firefox Affiliate today and put it onto your website or blog to spread Firefox Beta. Additionally, the beautiful blue buttons look really cool, don’t they? You can see two examples on Chelsea Novak’s blog.

News From Hacks.Mozilla.Org
This week, there are two interesting updates you might want to take a look at. The first one is about the first ever MDN Hack Day in New York City where lots of cool Mozillians spent two days of meetings, strategy, demos and hacking in Brooklyn. In another article, Joe Stagner talks about the difference between an app and a page, which should encourage developers to submit their apps to the Mozilla Marketplace. Isn’t it exciting to see what you can do with HTML5?

Meet Some Mozillians
Bonjour Mozilla says bonjour to Rob Hawkes, Paul Adenot, Stephen Étienne, Julia Buchner and to all the Mozillians in New York. Read more about how these people are contributing to Mozilla.

Upcoming events
* April 13, Tulsa, Oklahoma Tulsa School of Dev
* April 13, Online Firefox Critical Unconfirmed Bugs Testday
* April 14, Taipei, Taiwan OSDC.tw 2012
* April 14, Carnon-Montpellier, France djangocong
* May 9, London, England Open House
* May 10, London, England Geek Quiz
* May 12, London, England MDN Hackday
* May 14, London, England Monday Mobile Madness
* May 15, London, England Open House 2
* May 16, London, England Geek Bowling
* See more on the Mozilla Community Calendar

Get Involved
These are just some of the available contribution opportunities. Learn more about other ways to get involved and find other Mozillians in our community who share your interests.

About about:mozilla
The newsletter is written by Mozilla’s contributor engagement team and is published every Tuesday.
For more on what has been happening this week also check out the Mozilla Project Meeting.

If you have anything you would like to include in our next issue, please contact: about-mozilla[at]mozilla[dot]com or send us a status message on mozilla.status.net or a tweet @aboutmozilla .

You can also subscribe to the email version.

Have a good week folks and keep rocking the Web!

Marco ZeheProgress on Mac accessibility work in Firefox

This is an update for all who are interested in our Mac accessibility implementation.

After I blogged about this topic last time, we entered into a bit of a rough time having to do with the text interface of the Universal Access protocol. If you want to read the full details, look at this epic bug.

After that was finally done, which added the capability to interact with text using regular VoiceOver commands, and an associated children caching bug was also fixed, work has now picked up pace again in implementing the finer points of web content accessibility:

  1. Password fields are now accessible, as well as many other types of edits.
  2. Labels are now properly exposed. This includes that input elements nested within labels are now being seen by VoiceOver.
  3. List items on web pages will very soon be exposed properly.

With these all out of the way, I believe it’ll be very very soon that we can offer you all a build to test.

A few known issues we will be working on next:

So the list is down, and I actually don’t deem any of these bugs critical in blocking a release to a wider audience. But I am not the one making that decision here, so this is not an announcement. ;-)

Stay tuned to this blog for further information if you’re interested in testing out a Firefox build on the Mac that has VoiceOver support enabled!

Laura HilligerInitial Distill of Kitchen Table Lessons

Mozillians have been beta testing the Kitchen Table format. After reading a lot of good write ups about individual tests (from Joe, Jess, Lainie, Peter and others), I was inspired to start distilling lessons. I’m sure we’ll do more in depth reviews, but for now here are some things to think about if you’re going to run a kitchen table event.

Overall

  • Follow the KISS principle – a couple people (including myself) have written that they tried to do too much in the session.

Adult Newbies

  • Generally find the Goggles cool, but really need the instructional and explanation layers.
  • Need a specific ask
  • Need real motivation (“Why should I care about CODE?”)
  • Generally more interested in using the web better
  • Willing to play, but seem to crave a little more in-depth instruction and understanding (“Why am I doing this?”)

Teen/Young Adult Newbies

  • a very loosely structured remix ask seems to work well (even if they spend too much time collecting assets)
  • quick on the uptake of how to use the tool
  • questionable deeper understanding – having fun playing, but probably need the instructional and explanation layers for retention of tags, attributes, etc. Interest driven learning + some guidance works really well.

Adult/Young Adult/Teen Intermediate

  • Quickly bored with the Goggles, quickly bored with the sandbox
  • apparent disinterest can be fought with more immersive games
  • need activities to inspire further learning, more advanced content for “almost webmakers”

Kids (pre teen, or early teen)

  • an “assignment” like Inanimate Alice or a specific remix seems to be the way to go
  • younger kids need a theme and specific ask

All that tells me that:

  • we should be figuring out a way to build in instructional and explanation layers in the web maker/learning tools
  • adult newbies with low or non existing intrinsic motivations will be a hard sell (even if they have extrinsic motivations)
  • we’re right on the money with our approaches for teens
  • we need to figure out next steps, new projects and resources for intermediate coders (activity/mission scaffolding)
Enhanced by Zemanta

Share

Ben MoskowitzFrontline/PRX Hack Day: Prototyping “A Perfect Terrorist”

Last weekend I was fortunate to take part in the FRONTLINE / PRX colloquium on interactive storytelling, organized by Andrew Golis, Carla Borras, Jake Shapiro, Andrew Kuklewicz and Sam Bailey. The event brought forth practitioners in documentary, journalism, and interactive to discuss new digital directions for FRONTLINE, and public media generally. The highlight for me—unsurprisingly—was the PRX-led hack day that followed. Though I love a stimulating conversation, I belong to the less yak, more hack guild.

All participants prepping the day before the event.

Four projects participated:

+ A Perfect Terrorist, an investigation of “the mysterious circumstances behind David Headley’s rise from heroin dealer and U.S. government informant to plotter of the 2008 attack on Mumbai.”

+ The Wounded Platoon, the story of the “3rd Platoon, Charlie Company, 1st Battalion, 506th Infantry… a group of young men changed by war.”

+ Post Mortem, a look at how death investigations take place in “a dysfunctional system in which there are few standards, little oversight and the mistakes are literally buried.”

+ a group focused on archival applications of Frontline interviews, starting with the recent Economy series.

I was drawn to the “Perfect Terrorist” group, probably because of a fascination with the Mumbai terror attacks. When I passed through Mumbai in late 2009, the Lashkar e Taiba attack made for very interesting conversations with Indian college students.

Tom Jennings, producer of "A Perfect Terrorist" gives a whiteboard run-down of the Collaba neighborhood and the "Kill Zone."

Our group wanted to visualize the complex web of relationships in which the American terrorist David Headley is centered. Headley is the mastermind of the 2009 Mumbai terror attacks—a man who was, in turns, an informant for the DEA and a member of Lashkar e Taiba. Producer Tom Jennings calls him a “perfect terrorist.” He is a complicated figure.

The FRONTLINE piece is outstanding, and the long-form journalism style has distinct advantages. But we wanted to help Tom tell this story in ways that traditional forms can’t afford. Though a documentary runtime must have a beginning, middle, and end, a web-native documentary can let users follow story threads that lead in many directions.

FRONTLINE has generated a ton of material around this story—not just the film, but a series on in-depth blog posts and features. There’s an opportunity for viewers to more deeply explore themes and events in the story, like Headley’s motivation for planning the attack. Just how does someone grow up to become a “perfect terrorist?” How was the attack orchestrated? How can we understand the terror network of 19 accomplices? Who are the victims? What is the aftermath? What are we to make of allegations that Headley was a double agent, and how do we begin to resolve some of the bigger questions raised by the tragedy?

Ideation

We imagined a ton of UX concepts. Among the ideas discussed: a navigable map of the “Kill Zone”; making use of perspective video from surveillance cams; a navigable 3D scene of the same; an attack timeline; a map of relationships; making a viewer clear the “fog of discovery”; and challenging users to ask questions and contribute to a discussion. But though these ideas appeal to the geek in me, they must be developed in service of story, or they’re not worth doing.

After cycling through story, then UX vision, then tech (in the style on which I insist!) we arrived at a pretty interesting concept. It’s a hybrid concept that gets at many of the ideas above.

We drew inspiration from the force-directed graphs in use by Mozilla Collusion and others. Without creating a “force” graph, per se, we wanted to create a visual representation of the “spider web” of relationships that Headley spun. With Headley at the center, we wanted to show the life events that culminated in a perfect terrorist recruiting and directing the 19 attackers, and how this ultimately affected the 166 victims of the attack and their families.

But we also wanted there to be an element of time control. Users should be able to experience this project passively, just by watching—but also actively, by navigating the timeline of events and seeing how the relationships developed.

A mockup prepared by Pietro Gagliano shows our interface ideas.

To do this, we placed Headley as a central “node ” on a vertical timeline. The timeline corresponds to a condensed narration of the entire Headley story. When the user presses play, the narration begins and Headley’s node travels through time. Users can go back and forth in time by scrubbing Headley along the timeline. Because Headley’s is basically a playhead on an audio track, we’ve casually taken to calling this “Playheadley.”

But Headley is also at the center of a time-controlled visualization. As Headley comes into contact with key players in the story, “nodes” are spawned for each person—along with connecting lines of varying levels of elasticity.

By watching this play out passively, you can see Headley’s placement in both the terrorist and informant networks evolve over time. And you can pause the experience at any time to explore a node more deeply. Click on one of the terrorists and the narration will pause. You’ll have the opportunity to explore B-Roll, blog posts, and other elements of the story in a non-linear (but intuitive) fashion.

Each node on the timeline represents an element of the story.

We also discussed how this story map could link to other projects in the same form. So you can imagine a tapestry of FRONTLINE stories connected to each other in this way.

This is an interesting way of mixing time and relationships, telling the story in a way that would be impossible in the traditional form. Check out Pietro’s rapid-fire summary deck for more detail: [PDF]

Hackin' away

Prototype

A protoype was made in six hours and is up on GitHub. It’s made with some custom d3.js voodoo by Devin Chalmers, a simple jQuery powered HTML audio player, and popcorn.js. Because of the short amount of time available for hacking, the project is pretty incomplete. But the repo has semi-functional code for all the individual pieces and is hours away from assembly.

There’s interest in taking this beyond the protoype, which I find tremendously exciting. I think there’s a lot of overlap with The Tillman Story project, and its objectives: to let users explore a much more expansive “surface area” of the story; to let interest drive the user’s experience; to provide additional context to the story; to connect it to journalistic material and conversations in social media; and to accommodate a large number of story threads while keeping the core thread engaging. Both of these projects are pioneering ways of telling non-fiction stories on the web.

A high-five for HTML5

As an open video booster, one thing about the event struck me as particularly. fascinating: that no-one blinked an eye that this was essentially an HTML5 media hack day. Until recently, this type of event would have been impossible. But thanks to the saturation of HTML media, to libraries like Popcorn, to human readable and hackable source, and to GitHub, these types of events are way more viable. Actually, rapid protoyping with video apps is way more viable—imagine having to coordinate with team members while compiling a Flash or iOS app and merging in functional and stylistic changes from six people on the fly. Very, very difficult. With HTML, we can make changes immediately and with zero friction.

HTML5 media rocks. You can also check out the repo for the Wounded Platoon group, another HTML5-based project from the event.

BlueGriffonBlueGriffon 1.5 ETA

If everything goes well, BlueGriffon 1.5 will be released friday 27 april. There are still localization holes, in particular for the following locales:

  • he (Hebrew): severe lag
  • fi (Finnish): only last changes missing
  • it (Italian): only last changes missing
  • hu (Hungarian): only last changes missing
  • ja (Japanese): severe lag
  • ko (Korean): severe lag
  • nl (Dutch): severe lag
  • pl (Polish): DONE 20120413
  • sl (Slovenian): light lag

If you can help us here in order to have these locales completed for the 24th of april, you're highly welcome. Please see our localization manual and then the list of recent L10N changes. Warning, that list contains only the recent changes. Locales severely lagging require more changes than what's contained in this list. Thanks!

James BurkeMaking apps with the web

The pieces are coming together: you can can use the web (HTTP, HTML, JS, CSS) to package focused pieces of functionality as apps, with the possibility to make money.

This post outlines how it is coming together, and how you can get involved. While I work in the Mozilla Labs group and I am sure this post will have a Mozilla slant, this is my personal outlook.

What is a web app

I am old school, so when I hear "web app" I associate that with the "more of an app style than document style" web page. Something more like GMail instead of the New York Times.

However, it seems to be getting a more focused definition, something that implies characteristics around the actual usage of the app. Here is a fuzzy definition of it:

A web app is a focused piece of functionality implemented using web technologies. These pieces of functionality are grouped in an "app dashboard".


In the ancient web times, the app dashboard was just your browser bookmarks. However, the newer dashboards have a richer relationship to the apps. There are app icons/sections that can change state, and with Windows Metro, even provide some data display services. There are other associated concepts like an app being purchased and working offline.

So, in a way, everything old is new again, but better and richer. The "native app" success on mobile devices has set the stage and help define what should be possible.

While web apps may not be completely equivalent with the capabilities of native apps yet, the stars are moving into position.

Alignment of the stars

Using web apps to deliver functionality is coming together because to the following forces:
  • Platforms and money
  • Design practices
  • Development tools
Platforms and money

Here are the platforms where you can use the web to make apps, and how you can make money doing so.

Today's mobile: PhoneGap/Cordova

The PhoneGap approach works now, today. Apps are made with just plain HTML/JS/CSS and wrapped up in an platform-specific binary that gives the code access to the device capabilities.

Cordova is the Apache-housed, open source parts that PhoneGap is built on. Work in Cordova feeds into web standards discussions. The hope is to not need Cordova at all, but just have all the capabilities built into the web platform.

Make money the usual ways via the platform-specific app stores: charge up front, do freemium, in-app purchases, use ads.

Future mobile: Boot to Gecko (B2G)

Mozilla is working on a web-only mobile OS called Boot to Gecko (B2G). The great thing about this platform: it is just plain web technologies. All apps are fetched from URLs, and they can work offline through web technologies like AppCache.

The tagline for B2G is "the web is the platform". The "native" in B2G is the web. If the web is not sufficient in some way, Mozilla is putting real effort into improving it. Just like Cordova, the development is all out in the open. You can be the change you want to see by participating.

The B2G effort includes a set of default web apps, including a web app "home screen". This set of web apps is called Gaia. You can "install" your app into the home screen using the web app APIs, and Mozilla is working on a marketplace and APIs to allow other marketplaces for apps. There is an identity API via Persona, and efforts to work out other details like digital receipts. The apps roadmap page will help you get acquainted with some of the moving pieces if you want to get involved.

Right now the B2G code is still really early in development. It is a bit rough to get going. Think of it as getting access to iOS a year before the first iPhone shipped.

Desktop

Both Firefox and Chrome will know how to install web apps. The hope is that all the browser vendors can converge on some common APIs and get those uplifted into all browsers.

Mozilla is also working out a way to "install" a web app from your browser into your desktop operating system. A small OS app shell will be wrapped around a web renderer that is tied to that specific web app. For the end user, it just looks like any other app installed on their desktop.

You will be able to use web technologies for Windows 8 Metro apps and in Windows Phone. Microsoft is making the web stack a first class development option for their platform.

On the money side:

There is the Chrome Web Store for Chrome browsers, and Mozilla is working on a Marketplace. The hope is to work out open, standardized APIs that would allow other marketplaces and integration with any web browser. There is a Windows Phone Marketplace, and I fully expect a marketplace for Metro apps for Windows 8.

While marketplaces by themselves do not translate directly into money, they establish ways for users to buy functionality and discover new apps. They set up a fertile environment. Using ads and providing apps for free with money coming in from other channels will still be possible.

Design practices

There are a few design practices that fit well with web app development:

Mobile first

The number of mobile, non-desktop PC devices are growing like crazy. The "app" phase was brought on by these mobile devices. By focusing on these mobile experiences first, it sets you up to reach a very big market.

Focused execution

This falls out of the Mobile First design approach. When you start with mobile, the interfaces are usually more focused. This is a great way to do any app design -- make sure to distill the design problem to the smallest user goal possible, and then build up from there as necessary.

Responsive design

Different kinds of devices that have different resolutions and input methods are best served with some custom work done for each device. However, there is a lot of code that can be shared by moving away from a "pixel perfect" and device-specific look to more of a "web aesthetic" using responsive design.

URL-based design

"Mobile Apps Must Die" brings up some interesting points when apps are addressable via URLs. It opens up new discovery possibilities and different ways to "organize" your apps.

Developer tools

Here are some APIs that can help with web app plumbing:
  • Application Cache: learn it. Yes, it has its quirks, but for serving offline UI, it is the state of the art.
  • localStorage: for storing smaller name/value paires of data offline.
  • IndexedDB: for storing larger amounts of data offline. Right now iOS/Android devices do not support IndexedDB, just the older, deprecated Web SQL. However, that should change over time. Lawnchair can provide an adapter layer if you need to target platforms with uneven storage support today.
The best part: you can start using some of these technologies today, even for apps that target traditional desktop browser deployment.

I hope to share more tools and approaches as I discover them.

Under construction

As you jump into making web apps you will discover some rough edges. You may get frustrated. This is OK. The future is under construction.

If you want to see change, get involved. Move the Web Forward is a great resource that can help you figure out how you want to engage.

I am a web hacker and my current interest is the B2G platform, so I will be checking out Gaia. I will share what I find as I go along. If you want to engage on a lower level, check out the Gonk and Gecko layers in B2G.


I am really excited to see web apps come into their own for many different platforms that include ways to make money. It is great to see some smart designers figure out how to design for the web app world.


Web FWDOpenPhoto launches iPhone app

We welcomed the OpenPhoto project to WebFWD after their successful Kickstarter campaign last year. As an open source photo platform to help Dropbox and other cloud storage users share, organize and enjoy their photos, they have made significant progress.

Today marks a major milestone for them team: launching their iPhone app!

Read more here, download the app here, and start snapping!

Joey Armstrongmakefiles

Curtis KoenigProud To be an Eagle

I am very proud of my accomplishments as a young man. And the lessons I learned continue to aid me as an adult.

Eagle Scout
Created by: Scouting Magazine


Mozilla User ResearchMeet Ilana Segall – our newest quantitative researcher

Join me in welcoming Ilana to our User Experience team! She’s a Quantitative User Researcher and she came to Mozilla after eighteen months working at a startup (Lexity) that was attempting to help automate advertising for small business using data mining.  Prior to that, she was getting her master’s at Stanford in the field of Applied Mathematics (ICME). She says she joined Mozilla “because I am thrilled to be a part of such an enthusiastic and forward-thinking open source community, and I look forward to learning more about how Firefox users behave and using this information to help make the web a happier place.”   We’re excited to have you, Ilana.

Mike HommeyRebuilding libxul made slightly easier, finally

One of the longstanding problems when modifying code in the mozilla code base, is that when you change some file under e.g. content/, and you don’t want to waste the whole lot of time it takes to run a complete make -f client.mk, you need to build under content/, then layout/build/, and finally toolkit/library/. And you need to remember that (or use tools that remember for you).

These days are finally over. After several attempts a year ago (!), and again several attempts during the past weeks, bug 644608 is finally on mozilla-central and is likely to stick, this time. There may be some corner cases, in which case please file bugs.

Anyways, Now, you just need to build under e.g. content/ and toolkit/library/. No need to rebuild layout/build/ anymore.

Lawrence MandelTelemetry Data Issues – Status and Summary

Telemetry is a data collection framework that collects real world data from Firefox. Recently Telemetry experienced some issues resulting in incomplete data being reported on the Telemetry Dashboard and Telemetry Evolution.

Before I get into the details about the data issues, I think a little background is in order for those who don’t have it.

Telemetry sends a daily ping with the information collected by the Telemetry probes. This data is aggregated and presented in the Telemetry Dashboard and Telemetry Evolution (http://mzl.la/telemetrydash). The Telemetry data is stored in three separate data repositories:

1. daily ping (raw) data is stored in hbase
2. aggregated data for use in the Telemetry Dashboard is stored in elastic search
3. trend data for use in Telemetry Evolution is stored in a relational database

A job is run to aggregate the raw data (1) into the data for the Telemetry Dashboard (2). A second job is then run to create trend data from the aggregate data (2) for Telemetry Evolution (3).

Several weeks ago cww discovered that the Telemetry dashboard was not displaying the volume of data that is expected from the Nightly channel. The source of the problem was determined to be an issue with the newly landed persistent Telemetry feature that caused the Telemetry ping to fail. However, once this change was backed out a second issue was discovered with the data job that processes the raw data from the daily Telemetry ping (in hbase) and aggregates it into a form that can be consumed by the Telemetry Dashboard (elastic search). As the trend data for Telemetry Evolution is generated from the elastic search data it was also affected.

The status and summary of these two issues is:
1. The persistent Telemetry issue has been resolved but has resulted in a gap in Nightly Telemetry data submissions from Mar 1-17, 2012.
2. As the issue with the data job was with the job that aggregates the raw data into elastic search there was no issue with data loss of any of the raw data. The job has been corrected and Telemetry data is now available from Jan 1, 2012, onwards. The metrics team is running the jobs to repopulate the trend data from prior to Jan 1, and expect the full data set to be back online shortly. (Bug 731662.)

Our next steps are to put data validation processes in place to catch data issues early. Discussion is taking place in bug 742883, bug 742897, and bug 742903. These issues also surfaced a need to discuss the Telemetry data retention policy, which is being done in bug 742496.


Tagged: data_collection, firefox, mozilla, telemetry

Matt ThompsonMozilla Webmaker update: Planet Mozilla 3.0? Hack the news. Breakfast Club. Ignite feedback.

Mozilla's Jess Klein at a kitchen table "teach in" with her parents last week

Mozilla Webmaker weekly update for April 12, 2012


Tackling the “Planet Mozilla” firehose challenge: Mozilla as media organization

Lyre Calliope is a Mozilla community member who’s been closely following our work around building tools and projects for webmakers — and is connecting it to the storytelling and “noise to signal” challenges Phillip Smith has been writing about.

“The problem is not unique to Planet Mozilla — it’s a problem for the web. How do we find meaning in the era of Big Data? Let’s use Planet Mozilla as a chance to tackle this challenge.” –Lyre Calliope

“Planet Mozilla should evolve beyond being a glorified rss aggregator to a full blown news brand.” –Philip Smith

Mozilla Open Badges launches Beta

Mozilla’s Open Badges project now includes leading partners like the MacArthur Foundation, impressive collaborators (including NASA, Intel, Disney-Pixar, 4H and dozens of others now building badge programs using Mozilla tools) and — thanks to this week’s new Beta release of Mozilla’s Open Badges Infrastructure — publicly available software for badge issuers and developers to get on board and build with.

NOW OPEN: Apply to become a Knight-Mozilla News Fellow

The brand new Knight-Mozilla OpenNews web site is up and running — just in time to open applications for the 2012/13 Knight-Mozilla Fellowships! Apply now.

Fellows will be embedded with leading news organizations around the world, including the New York Times, the BBC, the Guardian, Zeit Online, La Nacion, Spiegel Online, The Boston Globe and Pro Publica.

Get involved:

Mozilla Popcorn Maker ships version 0.3: aka “Breakfast Club”

Why is it called “Breakfast Club?” Because it’s all about the painful and poignant process of growing up. This release  aims at improving the user experience for Mozilla Popcorn Maker. New features: save and publish projects. New templates. Log in with BrowserID. Share you work. It’s for all the brains, athletes, basket cases, princesses, criminals and neo maxi zoom dweebies out there.

Get involved:

Build 1Gbps apps from the future: Mozilla Ignite wants your feedback

Mozilla Ignite is a new upcoming project and partnership between Mozilla and the National Science Foundation. The goal: invite developers to design and build apps for the smarter, faster networks of the future — in areas that matter like healthcare, education and energy.

The project will launch in early May. But in the mean time, we’re seeking feedback from developers. Does this pre-release staging site provide the information you’d need to get involved?

Mozilla Summer 2012 Campaign: Teaching the world to code

As you know, we’re gearing up for a major summer campaign. We’ve been working hard on getting the message right — especially on the front page and partner page.

Assessment and the Web

“Assessment and the Web” by the Mozilla Learning Team’s Chloe Varelidi

 ”When designing assessment for the web, we should look at many different theories and apply whatever pieces fit the best. Being the visual type I couldn’t help but draw a small illustration. Let me know if you found it helpful!” –Chloe Varelidi

Join the Wall Street Journal’s Data Transparency Weekend

 

 

 

April 13 – 15. Help build free web tools that promote data transparency and control.

 

David Rajchenbach TellerScoped resources for all

A small class hierarchy has been added to MFBT, the “Mozilla Framework Based on Templates” which contains some of the core classes of the Mozilla Platform. This hierarchy introduces general-purpose and specialized classes for scope-based resource management. When it applies, Scope-based resource management is both faster than reference-counting and closer to the semantics of the algorithm, so you should use it :)

The codebase of Mozilla is largely written in C++. While C++ does not offer any form of automatic memory management, the (sometimes scary) flexibility of the language has allowed numerous projects to customize the manner in which memory and other resources are managed, and Mozilla is no exception. Largely, the Mozilla C++ codebase uses reference-counting, to provide automatic memory management in most cases.

While reference-counting is quite imperfect, and while future versions of Mozilla might possibly use other forms of memory management, it is also a very useful tool for such a large codebase. However, in some cases, reference-counting is just too much. Indeed, in a number of simple cases, we prefer the simpler mechanism of scope-based resource management, that is both more predictable, faster and more resource-efficient – at the cost of not being able to scale up to the more complex cases for which reference-counting or even more powerful mechanisms become much more suited.

Scope-based resource management is designed to handle resources that should be cleaned-up as soon as you leave a given scope (typically, the function), regardless of how you leave it (by reaching the end, with a break, a return or an exception).

The following extract illustrates the use of scoped resource allocation:

// returns true in case of success, false in case of error
bool copy(const char* sourceName, const char* destName, size_t bufSize) {
   ScopedFD source(open(sourceName, O_RDONLY));
   if (source.get() == -1) return false;

   ScopedFD dest(open(destName, O_WRONLY|O_CREAT, 0600));
   if (dest.get() == -1) return false;
     // source is closed automatically

   ScopedDeleteArray buf(new char[bufSize]);
   if (buf.get() == NULL) return false;
     // source, dest are closed automatically

   while (true) {
     const int bytesRead = read(source.get(), buf.rwget(), bufSize);
     if (bytesRead == 0) break;
     if (bytesRead == -1) return false;
       // source, dest, buf are cleaned-up

     const int writePos = 0;
     while (writePos < bytesRead) {
       const int bytesWritten = write(dest.get(), buf.get(),
                                      bytesRead - writePos);
       if (bytesWritten == -1) return false ;
         // source, dest, buf are cleaned-up
       writePos += bytesWritten;
     }
   }

   return true;
      // source, dest, buf are cleaned-up
}

As you can see, the main point of these scope-based resource management classes is that they are cleaned up automatically both in case of success and in case of error. In some cases, we wish to clean up resources only in case of error, as follows:

// returns -1 in case of error, the destination file descriptor in case of success
int copy(const char* sourceName, const char* destName, size_t bufSize) {
   ScopedFD source(open(sourceName, O_RDONLY));
   if (source.get() == -1) return -1;

   ScopedFD dest(open(destName, O_WRONLY|O_CREAT, 0600));
   if (dest.get() == -1) return -1;
      // source is closed automatically

   ScopedDeleteArray buf(new char[bufSize]);
   if (buf.get() == NULL) return -1;
      // source, dest are closed automatically

   while (true) {
     const int bytesRead = read(source.get(), buf.rwget(), bufSize);
     if (bytesRead == 0) break;
     if (bytesRead == -1) return -1;
      // source, dest, buf are cleaned-up

     const int writePos = 0;
     while (writePos < bytesRead) {
       const int bytesWritten = write(dest.get(), buf.get(),
                                      bytesRead - writePos);
       if (bytesWritten == -1) return -1 ;
        // source, dest, buf are cleaned-up
       writePos += bytesWritten;
     }
   }

   return dest.forget();
   // source and buf are cleaned-up, not dest
}

While both examples could undoubtedly be implemented with reference-counting or without any form of automated resource management, this would either make the source code much more complex and harder to maintain (for purely manual resource management) or make the executable slower and less explicit in terms of ownership (for reference-counting). In other words, scoped-based resource management is the right choice for these algorithms.

Now, the Mozilla codebase has offered a few classes for scope-based resource management. Unfortunately, these classes were scattered throughout the code, some of them were specific to some compilers, and they were generally not designed to be reusable.

We have recently starting consolidating these classes into a simple and extensible hierarchy of classes. If you need them, you can find the root of this hierarchy, as well as the most commonly used classes, on mozilla-central, as part of the MFBT:

  • ScopedFreePtr<T> is suited to deallocate C-style pointers allocated with malloc;
  • ScopedDeletePtr<T> is suited to deallocate C++-style pointers allocated with new;
  • ScopedDeleteArray<T> is suited to deallocate C++-style pointers allocated with new[];
  • root class Scoped<Trait> and macro SCOPED_TEMPLATE are designed to make it extremely simple to define new classes to handle other cases.

For instance, class ScopedFD as used in the above examples to close Unix-style file descriptors, can be defined with the following few lines of code:

struct ScopedFDTrait
{
public:
  typedef int type;
  static type empty() { return -1; }
  static void release(type fd) {
    if (fd != -1) {
      close(fd);
    }
  }
};
SCOPED_TEMPLATE(ScopedFD, ScopedFDTrait);

So, well, if you need scoped-based resource management, you know where to find it!

I will blog shortly about the situation in JavaScript.


Web FWDEnergy: A Startup's Most Precious Resource

Three key resources a start-up has are time, (sometimes) money, and energy. Of these, mental energy is both free and easy to optimize. At this LearnFWD, our teams learned some interesting insights into personality types and how to manage them to increase effectiveness from WebFWD mentor Jennifer Selby Long.

A certified interpreter of psychological instruments, Jennifer has worked with numerous teams and leaders to help them better understand themselves and how their personalities impact those around them (community members, coworkers, bosses, team members, etc.). She began by defining introversion and extraversion…and debunking some big myths pertaining to these two temperaments. She then went on to elaborate how these temperaments can be managed through tactics such as taking breaks, setting up phone meetings, and asking teammates for input on how to best work together.

An extravert herself, Jennifer’s energy and delivery of this very personal, relevant and valuable subject matter are not to be missed. Tune in, follow the exercises instructions for your own teams, and learn how to energize!

BabelZillaLet’s localize jetpacks. At last.

For years now we have been wondering (and asking with insistence) how we translators shall provide locales for jetpacks. Owing to Alexandre Poirot aka ochameau on #jetpack (thanks Mozilla for having found and trusted the right man for this mission), this might be the final answer.
First thing that is quite satifying for translators: the locale format will be good old .properties, which is robust and familiar among us.
Second thing is: testing jetpacks with fresh locales (once translation work is done) does not require any technical ability (no special script nor command line is necessary to inject the file). All you have to do is play a bit with one special extension which does the job seamlessly for you.

But please try by yourself and enjoy:
1. Install this version of Collusion extension on your Firefox – No browser restart necessary.
2. Download this en-US.properties file and translate it in your own language with one correct text editor (remember UTF-8 is your friend and no ominous BOM please). Name your file as {MylangCode-prefix}.properties, e.g: “pt-BR.properties” or “de.properties”
3. Install locale-updater extension by the incredible Alexandre Poirot. No browser restart necessary.
4. In the addon manager of your browser, spot Collusion in the list and click the “Update l10n” button which is now on the left.
5. A window is opening asking you for a file, choose your xx.properties and send it.
6. Collusion addon is automatically uninstalled and reinstalled with updated localization files. Your lang should appear in Collusion interface. No browser restart necessary.

Some observations

This version of Collusion is patched to use the upcoming HTML localization feature coming soon in Jetpack. It allows to extract strings from HTML page and expose them as plain old properties for the translators. Extension developers are welcome to comment and suggest.
Locale-updater extension is on github: hack and improve as you like it.

Next step: having .properties files from jetpacks submitted here on BabelZilla for easy translation, on the current “old” WTS or on its future Adofex-based version which is under progress. Stay tuned!

David Rajchenbach TellerStudent project updates

As mentioned a few times on this blog, I take part in a few Mozilla-related Student Projects as a mentor or a helper. For this year, projects are finished. Let us take a look at the results.

Save as .epub (Firefox add-on)

(Kevin CORRE, Benjamin ROCHER, Elie AHUMA, Sylvestre ANTOINE – Université d’Orléans, MIAGE + IRAD)

Objective Add the following feature to Firefox, as an add-on: Save a page and its resources as one file, using open standard .epub. This open-standard file can then be transferred to just about any device, edited with LibreOffice, etc.

Current status I have seen version 0.1 on addons.mozilla.org, although it seems to have disappeared in the meantime. I suppose it still needs a little polish, but, hey, it’s a good start.

Follow this project This project lives on github.

Detect use of the wrong account (Thunderbird add-on)

(Baptiste MEYNIER, Johan JANS, Maxime DENOYER, Mustapha OUCHEIKH – Université d’Orléans, MIAGE + IRAD)

Objective Add the following feature to Thunderbird, as an add-on: Detect that a message is being sent to a correspondant using the wrong account (e.g. using a professional account for a personal message or a personal account for a professional message).

Current status The project has reached an important milestone and has become usable. I have the impression that no version has been released, which is a shame, but it already offers some useful features. I really hope that the students continue the project and turn it into a complete add-on.

Follow this project This project lives on github (currently on a non-master branch).

Simplify the addition of several alarms for the same event in Lightning (Thunderbird add-on)

(Loïc LE MÉRO aka Morkai – Université d’Évry, MIAGE 2)

Objective Lightning offers the ability to add several alarms for the same event (e.g. 1 day before then 15 minutes before). Improve the user interface to make this more discoverable.

Current status Code is complete, what is left is to submit it upstream.

Follow this project This project lives on Bugzilla.

Extend Lightning alarms (Thunderbird add-on)

(Anto DOMINIC PAUL – Université d’Évry, MIAGE 2)

Objective Lightning offers the ability to attach alarms to an event. Extend this feature to make it possible to play a music or execute a script when the alarm is triggered.

Current status I have seen a working version. Not 100% about security, but it looks very promising. Guys, I hope you can finish that alarm, I want to use it.

Follow this project This project lives on Bugzilla.

Handle resources in Lightning events (Thunderbird add-on)

(Julien LACROIX – Université d’Évry, MIAGE 2)

Objective Add the ability to attach resource requirements to events: a picnic requires food (one resource), drinks (one resource), cutlery (one resource), etc… Who will bring them? Also, add the ability to attach a geolocation to events, to help finding the way. Who brings the beer?

Current status It works! And it was submitted as an add-on on for Thunderbird.

Follow this project This project lives on github.

Remind me that I need to reply within 24h/remind me that I expect a reply within 24h (Thunderbird add-on)

(Vincent LEGUEVEL, Mickael MAINGE – Université d’Évry, MIAGE 2)

Objective Add the ability to mark a message as “I need to answer within …” / “I expect an answer within …”. Nag the user as long as she hasn’t sent or received the reply.

Current status A little disappointed. A subset of the features is here, but as far as I can tell, not unified as one single add-on.

Follow this project This project lives on two Bugzilla bugs: need to send / expect to receive.


Firebug BlogFirebug 1.9.2b1

Firebug 1.9.2b1 has been released (compatible with Firefox 5-13).

This maintenance release is fixing several issues already tested with Firebug 1.10 (currently alpha). Final release (1.9.2) should be available in couple of weeks.

Firebug 1.9.2b1 fixes 10 issues.

Post feedback in the newsgroup

Jan ‘Honza’ Odvarko

Robert NymanTouring South America with Mozilla

In a week from now, starting next Thursday, I and some Mozilla colleagues will embark on a MDN (Mozilla Developer Network) tour of South America!

To be more specific, it will cover the South Cone, and within 8 days we will be visiting four countries:

  • Argentina
  • Uruguay
  • Brazil
  • Chile

I was in Chile in November last year, and I’m very happy to go back to a thriving region with lots if interesting things going on! We will be arranging MDN Hack Days/Evenings, and it will be free to attend, so if you are in the region, sign up now!

The Schedule

This is an outline of the events we will be organizing in the region, and all but the MozCamp in Buenos Aires (which is for invited contributors) is open for for everyone. Our speakers will vary a bit, but I will personally be in all four locations.

April 20th

Time for the Buenos Aires MDN Hack Day, a full day of presentations and hacking away on the web!

April 21st-22nd

MozCamp in Buenos Aires, with a lot of Mozillians talking about development and the community.

April 24th

Montevideo MDN Hack Day Developer Evening, talking about HTML5, Boot to Gecko, Apps and Mozilla Persona.

April 26th

São Paulo MDN Hack Day Developer Evening, where I will be talking about HTML5 in general and about a number of exciting JavaScript APIs.

April 28th

Santiago MDN Hack Day Developer Evening, covering HTML5, Boot to Gecko, Apps and Mozilla Persona.

Excited!

I’ve only been to Chile in South America before, two times (including Easter Island), but am really excited to meet lots of great people and seeing interesting places in south South America!

hacks.mozilla.orgMozilla Hacks Weekly, April 12th 2012

Time again to share some good reading tips from Mozilla’s Developer Engagement Team!

At the end of this blog post, you also have all the Developer Engagement team members and what they work on. If you are interested in discussing more, contributing or taking part of our work, don’t hesitate to contact us or follow us on Twitter!

Weekly links

If there is anything you think we should read or know about, don’t hesitate to post a comment, contact us on Twitter or through any other means.
The picks this week are:

The Developer Engagement team

Mozilla’s Developer Engagement team work with writing articles, documentation – such as MDN (Mozilla Developer Network) – public speaking and generally helping and informing about open technologies and Mozilla products. If you are interested in following our work, here are the team members:

Christian Heilmann

Christian is Mozilla’s Principal Evangelist and is working with HTML5, Open Web, BrowserID and Developer Tools in Firefox. He is also maintaining the @mozhacks account together with Robert Nyman.

Blog: http://christianheilmann.com/
Twitter: @codepo8

Eric “Sheppy” Shepherd

Eric is the Developer Documentation Lead for the MDN documentation and everything surrounding it.

Blog: http://www.bitstampede.com/
Twitter: @sheppy

Havi Hoffman

Havi works with Mozilla Labs and WebFWD, and maintains the @mozlabs account.

Twitter: @freshelectrons.

Janet Swisher

Janet is working on MDN documentation and is organizing doc sprints to ensure we have premium quality on MDN.

Blog: http://www.janetswisher.com/
Twitter: @jmswisher.

Jean-Yves Perrier

Jean-Yves is another one of our technical writers working on MDN documentation.

Twitter: @teoli2003.

Jeff Griffiths

Jeff is working with the Add-ons SDK (Jetpack).

Blog: http://canuckistani.ca/
Twitter: @canuckistani

Joe Stagner

Joe is working with Web Apps Developer Ecosystem & Partner Engagement, HTML5 and the Open Web.

Blog: http://www.misfitgeek.com/
Twitter: @MisfitGeek

John Karahalis

John is working on Dev Derby.

Twitter: @openjck

Rob Hawkes

Rob is working on HTML5 games and the Open Web.

Blog: http://rawkes.com/
Twitter: @robhawkes

Robert Nyman

Robert is working with HTML5, Open Web, Firefox, WebAPI and maintains the @mozhacks account.

Blog: http://robertnyman.com
Twitter: @robertnyman

Shezmeen Prasad

Shezmeen is working on everything regarding events, organization and connecting conferences with Mozilla speakers.

Stormy Peters

Stormy is the Team Lead for the Developer Engagement team. managing it and evaluating our objectives.

Blog: http://stormyscorner.com/
Twitter: @storming

Tristan Nitot

Tristan is our Mission Evangelist and is focusing on the bigger picture of Mozilla.

Blog: http://standblog.org/blog/en
Twitter: @nitot

Will Bamberg

A picture of Will Bamberg Will is working on documentation for the Add-ons SDK (Jetpack).

Bonjour MozillaChahrawoods

Chahrawoods et Clarista
(Photo : Pandark)

Le bureau de Mozilla à Paris a eu la chance (le bonheur même, il suffit de voir le sourire de Clarista) de recevoir il y a peu Chahrawoods. De son vrai nom Chahreddine Ben Ali (eh oui, il a le même nom que l’ancien président de Tunisie :D, ce qui lui vaut pas mal de plaisanteries qu’il reçoit avec son sourire éclatant), il est étudiant à l’école ESPRIT à Tunis, en passe d’obtenir son diplôme d’ingénieur en informatique. Chahrawoods est un fou de cloud computing ! Il est tout simplement intarissable sur le sujet, et recherche activement un stage dans ce domaine sur lequel il a un véritable champ d’expertise. Ce fan d’open source, multiplie aujourd’hui avec bonheur les contributions pour Mozilla, en compagnie de son mentor, Melek. Melek, qui ne tarit pas d’éloges sur son poulain, et le qualifie de “bon vivant, qui adore les choses simples et déteste les gens hypocrites”. Dernière chose, importante, à savoir sur Chahrawoods : il adore l’équipe de foot Espérance Sportif de Tunis…

Bonjour Chahrawoods !


Mozilla’s office in Paris was lucky (and happy, just look at Clarista’s smile) to receive Chahrawoods a short time ago. His real name Chahreddine Ben Ali (yes, it has the same name as the former president of Tunisia :D, which earns him a lot of jokes that he receives with his bright smile), he is a student at the ESPRIT school in Tunis, on track to graduate in computer engineering. Chahrawoods is fond of cloud computing! He just can’t stop talking about it, and is actively looking for an internship in this field on which he has a real proficiency. This Open Source fan, now happily multiplies contributions for Mozilla, with his mentor, Melek. Melek, who raved about her foal, and calls him a “bon vivant who likes simple things and hates hypocritical people”. Last important thing to know about Chahrawoods: he loves the soccer national youth team of Tunis…

Bonjour Chahrawoods!

Harvey AndersonMicrosoft acquisition of Netscape/AOL patents

As reported in the news this week, Microsoft acquired some 800 patents from AOL for a billion dollars. A few people have asked what this means for Mozilla. At present, I don’t believe that the acquisition poses an immediate danger to Mozilla.

There are many possible motivations for the acquisition including reducing exposure, preventing others from obtaining the patents, increasing your portfolio size and quality, using them for cross-licensing, or even patent license programs. We’ll never know for sure, but viewing this acquisition in the broader context of the patent battle playing out across the tech sector, it makes sense for strategic reasons.

Certainly Google, Apple, and Microsoft are key competitors in this battle, and Google recently increased its portfolio size dramatically with the acquisition of 17,000 Motorola patents. Other players hold thousands of patents as well, topped out by IBM with 6,000+ new US patents in 2011 alone. Obtaining a huge chunk of patents and licenses in one move, saving time along the way, makes sense for broader reasons, and in this context it is hard to imagine it’s driven by anything related to Mozilla. Frankly, there are easier ways to influence the market without near the attention or the cost.

In this particular case, it would seem that the exposure is even lower because portions of the Mozilla code base are already licensed under some set of these patents. Early code contributions from Netscape to the Mozilla project came with patent licenses from Netscape/AOL via the Mozilla Public License. These licenses are still in play. For example, the first granted Netscape patent was for HTTPS as I recall. To the extent this is implemented in the Firefox browser or Thunderbird code bases by Netscape/AOL (and subsequently the Mozilla code base) patent grants would flow with the code under the MPL. The express MPL patent grant, which didn’t exist in other open source license at the time, finally sees its day.

Overall, while this acquisition is certainly surreal for many Mozilla folks that worked at Netscape including those who are inventors for some of the patents, I don’t view this as a threatening move in and of itself. Patent holders like Microsoft and Google are generally considered more predictable, subject to market and ecosystem pressures, and more often than not, targets of patent litigation themselves. That being said, Yahoo did sue Facebook, so conventional wisdom may no longer apply these days.

I believe the real threat is what ultimately happens with the patents. If Microsoft maintains ownership of the patents, on the margins, it is better than having them sold off piecemeal to non-practicing entities, often called IP trolls. If they end up in the wild, it’s not a good thing. We will need to watch this carefully.

It would be great to see Microsoft express its intentions in this regard or put some protections around the portfolio if it transfers the patents. This could alleviate many of the concerns raised by the transaction.


Jared WeinOpting-in to plugins in Firefox

Whether you hate them or love them, content accessed through plugins is still a sizable chunk of the web. So much so, that over 99% of internet users have Flash installed on their browser. However, plugins can also carry with them extra vulnerabilities and system slowdowns.

A couple days ago I landed an initial implementation of “click-to-play plugins” in desktop Firefox. To see and play with the feature, download a Nightly build of Firefox, go to about:config, and enable the plugins.click_to_play flag.

When plugins.click_to_play is enabled, plugins will require an extra click to activate and start “playing” content. This is an incremental step towards securing our users, reducing memory usage, and opening up the web.

I’m currently working on implementing the ability for plugin activation settings to be remembered on a per-site basis. I hope to get these changes landed within the next week before the deadline for Firefox 14.

If you are curious and want to learn more about our plans for opt-in activation of plugins, you can take a look at the feature page on our wiki.


Tagged: firefox, memshrink, planet-mozilla, plugins, security, snappy

Meeting Notes from the Mozilla communityMobile Meeting Minutes: 2012-04-11

Mobile/Notes/11-Apr-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

  • Next merge is 2012-04-24

Major Topics for This Week

Release Planning
We have been keeping an eye on the blocking bug counts, stability and performance metrics. The current plan was to uplift all required code to Aurora (Fx13) and ship a Beta to the marketplace 4/16+baketime. The adjusted plan (proposed) is to wait for Fx14 to merge to Aurora and ship a Beta to the marketplace 4/24+baketime. The only date adjustment is 4/16 to 4/24. Given the longer than usual beta period, we are not expecting to adjust the final release date at this time.

Working on Soft Blockers
The release drivers may flas some blockers as “soft” meaning we’d take the fix if it makes the cut-off and is low-risk enough. Making the cut-off is an easy checkpoint, but determining low-risk is not. Even though drivers flag a bug as a soft blocker, we might still not accept the fix based on the risk level of the patch. The developer and review(s) need to chime in on the risk level.

Blocking Bug Disclaimer
Do not treat the blocking bug list as “these bugs must all be fixed before a beta candidate can be created” type of list. During blocking list cleanup, we have come across numerous bugs that would not really block if we had a beta candidate build that met our stability and performance criteria.

Stand ups

Suggested format:

  • What did you do last week?

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

Please keep your update to under 2 minutes!

James W. (snorp)
  • Last week

    • Worked more on fullscreen support for Flash (sigh)
  • This week

    • Tabled fullscreen support, working on hack to make panning/zooming Flash better on Gingerbread/Froyo
Kats
  • Last week

    • Largely working on reducing latency to draw

      • bug 742019 – rewrite how touch events are handled in java

      • bug 740718 – null pointer dereference in the event coalescing code
      • bug 741288 – (partial checkin) reduce time spent in Gesture:ShowPress
      • bug 740883 – reduce latency between user flinging and us drawing
    • Also further tuning of displayport
      • bug 733041 – switch to velocity-bias as default to improve checkerboarding a bit
    • Miscellaneous
      • bug 741988 – checkerboarding regression caught by eideticker (fixed original problem but something else re-regressed it)

      • bug 744094 – log robocop-internal exceptions so we know when it breaks
  • Next week

    • Make the displayport strategies more preffable so qa can play around with it (bug 744241, bug 744390)

    • Work on aligning the displayport to the tiles BenWa is doing (bug 737510)
    • Try to figure out if we’re doing unnecessary work due to rounding errors with float conversions and other such stupid things
  • Blockers

    • None
GBrown

Last week:

  • Tile cache

  • Bug 734715 Intermittent TEST-UNEXPECTED-FAIL | Unable to copy profile to device.
  • Bug 743766 SUT agent: java.lang.IllegalArgumentException in RedirOutputThread

Next week:

  • Continue work on tile cache
Chris Lord (cwiiis)
Chris Peterson
  • This Week

    • Continuing investigation of missing key down/up events: bug 630576, bug 693338, bug 695626

    • Implementing review feedback for bug 742036 – Convert DOM key codes to Android key codes when passing key events to Flash plugin
GCP
  • Last week

    • Time off

    • bug 741528 Clicking on link results in a blank page but it renders OK by itself
    • bug 741836 Native crash without backtrace in SQLiteBridge
    • bug 743715 Cannot build Fennec without jemalloc
    • bug 742815 Probing migration status can launch multiple migrations
    • bug 743923 Don’t keep history in memory during Profile Migration
  • This week

    • Finish bug 741281 Add a Java interface for sending telemetry data

    • bug 741042 Add telemetry support for timing XUL profile import
    • bug 721898 Remove history truncation code
    • Yet More UrlClassifier stuff
    • Write tests?
  • Blockers

    • bug 739629 Expose safe account creation API for profile migration
Brian N
  • Done

    • PTO

    • bug 742771 – Browser shows old URL on startup
    • Investigated bug 743411 – Cursor implementation does not conform to android.database.Cursor interface. Causes infinite loops.
    • Looking at bug 732052 – XUL Scale elements should support touch events
  • Next
    • bug 732052 – XUL Scale elements should support touch events

    • bug 743736 – Touch event handlers on nytimes.com take a long time to run
Sriram
  • Last Week:

    • Enable/disable android services only on application pause/resume – bug 742216

    • Investigated prompt service to be ICS ready – bug 739824
      • Need test cases for various kinds of prompts to make any change
    • Grey color background on awesomebar tabs – bug 740310
    • WIP for using Custom Views instead of ViewHolder in AwesomeBarTabs
  • This Week:
    • Null check for ContentValues in SQLiteBridge – bug 738347

    • Investigated recovering locked DB in android – bug 741224
      • Need ways to reproduce it to test the posted patches
  • Blockers:
    • Zarro boogs found. Yaay!
WesJ

Last week:

  • bug 708048 – context menus sometimes do not show link location

  • bug 742540 – Clicks fired near a box with a link can trigger the link
  • bug 740218 – Fennec form history content provider insert is slow on Transformer Prime
  • bug 739215 – Managed to wear mfinkle down and land, Favicon for about:firefox

This week:

  • bug 741247 – Touch events aren’t consistently triggered especially on the right sides of elements
LucasR

Last week

Next week

  • Release blocker fixing

  • Soft blockers fixing
  • Prepare Mobile & Mobile talk for conference in Portugal

Blocker

  • None
MBrubeck

Done:

  • bug 742428 – Update the AMO/marketplace icon in the add-on manager

  • bug 743415 – Back button goes back to about:empty after loading a redirect
  • Tracked down cause of bug 721784 – Add-ons don’t work after XUL Fennec migration

Next:

Margaret

Done:

  • Multiple history entries with the same URL – bug 741590

  • Click-to-play issues

Next:

  • Finish sorting out remaining click-to-play blockers

  • Help out where needed
Scott (jwir3)

Done:

  • bug 708175: fixed width form controls shouldn’t have their fonts inflated

Next:

  • bug 707917: Word cloud does not render correctly

  • Need to finish looking through what remains – all blockers are complete, or on their way to being complete.
  • Likely to be bug 723947: Text size is reset after di.se completes loading

Other:

  • dbaron reports that he hopes to have the ny times bug landed sometime late this week or early next week, assuming tests are developed as planned.

  • We need to triage some of the remaining font inflation (non-P1) bugs in Dependencies for font-inflation
BLassey

Last week

  • meetings

  • reviews
  • getUserMedia for still images (held up in sr by jonas) bug 738528
  • attempted to fix a plugin crash bug 738198

Next week

  • same ole, same ole
MFinkle

Done:

  • Scanning for performance regressions

  • Reviews
  • Triage
  • More work on the WEBAPP intent… it’s close bug 737050

Next:

  • Looking at building a list of “soft” blocking UX bugs

  • Finish the WEBAPP intent feature bug 737050
Madhava
  • listing soft blockers

  • looking at panning/zooming dynamics
  • that’s it – on to Ian
Ian Barlow

Last week

  • PTO + Sick + Long weekend

This week

Patryk Adamczyk
GFX

Round Table

QA
  • This week

    • A|B testing results posted here. Summary:

      • Test coverage against Adreno 200/205/220, PowerVR SGX530/SGX540

      • Still seeing checkerboarding on zooming and overscroll (sometimes black background instead)
      • A vs. B do not pose any significant visual differences.
    • attacking late-breaking features like download manager, form sync history, webapps
    • Bugwork: Daily Triage on New/Unco bugs, and paying attention to qawanted and regressionwindow-wanted bugs
    • Qualifying Fennec XUL Beta 12b5
  • Socorro/Breakpad bugs:

    • bug 726385 Please create skiplist implementation for the Java field

    • bug 726693 Some java crashes are not being mapped correctly to bugs in bugzilla even though the crash signature fields have the “signatures” listed
    • bug 672606 – Aggregate numbers and topcrashes for Nightly and Aurora channels based on build ID date instead of crash date
    • bug 727234 – Crash Report [@ EMPTY: no crashing thread identified; corrupt dump ]
    • bug 727286 – Incorrect messaging when failing to submit a crash report
  • Profile Migration ran on 4/6/2012

Device rows of bookmarks Time Elapsed
HTC Desire HD 796 ~46 secs
Captivate 796 ~46 secs
Droid 2 796 ~53 secs
HTC Desire HD 2928 ~1 min 23 secs
Captivate 2928 ~1 min 22 secs
Droid 2 2928 ~1 min 38 secs

Meeting Notes from the Mozilla communityFirefox/Gecko Delivery Meeting Minutes: 2012-04-11

Firefox/Planning/2012-04-11

« previous week | index | next week »

Planning Meeting Details

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

  • Mountain View Offices: Warp Core Conference Room
  • Toronto Offices: Finch 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

Kilimanjaro

Kilimanjaro Product Draft

Firefox Desktop
Release (3.6, 11, 10esr)
  • First 3.6 (EOL) MU prompts will occur next week, with further prompts and automatic updates to follow
Beta (12)
  • Beta 5 will be released Friday (4/13)

  • Code freeze for FF12 is also this Friday
  • Add-on hotfix to communicate the FF13 Win2K/XP RTM/XP SP1 de-support expected to test and roll out to the beta population next week

  • We plan to have a FF12 What’s New page specifically for users updating from 3.6, testing planned for next week
Aurora (13)
Nightly (14)
  • Criteria for uplifting PDF.js to Aurora is currently being discussed, will not occur for FF14

  • Bug 711552 Create click to play UI for desktop
Firefox Mobile
  • Release plan: Fx14 will be our ship vehicle.

    • We will no longer be uplifting aggressively to Aurora for Fx13
Nightly (14)
  • Stability and performance improves

  • Work on blockers continues
Firefox Sync
  • Sync Process

    • Rapid Release meeting is Friday

      • If you want to ask for a feature, that meeting is the time to do it. Please see :ally if you have questions
  • Sign into Browser/Sync 2.0/persona/BrowserId
    • Flag day is now tied to this & B2G’s deadlines

    • Old Clients will not work after Flag Day
      • Scheduled Clients: desktop & native fennec, b2g client (when written)

      • Firefox Home is not scheduled for update
      • Fennec XUL is not scheduled for update
    • There is -no- plan right now for retiring the Sync 1.1 system
  • Native Android Sync
    • In progress
  • Apps In The Cloud (aitc) Backend
    • going well. Load tests for beta (april 24) have started

    • the apps folks should have more details. We only work on the backend
Add-on SDK

Release (1.6 -> Firefox 11, 12)

  • Released Hotfix 1.6.1

    • Fixes a minor memory leak found by Mingyi Liu

Stabilization (1.7 -> Firefox 12, 13)

Development (1.8 -> Firefox 13, 14)

  • On track to merge to Stabilization 15 May 2012
  • Alex Poirot released the Locale-Updater Add-on

    • Localizers can have one-click testing of new .properties files for any installed SDK-based Add-on through the Add-on Manager

    • Alex is eager to improve this – so feedback is encouraged!
Identity
Apps
  • Firefox Desktop 14 (Nightly) – being reviewed

    • Native Install

    • Chromeless launch of apps
  • Firefox Mobile 15 – in progress
    • Was 14, shifted due to Beta work

    • Native install
    • Chromefull launch of Marketplace and apps
    • Proposed Android solution is to bundle the marketplace with Firefox. More coming on this.
  • Apps in the Cloud
    • Apps in the cloud server running

    • Apps in the cloud clients for desktop and mobile targeting Fx14 timeframe

Feedback Summary

Desktop
  • Firefox 11:

    • Major increase in the number of people with babylon toolbar and “text enhance”. We’ve seen it for months now but it’s a lot higher recently. (It’s hard to get actual stats because it’s just people jumping on older threads).

      • Still lots of redirecting to malicious search engines (a majority of our top threads)
    • Also increase in Flash issues (including difficulty getting it updated and/or Facebook flash games not working)
    • Facebook chat sidebar disabler broke. They have a new beta
  • Firefox 12: Trending words in input (12 vs 11-in-beta):
    • slow — nothing new here

    • facebook — not opening, pages blank, some comments around crashing?
    • date — “is out of date” errors
    • java
    • game — lots of java games, but also facebook games
    • update
    • unable
    • bookmark — bookmarks missing from toolbar
    • toolbar
    • tell
    • time
    • pogo
    • return
    • drag — can’t drag to reorder tabs in tab bar (may be an extension)
Mobile

UX & User Research

Firefox UX Design

This week in Firefox UX (perhaps a bit of backlog):

Market Insights

Desktop / Platform
Adobe
  • Adobe updated Flash because of two high severity security issues.
Amazon
  • Amazon released the In-App Purchasing API for applications sold in their Android appstore. This API allows application developers to monetize not only only on the initial sale of applications but by selling upgrades, features, and other content directly in their applications. Consumers can make purchases using their existing Amazon IDs. Both Google and Apple’s stores have similar functionality.
Apple
  • Apple released a critical update for Java to address, in part, a vulnerability that had allowed the Flashback Trojan to infect more than half a million Mac OS X systems worldwide.
Google
  • The Android team released an updated emulator for the platform, adding GPU support, more hardware feature emulation and improved CPU performance.

  • The team also published a new Accessibility Developer Guide for Android.
  • Google Chrome’s WebRTC team also published a roadmap of upcoming work to fine-tune their WebRTC implementation that is arriving in Chrome. Upcoming work includes screen sharing, a data API, and recording.
  • Chrome’s stable and beta channels were updated. Fixes included 12 security issues, including a number of use-after-free issues.
  • The Beta version now has tab syncing across different instances of the browser, including both desktop and mobile versions.
  • The Dev version of ChromeOS now has the Aura window manager, changing the interface to be much more like that of a standard operating system like Windows.
Microsoft
  • Microsoft, in partnership with Bocoup, a HTML5 training provider, annnounced BuildNewGames.com, a website that aims to introduce and promote the use of open web technologies to build great gaming experiences “without plugins”. The section on mobile browsers is interesting, as it includes some frames-per-second benchmarks of performance on the iPhone, iPad, and Galaxy Nexus.

  • Microsoft also released eleven patches for Windows and Internet Explorer, seven of which were listed as “critical”
Tizen
  • The Tizen group published the presentations made at the Linux Foundation Summit. These include an architecture overview, a summaries of the greater Tizen community and the Enlightenment Foundation Libraries, and descriptions of planned use of the Wayland display server and the oFono telephony stack
Webkit
  • Webkit announced availability of version 1.0 of the Webkit remote debugger. This JSON-based tool is now supported in the Blackberry Playbook and Chrome for Android.

  • Webkit also now supports Battery Status and Vibration APIs on the Blackberry, arguably the first WebKit port to do so.
  • The author of the open source color picker used in WebKit’s Web Inspector posted a good overview of its design and features
Other

Marketing, Press & Public Reaction

Marketing
  • Preparing for merge day: blogs and collateral updates for Desktop

  • Working on finalizing billboards for 3.6 EOL
  • Continuing to work of mobile materials
Press

Questions, Comments, FYI

  • hg.mozilla.org will be offline 6-9am PT thursday

Actions this week

  • Mary/Slater to show us k9o pretty

Mozilla ITLiveblogging: What’s New In MySQL 5.5 and 5.6 Replication

Liveblog: What’s New In MySQL 5.5 and 5.6 Replication
presented by Giuseppe Maxia at the Percona Live MySQL Conference and Expo.

Has been working with MySQL for 11 years.
Yesterday Oracle released MySQL 5.6.5 with new stuff, so the content was rewritten last night.
main features we’ll talk about:
5.5 semi synchronous replication
5.6 delayed replication
server uuid
crash-safe slave
multi-threaded slave
global transaction identifiers

In MySQL 5.5 – what is semisync replication? It increases reliability by making sure that the changes are committed on at least one of the slaves before the write query is returned.
To use it, install the plugin rpl_semi_sync_master on the master, and rpl_semi_sync_slave on the slave. Then you configure the master to use the plugin, and then you restart both the master and slave to activate the plugin and config.

Once you restart you see variables like rpl_semi_sync and you can see whether it’s enabled, what the timeout, trace level, etc are.

Rpl_semi_sync_master_no_trx (how many trx didn’t go to the slaves) and Rpl_semi_sync_master_yes_tx (was it successfully sent) are status variables = counters on the master.

In MySQL 5.6 – delayed replication is part of the MySQL that ships with MySQL, you no longer need to use pt-slave-delay.
CHANGE MASTER TO MASTER_DELAY=#seconds;

show slave status shows you SQL_Delay and SQL_Remaining_Delay

UUID – each master has a UUID in addition to the server_id. This is important for global transaction IDs, which makes sure that even if you change server_id’s the global transaction ID is still associated with the same server. [Giuseppe did not know why the server_id wasn't abandoned totally in favor of the UUID.]

More crash-safe replication:
SHOW VARIABLES LIKE ‘%info%’ ;
there are master_info_repository, relay_log_info_file, relay_log_info_repository, sync_master_info, sync_relay_log_info
also there’s a variables called slave_parallel_workers

These variables help ensure that if the slave crashes, the relay log and master.info files are kept in sync and don’t try to retrieve or apply a statement more than once.

The crash-safe features are only for innodb, but MySQL ships the following tables as MyISAM:
slave_master_info
slave_relay_log_info
slave_worker_info
so when you start, ALTER TABLE …ENGINE=INNODB

When you do SHOW SLAVE STATUS you’ll see
Master_info_file: mysql.slave_master_info

SELECT * FROM tables you get a lot of info – slave_master_info is most, but not all, of the same info in SHOW SLAVE STATUS.

slave_worker_info has 1 line for each worker you have set.

facts about multi-threaded slave aka parallel replication

Requires MySQL 5.6 in both master and slave (can’t do 5.5 master, 5.6 slave) to actually do parallel replication.
Parallel replication with a MySQL 5.5 master will slow down replication – so you can do parallel replication but it’s 3x slower (right now).
Data gets parallelized by the schema – so if you have 2 queries in the same schema, they can’t be done in parallel, but 2 queries in 2 different schemas, they can be done in parallel. If you only have one schema, don’t bother using parallel replication.

do it by setting the global dynamic parameter:

SET GLOBAL slave_parallel_worker=10; (or 3, or whatever, default is 0). How do you choose the # of parallel workers to choose? MySQL is smart enough to figure out how to use the parallel workers around the schemas you have. In tests, parallel replication was 3-4x faster than regular replication.

Global transaction ID – If a master fails, all the data from the master cannot be accessed. So you have to figure out which slave is the most advanced one (in terms of time), promote that slave to the master, and figure out which transactions the other slaves were missing. But it’s hard to know in the relay log, because it can be a different file/position in each slave. So the global transaction id uses a unique number, so you don’t have to worry about the relay log filename/position.
to use the global transaction id, all machines in the cluster (master and slaves):
log-bin
log-slave-updates
gtid-mode=ON
disable-gtd-unsafe-statemnets – tricky
Why tricky? This feature does not work on non-transactional tables, like MyISAM. If you try to remove the anonymous user from the mysql.user table and you have this set, it’s not safe so it doesn’t work and you get a master error. GRANT, REVOKE, DROP USER will work, but DELETE, INSERT, etc don’t work.

CREATE TABLE…SELECT does not work with this feature, so don’t turn it on if you use that.

After changing the variables in the mysql config file, restart the servers to pick up the changes.

You then see the @@SESSION.GTID_NEXT=’44556A96-8417-11E1-9589-2BD5ACDD51FD:1′
after the : is the transaction ID number (1 in this case), everything before it is the server’s UUID. Using this information you can more easily find which transactions in the binary log you need.

There are 2 more lines in SHOW SLAVE STATUS\G:
Retrieved_Gtid_Set:1-100
Executed_Gtid_Set:1-100
(That’s the set of numbers)

—–

And that’s it, he then took questions.

Mozilla LabsGladius, a Modular 3D Game Engine for the Web

The Gladius team at Mozilla is releasing version 0.1 of our open-source 3D JavaScript game engine for the browser. Gladius is designed to help people write great 3D games for the open web.

 

What we’re releasing today is an early prototype, intended to get people’s eyes on the code, APIs, and examples as we continue to iterate. Key features of the engine for this release include an entity/component framework, WebGL graphics rendered with CubicVR.js, and 2D physics based on box2d.js. Modularity and extensibility are strong design objectives and are supported by require.js.

 

This release includes a standalone math library, which is the first in a set of tools and libraries which will be generally useful and reusable in other projects.

 

In order to be sure that the engine will be powerful and capable enough for rich, interactive 3D games, we’re collaborating with Andor Salga on a game-in-progress based on the No Comply WebGL demo. It continues to be immensely helpful as a vehicle for demonstrating how the individual pieces fit together as well as in surfacing issues with our APIs.

 

One thing that we’re hoping to get from this release is API feedback about the asset loader.  That API is currently entirely callback-based and we’re curious whether game developers find that comfortable, or whether something that uses promises would be preferable. Please direct feedback either to this github issue or find one of us in #games on irc.mozilla.org to chat further.

 

More information is available on github, including a link to our short and medium-term roadmap along with the code, some examples, a tutorial, and various ways to get in touch.

 

– Alan Kligman and Dan Mosedale, on behalf of all the Gladius contributors

Benjamin KerensaWhat do Instagram and OpenPhoto have in common? Ubuntu!

 

logo What do Instagram and OpenPhoto have in common? Ubuntu!

Do you use OpenPhoto?

Sean Kerner at InternetNews recently revealed the fact that Instagram which was recently acquired by Facebook uses Ubuntu Server 11.04 to power their cloud. OpenPhoto which was a Kickstarter project and is becoming very popular in the wake of the Instagram acquisition is also powered by Ubuntu Server 11.04 but offers users the ability to take total ownership of their photos and rapidly deploy a crisp new way to manage photos.

I’m actually in the process of working on a juju charm to allow even faster deployment of OpenPhoto installs within the cloud which should suit those using AWS quite nicely and have also joined the OpenPhoto Team to help with Community Management.

Anyways enough rambling… Go fork a copy of OpenPhoto and get to hacking!

BabelZillaNew Translation Teams: localize 3 top extensions for your language

We are very glad to see surfacing new localization teams working hard to release their language langpacks for Firefox, some are already available, some are still in progress. Here is a selection in no particular order:

Acholi
Fulah
Wolof
Kashubian
Ligurian
Nahuatl
Tarahumara
Tseltal
Zapotec
Khmer
Guarani

Localizers, you just rock!

Now we have a simple invitation: as soon as main goals are reached and the langpack for the application itself is released, we suggest you should indulge in translation for let’s say 3 top popular extensions, so that your users might have a complete experience in their language. Maybe Adblock Plus, Video DownloadHelper and Personas Plus. Of course these are just our suggestions, feel free to pick whatever you like. Here the list of AMO most popular extensions.
As most of them are hosted for translation on BabelZilla, you have a simple way to translate online. You have just to register with a valid email. Then pick the extension you wish and translate. Several contributors can register for the same translation so team work is possible and recommended. More on this little guide.
In case you miss your language slot in the list, just ring the bell with a quick message to techadmin at babelzilla.org.

Mmmh.. Localizers for established locales, why not having the top 10 extensions translated if not yet available? ;-)

Tim TaubertAre we small yet?

Lately, Asa Dotzler posted to dev.apps.firefox regarding the download size of Firefox:

“This evening I noticed that my full win32 mar update for Firefox was 21MB. That caused me to look at what our full win32 installer size was. I was a bit surprised to see it’s up to 17MB. When we shipped Firefox 1, our Windows installer build was 4.7MB. [...]

Firefox 12 is a 16.1 MB download.
Firefox 4 was a 12.0 MB download.
Firefox 3.6 was a 7.7 MB download.

In less than three years we’ve more than doubled in size. (fuller chart here http://grab.by/cSHA)”

While there’s no doubt that adding new features and supporting new platforms are good reasons for increasing the build size it’s definitely a metric that impacts users. It hits them the hardest when downloading Firefox the first time, especially with slow internet connections. It still hits them every time we provide application updates.

To better illustrate the steady growth over the last few years I created http://arewesmallyet.com/. It’s updated daily, shows differences between nightly builds and links to the corresponding changelog if one would like to investigate the cause of increasing build sizes.

While this surely isn’t the most important battle we have right now I hope this will turn out useful to anyone willing to pick this up and tackle some build size optimizations.

 

Data: http://arewesmallyet.com/files/data.json
GitHub: https://github.com/ttaubert/are-we-small-yet

Niko MatsakisDOA: Don't overabstract

I’d like to propose a term for code that has been “over-DRY’d” (dessicated?). I occasionally run across some method which just seems horribly complex. Reading it closer, it usually turns out that what happened is that two or three independent operations got collected into one subroutine. Perhaps they started out as doing almost the same thing—but before long, they diverged, and now the subroutine has grown a hundred parameters and has a control-flow path that requires a whiteboard and a ultra-super-fine-point marker to follow. But, just as often, you can tear this routine apart into two or three routines that read just fine, even if they share a line or two of code in common. So I’m going to start calling such routines “DOA”, though the acronym has a bit of a different expansion when used as an adjective.

Jess KleinKeep Calm and Code On

I love running.  That said, I am often frustrated that I am only a beginner and I have days where I just suck or moments where I can't even get motivated to get out the door.  In these moments, I often look to my community of peers for support. Sometimes, and this is possibly a running nerd confession of some sort- I look to Pinterest.  There's a plethora of inspirational quotes, photos, posters etc for runners- and runners constantly are posting this kind of stuff around them to get inspired. Things like:

 
 




Yes, they are a bit cheesy- but in a very real way they are motivating me to go out and run. I think part of it is that a poster on some level is a form of establishing your identity. I put a running poster up- all of a sudden, I'm the real deal- someone who cares about running. On another level, it truly is a constant reminder to stay focused and not lose faith in what I want to do.

I got to thinking a bit about how this same motivational strategy could be applied to webmaking and people who are learning code. Frankly, I made this connection because despite what I say, learning how to design and program for the web is new and can be hard to do. Sometimes, you just need that little dose of inspiration. I wonder, what motivational sayings we could dish out to the newbie webmaker, to keep them motivated while simultaneously allowing them to self identify as webmakers:

or....


Obviously I'm joking around on some level- but I do think that this relates to the work that we are doing on integrating badges into projects like the Missions that I wrote about earlier. I think that we need to develop a community of webmakers, and doing this means elevating role models who users can identify with,  establishing a language around the work that we do- Keep calm and code on, and as always, integrate play into our programs and initiatives.

* note: thanks to Charley Miller for wordsmithing the Keep Calm Code On poster

Matt ThompsonCode is all around us

What do we think about when we think about “code?” Many of us think something like this:

Alien. Intimidating. Gobbledygook. Maybe even vaguely sinister, like The Matrix. Something that says: this is not for you.

Whereas, for the Mozilla Webmaker project and our Summer Campaign to teach the world to code, we want people to imagine code more like this:

Or this:

Or maybe this:

In other words: code as something all around us. Warm. Human. Poetic. Not some scary bunch of geeky gibberish that only anointed high priests understand.

We want to show code and webmaking as revealing the patterns and hidden dimensions of everyday life. Swirling all around us. Like everyone’s second language.

The web as literacy. Code as everyone’s second language.

Code and webmaking as literacy — rather than just a professional skill. For a general audience of everyday people who have mostly never touched code before (teachers, youth, journalists, filmmakers, your mum), we want to employ a visual language that treats code less as math and mechanics and scary algorithms — and more as magic pixie dust. Or a maker’s language that can turn your big ideas into reality.

Once you see code as something that makes up your everyday world, you can begin to start using it yourself. To make something amazing, or bend the rules of everyday (digital) reality.  Moving from passive consumer of other people’s stuff to active creator of your own.

The hidden patterns and algorithms of everyday life

This opening to “Stranger Than Fiction” isn’t about code per se — but it perfectly captures the spirit we’re after. Revealing the hidden patterns and algorithms of everyday life.

The web as a maker’s world — NOT a series of tubes

Other visual examples of the web often try to depict it as a network or ecosystem. The challenge with this approach is that it emphasizes the pipes and tubes and tech — instead of the human dimension, and the web as a maker’s world.

Not this.

How do we apply this idea of “everyday code” in our visual language, branding and videos? As we think more about how to visually tell our Mozilla Webmaker story, we want to move away from abstract depictions of “the web” and instead emphasize the human dimension.

We want to tell stories about real people and Mozilla community members making amazing things. Passing and sharing them with others through a combination of maker spirit, open collaboration, and building the future they want together. Using real code to build big ideas.

Not this really, either

Seeking your examples: what else is like this?

I’d like to ask your help in collecting more examples like these. Images, web sites, memes, concrete examples — anything. Examples of:

  • Code as poetry. Code as a language for saying something more simply or elegantly than could be expressed otherwise.
  • Code as meme. Like “Movies as Code” Or “Programmer Ryan Gosling.”
  • Code as expression of the everyday world. In places we don’t ordinarily think of it: nature. An alarm clock. Your car.

What other sites or examples should we be looking at? I’m new to this world, and would love to learn from your favorites. Please share links as comments here. We want to collect memes and examples that can help inspire this style guide for our “Meet the Webmakers” video series.

We like the direction — but want to insert more real code into the mix, and slip in references that real developers will appreciate. So what examples would you include for inspiration? I know you’ve got them…

Firefox Support BlogIt’s Thursday, it’s SUMO Day!

As many of you already know, every other Thursday we’re organizing a SUMO day where we try to answer all the questions coming on the support forum. This Thursday, April 12th is a new SUMO day!
We’ll be answering questions in the support forum and helping each other in #sumo on IRC from 9am to 5pm PST (UTC -8).

Join us, create an account and then take some time on Thursday to help with unanswered questions. Additional tips for getting started are on the etherpad. Our goal is to respond to every new question posted Thursday, so please try to commit to answering as many questions as you can throughout the day.

Last SUMO day we had 96% of questions answered, can we make it to 100%?

Grab your cape and join us on Thursday!

Madalina

Web FWDWhat Startups Can Learn From Scientists

If you blog about your new product, will you get 100 signups? If you do, does it follow that you will get 200 new signups if you do two posts?

Mason Edwards of WebFWD’s Synbiota team shared how these sorts of questions tie into core disciplines around engineering and science. Not surprising that Edwards finds these skills useful: Synbiota was founded by synthetic biologists seeking to leverage the web to foster increased innovation and improve information sharing. In short, Synbiota wants to bridge a perceived gap between the scientific and software communities to accelerate innovation in synthetic biology.

Mason reviewed some key concepts from both science and business, and extrapolated some lessons for how they might impact software engineering decisions. His goal: help startups adopt the best practices for their particular market, service and teams. Specifically, Mason drew upon these relevant principles:

Mason has a style and energy that are difficult to capture in text, so please tune in to his humorous delivery and enjoy!

Greg WilsonLives Lived

My sister-in-law, Sarah Harrison, wrote a “Lives Lived” about my sister Sylvia which appeared in today’s Globe and Mail. I wish Sylv was here to read it…

Firefox Support BlogThe new autocomplete feature: from the community for the community

Our long time contributor Tobbi (Tobias Markus) just made the support forums better. He implemented an autocomplete feature that makes it easier for contributors to search for articles while answering questions. When you want to link to a KB article, you can browse the link input field and don’t have to open another tab. You can also use “#”to point to specific sections of the article. This feature makes answering questions easier and will save our contributors time.

The story of this feature started when Propeng and Tobbi began brainstorming about how to improve the old tiki-wiki based site and came up with the idea. Tobbi built an add-on with the autocomplete functionality and since it was awesome we suggested him to try to make it a built-in feature in our kitsune code. It seemed like a big step for Tobbi, but he took the challenge and now every contributor can use his feature.

We are really proud that our community is actively involved in coding SUMO and making it better, and we want to encourage other contributors interested in coding to join us. Tobbi worked with our SUMO coding steward Ricky Rosario, who guided him through our coding conventions.

Tobbi is already thinking bout his next big project: the canned answers, so stay tunned. If you want to join our coding community and get help from Ricky don’t hesitate to contact him or me. We are looking forward to more great contributions from our community.

And once again: kudos Tobbi!

 

Bonjour MozillaN'oublions pas le Mali !

mali
(Photo : AFP)

Si vous suivez l’actualité, vous savez sans doute qu’il se passe des choses graves au Mali. Des choses dramatiques. Or, l’un de nos contributeurs, Mohomodou Houssouba, est originaire du Mali, une partie de sa famille vit d’ailleurs à Gao, au nord de ce pays, le théâtre même des violences de ce dernier jour. Et son cœur saigne. Il saigne d’autant plus qu’il a l’impression que la communauté internationale tergiverse, occulte, détourne les yeux. D’où ce Bonjour Mozilla.

Sur cette photo vous voyez donc des réfugiés maliens qui ont fui la ville de Gao pour Bamako. Pourquoi ? Parce que c’est à Gao et à Tombouctou qu’opèrent surtout les groupes islamistes, Ansar Dine et son alliée AQMI (Al-Qaïda). Les gens sur place disent les “Allah-kubar Azawad”. Alors oui, la junte qui vient de prendre le pouvoir à Bamako est en passe de le rendre aux civils (enfin, c’est ce qu’elle dit), mais le nord du pays, lui, est désormais entre les mains des Touaregs et des islamistes. Et la sécession est proche. 

Voici ce que Mohomodou aimerait que vous sachiez, que tout le monde sache :

- les villes de Kidal, Gao et Tombouctou, avec leurs sites et documents inscrits au registre mondial de l’Unesco sont en grave danger. La plus grande ville du nord, Gao (65 000 sans les réfugiés des deux derniers mois) n’a aucun contact avec le reste du monde, aucun hôpital et aucune banque. Le Mali est sous embargo à cause du putsch et les frontières de pays comme le Niger, Burkina, Côte d’Ivoire, Guinée et Sénégal sont fermées pour forcer la main de la junte. Il y a juste un peu de carburant pour faire tourner la centrale quelques jours.

- Tous les bâtiments publics à Gao, les commerces, les maisons privées un peu soignées - tous pillés et saccagés. Il ne reste rien du centre de recherche agricole de l’Institut d’économie rurale qui a développé toute une gamme de fruits (dattes), légumes, céréales et plantes utiles résistants à la sécheresse : bâtiment cassé, stock pris et troupeau égorgé.

- Les gens vivent d’une heure à l’autre, se cachant dans leurs maisons. Des informateurs les aident à trouver les maisons des fonctionnaires, militaires et édiles. Ces gens essaient de fuir mais les frontières sont fermées. Les gens de la ville fuient vers la campagne déjà en alerte de disette en février

- l’eau et l’électricité vont manquer et on ne pourrait même plus appeler nos familles. Famine et épidémie (choléra) prévisibles très bientôt. 

- Et puis il y a les premières dépêches sur les viols en série en ville. Nouveau et si tragique.

- le débat international est focalisé sur le “retour à l’ordre constitutionnel” que je supporte sans ambages, mais l’insécurité et la précarité totales mettent les populations en grand danger immédiat

- il faut une force (internationale) de protection pour assurer un minimum de distance entre la population et les bandes armées et permettre l’approvisionnement urgent en vivres et médicaments

Voilà. Comme le dit Mohomodou : “l’urgence est là en attendant que l’imbroglio politique se démêle.”


If you’ve followed the news, you probably know that something serious is happening in Mali. Dramatic events! It turns out that one of our volunteers, Mohomodou Houssouba, is from Mali; a part of his family lives in Gao, in the north of the country, the site of the past few days’ violence. And his heart bleeds. Especially when he sees the international community dithers, occults, looks away. Hence this BonjourMozilla.

In this picture, you can see Malian refugees who fled from the city of Gao to Bamako. Why is that happening? Because it’s in Goa and Tombouctou that Islamist groups, Ansar Dine and its ally AQMI (Al-Qaïda), are active. People there talk about “Allah-kubar Azawad”. Yes, the military junta that just took the power in Bamako will give it back to the people soon (at least, that’s what they say), but northen Mali is now in the hands of Tuaregs and Islamists. And secession is near. Here is what Mohomodou would like you to know, what he would like everyone to know:

- The cities of Kidal, Gao and Tombouctou are in grave danger, as well as their World Heritage Sites and Documents. The biggest city in the north, Gao (65,000 inhabitants without counting refugees from those last two months) has no contact with the rest of the world, no hospital and no bank. Mali is under an embargo because of the coup and borders with countries like Niger, Burkina, Ivory Coast, Guinea, and Senegal are closed to force the hand of the military junta. There is only enough fuel to run the power plant for a few days.

- All public buildings in Gao, stores, untended private houses - all are looted and ransacked. Nothing is left of the agricultural research center of the Rural Economy Institute, which developed a whole range of drought-resistant fruits (dates), vegetables, grains, and useful plants: buildings demolished, stocks taken, and cattle slaughtered.

- People live from one hour to the next, hiding in their homes. Informants help them find houses of civil servants, militaries and municipal officials. These people try to flee but the borders are closed. Townspeople flee to the countryside, which was already in danger of famine in February.

- Water and electricity will be missed and we could not even call our families. Famine and epidemic (cholera) are foreseen soon.

- And then, there are first reports of serial rape in the city. New and so tragic.

- The International debate is focused on the “return to constitutional order”, which I unequivocally support, but insecurity and precariousness immediately endangers populations.

- An (international) protective force is needed to assure a minimum of distance between the population and the armed gangs, and to allow the provision of emergency food and medicine.

That’s it. As Mohomodou said : “The emergency is here, until the political imbroglio unravels.”

Christian HeilmannTTMMHTM: Cardboard arcade, the power of music, Book tank, Book about Ada and inventing on principles

So here are a few Things That Made Me Happy this morning – some of them need a bit of your time, but are worth while. Two of them made me cry – not ashamed to admit.


Carla CasilliOpen Badge Infrastructure Public Beta!

Today we launched the public beta of the Open Badge Infrastructure. This proclamation represents a huge accomplishment and is one that we are exceedingly pleased to announce. A few months ago, the OBI was a bit more concept than reality. No longer. Now you can visit http://openbadges.org and earn your first badge. Now you can push that badge to your Mozilla Badge Backpack. Now you can go to Open Badges on github to see our code. Now you can see our technical wiki. Now you can read our documentation.

There are many questions yet to be answered, many opportunities yet to be seized. But for right now we’ll stop to celebrate this momentous achievement today. A respectful and heartfelt thank you to the MacArthur Foundation for their fierce and courageous commitment to supporting learning wherever it occurs. Connie, An-Me, and Jen, we hope our efforts do you proud.

Many thanks to the indefatigable Open Badges group, too. Specifically, I’d like to acknowledge the fundamental work of the early Open Badges team: Erin Knight and Brian Brennan. Their profound efforts constitute the core of the Open Badge Infrastructure. Kudos and deep bows in their general directions. Additional thanks go to Chris McAvoy, Sunny Lee, and Mike Larsson who have continually strived to produce a quality experience and superior product. And while  Jess Klein and Atul Varma are not formal members of the team, they have worked alongside us to help us get to where we are today. And so we award them the honorific title Valued Friends of Open Badges. This brings me to the not insignificant effort put into the OBI by our community. Through a variety of different venues, you’ve built and shared widgets, declared your thoughts, begun thinking about the beginnings of a Wikipedia article, expressed feedback on weekly calls and just generally impressed the hell out of us. Our small team has worked hand-in-hand with you, our terrific volunteer open source community, to achieve something quite extraordinary in not very much time. Many thanks and congratulations go out to you, as well.

Today we celebrate. Tomorrow we begin our journey toward release 1.0. Yes, we continue on with our work—fully cognizant that there has been and will continue to be a good deal of discussion around the idea of Open Badges. To this we say, “Bully!” You may have guessed that we’re excited by the prospect of digital badges and we expect to remain so. Our heart is in the work.

In the coming days I’ll be following up this post with some history of how we got here, some decisions we made along the way, as well as some considerations for our future. Of course, you’re all invited.

Thanks for everything so far. More to come.


John FordWe have new, fast Mac build machines in production!

Today, the final changes needed to shift our Mac build load to our new OS X 10.7 Lion build machines went live.  These machines are significantly faster, as demonstrated in my earlier blog post.

To echo my message to a couple news groups, these are some things you might like to know:

  1. you need http://hg.mozilla.org/mozilla-central/rev/b687cabf75a1 merged in to your branch to get the biggest build time improvement
  2. pushing mozilla-aurora, mozilla-beta, mozilla-esr10 or mozilla-1.9.2 code to try will now attempt a build on 10.7 hardware.  Doing this is not suggested because your build may fail to build at all and it definitely will not match what we currently build on mozilla-aurora and older.
  3. These builds are able to run on 10.5
  4. we are using gcc-4.2 from xcode 4.1 running on OS X 10.7.2 right now and building against the 10.6sdk
  5. the machines are macmini5,3 (quad-i7 2.0GHz, 8GB ram, 2x500GB 7200RPM in Raid0, exclusively intel graphics)
  6. shark builds don’t work, bug 723301

John FordGenerating an epub copy of the Python Docs

I like Python documentation because it helps me get things done. I was curious if I could put a useful copy of the Python docs on my iphone. My first thought was to load the already generated docs. PDF is great on a large screen but doesn’t work well on a phone. Html files are great, but I don’t know how to host those files on my iphone without having root and text files aren’t indexed.

I don’t know much about epub, but I do know that it is supported on the iphone and has better text layout than US letter sized PDF files on the device. Python docs are generated using a tool called Sphinx and it turns out that they have an epub builder. Important to note is that this epub builder is experimental.

To generate my epub file, I followed the directions in the Python-2.7.2/Doc/README.txt file, using a builder name of epub instead of one of the listed ones. The result was that I ran these commands:

wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
tar zxf Python-2.7.2.tgz
cd Python-2.7.2/Doc
virtualenv doc-tools && source doc-tools/bin/activate
pip install sphinx jinja2 pygments
python tools/sphinx-build.py -bepub . build/epub

Doing this resulted in a large number of html files and an epub file, build/epub/Python.ebub. I opened the file with itunes open -a iTunes build/epub/Python.epub and synced my iphone.

So far my experience is that ibooks is very slow when working with this file. The file is twice as large as the complete works of Shakespeare and has a lot more markup! Most of the things I’d expect to be links are links and the indexes seem to be working just fine. Ibooks (the iphone epub reader) even shows the correct table of contents. Code samples are legible, but are a nested panning area, which is awkward when the same gesture flips to the next page.

If you are feeling lazy, here is a copy.

Meeting Notes from the Mozilla communityThunderbird Meeting Minutes: 2012-04-10

Thunderbird/StatusMeetings/2012-04-10

last meeting | index | next meeting »

Thunderbird Meeting Details :

Remember to use headphones and mute yourself when not 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 abourcier@mozilla.com that she can send them a shirt!

Thunderbird Development

For more details, see also the driver meeting notes.

Feature Work
Test Pilot Filelink (a.k.a Big Files)
  • We’re in the final stages of polish – patches are queued for review and iteration.

  • Spideroak has posted the first draft of a patch to include support for their service
  • UbuntuOne is also hard at work on an implementation
Instant Messaging
Schedule and Progress
Thunderbird 11 Thunderbird 12
  • b4 build will come out later this week
Thunderbird 13 Thunderbird 14 Thunderbird 3.1.x & ESR
Extension of the week
  • Folder in tabs. Will let you add Folders in tab for easy access to your folder. Very practical if you have plenty of folders.
QA Updates
  • Thanks to the participants to the testday on Instant Messaging in Thunderbird – we found a number of very interesting bugs.

  • If you want to help our testing effort either
Marketing Updates
  • Follow us on twitter we are @mozthunderbird

  • Kick started Thunderbird engagement program – Public communication will start next week on blog and Facebook
  • Thank you to all for having participated in the Chat feature survey. We have more elements to focus on fine tuning the feature now!
  • Thunderbird Start page to change next week
Infrastructure Update
Build / Release Update
  • Thunderbird 12.0 beta 4 build needed this week

  • Thunderbird 12.0 beta 3 released last week (catlee can now do TB releases)
  • Focusing on getting TB+FF integration work (so far) landed this week
Web Update
  • endless saga of the new start page

  • We have about 15 languages done for the 3.1 EOL Warning page, thanks to localizers. These are being merged as they come in.
Documentation
Support
Lightning Updates
  • Nightly updates script going through security review, will be hosted with a new SSL certificate

  • We have a freelancer getting started on a new Lightning Logo, see bug 723270.
  • We have one GSoC applicant who wants to work on improving invitations support, ludovic will mentor.
  • l10n issues that will force us to install l10n-merge into the build process, see bug 736717.
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-04-10

Platform/2012-04-10

« 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

Kilimanjaro

Notices / Schedule

  • If you have no more blockers for FF12 and the next ESR (released 4/24), please start digging into bugs tracked for FF13

Firefox Development

  • Jared Wein landed initial support for click to play plugins on desktop (bug 711552)

    • Followup work in bug 711618 to improve permissions model

Firefox Developer Tools

Add-on SDK

  • There were delays getting AMO updated with the 1.6 SDK last week so some developers may have seen warnings when uploading their add-ons

  • Spinning a 1.6.1 release to fix a minor leak

Performance

  • This week’s Snappy summary

  • Ehsan discovered some really bad performance issues for animated skins or those that heavily use svg and css
    • Will look at moving image decoding off of the main thread
  • Vlad worked on cancellable sql (bug 722243), have to figure out if the benefit from cancellable queries justifies additional locking
  • Vlad is analyzing a batch of slow startup data from March
  • Anthony and QA team are chrome leak testing looking for leaked documents that should be cycle collected
  • Tim put up AreWeSmallYet, tracking changes in build size: http://arewesmallyet.com/
  • Bill disabled incremental GC due to leaks bug 641025
  • mccra8 removed more stuff from the CC graph (bug 740185)

GFX

  • Continue to be focused on mobile Firefox.

    • We fixed most of Firefox on Android’s extreme crashiness, with the notable exception of on David Baron’s phone, who alone accounts for 13% of our crashes (221 unique crash IDs) in the past week, the #1 topcrasher by a large margin.

    • We’re focused on performance and checkerboardiness now, with our major work being tracked as Fennec beta blockers.

JS

Layout

  • Focused on mobile Firefox.

    • Readability.

    • Scrolling/Zoom bugs.

Video

  • MediaStreams near landing on m-c

  • Initial WebRTC landings being planned (preffed off).

DOM

  • No updates today.

WebAPI

Network

Identity

Plugins

Mobile

Accessibility

Tree Management

  • hg.m.o downtime Thursday April 12 6-9am PDT for migration to new datacentre

  • Switching OSX build machines today hopefully – nightly updates will be diverted until testing is completed
  • tree status app in staging for poking: https://treestatus-dev.allizom.org/
  • infrastructure load for march
    • 4,508 pushes in March – peaking at 238 checkins per day

    • 5th month in a row of record activity

Security

Date / Time Item
Mon Apr 9 / 13:00 PST BrowserID Sync
Wed Apr 11 / 13:00 PST AVAILABLE
Thu Apr 12 / 10:00 PST AVAILABLE
Fri Apr 13 / 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

For updates to meetings please see the Security Review Calendar

Security Review Needed but Unscheduled
Review Needed
  • Feature pages triaged to need review, review unscheduled
Feature Feature List Target Rel Prod Mgr Lead Engr Security lead Security status Security notes Last Modified
Client-side XPI construction Jetpack Add-on Builder 2 Daniel Buchner Piotr Zalewa/Sean McArthur ` sec-review-needed ` 2011-07-13T22:16:04
Add-On Tab API ` Add-on SDK 1.5 David Mason ` Dan Veditz sec-review-needed ` 2012-01-11T22:10:27
B2G App Security Model ` B2G 1.0 Lucas Adamski Jonas Sicking, Chris Jones Paul Theriault sec-review-needed sched with curtis 2012-03-29T22:15:25
Migrate Chrome settings and data Desktop Firefox 11 Asa Dotzler Makoto Kato, Marco Bonardo ` sec-review-needed ` 2012-03-13T14:03:25
Style Editor Desktop Firefox 11 Kevin Dangoor Cedric Vivier ` sec-review-needed ` 2012-03-27T18:16:36
Hang Detector and Reporter Desktop Firefox 13 Asa Dotzler Vladan Djeric ` sec-review-needed please sched with curtisk 2012-03-15T00:50:19
Easy UI Feature Testing and “Success Evaluation” (integrate TestPilot like features) ` Firefox 13 ` ` ` sec-review-needed Please schedule with curtisk 2012-03-02T23:41:56
Windows 8 Metro Firefox Desktop Firefox 14 Asa Dotzler ` ` sec-review-needed sched with curtisk 2012-04-10T20:50:47
Speedy Session Restore Desktop Firefox 14 Asa Dotzler Dietrich Ayala ` sec-review-needed schedule with curtsk 2012-04-10T11:24:22
In-content preferences Desktop Firefox 15 Jared Wein Devan Sayles ` sec-review-needed when ready sched w/ curtisk 2012-01-25T22:43:11
DOMCryptAPI (a Crypto API in the DOM) Platform Firefox 15? Chris Blizzard David Dahl Brian Smith sec-review-needed ` 2012-02-07T03:07:24
Better rendering of fonts for Windows Platform Firefox 7 Chris Blizzard ` ` sec-review-needed small team review Christoph, bsterne, John Daggett 2011-10-13T00:23:00
FlightDeck as a Client-side App Jetpack FlightDeck 1.0 Daniel Buchner Sean McArthur ` sec-review-needed when ready sched w/ curtisk 2012-01-25T22:43:38
IndexedDB Support for Multi-Process Firefox Platform Future, distant future. Chris Blizzard ` ` sec-review-needed 2011.10.17: sid recommends we wait on this one but likely needs a review. 2011-11-10T19:14:59
Sharing textures cross-process for Electrolysis Platform Q4 of 2011. Chris Blizzard Chris Jones ` sec-review-needed ` 2011-10-13T16:52:42
SDK Support for Firefox for Mobile Addons Jetpack SDK 1.5 David Mason Matteo Ferretti ` sec-review-needed ` 2012-04-06T16:32:53
Sign into the browser Other TBD Dan Mills Ben Adida ` sec-review-needed when ready sched w/ curtisk 2012-04-03T21:25:10
Tip of the day Thunderbird Thunderbird 11 Jean-Baptiste Piacentino Sancus ` sec-review-needed ` 2012-03-08T16:54:08
Modern MIME Parser Thunderbird Thunderbird 14? ` Joshua Cranmer ` sec-review-needed sched with curtisk 2012-03-02T23:51:32
Modern Address Book – V1 Thunderbird Under revision ` Mike Conley ` sec-review-needed ` 2012-01-12T19:38:14
Enhancements to help mitigate search hijacking Desktop ` Asa Dotzler Gavin Sharp Al Billings sec-review-needed ` 2012-04-10T18:15:21
Blocklist UX enhancements [Plug-ins] Desktop ` Kev Needham ` ` sec-review-needed ` 2012-01-30T05:35:09
Use PFS2 as Plugin Finder data source Desktop ` Kev Needham ` ` sec-review-needed ` 2011-11-10T10:54:09
Add plugincheck functionality to Add-on Manager Desktop ` Kev Needham ` ` sec-review-needed ` 2011-10-24T21:28:12
Bugs marked sec-review-needed that need to be scheduled
ID Summary Status Priority
738698 [meta] Users should have the ability to activate plugins on demand NEW
549697 Add click-to-start form of disabled plugins (Add-on manager) NEW
716107 Better key input support in DOM full-screen mode – requestFullScreenWithKeys API NEW
733414 SecReview for SocialAPI NEW
649154 Implement DOMCrypt (Internal) API NEW
717103 MediaStorage API NEW
585958 webapps OS level integration : Maemo NEW
674718 WebUSB NEW
707625 [WebAPI] Proper WebAPI permissions manager NEW
567365 Cache-Control no-cache on https page disables history NEW
664636 Thunderbird should (semi-)automatically improve the security-related server configuration settings when it knows an improvement could be made NEW
664637 Thunderbird auto-configuration database should be expanded & updated by regularly spidering every domain on the internet NEW
674047 Teach FileSaver to take URIs as well NEW
674701 “App-state” API, so that content knows when it becomes hidden etc. NEW
674737 WebBluetooth NEW
677302 Preffing out CSS should be easier NEW
680617 WebPrint (or WebIPP) NEW
681009 API for “home screen” app locking display, listening for “wake up” button, etc. NEW
692677 Relax same-origin XHR restrictions for privileged applications NEW
693515 Browser API NEW
697355 Network manager API NEW
722126 Can’t transfer File objects with postMessage cross domain NEW
729320 IndexedDB: Provide some amount of storage without a prompt NEW
697361 Sensor API NEW
735075 Sec Review: Distributed Events platform ASSIGNED
711618 implement click to play permission model ASSIGNED
80713 Need a way to specify an auto-height (size) for an IFRAME such that the frame is given the full height of the contained content (moz-seamless, part of seamless iframes) ASSIGNED
674720 WebContacts (or Contacts+) RESOLVED
674726 WebTelephony RESOLVED
728341 Security Review for Beta Release of App RESOLVED
706545 Implement a sync engine for apps exposed by navigator.mozApps RESOLVED
697132 Create API for content to keep the screensaver from turning on (or to prevent phone/tablet’s screen from turning off) RESOLVED

Stability Report

Socorro
  • Due to a file name pattern change by Adobe, the version of current Flash releases isn’t detected by Socorro (bug 742735). This also makes KaiRo’s Flash crash/hang reports not list those 11.2.* versions – a fix is ready for landing and should be deployed in tomorrow’s Socorro release.
Desktop
Trunk
  • bug 741715 crash in XPCWrappedNativeProto::TraceJS

  • bug 743767 Firefox crash @ memcpy | GlyphBufferAzure::Flush
Release
  • bug 744043 Firefox crash [@ gfxASurface::GetType()
Beta
  • bug 717175 – gfxFont::AgeCacheEntry. Fixed in 12b4.

  • bug 673543 – nsDiskCacheMap::DeleteRecord. Patch waiting review.
  • bug 738661 – crash in nmsvc from CovenantEyes. Trying to repro in a debugger.
  • bug 741179 – crash in nsDiskCacheBlockFile::Write. Met this morning to discuss. Looking at correlations more closely, trying to reproduce.
Third Party
  • bug 743699 Flash crash in 11_2_202_228

    • After we reprocess signatures there will likely be more bugs related to this Flash version filed
Mobile

Top crashes over last 3 days on 14.0a1 – https://crash-stats.mozilla.com/topcrasher/byversion/FennecAndroid/14.0a1/3/browser

  • Note: Graph is a capture from 2012/04/09 at 10:34 AM PDT for a 3 day period

The following are crashes that do not have fixes from the Top Crash List

  1. bug 738198 – dvmAsmInstructionStart – Plugin issue (LANDED TODAY)

  2. bug 730890 – libdvm.so@0x50e96
  3. bug 737128 – mozilla::gl::GLContextEGL::ReleaseSurface
  4. bug 731286 – libflashplayer.so@0x157bbe – Assume we can’t do anything here.
  5. bug 743724 – libEGL_mali.so@0xdae4

Other Socorro work listed in the Mobile Dev Meeting Notes

Roundtable

Ben MoskowitzMozilla Popcorn: How to Get Involved

Popcorn Maker is getting tighter and tighter, thanks to Bob Richter, Jon Buckley, the Seneca CDOT crew, our newly hired summer fellow Kate Hudson, and a growing number of contributors. Read on for a quick update on Popcorn Maker and how to get involved.

Popcorn Maker will let you make and share interactive HTML5-based videos while teaching you some web skills. It’s like the best parts of iMovie and Wordpress.org spliced together, and it’s 100% open source.

We want it to have the polish of Apple product, but the soul of a Mozilla product. We’re breaking a lot of ground.

Version 1.0 is coming in November. So if you’re interested in contributing to Mozilla Popcorn, now is a great time to get started!

Breakin’ it down

Johnny StenbackNew DOM bindings

In my previous post here I walked through some of the history behind the DOM bindings in the Mozilla code. This post is a followup to that where I’ll walk through the “new” bindings that we already have in part, and are working on completing over the coming months.

One of the big performance problem areas with the old style bindings was performance of accessing array like DOM objects, i.e. accessing properties of live lists of DOM objects such as NodeList (element.childNodes[n]), HTMLCollection (form.elements[s]), etc. Not only was that slow, but it also didn’t always work right, especially when dealing with lists from which objects were removed. The reason there was that the way those bindings were set up (and had to be set up given the binding mechanism worked) meant that any property that’s ever been touched from JS will forever be present on the JS object for that list. Its value will update if the underlying live list changed (may even become null), but if an entry in the list was no longer present, the property for that entry still existed on the JS object. This is something that’s hard (i.e. impossible) to do right with DOM bindings that are based on JSClass hooks, which all our bindings so far have been.

In mid 2011 we started thinking hard about how to move forward on this particular front, and faster bindings overall too. We chose to tackle the list like objects first for two main reasons, the current ones were both slow and broken, and there were relatively few of them so the change would be relatively isolated. The answer to the problems we were having with list like objects was to use the then fairly new support for JS proxies. Proxies are basically a new way to give JS objects custom behavior, one that’s in particular much more suited for live list like objects like NodeList etc. In May of 2011 we started to plan this work when Peter Van der Beken, Blake Kaplan, and Andreas Gal got together in Paris, France, (with Boris Zbarsky on many hours of video conferencing) to design new DOM bindings for our list like DOM objects. The outcome of this work was a code generator, one that read a configuration file, the relevant IDL files, and generated C++ template specializations of the ListBase template class implementations of proxies for list like objects. That work landed in August of 2011. It gave us better performance than we’d ever had for list like objects, and it also fixed the broken behavior of the old bindings. And while this work did give us performance improvements, there’s still room to improve in the new system as well, in particular with how the JS engine JIT works with JS proxies. So more to come there.

The last remaining large piece here is to write new DOM bindings for our regular DOM objects (i.e. objects that are not list like). That work (internally known as “Paris Bindings”) will be split up into several pieces as well, and the first one of that started early this year. In January of 2012 a group of people (Boris Zbarsky, Blake Kaplan, Mounir Lamouri, Olli Pettay, Kyle Huey, Bobby Holley, Ben Turner, and myself, plus Peter Van der Beken joining us on the last day that week) got together, again in Paris, France, to discuss the next piece of this work. The outcome of that set of meetings was a plan to tackle the bindings for a single object (plus a few dependent ones) as the first step. The object we chose was XMLHttpRequest, reason being that it’s a fairly self-contained object, it’s one that exists both on the main-thread and in DOM workers, and yet it’s a non-trivial object that poses some challenges (the fact that it’s an EventTarget being one of those challenges). We also had a plan on how to do that, part of which was preliminary code, even.

We then set out to hack this up, with Kyle Huey working on a WebIDL parser. Bobby Holley was working on the code generator (which uses the WebIDL parser), Boris Zbarsky working on argument and “this” unwrapping, return value wrapping, prototype setup, and a bunch of other low level stuff. Ben Turner worked on getting DOM workers ready for the new bindings (which was a significant amount of work given the then current worker bindings which were all hand-written JSClass based bindings). The rest of us helped out with various tasks as they came up, including writing some WebIDL files. In the following weeks these new bindings started to take shape, first we had the basic utilities working, then prototype setup, followed by basic code generation for methods/getters/setters. Things were starting to look pretty functional, even if there were still missing pieces to the puzzle. It was Peter Van der Beken who put the final pieces of the puzzle in place, and got a functioning build with new bindings in place for XMLHttpRequest. Then we of course found a bunch of details that were not right once we were able to push this stuff through the try  server etc, so a good bit of cleanup and missed pieces needed to be sorted out before finally landing this work at the end of March 2012. The landing went very smoothly, with one silly missing null check that Kyle Huey fixed being the most serious fallout. After this change having been in the tree for a bit more than a week now there’s some other stuff that was found, but all things considered, things are looking very good.

Writing the code generator for these new bindings brought up a set of interesting questions, one of which was what the signature of the method that the generated code would call should look like. We’ll be calling directly into a concrete class here (avoiding virtual calls when possible), so no need for any XPCOM goop, but at the same time we often do need to deal with propagating errors from the DOM method. That means we need an error code (i.e. an nsresult return value or out parameter), yet there’s plenty of cases where we simply don’t need one and requiring that the out parameter, or return value, always be present adds overhead we simply don’t want. What we finally settled on there was to have a nsresult out parameter, passed by reference, in the cases where we generate calls to fallible methods (which at this point can be controlled in the configuration file). That’s something we’ll likely move from the configuration file into per method/property annotations in the WebIDL itself as we do some pending cleanup now that the basics are working.

There’s also the issue of the name of the method that gets called. Since we’re calling methods on a concrete class, and that concrete class is likely to also inherit a bunch of XPIDL DOM interfaces (for now at least), we’ll likely run into conflicts where the signature of a method we’ll be invoking from the generated code causes conflicts with existing methods. There’s no obvious answer to this, but the fact that we return the error code in an out parameter (assuming there is one) helps as the signature in that case is likely different between the XPIDL method and the method we’ll call from the generated code. But if we’re dealing with an infallible method, like say xhr.abort(), then there will be a conflict due to the only difference between what our generated code will call and what we currently have from the implementation of our IDL interface is the return type. We decided to deal with this problem by renaming the binary name in the old XPIDL files, since we already had support for doing that (i.e. the binaryname attribute in IDL).

Another piece of this puzzle was making XrayWrapper work right with these new bindings. The existing XrayWrapper hooked into XPConnect and used its machinery to call the “original” unaltered method/getter/setter, but for our new bindings, XPConnect doesn’t know anything about our objects (or won’t, once we get further along here). The answer here was to write another flavor of our XrayWrapper, called XrayDOM, that specializes XrayWrapper such that it does the right thing on the new binding objects.

And the existence of QueryInterface() on the old bindings objects caused us problems too, particularly in our tests. The solution to this problem for now was to add a method named QueryInterface() on the new bindings as well, but calling it is a no-op. This of course led to callers of QueryInterface() expecting properties on the interface they were QueryInterface()’ing to to exist on the returned object (i.e. the binding object itself), fortunately the number of interfaces and properties we had to deal with was very low, and they’re only relevant to chrome code and thus only appear on chrome XMLHttpRequest objects, and that was enough to pass all our tests, and has yet shown any problems in the wild either. This is us paying the price of ever exposing QueryInterface() on DOM objects. Going forward this is something we need to keep an eye on, as this is likely to creep up with more objects, including some DOM elements. Our long term goal is to remove this completely, at least on non-chrome objects.

So what do these new bindings look like you ask? Well, we have a set of common utilities that are shared, and per DOM type we have roughly one JSClass, two lists of methods and properties (one for chrome, one for untrusted code, because there are things we expose to chrome that we don’t expose to untrusted code), and a list of constants (I’d love to link to examples here, but they’re all generated at build time so I can’t easily do that). And double that (minus the chrome only stuff) for each DOM type that’s available in DOM workers. Plus of course the implementation of the methods, getters, and setters. As you can tell if you start reading some of the actual code here (which ends up living in $objdir/dom/bindings/*.{cpp,h}), there’s very little XPCOM stuff left here. We don’t use XPIDL files, we use WebIDL, meaning that it’ll certainly be possible to write a DOM class for which there’s no XPIDL file in this setup. The bindings can simply call straight into methods on the concrete class, which is named in the configuration file. Inheriting from nsWrapperCache is a requirement for using the new bindings, that’s how we map from C++ object to JS object, and having a link from the DOM object to its parent (and ultimately its window or global object) is also a requirement in this new setup so that we can tell which JS compartment to create the binding object in.

We’re also still ironing out exactly what the configuration file and the WebIDL files will look like long term, but what we have for now is a good start, enough to learn how to move forward here. We’re also going to be consolidating some of the code generators we’ve grown over time, and eventually we’ll be able to remove support for quick stubs, slim wrappers, and probably a bunch of other optimizations that have been made in the XPConnect code too. We also went a bit overboard with the use of C++ namespaces in the generated code, so we’re cleaning that up now as well to be a bit more developer (and debugging) friendly.

The next steps here are to first do new bindings for a few more objects, that’ll let us iron out more details in our WebIDL parser and code generator by throwing more WebIDL at the system. The objects we’ve chosen for that are the canvas objects (because they’re very performance sensitive) and the CSS2Properties (because it poses several challenges on its own given how it is implemented, and it has a lot of properties whose presence is controlled by preferences). And Boris Zbarsky is also looking into the WebGL bindings, because they too are very performance sensitive. I would expect that we’ll land the above over the next weeks or couple of months.

After that the largest remaining piece is to write new bindings for our actual DOM nodes and the other miscellaneous classes. There’s a lot of those, so that’ll be a big chunk of work as well, but hopefully by the time we get there the infrastructure for all this will be pretty solid and we can focus on the bindings rather than the supporting code.


Lukas BlakkRelease-Mgmt: My First Beta from the ‘other’ side

Hello and welcome to my continued documentation off my learning curve in Release Management, something I’ve now been working at for 6 weeks.  Last time I was reeling from the new-to-me meeting/email/bugmail firehose.  Now I’ve got that more under control, having created many more filters and folders in Thunderbird as well as having a chance to do more work on the automated tracking emails script.

To continue to spread out the knowledge and tasks for release managers across more than just one Alex, last week I ran my first beta (Firefox 12 beta 4) and now I’m going to tell you what that involved because the bugzilla API is down.

Monday

Monday is about getting the queries down as much as possible.  This means making sure anything with Tracking?, approval-mozilla{beta,aurora,esr10}? is triaged and nudged further towards its final destination on the trains. We’re also needing to watch out at this point for riskier fixes, things that really need some bake time with actual users need to be landed for a beta4 since beta5 is more for low-risk regression back-outs and security fixes that need to land just in time for beta 6 (what is usually re-built as the appropriately branded final release).  At this point in the week there might be about 80-90 bugs we need to get sorted and at the end of the day only about 6 bugs were in the ‘really want this in beta 4′ list.

Tuesday

For this particular beta, we had been asked if it would be possible to give the ‘go’ to build earlier than usual because there was a fairly popular holiday weekend coming up (Easter) and our QA lead for this release was in Canada where Good Friday is a statutory holiday. The QA lead asked if we could go to build earlier so that a Thursday release of the beta would be possible. We confirmed with RelEng that this was do-able and agreed to do our best to get the ‘go’ out at an earlier time.  The plan was for everything to be landed by 2:30pm (Pacific) in order to have a changeset ready to fire off to Release Engineering by 5pm.

Going through the ‘burn list’ from Monday (6 bugs) mostly entailed tracking down people to land patches. There has to be a cutoff time for landings since it takes about 4 hours to get all the builds and tests for a push to the hg repo to report back completely. Note that improvements to build times are being worked on, case in point: faster Mac builds (newer hardware and using OS X 10.7)  take ~2.5hours off the normal Mac build times.

For one of the bugs we weren’t able to reach the dev and a volunteer committer found that the patch didn’t apply cleanly so that bug had to miss the train.  The others got in and I sent the ‘go’ to build Firefox 12 beta 4 at approximately 5:45pm (45 minutes later than desired).  All the results weren’t in yet for this changeset but I wanted to get a shot at making the request for earlier builds to QA so I took the risk that the builds/tests would be OK and we’d be already building when we confirmed that.  Had the builds/tests *not* turned out we’d have to scrap the chance at moving up the release window and one of our QA leads would have worked on a holiday to meet our ‘normal’ Friday release window.  So I took the leap (and this ended up being fine, though I wouldn’t do this again without good reason as it was a stressful call to make and it’s not a good practice to get into).

Right after the ‘go’ email was sent hg.mozilla.org went down and we lost 3 hours of build time.  This is not a normal result of giving the ‘go’ to build.  It was probably just because Hal was new to doing releases and I was new to running a beta so at least one thing had to come along and shake our confidence.

Wednesday

There’s not much (beta-running) to do on Wednesday except wait for Desktop & Mobile QA to do their thing.

Thursday

Mobile & Desktop QA send their results out – either signing off on the builds/updates or calling out issues. At this point QA signed off so at that point I could request the Release Engineer to push the updates to the beta channel (and upload a new beta apk to the Google Play Store). An hour or so later both QA leads signed off on the updates for the release that’s now live to our beta users.  After that, there’s just some product details to change for our websites to include beta 4.  We don’t do release notes per-beta which is good to know for when I run a beta 1.

Friday

Normally we’d be doing the push to beta channel on a Friday, so what would have been different was:

  • getting everything landed to mozilla-beta could have gone until later in the day
  • the ‘go’ to build email wouldn’t have resulted in immediate builds, they could start on Wednesday at the beginning of the Release Engineer’s day
  • QA needs two full nights of testing, so we’d get sign offs from QA on Friday morning instead – hence the push to beta channel (and store) on Friday afternoon

Nothing too crazy for my first beta.  I think beta 4 is a good one to start on – it’s not the “OMG last call!!1!” beta before a release and it’s not beta 1 where any fallout from our merge of mozilla-aurora -> mozilla-beta shake loose. Having done a beta release now,  I have a much more complete mental map of how the 6 week release cycle plays out for Release Management:

Multiply by the above by 6, sprinkle extra bug & meeting communication cycles to weeks 1 and 6, throw in twelve channel meetings, approx 30 more iterations of various queries triage to keep our tracking lists up to date and to know what’s really needing attention vs. what’s taking care of itself.

A ton of email/irc/automated notifications all with the goal of keeping tracked bugs moving forward and you’ve got your 6 week result: A fabulous new Firefox release.

Thanks for reading, more about automatic emails & wiki updates soon.

Chris DoubleTravelling to Pitcairn Island

Pitcairn Island Approach

From Sunday 15th April through to 29th April I’ll be mostly offline as I take some leave to visit Pitcairn Island, one of the remotest inhabited islands with a population of about 50 people.

My first stop is flying from New Zealand to Tahiti where I spend a couple of days, then I fly to Mangareva on the 17th to board the Xplore sailing yacht for the approximately two day trip to Pitcairn. I spend a couple of days on the island itself, then return on the Xplore back to Mangareva, followed by flying back to Tahiti for a few more days.

The trip was easy to organise through Pitcairn Travel. Longer trips are available than the one I’m taking but none are scheduled at this time of year. Assuming this trip goes well I hope to go for longer, and maybe to the other Islands in the Pitcairn group, in the future.

Why Pitcairn? Pitcairn is the island that was settled by the Bounty mutineers. My grandmother was born on the island and through her I’m a descendant of three mutineers (Fletcher Christian, John Mills, Ned Young and their Tahitian wives are my sixth great grandparents). I’m looking forward to visiting the Bounty monument in Tahiti and the Bounty Plaque on Pitcairn.

Electricity is available on Pitcairn for about 10 hours per day which limits laptop/gadget usage time. Luckily I plan to spend as much time as possible exploring the island, weather permitting.

I’ll have internet access while in Tahiti but I suspect access to be a bit hit or miss on Pitcairn. In the past internet access was available by sharing satellite internet that was provided by a United States Geologic Survey station on the island. A description of the setup is available here.

Later the Pitcairn Island Government arranged their own satellite internet capability. Recently speeds have been improved to 512 kilobits per second - shared amongst the approximately 50 people on the island. Costs for residents of the island are around $40 per 400MB of usage from what I hear. I would imagine that if someone wanted to regularly access the internet there for work they’d require a dedicated satellite internet connection just for that (Something like Pactel’s VSAT internet maybe). I’ll be sure to do a later post on what using the modern web is like in this part of the world.

Anyone in the area of Tahiti, Mangareva or Pitcairn, let me know, I’d be keen to meet.

Pascal FinetteIncubators don't work - and it's fine

A few weeks ago I had the great fortune and pleasure to pick Jed Christiansen’s brain for a good two hours. Jed is probably the one person on this planet with the best data set about incubator and accelerator programs around the world, the companies which go through them and the possible reasons why some incubators are so much more successful than others.

I fundamentally believe that most incubators (which seem to shoot up like mushrooms after a rainy late summer day) are destined to fail - and I also believe that it doesn’t matter.

Let me explain - and start with a disclaimer: The following is especially true if you’re building your incubator outside of the US and more specifically outside of Silicon Valley. With that out of the way - the reasoning is simple: The math doesn’t work.

Most incubators take a rather small chunk of equity for their investment and services (often in the sub-5% range). I believe the reason for this is that some of the super-successful incubators such as Y Combinator have “poisoned the well” by introducing these terms (and they do work for them - more about that later) and forcing the whole industry to follow suit. Also incubators usually take founders stock - i.e. stock without any preferences or protections as are often found in seed and VC rounds.

What happens is this - by the time a company has an exit, they have often gone through a couple of rounds of financing, diluting the original founders shares by 50% or more. Which means that the initial 5% our incubator held become a mere 2.5% or less. Now apply the typical VC logic that out of 10 companies you can count yourself lucky if one or two of them hit it big, three to four do okay and the rest goes under. Now - in most areas of this world a “good exit” is considered something in the $10m range (even in large markets such as Germany there aren’t that many $10m exits). Take into account that a portfolio takes time to mature (somewhere around 5-10 years for the companies to go through their growth phases and come to an exit) and start doing the math, the picture is rather bleak.

Here’s an example calculation: An incubator runs a class of 10 teams, investing $15k into each team and spending 3 months of intense work with them, running the incubator with three people as staff. Assuming that these people have opportunity costs of $150k p.a. (meaning that the people running the incubator could find work at this rate somewhere else) and taking into account costs for office space, etc. you easily have invested $350k into this batch of 10 teams. Five years later you might (this is a risky proposition - no guarantee that anything comes out of it!) make 2.5% on one $10m exit ($250k) and another 2.5% on three $3m exits ($225k), bringing you to about $.5m in returns. Potentially. With a rather high risk. The math just doesn’t work that well.

And that’s precisely why I think the incubator model doesn’t work. To make it work you would need to do two things - take a higher percentage of equity in your first round (much to the grumbling of the founders) and have the ability to protect your position by being able to do follow-on investments (i.e. you invest alongside other investors in the next rounds to prevent dilution of your equity position) - which requires money most incubators don’t have.

Now - why this all doesn’t matter…

Here’s the thing: As much as I think this is bad news for people building and running incubators, it’s perfectly fine for entrepreneurs and the economy at large. The worst outcome of this scenario is a bunch of failed incubators - which in turn have taught and enabled hordes of people to become entrepreneurs. And who knows - even if their first startup didn’t work out, they hopefully learned a lot and will be better off for their next one.

With all that being said - here’s another disclaimer: The well known and established incubators such as Y Combinator, TechStars, 500 Startups, SeedCamp and some others will be fine. They have built their models around these dynamics, have created very specific value propositions for themselves and thus their teams and they have unparalleled access to the market.

Mozilla Add-ons BlogJetpack Project: weekly update for April 10, 2012

Project News

  • We released SDK 1.6.1 today to fix a minor memory leak in 1.6.0 ( released last week ). At the same time, we also made 1.7b1 builds available for early testing.
  • Wladimir Palant ( author of Adblock Plus ) blogged about asynchronous file IO.
  • Mozilla QA Dev Henry Skupin released SDK-based add-on Memchaser with a ton of new features and bug fixes.

Quick Stats

Note: the stats above are based on the queries I linked to for each item. If you have suggestions on how these queries might be made more accurate,please comment below. Stats generated at 2012-04-10 14:26:05 PDT

Meeting Brief

  • No Builder updates, Daniel was not in the meeting
  • SDK: releasing 1.6.1 hotfix today as well as 1.7b1 builds from the current stabilization branch.
  • Roundtable: Alex pointed us to an interesting add-on localization add-on.

Full minutes are available here:
https://wiki.mozilla.org/Jetpack/Weekly_Meeting/2012-4-10#Minutes

Daniel GlazmanA floating table of contents for W3C specs

If like me you spend a lot of time reading, reviewing, navigating into W3C specs, you have probably also spent a lot of time scrolling to find the table of contents of these documents. Again, again and again. So many times you're probably fed up with it, like I am. In that case, this add-on for Firefox is for you. Install it and browse your favorite W3C spec. When it's loaded, look for the small box in the top-left corner. Make your mouse pointer hover over it to open the floating table of contents. Click anywhere (including on a link) in the expanded box to shrink it back. Enjoy :-)

Update: v1.1 is here. Next updates will be automatic.

David MandelinA Personal Message

This is my personal comment on Brendan’s donation to Proposition 8. I believe Planet Mozilla is now just for Mozilla content. This is Mozilla content: it’s about the pain people have experienced, which necessarily affects their work and working relationships. I need to do this for myself: if I don’t, I’ll feel isolated and silenced. I hope it may comfort anyone who needs comfort.

In this post, I speak for myself: no one else has read it, edited it, or approved it prior to posting. These words are imperfect and they are mine alone.

tl;dr version: This hurts. If you hurt too, you’re not alone. If anyone needs someone to talk to, I’m here.

I have a strong connection to LGBT issues, including Proposition 8. My wife is bisexual. We have many LGBT friends. Opposition to discrimination and stigma has long been one of my most closely held political beliefs.

I have a strong connection to Brendan. Brendan has been one of my mentors at Mozilla. Brendan is one of the founders of a community I love being a part of, and a company I love working for. Brendan passed on SpiderMonkey module ownership to me.

Because of all these connections, when I learned last Wednesday night that Brendan donated $1000 to support Proposition 8, I experienced intense pain. I was first shocked, then disappointed, then sad, then anxious, then angry, and then back to disappointed. I’ve been able to think of little else at work or at home. I’ve had heartburn, tense muscles, and an anxious, alerted feeling every day.

If you were hurt too, you are not alone.

Various comments have led me to believe that some might not understand why people feel so strongly about this. It’s been suggested that this is just a difference of opinion and we have to learn to live with it. I agree that we have to learn to live with differences, but Proposition 8 is not just a difference of opinion. I can’t speak for everyone, but for me and my wife, Proposition 8:

  • by taking away the previously established right of gay couples to marry in California, took away a fundamental right from a class of people, and
  • defined gays as second-class citizens in the Constitution of California.

This may not be what Proposition 8 supporters intended. (I hope it was not.) But it is how it was received, and hopefully you can see how painful that would be: imagine that a law was passed saying that you (or a friend or family member) could not marry or stay married to the person you love.

There are probably people who have very different strong feelings about Proposition 8 or Brendan’s donation. If you do, I would be interested in hearing what you have to say. I invite anyone who is affected by this to open up and speak from the heart about what they believe and feel.

I’m sure there are Mozillians who are just as distressed that are not in a position to reach out or express their feelings at work. I hope knowing that you are not alone helps at least a little bit.

I’m available if anyone wants to talk about any aspect of this issue, or just needs someone to vent with, rant at, commiserate with, or whatever.

(Excepting commercial spam) I welcome all comments, public or private, regardless of who you are, what you believe, or the content or tone of your message.

Jane FinetteHow Mozilla Firefox engages fans every day on Facebook

Many people commented on my last post about growing and nurturing brand advocates on Facebook. You asked, so how are you really doing that? Here are a few simple ways based on how we engage fans every day at Mozilla:

# 1. Vary your Facebook content. Think carefully about your content strategy and how posts effective each other. At Mozilla we try to plan 7-14 days out (and many months longer for big campaigns / announcements). We keep a balance of 1/3 product news, 1/3 tips and tricks, and 1/3 just plain-old-engaging-fun. This variety allows us to communicate broadly. We’re conscious not to be narcissistic only giving our own news when necessary, and focusing on what will be of value to the reader.

# 2. Allow users to create content. We very often ask the opinion of our fans, and then post those comments, questions, photos. We have a ‘fan of the week’. It’s a demonstration of who we are, and how we authentically communicate.

# 3. Think Share. Back to content strategy. You may well be creating interesting content. But ask yourself, will someone want to share it, like it, comment upon it? Alter your content strategy, write a post in a way that will generate engagement. Ask more questions, ask your fans to ‘like’ and ‘share’.

# 4. Give back. You cant always take (see #1). Content should be a balance. Sharing should feel fun and engaging to the user - it shouldn’t feel forced. Don’t ‘market’ to your fans - talk to them. Treat them as friends (remember that’s what you do on Facebook!).

The value of Facebook is huge, the potential to amplify ones message is massive, and yet every day brands are failing to treat their fans as citizens and only wanting to push their products. Communicating regularly in channel in a way which is balanced and authentic will lead to your brand being talked about for the long term.

Robert KaiserWeekly Status Report, W14/2012

Here's a short summary of Mozilla-related work I've done in week 14/2012 (April 2 - 8, 2012):

Next to the interesting stuff I am involved in and can push at work, I found quite some time this weekend to reduce my TODO list in non-work areas, and it's visible in this update, as multiple areas moved forward nicely and significantly, which I always like. :)

Matt ThompsonMozilla Open Badges ships Beta release

Cross-posted from the Mozilla Blog.

Adding skills and achievements to your online identity

When Mozilla’s Open Badges project began in late 2010, it was little more than a demo and an audaciously big idea: what if we could use the web to create whole new ways to “show what you know?”

Today, that big idea is becoming reality, with impressive partners and new Mozilla Open Badges Beta software coming together to test how digital badges can supercharge learning and identity.

Collaborators building badges on Mozilla software

Mozilla’s Open Badges project now includes leading partners like the MacArthur Foundation, impressive collaborators (including NASA, Intel, Disney-Pixar, 4H and dozens of others now building badge programs using Mozilla tools) and — thanks to today’s new Beta release of Mozilla’s Open Badges Infrastructure — publicly available software for badge issuers and developers to get on board and build with.

Integration with Mozilla Persona = adding skills and achievements to your online identity

The new Beta release includes integration with Mozilla Persona (formerly BrowserID). This opens the door for users to create a single user-centric identity across the web, with tools like Mozilla Open Badges adding a “reputation layer” that provides a complete story about what they know and have achieved. All through an open, standards-based infrastructure that puts user sovereignty, privacy and security first.

Open Badges Beta: what’s new?

Today’s Beta release includes:

  • New tools for badge issuers. A new and improved badge issuer API makes it easier for any organization to award their own digital badges for learning, skills or achievements.
  • New ways for users to manage their badges. Improvements to Mozilla’s “Badge Backpack” make it easier for users to store, manage, import and group badges earned from multiple sites through a single location.
  • New tools for badge displayers. A new displayer API will make it easier to display digital badges across the web, from personal web sites to social networking platforms.
  • New documentation and privacy features. Including an updated privacy policy, terms of use and FAQs for developers.

Learn more and get involved:

Mozilla Add-ons BlogAnnouncing Add-on SDK 1.6.1

While releasing version 1.6 of the Add-on SDK, a contributor, Mingyi Liu, found a minor memory leak (bug 740689). We have since fixed this leak and are today announcing the release of version 1.6.1 of the Add-on SDK.

You can grab the updated version of the SDK as a zip file or tarball and replace your older version. The release notes for 1.6 remain accurate with the exception of fixing bug 740689.

If you have any questions or issues with this hotfix release, please feel free to ask the jetpack team about it 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

The Mozilla BlogMozilla Open Badges ships Beta release

Adding skills and achievements to your online identity

When Mozilla’s Open Badges project began in late 2010, it was little more than a demo and an audaciously big idea: what if we could use the web to create whole new ways to “show what you know?”

Today, that big idea is becoming reality, with impressive partners and new Mozilla Open Badges Beta software coming together to test how digital badges can supercharge learning and identity.

Collaborators building badges on Mozilla software

Mozilla’s Open Badges project now includes leading partners like the MacArthur Foundation, impressive collaborators (including NASA, Intel, Disney-Pixar, 4H and dozens of others now building badge programs using Mozilla tools) and — thanks to today’s new Beta release of Mozilla’s Open Badges Infrastructure — publicly available software for badge issuers and developers to get on board and build with.

Integration with Mozilla Persona = adding skills and achievements to your online identity

The new Beta release includes integration with Mozilla Persona (formerly BrowserID). This opens the door for users to create a single user-centric identity across the web, with tools like Mozilla Open Badges adding a “reputation layer” that provides a complete story about what they know and have achieved. All through an open, standards-based infrastructure that puts user sovereignty, privacy and security first.

Open Badges Beta: what’s new?

Today’s Beta release includes:

  • New tools for badge issuers. A new and improved badge issuer API makes it easier for any organization to award their own digital badges for learning, skills or achievements.
  • New ways for users to manage their badges. Improvements to Mozilla’s “Badge Backpack” make it easier for users to store, manage, import and group badges earned from multiple sites through a single location.
  • New tools for badge displayers. A new displayer API will make it easier to display digital badges across the web, from personal web sites to social networking platforms.
  • New documentation and privacy features. Including an updated privacy policy, terms of use and FAQs for developers.

Learn more and get involved:

Niko MatsakisDeclared vs duckish typing

One of the questions in our object system is what precisely how “declared” we want things to be when it comes to interfaces and implementations. In a discussion on IRC, graydon suggested it’d be nice to have terms like “duck-typing” defined more precisely in a Rust syntax, and he is correct. So here is my effort.

The current setup

Currently, implementations must declare precisely what types they implement. For example, it looks like this:

impl of draw for T {
    ...
}

where draw is an interface. Then, later, if we have an instance of type S and we wish to know whether it implementations the interface draw, we can scan through the set of implementations that are declared to implement draw and see if any of them are for the type S.

A more duck-typing like setup

Another option would be to remove the requirement that an impl declares what interfaces it implements. In that case, when we have a need to know if the type S implements the iface draw, we would again scan all of the implementations in scope for the type S. For each one, we would check whether it contains all the methods defined in draw. If so, we declare to be an implementation of the iface (we must also check that the methods contain the right types; it’s unclear to me whether we should do this check before or after deciding that it is an implementation, though).

Why duck typing?

It’s more convenient. There is also, currently, no good way to create an “after the fact” interface: support I have a bunch of types that all already have a draw() method and a bounds() method defined, and I’d like to make an iface like:

iface draw_and_bounds {
    fn draw();
    fn bounds();
}

and then just use it. Now everything just works. In the more statically declared world, I would then have to go over each type and do something like:

impl of draw_and_bounds for S { }
impl of draw_and_bounds for T { }

These impls just serve to declare that the type S (and T) implements the iface draw_and_bounds (and needs no additional methods to do so). Actually, this wouldn’t work today at all, because we don’t check for existing methods when deciding, so you’d really have to do something like:

impl of draw_and_bounds for S {
    fn draw() { self.some_other_impl::draw() }
    fn bounds() { self.some_other_impl::bounds() }
}

But of course the some_other_impl::draw syntax for naming a method isn’t implemented, so you’d have to do something like:

fn my_draw(self: S) { import some_other_impl; self.draw(); }
fn my_bounds(self: S) { import some_other_impl; self.draw(); }
impl of draw_and_bounds for S {
    fn draw() { my_draw(self) }
    fn bounds() { my_bounds(self) }
}

But we could fix that by implementing features.

Why not?

Just because methods with the right names are available doesn’t mean that they will do what you expect. Maybe you mean draw() as in “draw your gun” not “draw yourself on the screen”. It also prevents ‘marker interfaces’, like Java’s serializable.

Non-obvious implications and small design decisions

Simplicity and compilation time

One of the arguments for a non-duck-typing scenario is that it makes the system easier to implement. We can generate the vtable at the point of impl declaration and then refer to it from other places, rather than having to generate the vtable lazilly as needed.

It seems to me that it would affect compilation time. It’s bound to be faster to check compliance with the iface once, at the impl, then at each point of invocation. However, we can cache these results, so that’s probably not a big deal.

Frankenstein impls

A big open question (to me) is whether we should consider an interface to be implemented if all the necessary methods are available but they come from different sources. For example, consider something like:

impl draw for T { fn draw() { ... } }
impl bounds for T { fn bounds() { ... } }

Now, in a duck-typing world, is the draw_and_bounds iface implemented or not? It seems to involve a similar set of tradeoffs. If the answer is that they are not implemented, we need to write something explicit like impl draw_and_bounds for T { ... } just as we had to do when not using duck typing at all.

Still, I think that we should disallow such “frankenstein” impls. The main reason is that it makes instance coherence just about impossible to address (more on that in a later post, but in short form it prevents us from concisely naming the origin of the iface methods). It also makes the compiler more complex and heightens the danger of matching methods with the same names but different semantics.

This is a short-ish post. I’m sure there are many details I have omitted.

What do I want?

I don’t know. I originally wanted duck typing. Now I am somewhat undecided. I do think Frankenstein impls (something else I originally wanted) are bad (because of the instance coherence problems I alluded to). I think if we make the syntax for “reusing” existing methods to implement a new iface sufficiently compact, it’s probably not so painful. I am not really worried about semantic mismatches: these are rare in dynamically typed languages, and we have types and other checks that make such a mismatch unlikely.

Hal WineThe Evolution of the Landing Cycle

The canonical commit/push/land cycle at Mozilla

[This is an experiment in publishing a doc piece by piece as blog entries. Please refer to the main page for additional context.]

Untangling the terminology

In the old days, before DVCS, “commit” only had only one real purpose. It was how you published your work to the rest of the world (or your project’s world at least). With DVCS, you are likely committing quite often, but still only occasionally publishing.

In the early days of hg at Mozilla, you would “push your changes”. But with the advent of social coding sites such as bitbucket & github, you often push your changes there as well. Or you push to our try servers.

Informally, Mozillian’s use the term “landing” to describe committing a change to one of the official repositories (also known as “repository of record” or RoR). So while most of the online documentation refers to “commit”, I’ll use the less ambiguous term “landing” here.

The Evolvolution of the Landing Cycle

It happened slowly, so we may not have noticed it, but the distinctions between “commit” and “land” have changed over time. Can we benefit from embracing these changes and extending them further? I believe so, even though that might require us to view our toolsets differently.

The old version

With centralized VCS, the cycle was roughly like:

digraph old_cycle {     rankdir="BT"     RoR_1 [label="RoR T(0)"]     RoR_2 [label="RoR T(1..n-2)"]     RoR_3 [label="RoR T(n-1)"]     RoR_n [label="RoR T(n)"]      { rank=same         other_pc [label="everyone else&squot;s PC"]         dev_pc [label="Dev&squot;s PC", fontcolor="green", color="green"]     }      { rank=same         edge [style="dotted", color="blue"]         RoR_1 -> RoR_2 -> RoR_3         RoR_n     }      {         RoR_1 -> other_pc [style="invis", weight="50"]         edge [penwidth="1", style="dashed", color="cyan"]         other_pc -> RoR_2         other_pc -> RoR_2         other_pc -> RoR_2         other_pc -> RoR_3     }      edge [penwidth="4", color="green", fontcolor="green"]     RoR_1 ->  dev_pc [label="initial checkout"]     RoR_3 ->  dev_pc [label="update\nbefore landing"]     dev_pc -> RoR_n  [label="landing change"] }

The new version

With DVCS, the cycle has been expanded to account for all the “social coding” that goes on between developers directly and indirectly via (public or private) hosted repositories.

NOTE

Nothing has changed w.r.t. how developers interact with the RoR!

digraph new_cycle {     rankdir="BT"     RoR_1 [label="RoR T(0)"]     RoR_2 [label="RoR T(1..n-2)"]     RoR_3 [label="RoR T(n-1)"]     RoR_n [label="RoR T(n)"]      { rank=same         edge [style="dotted", color="blue"]         RoR_1 -> RoR_2 -> RoR_3         RoR_n     }      { rank=same         other_pc [label="everyone else&squot;s PC"]         dev_pc [label="Dev&squot;s PC", fontcolor="green", color="green"]     }      { rank=same         bitbucket [label="Bitbucket", color="crimson"]         github [label="GitHub", color="crimson"]     }      {         RoR_1 -> other_pc [style="invis", weight="50"]         edge [penwidth="1", style="dashed", color="cyan"]         other_pc -> RoR_2         other_pc -> RoR_2         other_pc -> RoR_2         other_pc -> RoR_3     }      {         edge [penwidth="4", color="green", fontcolor="green"]         RoR_1 ->  dev_pc [label="initial checkout"]         RoR_3 ->  dev_pc [label="update\nbefore landing"]         dev_pc -> RoR_n  [label="landing change"]     }      {         edge [color="crimson"]         other_pc -> bitbucket         bitbucket -> other_pc         other_pc -> bitbucket         github -> other_pc         other_pc -> github         github -> other_pc         dev_pc -> github         dev_pc -> bitbucket         dev_pc -> other_pc         other_pc -> dev_pc     } }

So What?

Besides demonstrating my skill level at graphviz, what can be learned from these diagrams? I think something very special:

There are two separate work flows here, and they interact only in well defined ways.

or

The work flow of a development is distinct from the workflow of landing changes into the official repositories.

I assert that we can make the following conclusion from that observation:

Conclusion

There is no hard requirement that both the developer and the official repositories use identical tooling. What is the hard requirement is that the contract between the two continues to be met.

This really shouldn’t be news worthy – it is actually the way things have always been. Before DVCS, every developer did their own source code management on their computer. Maybe it was multiple checkouts, tarballs, patch sets, but chances are it had nothing to do with the tool used for the RoR. Developers even managed to exchange information with each other, again via tarballs, emailed patches, directory permissions and a host of other methods outside of the RoR tooling. (Personally, my first production use of hg was to follow the pattern Mozilla documented for using hg with CVS. That was wonderfully freeing, as it gave me the safety net of local commits and local branches. As a developer, I wanted and could make good use of far more flexibility than any well designed release system would let me have.)

But wait, there’s more

What isn’t shown above is that there is another interface on the other side of the repositories of record. That interface is the contract for using the buildfarm/testfarm/tbpl/L10N machinery that is being run by various groups, all pulling from the repositories of record. (For a zoomed view of this diagram, see this post.)

digraph layers {     node [shape="octagon"]     dev_world     repositories_of_record [shape=rectangle]     buildbot_world      dev_world -> repositories_of_record [label="landing work flow",                                          arrowhead="vee"]     repositories_of_record -> dev_world [arrowhead="vee"]     repositories_of_record -> buildbot_world [label="buildbot work flows",                                               arrowhead="vee"]     buildbot_world -> repositories_of_record [arrowhead="vee"]  }

Because this “backend API” exists, even if we change the tooling used to land changesets, it would have to be done in a manner that continues to support the automated usage of the RoRs. That workflow is not a “natural fit” for any DVCS (arguably especially not git). [1]

Another way to position that is, if we can find a clean, quick, way for developers to continue using hg as the only repository of record, we isolate them from tracking and complying with changes in the RoR -> buildbot contract. That’s the path I’m currently following.

Decoupling. It’s a good thing!

Footnotes:

[1]

Yes, the “backend API” could, theoretically, be changed. At the very least, that is a large (hence long term – possibly years) project, due to both the number of systems involved, and the need to keep those systems up 24x7x365.

To provide more timely improvements in the process, I’m focussed on shorter term deliveries.

Taras GlekARGH at our unresponsive tab strip: setTimeout(foo, 0) can be very harmful

As I mentioned before, I’ve been a manager for a year. I’ve focused solely on paper pushing for the past 6 months. Even though I love programming, it’s surprisingly enjoyable to merely tell others what to do :) However, as all technical managers find out, eventually one gets very bored without doing something technical. So here it goes…

Why The Frick Are My Tabs So Damn Laggy?

I noticed that tab switching has become unbearable lately. I finally filed a bug and with Gavin’s help investigated the brokenness. Turned out that we awesomely setTimeout(do_stuff, 0) in the mousedown handler (bug 743877). This means that I click on my tab, only to suggest to the browser to schedule an event to be handled some time in the future. The browser will also go ahead and flush the existing event queue before getting to handling my event. I measured lag anywhere from 30 to 160+milliseconds before the browser even started handling my click.

This code is pretty ancient, why has tab switching gotten slow within the last few months? Turns out we now take a tab thumbnail on every tabselect, which takes >100ms on my machine… We then carefully use async IO to store that image in our network disk cache. Unfortunately our cache uses locks in creative ways effectively making that code path synchronous (723577, 723582, 722033, 722034). See 742594 for thumbnail jank. Naturally, all of the above + cycle collection + garbage collection + etc gets scheduled right in the middle of handling tab switching :)

Thanks to a strategically misplaced setTimeout, the browser currently can spend a very long time not responding to user input (seconds sometimes). I bet we have a quite a few places that “solve” problems with setTimeouts like above.

There is hope

See bug 743069 for some proof of concept patches on making tab switching more responsive. As far as I can see, there is no technical reason for us to not to have a buttery-smooth tab strip. Next steps are figuring out why XUL draws slowly, throttling other browser activity while interacting with tab strips, etc.

Wil ClouserHow to get a development instance of AMO set up in about 10 minutes

Last year we set up landfill.amo to give contributors an easy base to set up the addons.mozilla.org site. Easy is relative here, of course, but it was a big leap over what we had at the time.

Kumar leapfrogged that milestone by adding Vagrant configuration scripts to our repository. Now you can have a running version of AMO on your local system in about 3-5 commands[1].

Check out the steps to install AMO with Vagrant to see how. I set it up on OS X last week and aside from waiting for the download it only took a few minutes. Drop by #amo on IRC if you run into any troubles.

[1] Setting this up on Windows is apparently more difficult although one contributor did find success after fighting with it for some time.

Edit: Updated the installation instructions URL

Web FWDFeeding Your Co-Founders

We asked Fred Dixon of our WebFWD team BigBlueButton to share what he was passionate about. Fred also operates Blindside Networks, the commercial entity that offers support to BigBlueButton customers. After co-founding three companies, perhaps it’s no surprise we got this: “Generating revenue so your co-founders can eat.” If you’ve ever started something, you know how vital generating revenue is. Even if you haven’t started something (yet?), you know how vital food is!

Fred shared specific ways that open source start-ups can generate revenue. But he also went way beyond that, providing insights into qualifying prospective clients, developing solutions, and negotiating best practices that apply across the spectrum of start-ups, open source or not. All of this translates into cash flow that will keep your company alive and ultimately in a position to grow and thrive.

A software engineer by trade, Fred said he decided to go into sales because he felt it was one of the hardest things to do. When asked what to do if a teammate questions the value of sales, he suggests allowing them the opportunity to close some deals to gain an appreciation of the task.

The key points Fred wanted us to take away:

  • Sales is a process.
  • Your revenue comes down to a few key moments.
  • People buy from people.
  • Make this your motto: “We will not permit you to fail.”

We suggest you watch this extraordinarily useful video to glean what this all means for you and your startup.

Michael KaplyCustomizing Firefox – Disabling Safe Mode

I have one more post planned about customizing Firefox with add-ons and the CCK Wizard, but I wanted to get this out in the mean time.

A lot of people ask how to disable safe mode in Firefox in an enterprise environment. This post will tell you how to do it with an add-on.

In my previous post about Integrating Add-ons into Firefox, I talked about putting add-ons into the distribution/bundles directory. The important thing to realize about putting add-ons into this directory is they become a part of Firefox. They are not disabled when Firefox is placed into safe mode (and they shouldn’t be!). So we can build an add-on that disables safe mode and by placing it here, it will always be executed.

Unfortunately, we can’t completely remove the concept of safe mode. The code that makes safe mode happen is in C++ startup code, so we can’t mess with that. But we can make it so that when the safe mode dialog appears, it simply is ignored and the browser is restarted. We do that by overriding the safe mode dialog and forcing it to press the “Make Changes and Restart” button without actually making any changes.

This is a very simple add-on that will consist of two files. I’ll tell you exactly where to put them and where to name them.

Note: There is no need for an install.rdf when you put add-ons in distribution/bundles. (I just discovered this.) Also, it doesn’t matter what the directory is called under bundles.

chrome.manifest goes in distribution/bundles/disablesafemode and looks like this:

content disablesafemode content/

overlay chrome://browser/content/safeMode.xul chrome://disablesafemode/content/safeMode.xul

safeMode.xul goes in distribution/bundles/disablesafemode/content and looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<dialog hidden="true" id="safeModeDialog" onload="onOK()"/>
</overlay>

You can test it by starting Firefox with the -safe-mode parameter or holding down the shift key on Windows or option key on Mac. You’ll see the safe mode window show up for a second (sized very small) and then the browser will restart.

Erin KnightOBI Public Beta

We are announcing today that we launched the Public Beta of the Open Badge Infrastructure. Huge milestone and huge kudos to the team for making it happen. 

What’s the OBI?

The OBI is the ‘plumbing’ of the badge ecosystem. It is a specification for badges, set of repositories (“Backpacks”) for storing badges and APIs for pushing badges in and pulling badges out. It’s an important piece of this badge experiment because it moves us beyond more silo’d systems, allows the learner to collect badges from lots of different learning experiences and provides the structural components to enable badges to be transferred and leveraged across the ecosystem for real results like jobs or credits.

What’s Public Beta?

With this Public Beta launch, the OBI is now publicly available for use. Badges can be pushed in and pulled out and earners can store badges in the middle in their Backpacks. And more! Specifically, Public Beta includes:

  • New and improved issuer API
  • Backpack feature upgrades:
    • Store badges
    • Manage badges
    • Import badges
    • Group badges
    • Publish groups to a unique URL and add narrations/notes around each badge to share
  • New displayer API
  • New documentation
  • Legal docs! Privacy policy, terms of use and FAQs specifically for the Backpacks.

Wait, weren’t you already in beta?

Yes and no. We were calling it ‘beta1’ which was a made up word to mean that it was a step up from alpha but not quite all the way to beta. It was essentially the initial issuer API and Backpacks, but was available basically by invite only. We should have called it a ‘developer preview’ but hindsight, something something. This Public Beta (capital B!) is a proper Mozilla beta (security review, user data committee review, on Mozilla servers, etc.) and its publicly available! Woo!

What does it look like?

Technically like this…

But really like this…

(Sample Badge Backpack)

And this….

(Published group of badges)

How can I get involved?

What’s Next?

We are moving to a much shorter release cycle - releasing things at least every two weeks, but possibly more quickly as we go. But we are aiming to move from Beta to 1.0 by the end of the year. In addition that work, plus bug fixes along the way, we are also working on some lightweight tools that make creating and issuing badges easier, and eventually will most likely do the same for displaying badges. 

Who should we congratulate?

The team for being some of the smartest, hardest working game changers I’ve known, as well as our community who have been advising us every step of the way. Thanks to you all - congratulations!

-E

Christian Heilmann[Evangelism Reps] How to say “hi” with a quick video – recording and editing

One of the things we want participants in the The Evangelism Reps program to do is give us a quick introduction video of themselves to have a face to connect to a name. This should not be anything big, a simple, “hi, here I am” will suffice. So here is my introduction as an example.

All in all the production and publication time of this was an hour – and that included cycling a mile to find a shop that has Tofu sausages and Babybel cheese. Here’s what I used:

  • A MacBook Air (could be any laptop with a camera)
  • Photobooth (or any other tool that can record a camera – this could be on your mobile, too)
  • MPEG Streamclip

The first thing to remember when trying to do something like this is to simply for go for it. So I wrote myself a little script and just had it open next to the recording tool:

recording my introduction

Technically, this is not good, but I wanted to do this quickly. You can see my eyes flicking to my script from time to time. I shouldn’t have to as I knew what I wanted to say but humans work that way. Give us a “Linus blanket” and we will always come back to it.

Regardless, of course this didn’t work in one go, so here is the full recording with out-takes:

This is the simplest way to record – don’t try to re-start the recording and delete it in between failed takes, just go on and cut the bits that didn’t work afterwards.

You can see that I waved my hand over the screen every time I started again. This is the sign to myself that another take started.

For cutting, I used MPEG Streamclip which couldn’t be simpler:

  1. Go to the hand movement and find the start of the next take
  2. Hit O for “out” – this highlights the video from start to where you are now
  3. Press cmd+x to cut (delete) the video up to the point where you are
  4. Find the end of the video
  5. Press I for “in” to mark the video from there to the end
  6. Press cmd+x again
  7. Save as MP4

You can see this in action on vid.ly.

All in all this is very simple to do, so I am looking forward to a lot of those cropping up in the nearer future.


Pedro AlvesAuto Include support in CDF



2 blog posts in one day - I'm on a spree!


This is a great feature in the Ctools (specially cdf / cda combo) package. The ability to automatically include the result of certain queries.

Imagine the following scenarios:

I want to have my date selector to default to the last day my etl ran to avoid spikes in the data
or

I want to have specific defaults per user on my selectors

The traditional way to do  this is to manually add queryComponents to CDF and then play with the postExecution / postFetch parameters. It works, but not practical at all to tweak the life cycle around this methodology.

This is what Auto-Includes are for!  Just drop a .cda file in a specific directory under solution:/cdf/include/mypath and it will be available for all dashboards under a mypath directory.

Here are the full details of this feature, available already in the stable Ctools packages (and obviously in the development packages too)

Query Auto-Including

CDF supports adding the results of CDA queries to the context. The default configuration file will take any CDA file within the solution:/cdf/include/ folder hierarchy and include all queries therein, with their default parameters, in any dashboard whose path, relative to the solution root, is within the same path as the CDA file, relative to solution:/cdf/include/.As an example, if you have a CDA file in solution:/cdf/include/aFolder/myQueries.cda, then the dashboard solution:/aFolder/myDashboard.wcdf would include all queries from myQueries.cda, as would a dashboard located at solution:/aFolder/anotherFolder/myOtherDashboard.wcdf. A dashboard located at solution:/someOtherFolder/myThirdDashboard.wcdf, however, wouldn't include those queries. Partial matches will also work, without the full solution path

Rule format

The auto-include rules follow the following template, where all the Patterns are understood as regular expressions:

 <autoinclude>
<cda>cdaPattern</cda>
<ids>idPattern</ids>
<dashboards>
<include>includePattern</include>
<include>includePattern_2</include>
<exclude>excludePattern</include>
...
<include>includePattern_n</include>
</dashboards>
</autoinclude>
 
Such a block should be interpreted as follows:
  • This auto-include rule pertains to any and all CDA files whose path matches cdaPattern.
  • The dashboards element may have any number of include and exclude elements, in order of importance (from least to most important). the includePattern_n/excludePattern_n patterns may contain backreferences to capture groups in the cdaPattern.
  • The path for the dashboard being executed will be tested against the include/exclude patterns, in order of importance. The dashboard will auto-include a CDA's queries if it matches at least one include rule, unless it matches a subsequent exclude rule (unless it matches a further include rule, etc).
  • If the dashboard qualifies for auto-insertion, all queries from the matched CDA whose dataAccessIds also match idPattern will be executed and included in the dashboard's context object.

 

The Default Rule

The default rule for auto-inclusion serves as a good example of what can be achieved with the rule format:
    

<autoinclude>
<cda><![CDATA[cdf/includes/(.*)/(.*?)\.cda]]></cda>
<ids>.*</ids>
<dashboards>
<include><![CDATA[/$1/.*\.wcdf]]></include>
<include><![CDATA[/$1/.*\.xcdf]]></include>
<include><![CDATA[/$1/.*\.cdfde]]></include>
</dashboards>
</autoinclude>

Note that most of the patterns are wrapped in blocks, obviating the need for escaping any reserved XML characters within the regexps.
As you can see, the cda element defines that this rule will match any CDA file whose path looks like /solution/cdf/includes/(.*)/(.*?)\.cda — this will match all files within /solution/cdf/includes/ that have at least one more folder in the path, and end with the .cda extension. The two capture groups will capture the file path, and the (extension-less) filename.

The include patterns all specifiy paths starting with /$1/ (the path capture group), meaning, the path begins the same as the previously matched CDA file's, and ending with .*\.wcdf (or cdfde/xcdf), so matching all paths that start the same as the CDA file, but possibly having more folders in the path . The three rules differ only in the file extension they allow (covering CDF and CDE dashboards). The ids pattern specifies a loose pattern — any id matches, so once a match has been made between a dashboard and a CDA file, all queries in that CDA will be inserted into the dashboard's context.

Phillip SmithMozilla Planet: Bootstrapping technology news for the people.

Mozilla Planet

A short vacation concluded, it’s been fun to dive back into the evolving series of blog posts that go all the way from Rethinking Planet Mozilla, to Matt Thompson’s excellent “Planet Mozilla needs humans,” and continue with Lyre Calliope’s posts on “Mozilla as a media organization(You can catch Lyre talking about the idea on today’s Webmaker community call).

Bootstrapping a technology news site for Mozillians

One of the driving questions we left off with was:

What would be required to bootstrap the best information-delivery system for Mozillians, made by Mozillians, about Mozillians?

And when I say bootstrapping, I mean how do we narrow the idea down to a minimum viable product, i.e., something so simple that it would be possible to get a version of the idea up-and-running in six-to-twelve weeks? What is the very essence of the idea and what are the handful of must-have “features” that would enable the idea to exist in a way that people could interact with it and help to improve it?

Mozilla Planet

In my mind, these are the must-have features of this information-delivery system:

  • A narrow and extreme focus on one niche category: innovation within the Mozilla community, specifically the people, the ideas, and the products that are changing the face of the Web.
  • A practical demonstration of “Web thinking” and “thinking out loud” applied to the challenge of helping the growing Mozilla community understand the quickly changing world around them.
  • A laboratory that experiments with new ideas and open-source tools and libraries to push the envelope of how news, reporting, and information is delivered online.

And here’s a straightforward proposal for how to make it happen:

  • A one-year commitment from Mozilla to underwrite the experiment in its start-up phase (and the trust to give the project some editorial independence and a bit of profile).
  • One full-time staff writer/blogger with excellent editing skills and a willingness to experiment.
  • A small volunteer editorial board who are active writers/editors/bloggers and also keenly plugged into the Mozilla community, e.g., both tech-centric people like Christian Heilmann and Pascal Finette, and also storytellers like Matt Thompson, and Dan Sinker.

In terms of technical practicalities, I would propose the following:

  • A blogging platform. Preferably something open source and extensible.
  • An inexpensive DSLR that shoots video and a portable audio recorder with a decent microphone, as well as a tripod, smart phone and a laptop.
  • Use of a desk at each of the Mozilla Spaces, as required.

Yep. That’s it. Just a blog, some multimedia equipment, and a place for this storyteller to park their arse as they chase the unfolding story of bottom-up innovation in the ever-expanding city that is Mozilla.

(Okay, okay: If the budget allowed, I’d also lobby for a Livestream Livepack, or an open source equivalent, and an annual Livestream Premium subscription, because video is critically important part of news delivery and an important part of the future of the Web too. And, let’s face it, editing video takes time, it’s often better to just “go live” and let the Internet take care of the post-publishing edits.)

This brave and pioneering soul — an expert at uncovering a good story and telling it quickly, concisely, and in the spirit of the Web — would be tasked with producing two “stories”* a day, four days a week, and also editing a handful of other stories submitted by the editorial board and community contributors. They would also manage a news river of their sources, and would communicate regularly and openly with the editorial board and community via micro status updates. Finally, they would collaborate with Mozilla staff and volunteer contributors to iterate forward the technical underpinnings of this initiative. Phew! This is no small endeavor, but I suspect it is one that would appeal greatly to the right person.

* Story defined loosely enough to allow for lots of experimentation with text, multimedia, data, and so on.

Not a new idea, but a proven idea

This project isn’t about breaking new ground. None of this proposal is overly daring or experimental. As Matt pointed out, variations on this idea have been explored by Digg, Tumblr, and even Google.

Beyond these technology-company driven examples, the broader community of online news start-ups illustrate how this enterprise has been undertaken before:

Mozilla as a news brand

Phillip however seems to lean toward suggesting something more radical: Planet Mozilla should evolve beyond being a glorified RSS aggregator to a full blown news brand.

Yes, it’s true: as I said before, if the idea is successful the conversation about what to do with Planet Mozilla will be irrelevant. Planet Mozilla would become just one of many sources of information — Mozilla events, news feeds, IRC channels, mailing lists, conference calls, wiki changes, and so on — from which would be distilled a constant drumbeat of pure signal — the unfolding story of innovation in a global community of millions; a focus on the “open Web” and how it’s redefining everything from education to journalism; a technology news site “for the people,” one that doesn’t obsess about the latest proprietary software start-up, the next round of funding, or the imminent purchase by Facebook (Goodbye Instagram!).

There you have it: an elevator pitch of sorts. Mozilla Planet: Technology news for the people. Up-and-running in six-to-twelve weeks. Rapidly innovating with the help of the community it serves. One year to become the best information-delivery system for Mozillians.

What’s your minimum viable product?

Pedro AlvesCDE / CDF releases 12.04.09

CDE


Main features:
* Added auditing support for cde render and edit methods


Full Changelog:

* Implemented [REDMINE 514] - Added auditing support for cde render and edit methods * Small change to allow MOLA plugin to work * Changed dependency to 3.10.0-stable * fix path construction in saiku olap wizard


CDF

Main features:
* Added support  for auto-including query results in dashboard context
* Added audit support for renderXcdf operation.


Full changelog: 

* Added support for auto-including query results in dashboard context
* Implemented [REDMINE 513] - Added audit support for CDF renderXcdf
* Solved [REDMINE CDE-528] -  Show values doesn't work on bar charts
* Solved [REDMINE 539] - Dashboards.getQueryParameter is using unescape(), should use decodeURIComponent()
* Changed dashboardContext includes to be compatible with both dbBased and fileBased rep
* Added resources as a plugin path - Added warning for when content generator is used to serve static resources
* Updated cdf dependencies to 3.10-stable
* Removed an extraneous rule from dashboardContext
* Change the timestamp format in the timing loggers
* Changed blockUI to simple .gif + slightly opaque white overlay.

Bonjour MozillaC'est parti pour le Mozilla Sénégal Tour !

mozsntour

Infatigable Camara ! Après avoir donné naissance l’an dernier à la communauté Mozilla Sénégal, il se lance cette semaine dans un tour du Sénégal… Rien que ça ! Avec Niang, ils partent, à partir d’aujourd’hui, à la rencontre de leurs concitoyens pour leur présenter Mozilla, organiser des ateliers, et répondre à toutes les questions ! Le programme est alléchant, et Bonjour Mozilla a hâte d’avoir les premiers retours de Camara (les photos seront consultables ici ; suivez-les sur Twitter grâce au hashtag #mozsntour12).

Bonjour Mozilla Sénégal ! Et belle semaine !


Tireless Camara! After creating the Mozilla Senegal community last year, he starts a tour of Senegal this week, no less! With Niang, starting today, they’re going to meet their fellow citizens, introduce Mozilla to them, set up workshops, and answer every possible question! The program is attractive, and Bonjour Mozilla can’t wait for Camara’s first feedback (There will be pictures here and you can follow them on Twitter using the #mozsntour12 hashtag).

Bonjour Mozilla Sénégal! and have a nice week!