Red Echo

September 22, 2015

Perhaps the reason I can’t sell myself on a specific minimal microkernel interface is that the system I want to build is not a microkernel at all. What I really want is no interface, no API, but an exokernel system where every program is written as though it were the only occupant of a single machine.

The interior space of a POSIX machine is so complex I’ve given up on the prospect of securing it, but hypervisors seem to have accomplished the job of secure isolation well enough to make the whole “cloud computing” business work. What if processes in this hypothetical environment were merely paravirtualized machines? Each executable would be a single-purpose “operating system” for a virtual machine.

A hypervisor takes the place of the traditional kernel, VirtIO devices stand in for the usual device-manipulation syscalls, and the shell becomes a HID multiplexer. Since each process sees itself as a separate machine, there is no longer any requirement for a shared mutable filesystem; instead of communicating by manipulating shared resources, processes must share resources by communicating.

From this perspective it is no longer important to know whether the system is running on bare metal or within some other host OS. Each process merely interacts with some array of devices to accomplish some defined task. An instance of this system built for a bare-metal environment would have to include drivers for actual devices so that they can be represented as virtio elements, but from the perspective of a program, inside its paravirtual machine, it simply doesn’t matter how many layers of emulation are stacked up above.

This offers a lovely progressive path toward implementation of the various components necessary for a useful operating system, since they can be implemented one by one as QEMU guests. In effect, it’s a redefinition of the API: instead of looking at the traditional POSIX style syscall interfaces as the OS API, we simply define the notional standard PC implied by virtio as the system interface, and anything capable of running on such machine becomes a valid element of the overall system.

In effect, this means that KVM becomes the kernel, and my project would be a shell program which can multiplex a set of interface devices among an array of VMs containing the actual programs I want to use.

August 18, 2015

Camping in the desert

Floodland 2015 is over.

I hear it was a success, which is great. People had a good time and it was an authentically old-school-Burning-Man-like experience. Sounds like people want to come back and do it again next year, and have ideas and enthusiasm for projects they’d like to try.

I spent nearly all of my time during the event working, stressing, or trying with limited success to recover from working and stressing, so I didn’t really get to participate, which was not so great.

We had unreasonably hot weather on Thursday, which delayed setup, and we had an unbelievably intense windstorm on Friday, which knocked everything down and kept everyone huddled up inside vehicles and the sturdier tents. I’ve been out to the site on five occasions now and this was by far the most challenging weather.

We got things put back together on Saturday and people apparently had a great time, though I had already wiped myself out and missed it all. Oh, well. We will do better next year.

July 12, 2015

I’m on my way to California for a week’s backpacking in Yosemite with my family. It is the 25th anniversary of the “disaster hike” notorious in family lore, so we’re going to revisit the trail and see if we can do it a little more successfully this time. I will therefore be completely unable to communicate with anyone not in the immediate backpacking group until some time late Friday.

June 23, 2015

Musing on the development of the web

I learned HTML some twenty years ago and had a good few years of fun with the web, but recoiled from Javascript in horror and CSS in frustration. I eventually gave up on the server side as well, for political reasons: the strength of the Internet was in its gift of decentralized communication, but the web is all about big central servers controlled by singular institutions. I came to feel that investing time in such projects was actually counterproductive, in terms of helping to create the kind of world I want to live in.

That was a long time ago now, over a decade at least, and I am periodically shocked by glimpses into a world that has continued developing broadly and quickly, and which no longer much resembles any of the stuff I used to work with. I suppose the old mainframe hackers must have felt like this, as they watched the microcomputers take over.

The first of today’s jolts was a thread on Hacker News about a new standard for virtualization containers. I understand what virtual machines are and some of the reasons why people use them, and I know a fair bit about the low-level mechanics that make them work, but it’s clear that web people have taken the whole thing far beyond all that because I just can’t wrap my head around containers. I am ignorant of the problem they are designed to solve, and so I can’t really grasp – from the descriptions – what it is they are intended to do, or why that would be useful.

