Michael Kaply: The Future of CCK2 |
With the removal of the distribution/bundles directory, as well as multiprocess Firefox, I'm currently rewriting portions of the CCK2 to be more forward compatible.
This involves removing any dependencies on the distribution/bundles directory as well as rewriting the code to no longer use XUL overlays.
As I'm doing this work, it has me wondering; should the CCK2 be a library that you simply pass a config to and it does the work (as it is today), or should the CCK2 Wizard generate a complete AutoConfig.js file that stands alone and can be included with little or no other outside files?
In doing surveys in the past, there are quite a few people that just use AutoConfig. Would it be worthwhile to make the process of generating AutoConfig files easier? Or is this a very small group of people?
What do you think the future should hold for the CCK2?
|
Mozilla Release Management Team: Firefox 38 beta1 to beta2 |
In this second beta, we landed an important number of fixes.
We took changes to enable the suggested tiles in this release. We also uplifted a bunch of changes for the reading list, MSE and EME.
We also uplifted the fixes made for 37.0.1.
Extension | Occurrences |
js | 39 |
java | 37 |
cpp | 34 |
h | 16 |
html | 11 |
py | 10 |
jsm | 9 |
css | 8 |
xml | 6 |
ini | 4 |
build | 4 |
xul | 3 |
mn | 3 |
m4 | 2 |
json | 2 |
in | 2 |
txt | 1 |
svg | 1 |
mozbuild | 1 |
mm | 1 |
list | 1 |
ipdl | 1 |
inc | 1 |
common | 1 |
Module | Occurrences |
browser | 52 |
mobile | 44 |
dom | 29 |
toolkit | 17 |
python | 10 |
media | 8 |
layout | 5 |
js | 5 |
ipc | 5 |
image | 5 |
netwerk | 4 |
build | 3 |
widget | 2 |
testing | 2 |
storage | 2 |
services | 1 |
modules | 1 |
gfx | 1 |
docshell | 1 |
List of changesets:
Ryan VanderMeulen | Backed out changeset b4b774124dee (Bug 1105803) because tests are green without it. a=test-only - c71114667500 |
Ryan VanderMeulen | Backed out changeset 0fa80dee3113 (Bug 1126639) because tests are green without it. a=test-only - 6604edc0f5da |
Mark Hammond | Bug 1149023 - fix errors deleting an already synced readinglist item. r=adw, a=readinglist - 4e05802f6eb4 |
Jared Wein | Bug 1147113 - Filter the article properties in ReaderParent.jsm instead of ReadingList.jsm. r=adw, a=readinglist - 7dded32396ba |
Drew Willcoxon | Bug 1147554 - Lazily create desktop reading list's database connection. r=markh, a=readinglist - acc50d404648 |
Drew Willcoxon | Bug 1147554 - Lazily create desktop reading list's database connection (follow-up: revert erroneous chage). r=me, a=readinglist - 9104d1f928a7 |
Drew Willcoxon | Bug 1149105 - Fix various desktop reading list sync failures, add more logging. r=markh, a=readinglist - 818e63fbfba2 |
Marina Samuel | Bug 1126182: Extract related tiles data from links json and store for later selection. r=adw, a=sylvestre - 83bcf11d00ef |
Marina Samuel | Bug 1126184: Part 1: Make DirectoryLinksProvider listen to PlacesProvider and update its _topSitesWithRelatedLinks cache. r=adw, a=sylvestre - 869ba4681d1b |
Marina Samuel | Bug 1126184: Part 2: Select a single tile to show as the first unpinned tile based on a user's top sites. r=adw, a=sylvestre - 48564fb0e663 |
Marina Samuel | Bug 1126184: Part 3: Mochitest fixes for suggested tiles. r=adw, a=sylvestre - 1a007e477655 |
Marina Samuel | Bug 1126188: Show suggested tile explanation text under a suggested tile. r=adw, a=sylvestre - e9021ea8d7ca |
Marina Samuel | Bug 1126186: Allow users to turn off all tiles that aren't history tiles and update newtab cogmenu wording. r=adw, a=sylvestre - db2b58500934 |
Marina Samuel | Bug 1145410: Return valid results when querying the provider cache while it's empty or being populated. r=adw, a=sylvestre - 56763fc69140 |
Marina Samuel | Bug 1143797 - Allow clicking on suggested explanation text to see overlay explaining the suggested tile. r=adw, a=sylvestre - 65f2aa5f2dd7 |
Marina Samuel | Bug 1143745 - Update the way Firefox reads directoryLinks.json sent from the server for the tiles v3 endpoint. r=adw, a=sylvestre - 745269d59b33 |
Marina Samuel | Bug 1136208 - Change all references of 'related' to 'suggested' r=adw, a=sylvestre - 60f350a6b8b8 |
Ed Lee | Bug 1140496 - Only show a suggested tile url for some number of times or until clicked [r=adw, a=sylvestre] - 4afccec73fb9 |
Ed Lee | Bug 1146249 - Tiles on the newtab page don't wrap properly [r=adw, a=sylvestre] - 6892b485a7e0 |
Marina Samuel | Bug 1146146 - Maximize the number of rows of tiles by reducing the suggested explanation maximum line count to 2 instead of 3 [r=adw, a=sylvestre] - 5fd426f495ff |
Marina Samuel | Bug 1136203 - Remove thumbnail/title replacing functionality for history tiles. r=adw, a=sylvestre - 1d9b014f0414 |
Ed Lee | Bug 1149021 - Suggested tile with just an image shows a thumbnail instead [r=adw, a=sylvestre] - da2535172770 |
Marina Samuel | Bug 1105360: Only enhance tiles that are under the 'enhanced' key. r=adw, a=sylvestre - 311733df5675 |
Marina Samuel | Bug 1149680: Send the Firefox channel on fetch. r=adw, a=sylvestre - 96e8fba7c4c4 |
Marina Samuel | Bug 1149682: Don't cache (or show) sponsored suggested links. r=adw, a=sylvestre - 98144ed917cb |
Ed Lee | Bug 1148862 - Update pref to the new v3 endpoint [r=adw, a=sylvestre] - daf8a9291a9b |
Nick Alexander | Bug 1140810 - Upload material (non-status) Reading List modifications. r=rnewman, a=readinglist - f1c7c471c2d8 |
Richard Newman | Bug 1148432 - Sync reading list deletions. r=nalexander, a=readinglist - c27964aaa4c5 |
Nick Alexander | Bug 1147473 - Expose Firefox Account debug information from Settings activity. r=rnewman, a=readinglist - ac9b83aca21f |
Nick Alexander | Bug 1142596 - Use cached FxA OAuth tokens in Reading List sync. r=rnewman, a=readinglist - 0aedf96a7cdc |
Nick Alexander | Bug 1148504 - Protect Firefox Account state with a critical section. r=rnewman, a=readinglist - 32b6b2c4a69e |
Richard Newman | Bug 1147473 - Follow-up: move ReadingListConstants to avoid build flag pain., a=readinglist - c5baf4b4a350 |
Nick Alexander | Bug 1148029 - Disable Reading List sync when using custom endpoints. r=rnewman, a=readinglist - ec6516ecdd71 |
Nick Alexander | Bug 1140812 - React to Backoff and Retry-After headers from Reading List storage servers. r=rnewman, a=readinglist - dff4ad268667 |
Nick Alexander | Bug 1140813 - Schedule periodic Reading List syncs. r=rnewman, a=readinglist - 27f61020a9e4 |
Sebastian Kaspari | Bug 1143280 - DateTimePicker: Replace deprecated DateFormat constants with local constants. r=rnewman, a=sylvestre - 14eb337e419a |
Sebastian Kaspari | Bug 1143280 - SearchBar: Suppress deprecation warnings in constructor to allow building with API level 22. r=rnewman, a=sylvestre - f546eff14959 |
Jeff Muizelaar | Bug 1137716 - Fix driver version typo. a=lmandel - 25d2e5abebec |
Milan Sreckovic | Bug 1149761 - Don't MOZ_CRASH if WARP fails. r=bas, a=lmandel - cf2036567077 |
Bas Schouten | Bug 1149864 - Do not attempt to create any D3D11 device when safemode is turned on. r=jrmuizel, a=sledru - c4e7a4be6f63 |
Patrick McManus | Bug 1148328 - Disable alt-svc. r=dveditz, a=lmandel - d7bbef9132a4 |
Randell Jesup | Bug 1147857 - Be careful about WebRTC stats query creation. r=jib, a=lmandel - 2c5d97fcb993 |
Randell Jesup | Bug 1147857 - Followup patch to continue BuildStats cleanup. r=jib, a=lmandel - 108255910fbf |
Ryan VanderMeulen | Bug 1026815 - Disable test_bug565388.xul on Linux and OSX for frequent failures. a=test-only - 85c87a6f453f |
L. David Baron | Bug 1123979 - Annotate known intermittent assertion on crashtest. a=test-only - 231768361c8b |
Mark Banner | Bug 1139586 - Attempt to fix intermittent failures in Loop's Marionette unit tests by extending the timeout. r=mikedeboer, a=test-only - d30e64ad7e1f |
Neil Deakin | Bug 822298 - Window isn't focused so spellchecking doesn't happen, use waitForFocus first. a=test-only - fdb4e8b3eedb |
Martijn Wargers | Bug 1148405 - Intermittent Mulet test_garbage_at_end_of_declarations.html,test_value_storage.html. r=smaug, a=test-only - 09687ee1bf7e |
Neil Deakin | Bug 1121671 - See if using the TabSwitchDone event will work. a=test-only - 3f7826efc5de |
Tim Taubert | Bug 1016312 - Fix intermittent browser_fullscreen-window-open.js failures by removing arbitrary timeouts. r=jaws, a=test-only - e98a992238e2 |
Patrick Brosset | Bug 1137771 - Intermittent browser_animation_play_pause_button.js. r=miker, a=test-only - b228af82453b |
Neil Deakin | Bug 1150038 - Add a waitForFocus to this test. a=test-only - cf89394816b1 |
Jon Coppeard | Bug 1149997 - Add v8-v5/check-raytrace.js test to expected CGC timeouts list. r=terrence, a=test-only - cc9ac7031506 |
Tim Taubert | Bug 1120748 - Split browser_ssl_error_reports.js into multiple tasks. r=felipe, a=test-only - b9d2266daf60 |
Tim Taubert | Bug 1120748 - Ensure the progress listener created by createNetworkErrorMessagePromise() isn't GCed too early. r=felipe, a=test-only - 9c755cdc241c |
Ryan VanderMeulen | Backed out changeset 3f7826efc5de (Bug 1121671) for test failures. - ffb13ef5ff0a |
Chris Pearce | Bug 1146201 - Delay navigator.requestMediaKeySystemAccess if CDM not downloaded yet or needs update. r=jwwang,ehsan a=sylvestre - b7e7470e83b3 |
Chris Pearce | Bug 1146201 - Initiate check for GMP updates when JS requests CDM and we haven't installed it yet. r=spohl a=sylvestre - 9383010b69fe |
Chris Pearce | Bug 1146201 - Remove "we can't play EME because..." notifications when we successfully play EME. r=gijs a=sylvestre - 7a04aad0ab5d |
Chris Pearce | Bug 1146201 - Use message manager instead of observer service in GMPWrapper. r=markh a=sylvestre - c481e8a84a6c |
Philip Chee | Bug 1142997 - Cannot Print from Composer and other |
Hector Zhao | Bug 1146869 - Make AM_PATH_{NSPR,NSS} compatible with input version in the form of major.minor. r=glandium, a=NPOTB - 0fce0415d8b4 |
Matt Woodrow | Bug 1138260 - Add typed Microseconds class and use it for the range removal algorithm. r=jya, r=kinetik, a=sledru - 67259acf0c1e |
Alessio Placitelli | Bug 1138323 - Use https instead of http in Heartbeat's browser.selfsupport.url. r=ttaubert, a=sledru - bfe014dd05ef |
Alessio Placitelli | Bug 1137481 - Adjust the Heartbeat UI and add a Learn More link. r=MattN, a=sledru - 94de32e773b8 |
Deepak Koli | Bug 1039540 - In-content preferences: Disable the sorting of rows of sub-dialogs when right clicking. r=MattN, a=sledru - a9d533ac9ff4 |
Jed Davis | Bug 1146116 - Clone File objects passed to mozSetFileArray into receiver's global. r=sicking, a=sledru - d3e9b16fc53f |
Seth Fowler | Bug 1148684 - Compact SourceBuffer even if it contains only one chunk. r=tn, a=sledru - ca8eaf3366e5 |
Seth Fowler | Bug 1148682 - Handle content length correctly for moz-icon channels. r=tn, a=sledru - 5f5a4c5a7e02 |
Nils Ohlmeier [:drno] | Bug 1148572 - Improve H264 renegotiation handling. r=jesup, a=sledru - 8d84399a000b |
Boris Zbarsky | Bug 1148973 - When skipping shape guards in Ion common getter/setter code because the object has a non-configurable property, first verify that its current shape matches the shape we're using to compile our code. r=jandem, a=sledru - d6ec30c02b8d |
Andrea Marchesini | Bug 1148032 - BroadcastChannel API should not bypass private browsing mode. r=ehsan, a=sledru - 125623fcc804 |
Michael Comella | Bug 1132751 - Remove redundant ActionBar home setting. r=liuche, a=sledru - 8be55cae236f |
Michael Comella | Bug 1132751 - Add android:logo to fennec application. r=liuche, a=sledru - b28b502e4aca |
Mark Hammond | Bug 1146346 - Fix sync login when master-password was unlocked by something other than sync. r=ckarlof, a=sledru - edf4fa83d569 |
Vladan Djeric | Bug 1149746 - Update expiry dates for probes that measure Telemetry health. r=rvitillo, a=sledru - dad86e3e53cd |
Matthew Gregan | Bug 1134977 - Release IAudioStreamVolume when closing WASAPI stream. Refixes Bug 1109802. r=padenot, a=sledru - 8348e6654b30 |
Vladan Djeric | Bug 1150230 - Add reading-list.sqlite and about:home indexedDB to SlowSQL whitelist. r=Yoric, a=sledru - 88b4ec69e42f |
Margaret Leibovic | Bug 1147597. r=gavin, a=sledru - e4566e5991e8 |
Joel Maher | Bug 1139328 - update talos to latest version for preferences and e10s fixes. r=wlach, a=test-only - 0ed266400af5 |
Nick Alexander | Bug 1149226 - Initialize Reading List authority after upgrade. r=rnewman, a=sylvestre - 4d02b020a319 |
Robert Strong | Bug 1083653 - Fix intermittent failure for marStageSuccessPartialSvc.js and marStageFailurePartialSvc.js. r=spohl, a=test-only - e2efc8489eba |
Justin Dolske | Bug 1142298 - Fix reader view font/color control glitches. r=gijs, a=sledru - c0496dd61e60 |
Vaibhav Pradeep Bhosale | Bug 1135009 - Printing in reader mode cuts off on the left (sidebar overlays text). r=Margaret, a=sledru - a1214cc8c57e |
Markus Jaritz | Bug 1139174 - Use Georgia and Helvetica/Arial as Reader View Fonts until Fira and Charis land. r=margaret, r=dolske, a=sledru - 079e210207b9 |
Jared Wein | Bug 1135589 - Make the focusring match the visible borders of the buttons in reader mode. r=florian, a=sledru - fd67405ba1de |
Margaret Leibovic | Bug 1147122 - Restore reader view error message if about:reader fails when user clicks reader button. r=Gijs, a=sledru - a2a4bbc864ad |
Margaret Leibovic | Bug 1146373 - Don't resize reader view images in JS. r=Gijs, a=sledru - 180f3c3634e3 |
Blake Winton | Bug 1147889 - Transition background and text color in Reading Mode. ui-r=mmaslaney, r=Unfocused, a=sledru - 3e828a466ece |
Mark Capella | Bug 1134446 - Automatically open the ReadingList sidebar the first time ReaderMode is used. r=unfocused, a=sledru - 887be7f12f1e |
vivek | Bug 1142528 - Decrease tappable area for +/- buttons. r=margaret, a=sledru - 7d883361e554 |
Blake Winton | Bug 1145809 - Add the reading mode footer. ui-r=mmaslaney, r=Unfocused, a=sledru - 537b5f078296 |
Ben Turner | Bug 1071360 - Fix async storage connection closing when open fails. r=asuth, a=sledru - 0e9a4f42d12a |
Ben Turner | Bug 1112620 - Fix invalidated version change transactions. r=khuey, a=sledru - f8e17839eac9 |
Blake Winton | Bug 1148050 - Make Reader View type panel look closer to the spec. ui-r=mmaslaney, r=Unfocused, a=sledru - 7b6bd63b68e5 |
Abhinav Koppula | Bug 1132656 - Reader mode toolbar overlaps content if window becomes too narrow. r=jaws, a=sledru - b8343ae0a9dc |
Blake Winton | Bug 1149277 - Increase the Line-Height in Reader View from 1.44 em to 1.6 em. ui-r=mmaslaney, r=Unfocused, a=sledru - 30be2924717b |
Jeff Muizelaar | Bug 1150124 - Move WARP reporter closer to actually testing WARP. r=Bas, a=sledru - e749a39aaf5c |
Divjot Singh | Bug 1139026 - Use white background-color & inverted color for selected area. r=margaret, a=sledru - 2ff89ac6dc8d |
J. Ryan Stinnett | Bug 1149778 - Lazify simulator startup to allow ADB init. r=ochameau, a=sledru - ecf15768ec50 |
Gijs Kruitbosch | Bug 1150476 - Fix silly typo in list styles. a=sledru - 3d380257da88 |
Tim Nguyen | Bug 1138630 - Switch the desktop update badge to an SVG image. r=Gijs, a=sledru - 33496825c683 |
Blake Winton | Bug 1137211 - Move the click handler to the document so we can click on the margins. ui-r=phlsa, r=margaret, r=jaws, a=sledru - d69e01ecebe0 |
Jared Wein | Bug 1148462 - When "Reading List" is disabled (browser.readinglist.enabled = false) CTRL+ALT+R should not open its sidebar. r=gijs, a=gavin - 6238a894c78f |
Jared Wein | Bug 1146773 - Unify the code paths for adding an item to the reading list (location bar + reader mode). r=margaret, a=sledru - f7d65dc9093b |
Byron Campen [:bwc] | Bug 1147919 - Part 1: Make sure content gets an error callback when it does not use a fingerprint algorithm we support. r=drno, a=sledru - 38cb0f4d54e8 |
Byron Campen [:bwc] | Bug 1147919 - Part 2: Lowercase fingerprint alg before comparing. r=drno, a=sledru - a606f164b2a7 |
Blake Winton | Bug 1147440 - Add a transition to the readinglist-addremove-button. ui-r=mmaslaney, r=jaws, a=sledru - 05f716c8608d |
Blake Winton | Bug 1147444 - Add a transition when deleting an item from the Reading List. ui-r=mmaslaney, r=Unfocused, a=sledru - b42a539dcc29 |
Blake Winton | Bug 1147479 - Add a transition for adding items to the reading list. ui-r=mmaslaney, r=Unfocused, a=sledru - 088cbfb10079 |
Mike Hommey | Bug 1147760 - In mozpack.files.FileCopier.copy, remove files after copying. r=gps, a=sledru - 2bc3aac3094b |
Mike Hommey | Bug 1147723 - Avoid non TEST_PASS/TEST_UNEXPECTED_FAIL output from test_files.py. r=gps, a=test-only - 882dd82e8af0 |
Mike Hommey | Bug 910660 - Refactor test_packager_formats.py so that it's easier to follow. r=gps, a=sledru - a141c675b405 |
Mike Hommey | Bug 910660 - Add a test for the unpacker code. r=gps, a=sledru - 06cd1b5deb25 |
Mike Hommey | Bug 910660 - Make package formatters handle addons. r=gps, a=sledru - 90925932c88c |
Mike Hommey | Bug 910660 - Make the SimplePackager emit a separate base for addons. r=gps, a=sledru - f4f4979e09b2 |
Ralph Giles | Bug 1133862 - Remove MSE debug User Agent string. r=mconley, a=sledru - f9441895096d |
Patrick McManus | Bug 1141775 - One wifi monitor thread. r=hurley, a=sledru - ce2f9cedb975 |
Milan Sreckovic | Bug 1149954 - Only Skia canvases need be considered for acceleration. Carry r=jmuizelaar from Bug 1124249, a=sledru - b4e6da60e6d4 |
Robert Kaiser | Bug 1084258 - Language pack compatibility should be bound to Gecko branch, else undefined entity errors possible. r=glandium, a=sledru - 8c5c12705b50 |
Cameron McCormack | Bug 1149542 - Part 1: Return early from SVG text layout if we discover mPositions is not long enough. r=dholbert, a=abillings - 984f9cdef799 |
Cameron McCormack | Bug 1149542 - Part 2: Track undisplayed characters before empty text frames properly. r=dholbert, a=abillings - 32d78bac2cfa |
Jeff Muizelaar | Bug 1137716 - Increase the list of devices that are blocked. a=sledru - 499e1c563939 |
http://release.mozilla.org/statistics/38/2015/04/07/fx-38-b1-to-b2.html
|
Mozilla Science Lab: Announcing our global sprint 2015 |
Join us as we collaborate on projects helping further science on the open web! We’re back with our second global sprint June 4-5, 2015. We could use your help to make this year’s event bigger and better than last.
Our inaugural sprint last July (#mozsprint, for short) brought together over 100 members of the community, from librarians to developers to bench scientists to hack for two-days on open science projects. Over 22 cities around the world were represented (53 hours of consecutive hacking!), and we need your help to do it again this June.
We’ve just opened our call for project ideas and site host (you’re welcome to sign up for both!):
You can read about all of the projects last year here in our wrap up and hear from one of our participants here.
Interested? Head on over to our planning etherpad and add your details, or drop us a note at sciencelab@mozillafoundation.org. We hope you’ll come and collaborate with us as we help research thrive on the open web.
http://mozillascience.org/announcing-our-global-sprint-2015/
|
Laura Hilliger: Open Fluency |
What do we need to cognitively understand? What behaviors do we need to model? How do we unite with one another locally and globally?I have some theories on specific competencies a leader needs to be considered “fluent” in open source and participatory learning. I’ve indicated possibilities in the above graphic [edit note: the smaller text are just notes of topics that might be contained under the competencies). The Web Literacy Map Doug Belshaw and the Mozilla community created is extremely relevant in this work, which is why this post is using the word “fluency” – to indicate the relationship between the map and this lens on it. It feels like leadership in our context requires fluency in specific competencies - the highlighted ones on the web literacy map above. There is a lot of content for professional development around teaching Web Literacy. I’m working on collecting resources for an upcoming conceptual and complete remix of what was Webmaker Training (and before that the original Teach the Web MOOC). Last week in a team call, we talked about my first attempt to use blunt force in getting the Web Literacy Map to cover skills and competencies I think are part of the “Teach Like Mozilla” offering at Mozilla. I made the below graphic, trying to work out the stuff in my brain (it helps me think when I can SEE things), and I immediately knew I was forcing a square peg into a round hole. I’m including it so you can see the evolution of the thinking behind the above graphic:
|
Byron Jones: happy bmo push day! |
the following changes have been pushed to bugzilla.mozilla.org:
discuss these changes on mozilla.tools.bmo.
https://globau.wordpress.com/2015/04/07/happy-bmo-push-day-135/
|
Raniere Silva: Hacking Gecko or 1011020 |
For some time now I want to be able to contribute to native support of MathML at Gecko but
Fr'ed'eric recommended that I start with Bug 1011020 because shouldn’t be very hard to fix this bug. So I decided to give it a try.
|
Mike Hommey: Announcing git-cinnabar 0.2.0 |
Git-cinnabar is a git remote helper to interact with mercurial repositories. It allows to clone, pull and push from/to mercurial remote repositories, using git.
git cinnabar git2hg
and git cinnabar hg2git
commands that allow to translate (possibly abbreviated) git sha1s to mercurial sha1s and vice-versa.If you want to follow the improvements more closely, I encourage you to switch to the `next` branch. I won’t push anything there that hasn’t been extensively tested on the above mentioned repositories.
And as always, please report any issue you run into.
|
Justin Wood: Find our footing on python best practices, of yesteryear. |
In the beginning there was fire buildbot. This was Wed, 13 Feb 2008 for the first commit in the repository buildbot-configs.
For context, at this time:
(CC BY-SA 3.0) via wikipedia
In picking buildbot as our tool we were improving vastly on the decade old technology we had at the time (tinderbox) which was also written in oft-confusing and not-as-shiny perl (we love to hate it now, but it was a good language) [see relevant: image of then-new cutting edge technology but strung together in clunky ways]
As such, we at Mozilla Release Engineering, while just starting to realize the benefits of CI for tests in our main products (like Firefox), were not accustomed to it.
We were writing our buildbot-related code in 3 main repositories at the time (buildbot-configs, buildbotcustom, and tools) all of which we still use today.
Fast forward 5 years and you would have seen a some common antipatterns in large codebases… (over 203k lines of code! ) It was hard to even read most code, let alone hack on it. Each patch was requiring lots of headspace. And we would consistently break things with patches that were not well tested. (even when we tried)
It was at a workweek here in 2013 that catlee got our group agreement on trying to improve that situation by continually running autopep8 over the codebase until there was no (or few) changes with each pass.
Thus began our first, attempt, at bringing our processes to what we call our modern practices.
This reduced, in buildbotcustom and tools alone our pep8 error rate from ~7,139 to ~1,999. (In contrast our current rate for those two repos is ~1485).
(NOTE: This is a good contributor piece, to drive pep8 errors/warnings down to 0 for any of our repos, such as these. We can then make our current tests fail if pep8 fails. Though newer repos started with pep8 compliance, older ones did not. See List of Repositories to pick some if you want to try. — Its not glorious work, but makes everyone more productive once its done.)
The one agreement we decided where pep8 wasn’t for us was line length, we have had many cases where a single line (or even url) barely fits in 80 characters for legit reasons, and felt that arbitrarily limiting variable names or depth just to satisfy that restriction was going to reduce readability. Therefore we generally use –max-line-length of ~159 when validating against pep8. (The above numbers do not account for –max-line-length)
Around this time we had also setup an internal only jenkins instance as a test for validating at least pep8 and its trends, we have since found jenkins to not be suitable for what we wanted.
Stay tuned to this blog for more history and how we arrived at some best practices that most don’t take for granted these days.
|
James Long: Stop Trying to Catch Me |
I'm probably going to regret this, but this post is about promises. There are a few details that I'd like to spell out so I can point people to this post instead of repeating myself. This is not a hyperbolic post like Radical Statements about the Mobile Web, which I sort of regret posting. In that post I was just yelling from a mountaintop, which isn't very helpful.
I humbly submit these points as reasons why I don't like promises, with full realization that the ship has sailed and nothing is going to change.
First, let's talk about try
/catch
. The problem with exception handling in JavaScript is that it's too aggresive. Consider the following code:
try {
var result = foo(getValue());
}
catch(e) {
// handle error from `foo`
}
We've accidentally captured the getValue()
expression within this handler, so any error within getValue
is captured. This is how exceptions work, of course, but it's made worse in JavaScript because a simple typo becomes an exception.
Exceptions are meant to be just that, exceptional. In most other languages, many typo-style errors are caught at compile-time, even in dynamic languages like Clojure. But in JavaScript, with the above code, if I was happily hacking away within getValue
and I typed fucn()
instead of func()
, it gets caught and treated as an exception here.
I don't like how easy it is to get tripped up try
/catch
. We could turn the above code into this:
try {
var result = foo(getValue());
}
catch(e) {
if(e instanceof FooError) {
// handle error from `foo`
return;
}
throw e;
}
Not only is this a ton of boilerplate, but it breaks an important feature of JavaScript debuggers: break on exception. If you have break on exception enabled, and you make an error inside getValue
, it now pauses on the throw
in the above code instead of inside getValue
where you actually made the mistake.
So it's crazy to me that promises want to apply this behavior to async code and wrap everything in a try
/catch
. Break on exception is permanently broken now, and we have to go through all sorts of contortions and backflips to get back to reasonable debugging environment. All because it wraps code in try
/catch
by default.
I don't care about awkward .then()
syntax. I don't mind automatic error propagation. I don't care having to call .done()
on a promise chain. I don't care about losing the stack (which is inherent in any async work).
I care that promises grab all errors, just like try
/catch
. The cost of a simple typo is greatly magnified. When you do async work in most other systems, you deal with errors pertaining to your async call. If I make an HTTP request, I want the network error to automatically bubble up the promise chain. I don't want anything unrelated to the async work to bubble up. I don't care about it.
I should be able to reject a promise with an error, and it bubbles up. But I want to make stupid typo errors and have them appear as normal errors, not caught by promises. Don't run everything in try
/catch
.
async
/await
ES7 proposes async functions for doing async work. A lot of people are extremely excited about it, and honestly I don't get the excitement. Async functions are only pretty generators with promises:
var asyncFunction = Task(function*() {
var result = yield fetch(url);
return process(result);
}):
fetch
returns a promise. With async functions, it would look like this:
async function asyncFunction() {
var result = await fetch(url);
return process(result);
}
Ok, so that is nicer, and asyncFunction
is hoisted (I think) like a normal function would be. It's cool, I just don't understand why everyone is so excited about a simple syntactic improvement.
Especially when we still have all the problems with promises. For example, some top-level promise code now looks like:
async function run() {
console.log(await asyncFunction());
}
run();
A newbie to JavaScript will write that code, and be totally bewildered when nothing happens. They have no idea that they made a typo in asyncFunction
, and it takes them a while to learn that run
actually returns a promise.
Here a few ideas I have:
run
to mark itself as a top-level function somehow that automatically throws errorsOk, so that's really just one idea. Native async
/await
syntax could potentitally help here, if we are willing to think outside of promises.
We are discussing error handling within the js-csp project, which implements go-style channels. Most likely we are going to propogate errors, but only ones that comes down channels. I've been trying this out for a while and I love it.
I'm not going to spend time here convincing you to use js-csp, I just wanted to offer a solution instead of just complaining.
Hopefully I explained this well. I don't expect anything to change. I think my idea about async/await is pretty cool, so I hope someone looks into it.
|
Anthony Hughes: Ninety Days with DOM |
Last quarter marked a fairly significant change in my career at Mozilla. I spent most of the quarter adjusting to multiple re-orgs which left me as the sole QA engineer on the DOM team. Fortunately, as the quarter wraps up I feel like I’ve begun to adjust to my new role and started to make an impact.
My main objective this quarter was to improve the flow of DOM bugs in Bugzilla by developing and documenting some QA processes. A big part of that work was determining how I was going to measure impact, and so I decided the most simple way to do that was to take the queries I was going to be working with and plot the data into Google docs.
The solution was fairly primitive and lacked the ability to feed into a dashboard in any meaningful way, but as a proof of concept it was good enough. I established a baseline using the week-by-week numbers going back a couple of years. What follows is a crude representation of these figures and how the first quarter of 2015 compares to the now three years of history I’ve recorded.
Volume of unresolved Regressions & Crashes
Regressions +55%, Crashes +188% since 2012
Year-over-Year trend in Regressions and Crashes
Regressions +9%, Crashes +68% compared to same time last year.
Regressions and Crashes in First Quarters
Regressions -0.6%, Crashes +19% compared to previous 1st Quarters
Resolution Rate of Regressions and Crashes
90% of Regressions resolved (+2.5%), 80% of Crashes resolved (-7.0%)
Change in Resolution Rate compared to total Volume
Regression resolution +2.5%, Crash resolution -6.9%, Total volume +68%
I know that’s a lot of data to digest but I believe they show embedding QA with the DOM team is having some initial success.
It’s important to acknowledge the DOM team for maintaining a very high resolution rate (90% for regressions, 80% for crashes) in the face of aggressive gains in total bug volume (68% in three years). They have done this largely on their own with minimal assistance from QA over the years, giving us a solid foundation from which we could build.
For DOM regressions I focused on making existing bug reports actionable with less focus on filing new regression bugs; this has been a two part effort. The first being focused on finding regression windows for known regression bugs, the second being focused on converting unconfirmed bugs into actionable regression reports. I believe this is why we see a marginal increase in the regression resolution rate (+0.4% last quarter).
For DOM crashes I focused on filing previously unreported crashes (basically anything above a 1% report threshold). Naturally this has led to an increase in reports but has also led to some crashes being fixed that wouldn’t have been otherwise. Overall the crash resolution rate declined by 2.6% last quarter but I believe this should ultimately lead to a more stable product in the future.
The final chart below plots the age of unresolved DOM bugs week over week which currently sits at 542 days; an increase of 4.8% this past quarter and 241% since January 1, 2012. I include it here not as a visualization of impact but as a general curiosity.
Median Age of Unresolved DOM Bugs
Median age is 542 days, +4.8% last quarter, +241% since 2012
I have not yet figured out what this means in terms of overall quality or whether it’s something we need to address. I suspect recently reported bugs tend to get fixed sooner since they tend to be more immediately visible than older bugs. A fact that is likely common to most, if not all components in Bugzilla. It might be interesting to see how this breaks down in terms of the age of the bugs being fixed.
My plan for the second quarter is to identify a subset of these to take outside of Google Docs and convert into a proof of concept dashboard. I’m hoping my peers on the DOM team can help me identify at least a couple that would be both interesting and useful. If it works out, I’d like to aim for expanding this to more Bugzilla components later in the year so more people can benefit.
If you share my interest and have any insights please leave a comment below.
As always, thank you for reading.
[UPDATE: I decided to quickly mock up a chart showing the age breakdown of bugs fixed this past quarter. As you can see below, younger bugs account for a much greater proportion of the bugs being fixed, perhaps expectedly.]
|
Niko Matsakis: Modeling graphs in Rust using vector indices |
After reading nrc’s blog post about graphs, I felt inspired to
write up an alternative way to code graphs in Rust, based on vectors
and indicates. This encoding has certain advantages over using Rc
and RefCell
; in particular, I think it’s a closer fit to Rust’s
ownership model. (Of course, it has disadvantages too.)
I’m going to describe a simplified version of the strategy that rustc uses internally. The actual code in Rustc is written in a somewhat dated “Rust dialect”. I’ve also put the sources to this blog post in their own GitHub repository. At some point, presumably when I come up with a snazzy name, I’ll probably put an extended version of this library up on crates.io. Anyway, the code I cover in this blog post is pared down to the bare essentials, and so it doesn’t support (e.g.) enumerating incoming edges to a node, or attach arbitrary data to nodes/edges, etc. It would be easy to extend it to support that sort of thing, however.
The high-level idea is that we will represent a “pointer” to a node or
edge using an index. A graph consists of a vector of nodes and a
vector of edges (much like the mathematical description G=(V,E)
that
you often see):
1 2 3 4 |
|
Each node is identified by an index. In this version, indices are just
plain usize
values. In the real code, I prefer a struct wrapper just
to give a bit more type safety.
1 2 3 4 5 |
|
Each node just contains an optional edge index, which is the start of a linked list of outgoing edges. Each edge is described by the following structure:
1 2 3 4 5 6 |
|
As you can see, an edge contains a target node index and an optional index for the next outgoing edge. All edges in a particular linked list share the same source, which is implicit. Thus there is a linked list of outgoing edges for each node that begins in the node data for the source and is threaded through each of the edge datas.
The entire structure is shown in this diagram, which depicts a simple
example graph and the various data structures. Node indices are
indicated by a number like N3
and edge indices by a number like
E2
. The fields of each NodeData
and EdgeData
are shown.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Writing methods to grow the graph is pretty straightforward. For example, here is the routine to add a new node:
1 2 3 4 5 6 7 |
|
This routine will add an edge between two nodes (for simplicity, we don’t bother to check for duplicates):
1 2 3 4 5 6 7 8 9 10 11 |
|
Finally, we can write an iterator to enumerate the successors of a given node, which just walks down the linked list:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
This approach plays very well to Rust’s strengths. This is because,
unlike an Rc
pointer, an index alone is not enough to mutate the
graph: you must use one of the &mut self
methods in the graph. This
means that can track the mutability of the graph as a whole in the
same way that it tracks the mutability of any other data structure.
As a consequence, graphs implemented this way can easily be sent
between threads and used in data-parallel code (any graph shared
across multiple threads will be temporarily frozen while the threads
are active). Similarly, you are statically prevented from modifying
the graph while iterating over it, which is often desirable. If we
were to use Rc
nodes with RefCell
, this would not be possible –
we’d need locks, which feels like overkill.
Another advantage of this apprach over the Rc
approach is
efficiency: the overall data structure is very compact. There is no
need for a separate allocation for every node, for example (since they
are just pushes into a vector, additions to the graph are O(1),
amortized). In fact, many C libaries that manipulate graphs also use
indices, for this very reason.
The primary disadvantage comes about if you try to remove things from the graph. The problem then is that you must make a choice: either you reuse the node/edge indices, perhaps by keeping a free list, or else you leave a placeholder. The former approach leaves you vulnerable to “dangling indices”, and the latter is a kind of leak. This is basically exactly analogous to malloc/free. Another similar problem arises if you use the index from one graph with another graph (you can mitigate that with fancy type tricks, but in my experience it’s not really worth the trouble).
However, there are some important qualifiers here:
Basically I find that this is a theoretical problem but for many use cases, it’s not a practical one.
The big exception would be if a long-lived graph is the heart of your
application. In that case, I’d probably go with a Rc
(or maybe
Arc
) based approach, or perhaps even a hybrid – that is, use
indices as I’ve shown here, but reference count the indices too. This
would preserve the data-parallel advantages.
The key insights in this approach are:
|
Air Mozilla: Mozilla Weekly Project Meeting |
The Monday Project Meeting
https://air.mozilla.org/mozilla-weekly-project-meeting-20150406/
|
Mozilla Science Lab: Mozilla Science Lab Week in Review, March 30 – April 5 |
The Week in Review is our weekly roundup of what’s new in open science from the past week. If you have news or announcements you’d like passed on to the community, be sure to share on Twitter with @mozillascience and @billdoesphysics, or join our mailing list and get in touch there.
http://mozillascience.org/mozilla-science-lab-week-in-review-march-30-april-5/
|
Mozilla Reps Community: Rep of the month – March 2015 |
Hello Fellow Reps,
Join me in welcoming our two new Reps of the Month for March, Ibrahima SARR and Faisal Aziz for their inspiring contributions to the Reps program.
A long term mozillian and Fulah localization team lead, a SUMO and KB l10n contributor, Ibrahima has created most of Fulah Internet and IT terminology from scratch.
“Our biggest achievement yet is the localization of Firefox in Fulah which was released in summer (2012).”
Supporting Web Literacy Map he believes in the idea of redefining the curriculum to include practical learning and making. Follow his posts.
Ibrahima was a part of the incredible team of Reps present at Mobile World Congress (MWC) 2015. Ibrahima Sarr, Alex Mayorga and Francisco Picollini did a great job by presenting hundreds of Firefox OS demos to attendees at MWC 2015. Congratulations to all the team and specially to Ibrahima who did an exceptional job at reporting the event in social media! More about MWC.
Faisal, is an inspiring mentor to many Reps and fellow mozillians in India and has proven his mettle in many projects across mozilla universe. A proud open source activist & preacher, he has been helping communities like Bhopal, Indore, Warangal and Mumbai in India to flourish. He actively contributes to number of Mozilla projects and is Locale lead for “Ur” language.
He recently organized annual event MozConnect Part1 and Part2 in central India to bring different sub communities under one roof.
Faisal is an integral part of Leadership at Mozilla India and an inspiration to many in his local community. Follow his posts.
Thank you Ibrahima and Faisal for your amazing work.
The best of the Reps program is reflected in your accomplishments and leadership.
Cheers!
Don’t forget to congratulate them on Discourse!
https://blog.mozilla.org/mozillareps/2015/04/06/rep-of-the-month-march-2015/
|
Mark Surman: Looking for smart MBA-ish person |
Over the next six months, I need to write up an initial design for Mozilla Academy (or whatever we call it). The idea: create a global classroom and lab for the citizens of the web, using Mozilla’s existing community and learning programs as a foundation. Ultimately, this is about empowerment — but we also want to build something as impactful as Firefox. So, whatever we need to do needs to really make sense as a large scale philanthropy play, a viable business or both.
I’m looking for a MBA-ish (or MPA-ish) type person to work closely with me and others across Mozilla as part of this design process. It’s someone who wants to:
The role is: a right hand person to work with me and the Mozilla community to together an initial Mozilla Academy design and business plan. This could be someone early in their career looking to make a mark. Or someone senior in a career transition looking to pitch in on something big. It’s a full time contract roll for approx 6 months.
If we are successful, we will have put the blueprints together for a global classroom and lab for the citizens of the Web, that can scale to tens of millions of people, with a robust business model. This is a project for the ambitious!
If you think you are this person, please send an email to Phia
https://commonspace.wordpress.com/2015/04/04/looking-for-smart-mba-ish-person/
|
Mike Conley: Things I’ve Learned This Week (March 30 – April 3, 2015) |
This is my second post in a weekly series, where I attempt to distill my week down into some lessons or facts that I’ve picked up. Let’s get to it!
As of March 27, 2015, ES6 classes are still not yet safe for use in production browser code. There’s code to support them in Firefox, but they’re Nightly-only behind a build-time pref.
Array.prototype.includes and ArrayBuffer.transfer are also Nightly only at this time.
However, any of the rest of the ES6 Harmony work currently implemented by Nightly is fair-game for use, according to jorendorff. The JS team is also working on a Wiki page to tell us Firefox developers what ES6 stuff is safe for use and what is not.
According to mstange, it is possible to get profiles from hung Firefox processes using lldb1.
p (void)mozilla_sampler_save_profile_to_file("somepath/profile.txt")
python symbolicate_profile.py somepath/profile.txt
To graft symbols into the profile. mstange’s scripts do some fairly clever things to get those symbols – if your Firefox was built by Mozilla, then it will retrieve the symbols from the Mozilla symbol server. If you built Firefox yourself, it will attempt to use some cleverness3 to grab the symbols from your binary.
Your profile will now, hopefully, be updated with symbols.
Then, load up Cleopatra, and upload the profile.
I haven’t yet had the opportunity to try this, but I hope to next week. I’d be eager to hear people’s experience giving this a go – it might be a great tool in determining what’s going on in Firefox when it’s hung4!
I noticed that when I talked about “things that I passed to functions5”, I would use “arguments” and “parameters” interchangeably. I recently learned that there is more to those terms than I had originally thought.
According to this MSDN article, an argument is what is passed in to a function by a caller. To the function, it has received parameters. It’s like two sides of a coin. Or, as the article puts it, like cars and parking spaces:
You can think of the parameter as a parking space and the argument as an automobile. Just as different automobiles can park in a parking space at different times, the calling code can pass a different argument to the same parameter every time that it calls the procedure.6
Not that it really makes much difference, but I like knowing the details.
http://mikeconley.ca/blog/2015/04/04/things-ive-learned-this-week-march-30-april-3-2015/
|
Monty Montgomery: libvpx 1.4.0 ("Indian Runner Duck") officially released |
Johann Koenig just posted that the long awaited libvpx 1.4.0 is officially released.
"Much like the Indian Runner Duck, the theme of this release is less bugs, less bloat and more speed...."
|
Mozilla Open Policy & Advocacy Blog: Say no to data retention in surveillance reform |
Despite nearly two years of revelations about the scope and scale of government surveillance practices, and the ensuing damage to user trust, security, and privacy, the U.S. Congress continues to delay passing meaningful reforms.
The current surveillance authority under discussion is Section 215 of the USA PATRIOT Act, which has been used to authorize mass surveillance by the NSA, including for all phone metadata. This law expires June 1, and must not be renewed as it stands today.
Our bottom line for this round of surveillance reform in the United States includes four key elements, without which user trust will continue to suffer:
One of the most contentious topics in the current legislative debate is whether to include mandatory data retention as part of Section 215 reauthorization and reform. The theory behind this “compromise” is that, when direct bulk collection by the U.S. government is eliminated, if telecommunications companies are not required to retain data, then some bits might be “lost” and not available for later law enforcement or intelligence access.
This is not a compromise, but rather an exercise in misguided pragmatism. The expectation of total after the fact information awareness by the U.S. government of the intimate details of our conversations is at the core of negative reactions to overbroad surveillance regimes and harm to trust online. It is an unnecessary, and harmful, posture for any democratic government to take. Data retention mandates are not a missing piece of the long-term surveillance ecosystem; they are a bridge too far.
Once we accept the principle that the government has a right to force records to be held onto so they can effectively go into the past, where does that stop? What’s the limit? Or are we paving the way to a world where nothing can be deleted just in case the government might want to look at it? It’s not hard to see how such a limitless program would quickly move from telephone records to Internet companies.
As the nearly daily parade of data breaches make clear, amassing the personal information of everyone in the United States exposes those data to breach, theft, misuse, and abuse. Data acquired are data at risk, and this threat to user security and privacy is not acceptable. As Foreign Intelligence Surveillance Court Judge Reggie Walton noted in a recent ruling, data retention by government “increases the risk that information about United States persons may be improperly used or disseminated,” in particular because “the great majority of these individuals have never been the subject of investigation” for intelligence purposes. These same risks apply to data retention by companies.
In addition to making troves of private user information vulnerable to malicious actors, requiring companies to hold user data longer than necessary for business purposes would create additional liability and risk. In general, storing data for longer than it’s useful for any purpose should be avoided. To do so in support of intrusive surveillance practices is even more harmful. What’s more, at a time when 91% of Americans say they feel they have lost control over their own data, mandatory data retention would preclude new privacy-maximizing business models.
Finally, when Congress was last considering reform of Section 215, Attorney General Holder and Director of National Intelligence Clapper wrote that mandatory data retention was unnecessary, stating that the version of the USA FREEDOM Act then under consideration, “will accommodate operational needs while providing appropriate privacy protections.” These statements are as true today as they were at the end of last year.
Mandatory data retention under Section 215 reauthorization, or in any other law, will further harm trust online and will compound security risks for users and associated economic costs for the future.
Chris Riley, Head of Public Policy
Jochai Ben-Avie, Internet Policy Manager
https://blog.mozilla.org/netpolicy/2015/04/03/say-no-to-data-retention-in-surveillance-reform/
|
Cameron Kaiser: Beware the undead Snow Leopard |
We recently ran numbers on our user base (like about 3 weeks ago), and found that 10.10, 10.9 and 10.6 all had greater than 10% share of our Mac user base. 10.6 was still close to 19%.
Gonna be some unhappy people when the hammer comes down, and in fairness to Mozilla, the hammer's going to be Apple screwing around with Xcode to prevent 10.6 compatibility. But when that's the last OS that ran legacy PowerPC applications, ran on any Intel Mac and wasn't infected with the iOS herpes, can you blame people for sticking with what works? These numbers are still roughly comparable with 10.6 usage over a year ago.
Which reminds me that I'm reacquiring numbers for our state of the user base. Watch for that soon™.
http://tenfourfox.blogspot.com/2015/04/beware-undead-snow-leopard.html
|
Mozilla Science Lab: Save the Date: Mozilla Science Lab Community Call, April 9 |
Our next community call will take place this Thursday, April 9. The call is open to the public and will start at 11:00 am ET. Call in details can be found on the call etherpad (where you can also find notes and the agenda) and on the wiki. (If you have trouble with the toll-free number, try one of the numbers at the bottom of this post.)
The Science Lab meeting is our community call, taking place each month, highlighting recent developments and work of the community relevant to science and the web. Join us to hear more about current projects, find out how you can get involved, and hear from others about their work in and around open research.
This month, we’ve invited speakers to join us on the topic of publishing negative results. First up, Dan Katz will be joining us to discuss the upcoming ERROR Conference, a meeting in Hamburg, Germany this September 3, in conjunction with the 11th eScience Conference. From the ERROR webpage, ‘The ERROR workshop aims at providing a forum for researchers who have invested significant efforts in a piece of work that failed to bear the expected fruit‘; Dan will be telling us more and taking questions on the event.
Also joining us will be Simine Vazire, discussing why publishing null results is essential for making ideas & theories falsifiable. Related, she will also touch on the fact that conceptual replications are most useful if we publish null results.
Stephen Curry will be calling in to discuss his recent blog post, The Importance Of Being Negative, in which he describes the circumstances around his group’s recent null result publications, examines the biases in publishing and academia towards positive results, and discusses the pitfalls in that existing model.
Finally, Eva Amsen from F1000 will close out the hour discussing F1000’s Negative Results Campaign. In the Summer and Autumn of 2013, F1000 waived fees for papers submitting null results; Eva will be discussing what came of this campaign, and the role of publishers like F1000 in the evolving discussion around publishing all research results.
Have an update, blog post or event you’d like to share relevant to open science? Add it to the etherpad (see ‘Non Verbal Updates’, line ~100). It’s a great way to share what you’re working on and/or interested in with the community. Don’t be shy. Have a look at last month’s notes for an idea of what others contributed to the conversation.
Mark your calendars, tune in and help us spread the word – everyone is welcome. For call-in details and links to the etherpad, visit our wiki page. We hope you’ll join us.
—
Note: Having trouble dialing in? Try one of these numbers. (Note that they are toll calls and you’ll be charged by your telephone company if the number is long-distance.)
After you enter the extension, you’ll be asked for the conference ID, which is 7677.
http://mozillascience.org/save-the-date-mozilla-science-lab-community-call-april-9/
|