Pierre Bernard

My little hideout on the net

May 24
April 24
March 24
February 24
January 24
December 23
November 23
October 23
September 23
August 23
July 23
June 23
May 23
April 23
March 23
February 23
January 23
December 22
November 22
October 22
September 22
August 22
July 22
June 22
May 22
April 22
March 22
February 22
January 22
December 21
November 21
October 21
September 21
August 21
July 21
June 21
May 21
April 21
March 21
February 21
January 21
December 20
November 20
October 20
September 20
August 20
July 20
June 20
May 20
April 20
March 20
February 20
January 20
December 19
November 19
October 19
September 19
August 19
July 19
June 19
May 19
April 19
March 19
February 19
January 19
December 18
November 18
October 18
September 18
August 18
July 18
June 18
May 18
April 18
March 18
February 18
January 18
December 17
November 17
October 17
September 17
August 17
July 17
June 17
May 17
April 17
March 17
February 17
January 17
December 16
November 16
October 16
September 16
August 16
July 16
June 16
May 16
April 16
March 16
February 16
January 16
December 15
November 15
October 15
September 15
August 15
July 15
June 15
May 15
April 15
March 15
February 15
January 15
December 14
November 14
October 14
September 14
August 14
July 14
June 14
May 14
April 14
March 14
February 14
January 14
December 13
November 13
October 13
September 13
August 13
July 13
June 13
May 13
April 13
March 13
February 13
January 13
December 12
November 12
October 12
September 12
August 12
July 12
June 12
May 12
April 12
March 12
February 12
January 12
December 11
November 11
October 11
September 11
August 11
July 11
June 11
May 11
January 10
December 09
November 09
October 09
September 09
August 09
May 09
April 09
March 09
February 09
January 09
November 08
October 08
September 08
June 08
May 08
April 08
March 08
February 08
January 08
December 07
November 07
October 07

Key-Value Observing Done Right. Again.

I love using KVO for all sorts of things: side-effect, flagging UI as dirty, resetting caches, …

Writing the observeValueForKeyPath:ofObject:change:context: method has long since become tedious. So I created a TextExpander snippet to write it for me.

Still, I don't quite like it relying of string comparisons (which I use for context). And I regularly find myself forgetting to unregister observers.

Mike Ash wrote a interesting blog post where he makes a couple of good points against the current KVO API. The most important of which, I think, is the fact unregistering an observer might actually break behavior upon which the superclass relies.

Andy Matuschak has proposed a very convenient API which uses blocks to handle observation callbacks. While I love this solution, I found it to still have a couple of drawbacks:

  • Andy's KVO+Blocks requires Mac OS X Snow Leopard. It relies not only on blocks, but also on associated objects and Grand Central Dispatch.
  • Code is not always easer to read when the callback block is written where it is registered. At times, I would prefer a traget+action setup
  • KVO+Blocks make it all too easy to create retain cycles: referencing an instance variable from within the block retains the owning object.

Inspired by Mike's and Andy's writings and work, I have come up with my own implementation: HHKeyValueObserver.

  • Works on both Leopard and Snow Leopard. Relies on HHAssociatedObjects
  • Target action mechanism with the following signatures: actionWithInfo:change: or actionWithInfo:
  • Uses blocks where available
  • Unregisters automatically on dealloc of the observer

Retain cycles may be avoided by referring to the observed object by the way of observationInfo.observee.

Comments

HHAssociatedObjects

Mac OS X 10.6 introduced associated objects by the means of objc_getAssociatedObject and objc_setAssociatedObject. These provide a very convenient method for attaching object values to random objects. Associated objects can conveniently share the lifespan of the object they are associated with.

One situation where associated objects come in especially handy is when writing categories. Associated objets may be used be category methods to store state. It's the closest thing we got to adding instance variables.

The catch being that many projects still need to support Leopard. HHAssociatedObjects implements the concept of associated objects to support Leopard and Snow Leopard. Where available, the objc_getAssociatedObject and objc_setAssociatedObject methods are used. Elsewhere a NSMapTable is used to store associate objects.

HHAssociatedObjects are made available as a category on NSObject. I settled on the same API as Andy Matuschak. On Snow Leopard the implementation is actually the same as Andy's. HHAssociatedObjects adds a Leopard compatible implementation.
Comments

HHAutoHidingWindow

For the next version of HoudahSpot, I am implementing a window which docks to the side of the screen where it shows and hides as needed. After looking into several implementations, I came up with my own. Seeing this may come in handy to some, I'd like to share this bit of code with you.

