#io13

IO13

I sat in on three sessions at Google IO 2013 yesterday.

Memory Lane with Chrome Devtools and GMail was the first.

The presenters showed off their Heap Tracking Profiler and Memory Tracking tool in the Timeline and explained how to use them to track down a leaky DOM node. It was a practical application of how to use a developer tool to solve a particular problem.

One interesting takeaway that surprised the presenters during their research: Always allocating more memory (caching) as a way to improve performance in a large application like Gmail is not a panacea for slow performance. Having a large heap space actually slows down the garbage collector and your performance suffers. It’s a fine balance.

What surprised me was how they analyzed their problem by tracking a user with a known high memory problem for three days. The Google team constantly monitors their apps’ performance via the window.performance API and can single out hotspots in the population.

The next talk I sat in on was about Chrome Apps. The presenter, Erik Kay showed off some of the “Immersive” experiences of Chrome Apps and the different ways they could interact with the hardware on the Chrome Book. The talk included a demo of a small thermal printer being hooked up and controlled over USB which garnered some applause.

The Chrome Web Store lets you buy apps for Chrome.

The only real mention of Android was that they were using PhoneGap and Cordova to provide their compatibility layer. Same for IOS. There will be compatibility issues with deploying on iOS but it seems surprising that they would pursue this completely separate technology for Android. Surely they could ship a full version of the Chrome Runtime and deal with hardware incompatibilities directly.

The questions from the room were interesting. One man (not a Mozillian) asked about WebRTC compatibility across the different platforms, pointedly repeating the question of whether or not he’d be able to use WebRTC in an app on iOS. Only when their WebView supports it.

Another man asked something about interoperability between B2G and ChromeRT. Erik said that there is “no forcing function yet to drive standardization”.

I think my biggest takeaway from this talk was that people wearing Google Glass look like dorks.

My second biggest takeaway was that I was very surprised that there was zero mention of the Google Play Store for Chrome Apps.

Last talk I attended was a Fireside Chat with the Blink Team. While I was expecting an actual fire and was disappointed there wasn’t one, the team bravely took questions from an audience confused about feature-detection, unprefixed CSS and market fragmentation.

Dan Buchner asked the panel something about standardization and I felt a little badly for the Blink team who had a whole chunk of slides talking about how they’re going to be good citizens. (If you want to participate, you should join blink-dev@chromium.org.)

I was interested in ChromeStatus.com/features which shows a spreadsheet of features in-progress. Time will tell how their Intent to Implement and Intent to Ship broadcasting will work from an Open Source point-of-view, but they are currently claiming that a third of their intents to implement are coming from outside of Google.

I wanted to meet Paul Irish after the talk but Steven Shankland showed up and pushed me out of the way. When he was done I did get to meet him, but I think Buchner had made him angry or something. Maybe he was just tired. I dunno.

Firefox 23 Developer Tools Fixes

