Miscellaneous

Commitment: “This may sound too simple…”

Filed in 360iDev, Miscellaneous, iDevBlogADay, iPhone Development | Comments (1) |

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.

GIT to the rescue

Filed in Miscellaneous | Comments (0) |

I recently completed some short term Java work where using git saved me quite a bit of work. The real savings came about because of the style of work that a distributed version control system allows you to follow: many small commits with easy branching and merging.

Background

Most of my work lately has been doing Java work remotely on my own machine. The projects use Ant scripts for the build process and Subversion for version control. I was used to having access to customer VPNs from my machine, using their servers for database access and version control.

All of this works pretty well for me and my customers, as it does for many developers today.

Recently, I picked up some short-term work to add undo and redo functionality to an existing Java Swing application. The project uses an older version of Rational ClearCase for version control, but circumstances did not allow them to use the web component of ClearCase. Also, company policy denies access to the VPN from non-company computers.

The work itself did not require a lot of interaction with the rest of the project team, so most of my work could still be done on my own if I could figure out a reasonable way to access and update ClearCase. I am perfectly willing to switch development tools or equipment if that works best for the customer, but since this was a short-term project, I knew I would be much more productive if I could keep my work style as unchanged as possible.

I had been using git for some personal projects, and thought it would be a good choice to support my work. I checked out the current project view from ClearCase on a company machine, copied the files to my machine, and setup a local git repository for it.

I was then able to use git to make many small commits as I worked on the project. When I was in the office, I would copy over changed files from my local machine to my ClearCase view and update the company repository with my changes. The process worked well and I was able to stay productive most of the time.

Git to the rescue

Early in the process, I introduced a small bug that had no effect in my development environment (a MacBook Pro), but ended up with some screen update problems when running under Windows XP. I did do sanity testing on the GUI on a Windows XP box while in the office, but did not notice anything odd until two weeks later.

By that time, it was not at all obvious what kind of change could have triggered the problem, and I spent a fair amount of time investigating double buffering, validation, and other Swing differences between the Java VM on OS X and Windows. After probably too much time on workarounds and checking Swing internals, I decided to give it a rest for a day or so and then use my git history to help me track down what change caused the problem.

When I came back to the problem, I started with a copy of the project directory and basically did a binary search through all the commits to find the one where the bad behavior started. It took a little over an hour to find the change that caused the problem — a bug that might have taken many more hours to find using any other method.

I am so pleased with the results that I will be using git and the style of many small, local commits, in every project I possibly can.

GIT FTW
– Doug

CodeMash 2009 was worth the time

Filed in Miscellaneous, iPhone Development | Comments (0) |

Thumbs up and highly recommended

It has been several years since I took the time to attend any kind of extended technical conference. Often when conferences would finish, I would wonder whether it was worth the investment of time. Even when I wasn’t sure if the answer was “yes”, I would either rationalize or convince myself that it was.

CodeMash was different, it was very much worth my time. I took the opportunity to meet people I would not normally have met, try some languages and techniques I have not tried before, and listen to sessions that I would not have heard otherwise. I was surrounded by people who were knowledgeable, yet still eager to share and learn new things. It was pretty cool.

Short version, if you are a developer who wants to grow, this conference is for you. Even if you do not directly use most of what you hear and learn, it will still have a positive influence on the work you do.

Precompiler Day

I attended the precompiler day, where extended sessions were offered (many conferences do this sort of early training day). It was good to be able to spend an entire morning doing one thing, then an entire afternoon something different.

Morning — Ruby 101

I have had Ruby on my list of interests for awhile now, but never quite taken the time to dive in. The whole day “Ruby 101″ session caught my eye, and I was glad I attended during the morning. Jim Weirich and Joe O’Brien led us through a series of programming koans designed to gradually introduce us to key Ruby features and uses. I thought it was a very useful technique — we mostly proceeded at our own pace, but Jim and Joe were on call to answer some of the “why would Ruby do it this way” sorts of questions. Going back and forth between simple exercises that built on the previous ones, some Q&A with experts, and some rabbit trail type experiments was a great way to begin learning Ruby.

The session continued into the afternoon, but I chose to continue my koans on my own so I could attend something different that afternoon.

Afternoon — iPhone Development 101

Chris Adamson, one of the co-authors of the Pragmatic Programmer’s book on iPhone development, led this session. I had already started learning and writing some simple iPhone apps, so was familiar with the basics, but the session was still very useful for me.

Chris took us through the steps of creating a simple web browser as a native app, then through a series of refinements. Along the way, he explained and demonstrated several points of iPhone development that I had missed or where I had a very sketchy understanding. The most useful thing I gained from the session was a better understanding of who nib/xib files and custom classes work together. That by itself was worth the afternoon.

