Beautiful Plumage
After quite a hiatus, again, I’ve produced a new mixtape: Beautiful Plumage. This one compiles new rock music from the past five years, in an attempt to disprove the eternal “rock is dead” meme.
Recent content on Thought Palace
After quite a hiatus, again, I’ve produced a new mixtape: Beautiful Plumage. This one compiles new rock music from the past five years, in an attempt to disprove the eternal “rock is dead” meme.
I’m working on a somewhat intricate C++ project (a persistent storage manager) that internally uses a lot of different integral types: page numbers, page offsets, page-cache indexes, bucket indexes, hash codes, transaction sequence numbers… It’s very easy to get these mixed up, especially by passing parameters in the wrong order when a function takes more than one of these…
I’ve completed the necessary surgery to attach the Netlify CMS to my blog, and I’m writing this post in the web-based admin UI. Exciting! Now maybe I’ll actually post here…
At dawn came the pig truck, driving itself in from over the hills. By the time it reached the jail, the prisoners were lined up, resigned, watched by the armed guards in their towers. Cleaned and shaved, naked and divested of names, they were human no longer. Dust rose and fell as the long blank truck pulled up, the back springing open by itself, the ramp dropping to the ground.
She was a worker, that’s all. A courier. Pick it up here, carry it a long way, drop it off there. It was a dull job, but it meant she didn’t have to think much, which suited her. And everyone she knew worked the same job, so it was easy to share in-jokes and gossip and complain about the conditions. Her people had no vehicles, no roads, no pack animals. But they knew all the trails throughout the…
Journaling is a style of blogging that’s gone out of style lately, for some reason, but it’s dear to my heart, and to many of my friends'. Journaling is exemplified by LiveJournal, which has a long proud history as the first social network and possibly the first turnkey blogging system (begun in 1999, it slightly predates Blogger.) LiveJournal still exists, but it’s a shadow of…
I’m afraid of a lot of things. Or, I’m often afraid of things. I have some issues with anxiety. The anxieties aren’t constantly in my way; they’re more like electric fences that keep me in line. I can go through my everyday life without thinking of them, but when I venture outside what I’m comfortable with I start to get crackles of sparks down my spine and in the pit…
They were easy enough to mistake for sheep at a distance — white, fluffy, contentedly grazing — especially in the pre-storm dimness. It was when he got closer to them and saw their body shapes and the way they were eating that Laurence began to regret coming to the farm. As he watched, the nearest animal sheared off a half-dozen dandelions with its mandibles, squirted some sort of digestive ichor…
Well, it’s the same blog, I’ve just replaced Jekyll with Hugo. If I’ve succeeded, you won’t be able to tell anything’s changed. Every couple of years I go through this ritual of porting to a different blogging engine. This blog started out as handwritten HTML, then it went through Movable Type, Drupal, WordPress, Jekyll, and now Hugo. Each iteration is usually an…
Introverted, intuitive, thinking, perceiving. I live to make things: most often software, sometimes designs or mix-CDs or stories or photos. (I wish I could make music.) Father. Single dad, raising (at the moment) two teenagers. Worker, dreamer. I’m driven by visions of things that could be. I built things at Apple (AppleScript, Stickies, iChat…) and at Google (Chrome) and I’m now at…
I’m at a computer lab [probably the one from college] and have written an entire email client app in a day. I’m excitedly showing it off to everyone. It’s kind of glitchy but I can pull up my real emails, including spam. The app is also, simultaneously, made out of a 2-liter soda bottle. It starts out crushed, and expands and fills with water as it launches. Unfortunately there…
Modeling a social networking system like LiveJournal or Facebook in a JSON-document-oriented database like Couchbase [ Lite ] or CouchDB isn’t hard. Here’s a basic schema that I’ve been playing with for a while.
Here’s my most recent music mix, “Forest Wire” , all music from 2013. This mix is dedicated to my brother-in-law who builds guitars but nonetheless appreciates electronic music. It starts and ends ambient, but builds up into dub and K-pop and jungle and other styles.
Couchbase Lite (Née TouchDB, née Couchbase Mobile) Mobile syncable NoSQL database for iOS. My work project in one way or another since I started at Couchbase in mid-2011. I’m still having fun working on it. Couchbase Sync Gateway The companion piece – the glue that lets Couchbase Lite sync with Couchbase Server. It’s been challenging and educational and boundary-stretching, and…
I’m looking for some more beta testers for a font preview/management utility I’m working on. I’ve been frustrated by not having a good visual way to browse my font library, so I wrote my own. It’s called Jackdaw. If you have a sizable font collection, choose (or just ogle) fonts on a regular basis, are willing and able to send bug reports/crash logs/suggestions, and are running OS X 10.8 or…
This blog kind of ground to a halt in 2011. I think the final straw was having my WordPress hacked and many of the posts defaced with spam links. After that I swore a mighty oath not to have any further trafficking with the wickedness of PHP. But I still miss blogging (proper blogging not tumblr). Sometimes I have things to say! And apparently back in the day a few people even used to read things…
[I just posted this to the Couchbase Mobile community mailing list.] TouchDB is a project I’ve been feverishly working on for a few weeks. It’s an investigation into the feasibility of a CouchDB-compatible database rewritten from the ground up for mobile apps. The comparison I like to make is that “if CouchDB is MySQL, then TouchDB is SQLite”. In fact, it uses SQLite as its underlying storage…
I gave another talk about Couchbase/CouchDB at the Keeping It Realtime conference this week in Portland. This one is titled “_ch_ch_changes: CouchDB/Couchbase Notifications And Replications”, and the slides are now up on slideshare. I had a great time. The conference itself was pretty exciting, even if some of the content was over my head (I’m not primarily a web developer, server-side isn’t how I…
My new employer is doing well: MOUNTAIN VIEW, Calif. – August 10, 2011 – Couchbase, the leading NoSQL database company, today announced it has secured $14 million in a Series C round of financing led by venture capital firm Ignition Partners with participation from the company’s existing investors Accel Partners, Mayfield Fund, and North Bridge Venture Partners. The company has also reserved an…
August in Los Angeles was bone-dry and dusty, but he left it behind in the parking lot as he made his way through the series of three doors, heavy and white, and into the frozen refuge of the ice bar. He was known, there, and the hostess greeted him with a sealskin robe, slipped over his shoulders before he had time to start shivering. The tip of her elegant nose felt icy against his own. There…
I’ve just released a new open-source project, a small one — Fudge-Cpp, a fast C++ library for reading and writing Fudge messages. I hadn’t heard of Fudge either, till a few weeks ago, but it’s a type of thing that’s always interested me: a generic structured binary data format. A quick elevator pitch would be “it’s sorta like JSON, except more compact and faster to parse”. (It’s also sorta like…
No again, I will not show you what’s under the bandage on my arm. I won’t even look myself, anymore; it’s gotten too disturbing. I mean, the wound hasn’t changed, but every time I look at it it bothers me more, takes me longer to stop shivering. I keep wanting to touch it. Listen: Did you ever play Shock City? I’m not trying to change the subject; hear me out. I played the hell out of that game…
I’ve never figured out whether I prefer Python or Ruby, so I’ve written things in both languages. Sometimes I start in one, then change my mind and decide I’d rather use the other. Unfortunately, changing over is painful, even though both have fairly similar syntax. For instance, converting to Ruby means inserting zillions of “end” statements! Having a need to do this recently, I lazily looked…
Brent “NetNewsWire” Simmons raises the idea of an open protocol for syncing RSS/Atom subscriptions, that is, a way of keeping multiple local newsreader apps (like on a Mac and an iPhone) in sync with each other, so that they share the same set of subscribed feeds, and remember which articles have already been read. You can think of it as “IMAP for RSS”. NetNewsWire already does this using Google…
Every year the Albums Of The Year lists seem more and more removed from my experience. (Most of the time I haven’t heard a single album on the list.) Worse, we’re now getting into the Of The Decade lists, making me realize how long this has been going on*. If you ask me the top albums of the ’80s or ’90s, I don’t have too much trouble rattling off a bunch of names.
Call the roller of big dice, The long-haired one, and bid him whip On kitchen tables consecutive 18’s. Let the fighters dawdle in such armor As they are used to wear, and let the mages swap Delicious spells from last month’s Dragon. Let a fumble be finale of its caster: The only emperor is the dungeon master. Take from the manual of monsters Painted with three crude beasts, that sheet
Farhad Manjoo writing in Slate about Google Wave: The trouble is, everything you type into Wave is transmitted live, in real time — every keystroke was getting sent to Zach just as I hit it. This made me too self-conscious to get my thoughts across. … Maybe I should just delete what I’d written and say, “Twitter works because it’s simple.” But I couldn’t do that, because Zach was watching me.
So far, this blog’s main claim to fame has been as the #2-ranked Google hit for [apricot jam recipe]. But that’s no longer enough to sustain my extravagant lifestyle, so I’m following the next most obvious business opportunity: Elephant jokes! These were huge (the jokes) when I was a kid, but they seem to have been largely forgotten, which is a shame. I tested them out on my kids today, and they…
I know, three weeks ago I said I was building me a B-Tree. I did build it, even the parts I listed under “What’s next?” in that post, and it works. But it became apparent there was a more urgent need for a hash table, for work-related reasons, so I switched gears to build one of those on the same principles. The biggest principle is Append-Only Storage, as described in the prior post.
Last year I wrote a series of blog posts about a peer-to-peer system called Cloudy that I was developing. I was going up the stack, from messaging to identity, but didn’t finish documenting all the layers I’d built. I mostly stopped working on Cloudy after I went back to gainful employment, but I keep thinking about this stuff. “Lakitu”? I’ve since heard about another unrelated project nicknamed…
The other day I took it into my head to implement a B+tree. Why? Because they sound neat, and I’ve done hardly any serious programming with trees in my career. (Someone, I think Buzz Andersen, once noted that there are two kinds of programmers: those who do think in terms of trees, and those who do everything with hash tables. I’m in the latter camp.) And also because I’m a big fan of CouchDB, and…
I got an iPhone 3GS yesterday (yes, it totally rules.) While setting up online account access for billing, AT&T had me enter a password. There was one of those colored password-strength meters next to the text field, and it said the password I entered was “weak”. Alright, I changed it to add some commas and dashes. Then I hit Submit, and was told that passwords can only contain letters and digits.
New happy fun summer mix!
Introduction: I wrote this as part of a reply on Apple’s bonjour-dev mailing list, then decided it might be worth publishing more visibly. I’ve found that Cocoa’s Distributed Objects technology is immediately attractive to many developers, while those who’ve used it end up finding that it’s much more complex than it looks. But I haven’t seen much written about the caveats of using it. I am not…
I’ve been working at Google since last August. The Big G’s hiring process is rather weird — when you interview, it’s not for any specific team. It’s only after you get an offer that you decide which team to join, of the ones with open positions. I decided on Google Sites, which I knew and liked from its days as JotSpot, a hosted wiki with some powerful features. It ended up not being the right…
I’ve always liked the Keychain technology in Mac OS X. Sure, the API is notoriously confusing and awkward, but the end-user benefits are compelling: Secure, encrypted storage for all passwords and keys. Items can be shared between applications — so in principle you don’t have to enter a given password more than once, since other apps will find the existing item in the keychain. Items have access…
MobileOrchard just published a tutorial article by Peter Bakhyryev, describing a sample iPhone app called “Chatty” that acts as a simple peer-to-peer chat-room. “In this tutorial, we are going to explore a simple chat application for the iPhone. It allows you to host your own chat room and advertise it on your local Wi-Fi network (in which case your app acts as a chat “server”) or find and join…
“Some people have suggested that mental illness is a kind of adaptation to the sort of circumstances that will arise in the future. As we move towards a more and more psychotic landscape, the psychotic traits are signs of a kind of Darwinian adaptation.”—1998 Abstract. Numerous studies have been conducted upon patients in terminal paresis (GPI), placing the author J.G. Ballard in a series of…
The feelings created by music are so strong, for me, but so ineffable. The problem of perception is usually described using color — how can we know if the visual sensation I call “red” is anything like the one you call “red”? — but only gets worse as you ascend to higher order perceptions, where even names become harder to apply. What do you call the feeling incited by “Guernica”, and even if you…
So, Web 2.0’s heyday is over, and somewhere out there, Web 3.0 is slouching toward us waiting to be born. What will it be? There’s really no such single thing as “Web x”, of course. And all predictions are really just wishes. That being said, my wish is that Web 3.0 will be about distributed systems. To oversimplify: Web 1.0 built up big brand-name websites with their own content — things written…
The Pessimistic Form The set of commands available in a toolbar (even via customization) is restricted to those that are either: (a) painfully obvious (New, Save, etc.), or (b) useless to you (Save As EBCDIC, Post To CompuServe, Bilinear Zeta-Regression, etc.) The Optimistic Form Combine this with the well-known principle that, while everyone uses only a subset of an application’s features,…
I really don’t know how long I’ve been lying on the couch, watching the men on the TV. I don’t remember things so well anymore, since the accident. I don’t remember the accident either, but my friends tell me it was pretty bad. I have healed about as well as I’m going to, and though I don’t get around well, I can still think. In small doses. The men on the TV gesticulate about some crisis or…
Matt Knox, a Ruby developer and repentant former coder for an adware company, explains how adware works. Really fascinating stuff, and quite scary from a security point of view. “At the same time, we also made a virtual process executable. I’ve never heard of anybody else doing this before. Windows has this thing called Create Remote Thread. Basically, the semantics of Create Remote Thread are:…
FYI, I ended up taking the position at Google. I started two weeks ago, and it’s been quite exciting, despite (or because of) the “drinking from a fire-hose” aspect of learning my way around the big G. I’m on the Google Sites team. I’ve been interested in wikis for years, and now I get to actually work on one. (Although Sites, née JotSpot, is not a typical wiki.) I could write a lot about my…
My Decktet is a thing of beauty. I even printed & assembled the box (an activity that took me back to my happy childhood days of making paper polyhedra models.) The only problem is that the cards still have a faint sickly-sweet stink of toluene and acetone (from the plastic coating) even after I left them spread out on the floor for a few days. It’s quite unpleasant, not like the nice smell of new…
Sometimes it’s nice to make physical objects. It’s usually messier and more time-consuming than doing it on the computer, but in the end you have something you can actually touch. Ever since I saw P. D. Magnus’s Decktet — a whimsical yet mysterious deck of cards for games or divination — I wanted one of my own. However, the Decktet is currently only available as a PDF, so any physical…
I’ve now implemented BLIP in Python. That officially makes it cross-platform! If we get a third implementation, can we call it an “industry standard”? There’s some detailed protocol documentation, too. Also, on Steven Frank’s recommendation, I set up the Redmine project tracker on my website. It’s pretty slick! Kind of “Trac On Rails”.
I’ve created a BLIP-Protocol mailing list on Google Groups: Please join up if you’re interested in learning, using, re-implementing, improving, extending…
I’ve released the source code to my “BLIP” protocol implementation, as part of a project I call “MYNetwork”, for “Mooseyard Networking Libraries”. API documentation is available online, and you can check out or browse the source code from its Mercurial repository. For the really curious, there’s even a sketchy overview of the protocol’s wire format. It’s working quite well for me in Cloudy; it’s…
I’ve got my new BLIP protocol all implemented now. After my previous post on Monday: On Tuesday I implemented message metadata. On Wednesday I got SSL working (configuring the “server” side to verify the “client’s” cert was difficult.) On Thursday I put Cloudy up on blocks, pried out Vortex and my Obj-C wrapper library, and replaced them with BLIP. And on Friday (today) I debugged. Cloudy’s back…