Today I learned that a five year-old who got used to staying up a little later and sleeping in during his winter vacation is hard to rouse early on the first day back to school. But, when the time comes, he’s ready for bed that night!

#tinychallenges

The grin on my son’s face, watching Star Wars (IV) for his first time, that first time X-Wings take off, is pure magic.

#tinychallenges

According to Strava, my mountain biking climb total in 2015 was 32,408 ft, and the largest single ride climb I made was 2600 feet, on Fathers Day. That sets a pretty good goal to beat in 2016, I think.

This is among the information from my years’ worth of exercise numbers. I wrote a year ago about how taking on a regular workout routine was one of the best things I started in 2014. Well, I continued in 2015, and added a lot of biking to the mix as well. It was invigorating to feel stronger and stronger as I went through the year.

Among the other numbers from my year in exercise: 36 spin sessions for an estimated 27,000 cals burned while trying my best to beat up the spin bike. I did 127 gym workouts, many of which I could never have done when my shoulders were hurt (also learned throughout the year that I can still way overdo it; so I focus on challenge by choice, or being very conscientious about how hard I’m working and making sure that’s the right level that I want to push — not surprising, this applies to lots of things beyond just exercise). It feels really, really good.

So let’s do it, 2016.

#tinychallenges

This isn’t a particularly profound TIL day. I did have a rather moving experience from which I’m taking some lessons, but I’m not quite ready to say I’ve learned it yet.

So today’s TIL is: I am secretly teaching my five year old son to count using Forza on the XBox. He’s watching me race, calling out my position, and telling me what position I’ll be in after I pass the car ahead of me. That’s pretty cool.

(Also, this is a fun and gorgeous game.)

#tinychallenges

Yesterday, I made a big pot of pho to share with family and friends tonight. We have had a relaxing, easy almost-two weeks of winter holiday and going back to work and school will be something of a challenge.

We celebrate the winter solstice for the slow return of morning light that its passing promises, but secretly I love those long, dark mornings, where I can imagine, long after waking, that I am the only person moving in the world.

I work out several times a week, and log those workouts to Runkeeper (because data!). Lately I discovered a small bug in the iOS client, in which a previously set equipment type (treadmill) was persistently being sent with my workouts, even though it doesn’t make sense for the workout type (that is, not running). Thing is, the Runkeeper client does not any longer offer the option to set that equipment type for the workouts I’m doing — this is a nice simplification of the interface, but I can’t get rid of the existing flag for treadmill.

This started to nag at me. I’ve long thought about building a workflow to quickly log my sessions rather than tapping through the app, but never got around to seriously looking into it until now. From working with Slogger, I already have an application registered with the Runkeeper API and am reasonably familiar with working with it, but until this weekend had only done so using scripted curl commands. Works great, but does not hook into iOS very well. I could build an ssh command to execute a curl command from a remote server, and kick it off from workflow or maybe a drafts action; this would have taken me ten minutes, but would have felt kludgy.

So on Saturday morning I downloaded Xcode and looked up iOS development tutorials on iTunes U. And there went my weekend.

Approximately one million browser tabs full of google searches, errors and compiles later, I have this: a tiny app preprogrammed with my two regular workout types (strength training and spinning), an array of scheduled session times, both of which I can cycle through via a pair of buttons (starting with my default of 6:15am). I also have a few extra fields to log additional data about the workout. The auth field is for my app’s token, and allows me to change it if necessary. This is a really basic replacement for a more full featured OAuth workflow, and I’m in the process of figuring out how to move this over to a settings screen so it’s out of the way most of the time; for now it’s also a convenient place to output the result of my http request to the API: if after a submission I get a 201 there, then I know the request was completed successfully.

Oh my gosh, Internet, I made an app1! I have to say, that first time it ran approximately like something I intended it to be, I was thrilled, like over the moon that I made something with buttons I could push and interact with on my phone.

So what have I learned?

I learned how to make https requests to an API using Just; how to make buttons and UI elements and hook them to actions in my code; how to use cocoapods (minimally, anyway); how to break my project using source control in Xcode sufficiently to require bringing the whole thing back from Time Machine (thanks, Synology); and how to redraw my content as the keyboard is revealed and hidden.