HHSlidingWindow allows for docking a window at an edge of the main screen. From there it may slide in and out of visibility. Its subclass HHAutoHidingWindow
provides automatic showing of the window as the mouse hits the screen edge where the window is hiding. The implementation is actually pretty straightforward.
It relies solely on tracking areas. No polling is done.
Comments

Automatically releasing retained @property values

I subscribe to the opinion, that setters should not be called in constructors nor in destructors. This negates some of the benefits of @synthesize accessors. Indeed, one needs to keep the dealloc method in sync with the setter semantics. Our dealloc methods thus look like this:

- (void)dealloc
{
// Retained properties
[_firstProperty
release], _firstProperty = nil;
[_thirdProperty
release], _thirdProperty = nil;

// Assigned properties
secondProperty =
nil;

[
super dealloc];
}

This is repetitive and error-prone. Luckily, we may generate @synthesize instructions as well as destructors.

The alternative, is to use introspection to dynamically determine how the various properties need to be freed. For this, I suggest a category on NSObject:

@implementation NSObject (PropertyDealloc)

- (
void)deallocProperties
{
Class class = [self class];
unsigned int pCount;
objc_property_t *properties = class_copyPropertyList(class, &pCount);

for (unsigned int i = 0; i < pCount; i++) {
objc_property_t property = properties[i];
NSString *propertyAttributes = [[[NSString alloc] initWithUTF8String:property_getAttributes(property)] autorelease];
NSArray *propertyAttributeArray = [propertyAttributes componentsSeparatedByString:@","];
BOOL isRetained = NO;

for (NSString *string in propertyAttributeArray) {
isRetained = isRetained || [string
isEqual:@"&"] || [string isEqual:@"C"];
}

if (isRetained) {
NSString *variableName = nil;
NSString *lastProperty = (NSString*)[propertyAttributeArray lastObject];

if ([lastProperty hasPrefix:@"V"]) {
variableName = [lastProperty
substringFromIndex:1];
}

if (variableName != nil) {
Ivar ivar = class_getInstanceVariable(class, [variableName UTF8String]);
id value = object_getIvar(self, ivar);

object_setIvar(self, ivar, nil);
[value
release];
}
}
}

free(properties);
}

@end

Usage is extremely simple:

- (void)dealloc
{
[
self deallocProperties];

[
super dealloc];
}

This post was inspired by Vincent Gable.
Comments (3)

HHDualShortcutButton updated

HHDualShortcutButton has been updated to be Cocoa only. No more Carbon code!

This makes it require Mac OS X 10.6 Snow Leopard.
Comments

Sample use of HHBlockPerform

HHPerformBlock SetterBlock(id inValue, NSString *inKey)
{
HHPerformBlock block = ^(id owner) {
[owner
willChangeValueForKey:inKey];
[owner
associateValue:inValue withKey:inKey];
[owner
didChangeValueForKey:inKey];
};

return [[block copy] autorelease];
}

/* ... */

- (
NSNumber*)progressMinValue
{
return [self associatedValueForKey:@"progressMinValue"];
}

- (
void)setProgressMinValue:(NSNumber*)inValue
{
[
self performOnMainThreadWait:YES block:SetterBlock(inValue, @"progressMinValue")];
}
Comments

HHBlockPerform revisited

The first post on the subject prompted Ben to comment: "Helpful tip: Just capture the object being messaged using the block's scope. No need for the extra "owner" parameters and whatnot." Right he is.

typedef void (^HHPerformBlock)();


@interface NSObject (HHBlockPerform)

- (
void)performAfterDelay:(NSTimeInterval)delay block:(HHPerformBlock)block;
- (
void)performOnMainThreadWait:(BOOL)wait block:(HHPerformBlock)block;

@end


@implementation NSObject (HHBlockPerform)

- (
void)performAfterDelay:(NSTimeInterval)delay block:(HHPerformBlock)block
{
[
self performSelector:@selector(runBlock:) withObject:[block copy] afterDelay:delay];
}

- (
void)performOnMainThreadWait:(BOOL)wait block:(HHPerformBlock)block
{
[
self performSelectorOnMainThread:@selector(runBlock:) withObject:[block copy] waitUntilDone:wait];
}

- (
void)runBlock:(HHPerformBlock)block
{
block();

[block
release];
}

@end

It does not get any simpler than this:

[self performAfterDelay:0.2f block:^ {
[containerView
replaceSubview:currentNavigationBarView with:navigationBarView];
}];

