30 December 2010

What did you ship in 2010?

Inspired by Seth's post, here's what I shipped in 2010:

  • Roadfire Software
  • iFonts 1.0, 1.1, 1.2
  • Two talks at Barcamp Bangkok on iOS
  • blockBUZZter 1.0 & 1.1
  • Chiang Mai mobile meetup
  • Similac Baby Journal 1.0
  • Roadfire blog, website, Facebook page
  • Nationwide Mobile 2.1
  • 42 blog posts + this one
I can't take full credit for all of these - I worked on great teams for blockBUZZter, Similac Baby Journal, and Nationwide Mobile. The talks and mobile meetup couldn't have happened without people showing up. And my wife has been a huge part of Roadfire Software, encouraging me to start the company and taking care of a lot of paperwork.

I'm sure you shipped something this year. What was it?

16 December 2010

blockBUZZter 1.1!

The updates I made to blockBUZZter for BUZZWOO! just made it to the App Store! You'll be happy to know that blockBUZZter has English support now, so if you were hesitant before because the game was only available in German, hesitate no more! Version 1.1 also has OpenFeint achievements, so there are interesting goals besides just getting a high score. It's still free, so go get it!

14 December 2010

The story behind iFonts

I needed the list of available fonts in iOS to send to my designer. I searched the web and found that there are lots of iOS font lists out there (iosfonts.com, blog posts, Stack Overflow), but who knows if they're up-to-date or were ever right in the first place? At some point, every one of them will be forgotten, neglected, and become obsolete. I wanted to be absolutely certain that the list I sent to my designer was correct for the latest version of iOS. iFonts guarantees that - it uses public APIs to determine the available fonts, so you know you're getting the current list when you run it on your device. Most importantly, it has a handy email feature to send the list to a designer or developer. No need to bookmark a web page. No need to create a list on your computer that'll quickly become obsolete. Just run iFonts and you instantly have the list that's guaranteed to be up-to-date for your version of iOS. It's that simple.

11 December 2010

iFonts Price Change

Inspired by this article, we've changed the price for iFonts from free to 99 cents. iFonts is a valuable app - it's a great way to email the list of available iOS fonts to a developer or designer - so it's worth the 99 cents it now costs.

Get it on the App Store.

If you have feedback on the app, be sure to email josh@roadfiresoftware.com.

17 November 2010

iFonts 1.1

Apple just approved iFonts 1.1! This release contains performance and UI improvements as well as a new feature: the ability to enter text to see it displayed in a particular font. Enjoy!

App Store link

15 November 2010

Git Delete Last Commit

A really helpful post that helped me undo a mess I made.

15 October 2010

Blog Action Day 2010

It's hard for me to believe there are almost a billion people in the world who don't have clean water. To help them get it, you can donate or start a fundraising campaign at charitywater.org.

Today is Blog Action Day 2010, so if you're a blogger, you can raise awareness by sharing this with others.

04 October 2010

Fonts for iPad & iPhone

Excellent article by Michael Critz on what fonts are available on iOS. If you have an iOS device, you can view and email the list of available fonts with iFonts, but if you don't have a device, this article is a great reference.

27 September 2010

iFonts 1.0 released!

We're happy to announce that we released iFonts last week! It's our first app, and we're really excited about it! It's a tool for developers and designers to see what fonts are available in iOS that also allows you to email the list to someone else. Check it out in the App Store and let us know what you think!

App Store link

21 September 2010

Downgrading iPad from 4.2 to 3.2.2 on OS X

To restore your iPad from a newer version (beta, perhaps?) of iOS to a previous version of the OS (such as 3.2.2, the latest release), do the following:

1. Connect your iPad to your computer
2. Open iTunes
3. On the left side, select your iPad under Devices
4. On the Summary view for your iPad, option-click Restore
5. Browse to ~/Library/iTunes/iPad Software Updates and select the .ipsw file (it should say 3.2.2 somewhere in the filename)

Thanks to this post for showing me where to find the .ipsw file.

Update: If you've lost the old .ipsw file for 3.2.2, you can download it from Apple at this link.

09 September 2010

01 September 2010

NSZombieEnabled

If you're doing iPhone development, setting NSZombieEnabled to YES is critical to debugging. It allows you to see what deallocated instances received a message. If this is not enabled, you won't have any idea why your app crashed. With it enabled, at least you know you sent a message to a deallocated instance, say, of an NSArray. But you have to be careful with this, because it prevents all objects from ever being deallocated! Make sure to turn it off before releasing your app.