What get better at, among other things: I have not successfully triggered an activity spinner while my API request goes though. Fortunately it doesn’t take too long, but I want to read up on the asynchronous dispatch or whatever thing. I also really don’t know much about the schemes, targets, and so on that make up a project structure. Should also probably brush up on that little source control issue, and make more sense of the MVC thing. But hey, not bad for a weekend project.

This was fun. I have something I will use almost every day, which does lots more than scratch my original small itch about submitting the wrong equipment type. And I have a much fuller view than I did, of this world of applications that are such a big part of my life. Cool. Maybe next weekend I’ll come up with another itch.


  1. Recent changes in the Apple Developer Program allow for deploying an app to a local device without going through the App Store and its processes and costs. [return]

Autumn is a good season for night skies, here. It’s starting to dry off, so there’s less monsoon weather to chase us back indoors, and our Dark Sky City designation means there’s an attempt to keep city light from flooding out the stars. I signed up for a night sky photography workshop with Stan Honda, who is opening an exhibit at a community art center.

After a couple of hours of slideshow and demo of night sky techniques, we trooped outside and joined the nearby Dark Skies Star Party, an annual stargazing event aided by the likes of Lowell Observatory (Pluto, yo), the Naval Observatory and the university. We found a quiet stretch of paths and set up our tripods.

I started shooting with my old Pentax for the wider field of view its lenses give, but its low-light sensitivity just can’t compare to the Fuji, so I traded out quickly and spent the rest of the night experimenting with composition, ISOs, and exposure times. When I finally retreated, cold — I had forgotten my jacket in the warmish evening — I hoped I had a few keepers. With some adjusting in Lightroom, this is what I came up with.

lightbox2

One of the things that resonated most from Stan’s slideshow were the descriptions of the event of some photos, particularly an expedition to the near-Arctic to shoot a solar eclipse. He showed some photos of the lineup of viewers to the eclipse and I liked the story that the photo told, so I experimented with a few of my own in the same theme. This is of one of the telescope stations at the star party, with viewers coming and going in the dark, with their red-lensed flashlights, beneath the stars.

lightbox2

Looking back toward the main path from my spot in the fields, moon shining over us.


lightbox2 lightbox2


Stars over the San Francisco Peaks are really something. One more reason I’m happy and lucky to get to live where I do.

Via this writeup in Fast Company, Dear Data is such a cool project. Giorgia Lupi and Stefanie Posavec are spending a year exchanging a postcard per week, in which they each draw a representation of a specific behavior or facet of their lives. The front side of the postcard is the drawing itself, and the back side describes how to read the visualization.

Both images by Giorgia Lupi from “Week 38: A Week of Negative Thoughts

One of the things that really makes me love this is the intentionality and immediacy of it. I used Reporter for several months, but fell away from it; it started to feel like something that would add value someday, but in an undefined way that didn’t keep me with it. By contrast, Stefanie and Giorgia are deciding on something very particular, measuring it and then drawing it all within about a week. Unlike so much “big data” they aren’t looking for a long-term pattern or a huge number of observations. Their illustrations are colorful and capture sparks of their personality while describing whatever they chose to measure; and the differences between their drawings are a reminder of the many ways to tell a story with a common theme.

Over the past couple of weeks I’ve noticed that my iPhone photos weren’t syncing as expected to my MacBook, and therefore not being picked up by Photostream2Lightroom and pulled into my library.

Well, thanks to google and this writeup by Igor I’ve found the answer: A quick restart of the sync process appears to have taken care of the issue.

Via Karen Cravens’ tilde club site I came across Plerd (and then Jason McIntosh’s set of super cool projects). Plerd looks cool, and seeing a tool similar to the one I use makes me want to clean up my own system and share it.

This analysis by Robert Yang hits so much of what makes Invisible, Inc. a great stealth game.

You can always lose more. Unlike every other stealth game, slow and patient observation usually means slowly suffocating death here.

