Saturday, December 26, 2009

NC-17 Rated Hockey Twitter App on the iPhone

I've gotten feedback about HockeyTweet that goes along the lines:
  • An NC-17 Hockey app for the iPhone, that is my kind of hockey.
  • Hey, where are the girls in this app?
  • What no porn?
Kidding aside, why would I launch HockeyTweet with an NC-17 rating? It clearly is just a Twitter client for sending tweets about Hockey.

For most developers and those that follow the App Store saga, the reason is probably clear. For those that don't know let me explain. There is what is called a UIWebView, for non-programmers, this means a web browser view/window in my app. That UIWebView has access to Twitter so users can authenticate and if required to create a new Twitter account. There is a loop-hole in that UIWebView when you are on Twitter that means you could go out onto the Internet at large and view "objectionable material."

Since I allow the user to be able to navigate through Twitter to the internet they could view something that is objectionable. This sounds ridiculous and it is but the point here is that some apps have been rejected due to this and chose the route of least friction in the app review process.

So, yes, the app is rated NC-17. Does it have objectionable material in it? No. Should it be rated lower? Yes, but why would I go the route that has lead other devs to have their apps rejected?

Thursday, December 24, 2009

Designing HockeyTweet

It's been a long road, longer than I thought it would take but then aren't many things? How did HockeyTweet begin?

The main design goal of HockeyTweet was to create a fast Tweet creation interface for Hockey, specifically the NHL. This was born from the desire to allow people to quickly tweet their thoughts about the game without missing the action.

This desire stems from my youth, watching Hockey with my Dad. When there was a play we did not agree with we shouted out our protests. When there was an awesome save, there were shouts of joy.

So how do you bring this experience to the iPhone?

First I thought about how to speed up tweet entry. To do that let's save the user time by giving them the list of teams, players, penalties, and games. What did I need to consider for each?

Teams
  • Full name or abbreviation? Abbreviation wins out by far, we are only working with 140 characters in a tweet afterall.
  • Do we need to update this? Not if we limit our scope to the NHL (teams are pretty static, name changes are not common.)
Players
  • Full name or abbreviated? After some testing and consideration for length, I went with full last name and first initial.
  • Numbers? Extraneous info, if you are a not a big fan you know the star's names but not necessarily their numbers. No numbers.
  • Do we need to update this? Yes, team rosters change often due to injuries, trades, retirement, new players, etc. This will need to updated regularly - need to consider this in how to perform updates.
Penalties
  • Full name of abbreviated? For clarity and since I expect some of the long ones will not be used often I went with full name for each. Where the penalty had a common name that was shorter I used that.
  • Do these change often? No, no need to build in updating for penalties.
Game Schedule
  • How to handle showing a game? Use abbreviated team name with vs.
  • Games change often so this definitely needs to be updated on a regular basis.
  • Do we need time of the game? No, this app is for tweeting about the game while it is happening. Also, want to consider the day before and after since people may want to tweet about an upcoming game or yesterdays game. Time can be dropped.
  • Ok, we are showing yesterday, today and tomorrow. How are we showing that? I went with the 3 letter month and the date only.
    • Why no year? Don't need it, we are only showing current games, not previous years.
    • Numeric month would be shorter, why not use numerical month? You save 1 character for less clarity. Then you have to decide on a format MM/DD or DD/MM. I feel the 3 letter month provides more clarity, another decision done.

Handling Updates

During my design I identified that players and schedules had to be updated regularly. How to handle that? This was something new for me since I had to figure out how to do regular updates to my app without impacting the user experience in a negative way.

After some research I settled on web services as the solution. I first designed a web service with Perl SOAP::XML. What did I learn besides new tech (I had never programmed a web service before so this was all new)?
  • I know Perl well so writing the prototype web service took about 1.5 hours. Good references through The Perl Bookshelf and Google certainly helped.
  • Integrating the web service using asynchronous URL requests with asynchronous XML parsing was a mess. There was a lot of code to handle what was a simply a problem of go get some data and populate this array for display in the UIPicker. Trust me, the first pass of this code was ugly and hairy.
  • Where would I host this? My home system was out of bounds, I did not want to re-enter the world of IT and server maintenance to host my own web service. A hosted solution would work but that would cost money for an app that would likely have a limited customer base (iPhone Fans who are Hockey fans, that watch the NHL, and use Twitter). The total earnings for the app would probably not cover the cost of one year of hosting, so I needed something free.
  • How will this web service scale? Not sure, probably not well without lots or testing and more research to make sure I wrote a good web service.
  • How would I cache the web service data? In memory? On disk? If on disk how would I do that on the hosting service? What about Perl version? Which would the hosting service support? Could I install my own custom Perl modules? Many questions here to answer.
At the same time, hosting became an issue I had to solve. There were a lot of questions to answer for what appears on the surface to be a simple app. I had lots of tech to piece together so what next? Research!

Google App Engine

I started researching hosting solutions that offered the ability to run my own Perl services. All the hosting services seemed more expensive than I wanted to pay. Through the searching I kept coming back to Google App Engine. The pricing model is generous and I use lots of Google services which I find sometimes limited but get the job done 90% of the time.

How does Google App Engine work when hosting from it? My summary would be, unless you write something that is very successful, it's free. Once it starts to cost money (nothing for me yet) you should be already monetizing your product. If you are not making enough money to pay the generous hosting with Google App Engine then why are you offering the product?

Google App Engine had a kink though, I had to convert the already written (though prototype) service in Python or Java. Python was just poking it's head up at my day job so I figured why not go that route. At this time I enlisted a friend who was interested in the project. He signed on to rewrite the prototype Perl SOAP::XML web service using Google's App Engine and in Python. This relieved me of some work so I could concentrate on the app.

JSON 2.2 Framework for iPhone

Around the same time, I came across JSON 2.2 Framework for iPhone. Let me just say, that this is an awesome framework. It let me remove a lot of the hairy XML parsing code from my app and replace it with a clean implementation that effectively lets me pass Python Dictionaries of arbitrary complexity from the Python web service to HockeyTweet where the JSON string is cast to a Cocoa NSDictionary. The ease of using this library can not be said enough.

If you need to write a web service to work with the iPhone, look at Google App Engine, use Python, and the JSON 2.2 Framework for iPhone.

Ok, so time passed, my partner came and went; he had other pressing projects to work on. I finally finished version 1.0 of the app near the end of November. I submitted the app about November 28, 2009. Then it was time to wait.

iPhone Tech Talk Toronto


A week later I was off to Toronto for the iPhone Tech Talk World Tour. This is a one day conference where Apple Evangelists run 1 hour sessions (courses/tech previews/tech tricks) and provide services such as UX (User Experience) reviews. It is effectively a pep rally + course + feedback + networking session with Apple's face to the development community.

It was AWESOME!

The UX Review and The Redesign

At the Tech Talk, as soon as I heard that there would be UX reviews I signed up for one. The review went well. I received valuable feedback from the Apple team which resulted in 10 new features they felt would polish the app and give it a Wow factor.

So began The Redesign. The list of features were:
  1. Improve the Info button (it was not very responsive)
  2. Change the text buttons to icons
  3. Add Arenas to the pre-loaded UIPickers
  4. Add a UIPicker for pre-loaded Hockey Phrases to give the app a more positive spin (the app had a negative spin with just the Penalties that could be combined with Players or Games)
  5. Make the Hockey Phrases user customizable
  6. Change the colour of the Add button from white to the same colour as the other buttons on the main view (the one different button made the view look unfinished)
  7. Indicate using colour (red) to the user when they typed a Tweet over the 140 character limit for a Tweet
  8. Make the fact that a Tweet was successfully sent clearer
  9. The buttons on the flipside view (Settings) could be retouched to make the app look finished
  10. (My own) Add pre-loaded Team rosters and Schedules so that if the user bought the app and ran it without an internet connection, there was data in the app from day one. The original design was to get the first load of data from the web service.
I worked almost every night for a week and I was ready to launch again.


Not so Fast

But first, I got feedback that the icons could use more polish. Eck! I hired a graphic designer online and he went to work on new icons. I received 5 of the 7 icons and had good ideas on the other two which I implemented in the tight deadline I gave him.



Phew! Now it was time to ship.

