Making the Move From Web to Mobile

25 July 2014

I’m very excited to announce that in a few weeks, I’ll be joining Vokal Interactive as an iOS Engineer!

This is a big move for me. I’ve wanted to develop for the iPhone since it was introduced in 2007, but never seemed to have the time to learn the language and framework until early last year. After a lot of nights and weekends, and some work-week time generously provided by Lullabot, I’ve got Shoot in the App Store, and I’m ready to take on some more challenging apps.

The downside, of course, is that I must leave Lullabot in order to pursue mobile development full-time. I love the folks at Lullabot and have really enjoyed my time here, but it’s time for me to make the switch from web to mobile. And by the way, if you’re looking for a great company to work with, Lullabot is hiring!

Observing Problems

23 July 2014

Daniel Jalkut, on Core Intuition episode 146:

I don’t have to solve the problems in order to observe…a problem. And it doesn’t necessarily mean, when you observe a problem, that you condemn all of the causes of the problem.

The conversation was about Swift, but he was making the point in a broader context, and it’s. It bugs me to no end when people take the “Well, you don’t have any better ideas” position in an argument. I see this the most in political debates on Facebook, as if one can’t comment on a problem in, say, immigration policy unless one has a fully-formed solution to said problem—a problem, mind you, that is inherently complex, or else there wouldn’t be any debate about how to address it.

I’ve also been guilty of taking this position myself in the past: it’s one to be careful about.

Matt Gemmell on First World Problems

08 July 2014

From First World Problems:

The dismissed person feels judged, but the dismissive one also needs to take a long, hard look at themselves. It’s a dangerous thing to appoint yourself as the judge of another person’s problems, and whether they really ‘count’ or not.

That’s the kind of thinking that caused mental health care to be marginalised for so many decades: the idea that it could be a lot worse, so by extension you should just pull yourself together and get on with it. It’s a systemic failure of empathy.

Now, that’s taking it to extremes, most definitely. There’s a gulf of experience between mental health problems and forgetting your iPhone charger. But it’s such a corrosive attitude to casually disregard and disdain whatever someone else is complaining about. There’s a thread of sociopathy to it.

Money Poisoning

03 June 2014

Jeff Simmermon on an episode of the podcast RISK!, about rich people breaking up:

My heart soared, because like: I’m a ball short. I got a touch of cancer. But, I’m quite accustomed to being depressed, alright? Like, I will adjust.

THESE people have money poisoning, and that rots your soul from the inside out. And you gotta rub cocaine and helicopter rides and smoked salmon and shit all over yourself just to feel excited any more. I don’t have that, and that feels real good.

CocoaConf Chicago 2014

14 March 2014

This past weekend was the latest CocoaConf Chicago, and it was a blast. I guess I never wrote a blog post about it, but this was my second: I attended CocoaConf Boston back in October, but definitely enjoyed this one more. CocoaConf has several speakers who go on the road with them and give the same talk a few times, so I attended a few of the sessions that went over my head the last time around. And, since this one was local, I already knew a bunch of attendees from meetups and SecondConf, and it’s always nice to go into an event already knowing some people.

I had been fighting a cold all last week, so I just decided to get a room there at the hotel so I could sleep more instead of driving back and forth to the city. I later found out that this was a pretty popular strategy among the local attendees, and it meant that I got to hang out with people at the hotel bar on Friday night, since I was feeling a lot better by then.

I also got to show off my app Shoot during the We Made an App For That session Friday after lunch, which was pretty awesome. I got a lot of good feedback and ideas from other attendees throughout the weekend, and won the prize for best presentation, which was quite flattering.

It was a pretty fantastic weekend. The Klein family puts on a great conference, and I’m sure I’ll be there when they (hopefully) come back through Chicago next year.

This time around, I tried to jot down a couple takeaways for each session, and for a lot of them, I also had a few items to follow up on.

Makeover Your Table Views for iOS 7: James Dempsey

I’m not quite sure what I thought this talk was going to be, but it mostly focused on upgrading table views from iOS 6 to 7 and Dyanmic Type.

Takeaway: I need to review the settings on my table view controllers (since the app was updated from iOS 6 to 7), and use the pre-defined styles whenever it makes sense to, since they will resize to the user’s font size setting.

NSIncrementalStore - Bet you didn’t think Core Data could do that!: Jonathan Penn

