Leaving IBM Behind

This week, I’m starting a new job (more about that later, I’m sure), and I’m ending my relationship with IBM. I enjoyed quite a few things about working on Server-Side Swift, but IBM is a really big company, and I tend not to enjoy the internals of big companies. From what I’ve seen, the bigger the company, the more disconnected I feel from what’s going on. After a couple of reorganizations at IBM, I felt I’d completely lost the thread of how the goals of the company were connected to my contributions.

 1 min read

Transmit: Don’t Panic on Pro iPad Apps

There’s been a lot of talk lately about Panic Ceasing Development on Transmit. It’s once again lead to a bunch of gloom and doom about making a living on the App Store and the future of pro apps on the iPad. Personally, I think this isn’t about the iPad business model - I think it’s about market fit. I bought Transmit for iOS. I don’t remember the last time I used it.

 1 min read

New Jekyll Blog, New Resolutions

As 2018 draws to a close, I’ve revamped my blog again, this time using straight Jekyll and my own fork of Artem Sheludko’s Flexible Jekyll theme. My old blog was on Octopress, and it seems to be abandonware, and with GitHub doing Jekyll natively now, it seemed to make sense. So now that I have a new blog, I’m resolving to write more, spend more time reading long-form text (books and articles written with expertise and thought), and spend less time on short-form text (hot takes, social media and the 24-hour news cycle).

 1 min read

Anchored to the Bottom: Hypothesizing the Root Cause of Low App Store Pricing

There’s a race to the bottom for prices on the App Store, and many developers (myself included) don’t like it. Some developers wonder if Apple could have stopped it. Others think the free and paid apps are different markets. Despite my respect for Charles, Daniel and Joe (with whom I’ve been arguing about this on twitter) I don’t think so.

The cause (I believe) of the race to the bottom is the existence of so many popular, quality, free apps, built largely with VC money. When users are given, free of charge, quality apps that took hundreds of thousands (or millions) of dollars to develop, it skews their perceptions of what apps should cost, and that in turn pushes down the price the market will bear.

 3 min read

App Accomplshed is a Best-Reviewed Addison-Wesley Book of 2014

As 2014 draws to a close, my publisher has released their list of the best reviewed books they published in 2014. I’m honored to be able to say that my book, App Accomplished was one of them. To celebrate this, they’re offering 40% off the eBook until January 22, 2015. And if you’re still on the fence, you can read one very thorough review here and the rest here on Amazon.

 1 min read

HULK BASH! - The Internet is Broken, But My Part is Fine

Well, the Internet is broken again. It sucks to be us (and by “us” I mean “people whose income depends on a working Internet”). I’ve been hacked a lot over the years. The first Unix machine I ever had root on was hacked within a week of me becoming responsible for it — because it was one of the few unmetered machines at the university where I was working my way through school.

 2 min read

Fragmented Capital - It Just Got Harder to Be an iOS Indie Developer

With Apple’s announcements yesterday, it just got a lot more expensive to develop for Apple’s ecosystem. I’ve written before about why it’s important to test your code on as many different devices as you can before you ship. That’s been getting harder and harder over time, but it just got a whole lot worse. Up until now, Apple pretty much only released one new iPhone a year. Yes, they released two last year, but the 5C wasn’t all that different from the 5 for programming purposes, so many of the devs I know skipped it.

 2 min read

Making the Most Of Your (iOS) Dev Conference Experience

Next weekend 360iDev starts, and last weekend was the first CocoaConf of the fall 2014 season. I’ve seen on twitter at least one request for advice from a first-time attendee. I had more to say than I could fit into a tweet, so I thought I’d respond here.

Core Theme: It’s All About the People

There’s a lot going on at conferences, but the most important thing to remember is that you have access to people at conferences that exists no other place. Making the most of your experience (and time and money) is all about making the most of your contact with the people around you.

 8 min read

Just Because There Was a Bubble Doesn't Mean App Store Developers Are Doomed

Let’s just call it what it was, shall we? We had an App Store Bubble.

It’s deflating now, although (at least with games) there are still remnants.

Take a deep breath. It’s all going to be okay.

When I started working on mobile apps back in 2005 on Palm devices, we had horrible distribution by today’s standards. There were no integrated payments, no integrated stores. People had to buy your app, download it to their PC, and then copy it to their PDA via a serial cable. And yet, even back then, people made a living at it (although, I never managed to do so).

I don’t make my living from my own apps now, either. I’m not an iOS indie, I’m a consultant/freelancer. I’ve tried being an indie, and I’m not good at it (and I’m one of those weird people that actually likes consulting). But it is possible to make a living from iOS app revenue, because many people I know from my consulting practice have and do.