I uploaded again and on Monday HockeyTweet hit the App Store.

What would I do differently?
  1. Hire graphic help earlier in the process. Work with them to turn my paper/sketch prototypes into the UI which I code on the back end.
  2. Work longer on pinning down the design and the requirements before I start. I let feature creep push the app in a direction I had to reverse early in the process.
  3. Solicit more early UI design feedback.

Wednesday, December 23, 2009

Adding Twitter + OAuth to an iPhone App

First you will want a way to use the Twitter API. Go get MGTwitterEngine for that (I won't talk about that here since lots of people have explained it well). Get that and install it and play with it. You should be posting tweets very quickly from your app with Basic Auth.

Ok, once you get tweets sending and can retrieve tweets with Matt's code (MGTwitterEngine) you might want to start posting your tweets with your own app name and website. To do this you will need to use OAuth. See the Twitter API FAQ about OAuth and Twitter.

The best way to get this working on the iPhone is to use Ben Gottlieb's Twitter-OAuth-iPhone. This is a awesome piece of work by Ben, piecing together several examples, frameworks, and the OAuth process to make using OAuth from the iPhone a piece of cake.

Follow Ben's readme and sample project and you will be up and running with application branded tweets in no time.

Tuesday, December 22, 2009

First iPhone App: HockeyTweet has Launched

HockeyTweet is my first foray into the Apple App Store. HockeyTweet is a Twitter client which makes it fast to send Twitter updates about hockey games in real-time.

HockeyTweet is purpose built for the NHL. But enough of repeating the product page in the App Store, check out HockeyTweet in the App Store.

Here are some of the questions I've gotten about developing for the iPhone and what my next plans are:

Does it cost money to develop for the iPhone?
  • Short answer no, for the majority of people though the long answer is yes.
  • No, if you 1. Own a Mac, 2. Only want to write and test apps on your Mac.
  • Yes, if you 1. Don't own a Mac, 2. Want to run the app on your own device, 3. You want to post the app to the App Store.
Ok, how much does it cost?
  • $99/year (before taxes) for the iPhone Developer license.
  • $$$$ for your Mac
  • $219 CAN (before taxes) for the 8GB iPod Touch to approximately $1200/year for an iPhone
Does it cost any more?
  • Well yes, what is your time worth? If you are like me and you love to try new things, love to play with different programming languages and create, then this is not a real cost. If you add that time into your costs, it starts to skyrocket, but hey we are here to have fun and design cool apps that solve problems for people.
What are the tools like?
  • In a word, AWESOME. I love Xcode (the Apple provider IDE) and the toolset that it comes with. Basically everything I've used to write, debug, run, test software is available. The list of features is long but you won't be disappointed.
  • NOTE: Your mileage may vary if you don't accept the tools and learn them. I love vi, the editor is not vi. I decided with Xcode to not fight the tools and try to use replacements. This is paying off as I learn more shortcuts and they start to sink in.
What is next for me and HockeyTweet?
  • I plan to market HockeyTweet using several tactics with minimum cash. I'll write about how each of these pans out as I try them.
  • I will be working on the next version. The app is designed to allow me to quickly integrate other sports. I will be improving the design as I work on the second sport and seeing how I can improve the design to let me integrate other niches quickly.
  • I will be adding localization to the app for French.
  • I will be monitoring user input for future features and working on any issues that arise.
What did you learn technology wise? I've gotten to learn the following (or at least scratch the surface):
  • UI design
  • Objective-C
  • The Cocoa Touch framework - the SDK you build iPhone apps in
  • Web Services using Google AppEngine
  • Python for the Web Services
  • Dealing with performance and responsiveness in a constrained environment
  • Integrating open source frameworks into code
  • Managing deadlines with team members
  • Learning when to stop implementing and ship it ;-)
Is it hard to write an app?
  • Are you a programmer? Do you have passion? Are you ready to learn? If so, no it is not hard. Again, back to the time issue. If you have it and are willing to do a lot of self learning then it is fairly easy.
Do I have a website?
  • Yes, I am currently building Lockernine as my (planned) various apps home on the internet.
Have I had sales?
  • Yes, though does my wife and friends count?
  • I will post an update on sales numbers later once I have something interesting to report, be it good sales, or poor sales.

Wednesday, December 2, 2009

The Eve of iPhone Tech Talk Toronto

Phil Casgrain and I arrived today in Toronto via Porter. That was a great decision, Phil got to head into his companies Toronto office for some work and I planted myself at a Starbucks where I did work.

Tonight, thanks to Twitter, we saw that some iPhone Devs from Montreal were in the bar of the Hyatt (where the iPhone Tech Talk is being held Dec 3, 2009) and we headed over to meet some fellow devs. This networking was great, we got to trade some dev war stories, joke about the next great app (can you say a $69.99 web flashlight app? ok just kidding), and talk about many of the topics that have been floating about the internet with regards to iPhone development.

We also got to meet some of the Apple evangelists who will be leading the sessions tomorrow.

Some of the topics we covered included, but were not limited to, how app reviews are handled, the use of static analysis, strategies for releasing an app (be early with just enough or wait for more features and risk being beat out by another app), Square and it's new iPhone dongle payment system, how micro-payments are changing the landscape of the app store market, and more. As you can tell this was a lively discussion since Phil and I were there for only about 2.5 hours.

As a developer this type of socializing was a great experience. It is seldom, since University, that I have been in an environment where everyone is so into programming and are all floating about the same wavelength.

It's fun to roam among your own kind.

Thursday, November 26, 2009

My First iPhone App Submission

I just completed my first iPhone App for the App Store.

It's a Hockey Twitter app for tweeting about Hockey, specifically the NHL teams and games.

I'll post more info on the app later but for now I am going to cover tonight's submission process. The submission took about 3 hours. This was time spent reading Apple docs, filling out App submission paper work, reworking my icon (I had it in jpg not png), reworking my App Store icon (it was a little blurry so I sharpened it up), and redoing multiple builds.

To build I needed a Distribution certificate which I could have done before and saved some time tonight (lesson learned). The artwork is now solid (I hope) so I won't need to do that for this app again.

Overall the submission went fairly smoothly; I did get annoyed by a quirk in the submission pages which kept sending me back a page and losing data I had typed. This was very frustrating but once I figured out the issue I made it through without losing data.

I'm taking a couple days break before I jump back in and get back to work. I'll be recording a preview video, redoing the website, and posting a followup when I get through the review process.

I also have an article on the decisions I made during the app and how I choose various features and approached the design. That one is still cooking and will come later.

Next week is a big week as well, I am off to Toronto for the iPhone Tech Talk.

Did I mention? I just submitted my first iPhone App? (Me -> nervous, excited, tired...)

Saturday, November 21, 2009

Indie Software Development - You Need A Process

Process sucks. It slows you down.
Process rocks. It speeds up development.

It's a problem developers face all the time; how much process is enough? As a full-time industry developer working on large software systems with teams ranging from 10-500, process is important. Process helps you:
  • communicate
  • plan
  • deliver quality software
As an indie developer though, how does process help? First off perform the Joel Test: 12 Steps to Better Code. Joel's test is as important to any indie developer, even a one man shop, as it is to a large organization.

Crazy you say! One developer does not need a process!

Do you want to ship?

If the answer is yes, then you need a process.

I use process to help me:
  • keep track of what I need to do
  • tell me when I am done (when my original list of features is done)
  • help me deliver quality code
  • help me estimate future projects better
As a one man shop, I sometimes skipped process and it bites me. I then end up wasting time on rethinking what I have to get done.