The second was a presentation about a piece of security analysis software, which started with a series of extremely startling claims about the product’s capabilities. I was running ahead with what I know about debuggers and low-level machine operations trying to figure out how they had accomplished these things… but of course the reason they can detect these things is that they’re not analyzing what I would call “applications” at all, but rather web services, and web services written in Java or .NET at that. And suddenly the whole thing seemed trivial, because of course you can analyze anything you want when you can play god with the virtual machine! Which is not to diminish the engineering work they did to make it happen, just to reduce it from the domain of magic. It seemed clear, at that moment, that I must be thinking about software from a sufficiently different perspective to their intended audience that they could reasonably expect people to understand the implied limits on their description as they apply to web programming.

I’m not really unhappy about this state of affairs, since I’m still not interested in working on web software, and I’m still not having trouble finding work in the field of what I still, with increasing quaintness, think of as “normal software development”. But it is clear that the world around me is changing, and I’m not seeing anything like a return to the kind of robust, resilient, democratic distributed architectures I want for the future of the Internet. It makes me wonder how long I can keep on holding out, and how long it will take me to catch up if the day comes that I have to hold my nose and jump in.

June 15, 2015

Whistler/Blackcomb is going to try to preserve the Horstman Glacier by feeding it with artificial snow.

Yeehaw, climate change.

In other news, the flotilla of “kayaktivists” has been doing a pretty good job at keeping the Polar Pioneer bottled up in the Puget Sound. The GPS track shows a steady cruise northward but it’s been going in circles off Bainbridge for a few hours now.

May 15, 2015

The Infinite Pixel Screen

A short, clear, and approachable adventure into notions of infinity, using high-resolution monitors as the introductory analogy.

May 9, 2015

We should organize an event called Naked Man where everyone runs around with their clothes on fire.

May 8, 2015

“SJWs” are imaginary but prejudiced jerks show up everywhere

I’ve been watching the spread of this “social justice warrior” meme with some bemusement, because it is clearly just another fantasy bogeyman for racist and/or sexist bigots – what kind of troglodyte thinks social justice is a bad thing, and how deeply enmeshed in entitlement fantasyland do you have to be in order to say so in public without embarrassment? – but the term “SJW” turns out to be very useful despite its lack of real-world referent, since it offers the “gamergate” assholes and their ilk a clear warning signal they seem happy to tattoo on their own foreheads. Nobody admits to being a racist or a sexist, but these folks don’t seem to have realized yet that ranting on about “SJWs” sends the same signal loud and clear.

May 2, 2015

Quadratic voting

This sounds a lot like an idea I was toying with for the governance structure of an LLC which would manage a piece of land serving as a community gathering space. I was using a log function rather than a quadratic, but I didn’t go to this level of rigor, either. Neat to see someone actually work out a proof.

Quadratic voting is a procedure that a group of people can use to jointly choose a collective good for themselves. Each person can buy votes for or against a proposal by paying into a fund the square of the number of votes that he or she buys. The money is then returned to voters on a per capita basis. Weyl and Lalley prove that the collective decision rapidly approximates efficiency as the number of voters increases.

April 26, 2015

Light art hacking

It’s a fine grey Seattle spring afternoon and I’m sprawled out on my bed with a laptop making an array of LEDs jump through some specific hoops. The math is pouring out of my head, stuff from the previous iteration of the previous bloom lights project mixing up with old familiar tools I’ve been using since I worked on Starfish. I don’t exactly know what to call this, but it feels like my most comfortable artistic medium, and it’s really nice to be back.

April 6, 2015

Remodelling my house

I don’t know how it is that I have so far neglected to mention the single largest project I am likely to undertake in this calendar year, but it’s finally drawing to a close, so I feel like giving you all an update.