[UPDATE October9, 2009] While I agree that the (id owner) argument is not strictly necessary, I do prefer that API and will keep using it. Indeed, it allows for reusable blocks which refer to owner much like you would refer to self in the delyed method call.
Comments

Xcode user script: PropertyFromInstanceVariable

Wrote some Perl today. No, I don't know Perl. Turns out it is good at handling strings.

I stumbled upon a blog post on Cocoa with Love. Matt Gallagher has devised this excellent Xcode user script to generate @property declarations and @synthesize statements from variable declarations. This is triple great:

1. The script will save me quite some typing
2. I had never noticed the Xcode script menu
3. Matt found a nifty way around limitations of those user scripts

So I grabbed the script. Installed it. Then I figured, I could improve upon the existing script. My changes include:

1. Generates the necessary statements in the dealloc method
2. Detects variable types and tries to be smart about setter semantics
3. Supports underbar variable names

Shortly after I had published my version of the code to my own Code page, Mike Schrag pointed me to his forked version of Matt's script. He had made many of the same enhancements. Moreover he had taught the script to handle multiple varaibles in one pass.

Merging my version and Mike's I created my very first project on github. The new version improves on Mike's by reducing the number of calls to AppleScript. It retains all my previous enhancements. And hopefully also retains Mike's changes. It is available on github, as well as on my own Code page. Enjoy!
Comments (1)

NSObject (HHBlockPerform): delayed block executions

typedef void (^HHPerformBlock)(id owner);


@interface NSObject (HHBlockPerform)

- (
void)performAfterDelay:(NSTimeInterval)delay block:(HHPerformBlock)block;

@end


@implementation
NSObject (HHBlockPerform)

- (
void)performAfterDelay:(NSTimeInterval)delay block:(HHPerformBlock)block
{
[
self performSelector:@selector(runBlock:) withObject:[block copy] afterDelay:delay];
}

- (
void)runBlock:(HHPerformBlock)block
{
block(
self);

[block
release];
}

@end
Comments (1)

HHValidatedButton: User interface validation for NSButton

According to the Cocoa User Interface Validation documentation: "The protocols NSUserInterfaceValidations and NSValidatedUserInterfaceItem provide a standard way to validate user interface items—that is, to set their state as appropriate for the current application context".

Unfortunately, automatic user intreface validation is provided only for menu items and toolbar items. Wouldn't it be great if NSButton could also benefit from this set-up?

That's what HHValidatedButton implements. It is a drop-in subclass of NSButton. It channels validation through validateButton: and validateUserInterfaceItem:.
Comments (2)

theMacSale is coming to an end

Only two more days left to get HoudahSpot in a bundle of excellent applications valued at $450. Get them for only $49.99 at themacsale.com
Comments

Extensive HoudahGeo review

Klaus Meßlinger has written an extensive review and walkthrough of HoudahGeo on his Mac photography web site.
Comments

HoudahGeo 2.2 BETA 1

HoudahGeo 2.2 shapes up to by another major release for HoudahGeo. Indeed HoudahGeo 2.2 will revolutionize the geocoding workflow for iPhoto '09 users.

HoudahGeo 2.2 tightens the integration with iPhoto '09 by being able to write metadata back to the iPhoto database. (Obviously it is recommended to have a current backup of the database.) Integration with iPhoto is now completely seamless: HoudahGeo offers a view of the iPhoto database to start off the workflow. At the end of the workflow iPhoto's Places will feature the freshly geocoded images.

HoudahGeo 2.2 also fixes all outstanding bugs related to manual geocoding using Google Earth.

Moreover the current beta already includes various fixes for minor bugs. As the development progresses, more features are expected to make the cut for the final release of HoudahGeo 2.2. Watch this thread for announcements of further beta releases.

Download HoudahGeo 2.2 beta 1.
Comments

HoudahGeo updates

Seems like I forgot to blog the recent updates to HoudahGeo.
HoudahGeo indeed saw two major updates. HoudahGeo 2.0 was a big step taken just in time for a Macworld Expo release. It brought a truckload of enhancements:
▪ Enhanced time zone support
▪ Extended GPS device support
▪ Access to Aperture masters
▪ Access to iPhoto originals
▪ Lightroom 2 integration
▪ Waypoint geocoding
▪ Improved reverse geocoding
▪ Map inspector panel
▪ Track log inspector panel
▪ Flickr sets support
▪ ...