On the other hand, when I follow my process I quickly know what I need to do. That said, I have adapted my process as I've learnt what works best. Here is what works best for me:
  • Source Control: git, it's free, it's easy, it's fast, I like it. I've heard complaints but so far it has served me well.
  • Specs: What am I building? I write Use Cases, sketch UI mockups, write a feature list, and I work out how the system will be implemented (web services, data structures, and data interfaces).
  • Bug Tracking: I use FogBugz; if you are a student or startup (2 people or less, like me) then you can use FogBugz for Free
  • Schedule: See previous for FogBugz
  • Functional Testing: I do it myself with a mix of unit testing, frequent code+test iterations of each new feature, and I solicit Beta-Testers to get feedback on devices/OS configurations I do not have. This is something I want to spend more time on to get a better balance of unit tests to ad-hoc testing. Currently I am doing more ad-hoc than unit tests and it bites me with wasted time.
  • Usability Testing: I show the app to lots of people, iPhone/Touch owners and non owners to get feedback on the UI. Is it intuitive? Is it fast? Does anything jump out at the user as bad/ugly/hard to use?
  • Bugs: Log them when I find them and fix them ASAP. I log them so that I can review what I have in my bug list before I move onto other code. I try to keep true to the rules of "Fix the First Problem First" and "Fix It When You Find It". This helps me stay focused on my task so I am not trying to work around things I know are broken. This wastes brain power.
That's my main process for a one man shop. It is how I keep things straight with only 1-3 hours/day to work on my projects. Working in small units of time means being efficient and coming up with ways to keep track of tasks that are usually in a mid-completed state.

As for how I manage to complete features that are larger than 1-3hrs, I use the tried and true technique of breaking the problem down. Basically:
  • Break features into smaller features.
  • Work on one feature at a time.
  • Test when feature is implemented.
  • Commit feature.
  • Rinse and repeat.
This works for me and let's me work on something that might take 10-15 hours of research, design, code, and test over several days. Without the frequent code/test/commit cycle I run into trouble trying to implement multiple features at one time, or trying to implement one large feature that could have been broken into many smaller features.

KISS (Keep It Simple Stupid) works for software development as well.

Thursday, November 19, 2009

iPhone User Experience + UIWebView

Beta and UX testing has given me a couple things to work on:
  • Bugs
  • UX
  • More bugs
Ok, the bugs are mostly found by me. The UX issues are things that people have mentioned when the use the app (UX=User Experience).

The first thing I do when I show someone the app for the first time is ask them to tell me the first things that come to mind about the usability. So far I've gotten 3 biggies that are worth investigating:
  1. Live feeds of information pertaining to the app so the user can drop that information into a tweet instantly without having to look it up or type it. Good one and something I will consider for a future release since sourcing the life feeds I would need will take time to build since I have not found anything with the information that the user thought would be most valuable.
  2. Customized tweet strings or tweet templates we will call it. Great idea and good for a future release.
  3. Last but not least; one tester pointed out I should really make signup for a Twitter account as easy as possible for a user that does not have an account. Good point, this should go into release 1 I think.
So, I thought let's add a UIWebView for the Twitter signup page. Adding the UIWebView was easy so I dropped it in immediately so the user can navigate to the Twitter Signup page within my app and quickly create an account.

Now, if I could just nail down the last of those bugs. Currently I have some unhappy plists which I am using to store cached webservice data between runs of the app. Off to track those down now.

Thursday, October 15, 2009

My Review of Programming the iPhone User Experience

Originally submitted at O'Reilly

This practical book provides you with a hands-on, example-driven tour of Apple's user interface toolkit, UIKit, and some common design patterns for creating gestural interfaces and multi-touch navigation for the iPhone and iPod Touch. You'll learn how to build applications with Apple's ...


Lief Motif: Think Design First

By mthistle from Ottawa, ON, Canada on 10/15/2009

 

4out of 5

Pros: Good for beginners, Accurate, Easy to understand, Helpful examples

Cons: Lots of beginner info

Best Uses: Student, Intermediate, Novice

Describe Yourself: Designer, Maker, Developer

Summary of my favorite chapters in order of most useful:

Chapter 9: UX Anti-Patterns - the first chapter I read and the best one for a lot of good tips on how not to develop your UX. Every iPhone developer should read this chapter. I will reread this chapter occasionally to keep UX issues fresh in my mind.
Chapter 5: Cooperative Single-Tasking - for someone coming from an enterprise and server applications UNIX background, this chapter was an excellent discussion on how the iPhone environment is akin to a web based environment where each app is like a web-page. You can even (as most devs would know) pass control between apps using the iPhone SDK's Custom URLs. This also had a good discussion on launching quickly, handling standard interruptions, etc. I will revisit this chapter.
Chapter 8: Progressive Enhancement - This is a good overview of some of the sexier features you might want to drop into an app. Sound, location awareness, networking, etc. The coverage raises lots of questions for you to think about and has some good lists of things to think about like how will your app handle a lack of location awareness if the user has turned off location awareness or says no to the prompt to use location awareness in your app? How will you handle sound and sound effects in your app if you use them? How will you deal with incoming calls and sound? Lots of good things to think about if you touch on any of these features in your app.

(legalese)

Wednesday, October 7, 2009

Book Report: Programming the iPhone User Experience

Publisher: O'Reilly
Author: Toby Boudreaux

Title: Programming the iPhone User Experience
Tagline: Developing and Designing Cocoa Touch Applications

Overall
  • The book had a nice lief motif throughout which was to think about design first. I felt the discussions framed in this way were very helpful in eliciting thought about how can I do better with my app design? Have I thought various aspects of the design through enough? Or, I have not thought of that, what should I be doing about that aspect in my app?
  • As someone that has read most of Apple's iPhone introduction guides for programmers, the book could have been shorter as I felt there was a lot of rehashing of the basics. Like application templates and controls. I am sure that if I had done anything outside of the basic touch actions then I would have covered most of the touch chapter as well. That said, if you are new to iPhone programming or you have not read the programming intro docs from Apple, then by all means this is a short book with lots of overview. You will want more details than contained here but this will give you a good overview of the iPhone features you'll want to think about while designing your app.
  • The best chapter by far and the reason to buy this book in my opinion is chapter 9 on UX Anti-Patterns. Once you read this (and if you have used a reasonable number of apps) you will be saying, ya that is a bad design. If you've wondered what it was about such and such an app that made it not feel right then this chapter probably has a clue. Read this chapter to keep in mind UX designs to avoid without great thought.

Chapters In Order of Most Interest to Me
  • Chapter 9: UX Anti-Patterns - the first chapter I read and the best one for a lot of good tips on how not to develop your UX. Every iPhone developer should read this chapter. I will reread this chapter occasionally to keep UX issues fresh in my mind.
  • Chapter 5: Cooperative Single-Tasking - for someone coming from an enterprise and server applications UNIX background, this chapter was an excellent discussion on how the iPhone environment is akin to a web based environment where each app is like a web-page. You can even (as most devs would know) pass control between apps using the iPhone SDK's Custom URLs. This also had a good discussion on launching quickly, handling standard interruptions, etc. I will revisit this chapter.
  • Chapter 8: Progressive Enhancement - This is a good overview of some of the sexier features you might want to drop into an app. Sound, location awareness, networking, etc. The coverage raises lots of questions for you to think about and has some good lists of things to think about like how will your app handle a lack of location awareness if the user has turned off location awareness or says no to the prompt to use location awareness in your app? How will you handle sound and sound effects in your app if you use them? How will you deal with incoming calls and sound? Lots of good things to think about if you touch on any of these features in your app.
  • Chapter 4: Choosing an Application Template - this was a bit fluffy (see next point about things covered in the basic iPhone dev docs) but it did have a good discussion around identifying a problem to solve, thinking about how to solve it, and keeping your app focused. If your app's feature list and views are getting a little unwieldy then think about breaking it into different apps that are focused on solving only one of those features well. I thought this was a good idea and with the use of Custom URLs you could design a series of apps that work together collaboratively but would allow the user to purchase only the pieces they require. There are already devs out there that are opening their Custom URLs to others such as BirdFeed's Custom URLs from developer Buzz Andersen.
  • Chapter 6: Touch Patterns - good discussion about how to handle touches, touch accuracy (which lots of apps ignore with tiny buttons that are almost impossible to click), and a good overview of how to interact with touchable views. Worth reading for the discussion about view touch accuracy alone.
  • Chapter 7: Interaction Patterns and Controls - I found this rehashed a lot of the iPhone developer documents again so it would be good for beginners but if you have touched most of the controls in here then maybe the patterns will be of interest but the controls discussion was skip-able.
  • Chapter 1 to Chapter 3 had too much fluff which was good for those that have not read the Apple iPhone development documents but in general if you have read the iPhone Application Guide and the Mobile HIG then you can skip these.