Incapacitating many guards the first time is easy; but they wake up again! You have to carefully time using your stun guns because they recharge slowly over several turns. Likewise, taking enemies out for good is hard and expensive, because you may never again get more ammo for that gun (if you even have something that’s effective against their armor).

Because guards are rarely actually out of the game, every turn puts you in more danger of being overwhelmed, caught without the resources to get to your goal. It’s a constant struggle between pushing just a bit further and getting in way, way over your head.

Robert’s description of a perfectly-laid out plan foiled by one tiny unexpected detail is basically the game in a nutshell: Flashes of “I’m brilliant!” colliding with “OH NO!” and it’s a great, great time.

Looks like my pre-release Apple Music thoughts are mostly bust: No API so far, no good last.fm connection, no clear way to migrate existing playlists from other services such as Rdio.

And there’s more it doesn’t have, like any kind of coherent cross-device connectivity: No way to listen on the iPhone, then pick up the same playlist or album when I get home and open up my MacBook. The ‘Recently Played’ smart playlist occurred to me to be one way to get to this information, but it’s unreliable, usually omitting about seventy-five percent of the tracks I have listened to. This is honestly really puzzling, and frustrating, especially given Apple’s emphasis on hand-off between devices. Perhaps the recently played list only shows those tracks that are in my own, actual catalog? If so, I’m even more confused about how to think about “my” music versus the service’s catalog. It’s supposed to make that distinction irrelevant, but it seems to emphasize it in unpredictable places.

There are also some interface issues. This is a clicky, clicky application. (Rdio, which has become somewhat inscrutable sometimes, is so much cleaner.)

So why keep using it, when Rdio continues to behave the way I much prefer? Well, a couple of things: First, the curated playlists are good. They are well-titled, have useful descriptions, and the ones that show up in my πŸ’“ “for you” section are a pretty good match for my tastes. This is in contrast to everything algorithmic that I’ve ever tried, which just never felt right to me. I have been enjoying listening to them a lot.

Capturing this discovery, on the other hand, is tricky: Whereas when I have a last.fm connection going, and can return to the day’s plays and easily flag something that I loved, with Apple Music, if I don’t capture that right in the moment, I’m much more likely to lose it.

Also, Siri integration is slick. I mean, really cool. Driving in the car, I can just tell my phone to play me an album or a song, or a playlist. This has made impulse listening so easy and fun. And when my son requests his current favorite song from the backseat, I can just tell Siri to play it, no fumbling through playlists and menus to get to it. (On the other hand, he will quickly understand that I can no longer use “Dad’s driving, son, I can’t find ‘Fireproof’ for you right now.”)

Finally, I really like the unification of my own library with the Apple Music catalog. While I continue to share the feeling that it’s often unclear what the status of my own music is 1, it’s great to be able to can mix something from my home catalog with a playlist from Apple Music when I’m out with my iPhone. Another benefit of this integration is that I’m listening to my own old playlists from iTunes once again. There are tracks there that I haven’t listened to in years, and my only excuse is that iTunes became such a bloated and byzantine mess that I tried as much as possible to avoid it. Now that they show up in Apple Music, I am really, truly enjoying them.

I think Apple has done something very smart with the long free trial of the service. If they iterate quickly on some of the interface details and expand on the cross-device support, during this time when they service is still free, I think they’ll have something competitive and compelling. I hope that they do, because there’s a lot here to like, but I’m not turning over my keys to Rdio just yet.

Oh, one more thing: I didn’t like the “play blah blah in Apple Music” cruft that the app adds to a URL that you share from it, so I made a quick and dirty Workflow share extension that copies a track, playlist, or album URL to the clipboard. Here it is.


  1. Is it in the cloud? Is it ‘matched’ or purchased, will I lose my canonical copy somehow? Is something happening with my metadata while I’m not looking? [return]

I love the big game lists that Rock Paper Shotgun puts together, and this massive list of RPGs is a fine example of the form. Baldur’s Gate II, FTL, Dungeon Master I mean Legend of Grimrock, Eye of the Beholder, Ultima VII, Pool of Radiance … the list goes on, with references to good contemporaries to the classics.

