Wednesday, June 25, 2014

My Top 5 Announcements From Google I/O 2014

Chromebooks running Android apps—I love a lot about the zero-administration ease of use of
Chromebooks, but it's true to say that using the web version of my favorite apps is less than stellar. Seeing Evernote running its tablet app on Chromebook is exciting. This may be the development that would move me away from OS X for daily computing needs.

App and web integration—on a phone, the web feels like a guilty secret, and on the web, phone apps feel like a different country. Bringing these closer together through OS hooks makes a lot of sense and will lead to a better user experience.

Google Cloud developer environment—it's all about developers, developers, developers, and I've seen nothing else that comes close to the Google Cloud developer and debugging tools. It's the sort of thing that makes me wish I'd not given up writing code for writing words!

Smart watches—I've enjoyed my Pebble watch for the way it takes ambient notifications away from the phone, and I'm keen to see this develop. Android watches seem to take the bits that work (notifications, voice recognition) from Google Glass and put them on the wrist.

Google Cardboard: a DIY way to experience virtual reality with your smartphone

Cardboard—what a fun hackery way to play with VR! I love the Maker prototyping spirit.

My top one flunk? Nothing about Hangouts and Google Voice integration. As customers, we're overdue understanding how that's going to play out.


Saturday, January 4, 2014

Three Things To Do When You're Feeling Down

Humans. We have great and wondrous wetware governing our actions and moods. But it gets buggy from time to time. Here's my own chart for dealing with the blues.


Other things like eating, drinking and complaining to anybody who will listen also work for a short while, but have significant adverse side effects.

Of all these, the first step—STOP—is the most important. There are no awards for going through life beating your head against the desk.

Inspired by Rands' The Builder's High.

Thursday, January 2, 2014

The Way You Think Puts The Fun in Functional

It's easy for programmers familiar with the regular, procedural, way of coding to dismiss functional programming. Functional programming requires a different way of thinking, and as humans we come pre-programmed with the idea that different = bad.

I don't write this in order to convince you on an objective basis, but I do want to share that for me, thinking functionally is just good fun. One of the great shames of procedural programming is that it requires you to emulate the computer in your head, which seems pretty wasteful.

Here are a couple of small examples that might tickle your fancy.

String replication

This is one of the oldest problems in data processing, ever since we padded fields with zeroes or used multiple underscores to draw lines on a report. Given a string, write code to replicate it several times. Turn "A" into "AAA", for instance. 

Here's how you probably think about this problem by default:



If you were asked to write some Python code, you might scribble out something like this:
res = ""
for i in range(0,3):
  res = res + "A"

However, now you're thinking like a computer would. Get a thing, add another thing, and so on. You're thinking about the process, not the data. Consider it another way, from the point of view of the data itself.

The string "AAA" is actually a snippet from the string of infinite "A"s, stretching on into perpetuity. So, instead all we want is the the beginning of that "ideal" sequence:


In Clojure, a functional language, you write that as something like:

(apply str (take 3 (repeat "A")))