Ok, so the FTC just passed laws about disclosing how a reviewer/blogger/etc benefited or whatever for posting a review. So how did I benefit? Well first, the book was free to me. The CocoaHeads group I belong too has an O'Reilly User Group membership. We get free books to review as a group every so often. This book came in and I got to review it for the group. I had the book for a month and it goes back to the group tomorrow night when someone else gets to take it and review it for a month.

Would I buy the book? Yes, I found I ran out of time to implement some of the code ideas in the book and I'd like to take some time to sit down and work through the samples. First I want to go and read Coders at Work though, so that will be the next purchase.

If you want to join in our monthly discussions and are an iPhone Dev in Ottawa, Canada then check out our CocoaHeads meetings.

Wednesday, September 23, 2009

iPhone Memory Management Tips

Found this great article on iPhone Memory Management. http://kosmaczewski.net/2009/01/28/10-iphone-memory-management-tips/

Worth a read and something I keep handy to refresh myself occasionally.

MT

Thursday, September 17, 2009

What happened?

Well, I fell off the face of the earth. Ok, not literally but my free time has all been sunk into my iPhone App project the past 2 months.

Am I running? Barely ever, as in never.

Am I riding? Nope.

What am I doing? Writing code, setting up a business to track expenses/earnings, setting up a web site, installing software to help me write software, reading about writing software, learning new software languages, and the list goes on.

I made the decision to put all my time into this App about 2 months ago when I figured it would be about 2 months. That time has come and gone and I have had to do a lot of things I never expected to move this project along. It has all been fun and a learning experience but it has taken a lot of energy and time.

I need to bring some balance back into my life and spend a little less time working on the App and a little more on everything else. I took a break tonight as you can probably tell and it has been good. I still read a ton but not thinking about the App has been good.

I call it the App (maybe it should be The App) since it is such a huge thing in my life right now. I miss running though and I want to get back. Running makes me push my physical limitations and writing this App is pushing my technical limitations. Some day soon though, the sneakers need some loving.

Wednesday, August 12, 2009

Getting Started With iPhone Programming

A couple friends have asked about iPhone programming since I yammer on about it all the time. They were wondering if they could get a taste for what the language (Objective-C), frameworks (iPhone SDK) and API (Cocoa Touch) would be like to use. So here is a short answer to that:

If you are a C/C++ programmer, you should have no trouble moving to Objective-C once you understand the messaging scheme they use. Print out a copy and review the definitive guide to Objective-C 2.0 (latest version). I've found that reading lots of code examples (Apple's and those supplied by others online) has helped me understand Objective-C better.

I think it would be helpful to start digging into some of the general documentation regarding the fundamental design patterns used throughout Cocoa and iPhone programming. Cocoa Touch being the OO API for the iPhone and Touch.

Wiki might be a good start for an overview (http://en.wikipedia.org/wiki/Cocoa_(API)) and then I would definitely dive into the getting started docs on http://developer.apple.com/iphone/ Starting with the Cocoa Fundamentals Guide and moving onward from there will give you a good understanding of how applications run on the iPhone. Many of the Apple guides have references to other prerequisite whitepapers, tutorials, and guides to read first or to continue learning in a particular area. These have been a ton of help to get me immersed in iPhone development.

As well, I would say take a look at the Matt Gemmell's iPhone Development Emergency Guide

Hope that helps you get up and running.

Thursday, July 23, 2009

Project Management for Small Teams

Ok, well the team here at the DroolFactory is one for now but we can dream. That said, even with a small team, with a feature rich application on a new platform in a new language and new SDK, needs to perform some project management.

Am I overkilling this obsession to write my own code in my limited spare time? Probably, but here is how I am handling it and why.

I'm a reader of Joel on Software (if you don't read it and you code or work in a software design shop then you should try it out; take a min and head on over and sign up for his RSS feed, don't worry I'll wait) and some time ago Joel annouced that his company Fog Creek Software was releasing a new product; FogBugz for software tracking.

The best part is that they also provide a version they host on their servers called FogBugz On Demand which is free for students and startups (1-2 users). I fall under the startups of 1 to...ya right just 1 user, so I decided to bring it up and try it out to track the work on my current project.

I am really impressed with FogBugz. It is serving my purposes and allowing me to perform estimates without a lot of Excel wizardry which is giving me an idea of what features are going to cost. For a Dad of two, working a day job, limited time comes in about 1-3 hours per night of coding which is way too much and I need to cut back, but don't we all?

Wednesday, July 22, 2009

Deciding on an iPhone App's Layout Using Paper Prototyping

Coding has been moving along on my current iPhone app. I've got some of the basics working, have a list of TODOs (ie. bugs or features) to move the app forward with the back-end components but I am about to turn a corner. I need to start laying out the UI.

I am designing an app that uses Twitter heavily. I don't want to write yet another Twitter application for the iPhone so there are features I do not need. That said, it will have to be snappy (I've read about issues, and have seen them, regarding scroll speed for twitter updates using tableviews) and have some of the nice features of full Twitter clients to make it attractive to end users.

So I am now presented with how to lay out the app to make it intuitive to use in a limited time. I want the user to be able to quickly send a tweet without have to do a lot of typing. That means I can preload options that the user can choose from. To do that I can use a multitude of options but I am leaning towards UIPickers and Segments but I could do it with TableViews as well. How to choose without jumping in and creating something that users hate or less than optimal?

I've already sketched some ideas so I was heading in this route when I came across Paper Prototyping as a means of UI design. The first article is a good overview of how to use paper prototyping at A List Apart: Articles: Paper Prototyping. The second resource I found which had lots of great ideas on how to use paper prototyping as on Wikipedia:Paper_prototyping.

I enjoyed the A List Apart article for it's chatty style which had some good examples of using this technique. I found the Wikipedia entry had some great ideas on how to handle scrolling items (something I need to tackle) and how to present the paper prototype when handling various UI actions (clicking a link or a drop down box).

Paper prototyping provides the ability to get early feedback from users before code is written about what functionality makes sense (rapid prototyping), usability testing (is the UI usable and easy to navigate), and the apps Information Architecture (can users understand where and how to find info they need). These were some timely articles to come across and I will be working this into my schedule before I start to make decisions about my UI.

Tuesday, July 21, 2009

Useful Resources for iPhone Dev

While working on my current app I have had to do a lot of research to get up to speed with Objective-C, Cocoa Touch, and many of the Xcode tools. Here are some of the resources I use when I am trying to find an answer:
  • Research Assistant within Xcode: provides context sensitive help for the iPhone SDK. Move your mouse over something from the framework (ie. UITextField) and see the accessors, mutators, protocols, etc. associated with that datatype.
  • Stack Overflow: a question and answer site for programmers by programmers. If you don't know of it and you program you need to know of it. Check out this Q&A for a list of top blogs/sites about iPhone Development: http://stackoverflow.com/questions/232570/what-are-the-best-cocoa-touch-iphone-programming-blogs
  • Apple Developer Connection iPhone: of course going to the source is one of the top choices. Check it often for updated docs.
  • Apple Developer Forums (Beta): another great resource in line with Stack Overflow, ask your question and get an answer. But remember, try to figure it out yourself first, if you don't know this you will find out the hard way.
  • Standford University's iPhone Application Programming: mentioned in previous post, this is another great resource for sample code and explainations Standford University's CS193P iPhone Application Programming.
  • Apps Amuck Blog: Not bad if you are just starting out and want to learn how someone else wrote some apps which are in the AppStore. Check their 31 Days of iPhone SDK Apps for lots of sample code.
Good Luck.

Do you have a site that you find useful in day to day iPhone programming? A great repository of sample code? A write-up on how someone else wrote their program and got it launched? If so drop a comment, I'd love to hear about others.

Sunday, July 5, 2009

Stanford University iPhone Course Online

Ahh, morning classes, big cups of coffee, the pursuit of knowledge, and a heavy book laden backpack; well that's how I remember university (and maybe just a little Magic the Gathering and Arcade). In case you are yearning for some educating on how to program one of those there iPhone thingamabobs then check out Standford University's CS193P iPhone Application Programming.

Saturday, July 4, 2009

Building Boost 1.39.0 for iPhoneOS 3.0