But let’s think for a minute about where we are before we call the App Store a disaster.

 3 min read

"App Accomplished" Nearing Accomplishment

It’s been a long time since I’ve done much (really any) blogging, but hopefully that drought will be coming to an end soon. I’ve just turned in my 13th (of 14) chapters of my upcoming book, App Accomplished. It’s been a lot of work. I knew it was going to be a huge time commitment, and I wasn’t wrong. There were many times I wondered if I would ever be done, but now that I can see the light at the end of the tunnel, it feels really good.

 1 min read

I Am Now Officially Writing a Book

I’ve been working on writing a book for some time now. It’s been through many stages, conversations, outlines, contracts, etc., etc. But for some reason, it never felt real, until now. Oddly enough, the thing that made it feel real was that I found out the book has been issued an ISBN number. I’m not exactly sure why that made such a difference - maybe it’s all the years I’ve spent writing applications for which the unique ID in the database was the de-facto proof of existence.

 2 min read

Migrated from SquareSpace to Octopress

I’ve moved my blog from Squarespace to OctoPress. I’ve gotten more and more frustrated with SquareSpace over the last couple of years. They moved to their new version 6 product, but it has no API access. This is a real annoyance for me, but SquareSpace doesn’t seem to care. So my only options for adding content there are their buggy web interface, their even buggier iPad app, or stay on their old version 5, which is very buggy, and not getting any development resources.

 1 min read

Finding relevant WWDC videos

As I’ve said before, I find the WWDC videos to be invaluable and I try watch all of them eventually. But there are a lot of them, and it can be hard to find what’s relevant. And a lot of them I go back and watch again when I start working with a different part of a project. So I’ve developed a trick, and I thought I’d share it with you all.

 2 min read

New Work In Progress - Million Words: Multiplayer Crossword Game for Parents and Kids that Grades on a Curve

Although I do iOS Contracting to pay my bills (at least to date), I hope one day to earn a living from my own apps, and, although it’s not ready for release, the time has come to unveil my new project.

GamePlay ExampleMillion Words is a turn-based crossword game where you’re scored not by what letters you managed to get into your word, but by the grade level of your word, relative to your age. This way my six-year-old daughter could play “HELLO” and I could play “HELICOPTER” and we would get the same number of points (more or less).

 5 min read

My Top 5 factors for iOS Contracting Success

About a year ago now, I was contemplating leaving my day job and becoming an indie* iOS developer. My last day working in a cube farm was June 30th, 2011. Now, as I pack to leave for WWDC in the morning, it occurs to me how much my life has changed since I made that decision.

When examining my finances in preparation for this trip, I determined that in my first year as an indie I’ve made within $1000 of the amount of money I made in salary my last year as an employee, while spending more time with my family and enjoying my work so much more. Personally, I consider that to be a success.

Looking back, I can think of 5 things that I did that I think contributed most to that success, and I wanted to take this opportunity to share them with you all.

 4 min read

What I Learned During my Mac App Store Review

Two things happened on Thursday that made it obvious to me what I should write about this week. Mountain Lion was announced, and my first Mac App was approved for the Mac App Store.

Even though iDevBlogADay is about iOS programming, more and more of us are moving from iOS to the Mac. With the announcement that GameCenter will be coming to OS X, I’m guessing that more iOS developers might be thinking about coding for the Mac now than might have been last week.

So today I’m going to talk about my experience in getting my first App on the Mac App Store and specifically the differences in the approval process between the Mac App Store and the iOS App Store.

 8 min read

HTTP Testing to the edge on iOS: The School of Hard Mocks

I’m a big fan of Automated Testing, even on iOS projects, but even when I was doing mostly Ruby, Java and C# work, I was never a big user of mock objects. Now, I’ll admit that Mock objects can be useful under some circumstances, but I’ve seen them used too often in cases where a bunch of different developers each build their own little fiefdoms of their own code surrounded by Mock Objects where they interact with anything else.

 3 min read

Using Regular Expressions Part 2 - The Cocoa Connection

Last time, in Part 1 of this series, I wrote about the basics of regular expressions, and the phrases I tend to use. Today, I’m going to talk about the mechanics of how I use Regular Expressions in Cocoa.

##But first, an historical diversion

In my opinion there are, two different ways that programming languages implement Regular Expressions: The perl/ruby way, and the Java/C#/Python/Cocoa way.

In ruby and perl, regexes are implemented directly on the String type, whereas in the other languages, there a separate object that contains the functionality. Here’s what you need to know to do a regex substitution on a string in ruby:


clean, easy, and immediately useable if you know what pattern you want to use.

Here’s what you need to know to do the same thing in Cocoa:

+[NSRegularExpression regularExpressionWithPattern:(NSString *) pattern 
options:(NSRegularExpressionOptions)options error:(NSError **) error]

-[NSRegularExpression replaceMatchesInString:(NSMutableString *) string 
options:(NSMatchingOptions)options range:(NSRange)range 
withTemplate:(NSString *)template]

which is not clean, not easy and contains a bunch of stuff you have to go look up to be able to get started. What are NSRegularExpressionOptions and

NSMatchingOptions? What’s a template? Do I really have to create an

NSRange for this? And that leads to the obvious question: Is all this effort really worth it?

Now I don’t know about you, but I don’t want to spend any effort remembering any of those option parameters, and I don’t want to take the time to look them up any time I want to use a regular expression. To me, the beauty of Objective-C is that it gives us the ability to build most of what you need to know directly into the method signatures.

 7 min read

Using Regular Expressions and Retaining your Sanity

At a recent Austin, Texas Cocoacoder meeting, I made an offhand comment giving someone a regular expression that would help with a problem they were having. That led to two things. First, I was asked to put together a presentation (which I’ve been working on) on using regular expressions to give at an upcoming CocoaCoder meeting, and second, I was asked why on Earth anyone would use something as opaque and unmaintainable as a regular expression in this day and age.

 5 min read

360iDev Conference Notes, or How I Spent my September Vacation

This Thursday, I got back home after four days at 360iDev 2011 in Denver. I went last year, which was easy for me because it was in Austin where I live. I was concerned about the extra time and extra money it was going to take to go this year, since it was in Denver. Now that I’m back, I’m so glad I went. I have no hesitation about recommending it to other people, so that’s what I’m about to do.

 11 min read

Steal This Code and Protect Their Data: Simplifying KeyChain Access

##The Code The last couple of months, I’ve been working on my first Mac App (more on that in a later post). As part of this App, I’m calling a REST API that requires that I have the user’s password for that service to use in the API calls. Although that API is a minor part of the App, and although the service doesn’t have horrible consequences if someone gets the user’s password for it (in my opinion at least), there was no way I was going to store that password on disk unencrypted.

 4 min read

Not Feeling Entitled So Far (Sandbox or Dropbox, Pick Only One)

After reading this useful post, I thought I would take a few minutes and enable entitlements on my current Mac App project, just to see how it went. I thought I’d take a minute and blog about what I learned, both so I remember the next time I want to do this, and because I didn’t find any resources out there that explained some of this, so I had to do trial-and-error on some of it.

 3 min read

If you want facts, Indie, I've none to give you, at least not yet.

As I’ve written before, I’m very optimistic about the state of iPhone and iPad App development. I’ve published several apps on the side, and while I’ve worked on several Apps at my day job, Apps was only part of my day job, and I didn’t get a chance to focus on mobile the way I really wanted to. Well, today, that all changes. My last day at my day job was the last day of June, I took a long 4th of July weekend off, and now I’m moving into App development full time.

 2 min read

DIY Standing Desk Round 2 - Home Edition

I wrote previously about the Standing Desk I use in my cube at work. Recently, I decided that it was working so well for me that I wanted one at home, too. At home, I didn’t have a cubical I had to work with, so I went for a different design. I wanted something adjustable so I could get the height exactly right, but I didn’t care about being able to adjust it on the fly (once I got the right height I knew I wouldn’t care about sitting down at it or anything).

 2 min read

How can you edit, build and install iPhone and iPad Apps without being near a Mac?

I’m going to walk you through the process that XCAB uses (These steps are taken from this SlideShow). I have a refurb mini in my Living Room that I bought to be an Home Sharing server, and it’s more than up to the task. I’ve run it on my laptop, too, from time to time. As far as the iOS device, an iPad is obviously better to use for editing, because of the screen real estate, but the process is the same for both.

 2 min read

Video Demo: How to program an iPad by using an iPad, no jailbreak required

Here’s a video I put together to demonstrate how to use the code that I wrote that I blogged about last week to program an iPad with an iPad, without having to lug your laptop around with you (or jailbreak your device): Please excuse the fuzziness, I recorded it from my iPad 2 using a setup that converted it to a Standard Definition Analog TV signal along the way. Hopefully, it is close enough that you can get the idea of how it works.

 1 min read

Programming an iPad with an iPad: Putting the "Mobile" into Mobile App Development

This is a talk I gave on Thursday at the Austin CocoaCoder group (and here is the PDF if you don’t do Flash): Developing iOS apps on your iPad with XCAB View more presentations from Carl Brown The code is here on GitHub, and you’ll need this version of iOS-BetaBuilder and accounts with Boxcar and Dropbox. It’s not perfect, yet. There’s no provision for managing XCode projects or xib files (you’ll still have to do all that on the Mac), no auto-complete or refactoring or debugging or instruments and the lag and long cycle time gets old.

 1 min read