HoudahGeo 2.1 brings integration with
locr.com and CDFinder. It is now possible to upload photos directly from HoudahGeo to locr. There photos may be viewed in context with location descriptions and similar photos.
HoudahGeo 2.1 also added a number of smaller refinements including a contextual menu.
Comments

Geotagging via the iPhone 3G

Don McAllister of shows how to combine Trails on iPhone with HoudahGeo to create a low budget geotagging solution to make the most of iPhoto's Places feature.
Don went out on a mini ScreenCastsOnline roadrip to take some photos of two famous Liverpool landmarks. In
episode SCO0186 he takes you through the complete process from start to finish demonstrating Trails, HoudahGeo and iPhoto '09.
Comments

Leopard’s year-old annoyances

In this Macworld article Rob Griffith details his top ten gripes about Leopard.

I happen to agree with most of his concerns. Yet Leopard is the best operating system I have ever used. And a joy to write software for.

I am most flattered that Rob lists HoudahSpot as solution for his number one complaint: the inept Spotlight interface.
Comments

MacFormat 201 "Essential Mac money-savers" on sale now!

This month's issue of the UK magazine MacFormat comes with a FREE copy of HoudahSpot 2.0.9. It also brings a coupon code for a discount on HoudahSpot 2.2.
Comments

HoudahSpot on Mac Roundtable

HoudahSpot is mentioned in episode 49 of Mac Roundtable. Thanks Don, glad you like it!
Comments

Houdah Software has a new store

I am giving E-Junkie a try. Unlike Share-It.com, this is not a full-fledged sales processor. E-Junkie basically provides the shopping cart and the payment processor integration. I will use PayPal for a payment processor. The extra work I am stuck with now is handling the VAT.

My hopes are that the
elegant "fat-free shopping cart" will lead to lower abandonment rates. Let's not forget that the E-Junkie + PayPal solution comes cheaper.
Comments

MacZot celebrates HoudahSpot's 2nd anniversary

HoudahSpot is celebrating it's second anniversary. Today, to the day, HoudahSpot 1.0 was released. Since then HoudahSpot has come a long way. In late 2007, HoudahSpot was rewritten from the ground up to become HoudahSpot 2: Leopard Edition.

It has since earned much praise from its users and the press. This includes a glowing 4-mice review in Macworld.
HoudahSpot has been featured as 'Pick of the week' on MacOSXHints.com and earned a recommendation on the MacBreak Weekly podcast.

Happy Birthday HoudahSpot!
Head over to MacZot.com for a 52% discount. Today only!
Comments

HoudahGeo on MUPromo. Get a discount!

On May 5, HoudahGeo will be featured at a deep discount on MacUpdate Promo (MUPromo). Don't miss this opportunity! Summer holidays are coming fast: you will have some photos to geocode.
Comments

HHDualShortcutButton

Long time no blogging. Sorry about that.

I'll make it up to you by publishing a fresh bit of Cocoa code. HHDualShortcutButton is a NSButton subclass which may respond to 2 different keyboard shortcuts. You may know this from save confirmation sheet that pops up when you try to quit an application with dirty document. The Save button triggers its action on both Enter and command-S.

Moreover the HHDualShortcutButton will display one of its shortcuts as label when the command key is held down. This used to exist in save sheets. Now AppleWorks is the only example I can find. Currently this works only for alphanumeric shortcuts. I have not yet figured out how to represent special characters like the Return key, ...

Enjoy!
Comments

Houdah.com adds HoudahGeo & HoudahSpot screencasts

Don McAllister of ScreenCastsOnline.com has done a fantastic job presenting HoudahGeo & HoudahSpot.

I have the screencasts hosted on YouTube, but do provide links to higher resolution QuickTime movies hosted on the Houdah.com web server. I wonder if there are more elegant solutions?
Comments (2)

Easter mEgg Hunt reveals list of participants

Easter mEgg Hunt reveals list of participants
Comments

Easter mEgg Hunt

Easter egg hunting season is open!

Today marks the start of the first ever "Easter mEgg Hunt": Seasonal fun and discounts for Mac users. Select Mac indie developers have joined forces to offer Mac users some seasonal fun as well as the opportunity to earn discounts on quality Mac software.

Participating sites will show a banner: Spot the Eggs, get Mac Software, 20% off. This takes visitors to the "Easter mEgg Hunt" homepage. From there they start the hunt for eggs on other participating sites. Eggs are small images which link back to the "Easter mEgg Hunt" site where their contents is revealed.

Each egg contains a coupon code valid for a 20% discount at 3 participating stores. The same coupon is hidden in 3 eggs placed on 3 different sites.

