February 25, 2012

After years of threats and murmurs I’ve finally replaced this here thing with a new version of itself. It has a simpler engine, and an updated look, and a new URL. But it’s still just a glob of nerdishness.

Oh, and if you’re reading this, my sincere thanks for tuning in! Feel free to say “hi” over in the comments; long ago I forgot how to view visitor statistics on this host and have had to write like nobody/everybody’s watching ever since.

Comments Off

February 20, 2012

The crew at &yet is an honest team, a friendly team, a world-class team — a Good team! — and yet for some reason it never could stay feeling like my team. So I never became comfortable inflicting my ideas upon it. After so many months of alternately trying to change and trying to ignore that fact, I still craved a little more time and freedom away from my responsibilities there. Now I have generous amounts of both.

Now it’s time to stop thinking what could have been — with the first Calf Trail, with the previous team — and start working wisely on what should be.

I’m depending on clients to apply my strengths to their markets. I’m depending on friends to cover my weaknesses with their sight (and insight). I’m depending on family to keep me healthy and homed. I’m depending on faith, to not disappoint when all I’m really after is all that is left.

Freelance means I am dependent on all of creation but possessed by none of it. This, I fiercely believe, is how life here should be.

February 9, 2012

An up-coming new hobby reminded me of the CHDK (Canon Hack Development Kit) project. I realized that my old Canon 350D body was ripe for some experimentation, since (due to a flaky shutter release button) I use it only as a backup to my T1i these days.

As it turns out, my Canon 350D (a.k.a. Rebel XT) digital SLR camera is not supported by CHDK. This means it’s outside of the normal CHDK ecosystem of motion detection, BASIC/Lua scripting and the like.

However, there is a way to hack the 350D to enable a smaller handful of “bonus” features and settings, including an ISO extension to ASA 3200 and an intervalometer mode useful for things like time-lapse photography. I had a few hiccups getting it going — proceed at your own risk! — especially from Mac OS X it seemed, but here’s how I did it:

First, find a small (4GB or less) empty CF card and format it using the camera’s menu — this should give you the FAT16 filesystem needed for the next two steps.

Grab the bootflg2.zip file attached here and copy the “bootflg2.fir” file in it onto your card, preferably via the command line. (NOTE: I had trouble when I just copied it using the Mac OS X Finder, which creates a hidden ._bootflg2.fir metadata file alongside. This extra file seems to confuse the camera in the next step, so make sure you delete this file if it appears via Terminal.)

Now follow the instructions in the ReadMe.txt file included in the bootflg.zip folder for how to trigger the “hacking” of your camera’s built-in firmware so it will load the additional bootable code we’ll be dealing with in the next steps.

Now download and use the MacBoot card preparation tool that fills in for the Windows-only CardTricks step. Make sure to choose the “Make DSLR-bootable” radio button, which (as explained above) is different than the normal CHDK process. You can use the same card as before or a new one(s).

Once you’ve setup each CompactFlash card to enable the bootable custom firmware, you’ll need to actually put a version of on each card you’ll be taking pictures onto while the custom controls are enabled. The latest version of these files I could find was 350D-20101011.zip (via the forums). Basically, put the included “autoexec.bin” file on any cards you’ve made DSLR bootable via the previous step.

There’s some more detail and links in the instructions buried within the banner ad–splattered CHDK Wiki page for the Rebel XT, as well as the best overall summary of how to actually use the custom menu features enabled by the custom code on your CF card about halfway down the page. If you have questions, the best place to get help and find even more details is probably this forum thread.

Not quite plug-and-play but on the bright side, there’s very little fluid dynamics or tax regulations involved. Now when I plug in a compact flash card I’ve made bootable, I get even more control over my exposures than the camera already provides out of the box.

With this hack running, I can also set my camera to just keep taking pictures, say, every 10 seconds — should be great for time lapse and remote photography situations. If I want to disable all the experimental “power user” features, I just turn my camera on with a non-bootable card in the CF slot, and it goes back to its normal featureset.

Comments Off

January 17, 2012