Further reading here.

25 August 2010

Shopify

What a great, easy way to build an online store for anyone who doesn't have web design or technical skills!

Shopify

28 July 2010

Google Apps is awesome!

We're using Google Apps for our business, and so far, we couldn't be happier! The Standard Edition is free and allows up to 50 users on your domain with access to Gmail, Calendar, and Docs. It's perfect for a small business like ours, so if you're running a group or a small business, check it out!

We're also quite satisfied using Blogger to host our website and blog - it's been great!

14 July 2010

iPhone - Flipping a view

Pretty simple. This code worked great for me, after I figured out that the front view and back view need to be on a superview, which is what actually gets flipped.

Also try with UIViewAnimationTransitionCurlUp.

07 July 2010

Why is my list black?

Great post from the Android Developers Blog explaining how to resolve the issue where a ListView turns black when the user scrolls.

23 June 2010

Android XML include

Android's XML include is a great way to reuse XML layouts. Check it out!

Blogged from my iPad.

16 June 2010

[UILabel sizeToFit]

This method is great for making a text label's height and width fit the text that's inside it.


CGRect frame = CGRectMake(0, 0, 320, 480);
UILabel *myLabel = [[UILabel alloc] initWithFrame:frame];
myLabel.text = @"Any size text string";
[myLabel sizeToFit];


Thanks to the Stack Overflow community for teaching me about this.

07 June 2010

Essential Keyboard Shortcut for Numbers

Numbers just isn't usable without a mouse if you don't know this shortcut. To paraphrase, Option-Return allows you to edit existing data in a cell.

I also found that you can start typing when a cell is selected to wipe out any existing content in that cell and replace it with what you type.

Hitting Enter while in edit mode leaves edit mode.

26 May 2010

Build script for iPhone ad-hoc distribution

Put this script in the root of your project directory, tweak for your project, and run it to build your iPhone app for ad-hoc distribution.



In case the script above isn't showing up for you, get it from here.

19 May 2010

Android - ignoring files from version control

To summarize the discussion here, you can ignore the following files and folders from version control for your Android app:

bin
gen
default.properties
.settings
.classpath
local.properties

12 May 2010

Tutorial: Turn Your Mac Into an AirPort Base Station

Awesome! If you're tech-savvy (and maybe even if you're not), this tutorial is unnecessary, but I didn't even know I could do this with my Mac! One more reason for me to love my Mac... :)

05 May 2010

The commuting paradox

I'm so glad I have a short drive to work and the ability to work from home when I need to. This post helped me to appreciate it even more.

03 May 2010

Quote: A very good senior programmer...

Linchpin: Are You Indispensable?


"A very good senior programmer (who might get paid $200,000) gets paid about the same as a great programmer, who delivers $5 million worth of value for the same price."

- Seth Godin, Linchpin

Thanks, Seth.

29 April 2010

Resolution for "fatal: unable to run 'git-svn'"

Debian bug:

When running "git svn clone" on a large repository, every a few revisions
or a single big one it stops with:

fatal: unable to run 'git-svn'

git svn fetch resumes the clone, stopping again after a few revisions. If
you keep resuming it long enough, the clone ultimately succeeds.


Thanks, Adam! Even if continually resuming with git svn fetch isn't an elegant solution, it worked for me!

14 April 2010

Review: Microsoft Office 2008 (Mac)

Microsoft Office for Mac 2008 Business Edition


A decent set of software. If you've used Office 2007 for Windows, you'll find that this has a similar set of functionality.

A coule good reasons to buy this:

1. You're forced to work with .docx, .xlsx, .pptx, and other x files. OpenOffice doesn't handle them very well.
2. It's required for work or school.

It's not worth the cost unless you need it for one of those reasons. I get annoyed with it because it doesn't feel like a Mac app, doesn't have the standard keyboard shortcuts (Cmd-Shift-S doesn't mean "Save As..."), doesn't resize right. It's just not a real, solid Mac app the way Mail is, the way iCal is, the way 1Password is.

If you need to create basic documents and spreadsheets, check out OpenOffice or Google Docs.

07 April 2010

Quote: OS X is the most productive development environment that I've ever used

"OS X is the most productive development environment that I’ve ever used." -
Bob Kross

31 March 2010

Git Aliases

"With aliases, you can avoid typing the same commands over and over again." - from the Aliases page on the Git SCM Wiki

Once I found this, I immediately created the following aliases in ~/.gitconfig, as I frequently used these with Subversion.