Blog Moved to SquareSpace

Even though Blogger is back now, I’ve moved my blog to SquareSpace. Truth be told, I was never particularly happy with anyway, and I don’t mind paying for decent software and services, and the SquareSpace iPad app is the best blogging experience on the iPad I’ve found, so the Blogger Outage was the kick in the pants that I needed to make the switch. Glad I did.

 1 min read

Mobile Apps - Boom or Bust? Sherman, please set the Wayback Machine for 1994, and then 1853

In the last few days, I’ve seen reports that Mobile Apps are repeating the 1996 expansion, and reports that Mobile Apps don’t provide a viable business model. I think that there are elements of truth in both articles, but I don’t think either is an adequate depiction of what I’m seeing. Let me see if I can explain. Like others, I feel like I’ve been here before, but for me the year wasn’t 1996, but 1994.

 2 min read

Fixed Price iPhone App Proposals - One Contrary Consultant's View

I’ve seen a some traffic lately about billing and proposals for writing iPhone apps. Most of what I’ve seen revolves around hourly rates, but I think that’s not a helpful way to go, so I thought I’d chime in with my opinion. I’ve been a consultant off and on for the better part of my career, starting with EDS in 1993. I’ve worked for different consulting shops and independently and I’ve read extensively on the topic.

 4 min read

AutoJournaling with VoodooPad - moving toward Interruptible Programmer Nirvana

Since I read the Interruptible Programmer, I’ve been trying to do a better job of handling interruptions. Well, specifically to reduce the effort it takes me to get back to where I was before the interruption happened. I and switch to a new task very easily, but my brain isn’t wired to get back to where I was, leading to much frustration (and lots of misplaced coffee cups that happened to be in my hand when I started answering a question when I was away from my desk).

 3 min read

360iDev Impressions - Day 0

The first class I took was Kendall Gelner’s Advanced Debugging class. It was really, really good. I learned about using the Mac “User Interface” instrument to record and play back simulator events for debugging and how to create custom instruments with DTrace. It was a well organized, very useful talk. Sunday afternoon I took Saul Mora’s Unit Testing that Doesn’t Suck class. It didn’t go as well. The class was predicated on the attendees having GHUnit and MacRuby, and the hotel WiFi completely failed under the load (and not for the last time during the conference).

 1 min read

360iDev Impressions - Day 1

Monday morning, David Whatley did a great keynote that was based on this video. He talked about what happened at his company when he instituted a Results Only Work Environment. It was very interesting, and ended with this. Which is the coolest way to end a keynote, ever. I started with Tom Frauenhofer’s Cocos2D class, which is probably the class in which I learned the most the whole conference, but that’s largely because I had never touched cocos2d before, so I had a lot to learn.

 2 min read

360iDev Impressions - Day 2

Tuesday opened with a informative panel that covered a bunch of issues including the upcoming Mac App Store, and Android vs. iPhone development. Then on to Tim Burks’ Get Your Head in the Clouds talk. I learned about a lot of really cool tools I hadn’t dealt with, especially ASIHTTPRequest, which I think I will find a lot of uses for. Tim was very prepared, but it was at times a difficult talk, as he got questions ranging from subtle differences between Heroku and AppEngine to “What is this Amazon S3 you keep mentioning?

 2 min read

360iDev Impressions - Day 3

Day 3 started an hour later (to give us time to recover from the party or the Game Jam or (for some crazed souls) both). We went through a review of the people that wanted to present their apps. Lots of very impressive accomplishments for such a short time. Next, I went to Brandon Alexander’s talk on Interface Builder. It was a rough talk (like Time Burk’s the previous day) because there were obviously some Interface Builder experts int he audience, as well as some people who don’t seem to have ever used it before.

 3 min read

360iDev Impressions - Overview

I got back last night from the latest 360iDev conference (my first time to attend). I had a great time and learned a lot, but most importantly, it provided a lot of motivation I really needed to keep working on my apps. I went through my notes to reinforce my memory while it’s reasonably fresh, so I figured I might as well post my notes. Pre-conference class notes start here, and continue to Monday, Tuesday and Yesterday.

 2 min read

Color Mixing with Multitouch

OK, It’s more fun and more challenging now, although I’m not sure anyone would buy it, even if I polished it. It was way too easy, so I took a cue from @ OwenGoss’s Dapple and put in a color mixing element. So now there are 6 colors of spaceships and 6 colors of shields but still only 3 buttons: So if you want to block the green aliens, you have to hit the Blue and Yellow buttons at the same time while the green spacecraft enters the atmosphere.

 2 min read

