iPhone 3.0 Development Glitches

I had a few glitches in the Helipad iPhone app when 3.0 rolled around. I’ve put the solution here to help those of you searching for the error message.

Helipad syncs to our web app and displays a syncing progress screen. I open this view in a new view controller like this:

SyncController *sync = [[SyncController alloc] initWithNibName:@"SyncController"
                                                        bundle:nil];
[self presentModalViewController:sync animated:YES];

The parent view displays a UIWebView, and the controller runs the sync process on another thread so the display can be updated with feedback. The problem was that updating UIWebView crashed the app:

Read More →

Intuitive Code

I’ve read a lot of game reviews where the intuitiveness of a game is described: the control scheme and menu system can be rated by how intuitive they feel. Intuition is a useful concept, and means more than "easy to use" -- it imparts a sense of instinct; mental processes found in the subconscious.

Code can be intuitive too. Not intuitive to write, but to read. If this seems confusing just think about pseudo–code: beginners are immediately comfortable with pseudo–code but put off by the arcane constructs and symbols of a real programming language. Some languages appear more like pseudo–code: Ruby can be written clearly with little hand–holding for the interpreter. A few conventions must be learned: symbols and blocks usually confuse beginners, but once the basics are second nature code comprehension edges closer to instinct.

I’ve always argued verbosity over needless truncation: write recurring_reminders not rcrr_rmdrs or just r. Concise code is important but is not created by shortening variable or method names. Verbose names are not enough, however. There are more ways to create intuitive code.

Read More →

Future of Web Design Notes

I almost survived Future of Web Design unscathed. I say almost because I still have a slightly dull head, thanks to the after party and free drinks. I can’t quite remember why, but at one point I thought ordering a load of sambuca shots would be a great idea.

Carsonified's events have so far been a rare chance for me to meet up with fellow web designers and developers. This FOWD had a particularly friendly atmosphere, and I met lots of interesting people. The Carsonified team were professional and friendly, keeping the event ticking along smoothly.

Web design is a diverse subject. There’s a continuum between design as ergonomics/usability and visual design. Add standards to the mix and web design suddenly looks more like engineering. The talks moved back and forth along this continuum throughout the day.

Read More →

Ryan Singer Workshop

I went to the Ryan Singer Carsonified workshop yesterday. The title of the workshop was “How to design amazing web app user interfaces”. Ryan discussed his influences and processes behind 37signal's interfaces.

Ryan’s workshop covered:

  • Least effective difference
  • Copy
  • Workflow: Highrise example
  • Flow
  • Validation
  • Rails advice
  • How MVC helps organise designers and developers

As a web application developer and designer who uses Rails, I found his insights fascinating. Here are my notes from the workshop. I haven’t managed to capture everything we talked about — these are the things that made an impression on me.

Read More →

Deadline for Mac (and GitHub Hooks)

Deadline is a reminder web app I made. It sends out alerts through SMS, email and IM, and now it works with Mac OS too. I spent this weekend building a Mac cocoa app for it that integrates with Growl. You can download it here: DeadlineGrowl

Deadline also works with GitHub: Deadline: Notification API and GitHub support. It uses post–receive hooks to grab commit messages and notify you through your preferred notification method.

Read More →

Beautiful Algorithms

I’m starting a new series on Quite Useful called beautiful algorithms. I’m going to talk about the algorithms behind graphical effects, especially those from the demo scene back in the 90s.

I’ve posted some examples to my GitHub account if you want to check out what I’ve been researching so far. They use Ruby Processing, which is a pretty accessible way to try out ideas.

Read More →

Let's Make a Game: Snake

I just finished wrapping up a 5 part tutorial on building Snake in Ruby and Shoes. It looks like this:

  • Part 1 – Covers installation of Shoes and explains how the snake moves and how to control it with the keyboard
  • Part 2 – Basic collision detection, eating food to make the snake longer
  • Part 3 – Collision detection for bricks and the snake, stopping the main animation when the snake crashes
  • Part 4 – Handling scores, game over screen and restarting the game. This part also shows how to draw a border around the level, and explains how to use Git to get my code
  • Part 5 – Sounds and ideas for better sound support

Building games with Ruby and Shoes is a lot of fun because you can throw away the boring stuff and focus on the game’s rules and algorithms. The cross–platform (Mac, Linux, Windows) nature of Shoes also keeps your work accessible.

Read More →

GitLondon: Event Review and Notes

I went to GitLondon last week, a git training event organised by the developers at Codebase and GitHub. Scott Chacon from GitHub did the main presentation and workshop, which lasted from 9:30am until around 4pm, with Adam Cooke from Cobebase explaining how to set up Git on your own server.

Scott’s presentation covered everything from basic git commands to advanced commands and even the internals. He originally started using git several years ago when it was in its infancy, and built a system that required rsync–like features (but presumably more advanced than rsync). This means he has an interesting perspective on git because he’s familiar with the internals that most of us never see.

Before the event I was using git to store my open source projects on GitHub. I definitely like their social coding approach, and it’s helped me get help and feedback on my work. However, I only knew the basic commands, most of which GitHub shows on the site. After this event, I felt like an entire book on git had been poured into my brain, and I’m definitely more comfortable with it now. It’s not necessarily hard to learn, but it does take some work to become comfortable with it.

Read More →