While on the hunt, visitors get a chance to explore product sites and may there learn about Mac software for which they are about to earn discounts.
Comments

ScreenCastsOnline

Don McAllister of ScreenCastsOnline has produced a screencast showing off both HoudahSpot and HoudahGeo.

He does a fantastic job explaining both products. Go see the screencast.
Comments

HoudahSpot 2.1

Today marks the release of HoudahSpot 2.1. Thus update is just about as important as the release of HoudahSpot 2.0.

Wasn't HoudahSpot 2.0 a complete rewrite? How can an incremental update get even close to being as important? Short answer: BlitzSearch.

Thanks to BlitzSearch, HoudahSpot 2.1 now is a complete replacement to Apple's Spotlight UI. No more: let's just do a plain Spotlight search for starters. Oh well, gotta switch over to HoudahSpot after all.

With BlitzSearch, queries can be started with the same convenience as Apple's Spotlight menu. Only down the road you will find the full power, flexibility and customizability of HoudahSpot.

Spotlight (the UI) is dead, long live Spotlight (the technology).
Comments

Download conversion rates

For the first time ever, I have computed download to sales conversion rates.

January HoudahGeo: 3.07%
January HoudahSpot:  1.42%
January combined: 2.10%

December HoudahGeo: 2.68%
December HoudahSpot: 1.33%
December combined: 1.95%

Sales-wise January has been my best month ever.

HoudahGeo gets the better conversion rate. It is however much lower than the figure Andy has quoted. I'd be curious to hear other developer's experiences.

HoudahGeo is much more constraining on the trial period. It is virtually useless in trial mode: you can export only 3 images at a time.
HoudahSpot is fully functional for 30 searches with no time limit.
Comments

Macworld awards HoudahSpot 4 mice

houdahspot2.html
HoudahSpot has been reviewed by Rob Griffith for Macworld's Mac Gems column. HoudahSpot was found worthy of a 4 mice rating.

Rob didn't yet get a chance to see HoudahSpot 2.1 which should to be ready next week. I think he'll like that version even more.
Comments

Macworld after the fact

Time flies. A week has passed since Macworld.
I however left San Francisco only on Monday. Thus I am still trying to cope with jetlag. As I write this, it is 6:26 AM here. I have been up for over an hour. I went to bed late and plan to return there within minutes.
I just wanted to write down a couple more thoughts about my Macworld experience as an exhibitor:
- Sales this month are good, very good
- Only very few sales can directly be linked to visits to our booth. I.e. use of coupon
- I guess this means I get more benefit from initial press coverage than from actual visits
- People were very excited about the Wintec WBT-201. I should have been selling those.
- The ADC package included a business card sized ad in Macworld magazine. So far only 1 sale can be tracked directly to that ad
- I have signed for another turnkey booth for next year
- HoudahGeo outsells HoudahSpot about 2:1. Only HoudahSpot works only with Leopard which has a 20-30% market share. Some potential
Comments

NetNewsWire 3.1 is free

NetNewsWire 3.1 is free: "NetNewsWire 3.1 is free!



(Via inessential.com.)

Comments

Release rush before Macworld

I am in an update mood. Next week I will be showing off HoudahGeo & HoudahSpot at Macworld. Obviously I want them to look their best.

This week already saw the release of HoudahGPS 2.0 (now 2.0.1, oops) as well as a point update to HoudahSpot 2.

The real big news will be the release of HoudahGeo 1.4. This comes with an arm-long release note. Mmmmh, many new goodies in there. You may grab HoudahGeo 1.4b1 (BETA) here.
I am left with two more days for testing and updating the documentation.
Comments

HHusbObserver & HHserialObserver

I have finally published my first bit of open source Cocoa code: HHusbObserver & HHserialObserver.

Previously I have published a series of WebObjects code snippets. Lately I have kicked off a major open source project: Houdah WebObjects Frameworks.

The fact remains that up to now I had not yet deemed any of my Cocoa code worthy of being published. HHusbObserver & HHserialObserver is not code to be particularly proud of. Writing it however required a lot of documentation reading and experimenting. Thus I hope for this to save other some valuable time.
Comments

Country statistics

Since the release of HoudahGeo 1.3, both HoudahSpot and HoudahGeo are priced in Euro. This move has become a necessity caused by the ongoing deflation of the US dollar.

The choice of EUR versus USD for software pricing has oft been discussed on the MacSB discussion group. Many developers are afraid of losing US customers by switching to a "foreign" currency. Indeed it's a fact of the business that the US makes for the largest share of customers.