ci = commit
st = status

I'm also fond of the llog alias mentioned on the wiki that displays the log with dates in your local timezone.

llog = log --date=local

Additionally, I added an alias that diffs my local repository (committed changes) with our remote Subversion repository, showing changes that aren't committed to Subversion.

sdiff = diff --name-status remotes/git-svn

24 March 2010

A case for git-svn (Git + Subversion)

Why git-svn?

1. Our central repository is Subversion and that's not changing. Otherwise, I'd be using Git without Subversion.
2. I wanted to have a way to do local commits that aren't quite ready for the central repository. This gives me a way to track my small changes by setting checkpoints (local commits) without breaking the build on our CI server.
3. The majority of ThoughtWorkers say Git is Best in Class.
4. Joel Spolsky is sold on Distributed Version Control:
This is too important to miss out on. This is possibly the biggest advance in software development technology in the ten years I’ve been writing articles here.

Or, to put it another way, I’d go back to C++ before I gave up on Mercurial.

5. Even without an internet connection, I can work and commit locally as well as view the entire Subversion log.

If you're stuck using Subversion as a central repository, you should check out git-svn.

Further reading:
git-svn - Bidirectional operation between a Subversion repository and git

git svn status - showing changes that are not committed to svn

17 March 2010

Subversion global-ignores

To force your svn client to ignore files and folders from Subversion without using the svn:ignore property, edit ~/.subversion/config. This file should already have a commented-out line similar to the following:

# global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo

Why use the global-ignores rather than the svn:ignore property? I wanted my svn client to ignore my .git directory, but didn't want to modify the svn:ignore property in the repository. No one else cares about the directory I'm ignoring (.git) - they don't even have that directory.

Here's my new global-ignores line:

global-ignores = .git *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo

In my next post, I'll explain how and why I'm using both Git and Subversion.

15 March 2010

Rework

I'm excited to read Rework - the excerpts I read were excellent! You can read more about the book at Signal vs. Noise, an outstanding blog by 37signals.

10 March 2010

Martin Fowler: VcsSurvey

Interesting survey results from ThoughtWorkers on version control:

VcsSurvey

To summarize, ThoughtWorkers strongly prefer Subversion, git, and Mercurial over the other options.

09 March 2010

Irrational

"We are irrational. Proof: We believe we are rational."

From Bruce Eckel's recent post entitled A Golf Ball to the Forehead.

07 March 2010

Running an effective meeting

Prepare before the meeting starts. More than 10 minutes.

State the purpose of the meeting at the beginning of the meeting. Without a stated purpose, meetings tend to be directionless, long-running, and leave people feeling like they wasted their time.

Get expectations from everyone at the beginning of the meeting. This gives everyone the ability to participate and ensures that they know why they're there.

When people start rambling or dominating the meeting, ask questions, restating what you think they're saying. Often when a rambler or dominant player sees that they've been heard and understood, they stop talking.

Be aware of time and wrap up when appropriate. Wrapping up should happen either (a) when the goal of the meeting has been accomplished or (b) just before time runs out - whichever comes first. An effective meeting can and should end early if its goal has been accomplished.

Encourage everyone to share benefits & concerns at the end of every meeting so the next meeting can be better.

Thanks to Sogeti and Lorel Au for offering a class on meeting management where I learned all of this.

04 March 2010

Great ad

"Today's my Birthday" is a nice touch - it really got my attention. Kudos to Compassion for creating a great ad.

26 February 2010

A case for automated tests

In one minute, you can run one manual test or 100 automated tests. How would you prefer to spend that minute?

And what happens when you change some code? Run a few manual tests (three minutes)? Wouldn't you prefer to run 100 tests, grab some coffee, save a couple minutes, and be confident that your change didn't break anything else?

Mac OS X tip: open current Terminal path in Finder

$ open .

23 February 2010

Cisco VPN on Snow Leopard

Mac OS X Snow Leopard has VPN support built in, so you don't have to install the Cisco VPN client. (If there's one thing I dislike, it's installing unnecessary software.) This tutorial worked great for getting it set up - thanks to the author for posting it!

17 February 2010

Keyboard Shortcut for Maximizing a Window in XP

Alt, Space, X

This appears to be the only way to do it. I wish there were a quicker way, like Win + M does for minimize.

15 January 2010

SnakeYAML and Groovy

"Why aren’t more of us using YAML with Java and Groovy?"

From SnakeYAML and Groovy, my latest post on Inside the Machine.