Category: Software


Post Mortem 2.0

August 7th, 2007 — 4:50pm

Hazel 2 has been out for a few days and I’ve had a chance to sit back and reflect a bit. Of course, things are a bit different this time than when I was releasing 1.0. For one, I have users now. That meant that I had to split my time to do support in addition to development. But that also meant that I had more people giving me feedback and a larger pool of beta testers. Yes, it’s time consuming to process all that but it made for a better product in the end.

There were a couple decisions that weren’t applicable when doing a 1.0 that I had to deal with this time:

1.2 vs 2.0

When planning the next release, I went back and forth on whether it was 1.2 or 2.0. What’s in a version number anyways? Well, making it 1.2 would have made some things easier. It’s generally understood that point releases are free so there would have been less confusion on that point if it were 1.2. On the other hand, there were major chunks that were rewritten. The artwork was redone. I ended up labeling it 2.0 as it does indicate that it has significant improvements and that the product is more mature, which is the case here.

Why a free upgrade?

Several factors played a part in this. There were issues in 1.x that 2.0 addresses and they were the type of thing I wanted every user to have access to. Plus, I do feel grateful to all of you who took a chance with not just a new application. If I could, I’d meet with every one of you and shake your hand but I get the feeling that it would be unfeasible. In any case, I think you’d appreciate the free upgrade more. You don’t know where my hands have been.

• • • 

Overall, the pre-release went pretty smoothly. The one thing that was less than ideal was the timing and length of the prerelease period.

Because of issues with 1.x’s use of launchd, I had to write my own task runner/scheduler. Since some users were being affected by this, I released the alpha earlier so that they could have access to the new fixed version. Also, since it was a critical part of the system, I needed it to be tested for as long as possible. So, in retrospect, the alpha came out a bit earlier with fewer features ready than I would have liked but I felt it was necessary given the circumstances.

As for the length of the prerelease, it did run a bit longer than I wanted. A few factors came into play here including a good bit of contract work I was doing during the Spring and logistics concerning the business (including converting Noodlesoft to an LLC).

What surprised me this time around was the amount of attention my beta received. I had multiple articles in the press at each step of the way which was great. A big thanks to all of you who kept up with the pre-releases and sent in feedback and bug reports. I feel that 2.0 is pretty solid out of the gate as a result.

• • • 

In the end, I’m quite happy with how 2.0 turned out. There were some rough edges that I was finally able to polish and I feel like I’ve filled out the feature set while keeping it all cohesive.

What’s in store for the future? I’m still working that out but most likely, 2.1 will be focused on getting Hazel working properly on Leopard (without breaking it on Tiger, of course). I think the next major improvement won’t be in the product itself, but on the Noodlesoft site. People have been clamoring for some sort of repository of Hazel rules so I need to hunker down and figure out how that should work. As always, your feedback helps to shape the future direction of things so keep it coming.

Comment » | Hazel, Noodlesoft, Software

Hazel 2 out (finally)

August 2nd, 2007 — 11:21am

hazel2.png

After what ended up being a longer pre-release period than I anticipated, Hazel 2.0 final is out. Lots of new, neat stuff. Nifty, too. If you haven’t been keeping up with the betas then check it out. I feel it’s much closer to my vision of the product when I started down this path last year.

It’s a free upgrade for you registered 1.0 users because I love you all. Yes, there, I said it.

When the smoke clears, I’ll do another post-mortem but in the meantime, download it.

1 comment » | Hazel, Noodlesoft, Software

Unofficial Hazel Web Badge

July 20th, 2007 — 6:04pm

Hazel 2 is going to be released soon and our marketing manager thought that we should start a marketing campaign. When this happens, we usually sit down and look into how he escaped from his cell, but this time, we decided to give him a chance.

We here at Noodlesoft like to keep up with the latest currents and trends. With that in mind, we present our first unofficial web badge. We feel that it captures the spirit of today’s vibrant web youth culture.

Get Hazel

Feel free to adorn your web page with the badge. Consider this our trial balloon into the wonderful world of online marketing.