For Houdah Software, the share of USD customers is at about 40+%. The distant second rank is being fought between the United Kingdom and Germany.

The news is that nothing has changed in the predominance of US customers. Actually December has seen a 43.59% share of US customers.
Comments (1)

Ho Ho Ho! Christmas comes early

Our friends at Rogue Amoeba have invited Santa to the Mac world.

MacSanta is a web site with daily promotions offered directly by the featured software publishers. Using the coupon code MACSANTA07 in the respective web stores customers get 20% off the daily featured products. Previously featured products are sold at a 10% discount with the MACSANTA07TEN code. BTW, all the proceed go directly to the developers. You actually invest in the future of the product you buy.

December 21, is the day Houdah Software's products will be featured. Check us out!
Comments

Release time again: HoudahGeo 1.3

(Giving MarsEdit a try)

Over the past weeks, a couple of Leopard incompatibilities have shown up in HoudahGeo. As I was already working on a HoudahGeo update, I decided to rush things a bit and make HoudahGeo both a feature and bug fix release.

HoudahGeo fixes some minor and major Leopard issues. In previous versions, Google Earth export has proven to be unreliable on Leopard. Also, an API change - a fix - on Apple's side made reimporting images into HoudahGeo troublesome. The system API finally respects time zone information in EXIF tags. HoudahGeo did not expect this.

On the feature side you will find: XMP sidecar support, improved Google Earth export, customizable EXIF/XMP export,...

Enjoy!

Comments

Honeypot: Cracked software?

On a dark corner of the loneliest street stands Lord Semtex. He ain't no Lord. Nor Lady. Nor Lair. He hacks. He cracks. Disassembles. Swaps bytes. Patches assembler. Speaks machine language with his peers. He's a master of his craft. A hax0r crack!

His breakfast serial box holds many a surprise. KCN screw. License files. Keygen. What he doesn't unlock himself he gets from Rapidshare.

By the moonlight he stands. His trenchcoat holds his warez. You get a furtive look at his filez. Freshly unlocked Houdah software. Bright shine the icons of HoudahGeo and HoudahSpot.

Suddenly your conscience speaks. What's that noise? The moaning of a developer trying to nourish his family.

You want to keep with the law. Earn a full license legally. Access to customer support. Update rights.

Get HoudahSpot for FREE
Get HoudahGeo for FREE
Comments

MacSanta has landed!

Ho! Ho! Ho! MacSanta brings daily discounts for the holiday season.

And he has an RSS feed too. So you won't miss a single gift idea.
Comments

HoudahSpot 2: One week later

It's been one week since the release of HoudahSpot 2: Leopard Edition.

There is much to be said about HoudahSpot 2. It's been a complete rewrite. So I could talk about code. I could talk about features. The list of new features is impressive.

But there is one thing that probably not many will notice, despite it being somewhat of a revolution. HoudahSpot 2 is priced in Euros.

Well the US Dollar isn't doing all too well lately. Especially when looked upon from outside the US. My bills need to be paid in Euros. Yet I kept getting fewer and fewer of these from my sales made in USD. I was faced with a choice: raise the price or drop the USD pricing. Raising the price may rub some people the wrong way. Given the USD downhill ride the US buyers should however be used to inflation by now. Altogether it's a viable solution. Yet a temporary one. The dollar doesn't seem to want to stop the joyride. Moreover it seems more like a patch - a half hearted bug workaround - to the real problem: my revenue should be in the same currency as my expenses.

So I went on a dare. Threw over board common wisdom. Despite the fact that most of my customers are US based, I decided to price HoudahSpot 2 at 14.95 Euros. That's some $22 as of this writing.

A week later, I can start analyzing sales stats and draw first conclusions. HoudahGeo is still selling better than HoudahSpot. But that's to be expected as HoudahSpot works only with Leopard. More interesting though is the fact that 60% of my HoudahSpot customers this week are US based. That's actually a bit more than my average share of US buyers.

Thus - based on the admittedly small sample of a week's sale - pricing in Euros doesn't seem to scare away US customers.

BTW, HoudahSpot was mentioned in the first ever episode of the MacSB podcast.
Comments

What's next, Houdah?

It's been a week since I have released HoudahSpot 2: Leopard Edition.