As part of my latest iPhone project I am going to sue Boost. I wanted to make sure I could do something as basic as build the Boost libraries (most are just header files you include but I wanted to make sure I could get a build working in case I needed any of the libraries that must be compiled).

So the search began, the Boost docs did not have details for darwin/iPhoneOS 3.0 so to google. I found the following links of order of helping. You may need to modify some of the actual compiler versions depending on when you read this but hopefully these links will help you raise the power of the compiler gods to allow you to build Boost for the iPhone:
Good luck!

Friday, July 3, 2009

An App For The Masses

Well, after much debate, note taking, idea jotting, use case outlines, and driving my friends and family mad, I have something that is non-game related and would be really useful. I don't want to release the idea since I take so long to get coding done but needless to say it is an any-person app.

So what am I doing to move forward? I've downloaded the latest OS updates, downloaded and played with the unit testing example (I am a strong believer in TDD, Test Driven Development), and tonight I am attempting to get Boost 1.39 compiled for iPhoneOS 3.0.

Why use Boost? It is a C++ library which one can think of as extending the C++ STL with lots of really useful data structures and algorithms. I plan to use some of Boost heavily and want to design much of the engine (for lack of a better term) for my app on something that has a better chance of being portable to over platforms. This way, if the app takes off it will be easier to extend it to over mobile platforms.

Saturday, June 27, 2009

Commuting to Work as Cross Training

As runners, we look for other forms of exercise to fit into a hectic schedule which will help improve our performance. For me this takes the form of biking.

In the spring/summer/fall I bike outside (winter's in Ottawa are a little crazy so I stick to the indoor bike at the gym). To fit in my rides I commute to work so I can shave off some cross-training on the way to/from work.

As part of my commuting I need to carry my gear. Some days this can be, lunch, work outfit, and on days I am running or swimming I need those sport specific items and shower gear. Where to fit it all?

I have bike panniers but they are your usual bike specific panniers. How to stick out a little and have a little fun with the bags that transport all my gear each day? I just completed a recycling project to modify two old leather briefcases into bike panniers. They look cool and are very neat as they float behind me.

You can read more at RecycleMyiPod.com:Turn a Leather Briefcase into a Bike Pannier.

Monday, June 22, 2009

10 Km Race Training

I'm back on the wagon and running again. I've started training with a coworker who is trying to improve his 10km time. If I can keep up with him (4 runs so far and today was the closest I stayed which was only about 10 seconds behind him on the sprints) I/we will be aiming to achieve a 47 min 10km race time in early August.

After the August race the plan is to continue the hard training into the Fall to try for a 45 min 10km in late October. Both of those times would be Personal Bests (PB) for me so it should be a fun summer of slogging it out as we push ourselves.

As cross training I have my self setup pretty good. I ride about 35 mins each morning to work and take a shorter route in the evening which is about 21 mins. I am riding each day unless I have some errand to run which I will need the car for. So far 8 days back and I have ridden 6; 1 day I had a dentist appointment and the other I had to drop off my son to Pre-School late in the morning.

This week, June 25, the outdoor pool near work opens for noon hour lane swimming. So I will begin swimming later this week. Then next week I plan to continue running 3 days a week, commuting by bike 5 days a week, and swimming 3 days a week. By the end of the summer I should be in smashing shape and have a decent tan (hard to avoid when swimming laps for an hour).

Anyone want to join me? ;-)

Thursday, June 11, 2009

Don't Banana and Ride

I hit the road this past weekend at the Montreal Tour De I'Ile. The bike ride was a 52 km ride through the streets of Montreal with a lot of the ride in the 'burbs.

The night before we were picking up some supplies. The guys mostly beer but also something to eat for breakfast. I ended up with bananas and pop-tarts...the breakfast of champions.

Come Sunday morning, it was a healthy diet of 2 pop tarts and a banana. We arrived on time just before 9 at the start. Then proceeded to wait about 1.5 hours as we slowly rolled our bikes up the hill to the start line. With a tour size of 33,000, it took a while.So around 9:30 I had another banana. Then put the last 3 on the back of the bike.

Once the bike tour began for real (as in riding) I learned I did not secure those bananas well enough. About 4 km into the ride, lots of bumps and I hear a kinda wet thump behind me after some commotion around my back tire (as the bananas went free).
Needless to say I heard lots of laughing behind me as the bananas attempted to land gracefully after jettisoning themselves from my rear bike rack. Oh well, easy come easy go.

The replacement coffee + croissant at Starbucks I had tied me over until the rest stops (rest stop equals food stop). The ice cream at around 40 km did not hurt either ;-)

Friday, June 5, 2009

Not Much Running But A Little Biking

Not much running these days.

Not much motivation (need to set a goal).

Not much time (busy enjoying my last few weeks on Parental Leave with my family).

