Live From 360iDev!

Filed in 360iDev, iDevBlogADay, iOS Development | Comments (0) |

Live From 360iDev!

360iDev 2011 is in full swing, and it’s been great so far.

My OCMock Session On Sunday

I gave an updated presentation/training session on OCMock Sunday morning entitled “OCMock: Crash Test Dummies For Your Code”. Overall, I was pleased with how it went. It was a three hour session, so we took the first half to briefly discuss what mock objects were about, and then went through the fundamental features of OCMock using test cases to demonstrate each one. The demonstrations led to some good discussion with the group (about 40-50 devs) about testing in general, TDD, and OCMock. I was encouraged by the number of people that participated in the discussion, and I learned as much from it as the group did.

After a break, we talked a little more about how to make good use of mock objects, and then I took the plunge into a live coding session, which is always a risk. To mitigate the risk I had scripted the entire sequence and practiced it several times. I used a simple text file with all the code blocks I needed so I could just talk, cut & paste, and demonstrate each step.

Unfortunately, I chose to veer from the script early on (foolish!), made a simple mistake, and spent 10-15 minutes trying to clear it up. What I should have done was remove what I had just done and get back on script, but I ended up stumbling around and feeling foolish. Eventually, I came to my senses and just opened up the finished project to show what I had intended to do in the first place. Then I was able to mostly, but not completely, return to my script and finished the session a little better (but not great).

Later that afternoon, I reopened the project I had built live during the session and fixed my dumb mistake in under 2 minutes. Oh well, hopefully I’ll remember to stick to the script next time, or approach things differently.

Mingling With Other Developers

One of the best things of a good conference is meeting new colleagues and renewing friendships with folks I haven’t seen since the last conference. Sunday night I had a great time mingling at the opening reception and learned as much from others that night as I did in the sessions. My son Nathan, a recent college grad, is just starting into iOS development and it was great to introduce him to some successful, experienced game and app developers. Hopefully, it provided some great motivation for him, I know it motivated me!

After today’s session, there was more great conversations around dinner with a group of around 20 (and a very accommodating waitress) — more fuel to stoke the fire and excitement about developing cool stuff for iOS devices.

Monday Sessions

I enjoy the variety of sessions at 360iDev. I attended design, development, and business development sessions today and learned from each. All were well done and taught me things I didn’t know or motivated me to improve in areas I’m already doing. I’m looking forward to a lot more great stuff in the next two days.

Looking Forward to the GameJam on Tuesday

Nathan and I will be working together at the GameJam tomorrow night, and I’m really looking forward to see what we can come up with! I’ve really enjoyed past GameJams, and I’m sure this will be even better working together. Santiago & Charlie (two young 360iDev veterans) are back again, and it will be great to have them at the GameJam again as well!

I’m going to try to call it a night early tonight so I have the energy for a late night session tomorrow.

I’d encourage anyone who does iOS for a living or a hobby, full or part time, to consider 360iDev next year — it is a great investment that pays great dividends.

This is my first post on the new iDevBlogADay schedule, and since I missed my first slot of the new schedule, I am thankful for the forgiving nature of the new style.

We all need the support of others to do our best work. Find other like-minded developers that will provide encouragement and motivation through local user groups, conferences or meetups. A great collection of indie iOS developers have helped me stay on track through meetups, 360iDev, twitter, and iDevBlogADay.

I regularly attend Cocoa/iPhone developer meetups in Cincinnati, Ohio and Columbus, Ohio. If you are in the central or southwest Ohio area, come join me at either monthly meetup:

Finally, here is a little more information about me, Doug Sjoquist, and how I came to my current place in life. You should follow me on twitter and subscribe to my blog. Have a great day!

Will Code For Fun

Filed in 360iDev, iDevBlogADay, iOS Development | Comments Off on Will Code For Fun |

My work is fun.

It usually is challenging and non-trivial, but it is also fun.

My clients find the results valuable, but it is still fun.

I attended 360iDev this week which was great fun — but it is not why my work is fun.

Working with smart and creative people is fun — but they are not really why my work is fun either.

My work is:

  • Long hours of head down struggles with conflicting demands and confusing requirements;
  • Opportunities and possibilities rattling around my head for days;
  • Researching problems and fixing them cleanly;
  • Struggling with multiple design iterations to find what works best;
  • Discovering what will best meet people’s needs;