I don’t remember how I came across Zen on Dirt, but I love reading these travelogue adventure accounts. Don’t miss the Continental Divide Trail epic.

Wanderlust.

This is a post without a title.

Last year I made a few totally uninformed notes about Apple’s purchase of Beats, which we now know is resulting in the upcoming Apple Music – a curated, streaming radio and music streaming service that looks functionally (so far) a lot like Rdio and Spotify.

I use Rdio a lot, and I was thinking while I was driving around this morning about a couple of things that I hope Apple Music eventually will offer. The first is a hook to last.fm to scrobble the songs I listen to. Last.fm has continued to be one of those services that I just keep using. I like being able to gets its view of my musical history, and I’ve also connected it to slogger, so I have an ongoing log in my Day One journal. I would miss not having that ongoing record.

Here’s the important one, though: Apple needs to realize, especially with their intent to launch an Android app, that their target customers are already using a streaming service, and they have to help them cross the river. They need to carefully consider the maturity of services that they’re competing with: If a Spotify friend posts a playlist, I can use re/spin to build the same playlist in Rdio. And if I’m to migrate outright from Rdio, how will Apple help me move my playlists, favorites, and collections? I hope for an API, because that will also help me get my last.fm hook. I guess we’ll have some idea in a few days. Fingers crossed.

I love this Metafoundry piece about the effect of supply chain and manufacturing loss on post-apocalytic clothing:

No supply chain means that, at least in the short term, the local clothing stocks will be a major determinant of what people wear. Where I live (the northeast US), that means cheap and ubiquitous t-shirts patchworked into everything, for a start–making quilts out of a hundred thousand unneeded t-shirts. Notions (zippers, hooks, buttons etc.) will be cannibalized from worn-out clothes–even cheap zippers bring together out-of-reach precision metallurgy and polymers, and reliable YKK zippers will be sought and prized. Speaking of polymers: Patagonia and North Face and Gore-Tex outerwear will be prized heirlooms, the most valuable garments made of durable, functional and irreplaceable technical synthetics (especially needful in New England winters). No supply chains means no polymers, nor much by way of dyes (most of which are derived from petroleum), which means returning to fibres that can be grown (and grown locally, initially). Plants or animal products like wool, as well as leather (probably not black, though) and fur. This was nicely captured in Mad Max: Fury Road: the Vuvalini of Many Mothers, who gardened, wore handwoven-looking scarves and fabrics in colours consistent with vegetable dyes.

This is the most fun I’ve had on the Internet in some time.

Seriously, lots of fun.

Three Moves Ahead has had a couple of shows lately that I’ve really enjoyed. First up was their interview with some of the crew from Klei, makers of Invisible, Inc. and previously of Mark of the Ninja. I really loved Mark of the Ninja, and when I heard this interview I couldn’t resist picking up Invisible, Inc., too.

It’s so great: Turn-based stealth that combines the isometric X-COM perspective and some of its combat elements with bits of the turn-by-turn dynamics of Frozen Synapse and the push your luck action of FTL. Which isn’t to say it feels derivative; it just uses some familiar elements in such a great, fun way.

Also, it’s a tiny bit forgiving, at least while you learn the ropes, unlike FTL or Frozen Synapse: On the beginning difficulty level, you have five “rewinds” that you can use to back up to the beginning of the previous turn, and they come in so handy when you misplan, lose two agents in one round, and need to back up and think about What You’ve Learned.

After a very dry winter, we’ve had cold weather and repeated rounds of snow and rain this month, enough that this May looks to go on record as the 10th wettest in Flagstaff weather history. I complain a little, because I want to ride my bike and sit on the porch, but we do need the moisture. It makes for a spectacular scene, too. Also, I love the view from my twelve-minute commute. (This is when I don’t ride my bike to work.)

Wunderlist is a super application and my wife and I use it for almost everything list-like. But I don’t love adding items to lists using the web app’s interface: I want something non-clicky that I can capture items to from anywhere. So I was quite happy to find that they offer a developer API!

Getting a developer account and openauth key for your own sample application is easy, and with a little tinkering I put together a pair of Alfred workflows for adding items to my inbox and grocery lists.