Only real exercise (besides carrying a 10 month old around) has been some biking (dropping son off at Pre-School in the morning via bike/chariot, biking with my wife and our 10 month old, a little mountain biking, and this weekend the Montreal Tour D'Isle).

I expect running to pick up once I am back to work and need something as a break at lunch times. I plan to ride most days but may alternate that with some days where I run to/from work. At 8km that will only take me about 40 mins going easy.

Google MapViewController

There is a project running, hosted on Google Code, which provides Cocoa Touch wrappers for Google Maps. Find it at iphone-google-maps-component. There is also a newsgroup for discussion on it here at iPhone MapView Discussion Group.

Take a look if you are looking to add map support to your iPhone app. The project is attempting to wrap the Google Maps Javascript API in a Cocoa shell. It is something I will be revisiting with a future project.

Monday, June 1, 2009

What Goes Into A GUI Software App

Ok, besides planning, coding, testing? Like, GUI things perhaps (oh ya, you know this is going to be a long battle for me to get something up and running, but one can try).

While planning a non-iPhone project (ok, well non-iPhone application project) I wanted some artwork but said to myself, "Self, this is something that would eat up hours as you try to recreate the wheel to make some iPod icons, let's search the net." Google...iPod icons...searching...bing!

I turned up some good sites, but in particular I liked IconArchive. I will be revisiting this site often as I need icons and sprites for some of my projects. The site had a good selection of iPod icons which fit the bill for my other project and there are a large selection of icons I can use for some other iPhone apps if they get out of my brain and into something working and ready for beta. Bonus here is that some of the icons are available free for non-commercial projects so you can give them a try before you buy the license if your project gets off the ground and is ready for the App Store.

Being a T-Shirt Junkie, I was thrilled today to get an email from Threadless that said they were having a $5 Tees sale. Sweet!! Ok, what does that have to do with content for an app? Well, the Type Tees (t-shirt with just text on it) have a link to the font used for the T. Bingo!! If you want to polish your app, how about a little custom font work? This will come in handy for several of my projects (a board game and the main iPhone app I am working on). The two sites which had fonts I can use at a reasonable price are Blambot and T.26.

Another set of mostly Freeware fonts I found which have a couple I am interested in are at The Cumberland Fontworks. There are lots of interesting fonts here what would be useful for several genres of games.

As the work on multiple projects unfolds and learn more and more about the items required to build a physical board game, design an engaging website, and make an iPhone game. Artwork in the form of fonts, icons, and sprites, just being a few.

Tuesday, May 26, 2009

2009 Paris Marathon Detailed Update

Well, it has been too long in getting to this but here I am. Shamed into it, I must admit that I have been not touching my computer much since we got back from France. I have been doing some Faces updating in the new iLife 09 iPhoto, I've been playing a lot of iPhone games, and I have been doing a whole heck of a lot of gardening, playing with the boys, and general chores around the house.

So, first off, if you are not hooked in with me on Facebook I have shared the race photos in my Paris Marathon Photos Album. Check them out for some cool photos of the beginning when you can see almost the entire 31,000(ish) racers.

How was the race I get asked. Well, it was awesome. It was a ton of fun, I set PB (Personal Best) of 4:14:30 which is 14 minutes faster than my first (an only other Marathon) last year. You can get detailed stats from here if you are really that interested in times and such. If that does not work search the Paris Marathon site results page, my bib was 22002.

Here were some highlights from the race.

First, I was standing at the start and wondering why all these guys were lined up in a star (4 lineups converging) formation. I figured they were getting some freebie since there were lots of stuff being given out. Nope, they were standing in line for the open air (as in no doors) mens urinals. Open air urinals became a theme throughout France on the trip.

Filed under the Pay Attention Department. While running the streets of an unfamiliar city (well at least Paris) you need to keep you wits about you and your eyes scanning ahead of you for racers veering around obstacles. I watched one guy do a head of heels (literally) and face plant (a technical biking term for using you face as a brake) as he ran into a mid-thigh high traffic pillar, meant to direct traffic around a mid-road traffic light. Can you say ouch? He actually got up and continued running. Man, that's guts, determination, or stupidity if you ever saw it.

Again, from the Pay Attention Department, there are cat-eyes on the road in France. What are they? They are little reflective caps about a half inch high in the middle of the road which are along the white dividing line. They are there to help drivers in the night time to see the dividing line (in rain these must be a godsend, I wonder when we will ever see this type of thing here in Canada) and they also act to jolt you into realizing that you started to wander across the lane into oncoming traffic (again we could use that). OK, so this guy is running along by the Louvre about 10 feet in front of me and to the left of me. Admittedly everyone is rubber necking all over the place checking out the sites this early, maybe 3 km, into the race. All of a sudden, he hits one of the cat-eyes and one, then the second of his sneakers just launch off his foot, heading in our general direction. He is tripped by this and does a remarkable slow motion attempt to catch himself, but nope, flippety flip he goes. I passed him, as did the crowd of cattle we were, while he was grabbing his recovering and grabbing his shoes. To continue? Hell who knows, but this is why the numbers I saw showed about 37,000 starting and only about 31,000 finishing.

Under the, "Did you read the small print, hell the large print even" Department, yes, I heard someone saying to their friend, "I ran a couple 10 km runs, this should be no problem right?" Ya, sure a Marathon is only 42.195 km, that is only like 4 times my 10km practices. No problem? I think she may have joined the other 6000 that DNF (Did Not Finish).

This just in from the Unpleasant Spaces Organization, when in a city where a Marathon is being run, avoid the sub-way and public transit for a couple hours around the end of the Marathon. Trust me, a sub-way car full of runners is a high "like gym-bag stinky" zone. Move along by foot please, nothing you want to smell here.

While running a Marathon there are many decisions that might weigh on your mind and these will be tougher than the physical aspect of the event. That is until the physical and mental start to work in tandem, like when you feel your pulse racing, your heart feels like it is ready to pound out of your chest, and you take a quick pulse + watch check. Only to go, "Holy Heart Attack waiting to happen, Batman! SLOW THE HELL DOWN!" That was about the 32km mark. I slowed it down a bit since I was thinking, finish and be happy I ran this, or blow up and drop dead? I will take happy I finished. Beating my PB (Personal Best) was a bonus.

When traveling with family, be realistic. You are going to be touring, you are going to be walking, and you are going to be carrying kids around. I decided to have fun, not be a strain on my family by leaving them to sit on the couch and relax before the big day (thereby driving them nuts, mostly my loving wife who would have had to wander around Paris with a 3yr and a 9 month old). Instead I prepped before I left by trying to get in a couple days of touring/walking at home with our youngest in the child carrier and backpack. This way I would at least be used to that before I left. I also said the hell with style and just brought my current 2 pairs of running runners. I used though alternating so that I spent the day on the best platform for my feet while we toured Paris.

Would I run Paris again? Yes, but not for like 30 years. There are so many other places to run, Paris was an awesome experience, the sights were amazing, the atmosphere was electric, and there were lots of little things that make it stand out in my mind. But, we are on this Earth such a short time, I want to see new places and as such I got the idea from someone to run a Marathon in a city for each letter of the alphabet. So far I have completed O(ttawa) and P(aris). So, I have not committed to this yet, but it is an idea I will be revisiting. Heck, come to think of it M(ontreal) and T(oronto) are so close ;-)

Tuesday, April 7, 2009

Fwd: Paris Update

>> Chip Time: 4:14:30
>>
>> Photo below is at about the 10k mark.
>>
>> Overall it was a good race though I really dropped off in speed
>> after 35k. I was happy with the race, the route was excellent and
>> I will post more details once I get to a real keyboard (the iPod is
>> a bit tough to type on).
>>

Wednesday, March 25, 2009

Planning an iPhone Application

My first few attempts at iPhone apps kind of went like this:
  • Had great (to me at least) idea.
  • Fleshed out maybe a page worth of notes on it.
  • Started coding so I could learn Cocoa Touch, Objective-C and XCode.
  • Got some stuff working well, some stuff not working so well, and some stuff just plan not working.
  • Got to a point where I needed to drop in a lot of artwork and then the project stalled.
So, I still have those projects ready for another day when I sit down to plan them out a little more. With new ideas I am starting to put more thought (there's a novel idea) into the design of the application before I write any code. This time I have pages and pages of notes for the ideas including:
  • What purpose does it solve for the user?
  • For games, how do I build a sense of community around the game?
  • Rough sketches of the screen layout (this has helped me realize some of the layout ideas are bad and hence I am working that out on paper first instead of coding stuff that I then go and say, man that sucks, end up depressed at the lack of progress, and then the project stalls).
  • How would I test this? How can I break this into manageable chunks that allow me to a) learn the APIs, b) unit test the code?
  • Writing down features including a Narrative or Use Case for that feature. This has helped a ton to point out ideas that might need more thinking or maybe should just be dropped.
  • Figuring out feature sets for releases. Once I have Narratives for a feature this helps me see which Narratives group together into a useful set of features for a release. Some of the features, though sounding cool, are also more difficult to develop and test, so I want to group those into future releases which I would implement if the initial application does well. No sense in trying to build a city if all people wanted was a rest-stop on the side of the highway.
  • Allows me to keep track of ideas that might need more work but at least it is on paper so I can go back later and resurrect the idea if it has merit.
So, the work continues. What am I working on now? Like everyone and their dog, I have some game ideas. One of those I am actively working on (pen and papering it to work out the design) and it was something that would not have been possible (ok not easy) before the iPhone OS 3.0 release. Hence, with the release of the new OS in mid-summer and this idea having floated around for a while I am actively working on it so that I might be able to get something working for shortly after the 3.0 release.

The work continues...the learning continues...the journey continues.

Monday, March 23, 2009

Running With Jogging Stroller

My wife is out of town helping out her Brother and our Sister-in-law with their first baby. Baby ETA is tonight or tomorrow. Exciting stuff to have another baby in the family.

So I am on drop-off and pick-up duty this week with our 3 year old (our 8 month is with Mom). Since I missed my long run yesterday I was determined to get it in today. I had hoped to do it in the morning by running my son to Pre-School in the Jogging Stroller (a Chariot) and then continuing to get my total run in of 21.1 km (just a Half Marathon long run this week). The morning got away from me though and that was not going to work.

Not swayed by that I left work early, got home, changed, setup the Chariot and started the first part of the run without my son. I picked him up at the 14 km mark and he joined me for the last 7.1 km.

I am used to only taking one of the boys in the Chariot for a total run and I find that this is ok, though hard on the long runs of 20+ km. Pushing the stroller also makes the shorter, but faster pace runs, a much harder workout. Today's combination of 14 km without any child in the jogging stroller and then 7.1 km with a fully loaded 3 year old really drove home the point that "Man, it is a lot of work pushing the kids."

I never realized how difficult it was until today but needless to say, it was a hard 7.1k. I can only think it must me good for me since it is like an endurance strength work-out. It is a good upper body workout as well as you tip/lift the stroller over crubs/dumps and maneuver around obstacles so I tend to be a little sore/stiff in the arms/upper back the next day (especially after pushing my 3 year old).

I let my 3 year old know today that I appreciate him coming on my runs because he keeps me company, helps me work harder during my workout meaning Daddy gets stronger, and who would not love a companion that sings/tells me stories. Today's story was The Three Little Pigs; of which he would was the wolf and I played the pigs. We were going back and forth telling the story (mostly "let me come in," "not by the hair on my chinny chin chin," "I blew your house down Daddy," and repeat). You might be able to guess that my part was done a little out of breath. He enjoyed it though and it made the last 2 km fly by.

Friday, March 20, 2009

