• Competitive Disappointment

    As we approach the impending Superbowl featuring the Pacific Northwest’s very own Seattle Seahawks, I felt it appropriate to explain why I am not at all excited about anything other than the commercials. You see, if you grew up in the Pacific Northwest and you are a sports fan of any kind, then you are familiar with a pattern of sports teams that excel in the regular season only to fall apart when it matters. I’m sure that somehow this has seeped into my psyche in ways that I don’t recognize. Lest you think I exaggerate, I leave the following for your consideration:

    • 1986 - Portland Trailblazers use #2 draft pick to select Sam Bowie, passing over a rookie Michael Jordan
    • 1989 - Gary Payton and OSU appear on the cover of Sports Illustrated as the #1 team in the country. They stay in the top 10 all year, but fall to Ball State in the first round of the NCAA tournament. (BALL STATE! I don't even know where Ball State is!!!)
    • 1990 - Portland Trailblazers lose to the Detroit Pistons in the NBA championship.
    • 1992 - Portland Trailblazers lose to the Chicago Bulls in the championship despite being up by 15 in the fourth quarter with Michael Jordan on the bench. (See here)
    • 1994- Seattle Supersonics hold league best regular seaon record with 63-19, but lose in the first round to the Denver Nuggets
    • 1996 - Seattle Supersonics set franchise record with 64 wins and advance to the NBA championship series, only to lose to the Chicago Bulls in six games.
    • 2000 - Portland Trailblazers are up by 15 in the fourth quarter in game 7 of the Western Conference finals but fail to score and give the Los Angeles Lakers the series. The Lakers go on to win the championship in 5 games. (See here)
    • 2001 - Seattle Mariners set single season win record with 116 wins, yet fall to the New York Yankees in the American League Championship, 4 games to 1.
    • 2002-2006 - University of Oregon makes five straight bowl games and loses all of them.
    • 2003 - University of Oregon men's basketball team wins the Pac-10 championship and enter the NCAA tournament with a #8 seed, only to lose in the first round to Utah.
    • 2005 - Seattle Seahawks go 13-3 in the regular season, and appear in Super Bowl XL as heavy favorites. They go on to lose 21-10 to the #6 seed, wildcard Pittsburgh Steelers.
    • 2007 - University of Oregon football team is ranked #2 in the nation, but quarterback Dennis Dixon tears his ACL with only 3 games to go ending hopes of a national championship.
    • 2007 - Amazingly, the Portland Trailblazers repeat their gaffe from 1986 and draft Greg Oden instead of Kevin Durant. Oden misses entire first season due to injuries and is eventually waived.
    Also for your consideration...

    The 10 best athletes to never win a championship in the Pacific Northwest:

    1. Clyde Drexler (After a hall of fame career in Portland, won a championship only after being traded to the Houston Rockets)
    2. Steve Largent (Played 13 seasons for Seahawks, held almost every record a receiver could hold)
    3. Randy Johnson - (Never won with the Mariners in 10 seasons, but won with the Arizona Diamondbacks after being traded.)
    4. Rasheed Wallace (Won championship in Detroit the year after being traded from Portland)
    5. Gary Payton (12 seasons with the Supersonics, won championship after being traded to the Miami Heat)
    6. Scottie Pippin (Won six championships in Chicago, none in Portland despite making the NBA finals in 2000)
    7. Ray Allen (Five seasons with the Sonics. Won championship with Boston Celtics the following year after being traded.)
    8. Ken Griffey Jr. (13 time all star, #6 all time home runs leader, no championships)
    9. Alex Rodriguez (6 years with the Mariners, #5 all time home runs leader, 14 time all star)
    10. Walter Jones (9 time pro-bowl, NFL 2000s All-Decade Team, considered one of the best lineman of all time)
    Honorable Mention: Cortez Kennedy(Seahawks), Shawn Kemp(Sonics), Shaun Alexander(Seahawks), Ichiro Suzuki(Mariners)

    So there you have it. The Pacific Northwest has the capacity to produce fantastic sports teams and franchises, but they leave a 30 year legacy of ultimate disappointment. Am I proud of the Trailblazers and the Seahawks and the Mariners? Sure. They’re my teams. But you’ll have to excuse me if I don’t hold my breath on this whole Superbowl excitement.

  • Sharing About Overshare

    As Manton explained on his blog, we have been working on Sunlit for a long time. During that time, I can tell you that Sunlit changed and evolved from what we originally had envisioned. However, if you listen to Core Intuition, you know that we’ve been beta’ing the app for quite a while. So, when Jared Sinclair and Justin Williams announced the Overshare Kit open source replacement for iOS UIActivityViewControllers, we had a hard decision to make. We had to decide if it was worth adding new functionality at such a late point in our development or if we could live without it.

    Now, I don’t want to get into a UI/UX design war with anyone. I know that there are various, differing opinions on the look and feel of iOS 7 and I am but a humble developer. However, if you have ever implemented a custom UIActivity in iOS it is undeniable that the monochrome icons that you are forced to use look inexcusably ugly. In fact, they are so disappointingly ugly that Manton and I felt that we had no choice but to use Overshare Kit.

    photo

    I am proud of many things that we’ve built into Sunlit and our support for Overshare Kit is one of them. I love the iOS development community and Jared is a great guy so being able to support a project that he owns and cares about is a good feeling. We also had the opportunity to contribute directly to the project and a number of changes that we made for Sunlit made it back into the master branch. To me, this is the heart and soul of iOS development. It’s doing things with other people that share your value of quality.

    If you are a developer, and you haven’t checked out Overshare Kit, you really should. It allows you to create beautiful sharing activity views. It comes with some of the most common ones out of the box (Facebook, Twitter, etc) and is fairly easy to extend. Jared is also very responsive with suggestions/fixes for things, and while it’s only been around for a few months, I can’t recommend it highly enough. Oh, and if you’re having trouble integrating it, feel free to hit me up. I’d love to see more apps using it.

  • Sunlit Is For Me

    If you don’t like my new app Sunlit, I will still be happy. Don’t get me wrong. I hope you like Sunlit and it helps you do things with your photos and memories that you couldn’t do before, but if you don’t like it, I’ll still be happy. I’ll be happy because Sunlit is for me.

    Sunlit is an app that I’ve wanted for years and I’m thrilled to finally have on my phone. One of my absolute favorite uses for Sunlit is for capturing memories from smaller events. These are events that while important, don’t tend to have the significance of a wedding or Disneyland trip so the photos often never see the light of day. With Sunlit, however, I can now do something meaningful with these photos.

    Earlier this year while Sunlit was in beta, I went to a birthday party for my wife’s mother. There were about 15 people present and the celebration went on for around 2 hours. During that time, I snapped close to 60 photos of the party. Some of these photos were blurry, some of them were decent, but a few were quite good. On our drive home, I picked the best ones and created “Nana’s Birthday” story. I then used Sunlit to publish “Nana’s Birthday” and suddenly I had a story captured on a web page that I could share with my wife’s family quickly via an email or SMS message.

    This is an important thing to me. Before Sunlit, these photos were just photos. The effort to take them was almost more work than it was worth because they would rarely be seen by me, let alone anyone else. With Sunlit, photos turn into memories. They turn into something beautiful that I can share and that can be appreciated and loved by the people I care about.

    So, if you don’t like Sunlit, that’s ok. Sunlit is for me, but Sunlit is also for sharing so I really do hope you like it too.

  • Thanks for the Memory

    How much memory can an app allocate on an iPad 1? It seems like a trivial question. The original iPad has been in circulation for over 3 years now and developers have written thousands of apps, many of which are memory intensive. Given this, one would expect that this limit has been well documented and should show up easily in search results. As I found out recently, this is not the case.

    A few weeks ago, I needed to revisit memory consumption on an app running on an iPad 1, and I became very curious about the answer to this question. After searching various sites I was mostly coming up empty. To my surprise, it was quite difficult to find this documented anywhere. Apple's own documentation is of course great reading for any developer but remains mum on memory budgets. Perhaps the best documentation I could find was this Stack Overflow post, but it didn't seem to be definitive and as with all Stack Overflow posts, caveat emptor.

    One thing that I did find sprinkled around the various posts on the topic was a link to Jan Ilavsky's tool that he wrote to measure on a device the various points when an app receives memory warnings and then ultimately crashes due to insufficient memory. Here's a shot of it in action. Using Jan's tool, I decided that perhaps I should help contribute to the collective information of the Internet by running some tests and documenting them.

    So as not to boil the ocean, I decided to analyze only the iPad family of devices. My test devices included: a first generation iPad, a second generation iPad, a third generation iPad and an iPad Mini. All of the devices were upgraded to the latest version of iOS that supported them*. My procedure was to force quit all apps on the device before running the test app and then to run the test a minimum of 10 times on each device. I would then throw out the low and the high and graph the results. I found to be both interesting and somewhat predictable:

    [caption id="attachment_58" align="aligncenter" width="300"]First Generation iPad First Generation iPad (iOS 5.1.1) [/caption][caption id="attachment_59" align="aligncenter" width="300"]Second Generation iPad (iOS 6.1.3) Second Generation iPad (iOS 6.1.3)[/caption][caption id="attachment_93" align="aligncenter" width="300"]iPad 3 iPad 3 (iOS 6.1.3) [/caption][caption id="attachment_61" align="aligncenter" width="300"]iPad Mini (iOS 6.1.3) iPad Mini (iOS 6.1.3)[/caption]

    One of the more interesting things that jumped out at me is the fact that Apple seems to take memory optimization seriously, and that their approach appears to not be a one size fits all method for the different devices. Notice how on the second generation iPad and the iPad Mini the OS continues to optimize in order to allow the app more room in which to operate.  Contrast that with the first and third generation iPads which appears to have a flat, non optimizing algorithm.  If indeed memory optimization does have a certain amount of device specificity to it, it would appear that Apple put less time into optimizing these iPads.

    This of course makes sense as the first iPad was a previously non-existant category, and the third generation was the first iPad with retina display. You have to imagine that it was a pretty massive undertaking to introduce the retina concept on an OS, toolchain and device level. I don't think any engineer alive would be surprised if the schedule became tight on these projects. The point here however, is that Apple does indeed pay attention to the details and that permeates all the way down to device specific memory optimizations. Developers should of course never become reliant on the presence of these optimizing algorithms but the fact that Apple puts that much attention into it is impressive.

    So, back to my original question of how much memory you can allocate on an iPad 1.  Drumroll please. Based on my results, I would say that for the iPad family of devices the following are the maximum allocations that can be performed by an app:

    First Generation iPad: 160 MB

    Second Generation iPad: 250 MB**

    Third Generation iPad: 515 MB

    iPad Mini: 275 MB***


    Now, I wouldn't be doing my civic duty if I didn't point out that these numbers include things that are entirely out of your control such as core graphics objects.  The test application is the most plain vanilla of apps so the minute you start making anything interesting this number will begin to be impacted. In the end, there is simply no replacement for good old fashioned testing and optimizing so keep that in mind as you're setting out to make the next Angry Birds. I do find this helpful however because it is useful to know and be aware of what my overall ceiling is so that I can spend time optimizing the things that need optimizing and spend the rest of the time building features.

    * iOS 5.1.1 on the iPad 1 and iOS 6.3.1 on the other devices
    ** The 2nd gen iPad appears to be able to go as high as 295MB
    *** The iPad Mini appears to be able to go as high as 315 MB
  • A Retrospective of the Beginning

    I was recently trolling through some of my previous attempts at regular blogging and I found a post that I wrote back in September of 2008.  It was not all that long ago and yet it seems like a lifetime ago in terms of how my life has changed. At the time, I was still working on the Corporate Ladder, had just finished my MBA and hadn’t really written code for a number of years.

    The technology world was also different.  The iPhone had been out for a little over a year and people knew it was a big deal, but the App Store had only been a thing for a couple of months and the entire universe of Apps had yet to explode. My how things have changed.

    At the time of the post I was having serious creative withdrawals from not having written code for a long time. So I did what I always do: I started making things that I wanted to use personally, or in this case that I wanted my kids to use.  Little did I know that after having spent so long away from a compiler I was about to unleash a series of changes that would change my path in wonderful and unforeseen ways. I continued to mess around with Blackberry development for a few more weeks until I eventually downloaded Xcode one fateful day in October.  I started making little things for the Simulator and shortly after that, Three Jacks was born.

    I stayed at my corporate job for a few more years, but my weekends and evenings were consumed with making and releasing Apps for the iPhone (and eventually iPad.) Eventually, I was forced to come to the realization that while I was a good engineering leader, I could no longer deny the fact that my real passion was in making things and in creating code, so I finally clicked my heels three times and returned to full time development.

    Returning to the developer life also had a beneficial side effect that I could now work from home. This opened up an incredible freedom that allowed changes in my personal life that wouldn’t have been possible otherwise.  These were good things. I now have the flexibility to help coach my son’s Lego Robotics team. I know that I will never have to miss my daughter’s basketball games. I can walk the kids to school in the morning and I’m there when they get home. If they need help with homework, I’m there to lend a hand. If I want to take a break and build with Legos with Brendan, I can. These are moments and times that will be gone all too soon and because I started tinkering with Apps back in September 2008 I get to experience and savor them.

    Until reading it the other night, I had completely forgotten about tinkering on my old Blackberry. The existence of this five year old blog post is an amazing gift to me. It’s not often that you can look back at events in your life and pinpoint a single turning point where your path diverted from the course it had been on.

  • Reboot

    Image

    So this is the requisite "I used to blog and then I stopped but this time I'm serious about it" post. Like many people I have followed a pattern of ups and downs in terms of blogging continuity throughout my online existence, and it is my sincere intent to break the cycle this time around.  In particuar, Manton's post combined with Matt Gemmell's article have rekindled a desire to be better about developing and sustaining a rhythm.  I certainly have plenty of ideas, and it really is only my own lack of discipline that gets in the way. Anyway, I won't blather here longer about new beginnings but if you don't see regular output here, feel free to remind me of what I'm saying here.

subscribe via RSS