I’ll be honest, not every day is fun, nor is every task, but almost every one could be. I’d like to explore what it takes to turn the drudgery into fun, and move from just slogging through tasks to actual enjoyment.

What is “Fun”, Anyway

In A Theory of Fun, Ralph Koster says:

fun is the act of mastering a problem mentally.

My work certainly has problems that can only be solved with the mind, and successful work definitely includes mastery. So, by Koster’s definition, it is possible for my work to be fun.

Jesse Schell says in The Art of Game Design that:

fun is pleasure with surprises.

Well, my work often has surprises, but they do not all bring pleasure. But, his definition seems to have enough room in it to say that my work can be fun.

I Recognize “Not Fun” When I See It

But what about work that seems *not fun* by any reasonable definition. What is it that takes those problems, mental challenges, and surprises and transforms them into fun? The process that Schell uses to define game has helped me understand what that transformation of work from “not fun” to “fun” might require.

He builds a definition for “game” by investigating what others say about fun, play, and other terms which made me think about what makes my work fun. Key among those terms is play, which he defines as “manipulation that satisfies curiosity”. The bulk of my work is manipulating things like ideas and algorithms, so this seemed like an interesting place to start.

Is It “Work vs. Play” or “Work and Play”

I manipulate things in my work, but what about satisfying curiosity? And what about fun?

Notice that Schell’s definition of play does not require it to be fun — you can play with something that turns out not to be fun. That seems to be close to work — you can work with something that turns out not to be fun. Since my desire is to make my work fun where I can, I think looking at play a little more might be helpful.

He quotes George Santayana on play:

Play is whatever is done spontaneously and for its own sake.

When I think of work, spontaneity does not leap to mind. But when I am free to choose projects and clients, there can be a spontaneous feel to it, and it definitely includes a “for its own sake” component. When I have control over what I work on, I will choose the more interesting work — work where I can learn, grow, and satisfy my curiosity about something. So the more freedom I have in choosing projects and clients, the more fun my work will be.

This leads to my first tip about making my work fun.

Tip #1 — Do not let current constraints on your work immobilize you, they should motivate you to find ways to have more control over your work.

Attitude Is King

But, there are always some tasks we must do that do not really appeal to us. Schell expands on “for its own sake” with examples and observes “an activity itself cannot be classified as a ‘work activity’ or ‘play activity’. Instead, what matters is one’s attitude about the activity”. This leads to another tip:

Tip #2 — While you cannot always choose work activities, you can always choose your attitude.

Schell combines several concepts and concisely defines a game as “a problem-solving activity, approached with a playful attitude”. I believe this applies directly to my work. Even unpleasant tasks can be made more palatable, and perhaps even fun, with the right attitude.

Adjusting My Attitude — The Key To Making Work Fun

Fresh Eyes

Two young developers I met this week at 360iDev illustrate how work can be fun. Santiago and Charlie, somewhere around 13 years old, are friends who share a love for making their iPhones do cool things. I won’t pretend to know them well enough to understand all their motives, but they were most definitely having great fun. They were right there in the front in most sessions, even participating in the 360iDev Game Jam until about 2am. It was a joy to watch them.

Watching them during the Game Jam leads to another tip:

Tip #3 –Look with wonder at the cool things that are possible.

(They both have several apps in the store. If you are interested check out Santiago’s Apps and Charlie’s Apps.)


I am very blessed to be able play around with such cool and powerful stuff, which leads to the last tip:

Tip #4 — Remember to be thankful for the opportunity to attempt great things, whether or not you end up making a living from it.

My Work Is Fun, Yours Can Be Too

How fun is your work? If the answer is “not very”, remember these things:

  1. Find ways to have more control over your work,
  2. Choose your attitude towards your work,
  3. Look at your work with wonder at the possibilities,
  4. Remind yourself to be thankful that you can play with such cool stuff.

As an indie developer, one of the best things you can do is to find like-minded developers that will provide encouragement and motivation. A great collection of indie iOS developers have helped me stay on track, developers from local user groups, those associated with iDevBlogADay, or those I have met through 360iDev. I encourage you to find local NSCoder nights, developer meetup groups, or other user groups to keep your motivation on track. If there aren’t any meeting locally, try to find just one other local developer and start one.