Nike iPod+ Application Locked Up

My last long run on Sunday was my longest run so far this season at 32 km. As those that read this often probably know, I use the Nike + iPod system to track my mileage and to help with training. I also use the results which are uploaded to the Nike+ site to track my progress and create neat graphs of my distance completed. I find that this tool is a great motivator, which we all need sometimes.

Well, I was pretty disappointed last Sunday when the Nike+ software locked up when I hit the End Workout button. I waited and it did not respond, it just sat there. Now, to complete the workout and have it save to the Touch's memory you have to hit a Done button after you review the workout. I never got a chance to hit the Done button. The Touch just froze.

I gave it 20 mins while I changed and drove to meet my running partner for a post run meal. But nothing, it was just hung there doing nothing. So a hard reset later and my workout data was lost. Bummer, since that workout is now lost and means my totals for March are impressive but not as a impressive with the missing 32 km.

This is the first time this has happened to me after a run such that I lost my workout. I have seen the app lock up before but not during a run. Applications locking up seem to be a problem occasionally on the iPhone/Touch (I have a Touch) due to memory leaks I am assuming. I have heard some antidocial reports to reboot your device every couple days or after a download of a large app. Some games (apps) use so much memory that it is suggested you reboot before playing them to make sure all resources are cleaned up.

Funny, how even the most user friendly devices still require a fair bit of know-how of what is going on inside the device to get the best user experience from it. I get this being a developer myself and into gadgets but I wonder how many people out there just find their gadgets an annoyance?

What ticks you off about technology?

Sunday, March 15, 2009

Longest Run This Year

I had my longest training run of the year today, 32 km, and it went well.  Just 1 second off my goal pace so that was pretty good.

Joining me for 1/3 of the run was Hiking Man which made that hour fly by.  We talked about upcoming races and unless something intercedes we will be running the two 5 Peaks Trail races coming up in September and October.  There are 5 races over the summer/fall in our region but only one is in the spring, the rest are late August, September and October.  The two races we will do are near by (45 min drive at most), while the other 3 are 2-3 hours away which is more than I can work into a busy family schedule.

Today's run went well, but I did develop a pretty big blister (larger than a toonie) on my right foot behind the big toe.  This was disappointing since it slowed down my last about 5 km.  My big hope right now is that this blister will toughen up that section of my foot and be ready for the extra 10.2 km that race day will bring.

3 weeks to race day and I am getting excited.

I've probably said it here before but a Marathon has 2 halves, the first 32 km and the last 10.2 km.  The first half (32 km) is really about training, your training gets you here and you know you can do it.  The last half (10.2 km) is about the mental game, especially if you develop something like a blister on the first half.

So, with 3 weeks to go, I am now into taper mode.  Which means lower distance running but with higher speed to simulate race day.  Looking at the next 3 weeks I have a 13km, 8km, 21.1km, 13km, 10km, 16km, 10km, 5km, and Race Day (42.195 km).  So another 96.2 km until race day with 390 completed so far this year.

Sunday, March 8, 2009

A Running Partner Helps A Long Run Fly By

I had great luck today, I had 2 running partners. First, my 3 year old asked to come on my run and since I was only running 24 km I said ok. (Next week I will have to pass since I have a 32 km run coming up.) So, we went to his swimming lesson, arrived home at noon, had a bit to eat and then packed the car with our gear (running gear, water, toys, food for both of us, and the chariot).

Since I was taking my son in the running stroller I figured the best route for least water, bumps, and maximum side walk space would be along the canal. So we headed down to Dow's Lake and parked. We began the run, my son quickly breaking out his food supplies since he mostly skipped lunch, and started from Dow's Lake towards Laurier.

At about the 4 km mark, I ran into Steve Mahood who ran on the 2007 CBC Ottawa Gotta Run team with me. He had about 16 km to go and was running near my pace so we joined up for our run. My son had passed out at about the 2 km mark and stayed sleeping until about kilometre 16.

Steve and I caught up, ran a little too fast, slowed down often to keep from blowing out but kept up a steady chat for most of the run. Things got a little quiet around the 18 km mark when we were both pushing it. It was good to catch up with an past running friend and it made the kilometres just slip by.

Makes me think I should run with someone more often, it was a good time and I still achieved my goal (while pushing the running stroller no less).

Saturday, February 28, 2009

Cool Tech

Some things amaze even me. Now this one has been around for a while but I still think the idea is cool. In some races they will send an SMS message (a small text message of up to 140-160 characters) to the cell phone of a friend/family member with your time/place as you cross at certain points in the race. In Paris they will be sending out an SMS at the half way point 21.1km and at 30km.

The service is being offered by Gaz de France. In case my explanation was not clear, here is an animation they put together demoing the service: http://marathondeparis.jetmultimedia.fr/img/PopUp.swf

So far the site to register for this service has been flaky. I can not figure out the combo of name and birthdate it wants from me to register me. No error mesages, just a little > Invalid < message.

So once I figure out how to get into the site I will see how many people I can register. If you are interested in me adding you to the list then send me a mail with your cell number. Family and friends first. I will also try adding my twitter feed so that it gets twittered. That will show up here or on the right or on my feed if you are subscribed.

Wednesday, February 18, 2009

Going Strong

Looking at the mileage so far this year I am blown away. Wow, the miles add up when you are training for a Marathon.

This year's training is going very well. Having completed my first Marathon last year I am more confident that with this year's outing. I feel stronger, I am completing my longer runs without the problems that plagued me (calf pains), I am not very sore after my long runs (only stiff for a day though the blisters I have collected last week had me limping a bit on Monday and Tuesday).

Running this much means more shoes. The pair I have now I purchased in the fall last year and I will need to get a new pair to break in for the Marathon. The ones I have now are no longer lasting to the end of my long runs. So they are fine for shorter (10km-ish) runs for a while.

As for some of the issues you must deal with when you start running for 3+ hours (if you are a 4h 28min range Marathon runner, my time from last year), I have been revisiting them recently:
  • Blisters: little ones and a huge one on my arch from my orthotics. I am double socking it with under/wicking socks but it is not stopping the fact my feet need to build up some callouses to handle the beating.
  • Friction Burns (only thing I can think to call them) in private areas, under arms, nipples. Body Glide (looks like a stick of deodorant) has helped out here very well. One note, don't wear one of your favorite shirts when using Body Glide or other anti-friction creams since you may end up with a shirt that is now permanently stained from the oil I assume is in the product. Not sure if the stain came from Body Glide or something else I tried.
  • Training takes a long time. You need a supportive spouse when you have 2 children under 4. My wife is a key part of my training plan, her support helps me attain this silly goals I set.
  • Sleep is critical. You need more. Missing it (sick, teething 6 month old, overtime) leads to lower energy, possibility of injury and of course being overtrained (which basically translates to under rested for a simplistic look at it).
  • Food is critical. Junk in, junk out. Be good to yur body, refuel during your run (I refuel about every 45 mins and take water every 20 mins or when I feel thristy).
Your body is not a temple, it is a big house of cards and each piece of food, each ounce of sleep, and each training session is just one small piece of the foundation that keeps your house strong.

Sunday, February 8, 2009

Underslept + Hard Training = Overtraining

My 6 month old has been teething for about 3 weeks now. He is onto the 7-8 teeth now. My wife, bless her soul, has been taking the brunt of it in the night times (getting up with him) but we are all not getting enough sleep. A screaming kid in the house in the night time does not a good sleep make.

So, pile that one with the training which I have been working very hard to on, and I was blown this week. I rested on Monday instead of cross training, I ran hard on Tuesday, then cross trained on Wednesday, but Wednesday night was a low sleep night so I took off Thursday/Friday/Saturday, and did my long run today.

I needed the break,even with skipping one of my runs, my legs were heavy at the start of the run today. I was facing a 29km run today at a goal pace of 6:09/km. I was blown at about 27km and at 28km I stopped and walked the rest of the way home (only .43km). Actual time was 3hr 1min 55sec or 6:24/km.

Not bad considering I only started to dial up the distance last month, but I am hoping I get more sleep this week so I can tackle next weekends 32km with a little more pep. Here I am hoping to have pep running 32km, heck I am pretty stoked I can hammer out 28km right now. I got a glimpse today that even with a compressed training schedule (I wish I had 4 more weeks) I should be ready for the Marathon in April.