Actually such a major release is a process which spans over several days. Of course there is some preparation. E.g. the web site was updated long before the actual release. Even after the cut off date there is still some work to do. I for one send out complimentary licenses to all the people who I feel deserve some recognition. These are mainly people whose code somehow ended up in the application. Then there are the download sites. Minor fights with one of them…

And then there is the wait. For reasons beyond my knowledge HS2 made it to Apple's Downloads page only yesterday. There is also the wait for initial reactions and reviews to which you may want to react.

With all that done, I am free to move on to the next project. I have decided not to start an all new project until after Macworld.

That means an update to HoudahGeo is in order. The question I have been trying to answer for close to two days now is "which update?".

Well, there are some minor Leopard quirks and one bug introduced by a change of API behavior. So I could tackle those and do a 1.2.9 release this week.

I could also have a list at the long long list of feature ideas and requests and do like 1/3 of them and call the result HoudahGeo 1.3 or 1.5. Or I could just do both. A bug fix release tomorrow, followed by a major update in a couple week's time.

And then there is all the stuff I would love to do. That would probably be worth a version jump to 2.0. Now I would love to have that ready in the Macworld timeframe. But that seems somewhat unlikely.

BTW, don't hesitate to drop me an email if you'd like to beta test HoudahGeo 1.3, 1.5 or 2.0.
Comments

Release time. What a relief!

Minutes ago I have released HoudahSpot 2: Leopard Edition. The press release will go out tomorrow.

Despite having a known name, HoudahSpot 2 actually is a brand new product. This makes it my third commercial product release. Still I have only 2 out there. Indeed HoudahSpot 1.5 has retired to Freeware-land.

I must admit that I had doubts about going 2.0 with HoudahSpot. It's been quite some time since HoudahSpot sales have stalled. Maybe users held out on promises of Leopard improvements. Maybe the competition grabbed the larger share of customers by copying many of HoudahSpot's features.

Now I am more that glad I invested the time to create HoudahSpot 2. There is the satisfaction of having leapfrogged a competition which failed to grasp the best of HoudahSpot's unique features. Most important is however the feeling to have released a very strong product. Since the release of HoudahSpot 1.0, I have become much more proficient with Cocoa. Under the hood HoudahSpot 2 is noticeable prettier.

I am also proud to have found a good feature set balance. HoudahSpot 2 packs quite a lot a features and enhancements without adding to the complexity of the interface. Steve Jobs would boost the fact that the toolbar now has fewer buttons than before.

HoudahSpot 2.0 is probably the strongest release I have ever done. It benefits from many new Leopard goodies. Most important of these is garbage collection. This alone will do away with most of the bugs I have seen in the past. I should also thank my beta testers who helped me to iron out many quirks ahead of time.
Comments

Considering AppleScript support

I have just pushed HoudahSpot 2.0b2 (Leopard Edition) out the door. It has taken giant steps towards release quality. Kudos to all beta testers!

One thing is still missing: AppleScript support. This has been requested in the past. My plans were to include basic support in 2.0. Now I am not quite sure it will make it into 2.0.

The main problem with AppleScript is that I hardly ever use it myself. Thus I have a very hard time assessing needs. Actually I spend about as much time trying to toss together a test script than I spend on the Cocoa side. It's always hard to know if it is my script or HoudahSpot who is misbehaving.

So currently I am thinking I should support the following:

- get the currently selected results from the application
- get all results from a given document

I expect scripts to read something like this:

tell application "HoudahSpot"
tell document 1
get every resultItem
choose from list result with title "Items" with prompt ""
end tell
end tell


tell application "HoudahSpot"
set sel to the selection of application
end tell


OK, I know the above scripts are probably not correct. I do appreciate feedback on how to correct them.

More importantly thought I would like to hear your needs for HoudahSpot scripting.
Comments (2)

HoudahSpot 2: Beta Edition

HoudahSpot 2 has finally entered beta stage. What a relief!

The beta is available by invitation only to registered users. Please email me if you are interested. Leopard is required.

What's new (partial list):

- Complete rewrite for Mac OS X 10.5 Leopard
- All-in-one interface: results are shown next to the search query
- Live editing of queries: you may change criteria without stopping the running query
- Exclude files by location: alongside a scope for the search you may define a list of places to ignore
- Limit output by attribute. E.g. show only the 100 most recently modified files
- Unlimited customizability of result columns: Show and sort by any attribute you can think of
- Preview files using Apple's QuickLook
- Copy-paste support. You can copy from the result list to your favorite text editor or spreadsheet
- Customizable global shortcuts
- ...

Don't miss:

- Templates
- Default template. This is the most powerful concept in HoudahSpot