Add to Wunderlist in Alfred - screenshot

I’d like to improve on the workflow so that it can call an external config file or shell variable instead of having the auth key hardcoded in the workflow as it is now; that will let me share the thing as a package, too. Meanwhile, if you want to try this out, you’ll need your own developer account and sample application with authorization key from Wunderlist. Then you can make an Alfred workflow that runs the following in bash (insert your own CLIENTKEY, ACCESSTOKEN, and LISTID):

curl -s -H 'Content-Type: application/json' -H 'X-Client-ID: CLIENTKEY' -H 'X-Access-Token: ACCESSTOKEN' -d '{"title":"{query}","list_id":LISTID}' -X POST 'https://a.wunderlist.com/api/v1/tasks'

Pretty sweet.

She writes about Adams on the 14th anniversary of his death:

I was honest about one thing, at least: I don’t use that pen for anything besides fiction. I’m not the type of person who collects memorabilia: I lent my signed Mostly Harmless to a friend in high school and never got it back and never really minded. My copies of most of his books are in shambles, read to shreds. But I’m precious about that pen. It won’t be used to write a shopping list while I’m alive. The artifacts of reading are comfortable, disposable; the artifacts of writing are amulets and alchemist’s tools.

Or, trying to be a better man in tech

Notes prompted in part by the scale of inequality offline and abuse online, most specifically against women in technology. I have no illusion that my writing at this personal site has impact, influence, but it’s important to me to write some of this down and toss a small rock in an already-swirling rapid.

  • My race and gender do not complicate my position in my job and the cultural things I spend my time doing, but gender and other statuses profoundly shape the experience of others. Having listened to and read those experiences, I am more aware of my charmed life as a White Guy in Tech, conscientious about the opportunities I might help make real or unintentionally block and why it matters that I try to help: because diversity where I work makes that work better, and because it helps to improve — perhaps by an incremental margin but a difference all the same, if successful — the lives of people facing structural and deeply-entrenched inequality. This by itself is an outcome that I value.
  • My own experience is richer for having a broader perspective on those of others.
    • I am better for it, and I’m trying to say that in a way that sounds as least selfish as possible: having a broader perspective is enriching, not limiting; it is not zero sum, it does not “take away” what is special about me or my life, and it makes more room for others.
    • I acknowledge that I am lucky in many ways that so many others are not: I have a good job, one that I like and which is rewarding; I have a home and supportive family; stability; safety. When I do something online (or in the office, for that matter) that activity is not marked by my race and gender the way it is for many.
    • Just as I want to be able to express myself, so should I help those around me. This is restricted in environments marked by marginalization, where we are uneasy being open and expressive.
  • I wrestle with staying out of the way vs joining some conversations because I recognize that these spaces are fraught with co-optation, risk, and safety concerns – emotional and physical.

    • Flickering the Gaslight by Gersande La Fleche shows how high the stakes are. Posting here is one way to engage without claiming space in one of those ongoing conversations. Lily Benson has written a good primer on how to engage.
    • Justice Points ep# 93, “We’re Already Here” and Episode #38 of Less than or Equal (with Kahlief Adams) have powerful conversations about allies and privilege.
    • Leigh Alexander has a guide to being helpful
    • And I remind myself that whatever solidary benefit to me of participating (“being an ally”) is not the point.
    • Having spent a lot of time getting advanced degrees in a field in which structural inequality is a core tenet underlaid with decades of quantitative findings, the facts of this inequality are something I have long understood. Yet I am still struck when I see it enacted by men so viciously mocking the difficulties of women in technology and culture, so quick to use violent imagery and ugly slurs against those who are outspoken and visible.
    • This is also one reason the “everybody is awful on the internet” argument is so tremendously hollow. This gets trotted out frequently in defense of awful online treatment of women (and all marginalized groups). At Not Your Mama’s Gamer, Alisha Karabinus takes apart this “notion that everyone gets threatened in gaming”:

    We cannot conflate targeted harassment of a woman (or all women) with general incivility in online discourse because not only are the bases not the same, but the impacts, too, are vastly different. In other words, we’re not talking about hurt feelings or trash talk here. We’re talking about pervasive, damaging behaviors that can impact an entire culture, and behaviors we rarely address or speak about honestly.

    • Another often-used justification is that all people in geek culture feel abused, marginalized and left out. Not only does this reflect an obvious and staggering lack of empathy (justifying being abusive and awful by claiming to have at one point felt bad yourself), but it’s a weird historical artifact at a time when gaming and once-niche entertainment are multi-billion-dollar industries, and STEM training/jobs are sucking all the air out of most other kinds of education and work. Geeks are inheriting the world, gang, and it’s high time that those of us who had a hard time in school because we were interested in video games|comics|programming|computers understand that so did most everybody else, albeit for different reasons, and so many have it so much worse.
    • I have stinging memories of not feeling like I belong,1 and I am fortunate to have found a community of like-minded BBS nerds (men and women) at a key point in my growing up.
    • Yet: However difficult my experience, it critically is fundamentally different from that of someone truly marginalized by institutional sexism, racism, or other discriminations.
    • I think about things that I can do to change this space positively. I can be conscientious about making opportunities and including voices. I have some opportunity to do that where I work, and I try to do so, conscientious that my impact is greater among those I know than in a twitter conversation. Meanwhile I keep listening, though I know that’s not enough. I’m taking seriously the admonition from that Justice Points episode about amplifying good rather than boosting the conflict.

