Skip navigation

Wine is Nicely Enabled

Wine is Getting Good: “Anyone else notice lately how good Wine is getting?

I haven’t checked Wine out in awhile, but I’m a big fan. I was using it to run Radio UserLand under Linux, about 5 years ago. (Wow, has it been that long?) I’ve kind of assumed that Wine would get Good Enough at some point to run almost everything that matters that was written for Win95, Win98, Win2K, and eventually even WinXP. And, games aside, pretty much everything that matters and that anyone bothers with runs on this range of Windows versions. And, seeing as Windows Vista hasn’t exactly set the world afire, I’m betting that Wine might actually have a chance to catch up well enough to be trouble.

Oh yeah, and CrossOver Mac is based on Wine. And CrossOver Mac supports Team Fortress 2 right now, without purchase of a Windows license. Think about that. So, maybe we shouldn’t put games aside. Really, unless Microsoft can somehow patent the crucial APIs exposed by Windows - if they haven’t already - resistance is futile. There are nerds motiviated and annoyed enough to reverse engineer and assimilate. I’m not a lawyer, though: I suppose by the point Wine actually becomes a threat of any sort, nasty things can be sprung.

OPML reading lists in FeedMagick2

For anyone who’s interested: I’ve been hacking a little bit on FeedMagick2 again, with the latest addition being an OPML reading list feed blender.

What’s an OPML reading list? Basically, it’s the same as as OPML export of a feed reader’s subscription list - only rather than doing a one-time import into another program, the OPML is itself treated as a live feed. A feed reader that supports OPML reading lists will continually check the list for updates and sync RSS/Atom feed subscriptions with its contents, maybe in a special sub-folder.

Here’s a quick demo:

The itch I mean to eventually scratch is to replace the front page of decafbad.com with a live updating aggregation of the stuff I create and capture daily on the web. It’ll be basically a self-assembling tumblelog pulled from many different services across the web. It’ll also replace the footer of accumulated crud I’ve got on this very blog - which I thought was a good idea at one point, but now consider NeatLikeDigitalWatches.

With that in mind, the next thing I plan to develop is an hAtom module or XSL transform. This will turn the blended feed into an XHTML page. Maybe someday, hAtomic will launch, and I’ll have a nice pretty style for the page too. Some time after that, I might work up a module that stows away dated historical archives of the feed and pages. I have further plans and ideas, but I’m trying to focus on the itchy spots first so that I might actually get something done in this round of serial enthusiasm.

Beautiful Code

Michael McCracken: “Once you get a piece of code to the point where you believe it works - it’s passing its tests - go back over it and edit it. That is, go back and edit it for clarity, flow, and style. Just as if it were an essay.

This is something I just don’t hear enough of - code as writing, code as communication. While I don’t always make time to polish as much as I’d like, I’m always thinking about things like narrative and flow of a file of source code as well as the aesthetic shape and form of the code. Code is fiction, code is poetry.

Compilation free of syntax and parse errors is baseline competence - and sometimes just good luck. Apparent correct operation is not good enough: Moving on before the code has beauty is a poverty. Ugly code kills motivation and comprehension - which attracts bugs and induces a downward spiral in morale.

Unit tests clear the way for courage and bravery; beauty yields living code worth fighting for.

bookmarking outlier

I’ve amassed 9681 bookmarks on del.icio.us as of right now. Quick napkin calculation: I post an average of 7 bookmarks a day, over my lifetime of 1353 days using the site. Within the next 45 days or so, I should reach 10000 bookmarks at this rate. I wonder if I should throw a party?

Invites to the delicious preview

Update: Oh! And since even I missed this link in the original blog post, you can request to be invited. Not sure if that results in an email, either, though.

Update #2: Also, we’re trying out Vanilla forums as an alternative to the delicious mailing list. If you’re invited to the preview, your login should work there too. We might even launch public forums once del 2 is out.

In case anyone’s forgotten: I work on delicious. Since I’ve had a steady stream of friends and acquaintances asking me about how they can get into the invite, I thought I’d mention this:

You may already have been invited! :)

Unlike most Web 2.0 sites that open up a preview or invite-only thing with a mysterious sign-up form, we can’t fire off an email when we create an account for someone on our preview. It’s thanks to our privacy policy - although we have the email addresses of most everyone we’ve been adding to the preview, we’re not allowed to send anything other than password recovery emails. Weird, I know, but sometimes organizations try to follow things like that.

So, the problem is that we have many more people invited to the preview than have actually started using it. As briefly mentioned in the blog post announcing the preview, you need to check your “Links for You” to see if you’ve been sent a link to the preview.

But, if your invite has possibly been buried in other links from friends - you might just try signing into the preview with the username and password from your existing delicious account! It might just work.

sadness for my dead palmtop

I dug my Zeos Pocket PC out of a box and apparently let out the magic smoke when I tried to plug it into a universal wall wart adapter. The voltage and polarity were right, and I’d used this adapter with this palmtop before - but this time, it literally smoked and smelled of burning plastic and works no more.

That’s kind of an end of an era for me - I’d bought that thing with money I’d won in an Ayn Rand essay contest in High School and used it throughout College to enjoy sitting outside in sunlight with its reflective LCD screen and built-in Microsoft Works to write papers for my psychology classes and stories for my creative writing classes. Funny what you get sentimental attachments to, albeit however slight.

it’s so quiet, time for an editorial calendar?

Hmm. Time for this blogging cliché: Been awhile since last I posted here with any reliable volume.

But, I’m thinking about whether another revamp of this place might get me going again. I’ve also considered making myself whip up an editorial calendar and actually commit myself to writing something on interesting topics on a regular basis. It might be the only way to do it.

Sticky Tags for Twitter?

I should elaborate on what I mean by tags in Twitter, since I got a few head-scratching responses.

No, fitting tags into the 140 characters for a message won’t work. And, no, tagging every tweet as you go is a horrible approach - no one will do it. What I’ve thought might work, though, are sticky tags.

Sticky tags would persist from update to update. From the web UI, you could drop “work” or “gnomedex” or “l:95051 beer concert somerandomband” into an additional tags field and all tweets from then on will gain those tags until you empty the tag field.

There could be shortcut commands to change or clear tags - ala “d someone” for direct messaging. This would be especially useful while out and about and mobile. Say you text “t bus commute” to Twitter when you get on the bus for home, then anything you might emit from then on, until you change the tags, gets tagged with “bus” and “commute”.

Then, you and others could follow this particular thread of tweets via http://twitter.com/yourname/commute - or even with tag intersections ala delicious: http://twitter.com/yourname/commute+bus.

Going to be at SxSW for awhile? Drop “sxsw” into your sticky tags. Maybe someday everyone who doesn’t want to hear it can filter out tweets with that tag rather than stop following you altogether.

Having some sticky tags can allow a bit of metadata and filtering hooks to follow you for awhile without requiring you to do or remember much. Keeping them as free-form text strings allows some cow-pathing as people invent conventions.

Think of these tags as kind of long-running meta-status.

A Curmudgeon Playing with the CodeIgniter Framework and OpenID

One bit of hackery I did this weekend was to explore the CodeIgniter PHP framework, which is even less magic yet more glued-together out of the box than the Zend Framework. Also, very much less magic than CakePHP and barely in the same universe as Symfony. I think I may have found my sweet spot of simplicity and comprehensible magic.

CodeIgniter has is a PHP 4 / 5 framework that provides a lightweight Model / View / Controller arrangement with URL routing and a useful but minimal constellation of utility classes and helpers. The view templates are in PHP, with just a bit of pre-processing. The controllers are plain-old PHP classes whose methods are called via simple URL routes.

The model layer of CodeIgniter, however, is the weakest part of the trio - which I actually like a lot. It’s not a magical ORM - instead it’s just a simple superclass from which to derive, mostly there to suggest that a separate model is a good thing to write. The DB abstraction classes just make the job of writing SQL statements easier and don’t pretend that there’s no impedance mismatch between objects and relational tables.

