Software How To Rid Your Projects of Unwanted Files
For those of us on real operating systems (Mac or Linux), deleting scads of unwanted files is easy! Let’s say you’ve got a project that’s chock full of .svn directories, because it’s your Subversion working copy, and you need to get rid of them. You could do an svn export, but that won’t pick up any un-commited changes you might have in your working copy.
Welcome to the power of find!
find . -name .svn -print0 | xargs -0 rm -rf
The above command finds all .svn directories in the current folder and below and kills them. No muss, no fuss.
You can do the same type of thing to remove other files, too. Need to add essentially a whole project to source control (svn add * or similar) and you’ve got a bunch of TextMate files lying around? (Which will happen if your project lives on a SMB-mounted or otherwise non-HFS disk):
find . -name '._' -print0 | xargs -0 rm
Be careful with these — they’ll easily wreck entire directory structures if the find command returns too many results or if it’s run one directory too high. Always test the find command without -print0 before piping to rm or the like.
Software TextMate Blogging Fix
I don’t know if this has been affecting anyone else, but I’ve been getting an awkward error when blogging with TextMate: trying to pull down categories for any blog would result in “Wrong Class NilClass, Not Allowed! No categories available!”
If you’re having this problem, here’s the fix that worked for me:
- Click Bundles -> Show Bundle Editor.
- Expand the Blogging category, select “Category”
- In the left pane, in the Command(s) textarea, you’ll see a chunk of code like the following: cred = Blogging.new endpoint = cred.endpoint username = cred.username password = cred.password res = TextMate.callwithprogress(:title => “Fetch Categories”, :message => “Contacting Server “#{cred.host}”…”) do cred.client.call(”metaWeblog.getCategories”, endpoint, username, password) end
- Replace the bolded username variable with cred.username. You’ll look like this now:

After that, the Category command seems to work just fine. I don’t know why, but cred.username resolves to the proper username for the blog after it’s typed in, but after username = cred.username, username still doesn’t evaluate properly. No idea what’s going on here, but no matter, the fix works!
Open Source .NOT
One of Innova’s stock monologues to deliver to clients is “PHP is an excellent development language.” It’s true: PHP with the Zend Framework is the most flexible and reliable way of creating sites that I’ve ever seen. It’s a win. The reason we have to keep delivering the monologue is because clients - or people who advise clients, such as corporate IT drones - often have an unhealthy respect for Microsoft-based solutions, specifically .NET. At some point in the last ten years Microsoft replaced IBM in the lexicon of corporate uniformity, with obvious consequences for anyone not toeing the line.
For developers, .NET comes with some pretty heavy strings attached. It involves committing to a Microsoft stack, using IIS instead of Apache, Windows Server instead of Linux, a whole bunch of odd Microsoftian applications, wizards, talking paperclips, brown shoes with a black suit, all things that good developers hate. The upside is C#, good library support and excellent performance.
On balance, if we were forced to use .NET we would probably give up and move to New Mexico and raise organic chickens or something; it just wouldn’t be fun.
Enter Mono, stage left.