In a nutshell: I tore my bedroom down to the plaster and subflooring, ripped out the drop ceiling, and rebuilt it all again.

Somebody, at some point, for reasons I can only guess at, decided that the bedrooms in my house were just too spacious, and would look a lot better if their ceilings were sixteen inches lower. Various other people, at other times, have applied their opinions about the desirability of thick texturing on the plaster. The most recent owner clearly believed that cheap beige carpet was a good thing. And nobody, in the entire history of this house’s existence, appears to have taken issue with the manifest insufficiency of this bedroom’s single, solitary power outlet.

I had one month – February – between the departure of one tenant and the arrival of another, in which to move all my possessions out, tear my bedroom apart, and rebuild it in a manner more in keeping with my aesthetic priorities. I just barely accomplished this, but of course the last 10% of any project takes the other 90% of the time and so I have been living in a mostly-but-not-quite finished bedroom all month.

The ceiling is back up to its original height, and after scraping off years of texture and wallpaper, I smoothed the walls back up with a fresh coat of finishing plaster. The carpet is gone, with a new layer of sound-dampening felt under a sturdy sheet of engineered hardwood in its place. I’ve installed new door, closet, and window trim, and now the baseboards as well. Yesterday I finished painting all this new trim, and it’s starting to look almost respectable in here.

I’ve slimmed down my furniture as well, passing a couple of shelving units along to new owners after making better use of the vertical space in my closet – so there’s more open space horizontally and not just vertically.

There’s still a fair bit of work left but I am definitely easing down the home stretch. The ceiling needs crown moulding, I have a ceiling fan/light unit to install in place of the bare bulb currently illuminating the room, and my wall-mounted nightstands need to be reinstalled after I’ve finished painting the wall they live on. I should probably come up with a new closet door, too.

It’s been a ton of work, but I’m really happy with the way it’s coming together. It’s my bedroom, in my house; I’ve never had so much freedom to customize a space before, and it’s been great to take things as far as I wanted to make them go.

March 10, 2015

Self-driving cars: not for me, please

My feelings about the so-far-still-pretty-much-speculative self-driving car future range from “meh” to “please stop already”, which is odd for such a blatantly sexy application of robotics. Aside from the obvious privacy/tracking problems, which are increasingly moot given the proliferation of license plate scanners and toll pass sensors, I think the real problem is that it just sounds boring. If I’m driving, at least I have something to do with my brain. Handing the controls over to a robot leaves nothing but the tedium of sitting around waiting to arrive.

I can imagine self-driving cars as a replacement for human drivers in a service like Lyft or Uber much more easily than I can imagine individuals purchasing their own. I use Lyft a fair amount, actually – though I usually chat with the driver, and getting acquainted with somebody new is a nice way to circumvent boredom. Riding alone in a silent, empty car with nothing to do sounds… much less pleasant. It’d still be nicer than taking the bus, which is neither silent nor empty nor comfortable nor rapid, and offers little in the way of stimulation for a hungry brain.

At least there will always be motorcycles.

February 26, 2015

Renaming lindi

I wrote a little code editor some twenty-odd years ago which I named “lindi”, a partial acronym for some series of words I can no longer recall. I’ve long since lost track of the code as well as the meaning, but decided to reuse the name for my new retro-style terminal-mode IDE partly from nostalgia and partly because names are hard.

After a few months of steady use, however, I’ve noticed an unfortunate consequence of this particular name: it doesn’t autocomplete well, because there are too many other programs already named “lin*”. “lind”-tab is no shorter than “lindi”, so I end up typing the program’s full name every time I want to use it – which I do many times a day.

Being a fundamentally lazy person, I have therefore decided to rename my editor. I listed out all the unused two-letter prefixes on my system, then searched for various words beginning with those letters on github and the web to make sure they weren’t already used by other projects, and the winner is “ozette”, after the lake out on the Olympic Peninsula.