It's a Game! (Not sure if it's any fun, yet, though)

Movie code starts ! Movie code ends ! So it actually kind of looks like a game now. I need scoring, I guess, and some consequences, but the idea is there. From The List: Get a cocos2d hello world screen showing the big blue ball royalty-free NASA supplied image Get a quick sprite to be the bad guy on the screen. Cover the world in an opaque block when screen is touched and restore it when touches end

 1 min read

My plan for world (and self) deprecation

While I’m waiting of my wife and 4 year old to meet me for dinner, thought I’d jot down a quick list (it doesn’t count as starting until I open XCode, right)? Get a cocos2d hello world screen showing the big blue ball royalty-free NASA supplied image Get a quick sprite to be the bad guy on the screen. Cover the world in an opaque block when screen is touched and restore it when touches end

 1 min read

Quick concept art

Threw this together in DrawIt (scaled down to save bandwidth):

 1 min read

Status Update: Primary-Colored World

Movie code starts ! Movie code ends ! Really remedial, but something is actually happening. Only took 4 and a half hours to get colors to show up. But, as for my list: Get a cocos2d hello world screen showing the big blue ball royalty-free NASA supplied image Get a quick sprite to be the bad guy on the screen. Cover the world in an opaque block when screen is touched and restore it when touches end

 1 min read

Talking to Myself

I’m going to keep writing updates to RapidWeaver locally - Although I have no idea when I’ll have enough bandwidth to actually publish them. Kinda takes the fun out of it. In any case, I have the ship moving (until it hits the bottom of the screen). It’s at least looking more like a game now. Next up: Conveyor Belt

 1 min read

The Sky is falling!

Movie code starts ! Movie code ends ! Or at least the aliens are. Get a cocos2d hello world screen showing the big blue ball royalty-free NASA supplied image Get a quick sprite to be the bad guy on the screen. Cover the world in an opaque block when screen is touched and restore it when touches end Make the alien move. Make the alien able to collide with the block.

 1 min read

Confessions of an Inept Game Designer: 360iDev Game Jam Post 1

I’ve written one game my entire life, and I think I was 11 at the time, and it involved PRINT@ statements on the TRS-80 Model 1, so I don’t exactly consider myself a game designer. That said, I’m attending the 360iDev conference, and they have an all-night game-design session they call the Game Jam, and it sounds like too educational an opportunity to pass up. And if I’m going to remember much after staying up all night, I’m going to have to write it down, and I figure there are worse places than my blog, so here goes:

 2 min read

My iPhone is dead. Long live my iPhone! Today I wonder, how did I ever make it through college?

My iPhone died. Well, not died necessarily, but it’s dead to me. I was upgrading it to the newly released 4.2 Gold Master, when it threw a fatal error. Can’t upgrade. Tried going back to 4.1 - same error. So that sucks. Made an appointment at the Genius bar at the apple store for this afternoon. I’m confident they’ll fix it. But here’s the problem - what do I do between now and then?

 3 min read

New iPhone Secured. I love the Apple Store. no more iTunes error 1013.

So, after my iPhone 4 bricked with a BaseBand update error, I made an appointment at the domain apple store here in Austin. I explained the situation, which was kind of hard for them because they don’t have access to the same set of tools that we developers do. Their setups don’t have the ability to deal with developer software images, so they were kind of at a loss as to what to do.

 3 min read

Halloween is to practice being scared

Now that Halloween is over, and the ghosts and goblins and trick or treaters and (most importantly) my daughter have gone to bed, I thought I’d reflect a bit on Halloween and when it means to me as a parent. My daughter is four, and she’s never been fond of scares, so this time of year any time we go out shopping, we’re braving a potential minefield. Stores seem to love putting motion activated spiders and skeletons up on candy aisles and endcaps.

 3 min read

Standing desk DIY Episode 3: It was too hard AND it was too soft, but now it's just right.

Two more days of Standing Desk, with a level keyboard, and I love it, but I have two problems. The first is, my feet hurt, especially my heels. The second is that I have a tendency to rest my hands on the keyboard shelf when I not typing, causing it to flex, and I’m afraid I’m going to warp or break it. So today, I’m fixing both problems. The first is easy, although not cheap.

 3 min read

Standing Desk DIY Episode 2: Customizing the keyboard stand

I wrote a couple of days ago about my DIY desk. I’ve been quite happy with it so far, with one exception: The keyboard “drawer”. It wasn’t quite table enough. It would bounce just a little bit when I typed, which was annoying. Even worse, though, the lap desk I was using wasn’t completely flat, and so the keyboard was tilted slightly which made it very difficult to hit the right keys.

 2 min read