This was one of the talks I saw back in October, and it was a little out of my grasp then. This time, it made sense.

Takeaway: Using plist files for a persistent store isn’t a great idea, but I’m going to use it anyway on a utility app I’m working on. CoreData works weird: like, the managed object context asks the persistent store coordinator to fetch data, and then the PSC asks the MOC to fetch each object…from itself.

Taking Your Automated Testing to the Next Level: Brad Heintz

I was hoping this talk would be a little more practical hands-on type stuff, but it was interesting.

Takeaway: Write tests first. Red, green, refactor—and anything goes for making the tests pass. Xcode uses Xcunit, but there are other options; in particular, I need to look into KIF for testing the UI.

Followup:

Advanced Core Data - The Things You Thought You Could Ignore: Aaron Douglas

This talk was a nice complement to Jonathan Penn’s talk, since it focused “above the line”: Jonathan focused on the persistent store coordinator while this talk focused on everything above that.

Takeaway: CoreData can get messy. It’s really hard to handle threading correctly, but incredibly important to do so.

Performance Optimization: Monitoring Metrics in Real Time: Brittany Young

I was hoping this talk would be more about measuring performance, but it was more about identifying what needs to be improved.

Takeaway: High percentages of users will just drop the app if there’s any delays or slowdowns. It’s important to measure performance because there isn’t much value in taking wild guesses about what’s wrong.

Tips & Tricks of Effective iOS Developers: Ben Scheirman

This talk was a collection of good ideas and things for me to follow up on.

Takeaway: Keep an eye on file length and the complexity of class dependencies. Pick a couple new-to-you keyboard shortcuts and practice them until they become part of your workflow. Make snippets in Xcode to speed things up.

Followup:

View Controller Transitions: Jonathan Blocksom

This was another talk I saw in October. It made a lot more sense this time, but the practicalities of transitions still seems more complicated than they need to be.

Takeaway: I need to look into interactive transitions more, because I want to allow users to drag one view aside to see the next one.

You Bought What?! Lessons From Acquiring And Running Glassboard: Justin Williams

It was nice to see a more business-oriented session among all the tech talks.

Takeaway: Running a business is hard. People who aren’t paying for the service aren’t customers, but you still need to treat them well if you hope to convert them to paying customers.

Auto Layout is a unicorn, wild and free. Learn how — and why — to harness its power and magic: Ben Lachman

I think I’m getting the hang of autolayout.

Takeaway: Turn on Editor > Canvas > Show Involved Views for Selected Constraints. Don’t modify view.frame directly.

I Love Frank Turner

12 January 2014

I have not listened to very much new music in a few years now, for one reason or another, but for the last year, most of the music I’ve listened to has come out of Frank Turner.

This is not something that I would readily admit for some time, because most of what I’ve been into for the past decade has been punk rock, and Turner is quite about softer than what I usually listen to. And yes, I am fully aware just how absurd it is to be thirty years old and self-conscious about my musical preferences.

I’m not entirely sure how I found Frank. His song Poetry of the Deed was on the Epitaph New Noise Vol 1 three and a half years ago. I wasn’t a big fan of it then, but at some point I came across his song Glory Hallelujah, which I quite liked at the time. I’m not sure when I connected the two, but in March I bought his latest album: Englang Keep My Bones, at the time. It was a great album to start with (I like the stuff before that, but less so). I particularly like the first half of the album, especially these ones:

This album always does, and always will, remind me of the front range in Colorado. I would play it while driving to and from trailheads in the mountains on weekends, and it would be stuck in my head while hiking through the rock and snow. That’s always going to be connected in my mind.

His next album was released about a month after I bought the other one, but it was another five months or so before I bought Tape Deck Heart in September, which I really can’t explain. It’s another great album:

For the past few months, if I’m listening to music, it’s this album. I got lucky back in October and got to see Frank live here in Chicago. It was a great show, and I bought the rest of his back catalogue when I got home, after not knowing half the stuff he played that night.


Anyway, enough of the history. The fact of the matter is that his music is catchy, and tends to be a lot more interesting than most music I’ve listened to in years. I mean, I still love the punk bands I’ve always loved, but let’s be honest: with the exception of Bad Religion, they don’t tend to be that intertesting, lyrically speaking. His songs still adhere to the verse/chorus/bridge structure that has served us well for so long, but he messes with that structure pretty often.