K. Bai!

2 comments » | Hazel, Noodlesoft, Software

NoodleLabs: Fix for Mac Pro headphone behavior

July 12th, 2007 — 12:52am

I’ve done it. I’ve joined the 8-core club. Historically, I always shoot for the sweet spot in terms of price/performance but this time I thought I’d splurge for once and get the octocore (or is it octacore?) Mac Pro. Realistically, it’s a bit overkill. Sure, Hazel now compiles 5x faster but it’s not like I’m doing full builds all the time and it didn’t take all that long before either. Nonetheless, it’s a great machine. There’s one thing about it that bugs me, though.

On my Powermac, when I plug in headphones, it automatically switches sound output to them, even if I have external speakers connected to line-out. Basically, the headphones, internal speaker and line-out are treated as three devices sharing a channel. To me, it makes sense. If I plug in my headphones, it’s because I want to listen through them. If I pull them out, it’s because I want audio to go back through the speakers. Most every piece of consumer audio equipment I’ve used operates like this.

On the Mac Pro, that has changed. The line-out is a separate output and is unaffected when you plug in headphones. So, if you are using external speakers, you have to go into System Preferences and manually change the output audio device to headphones. You could use something like Rogue Amoeba’s SoundSource to switch output devices in a more convenient fashion but nonetheless it’s a manual process. This Apple doc describes the change but it sounds like an engineering decision imposing itself on the user. I don’t care if it’s now orthogonal and consistent; I want it to be useful.

Well, the nice thing about being a programmer is that you can solve the problem yourself. So, I went ahead and created headphoned (read it as “headphone-d” like a unix daemon). All it does is sit there and watch for when the headphones are plugged in, at which point it switches audio output automatically. When the headphones are unplugged, output reverts back to whatever device was selected before.

I’ve never touched the CoreAudio API before so please excuse the naiveté of the implementation. Suggestions and improvements are most welcome. A big thanks to Vincent Gable, author of IMLocation for this article which gave me a big headstart.

There seems to be a problem where the audio will wedge when plugging/unplugging. I found that updating with Apple’s recent audio fix got rid of the problem (or maybe it’s wishful thinking on my part but I haven’t experienced it since). If you find it does happen, just plug the headphones in/out again as that usually unwedges things. Also let me know if you experience this even after updating with Apple’s fix.

And, of course, it’s free (MIT License). Do what you will. It’s a bit rough around the edges (no automatic install), but I figure if you are using a Mac Pro, you are less daunted by the command-line. I’ve included a launchd config. Install it in ~/Library/LaunchDaemons and edit it to reflect where you put the executable. Note that it doesn’t seem to work if it runs as root (I think it needs to run as the console user), so don’t bother installing it at the top level LaunchDaemons directories.

Enjoy.

Download headphoned-1.0.zip

Update [Sep. 5, 2007]:

Rogue Amoeba has now integrated this functionality into SoundSource. The announcement is here. You can grab it from their freebies page (and yes, it is free).

21 comments » | Downloads, OS X, Programming, Software

Hazel Screencast

May 25th, 2007 — 1:36pm

GTD/productivity guru Ethan Schoonover at Kinkless has put up the last installment of his “Kinkless Desktop” series of screencasts. Of course, this particular one interests me as it focuses on Hazel, showing how he integrates it into his workflow to keep his folders organized. He even makes the rules he uses available for download. Check it out here and make sure to check out the rest of the series.

Comment » | Hazel, Software

A Modest Proposal: A New Way To Install

April 15th, 2007 — 10:40pm

Currently, there are two main ways that Mac software is packaged. There are Installer packages and there are apps that you just drag and drop into their install location (usually /Applications). The latter has come into favor in Mac ISV circles because of a dislike of the former.

There are various reasons why some people dislike Installer packages. There is the perception that the software is not self-contained and that the installer can run random scripts and do weird things to your permissions. In contrast, taking a self contained bundle and dropping it in your Applications folder seems tidy, controlled and predictable. Nevertheless, it seems that there are a large number of users for whom this does not work. Now, the evidence I have is anecdotal (i.e. stories of people’s less technically savvy relatives and such) so take it as you will.

