Archive for October, 2009

DPhyllotaxis

Sunday, October 25th, 2009
Screenalicious - DPhyllotaxis - 200910298 205041.539.png

Ultimately, the whole point of resurrecting my old screensaver code was to finally port DPhyllotaxis to Snow Leopard.

Beyond being, perhaps, the most over-engineered screen saver ever for what ultimately draws colored dots, I wrote this as a sort of virtual flower for my then-girlfriend, now-wife-of-more-than-a-decade, Christine.

The underlying algorithm on this one is based entirely on phyllotaxis and the phyllotactic pattern of growth seen across so much of the plant world. The most well known example being the layout of seeds in a sunflower and that particular form of phyllotaxis is exactly what this screensaver mimics.

The color calculation in this particular screen saver is, frankly, goofy. Every floret — every dot — is actually rendered. The brightness is determined by calculating a color once, grabbing the red component and then calculating the color again using a slightly different algorithm and using the previous red value as the new brightness. Rather silly, but the results are pleasant enough.

Screenalicious - DPhyllotaxis - 200910298 205114.991.png

When I originally wrote this in 1994-ish, it used Display PostScript to do all the drawing. Specifically:

/* this should not be done here */
PSarc(cp.x, cp.y, 15. + (11. * pp.r), 0, 360);
PSgsave();
PSfill();
PSgrestore();
NXSetColor(NX_COLORBLACK);
PSstroke();

I have no idea why, 15 years ago, I thought it important to note that “this should not be done here”. None. So, in the ported code, the comment is gone.

CGFloat floretDiameter = 10. + (11. * pp.r);
CGFloat floretRadius = floretDiameter / 2.;
NSRect floretRect = 
    NSMakeRect(cp.x - floretRadius,
    cp.y - floretRadius,
    floretDiameter, floretDiameter);
NSBezierPath *floretPath = [NSBezierPath 
    bezierPathWithOvalInRect: floretRect];
        
[floretPath fill];
        
[[NSColor blackColor] set];
[floretPath stroke];

There are, of course, many ways to make the above a ton faster. Save for reducing power usage by going a more efficient route, it just doesn’t matter for this particular use case as I already had to slow down the animation rate considerably.

Seems there has been a bit of performance jump between the 25MHZ 68040 this was originally written on and the 2GHZ Core 2 Duo machine I used for the porting work.

Code is in the same repository as the other screen savers. I also tossed a pre-built binary on the server. Only tested on 64-bit Snow Leopard, but it might should also work on 10.5 ppc/i386.

Indispensable Cooking Tool; The Turkey Fryer

Sunday, October 25th, 2009

Just found yet another use for my turkey burner. Roasting chile peppers! Worked flawlessly and was a heck of a lot easier than a plumber’s torch.

This kind of gas burner is just incredibly useful for anyone who enjoys cooking. It is designed to be able to heat a pot of grease up to the 350°F necessary to deep fry a turkey (which I have never tried). Thus, the burners put out a truly awesome amount of heat!

Note: The Underwriter’s Laboratory will not certify turkey fryers at all. Why? Because people are stupid and need to be protected from themselves when using powerful tools. When frying, it is terribly easy to cause a grease fire. So, fry away from your house and use the nifty good-eats style turkey crane. And have a grease friendly fire extinguisher on hand.

Or just do what I do and don’t actually fry turkeys on it!

You can find the burners at any decent hardware store. If you do, make sure it has a few features (all of which the burner at left has — except the pot):

Flat Top Surface
The top of the burner should be flat. This is critical if you want to put something on it that is burgerbigger than the burner (like a grill). Yes, I was hungry when I wrote this.
Cast Two-Piece Burner
The burner, itself, should be two pieces of cast iron held together by a bolt through the middle. The burner will get stuff spilled on it and it will rust or corrode. The two piece design makes it trivial to take it apart for cleaning. A wire brush on an electric drill makes cleaning trivial.
Adjustable Air Vents
This is needed to be able to tune the flame. Not just for maximum heat output, but sometimes also for maximum flame height.
Long hose with valve on or after regulator
The gas coming out of the tank is relatively high pressure. The burner’s secondary regulator will take care of regulating down to something more reasonable. The valve after or integrated into the regulator is critical because the pressure off the tank, while high, will change considerably as the tank empties. That and it is nearly impossible to make fine adjustments on the high pressure side of the line.
Stainless Steel Pot
If you get a kit, try to find one with a stainless steel pot. It will last longer and corrode less than aluminum.
Stable Design
Some burners have legs that go straight down or are relatively tall. Stupid. Ideally, you want a three or four legged burner with relatively wide set legs. If three legs, they should spread quite wide for stability (like the one to the left).