And perhaps the thing that appeals to me most: he talks a lot about death…which sounds morbid, but I find it inspiring. We are all going to die, and soon (in the grand scheme of things). It’s worth keeping that at the back of one’s mind. We have a very limited amount of time to do what we want to do with our lives. It’s not something to dwell upon, but when I’ve had a particularly uncompelling week, when I’ve done nothing memorable or interesting with myself for a while, I find the memento mori valuable.

From The Road:

Ever since my childhood I’ve been scared I’ve been afraid
Of being trapped by circumstance and staying in one place
So I always keep a small bag full of clothes carefully stored
Somewhere secret somewhere safe and somewhere close to the door

So saddle up your horses now and keep your powder dry
‘Cause the truth is you won’t be here long
Yeah, soon you’re going to die
To the heart, to the heart,
There’s no time for you to waste
You wont find your precious answers now by staying in one place

From I Am Disappeared:

And on the worst days
When it feels like life weighs ten thousand tonnes
She’s got her cowboy boots and car keys on the bed stand
So she can always run
She can get up, shower in half an hour
She’ll be gone

And on the worst days
When it feels like life weighs ten thousand tonnes
I sleep with my passport
One eye on the back door
So I can always run
I can get up, shower and in half an hour
I’ll be gone

From Losing Days:

And I used to think that I
Would never live past twenty five
And when you think like that
Each day is a gift if you survive
But I’ve survived too long for my side of the deal
And as I reach that shore I’m not sure how to feel\

I keep losing days that used to take a lifetime
In the blinking of an eye
And all these small ideas are suddenly commitments
As greatness slips on by
Greatness slips on by

From Polaroid Picture:

But in the stillness of the moment it takes for a polaroid picture
To capture our faces forever,
The world has turned a touch on its axis, and the only thing certain
Is everything changes.

From Reasons Not To Be An Idiot:

So why are you sat at home?
You’re not designed to be alone
You just got used to saying “no”
So get up and get down and get outside
Cos it’s a lovely sunny day
But you hide yourself away
You’ve only got yourself to blame
Get up and get down and get outside

From Peggy Sang the Blues:

It doesn’t matter where you come from
It matters where you go
No one gets remembered
For the things they didn’t do

My 2013

31 December 2013

When I even start to think, “nothing exciting happened this year,” I just remember where I was this time last year, because this was a big one: even without the more minor stuff, I moved twice and took two trips to Latin America, so it couldn’t have been that dull. Things were set in motion last December when Erin was accepted into gSchool and we started making plans to move to Denver.

January

  • Flew out to Denver for a couple days to find an apartment and buy a car.
  • Moved away from DC, after living there for seven years. I spent three days driving a Uhaul almost-cross-country by myself, since Erin was in Michigan to attend a funeral.
  • After unpacking the entire apartment (hey, I had to work, and she had a week or two off), Erin started the six-month gSchool class to become a Ruby on Rails developer.
  • I started actaully learning Objective-C and Cocoa after fiddling with it a few times over the past several years.

February

  • Spent a couple days meeting with a client near San Jose, and met up with Ryan and Kat while I was there.

April

  • Spent a week in Tampa with the Lullabot client services department for our retreat.
  • Went home to Buffalo to meet my brand-new niece, Mackenzie.
  • Hiked the Eldorado Canyon Trail, which was by far my favorite of the hikes I did in Colorado.

May

June

July

  • Spent a day at the Colorado Irish Festival and finally saw what hurling looks like. No, the other kind of hurling. Did NOT see Gaelic Storm because I got too much sun on the first day and was too wiped to go back for more (you’d think an Irish festival would be equipped with sunscreen dispensers the way most have Purell near the porta johns).
  • Erin finished gSchool and accepted a position at Table XI in Chicago. While I was in Portland on business, she went to Chicago with her dad to find an apartment, and took the dog (Lola) to stay with her folks while we traveled and moved. Said goodbye to another city.
  • Rented a Harley Davidson and spent the day riding around the mountains, to take advantage of one of my last weekends in Colorado.

August

  • Went to Chile for a week to attend Sarah and Rod’s wedding, and spent two days with them in Valparaíso.
  • Took the cog railwar up Pike’s Peak and felt kind of high for half an hour because there isn’t any oxygen up there.
  • My parents come out to Denver to visit for a few days. We went for a hike in Rocky Mountain National Park, and visited Garden of the Gods and Cave of the Winds.
  • Packed up everything we own (again) and spent almost three more days driving a Uhaul, this time taking the long route from Denver to Chicago by way of Mount Rushmore.

