Archive for March, 2006

Beat the Rest. Be the Best.

Thursday, March 30th, 2006

Guy has some new rules for revolutionaries. And as usual they’re hilarious as well as informative. How to drive your competition crazy. I have always welcomed competition. I don’t want to be a single player in a market. Sure, if I’m honest, then I do feel a twinge of sadness when I hear of one, but I feel a stronger urge to be better than the competition, as Guy quotes:

“The purpose of competition is not to beat someone down, but to bring out the best in every player.” Walter Wheeler

You don’t win sales by telling your customers how bad your competition is. You win by admitting their strengths but also acknowledging your own and not only making a compelling offering but also delivering on it.

Guy’s penultimate point, Turn the competition into allies I exercise in my day job. We turn away PC work to a selected few PC companies and in return we get their Mac work. Even one of the local Mac IT companies bring their customers Macs to us to get fixed. They offer a value-added solution (or maybe they just charge more than we do).

We’re not doing too bad in the other areas either. We have a small team of evangelists who push people our way. But again, evangelists are not important when you’re the only player in the market.

How to avoid being driven crazy?

  • Be the best. (Ask yourself?)
  • Be Patient. (Impatient people cut corners)
  • Love your work. (Enthusiasm is infectious)
  • Laugh at your mistakes. (Everyone else will)
  • Smile. (You’ve got 10 seconds to catch attention)

It’s a pretty tall order to be honest. I love it when my local user group talks positively about us. I hate rushing into things. I trust people to do their job (and one of the guys said to a friend he’d walk over hot coals for me….that sort of comment makes me feel proud and indebted to my employees). I laugh at my mistakes, but I’ll make sure the customer laughs louder and longer. And I greet everyone with a smile. 10 seconds after dealing with the most infuriating person on the planet (hmmmm, yes), I’m smiling again. Believe it or not, I can be quite charming.

I was meant to be at the pub tonight but stayed in to watch Memoirs of a Geisha with a friend. Great film but I was the only one awake by the end. I’m a big fan of Michelle Yeoh. I digress.

The essence of driving your competition crazy is grace.

Show some grace. Be classy. Be a sport. Acknowledge greatness. Try harder tomorrow. If you act petulantly, you encourage petulance.

Who wants to eat dog food?

Thursday, March 30th, 2006

There’s a difference between “eat your own dog food” and “be blindly stupid”. I never liked that term anyway. I’d rather “eat my own cooking”. Why does it have to be “dog food”?

Anyway.

The Scobleizer has an entry on his blg about how he’s a bad parent and a bad evangelist for Microsoft because his son has an iBook, an iPod and wears Apple T-shirts. Of course, Robert’s brother-in-law works for Apple on the Mac team. Patrick Scoble says his iPod is “cooler”.

This stink comes from Steve Ballmer claiming that his kids are not allowed to have iPods and are not permitted to use Google. Does Ballmer have net-nanny blocking the google URL? Does “google” rank up there with other rude words? How deep does the “don’t use competitors products” go?

Admittedly it’s different for the likes of us. We’re a small company with half a dozen product ideas in the pipeline. In most cases we’re not using a competing product because …well… we’re writing the ones we need. If there was a competing product, we’d use it! Probably.

When you’re a company the size of Microsoft with fingers in every pie and the pies have to be worth $100 million before you’ll even consider dipping in, then the stakes must be a lot higher. When you’re trying to get a foothold in “search”, then brainwashing everyone you meet into using your products must be important (I’m not sure I’d be the same with children). When you’re losing the portable music player market as badly as Microsoft is, then I guess you have to ensure that none of your hard-earned goes into bolstering the competition. I wonder if Ryoji Chubachi uses an iPod?

Now that would be funny.

RubyCocoa - to_i and to_s

Monday, March 27th, 2006

I’ve been using a lot of RubyCocoa over the past few days, and ran into a few issues that took a while to solve. Blindingly obvious with a bit of foresight, so I figured I’d write this short entry to provide that foresight (or hindsight) to anyone searching for a little help.

