Archive for June, 2008

According to Wikipedia…

Friday, June 27th, 2008

If you didn’t know already, I’m a lover of eclectic information. Here is a sampling of some of the more interesting facts I’ve gleaned from the Wikipedia. In no particular order:

  • Birds, reptiles and amphibians only have one orifice for their intestinal and urinary tract. This orifice is called the Cloaca, from the Latin for sewer. If that’s not cool enough get this: some turtles have gills in their cloacal cavity.

  • Belt Drives are cool! Because of the repetitive nature of their use, wear is a major concern. Thankfully there are clever ways to reduce the wear. 1) flat belts can be made into a Möbius strip. 2) timing belts can made so that the number of teeth on the belt and all of the sprokets are coprime.

  • Gastropoda have diversified so much over geological time that evolutionarily things have gotten very confused. There are land species with gills as well as marine species with lungs. Slugs (Gastropoda without much of a shell) are also interesting because most go through torsion where the internals and the shell of the gastropod rotate. This can be problematic since it puts the anus right by the mouth – but evolutionarily speaking it must of been helpful for something.

  • The parasitic flatworm Leucochloridium paradoxum is an amazing example of aggressive mimicry. The flatworm’s sporocyst grows within a snail, invading the tentacles of the snail, with a preference to the left. The now swollen and colored tentacle mimics the appearance of a caterpillar – which a bird host eats. A snail then consumes the birds feces completing the cycle. Some interesting bits about the infected tentacle’s effect on the snail: 1) it cannot retract into its shell, leaving the flatworm always exposed. 2) it appears to reduce light sensitivity in the snail which keeps it out in the open in view of potential hosts.

  • The Tempest Prognosticator was a curious invention from the 1850’s. It was a barometer made of leeches. The inventor, George Merryweather, found that leeches would respond to changes in the atmosphere by climbing to higher ground. It consisted of a number of leaches each in their own glass jar, at the top of which was a piece of whale bone tied to a string. [diagram] When the leach would climb the jar it would dislodge the whale bone which would pull a mallet which would strike a bell – you would guess the likelihood of a storm by the number of bell rings. He had lobbied for it to be distributed throughout the coast of England, but the British Crown decided instead on the (still not entirely understood) storm glass.

  • Neurocysticercosis is a condition caused by the infestation of the brain by the tapeworm Taenia solium. If you aren’t afraid of undercooked meat yet, I think you might now – the usual vector for infection is through larvae in pork meat (though autoinfection through vomit or feces is also possible). Treatment of Neurocysticercosis can be very problematic. The problem is that living cysticerci are typically asymptomatic, the complications arise when the organism dies, triggering the host’s immune response and leading to the inflammation, scarring, etc. that can lead to seizures, paralysis, and death.

  • While all flies will occasionally mistake fetid wounds for dead flesh, Cochliomyia hominivorax, a spechies of screwworm fly, is notable for targeting fresh wounds and even exposed skin (e.g. the navel) for laying their larvae, causing Myiasis. The larvae are also very aggressive, if disturbed they will burrow further into the host, hence their name. They are known to infect humans and are also a major concern for merino sheep, where the condition is called flystrike. However, before you get too worried, know this – that the fly caused so much destruction to American cattle herds that the sterile insect technique was developed as a means of controlling the screw worm. This led to its eradication in the United States in 1982.

DarkKit

Wednesday, June 11th, 2008

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