Also, here is a little more information about me, Doug Sjoquist, and how I came to my current place in life. You should follow me on twitter and subscribe to my blog. Have a great day!

Commitment: "This may sound too simple…"

Filed in 360iDev, iDevBlogADay, iOS Development, Miscellaneous | Comments (0) |

One of my favorite quotes1 is from a book by Scottish mountain climber, W.H. Murray:2

‘But when I said that nothing had been done I erred in one important matter. We had definitely committed ourselves and were halfway out of our ruts. We had put down our passage money–booked a sailing to Bombay. This may sound too simple, but is great in consequence. Until one is committed, there is hesitancy, the chance to draw back, always ineffectiveness.3 Concerning all acts of initiative (and creation), there is one elementary truth the ignorance of which kills countless ideas and splendid plans: that the moment one definitely commits oneself, the providence moves too. A whole stream of events issues from the decision, raising in one’s favor all manner of unforeseen incidents, meetings and material assistance, which no man could have dreamt would have come his way. I learned a deep respect for one of Goethe’s couplets:

Whatever you can do or dream you can, begin it.
Boldness has genius, power and magic in it!’

Commitment is making a decision, then making choices that support that decision.

A personal example:

I made a commitment to my wife to have a healthy marriage for the rest of our lives. That means I will choose to do some things because they bring us together, and that I will forgo some things that I might want but are likely to push us apart. That also means I am very careful to reserve physical and emotional intimacy for her alone.

A professional example:

I made a commitment to make iOS development a major component of my work. That means even though I have many interests, I choose to spend much of my creative time growing as an iOS developer, keeping up with topics that advance that goal, and avoiding too much dabbling with cool things that do not.

Make a commitment you can keep

I believe there is a purpose to my life, and I have life goals built on that purpose. By having some fairly clear life goals, I can make better decisions about which commitments to make. If you don’t have any idea what you want from life, even short-term, then you will be hard pressed to make commitments that you can keep.

When you make a new commitment, it must compete with your existing commitments for time or money. If there is not enough to do it all, you will have to decide between them. The harder you work to convince yourself that you *can* do it all, the more likely that you are only deceiving yourself. Worthwhile endeavors should stretch you, but sometimes that means making the hard decision to drop something else.

Sometimes the conflict is more basic and a new commitment is at cross purposes to your other goals. If you try to do it anyway, you will pile up stress along an underground fault in your psyche. Eventually, something will trigger a quake, and your goals or your commitment will break, leaving you disheartened.

The answer to all of these conflicts is straightforward:

You need to choose–it is that simple.

But “simple” does not imply “easy”. If you are having difficulty choosing, enlist the help of those with experience and wisdom who know you well and care about you.

Once you make a commitment that is consistent with your other goals, you must weave it into the fabric of your life.

  • You will need to be deliberate about creating new habits that reinforce that commitment and breaking habits that deter from it.
  • If you are doing this alone, find others who will hold you accountable or check on your progress fairly regularly (I use Twitter for this).
  • Devote some of your most productive and clear-thinking time towards thinking, designing, and developing your project.
  • Be willing to sacrifice short-term comfort to achieve something that will last.
  • Take concrete steps to renew your vision when your passion wanes.
  • If constant comfort or instant gratification is your life goal, then almost any commitment you might want to make will be in conflict with it.

One last piece of advice. Do not become so focused on your project that you let your personal relationships break down, for people are far more important than things.

As an Indie, one of the best things you can do to find like-minded developers that will provide encouragement and motivation while pursuing a commitment. A great collection of indie iOS developers have helped me stay on track, most of them are either developers associated with iDevBlogADay, or those I have met through the 360iDev conferences. If you can make it to Austin in November, I highly recommend it for it’s content, the friendships you’ll develop, and the passion it will bring to your iOS development.

Also, here is a little more information about me, Doug Sjoquist, and how I came to my current place in life. You should follow me on twitter and subscribe to my blog. Have a great day!

1. Over the years, this quote has incorrectly been attributed to Goethe.
2. When you consider Murray’s life and the circumstances under which he wrote his book, this passage reveals much about the man’s character.
3. Emphasis mine.

360iDev San Jose wrap up