Generally, the methods you call on a RubyCocoa object will return a subclass of OSX::NSObject. You can use puts to print out the value of the object:


some_var = some_osx_nsobject.a_method
puts “a_method returned #{some_var}” # wrong
puts “a_method returned #{some_var} (#{some_var.inspect})” # right

Using the inspect method means you’ll be able to see what kind of object you’re being given. This bit me several times - I’d get an OSX::NSString instance, and when I used the first format above, it would print out its contents, leaving me to believe I had a String (of the Ruby variety). Of course, if I tried to do String type things with it, it would misbehave. Similarly for OSX::NSNumber and Fixnum.

I ended up needing to use to_s and to_i (and occasionally to_a) in order to spit out the right value. Be wary when using to_yaml: you’ll almost definitely have to use one of the to_* methods beforehand.

You can have 3% of your own company. Final Offer.

Sunday, March 26th, 2006

This evolved into a blog topic from an iChat we had this morning.

It also neatly fits into two posts by Guy Kawasaki ( The Art of Recruiting and a follow-on confusingly titled The Art of Recruiting. Both were written from an employer point of view but today he includes a riposte Nine Questions to Ask a Startup.

The bit that was interesting was the part about equity percentages. Most notable was that no-one who was in the company before the VC-supplied CEO has more than 3% according to this table.

Giving equity is like giving trust. It’s for when someone can’t be bought with money but you know you need them. If you don’t fall into this category then you shouldn’t expect equity. If you’re getting equity rather than the salary you think you deserve then you know one of two things:

  • The company may not have enough money to pay good salaries.
  • You’re a crucial part of the company.

Please note that only one of these need be true and you should really examine whether it’s #2 (no-matter how much you may like to think it is).

Employing someone is always a matter of trust. You’re paying them for their loyalty as well as their work. You’re going to be giving them passwords. Access to your premises. Access to your IT systems. Access to communications systems. Think - you’re a software startup. What are you giving out when you hire a coder and you give him access to your subversion repository? Sure, contracts will help you but unless you have cash to pay lawyers, it’s not going to be particulaly effective and once the code is out there, well, the cat is out of the bag along with your blazing business idea.

So, say you’ve gone through the efforts of staring your own company, you’ve got a VC backing you and you’re on your way to building a million dollar company. 3% of a million is only $30 000. Small change these days. So you want to be a BILLION dollar company which will pay out $30 million when you cash out. Heh heh. Of course, becoming a BILLION dollar company takes YEARS. There’s been a lot of mileage recently in the blogosphere about how “building to flip is building to flop”. That means, building a company hoping that GMY will buy you, is probably going to leave you penniless with some angry VCs. But we all know that, right?

My personal opinion on equity and working for hire?

  • Hire people for good old green if you can
  • Equity is something you give out when you’d trust someone with your passwords and keys
  • Be realistic when giving out equity. Don’t promise 3% of a Billion
  • Despite the fact Bubble 2.0 is building, don’t be tempted by geeks bearing gifts.
  • Once you invite the VCs and superstar programmers in, be happy with 3% of your own company especially if the company is still a million dollars in hock to a VC.

Probable software change

Friday, March 24th, 2006

We’re getting a lot of blog spam. I’m not comfortable fiddling with b2evo’s somewhat mind-numbing PHP, so we’ll be switching blog software at some point in the near future. I’ll keep this blog here as a read-only historical blog so that links/trackbacks still work, but no further comments will be addable once I migrate.

Whatever we end up using as blog software will have anti-spam measures in it (and will be easier for me customise).

Nitro Q & A

Thursday, March 23rd, 2006

If you’re interested in Nitro, check out http://oxyliquit.de - they’ve added Q & A, tips and tutorials (including my Og tutorial).

Lots of useful information, and a place to ask questions and get answers on the project.

NSTableView (and HTML tables)

Monday, March 20th, 2006

I remember when I first wrote a web page that had a table in it which contained more than just text. It didn’t work on the majority of our university’s web browsers (Mosaic was the most commonly used, although Netscape 2.0 could show the images just fine). Very soon thereafter, tables were being used for all sorts of stuff (and then became overused for layout, but that’s not what this post is about).

The good thing about an HTML table is that I can specify how many rows and columns I want, and what I want in each individual cell created by those rows and columns.

With my recent forays into Cocoa development, I’ve been trying to use NSTableView. NSTableView, on the surface, appears to be much like the original intent behind HTML tables. Make a table with X columns and Y rows and populate it thusly. And much like Mosaic, this will work fine and dandy when you populate with text.

I’ve been trying to add non-text objects in the cells, and having a lot of difficulty. Chief among my difficulties is understanding the paradigm that Apple has for its tables. You specify the number of columns as part of the NSTableView object, then tell the NSTableView what its data source is (another object which has some specific methods in it). That data source tells the NSTableView how many rows there are (which makes sense when you think about it - how will the interface know in advance how many records to display?).

However, what doesn’t seem to work well for me is in saying “Put object Z in column X/row Y” where Z is a non-text cell (the cases I’ve been trying are NSSegmentedCell and NSPopUpButtonCell). I look at example code, and no-one else seems to be programming this way, so I presume I’m going against the paradigm. Everyone else seems to return just pure data from their data source, and their view/controller code somehow knows how to transform that into the correct representation in the NSTable.

Part of this issue might come from the overlap between Interface Builder and my code. In IB, I can specify what type of data cell each column should have (I can do the same in XCode), and I can link my NSPopUpButtonCell to a menu that I’ve created in IB.

But I also think that part of the issue comes from a non-intuitive API for the NSTableView. It could be that I’m just used to HTML tables, and “real” GUI developers will be tutting over their lattés as they read this (if we have any real GUI dev readers). Still, I know I’ve never had this problem in other GUI paradigms either (e.g. Tk or Swing - although I don’t care to switch to either of those ;-)).

