Tuesday, January 12, 2016

Android apps I used in 2015

Here's an update to the version of this list I wrote at the end of 2013. This is from my Android-centric view of the world, and leaving out the obvious ones like Gmail, Play, Maps and Calendar—though I will note I ditched Gmail for Google Inbox, for personal mail at least. A lot has stayed the same, though social networks have come and gone, and the wearables world has advanced.


Slack — now an integral part of my work and social lives
Swarm — replaced Foursquare
Facebook — (new!) I reversed my departure from Facebook, mostly to keep in touch with family
Instagram — show me what you cook, I really care!
Twitter — surprisingly, holds up well. Mostly professional use these days
WhatsApp — to stay in touch with European family and friends

No longer used: Path and Google+ (alas)


Evernote — my outboard brain, and importantly a universal inbox
LastPass — lifesaver, repeatedly, but...
Dashlane — now preferred to LastPass for password management
Todoist — a fan over many years, however much I look around, I keep coming back
Worldmate — my preferred travel companion app, replaced TripIt
RescueTime — slaps my wrists every time I spend too much time on Twitter
Glympse — a bit of a reach for this category, but great for contending with the vagaries of commuting in the bay area

No longer used: Any.do (can't leave Todoist), TripIt (too expensive for what it delivered)


Hue — still a terrible user experience, but we buy more and more bulbs!
Android Wear — my Moto 360 watch replaced all the fitness bands
Wiithings — keeping myself honest with the scales, nice incremental improvements this year
Chromecast — we now have three. Best AV purchase ever
Netatmo — received a well-overdue UI overhaul

No longer used: Jawbone Up


Strava — the best app for tracking running
RunKeeper — I keep this in sync with Strava and use it to track other workouts
LoseIt — one of the earliest fitness apps on Android and still working great
Google Fit — slowly becoming more useful at integrating fitness information
Sleep As Android — works well with Android Wear as alarm clock and sleep tracker


Amazon — still the place I buy most things online
Netflix — we love our Chromecast
Google Play Music — complete convert to All Access for a while now
Plex — where I digitize my DVDs to

Finally, a word about iOS, which is the same as I said two years ago. I still have and use an iPad, but for one thing only: FiftyThree's most excellent Paper app. I added a Pencil too.

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.


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.


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


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


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


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


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!