Blank Page

wall
It’s autumn in 2014.

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.

GDC 2014

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.

_3200033

My GDC14 Flickr Set

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.

gg;hf.

Updated Console Keyboard Shortcuts in Firefox

Keyboard

keyboard” by Mark Lane on Flickr

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.

Keyboard shortcuts.

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)

Try it out. Tell us if you hate it. You can reach us here, IRC, or on the twitters.

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!

IRIS

(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.

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.

A word about setup. There is a fairly lengthy bit of documentation on diydrones.com and the instructions pages on ardupilot.com.

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.

New DevTools Peers, October 2013 Edition

rabbid

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!

Firefox 27 Devtools Fixes

ID Summary
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…
926540 JavaScript error: chrome://desktop-helper.js/content/touc…
908878 Intermittent browser_webconsole_bug_595350_multiple_windo…
916997 All lines are combined to one line. when copying multiple…
918210 Intermittent browser_webconsole_bug_613642_maintain_scrol…
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…
853003 Intermittent devtools/debugger/test/browser_dbg_stack-03….
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…
885967 Intermittent devtools/debugger/test/browser_dbg_propertyv…
885983 Intermittent devtools/debugger/test/browser_dbg_scripts-s…
886058 Intermittent browser_dbg_scripts-searching-08.js | Test t…
888087 Intermittent browser_dbg_location-changes-bp.js | uncaugh…
891176 Intermittent browser/devtools/debugger/test/browser_dbg_b…
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…
906459 Intermittent browser_dbg_bug737803_editor_actual_location…
916591 Intermittent browser_dbg_pause-exceptions-02.js | Test ti…
916747 Intermittent TEST-UNEXPECTED-FAIL | chrome://mochitests/c…
917211 Intermittent browser/devtools/debugger/test/browser_dbg_c…
917498 Intermittent browser_dbg_breakpoints-disabled-reload.js |…
918329 JavaScript Warning: “XUL box for toolbarbutton element co…
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
762761 An option to deobfuscate javascripts in the debugger
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
848731 JavaScript error: resource:///modules/devtools/Selection….
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
853058 Intermittent browser_dbg_bug723071_editor-breakpoints-pan…
858778 Intermittent browser_dbg_bug723069_editor-breakpoints.js …
887363 Intermittent browser_dbg_bug723071_editor-breakpoints-con…
874591 Copy/paste from Developer Console does not include “[Mixe…
895471 Allow running mochitests with the browser debugger alread…

201 bugs found.

Pumpkin Waffles

waffles
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.

  • 1 tsp sugar
  • 1 tsp dry yeast
  • 1 cup canned pumpkin puree
  • 2 cups warm milk
  • ¼ cup honey
  • 1 stick (4 oz) unsalted butter, melted
  • 2 cups all-purpose flour
  • 1 tsp ground cinnamon
  • ½ tsp ground nutmeg
  • ½ tsp ground ginger
  • 2 tsp pure vanilla extract
  • ½ tsp sea salt
  • 2 large eggs, at room temperature
  • ¼ tsp baking soda (optional?)

♣ 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!

Sources:

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.

Canksgiving

birches

(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.