September

  • Settled into the new apartment, and Erin started her new job.
  • Erin’s sister and brother-in-law come to visit twice, on the way to and back from a road trip.
  • Attended SecondConf at Sears Tower

October

  • Visited Erin’s family for an early Thanksgiving, and brought Lola back to Chicago.
  • Attended CocoaConf in Boston and saw some college friends while there, then stuck around for an extra day to visit people in nearby Providence.

November

  • Lullabot company retreat in Mexico! We had four big houses right on the beach a bit south of Cancun. It was pretty awesome.
  • Erin’s folks came to visit us for the actual Thanksgiving, and we spent the next afternoon at the top of the Sears Tower.

December

  • Found out that I get to work on some interesting projects in the new year. I’m not sure if I’m allowed to talk about it publicly yet, so I’ll just say that I’m super excited about what’s coming up.
  • Spent Christmas back in Buffalo with my family, and made pit stops in Detroit on the way there and back to spend time with Erin’s parents.

Some misc highlights:

  • Read 22 books.
  • Watched 37 movies (the fewest in the ten years I’ve been tracking them).
  • Saw a few concerts: Volbeat, Frank Turner, Street Dogs, 6’10.
  • Did a bunch of hiking in the Rockies, but in retrospect, not nearly as much as I should have. I had no idea how much I would miss the mountains when we moved to Chicago, and I wish I would have taken advantage of them more than I did during our eight months in Denver.
  • Saw way more out-of-town friends than probably any year before. In part, this was due to conferences and work trips (Portland twice, San Jose, Boston & Providence, Boulder), but we also had several people crash on our couch on their way through Denver and Chicago.

All in all, it was a pretty busy year, and it sure doesn’t feel like a year has elapsed since we started January: it seems like just last month that Erin was freaking out about the folks wearing cowboy hats at the Denver airport, certain that we had accidentally committed to moving to some podunk little city out west (it took a day or two before she believed me that the cowboy hats were pretty well limited to the airport staff).

I have high hopes for 2014. I mostly stick to quantifiable goals for the new year (which I’m keeping to myself), but there are a few things that I’d like to do differently in 2014:

  • Get out of the house more. Frankly, this is harder for me in a major city than it was in a small one, despite my aversion to the outdoors. In Denver, it was easy: within 45 minutes of locking my front door, I could be at a trail head on a mountain; it’s hard not to leave the house when that’s an option. In Illinois, I need to work a little harder to find hiking opportunities, and I suspect that it will be too muddy to take advantage of them till late spring anyway. But, I also just need to get out of the house, even to pop down to a bar for dinner or a drink or something. For me, it’s very easy to slide straight from working-from-home to evening-tinkering-in-the-office, and there are many weeks that I don’t leave the house except to walk the dog and run errands. I need to work on this.
  • Make more friends. I have no idea how to do this. In Denver, I never really met any new people, and when I did hang out with people, it was folks that Erin knew from gSchool or her previous job. There are a few people in Chicago that I (similarly) know from college and previous jobs, but I need to actually make plans with people if I ever want to see them. I’m generally content to eat dinner or see a movie alone, but this has been an unusually lonely year for me, largely because of gSchool: for the first half of the year, I was doing everything on my own because Erin was busy with classwork. Related:
  • Attend more meetups. There are two iOS groups here (Cocoaheads and NSCoder), and I’ve attended both exactly once. I haven’t even made it to any of the Drupal meetups, the movie meetups, the weekly tech talks—and I have no excuse.
  • Read more books and watch more movies. I wind up burning so much time on stupid crap: reading Twitter and mindlessly clicking around the Internet. There are times when one needs to just veg out (10 years ago, I would have been in front of the TV), but I could be spending a lot more of that time learning new things, or at least enjoying decent movies.
  • Ship more code. I’ve been working on an iOS app since February, mostly fine-tuning and refactoring as I learn more. I’ve got ideas for at least three more, plus a couple web apps, plus some fiddly little scripts that I used to tinked with for fun. I need to get back on the release-then-iterate horse and just get more stuff on Github. If nothing else, the feeling of accomplishment (no matter how minor) fuels more coding.

In any case, I expect 2014 to be a lot mellower than 2013. We have no intentions of moving to a new city again for at least a few years, and don’t have plans for any major trips. We should have some time to get to know our new city (especially once it warms up), and I’m looking forward to that.