What is gone:

- The file browser is gone. I doubt many used it. Many actually commented that they did not understand its purpose
- French and German localizations


What will be added before 2.0 GM:

- Some kind of AppleScript support (input, feature request are appreciated)
- Ability to copy or alias files
- The Help documentation will be rewritten for HoudahSpot 2.0
- A crash catcher/reporter
Comments

Taming feature bloat

You may have guessed it: HoudahSpot 2 is running behind schedule. The original idea was to release HoudahSpot 2 the day Leopard is released. For quite a few good reasons, this idea was dropped quite a while ago. I however hoped until very recently to get a private beta out this week. Didn't happen. I am still at least a week from beta.

The next version of HoudahSpot will be called HoudahSpot 2.0. It surely deserves the name: it is a major upgrade which requires the very latest OS version. It also brings quite a few juicy new features. E.g. QuickLook enabled file previews. Yummy!

It still feels odd to call it a 2.0. For one, it is going to be more like a 1.0 release. HoudahSpot has been rewritten from the ground up. Only select bits of code have found their way back into the 2.0 code base. Thus much of the code is brand new and has not been exercised a lot.

The other "oddity" is that HoudahSpot 2 will drop some existing features. These are features which expect to have a rather small following. Truth is I am just guessing and reading between the lines of support mails. E.g. it seems few people cared about the file browser. Actually I have gotten quite some feedback of people who did not even get it. So now it is gone. I leave file browsing to the Finder.

HoudahSpot 1.5 is available in English, German and French localizations. HoudahGeo on the other hand is available in English only. I hardly ever get requests for localized versions of HoudahGeo. I don't see many French or German customers buy HoudahSpot. You guessed it: the localizations are gone from HoudahSpot 2. Sure, they might return. For now however the focus is on getting HoudahSpot 2 out the door - in English.
Comments

Author Apple Help using RapidWeaver

Note: This is a repost of an entry originally published on my former blog. Meanwhile I have used the same template for HoudahGeo.

Recently I set out to rewrite the documentation for HoudahSpot. My ambition was to create true to the bone Apple Help.

First I went shopping for a tool to help me in this task. This query wasn't very fruitful.

Then I came across this article by Andy Matuschak. Finally I got Apple Help: how it works and how it is laid out. With the help of Andy's toolkit, I could actually have gotten started writing. But I wasn't going to settle on writing HTML by hand. I have put those times behind me.

Inspired by Andy's work, I have created a RapidWeaver template to look like what Apple includes with their applications. The template handles the vast majority of pages. Exceptions are the front page, the index and the search result pages.

From here on creating the HoudaSpot documentation was much like authoring a standard web site. While I could mostly use standard hyperlinks, there are a few occasions where I use Apple's proprietary tagging technique. I create the tags right from within RapidWeaver by abusing of the otherwise unused sidebar title field.

The front page and search result template had to be written in HTML. For the index page I settled on the SiteMap plug-in.

The fruits of my labor - both theme and site minus the index - are available for download. Go write some documentation.
Comments

Leopard compatibility

The official release of Mac OS X 10.5 Leopard is only hours away. Rumor sites actually report some got lucky and received their copies early. Obviously the press got their copies too. Developer - paying ADC members - unfortunately still haven't seen the GM build.

I have submitted some nasty feedback to ADC - suggesting I will ask for a refund if they fail to provide early access to Leopard. At least I got them scared to the point of calling me. Trouble is that the person on the phone couldn't (wouldn't ?) understand the issue. She thought I was asking whether ADC members will receive a copy of the release DVD. It turns out that isn't decided either. Up to know this was a given to me.

The upshot is that I am unable to make a definite statement as to the Leopard compatibility of HoudahGeo and HoudahSpot.

The good news is that - as of the latest Leopard pre-release build - HoudahGeo was working pretty well under Leopard. There is only a small glitch in the way sheets are displayed. They ought to have rounded corners, but Leopard seems to insist on drawing square corners around the round ones. This will be fixed in a forthcoming update.

HoudahSpot, on the other hand, does not work at all on Leopard. That news isn't all bad though. HoudahSpot was in for a complete rewrite anyway. Thus HoudahSpot 2.0 will be a major update and require Mac OS X 10.5 Leopard.

Today I have released HoudahSpot 1.5 (Tiger Edition) as freeware. Thus: Tiger users get HoudahSpot for free. As they upgrade to Leopard they will need to purchase a license or recycle a previously bought 1.x license.
Comments