OK — so you have the beast of a burner. What can you do with it? I’m sure there is more — comments welcome — but these are just some of the things I have done with mine:

Read the rest of this entry »

Excellent Cup o’ Coffee

Thursday, October 22nd, 2009

I used to be a complete french press fiend. However, the combination of the tedium of cleaning with the potential, now largely considered true, of increased cholesterol pushed me over to drip. (Espresso is like a pet snake — awesome when I get experience someone else’s but I ain’t gonna deal with that crap on a daily basis).

I tried a couple of electric drip pots but they pissed me off. The first featured a carafe that would drip coffee all over no matter how you poured and the second was optimized towards ensuring maximal grounds in your coffee cup.

Disgusted with technology, I decided to go the luddite route. Simple as possible. Carafe. Filter holder. Filter. Done.

In looking around, the Chemex Coffeemakers kept popping up. Gorgeous, simple design. Given the raves I read about the chemex coffeemakers, I decided to give one a try (like the one at left) and, also given reviews, decided to compare Chemex filters with a gold plated reusable coffee filter.

End result?

The Chemex + the Chemex filters produce the smoothest cup of drip coffee I have ever had. Flat out delicious. Start with a really good bean, freshly ground, and the Chemex consistently delivers an amazing cup of joe.

Frankly, I don’t believe for a second that it is the Chemex, itself, that is imparting such quality to the coffee. It is really the filter and the Chemex is just a gorgeously designed carafe to carry it.

In particular, the Chemex filters are a surprisingly heavy paper that seems to do a brilliant job of filtering both the really fine bits of the ground beans (which the metal filters let through), but also the oils and other nasty bits that contribute to the bitter flavors (and, potentially, cholesterol).

Frankly, coffee through the metal reusable filters flat out suck by comparison.

I have since bought a second Chemex for the office and have picked up a couple of Chemex for friends who have been amazed by the quality of the resulting coffee.

Again — the filters do seem to be the key (as long as you are brewing into a non-reactive vessel). The filters can be found online and at both esoteric hardware stores and your more obsessed coffee shops (Barefoot Cafe, for example — awesome place, coffee obsessed).

Highly recommended.

Update: I’m not interested in “fixing” french press or espresso. Espresso is too damned fiddly and I don’t want that many tubes, pipes, pumps and boilers between me and my coffee in the AM. The Aero-Press is an awesome contraption but, again, not interested. French Press with a filter sounds double-plus-fiddly & annoying.

No, I’m not trying to convince anyone that drip is superior, just that the Chemex filtered drip is superior to other drip.

I will, however, be perfectly happy to test drive a cup of coffee in any form, if you want to demonstrate the awesomeness of your extraction device & beans.

SpiroScales & LizardView; Source for Snow Leopard Available

Monday, October 19th, 2009
SolitaireInfoPanel

Hah! While the NeXT system in my garage didn’t have the original BackSpace.app on it, it did have a copy of the solitaire game that my friend and I worked on.

And that had an itty bitty SpiroScale screensaver embedded in the info panel!

Imagine that full screen — all dithered and textured in 2 bit grayscale. When color NeXT systems shipped a couple of years after I wrote the screensaver, I was quite delighted with the results (as seen below)!

Solitaire was an amusing little bit of indie development. Beyond having 4 different company logos in that about panel prior to finally signing with a distributor, the eventual distribution license was a flat monthly royalty for 25 months for Adam and I.

Flat royalties work out well when the company making the hardware your software runs on stops making said hardware….


Screenalicious - SpiroScales - 200910291 233622.054.png

Some months ago, I ported an ancient screensaver of mine to Mac OS X (then Leopard) and made the binary available.

I have since ported it to Snow Leopard and have made the source available via subversion. Pre-built binaries are also available.

There are actually two bits of source there; the first is which contains the Lizard Saver and a second screen saver called Spiro Scales. The screen savers should build for both Leopard and Snow Leopard, including support for Snow Leopard’s 64 bit GC-only screensaver requirement.

The second bit of source is called Screenalicious and is a simple/stupid application for displaying a screensaver in a window and allowing you to easily take scaled down screenshots. It was a hack when I originally wrote it in the ’90s sometime and it is still a hack.

SpiroScales was my first interactive screen saver. Interactive in that the pattern generated is entirely determined by mouse position (not movement).

Read the rest of this entry »