And now I’ve written a long blog post about an inconsequential design decision affecting a piece of software LITERALLY ZERO PEOPLE IN THE WORLD other than me have ever used! But I am amusing myself, and this is my blog, so I guess you know what you’re getting if you read it.

February 2, 2015

Silly architecture rant: the library

After doing my best to ignore the downtown Seattle library for the last decade, I am now stuck walking past it every work day. Everyone who has taken the time to figure out which side has the entrance tells me it is very nice once you go inside, but the building is so alienating that I just don’t want to. It looks like a group of extraterrestrial cephalopoids were busy erecting a high-tech prison when an earthquake knocked its foundations over, and they simply carried on stacking up the floors without bothering to fix the damage. The place is even more unwelcoming than the Darth Vader building, and that takes some doing.

January 30, 2015

PCBmodE is a PCB design tool built sort of like a programming language. Instead of laying out a board graphically, you write a JSON description, which PCBmodE then compiles into an SVG. You can preview and even edit the layout in Inkscape, then use PCBmodE again to generate Gerber/Excellon files you can send to the fab house.

This seems like it could be a clever end-run around the complexity and generally proprietary nature of EDA tools. Using Inkscape as a viewer/graphical editor instead of writing a whole new CAD app is a great idea.

January 28, 2015

Now that I’m back in Linux for daily development work, I’ve switched to Lindi as my full-time editor. It’s not perfect, but it’s good enough to get my work done, and it is just so satisfying to use an editor whose design is tailored precisely to my own taste that forgiving the occasional hiccup comes easily.

January 22, 2015

I’m near the end of my second week at Coverity, and I feel pretty happy about the way things have gone so far. I have yet to commit any new code, but I feel like I’m ramping up reasonably well and will begin making useful contributions soon. I have a nice dev environment set up, my coworkers are friendly and intelligent, and the office has a great view of Mount Rainier whenever weather allows. I think this is going to be good.

January 5, 2015

This is a bar made from half of an old M113 APC.

Some day, I will own a tank*.

*an APC would be sufficiently tank-like to satisfy this life goal

December 4, 2014

I am single once again

I just heard from my lawyer: fourteen months after Ava and I broke up, our divorce is finally over.

WOOT! Such a relief.

November 19, 2014

Lindi

A moment of inspiration hit just after I finished up with Mylio and had some time to act on it. I’ve had this idea brewing in the back of my head for three or four years now, and the whole thing came flying out in a nearly non-stop rush. I’m sure I’ll be tweaking it for months to come but it feels pretty good to have built a usable tool in just a couple of weeks.

I’ve posted the code on github:
Lindi, an editor shell for software development

I smashed a directory browser, a pico-inspired text editor, and a simple shell console together inside a terminal-mode window manager to create a kind of lightweight IDE where the current working directory plays the role of the project file.

The immediate problem was that I want to work on a project which has to be compiled on a Mac using Xcode, but I don’t want to be stuck at my desk all the time, and my laptop is a Thinkpad running Ubuntu. I considered VNC, but it’s hilariously insecure, tunneling it over SSL looks like a nuisance, and anyway Xcode feels cramped on the Thinkpad’s 1024×768 screen. In a classic fit of programmer laziness I decided that spending a couple of weeks building a new tool was the easiest solution.

Result: I can ssh into my Mac, run Lindi, and drive everything from a single xterm. Yay!

Lindi is unapologetically idiosyncratic and not at all configurable. Tabs are 4 columns wide, text files are 80, and control-C means “copy”, not “cancel”. The world is awash in editors, and everyone has their favorite; I just thought it’d be nice to build my own, tailored to the way I like to work.

It’s up on github now, though, and I’ll probably post a link on reddit or hackernews once I’ve knocked some more of the rough edges off; I’m curious whether anyone else happens to share my particular taste.