If the battle is whether Apple’s tools or HTML5 is the best way to write iPhone apps, whether Google’s frameworks or HTML5 is the best way to write Android apps, whether Windows Presentation Foundation or HTML5 is the best way to write Windows apps — my money’s on “native” in any and every case. Some developers aren’t as bothered by oppressive distribution policies as they are by the differences between platforms. They see JavaScript as the new Java — write once, run anywhere — and see generic-but-native-looking HTML5 apps as superior to the native apps they mimic.

The trouble is that users don’t value “consistent across platforms”. Why would they? They expect consistency within a platform. Developers who look at web apps as a “cross-platform solution” because of “HTML5″ do themselves a double disservice: not only do they devalue their own app by making it subtly inconsistent to native iPhone apps, they devalue the foundation they’ve built upon by muddying the web’s unique consistency.

Interestingly enough, it was Apple’s experiments that in large part sparked what we now call HTML5 — even before they tried to pitch web technologies as the iPhone SDK. Their 2004 introduction of Tiger’s new WebKit features, and their use in HTML-based dashboard widgets, was not uncontroversial — especially the debut of the <canvas> element. The controversy was not just about a browser adding this new element ahead of the standards process, but whether its nature fundamentally fit the web.

This wrestling may have been too quickly forgotten when the zeitgeist turned to The Web vs. Flash. Which one did we want in our pockets? Which one would we allow into the App Store? (We know who shot a rather rich mixture of fuel across that flame too!) Cute young <canvas> livened up that party, while the more web-ish SVG kept faithfully raising the children back in her own namespace.

Now APIs for 2-dimensional, and perhaps someday 3-onto-2-dimensional, drawing at such a low level as <canvas> provides is one of the most native-ish things a sandboxed web page could hope to ever do. But what distinguishes <canvas> from Flash? Very little as far as the topic at hand — the user experience may certainly benefit indirectly from an open standard implemented by competing vendors accessible from the same code that manipulates other document content, but its fundamental direct nature is one of a rectangular garden in which every website may try to plant its own reimplementation of superficial patterns and behaviour borrowed from hither and yon.

Like Flash, <canvas> is a useful medium for games. Games are their own platform. There are certain habits in game design; one of these patterns is that every game paints its own interaction. The Web, too, is its own platform!

Should the web platform shun games as one of its many contents? Certainly not! The web is a platform for content — perhaps the platform for content — and I’m beginning to suspect that that is exactly how a web *app* should look and behave as well. And not just any content, but linked content. Hyperlinked hypercontent for hyperconnected hyperhumans.

Raw pixels do have a place in that, as do video and audio and maps and molecule models.

You may recall me puzzling, in my early days of transition from desktop interfaces, at the attraction of building “apps” on what began as the physics paper platform. Just as physics is discovering what a tangled web may lie beneath their spherical cows of uniform density, it’s becoming harder and harder to ignore just how revolutionary “sharing within internationally dispersed teams” was even just for some academic information. And the web was never intended to be limited to a single format, so the idea of applying it — finding applications of it — building web apps for any task that can be turned into information, is not unfounded. Because of the web, any part of our lives that can be turned into content is limited only by the velocity of its light cone and the weight of its incoming links. It’s a powerful, powerful platform.

(The web’s other attraction is not unique to the web: any medium seems to gather a healthy school of builders who may not understand the first thing about foundations but are willing to keep bracing lumber together until they find an arrangement that’s worth tying a rope swing beneath. However, the web platform is actually especially conducive to this; how many of us don’t look back fondly at the first tree forts we built, that were our early homesteads in this great forest?)

So what is “native” to the web? Cloning every desktop and mobile operating system into a least common denominator cross-platform app framework has failed before, and it will fail again. I even see a very low return on investment trying to mimic the design patterns and interaction behaviours of only The Mac (or the iPad, for that matter) with the new tools HTML5 has given. The Macintosh interface was designed for specific hardware and a rather earlier period of transition. Not to mention, its modern implementation has much deeper consistencies and broader features than the different 80% each one of us relies on, which varies whether we’re keyboard people or mouse people, know Emacs meta shortcuts or copy/paste, have a multi-button scroll mouse or prefer a braille display. A web app’s best bet is not to pirate these patterns, like a camcorder snuck into a matinee, but to embrace the medium of hypercontent it’s been given.