Keynotes and sessions

The themes I picked up from the week were the emphasis on agility and on getting out of your comfort zone.

I really enjoyed and learned from almost all the keynotes and sessions I attended, but I found the most value in those that encouraged me to think differently (and hopefully better) about who uses what I write, design, and testing.

I may write some followup entries on some individual sessions, but overall I was pleased with those I chose to attend. There were a couple I regretted not being able to attend, but by Friday afternoon my new idea tank was rapidly filling up.

Meeting people

One of the biggest benefits of any conference was in meeting people and actually talking to them. I’ve been to conferences or training events where the meet part happened, but real conversations lagged. CodeMash was great in that everyone I met, no matter where, was eager to talk and discuss a wide range of topics.

I loved the interaction with people outside my normal professional circle, and outside my areas of expertise. If for no other reason, I have already put CodeMash v2.0.1.0 on my schedule for next year (Jan 12-15, 2010). Hope to see you there.

Ability and opportunity are often orthogonal

Filed in Miscellaneous | Comments (0) |

What Seth says about ideas,

The quality of ideas is not a factor in whether or not you will be in a position to have a chance to sell those ideas.
Seth Godin

is true for other things as well. If you have the ability to do something well (or not), that is orthogonal to whether you are in a position to do so.

If you want to get better at your craft, it takes work.

If you want to have better opportunities to use your craft, that takes work as well…just a different kind of work.

WordPress iPhone application

Filed in Miscellaneous, iPhone | Comments (0) |

I just downloaded the WordPress application (free) and wanted to try it out.

Other than the normal constraints of iPhone text entry, I like it. Obviously, it will not become my primary blogging method, but I believe it will earn it’s place on my iPhone’s front page.

Work and non-work

Filed in Miscellaneous, NonWork | Comments (0) |

Not long after returning home from JavaOne, I picked up a new project, and combined with my existing commitments and my vacation schedule, I had to do the time juggling dance for a bit.

I just returned from a two week vacation at Yellowstone and Glacier national parks–a very welcome respite. It can take me a few days to quit thinking about my various work projects when my mind is idle, so I like vacations that are more than just one week. It is a wonderful feeling to “forget” about all the things your mind spends so much effort on for awhile and just enjoy some physical activity and some beautiful areas of God’s creation. I take my laptop along on trips like this, but almost exclusively just so I have a convenient place to accumulate digital photos.

Now that I’m back to work, I finished some performance bug fixes on a existing webapp for a client today, so I have a nice sense of completion already. My newest project involves several areas I’ve done work on before (intelligent agents, business rules using JESS) as well as some new areas for me (semantic web, ontologies, OWL, Protege). The system architecture is still being developed, but it all appears very doable (given the right resources and time) and very cool. The biggest downside is there appears to be more travel than I’d like.

Post JavaOne

Filed in Miscellaneous | Comments (0) |

After a red-eye return flight from JavaOne, and a couple of days catching up on my personal todo list, it’s time to get back to work.

Working as an independent, the decision matrix for things like conferences is a little different, but my overall impression was that it was worth going to JavaOne. It was my first time, and probably will not be my last. It provided an opportunity to spend time with those for whom and with whom I have worked over the last year that I probably would not have had otherwise.

My first todo generated by the conference is to join JCP, and become involved with JSR-295 which deals with JavaBeans and data binding. I had planned on packaging and releasing a data binding framework under some open source license (developed with help from others) soon, but JSR-295 appears to take a very similar approach to binding.

If there are good business reasons to approach a problem domain differently that existing tools or frameworks, I don’t have a problem with doing so. But, in this case, it appears that what JSR-295 will be developing will cover the most common and useful use cases that my framework handles. Hopefully, some of my code will be useful to the project.

Web site redesign

Filed in Miscellaneous | Comments Off |

After a couple of years of stagnation with only minor tweaks, I decided to to an overhaul. At first I was going to simply update the projects and experience areas using my old style, but that didn’t quite seem good enough.

Over the coming weeks and months, I will be releasing a couple of Java frameworks under an open license, and I needed a way to share what’s good about them with potential users, and to receive good feedback from clients and other users.

I had used WordPress for a personal project last year, and was impressed with it’s ability to let me get simple things done simply without keeping me from doing other things I wanted.

These three items have brought me to this point, sitting in my hotel the night before JavaOne putting the final tweaks on release 0.1 of my new website. I’m sure I will be tweaking, moving, and rearranging for several days or weeks (I am a tinkerer at heart), but the basic structure seems good to me.

– Doug