Standing Desk DIY: Cubicle Edition

Lately, I’ve read several articles on standing desks and especially on the health risks of the modern office. I wanted to try it out, especially since I pulled a muscle in my back a few month ago and, now that I’m all recovered, I don’t want it to happen again. The biggest problem with that for me, is that I spend a lot of time programming in a cubicle farm. I hadn’t seen a configuration yet that seemed like it would work well with cubes, but I think I finally managed to work one out.

 4 min read

Do not buy a new Tivo. Just trust me. You'll regret it. We do.

TiVo has completely lost their way. I love TiVo. Or have. I got my first one in 1999. It has started having issues (locks up every couple of days and has to be power cycled). That sucks, but the thing is 11 years old. So, for my wife’s birthday last month, I bought my wife a new TiVo Premiere XL. I thought it would be a good idea. Wow, I was wrong.

 3 min read

We have a Winner! (so far) - the Battle of the iPad Styli

A long, long time ago, I bought the first US Robotics Pilot 5000. Using Graffiti, I could actually take notes for the first time in a meeting that I wouldn’t have to type in later (although I did have to correct missed letters periodically). I used PalmOS and a Stylus to take notes up through my Kyocera 7135, which I loved. But when it died, I couldn’t bring myself to get another phone with that outdated OS, so I made the jump to Windows Mobile with a Verizon xv6600 in 2004 or so.

 2 min read

How LaunchBar and 1Password Reduce Annoying Redundnacy

Not by preference, but recently I’ve had to spend some time fighting with SQL Server, and that lowest common denominator piece of IT software, the Wizard. You’ve probably had to deal with some stupid thing like this, too. It’s irritating and annoying, but it’s often the easiest way to figure out how to get something to work. Through the Wizard there are a bunch of different options, and you can iterate through them relatively easily, and then test to see if you got the right combination, and then script or document or whatever so you can reproduce your setup.

 3 min read

What Makes for an Uncivilized iPhone Game - One Gamer’s Opinion

With the imminent release of Civilization V, I thought I would wax nostalgic about one of my favorite games ever, and why it’s unlikely to ever be that fun again. When I got my iPhone (3G), I loved it, and one of the things I loved about it was the ability to play games on it. There were a few games I enjoyed, but I really longed for the inevitable influx of classic games ported to the new platform.

 3 min read

Halo Reach - This Is the Halo Game I've Been Waiting For (very minor spoilers)

I completed Halo: Reach (on normal). For once, it didn’t disappoint. No giant monkey hammer reverse Donkey Kong boss battle this time. A real, satisfying ending that wasn’t just a rehash of the now-iconinc race to get away from the self destruct from thehe first Halo.I only remember two escort missions, but they were very short. One wasn’t so much an escort mission as a “kill the big boss to allow someone to get away from it” and the single “follow this NPC and protect him” mission involved my favorite thing about Halo: ODST, so I was grinning instead of cursing during that brief section.

 2 min read

I've Heard of Hard Sales Tactics, but That Was Ridiculous

So I picked up my new glasses yesterday. I’m told they don’t look too bad. Which is good - it means I got lucky.So I was at my optometrist last week, and I looked at the machines that measured my eyes, and then did the “which is better, 1 click or 2, click 1, or *click 2?” bit. Nothing unusual.So then he says he’s going to dilate my eyes. Fine, happens every time I go to the eye doctor.

 2 min read

Sometimes it's good to be wrong. I'm really enjoying Halo: Reach

I had said that I wasn’t going to buy it, but, after being disappointed with the game I expected to be playing now, and being stressed out recently, and since my wife and daughter are out of town, I decided I needed something to do for fun. So I caved in and bought Halo: Reach. I’m really enjoying it. I’ve gotten through Mission 6 at this point, and I’ve enjoyed it so far.

 2 min read

The Value of Slow: Lessons Learned via the Golf Course

Once upon a time, I was working on a project at a high tech company in an LA suburb, and I was working for a manager that I’ll call Mike (because that was his name).Mike had once worked managing a group that put satellites in orbit, and from that experience he gathered some great wisdom, some of which he attempted to impart to me, and some smaller amount of which actually sunk into my young (at the time) head.

 2 min read

Please Stop This Thing, I Want to Get Off: Living the Merry-Go-Round of FAIL

There’s this pattern of application failure I’ve ended up dealing with a lot over the years. Stop me if you’ve heard this one before. Our scene opens with a multi-tiered client-server application, let’s say, for the purpose of argument, that it’s a web app. There are web servers in the front, usually with some sort of load balancer in front of them, then maybe a middle tier application server (SOAP, J2EE, that kind of thing), and some kind of shared state/storage at the back, let’s call it a SQL database.

 5 min read

