When the Blink fork was announced, it came with an admirable commitment to good citizenship when adding new Web-exposed features. Unfortunately, Google has recently announced that they will expose Portable Native Client (PNaCl) --- and by extension, the Pepper APIs --- to all Web pages, a move which clearly runs counter to Blink's commitments.
PNaCl is an execution framework that lets Web developers compile code in various languages using LLVM-based compilers to LLVM "bitcode", which is then served to clients (i.e. Chrome) which compile it down into native code. To be useful, code needs APIs to interact with the outside world (e.g. graphics APIs), so Google created the "Pepper" APIs for NaCl/PNaCl applications to use. Let's see how PNaCl and Pepper stack up against the Blink principles:
- In practice, we strive to ensure that the features we ship by default have open standards.PNaCl and Pepper are not open standards, and there are not even any proposals on the table to standardize them in any forum. They have documentation, but for the details one must defer to the large bundle of Chrome code that implements them. Other vendors wishing to support PNaCl or Pepper would have to adopt or reverse-engineer this code.
- Factors that decrease compatibility risk (in rough order of importance):
- Other vendors shipping compatible implementations
- A mature specification in the relevant standards body
- Positive signals from other browser vendors
- A small API footprint
- The following tiers are good rules of thumb to know that the feature is on the right track (ordered by increasing risk to compatibility and therefore decreasing order of desirability):
- Two other browser engines already ship roughly interoperable implementations in stable or experimental channels. In this situation, the feature is already a de facto standard. If a de jure standard does not yet exist, we should help create one.
- One other browser engine ships a roughly interoperable implementation in a stable or experimental channel, we believe the feature to be stable, and we’ve consulted with the appropriate standards body.
- The appropriate standards body considers the feature ready for implementation. For example, the W3C issuing a Call for Implementations or publishing a Candidate Recommendation of the feature would meet this guideline.
- The specification for the feature has been accepted by the appropriate standards working group (e.g., a First Public Working Draft in the W3C) and we’ve received positive feedback from other browser engines about the feature’s feasibility and value.
- We will propose an editor’s draft (or equivalent) to the relevant standards group.
- We will discuss the feature publicly with implementers of other browser engines.
The disconnect is alarming. Unfortunately it appears Blink's principles only apply to Blink, not Chrome as a whole. I'm sad, because this seriously undermines the value of the Blink team's good intentions; a Google team that doesn't want to be a good Web citizen can probably find a way to be "not Blink" and run roughshod over the Blink team's good work :-(.
If you’re like most people, you’re probably receiving too many messages. A great way to keep your Inbox from feeling overloaded is to filter out low-ranking messages while highlighting the important ones.
Here are some of our favorite filters, along with some terrific suggestions from Postbox users, for keeping your Inbox tidy, relevant, and actionable.
Create a new folder called “Shopping.” Create a filter called “Shopping by Subject” that CONTAINS ANY of the following terms within the Subject line, such as “receipt,” “statement,” “bill” “order,” “purchase,” “monthly,” “shipping,” “shipped,” “shipment,” “coupon,” “sale,” “% Off,” “free” or “promotion,” and then create a filter action that moves these messages to the “Shopping” folder.
Next, create a second filter called “Shopping by Sender.” Use the search bar to look for emails related to ecommerce, such as Amazon, Groupon, or Living Social, and then copy the email address from those senders, such as “firstname.lastname@example.org” or “email@example.com” and use those as an ANY filter criteria. Create an action that moves these messages to the “Shopping” folder.
Create a new folder called “Newsletters” and a new filter called “Newsletters.” Use the Postbox Search Bar to find messages that contains the following terms within the message body: “unsubscribe,” “opt-out,” “edit your preferences,” “update profile,” “manage your account,” etc.
Next, select a newsletter, click on the sender name in the message envelope, and select “copy email.” Paste the email address into the Message Filters panel, and repeat the process using the ANY criteria. Create an action that moves these messages to the “Newsletters” folder.
A slight variation of this to move messages to a “To Read” folder for newsletters or mailing lists that are more relevant to your business or lifestyle.
Create a filter that is based on the email addresses of messages from social media sites such as from Facebook, Twitter, LinkedIn, Google+, YouTube, etc.My Messages and Files
Create a folder called “My Messages,” and then create a filter with the ALL criteria that looks for your email address in both the “From” and “To” fields. This is handy for working on messages and attachments that you send to yourself.Unknown Senders
This filter keeps messages from senders that are not in your Address Book from entering the Inbox. Create a folder called “Unknown Senders” and then set the ALL criteria to first match “From isn’t in my address book.” To allow emails from work colleagues, add a second criteria to match “From isn’t @yourcompanydomain.com.” Create an action that moves these messages to the “Unknown Senders” folder, and then triage the contents of this folder at the end of the work day.Block List
If a specific person is sending you inappropriate or unwanted email, add their email address to a “Block List” filter. Postbox will essentially look for emails from people on the block list and you can set the filter to delete these messages if desired.No Reply
This is a great filter for catching messages that are not filtered by the above. Create a filter that searches for ANY email addresses that CONTAINS “noreply@” or “no-reply” and move them to a “No Reply” folder. Periodically inspect this folder for emails that should be added to an existing filter.Filters for Managing Inbox Contents Highlight Messages from my Boss or the Executive Team
This filter will make sure that you never miss an important email from the people who write the checks. First, create a Topic called “Execs,” color the Topic red, and for added emphasis, select “Apply the topic color to the entire row in the message list pane” within the Topic Preferences Panel. Next, create a filter that searches for email addresses from your boss and/or the executive team, and then applies the Topic “Execs” as an action.
Alternatively, you can add these contacts to a dedicated “Execs” address book and filter by that criteria.Add a Topic to Messages from a Partner Domain
This is great for organizing messages from other companies that you work with. For example, if you’re working with ACME Design on a new website, create a Topic called “ACME” and then create a filter that looks for all email addresses that CONTAINS “@acme.com,” then create an action to assign the “ACME” Topic to each message. From here, you can use the Focus Pane to only view messages from ACME Design.Auto-Archive Old Messages
Create a filter where the “Age in Days” is greater than “90,” then move these messages to your Archive folder. You can even move messages to an Archive folder on a different account if your work account quota is starting to max out.Keep Old Messages from Being Forgotten
The message list can get long, and messages that are out of sight tend to be out of mind too. Create a filter where the “Age in Days” is greater than “10,” and then create an action that adds these messages to your To-Do list. Pin To-Dos to the top of your message list to keep them in view. This essentially forces you to deal with messages within a 10 day time period instead of letting messages accumulate within the Inbox.Copy Messages to a Backup Account
If you’re using a POP account and would like an easy way to backup new messages to an online account, you can create a filter for that! Create a dedicated IMAP account for storage (from Gmail or any other free IMAP provider), then create a “Match All Messages” filter to automatically copy all new messages to the storage account’s Inbox.
You’ll also want sent messages to get copied to this account as well by going into Preferences / Accounts / [your account] / Copies & Folders and under “Sent” select “Bcc these email addresses” and enter your email address for your storage account. This creates an online backup for your POP email that can be searched from anywhere!
Once you’ve created dedicated folders for messages such as “Newsletters,” “Shopping” and “Social,” you can arrange them within the Favorites Bar for fast access. Alternatively, you can open each folder within their own tabs.Mark Messages as Read
A useful add-on action to any filter is to mark the message as “Read.” This helps to keep unread message bubbles or dock badges from distracting your attention.Mark as To-Do
A great filter action is to mark messages as To-Dos. This causes the message background to change color, and you can even “pin” To-Dos to the top of your message list so they don’t get lost in the shuffle.Highlight with a Topic
Using Filters to automatically assign Topics is a very powerful organization technique! Once a message is tagged with a Topic, you can use the Focus Pane to only view messages that contains that Topic — great for staying focused on one thing at a time.Filter by Address Book
In Postbox, you can group contacts by as many Address Books as you like. For example, if you’re coaching kids soccer, you can add the parents’ email addresses to a “Soccer” address book, and then create a filter that applies actions to messages from those senders, such as moving messages to a “Soccer” folder or applying a “Soccer” Topic.Reply with a Template
A great filter action is the “Reply with Template” action that sends a pre-canned message Template. For example, a reply with template action could state: “Thanks for contacting ACME. Below you will find information on our company and products. If you require additional information, please reply to this message with ‘ACME Inquiry’ in the subject line and we’ll get right back to you.”
You could then create a second filter that finds messages that CONTAINS the subject line “ACME Inquiry” and apply an appropriate filter action.
Hint: Filters execute in the order specified within the Message Filters panel. By arranging the filters in a specific order, you can essentially create a filter-powered workflow.
While setting up filters within Postbox is most convenient approach, it is perfectly acceptable to set up filters directly on your email server. This allows messages to be filtered in the background, as “close to the metal” as possible, which will improve the overall performance of Postbox.
Hint: If you use a server-based filter to move messages to “Folder X,” within Postbox right-click Folder X, select “Properties…” and select “Check this folder for new messages.” This will allow this folder to automatically update when your Inbox is checked for new messages.
Have a favorite filter to share? Tell us about it in the comments below!
In Taipei we had probably the best Gecko work week I've ever been to. It was also, for me, the most draining. Apart from getting the regular Gecko teams together for work and fun, we also got to meet many of the new Mozilla developers in Taipei. This was very helpful and a lot of fun. However, as a senior Mozilla figure I felt a lot of responsibility to educate and generally facilitate the interactions of all our teams, 24/7, and since I'm not naturally gregarious, my social skills were plain worn out by the end of the week. It was exacerbated by the sheer number of people, and the cultural and language barriers. I also have to struggle against the urge to strut before Chinese women. Fortunately I have considerable experience dealing with these issues, otherwise I probably would have imploded.
That aside, it was all very very good. The food was amazing. The breakfast at the Grand Hyatt is the best hotel breakfast I've ever seen, by some distance. The Chinese banquet dinners were over-the-top great (bar the shark's fin --- gah). The mango dessert in the Taipei 101 basement food court --- mango chunks, shaved ice, condensed milk, brown sugar syrup, and mango ice cream --- was so good I had it twice. The extracurricular activities included visiting the National Palace museum, board games at night, and two trips into the hills. The day after I arrived, Sunday morning, I completed my first ever organized running event, a 10km trail run in the hills on the north side of the city, with a few other Mozilla staff. It was hot and humid, but the field was pretty weak and mostly walked up the steep bits, which worked to my advantage since I have long legs and walking fast uphill is my specialty, so I came in 18th out of 88 male-over-40 finishers. On Saturday morning, just before we left, a group of Mozilla people went for a hike to and beyond Elephant Mountain. That was lots of fun.
During the week, I led two sessions not related to specific technical issues: one was on "Mozilla culture" --- what we do, why we do it, how we should change it, specifically targeted at people relatively new to Mozilla, especially those from companies with very different cultures. Part of that was about code review, and stimulated another session specifically about code review, and how to do it better. I have videos of those sessions, and once I've scrubbed them to remove one or two unfortunate comments I'll put them online :-).
It turns out that currently the only place you can buy official Mozilla merchandise is the Taiwan office's online store. Anticipating this, I brought a half-empty suitcase and placed the biggest order the store had ever seen. Now I have a stockpile of gifts for friends and family that should last a while :-). We desperately need an international Mozilla gear store, though.
Since I'd seen most of the good Air New Zealand May movies earlier this month, the plane movie selection was a bit random...
- The Last Stand: Schwarznegger vehicle, so I had low expectations, but they were exceeded. Not a great movie, but not a bad one.
- The Assassins: Borderline incomprehensible Chinese movie. I missed being able to pause the movie and ask my wife what on earth is going on.
- Taken 2: Such a bad movie. Utterly boring and predictable, none of it makes any sense at all, and embraces a number of common movie failures: classic combination of the bad guys being both supremely brilliant and completely stupid; classic assassin-idolization main character who kills people without feeling but is also a really great guy; classic divorced couple who are so right for each other it's incomprehensible why they got divorced in the first place. Avoid.
- Remembering 1942: Really really good. Got mixed reviews, but I think it's a great movie. It's a litany of human suffering, set in the Chinese province of Henan, trapped in the vice of war and famine. Watching movies like this periodically helps me keep a sense of perspective.
- Ripper Street (series): Victorian police procedural. I had low expectations, but was actually quite impressed. Conveys a real sense of the times --- and they were interesting times indeed.
It was a great decision to have the work week in Taiwan, and I hope we get back there soon.
Last week I was in California. It was my first time in the Mozilla SF office --- lovely view of the Bay from the roof. I always enjoy the free snacks and I'm always glad we don't have them in Auckland. I spent quality time with some of the people I know and love at Mozilla, and that's always exciting.
On Wednesday and Thursday I was at Half Moon Bay doing LEAD training. It was fun, but thinking about "soft skills" for two days straight is quite draining for me; my social skills are learned, not innate.
This cohort is different from previous cohorts --- most members are relatively new to Mozilla; of our cohort, Vlad and I have been at Mozilla the longest, by far. This gives me the honor and duty of representing the Mozilla old guard. I feel the power of the narrative that has me in the "crusty old engineer, harping about the old days and resisting change" role ... and I do my best to reject it :-).
One of the results of LEAD so far is that I perceive my relationships with other Mozilla staff to be warmer and stronger than they perceive them, on average. I suspect this may be related to the difficulty of maintaining deep relationships with remote employees I see a few times a year at best. I'm still trying to figure that out.
- Gangster Squad: Genre flick. OK.
- Zero Dark Thirty: Pretty good. Not exactly entertaining, but interesting.
- Live And Let Die: Some kind of cross between a Bond movie, a blaxploitation flick, and the Dukes Of Hazzard. Odd.
- The Town: Genre flick. Slightly better than average.
- I, Anna: Sort of noir-ish psychological thriller. OK.
- Les Miserable: The movie of the musical. Pretty good. I need to read the book sometime.
Interestingly, Air New Zealand lets you see what movies they're showing on their routes. This Web interface is a pretty faithful mockup of the actual in-seat interface (which is pretty bad ... it would be great to be able to see more than one movie title at a time).
On Friday I leave for Taiwan for a week at the Mozilla office, a "Web rendering" work week. This should be even more fun than last week.
Over time I've become increasingly impressed with the broad applicability of Matthew 18:15-17: If your brother or sister sins, go and point out their fault, just between the two of you. If they listen to you, you have won them over. But if they will not listen, take one or two others along, so that ‘every matter may be established by the testimony of two or three witnesses.’ If they still refuse to listen, tell it to the church; and if they refuse to listen even to the church, treat them as you would a pagan or a tax collector.
The first step is often difficult but crucial. The path of least resistance can be to go behind your antagonist's back --- to your friends, or their friends, or their manager. I've seen all kinds of negative consequences from following that path --- hurt, distrust, unnecessary escalation, confusion and fear. I feel my integrity depends on people knowing that whatever I say about them to others, they will not be surprised by because they've already heard it from me.
This applies in the other direction too, when people complain about third parties to me. If the third party is unaware of the issue, I don't want to know --- go away and talk to them first.
There are rare exceptions, usually involving time-critical emergencies or complex secrecy requirements.
Our Web Audio implementation is making great progress. This is mainly due to the efforts of Ehsan Akhgari, who is, astoundingly, cranking out one or two features per day. Paul Adenot and I are spending hours every day just reviewing his code. I think this is partly due to Ehsan and I laying down some pretty good infrastructure at the outset.
Our current goal is to have a basically complete implementation for Firefox 24, which branches from trunk in about eight weeks. There are a few things we need to do to get there:
- Complete the feature set. At this point that mainly means adding all the node types that aren't implemented yet: MediaStreamAudioDestinationNode, MediaStreamAudioSourceNode, MediaElementAudioSourceNode, ConvolverNode, OscillatorNode, and WaveShaperNode. The first three are all related and shouldn't be too hard since we designed Web Audio from the start to share infrastructure with MediaStreams (which are already integrated into media elements) --- internally, a Web Audio node is just a special kind of MediaStream. We still need to implement HRTF and soundfield panning modes for PannerNode. We need to implement OfflineAudioContext. For some of the audio algorithms that aren't very well specified, we're borrowing code from Blink. This is suboptimal but there's ongoing discussion about what level of detail we should specify the audio algorithms at.
- Work on latency. Right now audio output has pretty bad latency, especially on Android, FirefoxOS and Windows; the biggest problems are intrinsic issues with the platform APIs we're using. On older versions of Android and Windows XP it may be a lost cause, because good APIs simply aren't available. For Windows Vista and up we're writing a new audio output backend using WASAPI. On FirefoxOS we may rip out the Android code we're using and replace it with PulseAudio. There is additional work to do to better integrate the MediaStreamGraph (that drives MediaStream and AudioNode processing) with our libcubeb audio backends for lower latency and better tracking of the audio clock. This latency work is desperately needed for WebRTC as well as Web Audio.
- Work on throughput. Right now we're focusing on having a good clean design and functional correctness. For example, all communication and synchronization with the MediaStreamGraph real-time processing thread is asynchronous, using message passing. Updates to Web Audio and MediaStream graphs are batched so all changes performed by a script happen atomically on the real-time thread. But we haven't done any profiling, tuning, or optimization of the actual processing code. In particular we'll clearly need SIMD implementations of basic audio primitives such as mixing to get near-maximum performance, especially on mobile.
- Test and fix bugs, needless to say.
Contributors welcome! The Web Audio bug (779297) has a lot of dependencies to choose from :-).
One interesting issue that Jean-Marc Valin brought up recently is the prospect of a loudness war on the Web. Some areas, such as Sony's Playstation products and some broadcast TV regions, are trying to mitigate the loudness war by standardizing acceptable dB levels for all content. It might be a good idea to do this on the Web too, and have browsers automatically limit the volume of content that exceeds those levels. We're still thinking about whether and how this should be done, and talking about it on public-audio.
We had a lovely few days away. On the drive to Rotorua we stopped at Waihi and rode the old railway up to Waikino in an open carriage. Later we stopped at Mount Manganui and walked to the top --- always a great view.
We stayed by the lake at Waiteti, just out of town, at Waiteti Lakefront Motel. I think that was a pretty good decision; very peaceful, great view, relatively cheap, and free use of kayaks which we took advantage of on Saturday morning, paddling up the Waiteti Stream a bit.
On Friday morning we did the gondola and luge ... especially the luge, which everyone enjoyed. After that we visited Kuirau Park, which I always enjoy a lot --- it's so great to have a geothermal park right in the city. Then we went to Waimangu Valley, which I still think is the best geothermal attraction in the area because of its unique size and features, and its brilliant bush and lake setting. It's changed noticeably since I was last there; Warbrick Terrace is growing quite rapidly.
After kayaking on Saturday we went to the Redwoods for a short walk. I hadn't been there before and it's really great --- not as picturesque as some other places near Rotorua, but large and lovely, especially I imagine for running and biking. Then we went to Lake Okareka and did the new walkway there. Brilliant.
On the way back to Auckland yesterday we stopped near Putaruru and did the Te Waihou walkway. The Waihou river is stunningly clear and beautiful due to having flowed underground through filtering rock in the Kaimai Ranges (for fifty years, supposedly). We saw a lot of trout, but a couple of guys fishing complained they hadn't caught any because the clarity of the water made it too hard to estimate depth!
All in all, another wonderful central North Island getaway. I love this place.
Postbox 3.0.8 is now available. Here’s what’s new in this release:
To update, select About Postbox from the Postbox menu on Mac OS X, or select About Postbox from the Help menu on Windows, then click the Apply Update button once the update has finished downloading.
We drove out to the Upper Mangatawhiri Dam on Sunday afternoon and took a couple of hours to get to Piggotts campsite. It's a pretty small patch of flat grass, so I don't know how you'd get 20 people camping there, but whatever. There's also a small hut which I haven't seen mentioned anywhere. In fact we passed by it, thinking that couldn't be the place, but quickly turned back when it became clear that it was, in fact, the place.
A thunderstorm passed over during the night. It was the first time any of us have been in a tent during a thunderstorm, so that was exciting for everyone.
The next day we got up early and hit the trail about 8:15am. Based on the warnings about central Hunua tracks being "for experienced trampers only", and that we hadn't ever hiked a long distance carrying all our gear, I wanted to give us the maximum possible time to get to Adams campsite. As it turned out even the warning-est track (Upper Mangatawhiri) was just fine. Less fine was that the Adams campsite was a lot further along the track than where my map shows it, and when we finally found it at about 3pm, it looked pretty awful. The ground was waterlogged and, while there was a sign saying "toilet", there wasn't one to be seen. We decided to skip it and push on to our final destination --- Waharau Regional Park. (Now that I've looked a bit closer online, it seems Thousand Acres campsite is a better bet ... but it's not even on my map. Lesson: use up-to-date maps and do more research!)
So our three-day tramp turned into a two-day tramp and we arrived at Waharau about 5:15pm after nine hours of tramping, covering about 18km of reasonably rugged terrain with all our gear. Everyone was tired but I'm proud of my kids for handling it very well.
If the weather forecast isn't too horrible I'll be away the coming Sunday afternoon to Tuesday morning tramping in the Hunua hills southeast of Auckland.
Thursday is Anzac Day, a public holiday, and I'll be taking Friday off to go on a holiday with my family. So I'll probably be in the office/online only on Wednesday next week (that's Tuesday for those of you on the wrong side of the date line).
About a week later, Sunday May 5, I have a flight to San Francisco. I'll be in the Bay Area on Monday and Tuesday, and at LEAD training on Wednesday and Thursday.
About week after that, Friday May 17, I'm flying to Taiwan for a Mozilla layout/graphics/media work week.
The head of "Google NZ", Tony Keusgen, has been talking about New Zealand's shortage of "IT experts". And apparently, unlike most people who complain about it, he's actually tried to do something to help. That's great.
However, what's not so great, and of course not mentioned at all in the article, is that Google itself is contributing to the problem in a significant way by aggressively recruiting for NZ developers to move to their Sydney engineering office --- since they don't have an engineering office in New Zealand. That works for Google, for their recruits, and even for me and Mozilla, since there's basically no competition to Mozilla for NZ developers who want to do the sort of platform engineering work we do. It sucks for New Zealand though.
It's too bad the writer, Ben Chapman-Smith, didn't know about or declined to mention this. And if no-one called Tony Keusgen on it, that's bad too.
I would love to see a real Google office here. Some pretty high-profile Googlers are NZers. Make it happen!
I just sent a message to public-audio replying to Chris Rogers, Chris Pike and Chris Lowis. Fortunately Chris Wilson wasn't involved in the thread, although he could join at any moment.
It reminded me of a Mozilla meeting discussing multi-process video playback, which I attended with Chris Double, Chris Pearce, Chris Jones and Chris Blizzard.
Something is deeply wrong here.