Better voices

In addition to the links noted above, here are a few starting points for more, from people who are better at this than I, and a couple of recent points of research and culture war intersections that are illustrative of what’s going on.

  • Isometric: This post started out being called “How Isometric Made Me a Better Person” but that seemed too naval-gazing even for a blog post. I got to know Steve Lubitz and Brianna Wu casually back when we all hung out on App.net, and have had a great time as well as learned a lot from everybody on the show. It’s a gateway to a lot more than games; this post and the voices on these issues that I have found stem in large part from listening to it.
  • The Cool Gamer Girlfriend and Permission to Try by Maddy Myers (and a related conversation on Isometric #50)
  • Model View Culture is producing a lot of sharp work on these topics from a bunch of points of view: disability, hacker culture, feminism, race, more.
  • Shanley’s My Statement is a scary illustration of just how bad it can be.
    • It is only one of many, many such stories, from all industries.
  • Not Your Mama’s Gamer, a collective of authors behind such things as the #yesIplay tag and a ton of interesting writing (making super podcast, too).
  • How conservatives took over sci-fi’s most prestigious award, a glimpse into the current culture war that’s particularly emblematic of how regressive and fundamentally politically conservative so much of these attacks are.
  • The 5 Biases Pushing Women Out of STEM, because it’s not as simple as a “pipeline problem.”
  • How Hollywood Keeps out Women, because it’s not as simple as a “tech industry problem.”
  • Mel Chua, On the diversity-readiness of STEM environments: “But I have always wondered what I might have grown up into, if I had learned STEM in an environment that was ready for me — without me having to fix it first.”

  1. Hell, I still struggle with this, but I’m mature enough to know I’m not the only one. [return]

I really like the thinking that Joel Dueck is spinning up around privacy and facilitating payments to make building stuff online economically viable without ads. He proposes some legal and architectural tools, but notes that:

Focusing on the nuts and bolts of the web itself, looking for technical solutions, is not going to be enough to counteract these broader trends. And as I’ve said before, simply appealing to people to change their personal habits of internet usage is insufficient and ineffective. What is needed is a principled re-adjustment of the entire playing field — a political solution to a political problem.

Elsewhere, he remarks that if the economics of blogging do collapse1, he will “feel as though we lost something valuable — a truly democratic chance for people to sustain their lives through the pursuit of literacy and self-expression.” I thought about this same thing this morning, and I contemplated the worth of continuing to write and post here. The “community”, such as it was, of bloggers and readers, is much changed from when I started posting to my old home blog, way back in the pre-social media days. But here I am, all the same, tapping away. For those of us who were into this before services ate everything, it’s kind of a hard habit to break.