Filed in 360iDev, iOS Development | Comments (0) |

Last fall, I was invigorated and enthused by 360iDev in Denver, so I was excited to register for 360iDev in San Jose.

The short version is that I had high expectations, and they were exceeded.

I learned so much and met so many helpful and smart developers in those four days. By the time it was over on Wednesday, my mind was so full of ideas and enthusiasm that I had to spend several hours on Thursday and Friday just capturing my thoughts for future apps! My only regret is that I can’t dive into several of those ideas all at once.

I split my session time between sessions that helped improve my understanding and skills and some sessions that stretched me beyond what I was currently doing. 360iDev has an excellent balance between user experience, design and development discussions. It also covered a great mix of technical and business issues. There were so many times where I was able to just sit back and soak in knowledge, but also plenty of times for me to participate in discussions, both planned and informal.

I look forward to the videos of sessions that I missed — there were several times where it was very difficult to choose between two sessions. In almost every time slot, there was at least one session that interested me deeply.

The GameJam was great fun again, but also a great motivator for me. One skill I need to develop better is timeboxing a particular effort — constraints really help me focus, and the GameJam did that for me. My goal was to use Cocos2D, Box2D, and GameKit to build a game using an iPhone and an iPad where the game play was asymmetrical — I came close, but once again was trying too many new things (Box2D and GameKit) during the short (10 hour) time span. I was able to use what I had learned that night in my iPadDevCamp app, and now I have several variations of the basic gameplay to experiment with.

One of my personal goals was to completely set aside my client work at home, both physically and mentally, and immerse myself in new ideas and learning. So, I decided to also hang around San Jose for the iPadDevCamp held the following weekend. I was able to spend 8 days in a row without interruption really growing as an iPhone designer and developer. iPadDevCamp has a different style than 360iDev, it reminded me very much of a weekend long version of the 360iDev GameJam. iPadDevCamp was good and I had more stimulating discussions with more great designers and developers. But, I think without the earlier focused, intense time at 360iDev, I would not have benefitted nearly as much.

I would love to do a 360iDev and a DevCamp together again in the future, but if I had to choose only one event to attend, it would be 360iDev. I look forward to the next one!

Cocos2D version of Owen Goss's BaconFarmer prototype session

Filed in 360iDev, iOS Development | Comments (0) |

On Monday afternoon at 360iDev I sat in on Rod Strougo’s Cocos2D session, and then watched the prototype master Owen Goss develop a game prototype with input from the crowd live in roughly 60 minutes (very brave, very cool, very fast).

Since I wanted to spend some time getting comfortable with Cocos2D before the 360iDev Game Jam Tuesday night, I decided to see how quickly I could reproduce Owen’s end result, “BaconFarmer”, using Cocos2D.

I finished the first (and probably *only*) version this morning, and you can now download a zip file with the full Xcode project.

I didn’t finish in 60 minutes, nor was my accomplishment anything like Owen’s, but it was fun.

I took about 4 hours, roughly broken down like this:

  • Graphics — 15 minutes
  • Setting up and acquainting myself with Cocos2D project — 30 minutes
  • Getting bacon to show up on screen (Cocos2D sprites) — 60 minutes
  • Added game play, changing state, touches, etc. — 60 minutes
  • Add scoring — 30 minutes

I borrowed a couple of files from Rod’s sample project for background and scoring (Thanks Rod).

Overall, Cocos2D was very easy to get started with — I don’t know it’s long term potential, both Rod and Owen spoke highly of it, so I will probably be using it in the Game Jam tonight.


T-0 360iDev gets off to a great start

Filed in 360iDev, iOS Development | Comments (0) |

The official conference sessions have not yet begun, but I am already invigorated by 360iDev in San Jose. It is good to see friends and acquaintances I met in Denver last fall, and to meet new developers as well. I spent the morning in Kendall Gelner’s Advanced Debugging session and gained some useful new tools for app development. I split the rest of the day between the beginning stages working through some iPad app ideas and getting to know other developers a little better.

The energy level certainly picked up at the welcome reception this evening, and will probably continue long into the night without me. I’m lousy at Rock Band, but had a good time trying anyway, and it was fun watching other groups pretending to be musicians tonight!

I am looking forward to a very full three days of learning cool new stuff, meeting great people, and building on relationships already begun.