The depth of code in CodeIgniter is shallow enough that I felt I was able to get into developing quickly while still taking side trips through the framework methods I was calling and get at least a glance at what being taken care of for me. There’s always danger in magic, but this stuff doesn’t really get out of hand.

To doodle around with an idea, I threw together a layout decorator class to support the sort of nested templates I’m used to from Symfony. Out of the box, CI views are simple, offering facilities for calling sub-templates and “partials” but not directly providing conventions for such. My first swatches of code add a bit of that.

After playing around with layouts, the next thing I did was to use CI sessions and the PHP OpenID Library to develop both an auth producer and consumer. CodeIgniter doesn’t come with a ready-made user auth system, though it does come with its own implementation of sessions using encrypted browser cookies to replace PHP’s native sessions - another feature I really like.

Kind of odd - but on the same toy app I can sign up for local accounts, sign into other sites with OpenID URLs based on local accounts, and sign into my CI app with external OpenID identities.

The wild bit is that I can even sign in locally with one OpenID URL, then use the newly created local profile to get a second OpenID URL to sign in somewhere else. Seems interesting yet possibly dangerous. I mostly just glued the right parts together and got the Auth_OpenID black-box modules working - now that I have an operational OpenID system, I need to study it further.

The next thing I want to do is work more on profile managment, offer some of the OpenID Simple Registration fields, and look into supporting multiple auth IDs linked to the same user profile.

It might also be fun to do something like “catalogue the sites that a user logs into and automatically construct a homepage.” Overall, I’ve got some vague notional ideas to build a personal status collector and maybe some federated social networking and messaging stuff. But, one hack at a time.

Hopefully, I’ll get this code I’ve got so far into better shape and commit to my SVN repository. Sooner than later, otherwise it’ll never get off my dev box.

A Curmudgeon Playing with the Zend Framework

Because it’s been awhile since I last surveyed the landscape, I played around a bit with web frameworks this weekend. Mainly, I tried getting something simple working with the Zend Framework. After intermittent play and much studying of documentation between Saturday and Sunday, I got to “hello world.”

Unlike other web frameworks of late, Zend Framework doesn’t come with any magical CLI tools to build out directory trees and / or generate code. Being somewhat suspicious and curmudgeonly about that sort of magic to begin with, this actually struck me as an attractive thing about ZF. In fact, what I really liked about ZF at first glance is that it’s less of a monolithic system and more of a bucket of parts from a single source that fit together decently.

And, all my favorite parts are there: Among other things there’s config, logging, a front controller with URL routing, template-system agnostic view support, and somewhat non-magical DB / model support.

These were all things I’d grabbed from PEAR for my more recent PHP mini-framework play, but I figured there should be some benefit from finding them in a unified collection like the Zend Framework.

The experience was somewhat similar to rolling my own, though. I stumbled through some docs and eventually found some blog entries and a tutorial. It’s all very loosely-coupled and somewhat DIY, which is actually what I wanted. The experience has left me wondering if I really should have wanted it, but I’m guessing it’ll go easier from here on out.

In the meantime, though, I feel like I have a decent grasp on what all those loosely-coupled parts are doing. I’ve skimmed through code, traced wires, broken things and watched the errors.

See, my problem with a lot of modern magic-imbued web frameworks is that I have a deep distrust of what they’re doing. They come with a lot of moving parts doing things that I don’t see - and when I do finally see them, I tend to run into decisions with which I disagree. I see abstraction where I think the gritty concrete needs to be left bare. I often see lots of astronaut acrobatics that just have to be burning tons of cycles. I see further acrobatics done to compensate, unrolling loops and pre-parsing config files - which requires further layers of magical tools to generate code and caches.

Too many moving parts wherein assumptions can hide, later to bite me when we’re hundreds of miles into the post-launch desert and trying to fight scaling fires or develop a new feature with some weird angles to it.