That’s really what the web is: important information, flexibly found and presented, easily shareable via links. Since the web is not the world, people need specialized means of integration between their lives and whatever information they care to share by projecting it into existing and still-missing forms of content. Making that better is what web apps are.

Comments Off

January 9, 2012

I wondered why I don’t really fit in, am not really a part of, any particular professional community.

What community could I be a part of? I listed. All were too this or too that. Too young, too old. Too clueless, too proud. Too pointless, too advanced. I would refuse to join, or they wouldn’t have me as a member.

I supposed maybe I needed to get better at seeing potential. And showing potential.

Which I do need.

What, though, about enjoying people for who they are, not what they could be?

I’m stuck with this world, until death do we part. There’s not much that will make it spin faster; the days are already too brief anyway. Somehow too the people in it. Every community. All the people.

Comments Off

January 5, 2012

Last night with family. It’s 12:37 midwestern time, less than three hours until we get up to load their van and ride to the airport in the dark. I roll over, waiting to even feel sleepy, and must have let out a sigh.

“Ha! What you say, Daddy?” giggles Tobias, suddenly breaking the silence of our room, as dark and quiet as we can get it. Squirmy baby brother Malachi is now fast asleep across the hall with mommy, the most practical arrangement we could come up with as we corralled our bouncy little boy back into bed at eleven. He’s been laying quieter than me on his half, but what I sensed is correct: he’s as awake as I am.

We talk a bit about the situation, a two and a half year old young man and his insomniac father.

“Shall I put on some music?”, and he whispers in agreement back so Arvo Pärt’s choral works join us from the headboard. I keep clicking the tiny speaker quieter, and with it the morning’s alarm, as the beautiful music fills our silence and, gradually, flutteringly, my thoughts. I wonder what Tobias could be, would be, thinking about; his energetic fingers and legs and brilliant little vocabulary obediently mute beside me as I too try not to toss and turn.

I couldn’t have listened to both discs (all two hours?) but before I finally fell asleep I remember my iPhone and oldest son both at peace above and beside me.

It’s the same old questions. Sometimes I find serenity, deciding “what Tobias wants to be when he grows up — that’s more important now”. But Malachi is already growing up too.

Two boys already, whose dad still hasn’t ruled out firefighter or airplane pilot or rock star or farmer. But probably something to do with computers. Something that takes all the will and energy and unlikelihood of ever fitting in and turns it into something good, all within whatever amount of time we have here on earth to figure out why we’re here and get it done. Would they be better off if I proved it possible, or better if I didn’t fail again?

Maybe this, like so much else, really isn’t up to me. But it’s still keeping me up.

Jonathan Zittrain, in this article (which you should read) and in his book (which I should read), argues that a society in which a few corporations completely control our devices in the name of security, and to better serve their profitholders — that a society which allows that will ultimately end up an un-safe, and un-growing, society. So we should be building up and building on platforms that don’t discourage freedom and sharing and other similarly unpatriotic ideas.

Which is half, but not the better half, of my little Beyond 1984 project.

I’m tempted to say the other half is about homeland-warming things like such as in money making and consumer happiness. But that’s a cynical take. The other half is about putting away cynicism. We already have Zittrain’s “angry nerds”: they’re the Stallmanites, the cypherpunks, the anarcho-pacifists and other tinfoil-hat flouride-fearers that you’d never want at your company Christmas party.

Angry nerds? Angry nerds are a dime a dozen! We’re the solution to what exactly now?

Meanwhile, Twitter’s repressed are excited that maybe Google+Path can re-centralize the violence inherent in Facebook — O frabjous day! And if that’s already more than what 99% of computer owners care about, it’s certainly not the world’s richest 1% who are going to patronize the development of a free society either.