I’d call it maybe 75% baked, but it has enough that I’ve been using it to edit its own code. Long term plans: make the directory browser git/svn aware, beef up the console until it can run lldb/gdb, add syntax highlighting, use syntax highlighting to do project-wide identifier lookup.

November 3, 2014

Introducing Mylio

The software product I spent the last two years on has just shipped:

Mylio is Here.
The next generation photo management system is now available.
All of your photos. All of your devices. Always protected.

The press release has this fun little remark:

“We recognized a growing need for photographers and consumers to protect, access and share all their photos everywhere they go and on every device they own,” explains David Vaskevitch, CEO of MyLO, creators of Mylio. “We formed a unique team of world-class software developers, designers and photographers to build a solution that satisfies this need and allows people to enjoy their photos again.”

People seem to like it.

November 2, 2014

idea: connect a Beaglebone Black single-board Linux computer to a SM5100B GSM radio module mounted on an evaluation board.

This device runs a VPN relay (using your home internet connection as uplink) and a server which relays GSM audio and SMS messages.

Next, delete the SMS and voice-call apps on your phone, replacing them with some yet-to-be-determined app designed to work through the relay server above.

Configure your phone’s internet connection to use a VPN, routing all data traffic – which now includes all voice and SMS traffic – through the relay box at home.

This allows you to run a firewall on the relay box which can whitelist or blacklist anything you want. Worried that your apps are phoning home behind your back? Block ’em. You could have different firewall rule sets, like “allow nothing”, “allow email only”, “allow email and these web sites”, “allow everything but block known malware sites”, etc.

Further idea: take the SIM out of your phone, put it in the relay box, and cancel your data plan. Buy a prepaid SIM with cash and put it in your phone. Now people who know your phone number and have the ability to track phones can see that your phone is sitting at your house, 24/7, but unless they know about your prepaid SIM, they can’t track your physical location. Bonus: travelling internationally? All your web sites continue to think you’re logging in from home, and you don’t have to worry about geo-restrictions.

October 28, 2014

I bought a used Thinkpad to replace my long-lived but now-dead netbook, and while it’s a much better machine in relative terms, it’s still kind of a weenie compared to the Mac on my desk. It’ll be a fine coding/email/browsing device, but I have this fantasy of remoting in to the Mac, using the Thinkpad as a dumb terminal, so I can also drive Xcode from afar. I’ve set my desk up to be as comfortable a coding station as I can manage, but there are many other places I’d like to be as well…

My question for the interwebs: is it possible to set up a VNC server on a Mac such that there is no way to log in with a password, that authentication is only possible through some pre-set key pair? I know that one can do this sort of thing with Git but I am hazy on the details. I imagine that I would generate a file, copy it onto the laptop via USB stick, set some configuration somewhere, open the relevant port on my home router, and then control my desktop machine without worrying that it is protected by something so flimsy as a password.

October 10, 2014

Now that its metacarpal bone contains a couple of screws, my thumb appears to have developed the ability to detect changes in barometric pressure. Cool! I am a human weather station!

Okay, to be honest it’s annoying and it kind of hurts, but if it’s the worst I have to deal with as a long-term consequence of last year’s motorcycle crash then I think I am OK with that.

September 29, 2014

Thorough and clever analysis of Python interop resulting in an API for asychronous I/O managed across multiple cores.

September 28, 2014

It’s funny to watch my creative outlets shift back and forth over time, since the activities themselves are about as conscious and intentional as they could be, and yet the overall course of the river seems to meander through loops I can only see in retrospect.

I did a ton of sewing last spring, but I haven’t touched a machine in months. The middle of the summer was all about organizing Floodland, which went off really well, but exhausted me. Since then I’ve been cruising through a more than usually quiet and solitary mode, spending most of my free time deep in the guts of some really enjoyable compiler hacking.