Entourage and SyncServices

Tuesday, March 14th, 2006

This isn’t a bad foray by Microsoft into the world of SyncServices. From an iCal perspective, Entourage creates a calendar in iCal called “Entourage” and syncs all the events with that calendar. This means that you can now sync your phone/PDA with Entourage as long as you only need a single calendar–no bad thing considering most devices only support a single calendar anyway.

What does it mean for us? Well, now people who use Entourage (or are forced to use Entourage) will be able to share their Entourage events via SyncBridge with their colleagues/friends, just as they would be able to share any other iCal calendar. Cool, we get another supported app for free :-)

And we may add Entourage to the list…

Tuesday, March 14th, 2006

Heaps of info out there now. Looks like with today’s update for Microsoft Office 2004 (11.2.3), Entourage will also work as a SyncBridge client.

We need to test it of course but as soon as we have, we’ll add it to our information pages.

Nice to see. Way to go, Microsoft!

SyncBridge

Tuesday, March 14th, 2006

Looking at MJ’s post about Airwolf or Blue Thunder, I figure it’s worth talking a bit about our first product. It’s called SyncBridge, which I hope is an obvious representation of what it does: it provides a synchronisation bridge between users (in this case, iCal users).

We’ve been working on this product since late last year. Although it might not be 100% clear, I’m based in Australia, and MJ is based in Northern Ireland. We’ve not actually spoken to each other in several years - all our contact is via iChat. Also, MJ’s role is not as a developer, so he’s been kind of in the dark as to what’s been going on. He can see all the code I’ve written, and the amount of time and effort spent on producing stuff, but until very recently it’s all been vapourware.

So, it was nice to be able to suprise him with a quick video on “Here’s what using SyncBridge currently looks like.” As he mentioned in his more recent post it’s not quite pretty enough for public consumption - I’d hate to put people off by showing them something half-baked. I think we had a post earlier about how Joel Spolsky won’t go back to 30boxes because they weren’t sufficiently baked–I’ve a feeling the Mac community is even tougher than Joel in some respects (I know MJ is ;-)).