So the other half of going Beyond 1984 is going not so much by avoiding what’s wrong with the Orwellian but by embracing what’s good. Embracing well-distributed, privacy-respecting, citizen-empowering hardware and software designs may be a worthwhile goal — or maybe not.

I don’t imagine anger, or fear, or even schadenfreude, can inspire much great industrial design. Angry nerds like me need to go beyond building systems that are Anti-Ungood. Going beyond what 1984 represents will require abandoning those themes ourselves.

So that’s what this little Beyond 1984 project is: researching libertarian technology, if it could be built for healthy reasons.

-
The end result is that Personal Computers are no longer quite what they could be.

-
We’ve outsourced backups, we’ve outsourced shared storage, we’ve outsourced network security. These were once luxuries of only the dedicatedly computer-savvy.
We value these luxuries enough to give up whatever it is the big iron gets for providing them.
-
We’ve outsourced ourselves.
-
We’ve gotten some very accessible technology — in exchange for our previous privacy, our former fraternity and our iNdividuality.
-
Us nerds escaped centralized mainframes for complete computers we could call our own.
But now we’re escaping back to centralized mainframes which complete computers we could call our own.
-
Our users’ computers, or perhaps the computerized “users” themselves, we can now own.
-
And we’re finding it quite profitable.
-
Is this okay? Or —
-
Is this some 1% winning?
-
Is this just economies of scale?
-
Or is this a tragedy of the commons?
-
The joke is the jocks start with the power in school, which buys them nothing, and the nerds end up with the power in the rat race, which buys them yachts. A better triumph of the nerds would be changing the world order, rather than controlling it.
-
Or so I suspect.

October 20, 2011

Today I needed to send some passwords to someone over the internet again. The recipient recommended using PGP/GPG to send an encrypted email, but unfortunately that protocol appears to be quite a hacky hassle if you use the built-in email clients on Apple’s (and apparently Microsoft’s) platforms.

Fortunately, iOS 5 just added support for a more standard protocol called S/MIME, and so I had recently come across a nice article on setting up secure email on both Mac OS X and iOS 5. Since I mostly want S/MIME for email encryption rather than signing (there’s a good overview of the distinction on its Wikipedia article) I decided to just create a self-signed pair rather than procuring a certificate from some annoying, overpaid and insecure centralized certificate “authority” as that article recommends.

Creating a self-signed S/MIME certificate is actually very quick and relatively easy using the Keychain app that comes with Mac OS X, but I wanted to document the process as getting a certificate that Mail recognizes did require overriding at least one of the assistant’s defaults:

Update: Turns out Mozilla Thunderbird will not accept the certificates generated through this process. I’ve had success by creating a standalone personal certificate authority and then using that to sign a user-only certificate. I need to test it a bit more before writing it up here, but it might be a bit simpler process in the end.

In the Keychain utility application’s menu, choose “Create a Certificate…”:

I had to override the defaults primarily so I could include my email address necessary for Mail.app to use it:

Confirm that self-signed is okay

I just accepted the default serial number (1) and validity period (365 days)

Then the part where you enter (at least) the email address you want to use this certificate with:

For the actual keypair, I went with DSA mostly just because:

I unchecked all the certificate metadata stuff in the next 4 steps, you can try playing with it but didn’t seem worth the complication:

Then just have the assistant create it in your login keychain unless you have some different setup. It will take a bit to generate the keypair.

Once it’s created you’ll need to find the certificate and double click it…

…so that you can manually trust it for at least S/MIME:

Once you’ve done that, you’ve taken care of the “The Certificate” step and can just follow the rest of the instructions in Ars Technica’s “How to secure your e-mail under Mac OS X and iOS 5 with S/MIME” article using the certificate you created instead of one from some corporation.

There is one major drawback to a self-signed (decentralized) certificate. As you’ve seen yourself after creating your certificate, it will not be trusted by default — only several dozen corporations and governments and rogue nations are trusted to forge certificates; you are not on any platform’s pre-approved issuer list. So: after you give your public key to your email contacts (as will be necessary for them to decrypt your messages) they will have to repeat steps 9 and 10 above to manually trust your self-signed certificate on their own machine.