The Hard Stuff - iPhone App Design Edition

I was talking to my latest iPhone App customer today, and now that we’re both able to look at the prototype, we were talking about the features that we could add before the shipping version, or not. We talked about trade-offs, and I heard myself saying the same thing I’ve said many times before, so I thought I’d write it down. There are three really hard things about iPhone Apps (at least to me - I have a background Enterprise and Web Apps).

 2 min read

What a Difference 2 Years Makes - a Study in Contrasts With iPhone Ad-Hoc App Distribution

The first iPhone App that I worked on was submitted in October of 2008. The month before we submitted, there was a flurry of emails between me and my customer, a sample of which are reproduced below: Begin forwarded message: From: Customer Date: September 16, 2008 12:58:19 PM CDT To: Carl Brown Subject: Re: iPhone project status My Identifier is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Emails omitted for brevity. Begin forwarded message: **From: ** Customer

 3 min read

The Rules - At Least As I See Them (Well, the First Two)

Since I’ve been dealing with computers, I’ve developed some rules of thumb. The first rule seems obvious, although I’m constantly surprised by the people that break it. It is:Rule 1: Never run a command on a computer that affects the communications path through which you are connected to that machine.This is slightly more complicated than it sounds - especially when configuring routing protocols in routers. You change things such that you lose your routes from where you are to that machine, and it’s time for Plan B.

 3 min read

Alternating accessoryView and accessoryType in UITableViewCell

Quick post about a problem I had today. I’m writing an app for a client that has a checklist component. So a UITableViewCell is in an unchecked state, and then when the user hits it, it becomes checked. I like the look of the UITableViewCellAccessoryCheckmark, so I’m using it, but I needed something when the cell is unchecked, so I’m using a png that has a circle. I was having a problem that when the cell was unchecked and I tapped on it, nothing appeared to happen, although if I went to another screen and came back to that one the check box would show up.

 2 min read

Musings On Stress

This weekend I have a ton of work I need to do. One evening earlier this week, I squished a bug that had been bothering me for a while in KidChart, one of my shipping apps. Instead of submitting a new version with just that one bug fix, I want to get one full work-flow session under UI Automation testing to see if there are any other bugs I should be fixing as well.

 2 min read

Hence the Name - Escort Missions: the Bane of my Gaming Existence

Fasten your seat belts. After all, I wouldn’t want you to get a boo-boo - ‘cause then I’d have to start the whole rant over from the beginning (or at least my last save point). The first Escort Mission I remember was, I think, X-Wing circa 1993. At least that’s the first time I ever remember failing to make progress in a game because some stupid computer-controlled moron paying no attention to the obvious fact that he was in a combat zone that I had no influence over had done something idiotic and gotten his dipshit Freighter-flying ass blown to tiny little bloody pieces, sparkling forever as the drifted through the cold vacuum of space.

 6 min read

The decade of the developer?

This article claims that we’re entering the decade of the developer. I don’t know if that’s going to be true, but I’ve said before that changes to our industry, especially cloud computing, is making systems knowledge and Enterprise I.T. skills irrelevant. During the boom in the early 2001, I knew people here in Austin, Texas that were making $100K/year and up without a college education and with no formal training - because they had manage to acquire IT skills, experience, and had negotiated well for salaries in the past.

 2 min read

A Tale of Two Table Views - my UISearchBar Race Condition that I finally found

OK, so I finally found my race condition, I’d talked about here and here. So, in my KidChart app, I have a UITableView that has a list of all behaviors that people can pick from: and in the search box above, people can start typing to narrow down existing behaviors and then click on one so they don’t have to scroll as much. As soon as the UISearchBar gets focus, it does this:

 2 min read

UI Automation App Input

So, I’ve been doing more UI Automation test work, and I’ve discovered a couple of things. I’m kind of trying to write them up as I run into them, although I’m putting together a helper library that I’ll announce at some point, hopefully soon. So, what I’m trying to work on is a race condition in my KidChart app. The issue (I think) has to do with notifications during input into an UISearchBar.

 2 min read

Horror Movie Productivity

A few years ago, I had a job that involved writing software while I worked at home. I, like many people in that situation, struggled with how to keep myself motivated.I found my thoughts wandered too much if the house was silent. I tried music, which had worked for me in an office setting, but I had trouble getting into “the Zone” like I felt I needed to.Eventually, I found something that worked quite well for me - horror movies.

 1 min read

On Becoming an Interruptable Programmer

Just read a great blog post on becoming an interruptible programmer. Since the older my daughter gets the more interruptions I get from her, I think I’m going to try this and see how it goes.(Via @GeorgeSealy)

 1 min read