For example, consider Symfony for PHP. Their configuration system runs PHP code that results in YAML. Parsing that YAML, along with cascading layers of other generated YAML, then drives a PHP code generation stage, composing all the static code necessary to bootstrap the framework with each request. There’s an amazing amount of flexibility exposed by that system, and it’s quite clever - but my curmudgeonly side catches whiffs of insanity.

Maybe that’s really the issue - I’ve been doing this stuff long enough to have written my own one of everything, so I’ve got my own opinions and I like to have a grasp on everything. I’ve written front controllers, templating systems, and model abstraction layers. I’ve worked in a half-dozen or so languages doing all the above. I don’t yet accept that web app development has passed the da Vinci point - a single developer should be able to grasp the structure of a web framework in mind without getting lost in too many fractal branchings.

Anyway, I’m rambling like an old grouch, but I think I’ve reached my point. Hopefully more actual experimentation soon.

Damn kids! Get off my web!

Scott Burkett, Stop Twittering and Go Solve a Problem: “Aside from aesthetically looking like something a 12 year old cobbled up, the entire tool seems utterly pointless to me.”

For Scott, Twitter probably is pointless at first glance. And that’s because no one’s talking to him. Really, this should be a FAQ for all social media, to be read by all journalists and commentators: Listening in on random strangers’ conversations is more likely to be boring than not, and that’s what you’re doing if you just go to twitter.com and start clicking around. But, to assume because you’re bored that the service as a whole is boring is, again, to be one of the Blind Men with an Elephant.

Twitter becomes immensely interesting when it turns out that you’ve amassed a group of contacts who tend to run in similar circles as you, because even their off-handed remarks and random burps have a decent chance of surfacing something interesting or entertaining. When it’s good, this sets up a nice ambient chatter like sitting in a coffee shop filled with just your kind of people.

This same “I’m bored, so it’s boring” mistake has popped up again and again - applied to blogging, MMORPGs, social bookmarking, MySpace, what have you. Replace “bored/boring” with “confused/confusing” or “annoyed/annoying” and you’ve got my own early reactions to MySpace.

But, really, it’s not addressed to you if there’s a buzz and you’re not groking it. That’s a clue that you’re probably missing something. Granted, people can be insane, but it really is more likely that you’re missing something - even if it’s just that there’s a particular brand of entertaining insanity in progress to which you’re not attuned.

hack day in london!

Hack Day: London, June 16/17 2007

Chances are good that I’ll be attending the Yahoo! Hack Day in London on June 16th & 17th to offer some del.icio.us representation. Thanks to my klutzy bus exit last September, I missed the Hack Day in Sunnyvale with Beck - hopefully a trip to the UK will ameliorate my regret in missing that event. Now, since I never managed to get one up till now, I need to see about getting a passport in the next 3 weeks.

Outsourced hoarding

Update (5/18): I am, of course, only an amateur hoarder. Be sure to check out this comment from professional-grade hoarder Jason Scott (in brief): “I agree with you in a tangential way. Outsourcing hoarding is a good idea, but you have to stay on top of the pros and cons of it, just like real outsourcing. … In other words, the risk you take with outsourcing is having your “value metric” not match any other active hoarding entities. The less exotic your tastes, the less of a problem this is. My tastes are exotic; I suspect yours are too.”

Trying out the OPML Editor again, pasting in an entry composed over at my OPML blog.

Copyright and DRM and litigation aside, it’s recently occurred to me as inevitable that digitized media and cultural artifacts will become increasingly more available and easier to obtain. That in itself is not my big realization. My realization is that I’m starting to feel less and less of a compulsion to hoard and collect things.

For example: I used to carefully stick comic books in mylar bags with backing boards - not for resale value, but because I wanted them in good shape to read again years from now. But nowadays, though I still pay for and buy comics, I see that complete archives of things like The Amazing Spider-Man are available as multi-gigabyte torrents. Someday, you won’t be able to buy Spider-Man anymore - but I bet that torrent will still be out there in some form or another.