It seems as if the “drag app into App folder” style of installation is not as intuitive as many developers think. Even with instructions shown in the DMG background image, I’ve heard numerous stories of users running the app directly from the disk image indefinitely. The notion of installing the app is not clear to them. It seems that whatever icon is there just gets double-clicked. They do not care about installing your software. They want to run your software.

If that is the case, then when presenting user with your software, you have one chance to do what you need to do and that is when the user double-clicks on whatever icon you present. It appears that anything more involved will not be followed by many users.

In some ways, then, Installer packages are more ideal. The user will double-click them and are then led through the install process. But, as mentioned previously, the power-user segment is not found of Installer packages plus after the install, the user must still find the application and run it.

Now, let’s look at preference panes. When you double-click a preference pane file, you are asked where to install it and after that, it starts up System Preferences with your pane loaded. Simple. It does what you, the developer, want (get the app off the disk image and onto the user’s system) and what they, the users, want (which is just to run the thing).

My suggestion? When your app launches for the first time, check to see if it’s on a disk image. If so, offer to install it for them. If they accept, you copy it to Applications or wherever and restart. Done and done.

Of course there are details to figure out. To detect if you are running of a disk image, I suggest maybe playing with NSWorkspace’s -getFileSystemInfoForPath:isRemovable:isWritable:isUnmountable:description:type: method. My guess is that an unwritable, removable and ejectable filesystem is sufficient to identify it as some sort of distribution medium but feel free to refine this and let me know. Also, you would have to deal with the situation of the app already being installed and such but these are all surmountable.

So, my proposal is for all you app-writing people to use this type of install. It’s straightforward and benefits both developers and users. Additionally, unlike someone else’s modest proposal, no children will have to be eaten (I’ll leave it to you to decide whether that is a good or bad thing).

If anyone already does this (I feel someone must have come up with this already), please let me know. I’m curious as to your experiences with it. Lastly, but not leastly, thanks go to the #macsb channel for the discussions on the topic.

Update:

I’ve had a few discussions with different devs via different channels on the topic. The one that carried the most weight was the email exchange I had with Dave Nanian. He’s the author of Super Duper which already does what I have proposed here. It appears that from his experiences, there is still confusion even with using this approach. It appears that users still are confused with disk images and end up copying them to their app folder as if they were the app itself. I’ll leave it to him to expound on this when he has time but seeing as this is empirical evidence, maybe people should consider internet enabled disk images.

For the record, this isn’t something I would have needed for my own product. Being a preference pane, System Preference’s way of automatically installing has provided for a smooth and trouble-free experience. Actually, I can see using internet-enabled disk images as being a liability for preference panes as it deposits the pane in your downloads folder tempting users to keep double-clicking it to launch it, installing it over and over again. So, I’m not the best person to spearhead this effort as I lack the actual need for it. While there is the “for the betterment of humanity”-type motivation, I feel someone else who is dealing with actual support emails on the topic should take up the cause.

In the end, you should assess the situation as it pertains to your own product. As mentioned in the comments. Rainer Brockerhoff’s PathProps category on NSWorkspace would be useful for anyone looking into implementing this. I’ve played around with it and it seems to work as advertised.

Thanks to all for the great feedback and comments.

Update #2 (May 25, 2007):

Just got a note from Michael Nickerson who has just released a framework for this. You can read all about it here.

53 comments » | OS X, Software

Hazel 2.0 alpha ready for testing

March 5th, 2007 — 8:18pm

Hazel IconIt’s been a bit of a wait for a lot of you but Hazel 2.0 alpha is ready to be downloaded and tested. Now, it is alpha so most, but not all of the features are there; be gentle. I have stopped using launchd in favor of a homebrew scheduler. As a result, those of you hitting the “Hazel stops working after logging out then back in” bug will be happy. Hazel also features new icons from Fernando Lins (featured here). A bunch of other stuff is in there so if you’re curious, check it out.