(The apply str turns a list of "A"s into the string we want. Clojure does something called lazy evaluation, which means we don't need to bend the rules of physics to recover the infinite list of "A"s).

Now, I'm not saying it's any easier or better to understand, just a different way of thinking about things. Let's try another example.

Rotation

Consider rotating a carousel of list items. Again, a common enough problem: they might be images on the front page of your web site, for instance. Here's how you likely think about this by default:



If you've some familiarity with data structures, this looks like a first-in-first-out queue to you, where you're removing the head item and stuffing it back on the tail each time. In Python, this operation looks a bit like repeating a single rotate operation for as many rotations as you want, twice in this case:

mylist = mylist[1:] + [mylist[0]]

Here's another way to think of it—any rotation of the list is actually a window onto a repeating sequence of the list itself.


So, in this case to rotate twice, we just move the "view" along twice over the original sequence. With a little thought, it looks like this in Clojure:

(take 5 (drop 2 (concat mylist mylist))

Fun, huh?

The trick is this: instead of worrying how the computer will do the operation, we concentrate on the shape of the data itself, and let the computer figure out how to do things efficiently.

It's amusing and brain stretching to think in this way, and even if you don't end up programming in a functional language, it will help you think data-first in the language you do use. It is, for example, quite possible to write many expressions in a functional way in Python.

It's also, for the record, possible to write terrible Clojure and try and solve problems the procedural way!

If you enjoyed this, I suggest tackling some of the problems over at 4Clojure.

Tuesday, December 31, 2013

Android Apps I Used in 2013

Shamelessly aping MG Siegler, here's a list of apps I used most in 2013. This is from my Android-centric view of the world, and leaving out the obvious ones like Gmail, Play, Maps and Calendar. I'm going for a categorized approach.

Social

Foursquare — love seeing the world as my friends travel through it
Google+ — unsurprisingly
Instagram — I have some very talented friends
Path — it's a weirdly compelling life-journaling experience
Twitter — has gotten steadily worse this year, alas

Productivity

Any.do — though I spent most of the year with Todoist, liking Any.do's lightweight approach
Evernote — my outboard brain
Google Keep — shopping lists!
Google Now — the most useful app of all 2013
LastPass — lifesaver, repeatedly
Todoist — a fan over many years
Tripit — still useful, though Google Now is eating away at this

Devices

Hue — not the greatest app, but the lights have been a great discovery
UP — this device has been a big part of me getting in shape this year
Wiithings — love the Wiithings scales
Netatmo — crazy eccentric app, but fascinating monitoring my environment

Fitness

RunKeeper — very well designed app that works well
LoseIt — one of the earliest fitness apps on Android and still working great

Entertainment

Amazon — it's bad to have shopping as a hobby, right?
Netflix — winning when together with Chromecast
Plasma Sky — polished and addictive casual shoot'em'up
Reddit — a guilty secret: not sure it even counts as a pleasure
WordOn — nicely balanced word game

Finally, a word about iOS. I still have and use an iPad, but for one thing only: FiftyThree's most excellent Paper app.

Geek On The Go: Staying Fueled And Healthy

I'm a relentless optimizer and a gadget nut. If something sticks for more than a few months, then it's likely to be a decent fit for my lifestyle. The idea behind the "Geek On The Go" blog posts is to share the best equipment and habits I've found for travel as a technophile: check out the other articles in this series.

The best way to look after your health is to have the default and easiest choice be the most healthy one, and when you're traveling this can be hard. The chief enemy is running out of fuel, then being tired when it comes to deciding what or where to eat.

Here are a couple of ways I've found of making better choices that help me keep going.

First up are Kind Bars. These things are amazing. They provide 180-210 calories of energy that's released slowly, and they taste great. By that I mean, they don't taste like cardboard. As Kind advertise, you can both recognize and pronounce the ingredients. Being gluten-free helps a lot too for me. I buy boxes of the things and keep two or three as a permanent fixture in my laptop bag, as well as keeping a couple in the car's glove box.

For long journeys, cross-country or international, I also take a packet or two of beef jerky. In the worst of all worlds you can fool yourself into thinking that makes a meal. It can be a lot better for you than the 24-hour club sandwich your destination hotel offers!

The second thing my travel bag always has is a water bottle. Staying hydrated is a great way to avoid headaches and make better eating choices. Specifically, I'd recommend one with a built-in filter. It's not that the filters sterilize water, but they can help manage the taste if all that's available is hotel tap water. Some airports these days also have fill-up stations for bottles too, though I'm still often doing the awkward practice of filling these up at drinking fountains. I've used both these bottles successfully in the past, the Brita hard-sided filtering bottle, and the squashier Bobble bottles. The Brita tends to leak a bit on airplanes, though, so be warned. If you're flying, get into the habit of visiting the bathroom before going through security and emptying your water bottle out.

The trick to these is to buy a bunch: at least one for the car and one for your travel bag. Even better, have one extra in the kitchen to fill up and take with you.

Finally, get to know the signs your body is sending you. If you're getting grumpy, you probably need to take a bite to eat!

Monday, December 30, 2013

The Self Importance of Registered Trademarks

My first memory of encountering trademarks is on cereal boxes as a kid. Over breakfast I would read the box, do whatever puzzle is on the back, and notice the sprinkling of ® and ™ symbols over "Nabisco", "Shreddies" and the like. I imagine it fueled my lifelong interest in typography, as an eight year old I certainly had no clue what they were actually for!

Sadly, today I mostly encounter these marks as a symbol of ignorant self-importance. The proud display of trademark symbols proclaims a belief that success is a matter of legal procedure and large commercial deals: the way things used to be. And more often, it reeks of a tone-deaf self importance.

I think most of us are perfectly smart enough to understand that the Academy Awards, that is, the Oscars®, are a thing because they're a movie industry institution. Furthermore, the institution long pre-dates the obsession with protecting the brand. Rendering "Oscars" all the time with the ® serves only to underline the massive commercial interests behind the entertainment industry, and distance them from the customers. Ironically, the same people without whom they wouldn't have an industry at all.

The situation gets even worse in the world of enterprise software. Check out the screenshot I took of the TIBCO home page, and these guys aren't even the worst offenders.


There are legal reasons to protect one's trademarks, but there are ways and means to do it. Companies with a deal more self confidence don't feel the need to sprinkle them everywhere, see Oracle or Microsoft's home pages, for instance.

Marketing is a conversation. I always think of it as a dinner party. Nobody wants to talk to the person who can only talk about themselves, especially when their first move is to proclaim how important they are. At the end of the day, sprinkling your page with ® and ™ is just that. Another case of "if you have to say it, it probably isn't true."

Monday, December 23, 2013

Geek On The Go: Mini Jambox

I'm a relentless optimizer and a gadget nut. If something sticks for more than a few months, then it's likely to be a decent fit for my lifestyle. The idea behind the "Geek On The Go" blog posts is to share the best equipment and habits I've found for travel as a technophile: check out the other articles in this series.

Mini Jambox and Jambox together
When you travel a lot, you want to find a way to make whichever room you're in feel a bit more like home. Music, podcasts or Netflix help a lot. I can never be bothered to battle with the TV remotes in hotel rooms, and even if I do, there's only garbage on most of the time.

Unless you want to wear headphones—not something I would even try in the shower—you'll have to make do with the tinny sound of your tablet, phone or laptop. Enter Jambox: a small box that makes a pretty big sound. Although there are imitators around, Jawbone's Jambox was early on the scene and sets the standard for Bluetooth speakers.

Unfortunately the original Jambox was also just a little bulky and heavy. The new Mini Jambox fixes those problems, and retains the same great sound. Pictured, for comparison, are the two together. As well as being smaller, the Mini has a refined industrial design with a pleasing aluminum enclosure.

All the Mini's other features work like you'd expect. The new Mini has a much improved physical interface, and great battery life. A big bonus for me is the speakerphone mode, letting you turn pretty much any room into a good place to have a conference call.

Throw one in your bag and make your next hotel room feel a little more like your own space.