The Parable of OSS and Feminism

19 November 2013

Once upon a time, a n00b found an open source project. The project was an ambitious one, one that wanted to change the world for the better. A lot of people had been working very hard on the project for a very long time.

The n00b saw the value of the project, saw that it was poised to make the world a better place, and thought: I should keep an eye on this.

Some time later, the n00b was getting frustrated. The project seemed to be gaining more users, and the n00b kept seeing more and more tweets and blog posts about it, and particularly about the primarily controller used by the app. “This thing is stupid. Why is this so complicated? I bet I can help make this project much more accessible to people who haven’t used it before,” thought the n00b, n00bily.

The n00b hadn’t actually read many of those blog posts, had only skimmed some of the tweets, and hadn’t read any of the documentation on the project, but surely, the n00b brought a new perspective that would be appreciated by the project maintainers. So the n00b opened a pull request to submit a change that would gut the primary controller and make it much easier to understand, even though the n00b didn’t fully grasp how each method worked, and there were no unit tests.

And oh, how the n00b was ripped a new one. The project maintainers and users of the project piled on the n00b, and the n00b became angry. “I was just trying to help!” shouted the n00b, to the rolling eyes of everyone who had seen this play out before. Because, you see, there were already scores of pull requests just like the n00b’s, and none had been merged. The documentation for the project, and many of those blog posts that the n00b skipped, started out by explaining exactly why the controller worked the way it did, and why a gutted version like the one offered by the n00b wouldn’t work. There were years of hard work backing up the architecture of the controller, and everyone was sick and tired of having to explain everything every time a helpful n00b wanted to join in.

And that’s how the n00b ragequit the issue queue, and tweeted angrily, and grumbled about how that project would change the world if only the maintainers would be willing to coddle every n00b who hadn’t bothered to RTFM.


Like open source projects, I think the feminism movement appreciates newcomers who want to help and make a difference. And, in both cases, I think they especially appreciate those who do a little research beforehand and have enough self-awareness to realize that their first contribution is unlikely to be so simple and straightforward that it simply hadn’t been considered before.

Markdown Footnotes in Jekyll on GitHub Pages

23 October 2013

I switched to using Jekyll a few months ago, and then to Jekyll Bootstrap just the other day. Plain Jekyll and Jekyll Bootstrap both work great on GitHub Pages: just push the Jekyll directory, with your _layout and your _posts and whatnot, and GitHub Pages handles the parsing and generates your site.

My big complaint in switching was that my Markdown footnotes stopped working. If you scroll to the bottom of this old post, you’ll see a footnote there. Yesterday, that displayed as [^1] because the redcarpet Markdown parser that I had been using didn’t parse footnotes.

Thanks to someone named Brian Willis on StackOverflow, I now have working footnotes. I just had to switch my markdown processor to kramdown. In _config.yml, change the markdown: line:

markdown: kramdown

If markdown: isn’t in your _config.yml already, you can just add it on a new line.

Default Markdown File Extension in TextMate 1

20 October 2013

I still use TextMate 1. It ain’t broke, so I ain’t fixed it.

Changing the default file type for TextMate is easy enough; I posted the howto for that years ago. In short, just run this command from the command line to switch the default language to Markdown:

defaults write com.macromates.textmate OakDefaultLanguage 0A1D9874-B448-11D9-BD50-000D93B6E43C

So that’s great: TextMate now uses Markdown by default.

But, I’m picky, and by default, new Markdown files are saved with the “mdown” file extension (ugh). I prefer “md” because it’s nice and tidy and nerds need these little things to fuss over.

Here’s how you can change this default file extension:

  1. Click on the Bundles menu, expand Bundle Editor, and click Show Bundle Editor.
  2. In the list at left, find Markdown and expand it. Find the “Markdown” line preceded by a gray L icon.
  3. The second line in the right panel lists the file extensions for which TextMate will use the Markdown bundle, and the first item in the list is used as the default extension when you create Markdown files in TextMate. Move “md” (or whatever you want) up to the front of the list.
  4. Restart TextMate or select Reload Bundles under the Bundles > Bundle Editor menu.

Markdown bundle config screenshot

And that’s that. Create a new file and initiate a save, and you’ll see untitled.md where it had been untitled.mdown.

Markdown file save screenshot