This’ll be my last post to planet.mozilla.org.
After 8 years and thousands of airmiles, I’ve decided to leave Mozilla. It’s been an incredible ride and I’ve met a lot of great people. I am incredibly grateful for the adventure.
I’ve been staring at this blog for a few weeks now and it’s been taunting me to write something. Anything. I’m working up to it, but the pre-existing mass of material is preventing me. So I need a reset.
Whatever it is, it’ll be something boring. Maybe a review of a television program. Maybe a book review. Maybe a comment about my favorite camera. Something to create forward motion.
I like writing.
I was fortunate to be able to attend the Game Developers Conference in San Francisco this year. Thanks to our organizers and IT staff for all the hard work they put into making everything run so smoothly.
This was the first year Mozilla had an actual booth on the show floor and we put it to good use demoing our Developer Tools alongside some fun games. We showed off our new Canvas Debugger (should be landing next week!), the Shader Editor as well as our Debugger and our other inspection tools. People were really receptive to the Canvas tool. The Shader Editor got a fair number of positive comments as well. I was also able to show off our Network panel as a temporary solution for inspecting game assets like textures.
Another well-received demo was a setup where I paused my desktop JS Debugger when receiving a device orientation event on my phone. I loaded the three.js DeviceOrientation demo on my phone’s browser (Firefox for Android). I then connected the phone via USB to my laptop and launched our remote tools via the “connect” option. Opening the Events panel, I was able to pick “deviceorientation” as a category and selecting that caused execution on the phone to immediately pause with my desktop debugger showing the exact location.
Debugging device events is easy to do on a mobile device. I was also able to demo our Shader Editor running on mobile which was pretty cool. Editing shaders in real-time running on a remote device is some real science fiction level stuff.
Having the kind of immediate feedback for WebGL (and soon WebAudio) that our tools provide is kind of a big deal for people who aren’t used to living in a dynamic environment like a web browser. There is lots of opportunity in this space to make tools for game developers that are fun to use and interactive. You can literally program your game while playing it.
This feels like a tipping point for games on the web. There are now multiple engine developers offering the Web as a bona fide deployment target. Three big engines have reduced their pricing models to the point of being effectively free for most developers and that happened just this week. This is a big deal and I think we’re going to start seeing a lot of game publishers shipping games to the web very soon.
We also weren’t the only booth showing off HTML5-related game technology. Nintendo is shipping a “Web Framework” around a bundled WebKit shell for deployment on the WiiU and had a pretty sizeable installation to show it off. Unity is also making that a deployment target. Various other booths were demoing HTML5 games and tech.
In the emerging technology department, head-mounted displays were in full-evidence. Sony just announced a new piece of head-gear for the PS4 and there were some other vendors kicking around similar technologies. At this point, it seems obvious that head-displays are going to be very real, very soon. The lines of people at Oculus’ displays were a constant stream of humanity.
Cmd-Alt-K on OS X or Ctrl-Shift-K on Linux or Windows will now always focus the console input line. It will no longer close the entire toolbox and you’ll have to use one of the other global toolbox commands, Cmd-Alt-i (or Ctrl-Shift-i) or F12.
They are the bane of Firefox Developer Tools engineers. Ask us in #devtools for a new keyboard shortcut to do X and you will be greeted by a chorus of groans. There just aren’t enough keys on a keyboard for everything we need to use them for.
I added a recent change to automatically focus the Console’s input line when clicking anywhere in the console’s output area (bug 960695). This spawned a series of follow-ups.
The first of these was the addition of Page Up and Page Down controls on the input line. (bug 962531). Now when the input line is focused, it will scroll the output area with page up and page down keys. If the autocomplete popup is active, it’ll scroll too. It’s a little thing that’s nice to have when you’re flipping through all of the completions for, say, the global window object.
The most important change we landed this weekend is a change to the Console’s main Keyboard Shortcut, Cmd-Alt-K on OS X or Ctrl-Shift-K if you’re on Linux or Windows. This key will now always focus the console input line. It will no longer close the entire toolbox and you’ll have to use one of the other global toolbox commands, Cmd-Alt-i (or Ctrl-Shift-I) or F12. (see bug 612253 for details and history)
And there’s still more to do. I filed bug 967044 to make the Home and End keys do the right thing in the Console’s input line. We have this “metabug” tracking all of the open shortcut bugs in Firefox Devtools. Are we missing any? Let us know!
(This post is not really Mozilla-related, so if you’re not interested in open source flight-controllers and software, you can stop reading here. There are some parallels though and I draw a connection later on, so I did decide to push this to planet.mozilla.org.)
A few weeks ago, a friend said, “hey, 3D Robotics has a sale on two of their drones right now.” This is exactly the kind of thing friends shouldn’t say to friends who are of a certain disposition – a highly-suggestible technology geek with a love of flying things and photography.
So I did a little research. And a little more research. And then a little more research… I did a lot of research and ultimately decided that the drone I wanted was not one of the two drones 3DR had on sale. The deal was a free GoPro Hero 3+ Black camera or 200 dollars off, I think. I looked hard at the Y6, but being a multicopter noob, it was a bit intimidating as a first vehicle. The drone I wanted was the IRIS which was still in “Developer Preview” mode but shipped ready to fly and promised to be a good platform to learn on. They’ve since closed orders on the machine and are shipping the consumer version sometime in December.
That weekend I bought a Heli-max 1SQ Vcam and proceeded to begin crashing it around inside the house. I nearly lost it after an exhilarating 10 minute flight around the park that terminated in crashing into a tree.
— Rob Campbell (@robcee) November 3, 2013
I was totally hooked.
I ordered my IRIS that Sunday night. Astoundingly, it arrived direct from the assembly plant in Tijuana that Thursday. I was all set for a 2-4 week waiting period, but was denied the wait. Unfortunately, the weather would force me to wait before I could take it out for its maiden flight. Since getting my quadcopter, I’ve become even more obsessed with the weather and frequently ping Billy Bishop airport for METAR weather codes since they’re nearby.
First flight happened on a blustery Wednesday afternoon. We went to Woodbine park in some pretty windy conditions, but I was dying to get some airtime with this thing. I did a few quick test launches before boxing everything back up and hurrying to the car because of the wind. First flight was a success!
That weekend the weather cleared and we had a really nice day on Saturday. That’s when I did my first real test flight.
The one thing you really have to do before you can make use of autopilot is calibrate your compass! Mine was still carrying the calibration from the factory in Tijuana.
If you watch the first video above, I go onto autopilot around the 56 second mark and it has a hard time hitting the waypoint (I later learned that you need to set a reasonable acceptance radius on each waypoint in the flight planning software). At 2:45 it flew out of bounds over some trees. At 4:50 it did a slingshot spiral out over the pumping station which was pretty spectacular. Each time I was able to cancel autopilot and manually control it back to ground.
So that was educational. I spent the rest of the weekend calibrating and then recalibrating. The onboard flight software is particularly sensitive to this calibration and if you do it incorrectly as I did the first time, it won’t even let you arm the craft for take off and will just flash a yellow warning light at you. The documentation is not exactly helpful in figuring out what the problem is, so I had to go back to initial configuration to guess what had gone wrong. Since calibrating it properly, control has improved and waypointing works flawlessly.
I’ve also learned a bit about using a GoPro camera. The Hero 3+ now has a “protune” option for video that drastically improves stability and rolling shutter. It takes pretty excellent video now. I’ve posted a couple of other videos showing my first successful auto-piloted flights including landing.
This stuff is a lot of fun, and I’m experiencing some of the “developer preview” speed bumps along the way which I’m more than happy to absorb. I find the documentation is pretty good, though the flight planning software screenshots (either Mission Planner on Windows or APM Planner on Mac) rarely match what’s in the instructions.
I also experienced a bit of deja vu trying to figure out which site to find the right documentation on. Feels a lot like Mozilla in some ways where you have a bunch of inputs and a bunch of outputs and its up to the user to figure out how it all fits together. Programming the radios and PIDs is still a bit of a mystery though the presets the IRIS came with are excellent right out of the box.
The other gem in all of this is the Android flight planning software. There are two of them, but I’ve been running Droid Planner and am pretty happy with it. The other option is called AndroPilot. They both seem to have different capabilities and are both on github.
I still have a lot of learning to do to optimize the controls to my liking. Fortunately, the software is all open source. Now if the wind would just die down I can go out for a flight.
This week, we are proud to add Brandon Benvie, Brian Grinstead, Patrick Brosset and J. Ryan Stinnett as peers of the Developer Tools Module.
Brandon Benvie of es-discuss fame has been tackling difficult problems such as remoting our Scratchpad and making things use protocols they were never designed to use. In addition to that, he knows a thing or two about generators and promises that just might scare your hair white. He can review Scratchpad and Variable View patches and is pretty capable with Debug Protocol stuff. And Promises.
Brian Grinstead, recently-famous for his excellent Edit as HTML feature in the Inspector is working on the Devtools Content Team. He has been described as being “very thorough” so you should send him reviews for the Inspector, Style Inspector and anything else you want reviewed. Thoroughly.
Patrick Brosset completed the recently-added doorhangers on colors and image previews in the inspector. Little did he realize he would have to contend with the mysteries of the XUL Panel element when he set out on this noble path. He is also the creator of this neat thing. You should probably send him some Inspector and Style Inspector reviews. Also, feel free to ask him how he feels about mustard.
J. Ryan Stinnett (or jryans as he is called in IRC) has been busily adding support for the Manifest Editor in the App Manager. For a second trick, he’s been working on adding support so our JS Debugger can finally debug itself. Yo dawg. You should send him requests to review your App Manager patches.
Congratulations and happy code reviewing!
|926283||CSS Tools unnecessarily translate color names to hex in u…|
|927815||Update the Infobar design according to shorlander’s mockups|
|929887||Make the Network Monitor use CodeMirror|
|915874||[toolbox] Clean up toolbox.js|
|924614||Scratchpad shows up in developer tools menu twice|
|926725||Optimize lazyGetters on Scopes|
|895561||“Edit As HTML” option in the markup view|
|911678||Inspector – inline style rules do not populate the CSSRul…|
|915910||[markup view] UI updates following refactor in Bug 855523|
|921686||Firefox css inspector doesn’t find the correct url for so…|
|923166||Use nsIDOMWindowUtils.containerElement inside of LayoutHe…|
|926974||[markup view] Theme does not immediately apply after swit…|
|916995||browser_webconsole_view_source.js just assumes the event …|
|921795||inDOMUtils::GetCSSValuesForProperty should report “initia…|
|915736||[app manager] Write documentation|
|905226||Response tab in Network inspector shows base64 encoded re…|
|917706||Browser Debugger shouldn’t require a restart / new window|
|920794||Make Browser Console’s default evaluation context the (la…|
|926323||ReferenceError: info is not defined in browser_tilt_02_no…|
|928315||Shift+Enter should search backwards in the debugger|
|917844||Add a keyboard accesskey to the Browser Debugger menuitem|
|914405||long pauses due to non-incremental GC for DEBUG_MODE_GC|
|919349||JS debugger: remove uses of ‘delete’ that put objects in …|
|902421|||tools srcdir| breaks Firefox startup|
|914403||B2G highlighter remains visible after closing toolbox|
|915372||Inspector can only be opened once per app per connection|
|922193||Integrate the VariablesView as a manifest editor|
|926501||VariablesView rawObject helper should make enumerable con…|
|926506||Hide proto in Manifest Editor|
|926929||Update documentation link on Connect page|
|927266||css-color inadvertently removed from SrcdirProvider|
|928078||Running apps aren’t considered running after update|
|929159||Add output-parser to SrcdirProvider|
|929824||Debugger logging not pretty printed when remote end not l…|
|916997||All lines are combined to one line. when copying multiple…|
|898559||Add metadata API for add-on globals|
|775135||Add color type dropdown to rule and computed views|
|911748||Add default color dropdown to devtools options panel|
|913983||Intermittent TEST-UNEXPECTED-FAIL | devtools/shared/test…|
|916451||browser_cmd_addon.js | html output for addon disable Test…|
|917389||Re-enable browser_css_color.js on Linux 32 bit tests|
|917863||Add XUL context menu back into rule and computed views|
|918305||Move css-color.js in /toolkit/|
|918716||Add color swatches to devtools output parser|
|923884||Wrong value in markup view|
|924136||css-color.js interprets “inherit” as black|
|911995||Add escodegen’s license to about:license|
|918802||Pretty printer can block Firefox on large files|
|921255||Add an UPGRADING file to toolkit/devtools/sourcemap|
|923600||don’t pretty print RDP packets when devtools.debugger.log…|
|923735||Tracer should attach “why” to frame exit packets|
|929868||pretty print button is smaller than all other buttons|
|817695||the [toolbox] should be located below the findbar|
|925990||Profile has pink text on top of it|
|926397||Red-on-black tooltips on Ubuntu are hard to read|
|929540||Nightly builds don’t start the browser console with -jsco…|
|913722||Last project remains displayed after deleting|
|916166||[app manager] Disable the network monitor|
|916698||[app manager] 2 connect buttons|
|921191||allow inspection/editing of SVG elements’ CSS properties|
|926371||Add a simple tool to display reflows|
|835808||Navigate with arrow keys in computed view|
|911982||Highlight mutated elements in the inspector for some time|
|913014||Nodes in the inspector’s computed style view are hard to …|
|917448||WalkerActor.querySelector: can’t access dead object error|
|922125||[markup view] Implement destroy functions to clean event …|
|926325||TypeError: this.markup is undefined in InspectorPanel_onN…|
|915444||Add webProgress to root actor for the chrome style editor…|
|912475||Use promise instead of custom event for install request f…|
|914594||[app manager] Services.settings not available|
|914604||Add test for app reinstall and redirects when installing …|
|916237||Inspector won’t connect to non-OOP B2G apps|
|917365||“TypeError: this.connection is undefined: UI.startSimulat…|
|914861||browser_toolbox_options.js times out when a tool in defau…|
|926479||Replace className comparisons with classList.contains in …|
|919978||Make StyleEditor use CodeMirror|
|928827||SelectStyleSheet does not move the cursor to proper line/…|
|918996||Responsive Design View: width does not compensate properl…|
|927974||Rewrite Connect help text to move link out of translated …|
|825738||Intermittent browser_dbg_propertyview-edit-watch.js | Tes…|
|852006||Intermittent browser_dbg_scripts-searching-02.js | Test t…|
|855811||Intermittent browser_dbg_scripts-searching-03.js | Test t…|
|869144||Intermittent b2g test_api.js,test_eval-04.js,test_bug7942…|
|871713||Intermittent browser_dbg_propertyview-filter-02.js | Test…|
|886058||Intermittent browser_dbg_scripts-searching-08.js | Test t…|
|888087||Intermittent browser_dbg_location-changes-bp.js | uncaugh…|
|903231||Intermittent browser_dbg_propertyview-filter-03.js | This…|
|903301||Intermittent browser_dbg_propertyview-filter-03.js | Test…|
|903303||Intermittent browser_dbg_propertyview-filter-02.js | This…|
|903750||Intermittent browser_dbg_propertyview-filter-01.js | Test…|
|905092||Intermittent browser_dbg_scripts-searching-03.js | This t…|
|916591||Intermittent browser_dbg_pause-exceptions-02.js | Test ti…|
|916747||Intermittent TEST-UNEXPECTED-FAIL | chrome://mochitests/c…|
|917498||Intermittent browser_dbg_breakpoints-disabled-reload.js |…|
|919161||Potential intermittent browser_dbg_pretty-print-06.js | T…|
|921513||Use consumeoutsideclicks=false for the debugger panels|
|923779||Native code event listeners can get listed multiple times…|
|927372||Black margin at the end of the selected source disappears…|
|927375||UI should be responsive when docked to the side|
|928278||BreadcrumbsWidget should use setNamedTimeout|
|929888||Remove the editor context menu listeners from the debugger|
|931003||Arguably obsessive changes for a consistent border color …|
|832636||ToolboxStyleEditor.tooltip=CSS Stylesheets Editor shouldn…|
|906633||Scratchpad does not set mimetype for open/save dialogs|
|918588||Event Emitter: Can’t call off after once|
|919681||Connecting to Simulator displays duplicate “Connected” me…|
|920337||Race when loading projects|
|921222||Make disabled buttons look disabled|
|922144||Full page design for VariablesView|
|928144||Manifest editor should be read-only for hosted apps|
|921451||[app manager] Link to ADB addon helper is wrong|
|921500||[app manager] landing page for the Simulator addon|
|922210||Can’t interact with LOQUI app on Simulator only (works on…|
|922692||ADB Helper update links all point at win32|
|917479||Starting a simulator changes host and port settings|
|918004||B2G: Can’t see remote stylesheets in Style Editor|
|919496||[app manager] once an app has been installed, it doesn’t …|
|920495||don’t scrollIntoView when the basic inspector is used|
|920509||[app manager] don’t use hiddenDOMWindow in styles.js|
|924568||Validate hosted app URL before adding|
|925199||Move touch-events.js to /toolkit/|
|880930||JS debugger: RootActor needs its own definition of window…|
|915258||Build and host simulator addon on the internet|
|915261||Build and host adb addon on the internet|
|917707||[app manager] help tab, AMO and MDN should refer to the A…|
|918326||[app manager] Can’t start Firefox if the ADB addon is ins…|
|918383||Debug button fails the first time when the app isn’t inst…|
|919831||Can’t debug new packaged app with custom origin|
|919981||Dispatch app (un)install events via the webapps actor|
|920092||‘[object Object]’ is displayed when installing certified …|
|920478||[app manager] if the launch path of an app is missing or …|
|921850||[app manager] Can’t connect to Simulator on Mac|
|925219||[app manager] alert for invalid/unsupported manifest type…|
|927108||Pushing certified apps does not work|
|860349||Intermittent browser_dbg_chrome-create.js | browser_dbg_c…|
|918797||Trying to prettify html irrevocably loses the source unti…|
|919155||After editing a source, it takes multiple page refreshes …|
|930643||Sorting by column is broken|
|912260||Make Scratchpad use CodeMirror|
|919706||Localize search/replace UI|
|843019||Variables view input filter doesn’t work until you press …|
|848666||The ScratchPad and Style Editor doesn’t close after even …|
|917617||Simulator start button UI tweaks|
|921226||Log on app install start and finish|
|812764||Errors don’t carry any meaningful information on them|
|914930||load source content via Debugger.Source|
|916180||make pretty printing toggle-able|
|916454||Browser hanging when reloading some pages while the debug…|
|917072||move black box eyeball into sources toolbar|
|921630||Show progress indicator while pretty printing|
|924442||Disallow pretty printing when a source is black boxed|
|925073||pref to enable/disable pretty printing in the UI|
|780198||Intermittent browser_dbg_reload-same-script.js | Test tim…|
|862344||Hide non-enumerable properties of parsed JSON in the netw…|
|916458||Can’t close browser when paused on a breakpoint|
|765105||[inspector] Add image preview for background image urls|
|918695||[app manager] Clicking on debug when a toolbox is already…|
|921845||[app manager] uninstalling or disabling a simulator doesn…|
|925770||No MarketPlace in the Simulator|
|923281||Console filter output does not match source filenames (li…|
|924879||Minor cleanups for Parser.jsm|
|919188||help.intro in app-manager.dtd should use ‘i.e.’, not ‘i.e…|
|912240||Restore access key for the Clear button in console|
|919709||Make Debugger use CodeMirror|
|907755||add telemetry probe for how long it takes us to display t…|
|917189||There is a paused icon on the gutter after jumping to a s…|
|786127||Triple-click fails to work in maximized scratchpad window|
|895180||Add a new Scratchpad context – remote connection|
|902539||VariablesView does not distinguish between right and left…|
|926722||Simplify Scratchpad’s writeAsErrorComment|
|862019||Allow Ctrl-C to copy the selected header name and value|
|923104||Scratchpad “Browser” context breaks while browser console…|
|898472||Browser Debugger window has no title|
|837060||this != window at global context on Web Console|
|588010||Make clickable output in the WebConsole keyboard accessible|
|653710||CSS links in WebConsole can be opened using any of mouse’…|
|860672||command line option -jsconsole should open the Browser Co…|
|917188||Use a more deterministic way to write the browser_webcons…|
|922835||debugger gives weird exception|
|810966||Display closed over variables in the variables view|
|906889||odd stoppage on reloading page with debugger|
|918240||Can possibly remove “Restart required – restart now?” fro…|
|924238||SideMenuWidget’s arrows don’t update with black boxing|
|800857||Break on dom events|
|858778||Intermittent browser_dbg_bug723069_editor-breakpoints.js …|
|874591||Copy/paste from Developer Console does not include “[Mixe…|
|895471||Allow running mochitests with the browser debugger alread…|
201 bugs found.
Yo, I heard you like pumpkin waffles on your Canksgiving. Well, I’m here to help you.
Here’s a recipe that will make you about 10 delicious, pumpkiney waffles.
♣ About 8 hours before cooking, combine the dry ingredients (minus the salt) into a large mixing bowl. Melt that stick of butter in a pot then add the honey, vanilla extract and milk. When that’s warm (don’t boil it!) stir in the pumpkin sauce until it dissolves. Let that cool for a bit and when it’s just a little warm, stir it into the dry mixture.
Cover the batter and let sit overnight.
♣ In the morning when you’re ready to get your waffle on, add your salt to the batter and separate two eggs. Drop the yolks into the batter and mix ‘em in. The batter should be nice and fluffy from the yeast activity during the night.
Turn on your waffle iron and get it heating. Add some canola oil or butter to the grids if they need it. Turn on your oven to 200°F and put in a cookie tin with a drying rack over it. These’ll keep your cooked waffles warm and crispy until you’re ready to eat.
In a chilled metal bowl (I put mine in the freezer for 10 minutes), whisk the egg whites until peaky. Fold this gently into the waffle batter. It should run through the all the batter, but still retain some airy egg white bubbles.
Cook ‘em up as per your waffle iron’s recommended method and Enjoy!
Note, that I neglected to include the Baking Soda because Bittman didn’t call for it. I expect adding that will make the batter even poofier in the morning. Up to you.
PS, recovering from post waffle coma. They’re a little denser than the standard waffle. Delicious. Taste like pumpkin pie. Oh god halp.
(it’s a working title)
Autumn. A time of color-changing leaves. A time for reflection and denouement. A time for elaborate dining rituals and familial obligations.
This year, Canksgiving (or Canucksgiving or even Thanksgiving) falls on the weekend of the 11th of October — the weekend containing the second Sunday of this month. This means, many Canadians will be taking time off of work to travel to far-flung places like, New Brunswick and Ontario. Maybe even The Yukon.
These migrating humans will congregate around their ancestral homesteads to sit around watching sporting events on their “televisions” — a kind of late 20th century entertainment medium. Most families will be watching such sports as “hockey” or even “football”. They may consume fermented malt and grape beverages. There might even be a humorous pumpkin-flavored varietal that the imbibers will insist is the best of its type they’ve ever tasted. They will be lying.
On Sunday, and/or maybe Monday as family tradition and configuration dictates, the Feast will occur. The family will arrange itself around the table festooned with all manner of riches and a hilarious centre-piece. There may be a special satellite table set a short distance away from the main sitting area for the children and at least one teenager who will not look very happy.
There will be turkey and stuffings. Potatoes and yams. Squashes and carrots. Maybe grandma will bring her cheesy cauliflower concoction. There will be cranberry sauce which will make children and child-like adults giggle when it makes the noise cranberry sauce makes when it emerges from its tin. Some people will make their own special cranberry sauce. It is essential. There will also be wine.
If you know know someone who may be from Canada, cut them a little slack this weekend. They are wrestling with powerful ancestral memories. Wish them luck.