Another example: In high school, some friends and I semi-obsessively searched for and collected Nine Inch Nails albums and CD singles that fell into a numbered “Halo” sequence. Never mind that this is probably what Trent Reznor was talking about when he recently wrote “Nothing but a consumer rip-off that I’ve been talked into my whole career.”

Living in a small town with crap for record stores, the Halos seemed so rare at the time, and having gaps in the numbered set was frustrating. And imagine when we discovered that there was a “Halo 00″! Of course, now you can find a complete archive of all the Halos in one big torrent - meticulously labeled, bestowed with cover art, and with lots of seeders.

And that’s barely scraping the surface. You can find almost any music, any obscure old scifi TV show - anything that’s got at least one person interested in scanning / converting / compressing the material and seeding a share. And as long as there remains at least one person interested, the material continues on into the future.

Now, mind you, this is all academic - I’m not encouraging you to seek out and download this stuff, and I’m not saying that I’ve downloaded this stuff. That sort of thing could get you into trouble.

Of course, someday, it might not get you into trouble. And, in fact, someday all this might have become accepted tradition - an inherent human right even! Right now, it’s the norm for quite a number of people. What makes it amazing and inevitable to me is that the trend seems to be toward more and more of this, not less. And eventually, even the self-selecting nerd filters will fall away, everyone will play, and the content will stop skewing toward the techies.

Someone, somewhere, with some old recording or tome or whatever will get ambitious enough some weekend to digitize the thing and share it - and 10 years later, it’ll still be floating around because throughout that time at least one person at any given time felt it was important enough to keep going. Really, all it takes is one person - and odds are, there’ll always be at least one person interested who has the skill and inclination to relay into the future.

And, really, all of this is just yet another corollary of Mark Pilgrim’s “the only long-term effect of copy protection is to ensure that those who defeat it are immortalized.”

So, yeah, I’m starting to feel optimistic enough to think maybe I don’t need to hoard and collect the things that I feel are definitive of me. That maybe it’s okay to expect, down the road, to be able to search for and find that stuff again with ease and lighten up my own personal clutter. Not quite there yet, and I don’t trust it enough to shred my comics and CDs, but I think a turning point has passed.

Cilantro of the web

Trying out the OPML Editor again, pasting in an entry composed over at my OPML blog.

“When the tool spits out some bundle of shining Deployment-Ready Code Artifact, do you get something that can be mashed up, styled, scripted, indexed by search engines, read aloud by screen readers, read by humans, customized with greasemonkey, reformatted for mobile devices, machine-translated, excerpted, transcluded, edited live with tools like Firebug?” - Mike Shaver

“can’t cut and past text from adobe’s kuler.com - that is the flash suck. nice colours, but a different kind of poor internet app. text?” - James Governor

So… the web is View Source. But, it’s also cut-and-paste of what I see and post-launch mashability. What else do we lose with Flash, Silverlight, and JavaFX?

For what it’s worth, I’ve got an enormous amount of love for Flash, and think that it has its place right alongside images and textareas. And most times, when you’ve otherwise got some 3-ring circus of stuttering, lumbering DHTML and AJAX - a little dash of Flash is what you need. But, you wouldn’t make a meal of cilantro, and some people hate it altogether.

scribbling in ink

This is a recurring issue for me: Although I’ve yet to find anything I actually like overall, I keep thinking I need some tumblelog software that’s more inviting for quick quips and quotes. Sometimes, the affordances of the WordPress posting page make me think I should really write more than a few lines to fill up the space. So, I don’t post anything because I just kind of wander off and never reach the imagined threshold for posting.

This seems oddly related to when I first let myself start writing in a journal with ink instead of pencil - I couldn’t stand not being able to erase things and correct them and make them perfect. Nowadays, one of the first things I do to an Moleskine is ritually tear out the first page and scribble in pen on the next. Then, I can write on the rest of the pages. Hmm. I wonder how I can scribble on a blog?