Now the weather is turning, I seem to have a resurging interest in connecting with my friends, and I’m thinking about starting up weekly Rock Star Thursday Dinners. Perhaps this also has something to do with the changing of the seasons and the approaching dark months, but I’m feeling a spark of interest in some lighting projects that have been neglected during this bright summer.

September 27, 2014

Delightful. By Mark Morford:
Burning Man is so very wrong

Here’s what you need to know about Burning Man in this fine year of our unchecked chaos, 2014: Nothing.

I mean, just forget everything, all right? Whatever you’re heard, read, seen, rumored, teased, whispered, Facebooked, Instagrammed, linked to, thought about or had muttered in your general direction in an Uber fever dream anytime in the past month. Year. Decade.

Because it’s almost certainly wrong. Delightfully, hatefully, stupidly, shamelessly, deliberately, resentfully, innocently or even inadvertently, it doesn’t matter – there’s almost nothing the slightest bit accurate in what the modern media has said recently about the famed art/camping/dance/survival festival – now in its 28th year – happening right now out in the Nevada desert.

September 8, 2014

Charles Stross’ essay about his support for Scottish independence illustrates a view of geopolitics which seems entirely sensible, and which accords with my feelings about Cascadian independence.

My feeling is that we’d be better served by a group of much smaller nations working in a loose confederation or treaty structure. Their job should be to handle local issues (yes, this is localism) while compartmentalizing failure modes: the failure modes of a gigantic imperial power are almost always far worse than those of a smaller nation (compare the disintegration of the Soviet Union with that of Czecheslovakia). Rather than large monolithic states run by people at the top who are so remote from their constituents that they set policy to please lobbyists rather than their electors, I’d prefer to see treaty organizations like NATO and the EU emerging at consensus after discussions among numerous smaller stakeholder entities, where representatives are actually accountable to their electors. (Call me a utopian, if you will.)

September 6, 2014

Cascadia from space.

August 5, 2014

We did it and it was awesome

Here is a note I sent to the Floodland mailing list, thanking everyone who helped make it happen. No sense rewriting it when it sums my feelings up pretty clearly:

I have yet to start unpacking my car, but I’ve had a shower, a good night’s sleep in my own bed, and just now I’ve had a chance to upload some pictures:

Floodland 2014 on Flickr

I don’t know how to describe the experience I had this weekend without gushing. Not only did you all pick up the Floodland vision and run with it, but you took it off in a bunch of other directions I’d never expected, and you did it all with a smooth, comfortable competence that left me feeling like I shouldn’t have spent quite so much energy worrying about the details.

But I wasn’t just watching the kind of well-oiled machine that a close-knit crew can become: while many of us have worked on each other’s projects before, one of the big reasons for creating a new event is to welcome new people in, giving them a platform to explore their own ideas and develop their own skills along with us old-timers. I was happy to see good friends at Floodland but I was also glad that I got to make some new friends too.

We had beautiful weather, and even the little bursts of rain were welcome; we had the most consistently gorgeous sunsets I can ever remember seeing; we had lovely spaces to relax and to dance, we had art and costumes and performances and fire. It was all there. Everywhere you could see the potential hanging in the air, and everyone I talked to expressed enthusiasm about coming back and doing it again next year.

If all we accomplished was a proof-of-concept camping trip, that’d have still been success: but we went far beyond that and actually threw ourselves a full-on burn event. Thank you for all the energy you put into this, the good attitudes and adaptable creativity you brought to the various obstacles we encountered. Thank you for trusting me when I came to you with this crazy plan in the first place, and thank you for the honest, thoughtful, enthusiastic feedback so many of you shared as we all started to imagine what next year’s festival can be.

July 29, 2014

I have a new phone. It is Divide’s old Nexus S. (Thanks!) Alas, since I’m a paranoid freak who doesn’t believe in giving all my data to Google, I lost all my numbers. Entire address book: gone.

Have we ever communicated by phone? Does your phone contain my contact information? Text me, please! Send me your name. Thanks.

« Previous PageNext Page »