Now, I am going to go crash and read a book while I wait for my family to get home.

Thursday, January 22, 2009

Weight Goal Tracking

So far I am doing well with the weight goal. I am using FitDay for PC (we purchased it a few years ago and it helped then, as it is now). I am using it to plan my daily calorie intake, track my exercise and plan my weight loss goal.

The PC program costs money but you can use the web based software for free. Go to http://fitday.com and sign up for an account. You can even sync your online account with your PC software for an extra cost (not something I plan to do).

So how does it work for weight loss? You put in your stats (weight, age, height, etc.), select a desired weight goal and an end date when you'd like to reach that weight. The software then tells you the average weight per week that you must lose to reach your goal. I currently need to lose 1.34 lb/week to reach my target of 175 lb for April 5. As you will see, at the start I have been losing more than that a week.

So how is it going? Well, first a disclaimer on my results. I was sick with Tonsillitis one of the weeks and I have been fitting a mild stomach flu this week which is mostly just curbing my appetite (nothing serious). So far, since Jan 1, I have lost 7 lb.

How have I done that besides the extra help with appetite suppression brought on by a wickedly sore throat and an upset stomach? By having a calorie deficit everyday since I started tracking with Fitday (I know that for sure, but I am pretty sure I was eating less than I burned while I had Tonsillitis as well) I am losing weight steadily for now. I am sure the weight loss will start to slow as it usually does, but hopefully the combination of running 3 days/week, strength training 2x/week, and cross training 3 days/week will help to keep the fat burning alive.

Here are some Fitday graphs to show my progress so far. The first shows my progress so far this month. As you can see, I have lost 2.33lb/week on average. A little higher than I'd like but I find that when you first start a diet you lose your first few pounds fast.

Next up is a graphs showing the last five days of calorie intake versus output. As you can see the long run on Sunday is a real big deficit. I'd aim to eat more after those long runs but I already fill up on food immediately after a run and feel pretty good. I think I might add a sports drink as well to increase the carb intake for muscle refueling (beer is a good choice as well ;-).

I'll give further updates as time goes on to show how tracking my calorie intake/outtake, tracking my exercise, and the increased exercise routine is helping me with my goal. Two of the big reasons I am doing this is to help reduce running injuries and to be lighter which means faster when I run. My sneakers might even last longer which means I save some money ;-)

Monday, January 19, 2009

Dial Up The Distance

Well, this weekend was a bit of a stress test. Was I ready to start dialing up the distance in my training?

Apparently so. I did a 19km run this Sunday and though I start to lag a bit on the last 3 km, I kept a fairly consistent pace for the first 16km. I was also feeling pretty good (though very tired) last night and today I was tired. My legs were pretty good today given the run, but my muscles were tired and the hips were a little sore.

This is good, since I have to start logging the long runs if I stand a chance of completing the Marathon on April 5. That's only 11 weeks left of training.

Last week I started strength training and that really did my legs in. My large butt muscles were very sore Thursday and Friday. So I took off Friday, got 4km of skating in on the canal on Saturday, and then my run on Sunday.

Today was another strength training day and I am not as sore this time around. I skipped the rowing today since I am still run down from the big run yesterday. Tomorrow is back at it though with another rowing workout and strength training.

Tuesday, January 13, 2009

Be Gone Sickness

Ok, the meds worked and I am feeling better. I am back at work and back into training.

Here was training the past two days:
* Monday, Jan 12, 2009: Rowing Machine for 30 mins
* Tuesday, Jan 13, 2009: Running, 20 min warm-up, 3x1 mile (1600 metre) repeats with 1 min Rest Interval between miles, 10 min cool-down.

Plan is to get in some gym time tomorrow including strength training and some spinning. Then Thursday is swimming for 30 mins. Running again on Friday and Sunday.

Rest on Saturday.

It feels good to be back.

Thursday, January 8, 2009

Repeat of 2008?

So far, this winter and this year is shaping up to be a repeat of last year. How is that? Well, I had a nasty cold in early December, another cold at the start of Christmas vacation which lasted a week, and to top it off, I have been suffering, what I thought was a flu, this week.

How did the week begin? Saturday was a very low in energy day as was Sunday, then Sunday evening I started to get as sore throat and fever. The fever turned into 102 degrees with Advil (at one point early Monday morning) and then started alternating between a wicked fever and then cold sweats.

So, since Sunday I have been fighting the recurring fever/cold sweat. I figured, ahh this is a flu, ride it out for 3 days and see how I feel. Well, today I went to the Doctor and he looks at me, listens to me try to talk, and before looking in my mouth says "You have Tonsillitis." He then checks my throat and sure enough (something I should have looked at in the mirror) there are white globs (puss for the non-squeamish) on the back of my throat.

A prescription of antibiotics and I am now (hopefully) on the road to recovery. I am hoping that my throat starts to feel better tomorrow sometime. I can't sleep because my throat gets so sore. I basically lie in a heap and pass out between small hacking fits. Then the fever and chills kick in.

So, as with last years multiple colds in the winter, the year is starting the same.

And I have a physical scheduled for tomorrow which the Doctor thought would be fine to do given he knows my normal pitiful state.

I really want to run and each time I start to feel a little better I think, ok if this keeps up for another hour then I am going for a run. Feeling good sometimes lasts about 15-30 mins before another fever hits.

Anyways, I am rambling along here (since talking out loud hurts most of the time) but I am not deterred. Once my body starts to right itself I will be out pounding the pavement again.

Thursday, January 1, 2009

A New Year, 1000km to Go

Well, a new year as rung itself in. Being sleep deprived due to a sick 5 month old that we are trying to help learn to sleep through the night (hard when he is up with a hacking cough); our night was decidedly uneventful (if you minus the 2 hours of non-stop prep work for Christmas Part 2 today) as we went to bed our usual "late" time of 11pm.

To clear a couple things up from the previous paragraph:
  • "Early" bed-time around here is 10pm. Anything else is late.
  • Christmas Part 2: Held around New Years when some of the Family comes to visit my wife's side of the family. It consists of gift giving and a second Christmas Dinner (most excellent).
So, with 1000 km in 2008 completed, what is the plan for 2009? First, steady as she goes for the running. Running 1000 km in 2008 kept me on track with running all year and kept my fitness level up all year round. So, for 2009 I will again be running 1000 km. I have thought of adding distance or another sport but things progressed well last year and was a good balance of fitness, work, and family time. Hence, no change.

As for additional goals. I figured that running all year would help me shed a couple pounds and bring me back to my weight of 175 lbs when I am doing regular exercise (and eating properly). Well, the unstated weight goal last year did not materialize. Oh yes, I lost a little. But no where near what I hoped. What went wrong with that one? Well, for starters I never stated it, I never wrote a plan, hence I stuck to no plan.

No plan for me means, "Ahh, I did a big run, how about a donut? Sure." These are the thoughts and actions of sinking ship before it even sets sail. So, for 2009, call it a resolution if you want but I will call it Phase 2 from Mark's Brain, "Reach desired long term weight." (Phase 1 being run 1000 km a year to keep me on the exercise track.)

Phase 2 consists of the following measurable targets:
  • Achieve a 10% reduction in body weight at the beginning of 2009. Current weight is 195lb so we are aiming for let's call it a round 20lb weight loss.
  • 2009 Goal weight is therefore 175lb by Dec 31, 2009.
Phase 2 Strategies:
  • Post about this goal on my blog so I have publicly stated my intentions (studies show that this helps one stick to a goal).
  • Track food daily.
  • Figure out target calorie intake and aim to achieve this.
  • Cut out crap (opps, I mean the little bit of junk food I still eat, such as the reward donuts). Stick to healthy, whole food rewards such as my favs; dates and almonds.
  • Measure the damn dates and almonds.
  • Cut out the cream and sugar in my coffees and switch to black or skim. Both very doable for me but I've slipped in the past few months.
  • Dear I say, post a graph on this web site tracking my weekly/monthly weigh-ins.
Ok, so that is 2009's Phase 1 "1000 km/year" and Phase 2 "Reach desired goal weight" for Long Term Health. Let's see how that works out over the next year.