Apple iOS iPhone UI Automation Testing: What does Accessibility have to do with it?

Trying to do some UI Automation testing going on one of my Apps today. Have a race condition, so I want to have a script to run it over and over again to have a better chance of catching the problem (more on that in a later post). So, I just wasted 2 hours trying to test this structure: And the problem was that I had this set in Interface Builder:

 1 min read

SEO fail: Is This Thing On?

So I’ve blogged every day for a week now and, oddly enough, I can’t find my own site on google, even when I look for exact matches for strings in older blog posts. I’ve started using a plugin for RapidWeaver, SiteMap, that’s supposed to improve SEO, but I don’t know if it’s helping.That being said, it’s still early, and I don’t really know what I’m doing. I’ve read several often contradictory books and articles about SEO, but I’ve never really tried it out myself, so I’ll see how it ends up.

 2 min read

Hidden VPN/DNS Gem in Apple's iOS4.1 announcement today

I’ve been on-again, off-again fighting with getting my iPhone 4 to talk to a Cisco VPN concentrator to connect to a company internal network. The iPhone would connect, but it couldn’t resolve any names, but my iPad worked with no issues.Turns out, the problem was with iOS 4.0.x’s implementation of Multicast DNS. According to this IETF draft, ‘…Any DNS query for a name ending with “.local.” MUST be sent to the mDNS multicast address…’, which Apple took literally for iOS 4.

 1 min read

Cloud Computing: The Making of the Next Dinosaurs

Most of the most practical programmers I know, have something in common - they’ve all worked in places, usually small shops or small University departments, where they’ve been responsible for both the software they were writing and the computers that software ran on. Those people are more able to figure out what the real problems are, they don’t throw their hands up and say “must be a system problem”. They actually build things that work, and they can fix things that break.

 1 min read

Look, Ma, no laptop!

I implied earlier that when I use BlogPress to write a blog post with my iPhone or iPad, that I had to wait until I got to my laptop to publish it. That isn’t true. If I want to tweak it in RapidWeaver, then I have to wait for my laptop, but if I’m okay posting it without going through a proper preview step, I can just hit “Publish Now!” in BlogPress, and let RapidBlog handle the rest.

 1 min read

Halo: Reach - Are we going here again?

I loved the first Halo game. It quickly became my favorite first person shooter at the time (a title that had previously been held by the first Half-Life). I’ve played all the way through it by myself at least six times, and in co-op at least three (I do have to admit, though, the Library, solo, on Legendary is the one level I’ve never been able to beat. Damn grenade chain reactions…Grrr…).

 3 min read

NSInMemoryStoreType is not a good substitute in unit tests

So I was writing some tests for my KidChart app, which uses core data, and I wasted a ton of time, so I thought I’d post to warn people. I wanted to avoid having to reset the state for each test, and I wanted the tests to run quickly, so I used NSInMemoryStoreType for my persistent store in my unit tests. This is a technique I’ve used before in other programming languages, and I was new to Core Data, so I was applying what I had done before to something I had insufficiently researched.

 3 min read

People Seem to Prefer Videos and other things I learned from trying to advertise my iPhone app.

I have a couple of apps of my own in the AppStore. Most of the sales of the apps I have worked on have been the apps I did for other people, because, well, they are better than I am at marketing.So, I’ve been trying to figure out how to do marketing with one of my apps, KidChart. It’s been out several months and sales have trailed way off. I like it (my wife and I use it every day), but I haven’t figured out how to market it.

 4 min read

Blogging workflow with Reeder

I’m a huge fan of Reeder for both the iPhone and iPad. It’s so much faster and more convenient than any other Google Reader client I’ve dealt with, I haven’t launched Socialite or NetNewsWire in weeks.So, when I decided I was going to start blogging regularly, I wanted to make it easy for me to do so. This is the workflow I worked out: I set up a blog on blogspot, and then linked it to my site (which I edit with RapidWeaver) with RapidBlog from Loghound.

 2 min read

Blog On

So I read this great article on why I should be blogging. So I decided I should start blogging.So here I am blogging :).Now, to be (at least partially) a programming blog, I need to be able to post code. I was playing with the High-Light plug-in for Rapid Weaver last year when I was playing with this blog the first time, but it doesn’t do Objective-C (at least not well - and Objective-C is what I’ll probably blog about the most), so I went hunting, and found highlight and used the installer from here to get it running on my Mac.

 1 min read

Rebasing Simplified

It occurred to me while I was working on a presentation about git for work, that rebasing happens every day, we just don’t think about it that way.Every time we get the latest version from (almost) any source control server, those changes get merged into our current working directory. That makes the changes we’ve been editing appear as if they were written after the latest server changes, even though we wrote them before.

 1 min read