Bug ID Summary
581352 Console HTTP output should make JSON viewable as objects
586125 “””Copy”” “”Select All”” etc. popup menu item in the Web Console displays keyboard shortcuts
587757 Implement Browser Console
638953 Cannot copy keys or values in web console object inspector
640225 Make Property Panels Editable
688400 Web Console throws a TypeError when trying to display objects with no toString method
688401 Web Console displays “”[null]“” for [Object.create(null)]
711846 Intermittent browser_webconsole_bug_595934_message_categories.js | Test timed out (mostly on WinXP PGO)
725771 xpath use in console returns null elements
744741 console.dir tree is empty with cached messages
748851 Web Developer Console incorrectly displays escaped hex/unicode characters
757897 All code in the web console is considered to be at line 1
774365 Web Console setTimeout can’t find declared functions by name
783499 Web Console should use the debugger API
808370 Use the VariablesView in webconsole
809424 Intermittent browser_webconsole_bug_611795.js | The unknown CSS property warning is displayed only once – Got 1, expected 2
831400 Intermittent devtools/webconsole/test/browser_webconsole_bug_764572_output_open_url.js| Timed out while waiting for: complete to initialize the opening tab
836720 “”InternalError: too much recursion”” not correctly caught
840093 Text in object inspector can’t be copied
841129 Intermittent browser_repeated_messages_accuracy.js | two repeats for the second css warning – Got 1, expected 2
843287 UI improvements for the variables view and sidebar
847349 Variables View should have left arrow do collapse and navigate in separate steps
853568 Intermittentbrowser_webconsole_bug_599725_response_headers.js | we do not have the Content-Type header | Content-Length != 60 – Didn’t expect 60, but got it
855058 Intermittent browser/dom/tests/browser/browser_ConsoleAPITests.js | timer duration is positive
857441 Autocompletion popup is very jumpy while typing text
859170 Trying to select [...] for a very long message printed to the web console will hang Firefox
859818 ConsoleAPIStorage.jsm tries to delete var-declared _consoleStorage
859858 Intermittent browser_bug664688_sandbox_update_after_navigation.js | Timed out while waiting for: window.location.href result is displayed after goBack(), browser_repeated_messages_accuracy.js | Timed out while waiting for: messages displayed
862024 Warning about replaced window.console API shows when content scripts do not change the object
863943 Intermittentbrowser_webconsole_bug_602572_log_bodies_checkbox.js | Test timed out, browser_webconsole_bug_603750_websocket.js | uncaught exception – ReferenceError: ok is not defined
865288 console.log with different object logged from same line number are grouped together
865792 Firefox for Android remote console doesn’t evaluate JS expressions
865871 Object inspector can’t be closed
677930 Style Inspector: make URLs clickable
777681 [rule view] Abbreviate long CSS file names source links
777877 Switch CssRuleView.jsm back to WeakMaps
854948 GCLI context.environment.contentDocument points to doc from when GCLI first opened
855502 we need a proper design for the new checkboxes
855520 “”No element selected”” in the inspector sidebar could use some margins
861908 Destroying Inspector without destroying Toolbox fails.
866381 Inspector shouldn’t break if target is a chrome document
679364 Use either content/devtools/* or content/browser/devtools/* for aliases
851231 Output console.jsm API calls to the browser console
855544 Implement a network monitor
855763 [ResponsiveMode] Intermittent browser_responsiveuiaddcustompreset.js | Test timed out, | Found a tab after previous test timed out: data:text/html,foo,browser_Services.js | Services.prompt is an nsIPromptService
855914 Start using the jetpack loader in devtools
859089 [netmonitor] Under very constrained sizes text in the timeline view is sometimes not rendered
859221 [netmonitor] Sizes are displayed in KB not kb
861197 chrome.manifest files created by the devtools loader should be ignored
723923 Debugger ‘breakpoint list’ GCLI command should have extra nice output
792815 Update promise usage in gcli commands
831720 GCLI needs an appcache command
861192 gcli addon command shows [object Object] instead of a list of addons
865680 devtools.gcli.allowSet is in firefox.js twice
869233 TEST-UNEXPECTED-FAIL | browser_cmd_appcache_valid.js | html output for appcache validate should match successfully. Actual textContent: “”Manifest URI…””
739031 Check for unused strings not used in translation (e.g. scoped.label) and remove them
740541 Style sheets in iframes are not listed in the style editor
816967 Remotable Style Editor
866264 Intermittent devtools/styleeditor/test/browser_styleeditor_new.js | new editor shows 1 rule after modification – Got 2, expected 1
772119 expose source mapped sources over the remote debugging protocol
818134 Allow multiple debuggers in toolboxes to debug separate tabs
832231 After a reload, breakpoints require multiple resumes to allow execution to continue
837723 [jsdbg2] Debugger should provide a way to get Debugger.Object referents directly
840292 The debugger’s xpcshell tests should use listTabs/attachTab instead of listContexts
843187 Variables view: going down through the properties via keyboard is really broken
849069 relative source map URLs should be resolved according to the spec’s rules
849071 Create some kind of chrome to turn source mapping on/off in the debugger
850738 Add a crap load of telemetry tests
851836 breakpoints[aLocation.line] is undefined after bug 820012
853787 Report errors in nested event loops in xpcshell tests
856232 initialize globalActorFactories upon declaring DebuggerServer
859181 Variables view closes immediately on first open
860349 Intermittent browser_dbg_createChrome.js | application timed out after 330 seconds with no output
861783 Removing watch expression of large object not possible via mouse
861817 Stop using Ctrl+Shift+O shortcut for function searching.
861852 Telemetry data from the remote protocol always appear in the remote buckets
862142 remote debugger doesn’t find any sources for simulator on nightly
862186 remove unused FileUtils import in DebuggerUI.jsm
862360 Use the exported Promise.all instead of reimplementing it
863571 Enable source map xpcshell tests on B2G
864802 The _store on each variables view instance is redundant
864900 The listTabs protocol request can fail if made immediately after a tab is closed
865073 remote debugging protocol: handlers should systematically catch and log exceptions
865328 JS debugger: clean up DebuggerClient.prototype.close
865509 JS debugger: UnsolicitedPauses in dbg-client.jsm should mention ‘exception’
866278 remote debugging protocol: number packets when dumping
867481 Remote debugging connection screen is broken
839515 Tiny fonts in the remote connection screen
849500 navigate and will-navigate events for remoted targets carry payload that is incompatible with the non-remoted case
851546 Create an Options panel for the toolbox
857082 TabTarget.makeRemote doesn’t need any arguments
859569 Target.makeRemote should attachTab
860101 payload._navPayload is a Window in ‘will-navigate’ event handler
862294 Sidebar should be responsive in docked Toolbox.
862363 Sync the killswitch upon (un)registering of a tool and respect it in Options Panel
862398 Maintain the order of tools in the tab and the options panel list
863600 Intermittent browser_toolbox_options.js on Windows PGO builds | Test timed out
851381 Make the Scratchpad evaluate asynchronously
865803 Unable to save Scratchpads, Style Editor, about:memory, … on OS X
852777 Make Tilt more extensible
862435 Tilt doesn’t open if the Inspector was opened beforehand
855244 Profiler hangs after pressing “”Stop”” if it was started in multiple profiles in different tabs
856797 Typo in “”profilerNotStarted”” in gclicommands.properties
858759 profiler.css in browser/devtools/ should actually be in browser/themes instead
859062 Hide right arrow in the SideMenuWidget
859085 Add tooltips to all labels in the UI that may have cropped values
859308 Hide Blocked in Timings tab until we know what that’s doing
859968 JSONP requests are not parsed into a tree
859980 JSON request not parsed
860055 SideMenuWidget shouldn’t scroll back to the selected item when new requests are coming in
860175 On netmonitor examining the specific details of a network action leads to bad overlapping display
860232 Function callbacks in jsonp responses should be displayed in the Response tab
861487 Sizes are displayed with non-localized decimal separator
862198 Intermittent browser_net_json-long.js | Test timed out, found a tab
864176 Details pane should remember its height when docked on the right
864519 Several Netmonitor tests fail when ECMAScript Internationalization API is enabled
866091 Intermittentdevtools/netmonitor/test/browser_net_prefs-reload.js | Test timed out | Found a tab after previous test timed out: http://example.com/browser/browser/devtools/netmonitor/test/html_simple-test-page.html and tons of fallout

Source: Firefox 22 – 23.

Bookmarks Deiconizer Deprecation and Fix

I’ve been getting some comments that my addon Bookmarks Deiconizer has stopped working with Firefox 20 or so. Please note that it’s been broken for sometime requiring a disable/re-enable recycling since sometime around Firefox 12 if you opened multiple windows.

A simple fix is to use a userChrome.css hack which I’ve described before, but will repost here, in its awesomesplendid entirety:

A couple of years ago, I made a simple addon to remove the icons from bookmarks in the bookmarks toolbar in Firefox. It was a fun hack, but I knew then that it wasn’t the right way to do this. Nevertheless, easy is the enemy of perfect (or something) so I kept on using it, and AMO kindly kept on updating it when new versions of Firefox were released.

All was right in the world.

Then this week, some changes to Firefox’ toolbar caused the add-on to stop working. It still works if you do the enable-disable dance in the Addons Manager, but that’s no way to live everytime you restart your browser or open a new window. Something had to give!

To banish your bookmarks icons forever, add the following to your userChrome.css file (it’s in your Profile Directory‘s chrome subdirectory). If it doesn’t exist, create a new file named userChrome.css and add:

scrollbox#PlacesToolbarItems > toolbarbutton.bookmark-item > .toolbarbutton-icon {
  display: none;
}

Update: If you’re on Windows, you’ll probably want to include:

scrollbox#PlacesToolbarItems > toolbarbutton.bookmark-item > .toolbarbutton-menu-dropmarker {
    display: -moz-box !important;
}

This makes the little folder drop-down arrow visible on folders.

Save the file, restart your browser and your icons should be gone forever.

South Africa 2

Some potentially useful or interesting information:

  • about $60 / GB prepaid GSM data.
  • most of South Africa is unwired and either poorly or entirely disconnected from the internet.
    • Even in cities, hitting a webpage full of flash or images can kill your page load speed to the point of timing it out. e.g., I had to retry loading this blog to post this meagre entry.
  • point A to point B is invariably much further than you think. I’ve driven ~2650kms. Many over unpaved roads – some you probably wouldn’t consider a “road” at all.

Still too burnt to post anything substantial, but processing the past three weeks. It’s been an incredible experience.

South Africa 1

Deb and I are in Cape Town, South Africa after a pretty ridiculous two days of travel. We got in yesterday at about 7am after a 12 hour flight from London. This after a 7 hour lay-over in Heathrow. After a 6.5 hour flight from Toronto.

After a few hours of that, things started to look kind of like this:

confusion at heathrow

Deb and I made a bit of a game of following all the various pieces of supporting vehicles around the airport through the windows. We had particular fun at keeping track of the “shoe” vehicles. Specialized trucks built to capture the front wheel of airliners and push them out of their berths. If you’re ever at Heathrow, send a shout out to number 109. He was totally my favorite.

I can’t sleep on airplanes. Never really been able to. I’m really envious of people who can. It’s not like I can get a lot done on an airplane other than some extra reading though after being awake for a total of about 40 hours, words on “pages” stop making a lot of sense.

On these flights, I read a couple of unmentionable books about street photography I downloaded for free in iBooks, a good chunk of Game of Thrones book 3 and most of Micheal Freeman’s, decent The Photographer’s Eye.

My time might have been put to better use reading up on South Africa, though my usual plan of attack of just winging it should be fine, right?

The cab ride to our hotel was very educational. We got a pretty good overview of the geo-political situation in the country from our driver Solly. He also gave us a swell tour of Cape Town along the way from the airport to our hotel. In another day, I am going to take a crack at driving.

Some interesting personal achievements on this trip:

  • 3 continents in 2 days
  • 40 hours without sleep!
  • flown over an entire continent from north to south
  • crossed the equator
  • 3rd continent

 

iPods

frank's demise

I have had a number of iPods over the years. Starting with my iPod 3G, then a 5G (whose screen is pictured above), a 1st-gen iPod Touch and lately an iPod 7G Classic with a 160GB drive in it. I’ve loved them all, but it really feels like “Device as a Music Player” is done. Apple’s shift from iPods to iPhones started that downward trend.

But it’s gone further than just the obsolescence of the dedicated player. Music storage itself has become another quaint notion. Services like Rdio and Pandora (still not available in Canada) have replaced saved music for many people. And video too is a thing that is streamed rather than “owned”.

I blame Apple. The company that started the shift to digital music has failed to innovate. The 256kbit AAC DRM file is now the pinnacle of purchasable audio and it’s not nearly good enough. Marketing phrases such as “Mastered for iTunes+” really mean “We’ve destroyed any dynamic range this recording might have had”. Sure, the Compact Disc wasn’t perfect, but mastering for that format certainly left a lot more room for the engineer to play with.

iTunes itself has become something of an abomination. More interested with selling you things than maintaining and organizing your library, it’s frustrating to use if you have any amount of content in your library. Ironically, I think the Apple Remote software available on the iPad may be my preferred interface for the new iTunes. It may feel more connected to my library than iTunes itself.

iTunes 11 is the Apple Maps of media software.

I think the field is ripe for picking. Someone could come along and ship some music library software that doesn’t suck. I would pay for it. Bonus points if it will recognize and consolidate libraries from around my home network. And if it could stream to my devices while I’m out and about, automagically compressing my music on the fly, well that’d be keen.

Android Photography

Android’s come a long way since my first fumblings a few years ago with a Dell Streak (“steak”). Both software and hardware have improved immensely since then. Sure, there are still some things that make you shake your head and question reality, but for the most part, Android 4.2 is a great platform.

In most cases when looking for a piece of software for a particular task, the problem you’re faced with is that there are too many options to choose from. So, I’m going to share a few of my favorite photo apps with you. (spoiler: none of them are Instagram).

Stock Android Camera

Yes, it’s built-in on the Nexus phones. It was a big deal with the release of 4.2 and has a fairly unusual interface. Radial menus for most control functions and a strange focus indicator. It’s a decent app, but I tend to fumble with it when trying to use it. The radial menus and icons are harder to figure out at a glance than they need to be and the control I want is never on the menu I go to first.

Ok, not a huge fan, but one nice feature in the Gallery app is a new set of built-in photo filters that are on par with just about any other camera app. Combined with Android’s impressive sharing capabilities, it lets you edit some great pictures without installing anything else.

galaxy glitch

Camera Zoom FX

This was the first alternative camera app I bought for my Galaxy Nexus. I bought it for the built-in effects, but it turns out to be a very capable camera app in its own right. With a bunch of setup options for guidelines, stability indicators, and horizon leveling, it’s already more useful than the built-in app. Add in some additional shot controls like timers, timelapse and voice-activation and you’ve got a stew goin’.

How are the effects? Delicious. You can grunge up any decent photo and make it look like you’re shooting a $10 Lomo Diana without the embarrassment of actually handling one.

sale

Vignette

Apparently this is one of the most popular Android photography apps according to the Android Photographers group on Flickr. I tried it and it’s decent. I find some of the control settings a little hard to get to though, buried in the settings menu. If I need exposure compensation, I don’t want to leave the camera’s live view to do it.

Nice effects though and good level of control if you can dig into it.

construction at the river

 

Shot Control

If there were a camera app for nerds this would be it. Every control right there on the screen. There are so many controls, that the developers made a curious choice: The live view from the camera is in a corner of the screen. This real-time resizing comes at the cost of performance. It’s slow. Yes, there are lots of controls there to fiddle with. There are probably going to be times when I pull this out because I need a very specific bunch of settings. God help me when that’s true.

Snapseed

Hey, remember Snapseed? It used to be for iOS only and it’s by the very capable crew at Nik Software. Then they shipped it for Android. And then Google bought it. You can tell because it has a G+ icon in the top strip.

Don’t let its checkered past confuse you though. This is one of the few apps built by a company with a pedigreed history in producing professional image editing software. The controls are specific and very finely tunable. You should be able to produce some great photos with this. Only problem? It’s doesn’t have camera software builtin so you’ll be relying on one of the others to take the actual shot.

Flickr

I like flickr. It’s no secret. Their app has finally gotten some love as well.

The app ain’t bad, but the built-in effects are slow. You’re better off using one of the other image editors and using flickr to upload to flickr. It also shows up as a sharing option in the Android sharing menu for smooth, comfortable convenience. Nice!

ProCapture

A late addition from the Android Photographer group. Just installed this and it looks like a very capable camera app. I’ll have to play with it a bit but it might just be a thing.

Metabones announces ‘Speed Booster’ lens adapter for mirrorless cameras

Metabones and optics company Caldwell Photographics have jointly announced the ‘Speed Booster’, a lens adapter for for mounting SLR lenses on APS-C and Micro Four Thirds mirrorless cameras that reduces the focal length by a factor of 0.71x and increases the maximum aperture by 1 stop.

Metabones announces ‘Speed Booster’ lens adapter for mirrorless cameras: Digital Photography Review.

By the power of physics! I still think they sound a little silly for the price, but could make for some neat wide-exposure lens pairings.