This is a semi-public pre-release, so you have to jump through a couple hoops to get at it. Details are on the beta forum but you must be registered on the forums to view it. I know it’s a bit tedious but I want to make sure all testers are tuned into the forums.

Oh, and for those of you wondering, 2.0 will be a free upgrade. I’ll have a Hazel 2.0 FAQ up at some point.

1 comment » | Hazel, Noodlesoft, Software

Red Sweater acquires MarsEdit

February 22nd, 2007 — 6:32pm

As I’m sure you’ve heard by now, Red Sweater Software has acquired MarsEdit. A big congratulations to Daniel Jalkut.

There are a couple great things about this. First off, MarsEdit will continue to be actively developed. I think this shows a real commitment to making the users happy. I know a lot of companies who would just keep their marbles but it’s great that NewsGator realized they could not support the product and let someone who could take over. Secondly, I think it’s a big deal that a small developer got it. I feel NewsGator could have sold it for more money to a bigger shop.

I’m not privy to the details of the deal but from where I’m sitting, it looks like a deal that was less concerned about the bottom line and more focused on working out something that was best for the developers (on both sides), users and the community at large. Looks like it’s in good hands now.

Comment » | Software

Search and Replace in Xcode

January 27th, 2007 — 5:59pm

This issue came up twice in the past couple weeks thus triggering my rule that if something comes up more than once then others may be interested in it. So, here’s a little tip that may save you some frustration.

When using regular expressions with Xcode’s search, the docs mention that XCode uses the ICU library. Naturally, you’d think it would use ICU’s syntax for specifying backreferences in the replace string, which would be to use variables consisting of a dollar sign ($) followed by the number of the capture group being referenced.

Of course, if that were the case, I probably wouldn’t be writing this tip. Using $ for backreferences turns “Search & Replace” into “Search & Destroy”. The syntax is to use backslash (\) instead of dollar sign. In short, \1 instead of $1.

Type the following in an Xcode editor window: “$1 works in replace strings.”

Now perform the following search & replace:

find-replace-crop.png

Ok, maybe this example makes things more confusing. If in doubt, just remember: $ = bad, \ = good in Xcode Find panel.

As to why Xcode does not use the ICU syntax in the replace strings, beats me. If anyone has a simple explanation, send it my way though I also welcome apocryphal anecdotes and crackpot conspiracy theories (extra points if you can convincingly implicate the Trilateral Commission).

11 comments » | OS X, Programming, Software, Xcode

Silencing Hazel

January 15th, 2007 — 4:07pm

One of the main design precepts for Hazel was that it would do its work without bothering you and I feel I was successful in that goal, unless you are a developer. The one place where Hazel can get chatty is the console logs, much to the annoyance of some developers. I know how it can get in the way when you are trying to sift through your own application’s logs (though I do find that typing the process name into the search field does wonders).

Anyhoo, if you want to redirect the logs, you can use a defaults setting. Just type the following in at the command-line:

defaults write com.noodlesoft.Hazel LogFile file

file, of course, is whatever file you choose, including /dev/null. Removing the default will reverse the change. Note that this only applies to the background program; the UI, being a pref pane, logs wherever System Preferences logs, but it’s not nearly as talkative so hopefully this isn’t an issue. Also, there is no UI for this setting as I consider it to be something only developers would care about.

Random tangential reference to a piece of nostalgia/trivia:
When telling a friend (who was the one who brought up the original gripe) about this setting, I referred to the defaults setting as a dwrite which my friend found amusing (we’re both old NeXTies). In any case, along with dread and dremove, dwrite was the precursor to the defaults command and to this day I still refer to defaults settings that are only accessible via the command-line as “dwrites”. Old habits die hard.

Not-so-random, but nonetheless tangential info:
There’s another camp that would say that Hazel is too quiet. I am working on Growl support so if you have any particular opinions or ideas on the matter, let me know in the forums.

3 comments » | Hazel, Noodlesoft, Software

Back to top