Hit augmented-reality mobile gaming sensation Pokémon GO is now available in the UK, so it’s time to test my hypothesis about searches for 5km converted to miles in that second bastion of “Let’s use miles as distance units in defiance of basically every other country”:
Results are consistent with hypothesis.
(( Now if only I could get around how the Google Play Store is identifying my Z10 as incompatible with the game… ))
People who personalize Firefox like their Firefox better. However, many people don’t know that they can, and for those who know it isn’t particularly easy to do. So a few months ago, we began rethinking our entire add-on discovery experience—from helping people understand the benefits of personalization, to making it easier to install an add-on, to putting the right add-on in front of people at the right time.
The first step we’ve taken towards a better discovery experience is in the redesign of our Add-on Discovery Pane. This is typically the first page users see when they launch the Add-on Manager at about:addons.
We updated this page to target people who are just getting started with add-ons, by simplifying add-on installation to just one click and using clean images and text to quickly orient a new user.
It features a tightly curated list of add-ons that provide customizations that are easy for new users to understand.
We started with a small list and collaborated with their developers to ensure the best possible experience for users. For future releases, we will refresh the featured content on a more frequent basis and open up the nomination process for inclusion.
Our community of developers create awesome add-ons, and we want to help users discover them and love their Firefox even more. In the coming months, we are going to continue improving the experience by making recommendations that are as uniquely helpful to users as possible.
In the meantime, this first step toward improving the Firefox personalization experience will land in Firefox 48 on August 1, and is available in Firefox Beta now. So download Firefox Beta, go to about:addons and give it a try! (You can also reach this page by going to the Tools menu and choosing “Add-ons”). We would love to hear your feedback in the forums.
Today’s the day to celebrate! No more bash scripts running in screen sessions providing dvcs conversion experiences. Woot!!!
I’ll do a historical retrospective in a bit. Right now, it’s time to PARTY!!!!!
The web as we know it basically runs on advertising. Which is not really great, for a variety of reasons. But charging people outright for content doesn't work that great either. How about bitcoin mining instead?
Webpages can already run arbitary computation on your computer, so instead of funding themselves through ads, they could instead include a script that does some mining client-side and submits the results back to their server. Instead of paying with dollars and cents you're effectively paying with electricity and compute cycles. Seems a lot more palatable to me. What do you think?
Performance has always been a key focus for the Servo browser engine project. But just measure the performance through profilers and benchmarks is not enough. The first impression to a real user is the page load time. Although many internal, non-visible optimizations are important, we still want to make sure our page load time is doing well.
Back in April, I opened this bug #10452 to start planning the page load test. With the kind advice from the Servo community and the Treeherder people, we finally settled for a test design similar to the Talos test suite, and decided to use Perfherder for visualization.Test Design
Talos is a performance test suite designed for Gecko, the browser engine for Firefox. It has many different kinds of tests, covering user-level UI testing and benchmarking. But what we really care about is the TP5 page load test suite. As the wiki says, TP5 use Firefox to load 51 scrapped websites selected from the Alexa Top 500 sites of its time. Those sites are hand-picked, then downloaded and cleaned to remove all external web resources. Then these web pages are hosted on a local server to reduce network latency impact.
Each page is tested three times for Servo, then we take the medium of the three. (We should test more times, but it will take too long.) Then all the mediums are averaged using geometric mean. Geometric mean has a great property that even if two test results are of different scale (e.g. 500 ms v.s. 10000 ms), if any one of them changed by 10%, they will have equal impact on the average.Visualization
Talos test results for Gecko have been using Treeherder and Perfherder for a while. The former is a dashboard for test results per commit; the latter is a line plot visualization for the Talos results. With the help from the Treeherder team, we were able to push Servo performance test results to the Perfherder dashboard. I had a blog post on how to do this. You’ll see screenshots for Treeherder and Perfherder in the following sections.Implementation
We created a python test runner to execute the test. To minimize the effect of hardware differences, we run the Vagrant (VirtualBox backend) virtual machine used in Servo’s CI infrastructure. (You can find the Vagrantfile here). The test is scheduled by buildbot and runs every midnight.
The test results are collected into a JSON file, then consumed by the test result uploader script. The uploader script will format the test result, calculate the average and push the data to Treeherder/Perfherder throught the Python clientThe 25% Speedup!
A week before the Mozilla London Workweek, we found a big gap in the Perfherder graph. The average page load time changed from about 2000 ms to 1500 ms on June 10th.
We were very excited about the significant improvement. Perfherder conveniently links to the commits in that build, but there are 26 commits in between.
You should notice that there are many commits by the “bors-servo” bot, who is out automatic CI bot that does the pre-commit testing and auto-merging. Those commits are the merge commits generated when the pull request is merged. Other commits are commits from the contributors branch, so they may appear earlier then the corresponding merge commit. Since we only care when the commit gets merged to the master branch, not when the contributor commits to their own branch, we’ll only bisect the merge commits by bors-servo.
Buildbot provides a convenient web interface for forcing a build on certain commits.
You can simply type the commit has in the “Revision” field and buildbot will checkout that commit, build it and run all the tests.
You can track the progress on the Buildbot waterfall dashboard.
Finally, you’ll be able to see the test result on Treeherder and Perfherder.
In the near future, we’ll focus on improving the framework’s stability to support Servo’s performance optimization endeavor. We’ll also work closely with the Treeherder team to expand the flexibility of Treeherder and Perfherder to support more performance frameworks.
Thanks William Lachance for his help on the Treeherder and Perfherder stuff, and helped me a lot in setting it up on Treeherder staging server. And thanks Lars Bergstrom and Jack Moffit for their advice throughout the planning process. And thanks Adrian Utrilla for contributing many good features to this project.
Havi Hoffman introduces the Mozilla Tech Speakers Series.
In the last two weeks, we landed 173 PRs in the Servo organization’s repositories.
Our overall roadmap is available online and now includes the initial Q3 plans. From now on, we plan to include the quarterly plan with a high-level breakdown in the roadmap page.
This week’s status updates are here.Notable Additions
- xidorn ensured our Rust bindings generator work better with MSVC
- Andrew Mackenzie added keyboard shortcuts to quit
- jdm improved our inlining on some DOM bindings - twice!
- shinglyu added page-break-before/after for Stylo
- stshine fixed the treatment of flex-flow during float calculation
- emilio got our Rust bindings generator building with stable Rust
- emilio also implemented dirtyness tracking for Stylo
- SimonSapin got geckolib building with stable Rust
- aneesh added tests of the download code on our arm32 builder
- cbrewster made network listener runnables cancellable
- imperio added the final infrastructure bits required for video tag metadata support
- izgzhen implemented FileID validity checking for blob URLs
- Steve Melia added basic support for the :active selector
- Aravind Gollakota added origin and same-origin referrer policies, as well as the Referrer-Policy header.
- johannhof switched Servo to use the faster Brotli crate
- manish ensured we don’t panic when <img> fails to parse its src
- cbrewster made Servo on macOS properly handle case-sensitive file systems
- canaltinova implemented the referrer property on the Document object
- Ms2ger implemented the missing Exposed WebIDL annotation
- jdm fixed keyboard input for non-QWERTY layouts
- emilio implemented basic CSS keyframe animation
- notriddle added support for CSS animations using rotation
- Andrew Mackenzie
- Andrew Savchyn
- Aravind Gollakota
- Changwan Hong
- Gabriel Poesia
- Hugh Gallagher
- Jean SIMARD
- Jeena Lee
- Kuba Birecki
- Malisa Smith
- Owen Coutts
- Pierre-Alain Bandinelli
- Steve Melia
- Tshepang Lekhonkhobe
- Xidorn Quan
- Irakli Gozalishvili
- Vincent Sisk
Interested in helping build a web browser? Take a look at our curated list of issues that are good for new contributors!Screenshot
Servo now supports CSS keyframe animations:
The theme of the book is to look in detail at the decisions software engineers make “in the small”. This isn’t about large-scale system design, community management, or working on huge codebases (like, say, Firefox). Nor is it about the design and implementation of “classic” computer science algorithms that a student might learn in school. The focus is in the middle ground: given a single real-world problem, how do we approach solving it and implementing the solution in an elegant, instructive form?
My chapter is on distributed consensus. I chose the topic because I was not already familiar with it, and I felt that I might produce a more instructive result if I experienced the struggles of solving a novel problem first-hand. Indeed, distributed consensus delivered! Building on some basic, published algorithms, I worked to build a practical library to provide distributed state to an application. In the process, I ran into issues from data structure aliasing to livelock (Paxos promises not to reach more than one different decisions. It does not promise to reach more than zero!)
The line limit (500 lines) was an interesting constraint. Many of my attempts to work around fundmantal issues in distributed consensus, such as detecting failed nodes, quickly ran hundreds of lines too long. Where in a professional setting I might have produced a library of many thousands of lines and great complexity. Instead, I produced a simple, instructive implementation with some well-understood limitations.
The entire book is available for reading online, or you can buy a PDF or printed copy. All proceeds go to charity, so please do consider buying, but at any rate please have a look and let me know what you think!
I haven’t yet read the other chapters, aside from a few early drafts. My copy is being printed, and once it arrives I’ll enjoy reading the remainder of the book.