DarkKit

It’s been sitting in my ~/Projects folder for the better part of a year, but now it really is about time I dust it off and set it free… finished or not.

It started with my work on LaserLine. I had written a parser for ILDA files, but needed a way to test its output. Naturally, I couldn’t accept Aqua’s presence in an app associated with an app for Lasers – which are all about bright lights and dark rooms. Granted, it was only two controls and some custom images, but by the time I was done there was no doubt in my or anybody else’s mind that the final app would be “dark”.

ILDA Inspector Animation

Knowing that a complete app would need a more complete library of widgets and subclassing AppKit seemed like a good way to get intimately acquainted with its internals, I didn’t stop there. A full accounting of my adventures in AppKit really deserves its own (lengthy) post that I’ll for later, I will just say this — kids, don’t try this at home. Even I, in my pixel perfecting, eye candy licking, gradient loving glory, will admit that the whole endeavor was likely not worth the time and frustration involved. But the work was done, so I might as well publish it.

Disclaimer: DarkKit is full of sketchy code. It began as a hack – and it still is a hack. It does a whole lot of things AppKit doesn’t want you do to; a whole lot of things you shouldn’t do. It uses private, undocumented methods and even shadier things (IIRC there was toying with a super’s instance variables somewhere). Keep this in mind if you think you might need help from AppKit folks – I doubt abusing their framework will endear them to you. Use at your own risk.

DarkKit Widgets

What does it cover? not everything, but hopefully enough to be kinda useful. Most of the controls have their dark alternatives and DKButton covers some of the button variants present in AppKit (the normal shiny capsule button, the square beveled button, and square gradient button). Where things get iffy are Views… NSScrollViews were not designed with alternative looks in mind (not that that’s a bad thing) and that causes problems when it comes to TableViews, etc.

Using DarkKit

If you’ve ever gone about working out in the dark, then you probably have a good appreciation for one of the reasons I decided DarkKit would be a nice thing to have. When everything around you is pitch black, the fluorescent glow of the computer’s screen stresses your eyes terribly, so much so that when I’d be typesetting text or some other project that extended way into the night I would regularly enable high-contrast mode (⌃⌥⌘8) to give my eyes a chance to relax. So, if you happen to be designing an application that is going to be used in low-light settings (a laser show for example) a good low-light interface approaches the point of being a requirement.

IMHO, a really dark interface also does an excellent job of placing content front-and-center. The huge contrast between your app’s monochrome controls and your app’s colorful/interesting content tells your eyes exactly what to look at and drastically reduces visual clutter.

So yea, if you happen to be doing a pro-thing (and you accept the disclaimer from earlier) DarkKit might be for you. And, if you hadn’t noticed yet, jet black interfaces seem to have a way of kicking an app’s sex appeal up a notch. So, if on the other hand you find yourself looking for cheap UI pixie dust DarkKit might also be helpful – not that I endorse pixie dust… just sayin’.

DarkKit IBPlugin

Seeing that doing something as damaging to you application’s stability, maintainability, and general code-quality as adding an illegitimate framework like DarkKit should only be done with the greatest care and after considered thought, I built a IBPlugin* so you can build all your dark interfaces with minimal effort right from interface builder. Enjoy!

*There was also a palette, back when that was cool…

» Continue on to svn.oofn.net

Meanwhile…

Wisconsin Northwoods

I’m my past post I forgot to mention just how significant distraction can be to keeping projects from getting finished. Well, a bit ago I got Atmel’s AT90USBKey and last week, while up in a cabin in Wisconsin’s northwoods, I indulged my sentimental side and started reading Thoreau’s Walden. I’ll plan on getting back on the wagon, just not right now…

The Developer’s Dilemma

People always like to quip that “real artists ship,” as a quick one-liner I guess that’s pretty good, but as with everything else… only sorta true. Anybody familiar with creativity has to admit that an end result of any quality usually requires a great deal of quantity in the background. Photographers will take hundreds of pictures in the process of producing tens of photos. Films emerge from hours worth of additional footage thrown in the waste bin. Graphic Designers build copious numbers of mockups to produce a final design.

We developers are in the idea business too and, although I feel wholly unqualified to say this, the good developers are the ones with lots of ideas. In my experience as a mediocre programmer I spend a lot of my time hounded by ideas of my own creation.

I found this great passage in an article by Richard P. Gabriel:

John’s world is a world of ideas, a world in which ideas don’t belong to anyone, and when an idea is wrong, just the idea – not the person – is wrong. A world in which ideas are like young birds, and we catch them and proudly show them to our friends. The bird’s beauty and the hunter’s are distinct.

[…]

Some people won’t show you the birds they’ve caught until they are sure, certain, positive that they – the birds, or themselves – are gorgeous, or rare, or remarkable. When your mind can separate yourself from your bird, you will share it sooner, and the beauty of the bird will be sooner enjoyed. And what is a bird but for being enjoyed?

Every creative would love to claim a monopoly on divine inspiration, but since we can never quite manage that we settle for just hiding away all those half-finished, not quite thought-through, potentially embarrassing ideas of ours – and it’s a really nasty habit.

For developers, we have trouble kicking things out of out our ~/Projects folder and sharing them with others because they’re “just not done yet.” Doneness is a dangerous idea – especially for perfectionists. It is always so tempting to keep polishing this or that project until you can really say it is done. Or worse, putting something pretty good to the side and promising to come back to it later to finish it off.

I’ve without a doubt fallen into that trap, granted I’ll make an argument for school getting in the way, but the truth is I’ve been sitting on a whole lot of “not done yet” projects for no great reason at all. Now that I’m nearly out of school, with new-found time on my hands, I’m resolving to drag them out of the closet, give them the once-over and throw them out for others to have – done or not.

I Can Has Job?

post icon Hooray, my final semester has already arrived and is on its way out. With ~8 weeks of class remaining, I’m closer than ever to leaving university and being out in the job market.

And, while I’ve gone around to the usual suspects, I’ve arrived at the conclusion that I am most definitely not the usual suspect’s kind of material (feel free to read that however you may like). In light of this, I figured I’d make some kind of announcement here.

So what kind of thing am I looking for? Well… naturally, I am looking to work building things loaded full of 100% pure AWESOME. After that here is an unordered list of:

  1. A product that I can fall in love with.
  2. Work that requires things to be beautiful — inside and out.
  3. Work where broad interests are a good thing.
  4. A company filled with groovy people.

And of course that list’s important counterpart — what I can do:

  1. Cocoa programming, if you found my blog this is probably why.
  2. Web programming, CSS, HTML, and Javascript are good friends.
  3. Java programming (i.e. backend of a webapp).
  4. “Better than average” sense of design and usability. There really isn’t any objective measure of this but I think it is safe to say I’m pretty good.

I’m not terribly interested in publishing personal information of me or others here on the world wide web, so I’ve only published a reduced resumé here. If you want the full document email me directly and I’d be happy to give it to you.

Traffic Widget

Things have bee a little quiet here in my little corner of the blogosphere (though I assure you real life has been far more eventful). So today I thought I’d liven things up a bit with a post on the maintenance update I did for Traffic a few weeks ago – Exciting!

First I updated the default quota to 2GB, (up from the 750MB, which cause all sorts of problems when listening to SomaFM for days). Then switched things over to using the Apple classes). And, well, that was it. Enjoy the rest of your day.

It’s all about the Brackets, Baby!

Obj-C hands picture

With C4[1] starting tomorrow (which I, sadly, won’t be at). It seems apropos that I put out my graphical rendering of Rentzsch’s Obj-C sign from C4[0]. There you are!

(more…)

Older Entries »