Back at my mom’s place in Sacramento after nine days of backpacking.
Longest, hardest trail I’ve ever walked.
More later.
Back at my mom’s place in Sacramento after nine days of backpacking.
Longest, hardest trail I’ve ever walked.
More later.
Back from four days in Yosemite: that was fun! It was a big family-reunion trip, nineteen people total. We started at the Mono Meadow trailhead, off the Glacier Point road, and hiked down to Illilouette Creek for the first night. Scattered along the sand bar, our tents didn’t so much look like a single encampment as a whole miniature campground.
The water is unusually high this season, especially for July, as California had the same late-blooming summer we did in the Northwest. The creek was roaring away with surprising force, and the normal ford was completely unusable. We scouted up and down a bit and found no good options; there’s a great log bridge a couple hundred feet downstream, but it sits right above a very turbulent rapid and the spray from the high water made it slick and dangerous.
Solution? Engineering! Among nineteen people we had a good supply of burly dudes with upper body strength, and so we set about constructing a log bridge. We found a spot where the current split around a little island, located a couple of downed trees small enough to move, and started dragging the rocks and logs around. After a couple hours of hard work in the sun, we had built a rock pier on either side, and used ropes and levers to stretch two small logs across.
This was the point where a park ranger ambled up and casually inquired about our project, and just as casually let us know that there was, in fact, a decent fording spot upstream, just around the bend where we’d called off our survey expedition, and mentioned how he’d just guided three fairly short and not particularly burly women across it with no problems…
So we abandoned our mostly-finished bridge, trooped upstream, took off our boots and waded across. It was quite a production, but it worked and it was definitely less labor-intensive than the bridge.
Right, then: we trooped along through some open country full of blackened tree stumps, with little creeks and springs and wildflowers along the way. Above us, the domes of Mount Starr King; across the way, views of Glacier Point and Half Dome. We intersected the Panorama Trail, then tramped down the Nevada Falls trail, across the bridge, and on up to Little Yosemite Valley.
The campground there is so well developed it hardly feels like backcountry at all. It has designated camp sites, fire rings, bear lockers, and even toilets; only the fact that there are no cars distinguishes it from any of the valley campgrounds.
The next day was our Half Dome climb. Mom convinced us all to pack up our daypacks the night before, so we actually got our caravan out on the trail by 9 AM. It’s not a long hike – only three and a half miles – but it’s all elevation, so it’s not particularly quick going.
What’s to say about Half Dome? It’s an unusual mountain climb, with very clearly defined stages as the geology changes. First you walk up through the forest for a couple of miles, past the trail junction. Then you wind your way up the side of the ridge to the tree line. Then you walk along the ridge, with bare scrubby trees and increasingly dramatic vistas, to the lunch spot at the base of the sub-dome. Then it’s up a rugged, sun-exposed granite switchback stairstep section to the top of the sub-dome. A little bit down to the saddle, and the views are wider and the exposure more terrifying – then you climb the cables.
Our trip up the cables was more like a traffic jam than a normal climb; we were stuck with some genuine slowpokes ahead of us, who not only spent minutes at a time resting between each set of poles, but had themselves clipped in to both cables so that it was impossible to pass them without climbing outside the cable route. It was an exercise in patience: hanging on to the side of a mountain, just standing there, waiting for someone up above who seemed to be taking their time for no particular reason, while dozens of people just waited.
Oh, well. We all made it to the top, and we spent an hour wandering around looking at things and taking lots of group pictures. The trip down was also somewhat slow but not as bad as the trip up, and then it was just a long steady downhill hike back to camp, where we all grabbed our swim gear and went straight for the river.
We spent that evening celebrating Joel’s birthday around the campfire. There were miniature blueberry cheesecakes for all, a rhyming blues jam with rhythmic accompaniment (bear cans make great hand drums), and general foolery and merriment until late.
The trek down from Little Yosemite Valley to (big) Yosemite Valley is always an interesting social experience. You follow the line of the Merced as it drops first over Nevada Fall and then Vernal Fall; the latter is one of the most-visited attractions in the park, so the trail gets increasingly crowded the further you go. By the time you’ve descended the Mist Trail – a veritable shower this year, clouds of spray drenching us as we walked – you’ve left the back country and entered the land of poorly-shod, inexperienced day-hikers who stare at your towering pack like you’ve just come back from the Moon.
Our first destination was of course the pizza deck at Curry Village where we tore through seven large pizzas and a dozen or two glasses of beer, then headed for the showers and demolished a stack of clean towels. Oh yeah.
It’s a beautiful place. I love Yosemite. Things have changed, though; the Valley was crowded and full of cars. We spent literally hours sitting in stop-and-go traffic jams just entering and leaving, and ended up missing the Glacier Point bus due to the unexpected congestion. I missed the sense of calm welcome I’ve always had in Yosemite before. It’s been thirtyish years now, and things have changed; I’m not sure I want to go back to the Valley now.
Process isolation rediscovered as a programming pattern: an argument for the idea that fork/exit style process management is a useful model for software development within processes and not just between them.
Just learned about a place called Mars Restaurant, in the U-district. I don’t care what the place is like – I have to go there and check it out.
Here’s an article demonstrating how to build your own swamp cooler, capable of dropping air temperature by 20-30 degrees, out of ordinary hardware store parts.
I spent the morning building a big work table for ALTSpace. The top is from the 4×8 workbench Adam and I built at the old Rocket Factory; we broke down the legs and wall mounting when we moved out, and the tabletop has been leaning up against a wall in ALTSpace for the last four months. I woke up early this morning, and felt inspired to build… so I went to Lowe’s and bought lumber.
Construction took about three hours. I laminated pairs of 2x4s together with screws and glue for the legs, then bolted on locking swivel casters. I mounted the legs into the corners of the old tabletop, which was already framed with 2x4s, using strong-tie gussets. Some more framing underneath added cross bracing and a platform for a future storage shelf, and now it’s done.
We have plenty of tables at seated height, so this one is a standing-height work surface: 39″. Once we get it cleaned up and polish the edges some it should make an excellent fabric layout table, and we can push it up against a wall to serve as a bar during artwalk or other parties.
Ava and I are leaving for our backpacking trip soon, so my to-do list is getting full quickly. I have some last oddments to pick up at REI, a rental car to book (since our car is not back from its transmission repairs yet, alas), and a little bit of packing to do.
I picked up a cowhide yesterday; my new motorcycle came with a spare Corbin seat, but its stitching is coming apart. I opened it up thinking I’d restitch the seams, only to discover that someone had tried that already. The vinyl fabric doesn’t look like it would hold up to a second restitching, so I decided to rip the whole thing apart and use it as a pattern for a new cover made of leather.
This afternoon I’m going to do a quick little starter project to familiarize myself with the material: I have a really nice utility knife which would be good to bring on the backpacking trip, but it’s a fixed blade and has no sheath. Seems like a simple enough project… I hope?
I picked up this German military surplus overcoat a few months back; it was on sale at Metro for something like $20, so I bought two. One I’ve been wearing as-is – it’s a nice grey wool coat with classic lines – and the other was destined for fashion hackery. I decided to complement the flat grey with some shiny orange, relining the cuffs, insetting quilted panels in the sleeves, and lining the collar in similar mode. I might take another pass at it later and add a hazardous-materials style flame appliqué to the back, but it’ll do for now.
It’s my last day working for Synapse. I’m basically just cleaning up and checking things in today. I’ve long since passed on all useful knowledge about this project, and while my teammates say they’ll miss me I’m sure they will carry the project on without a hitch. I’ll be off work for all of July; my first day at Google will be the first of August.
I like Synapse; it’s a good company and I’m going to miss the people here. I’ve learned a lot about embedded software development, and about electrical engineering too; comparing the lights I built for the Shame Project with either of the two previous years’ Burning Man projects makes the difference obvious. I’d expected to spend more time here, but the opportunity to go work for Google is definitely not to be missed.
I picked up a fleece jacket in the REI bargain basement a while back for some absurdly low price – $7 I think? The zipper was broken. I happened to have a spare zipper in my sewing box so I repaired it and have been wearing it ever since. A couple of months ago the jacket went missing. This was just after Ava and I moved into our new apartment so I assumed it was around somewhere and that it would turn up eventually; but several thorough greps later I still couldn’t find it. Much grousing about the situation later, I began to annoy even myself.
Saturday morning I resolved to count the jacket as missing and go replace it. I have a lot of backpacking planned for next month and I am definitely going to need a nice warm fleece. Instead of buying a new jacket I decided to head up to Seattle Fabrics, buy some polartec, and make myself something stylish. I picked out some charcoal grey and some brick red, some reflective piping, and zippers; about $50 worth altogether.
When I got back to the shop it was time for Shop Cleaning Day. (Rather late for Shop Cleaning Day, actually; traffic was terrible.) I put down the bag of materials and started cleaning. Ten minutes later, I picked up some random box of clothes I didn’t recognize and started pawing through them trying to figure out whose they were. Buried in the middle of the pile? My REI jacket, of course.
I still have no idea whose clothes those were but at least I have my jacket back. Having already gotten myself excited about the new sewing project, I decided I would press on anyway. Maybe I can pass the old jacket along to someone else who will appreciate it. A couple of things came up and I didn’t end up finishing the new jacket, but I got pretty far along. The body of the jacket is all finished, with zipper pockets and all. I reused the basic design of this vest, minus the fur trim; the body is mostly charcoal, with the side panels and collar lining of the red. The retroreflective piping fits into the horizontal chest seams and along the back side panels. I picked a big bold zipper which stands out as a design element, and made shoulder panels of matching grey ballistic nylon.
The sleeves will match the body styling, with a charcoal-grey outer panel and brick red underneath; I’ll fit some more reflective piping into the back seam. I’m also planning to design in some ballistic nylon elbow pads but haven’t figured out how that will work yet.
In the course of a conversation about speed limits and speeding tickets, I went looking for a research study I remembered reading about. Here it is: Effects of Raising and Lowering Speed Limits, a US DOT report from 1992.
Lowering posted speed limits by as much as 20 mi/h (32 km/h), or raising speed limits by as much as 15 mi/h (24 km/h) had little effect on motorist’ speed. The majority of motorist did not drive 5 mi/h (8 km/h) above the posted speed limits when speed limits were raised, nor did they reduce their speed by 5 or 10 mi/h (8 or 16 km/h) when speed limits are lowered. Data collected at the study sites indicated that the majority of speed limits are posted below the average speed of traffic. Lowering speed limits below the 50th percentile does not reduce accidents, but does significantly increase driver violations of the speed limit. Conversely, raising the posted speed limits did not increase speeds or accidents.
Since speed limits are shown to have minimal effect on driver speeds, we can say that the principal effect of a speed limit is to arbitrarily impede the flow of traffic when a police officer happens to be present. We can also describe speeding tickets as randomly-issued fines for driving normally when one happens not to have noticed a police officer in the vicinity. Speed limit laws clearly do not reflect the values of the communities they regulate, and are thus an example of bad, anti-democratic law.
Furthermore, arbitrarily low speed limits may actually reduce traffic safety. Later in the same study:
It is interesting to note that compliance decreased when speed limits were lowered and accidents tended to increase. Conversely, when compliance improved after speed limits are raised, accidents tended to decrease.
Perhaps there is a “boy who cried wolf” effect at work here: after discovering, through repeated experience, that traffic speed limits have nothing to do with actual risks, one might easily discount the value of traffic regulations in general, some of which may actually have some rational basis.
I haven’t even started working for Google yet and I’ve already run into some annoying big-company bullshit. Every Google employee apparently starts out with a week long orientation in Mountain View, which is fine – I’m looking forward to it, actually – but I’ve just found out that they expect me to pay for all the travel expenses myself. Sure, they’re promising to reimburse me later, but it still means I have to extend Google a short-term, zero-interest loan of a thousand bucks or so as a condition of employment. It’s so pathetically cheap – they can afford the fancy benefits package they were dazzling me with last week, but can’t afford to buy a plane ticket and book a hotel? Not cool. I am well aware that this kind of exploitative nonsense is common in the mega-corporate world, but I’d expected better from Google. I hope this is just laziness, something they picked up from other companies without really thinking about it, and not a true reflection of their management philosophy.
Oh, well. Perhaps I can turn the nonsense to my advantage. Instead of booking a plane ticket and a rental car, perhaps I’ll just ride down on my bike and bill ’em for the cost of fuel. It’ll cost less than a plane flight, I won’t have to deal with the TSA, and I’ll get to show up for my first day in style.
Nice tutorial on adapting ATX power supplies for use as a lab bench supply. 15 minute youtube video.
I got fifteen out of my sixteen to-do items finished yesterday. Lots of life-maintenance chores, mostly, but I also got a couple of projects wrapped up. I finished stitching together the custom Raggedy Ann themed laptop case for Candace M., and met up with her to drop it off. It’s made of neoprene, which is not the easiest material to sew, and I broke two needles when I veered off-course while sewing the zipper, so the fabrication is not as perfect as I had hoped… but, whatever, it looks good and it works, so I’ll call it a success.
Also finally installed that light switch in the ALTSpace machine shop. It was originally set up on a motion detector, which would annoyingly forget about your presence if you didn’t move around enough while working. We had jury-rigged a system of extension cords we could plug and un-plug, but it really just needed a normal switch. Which I have now installed.
I am now down to four open projects:
– a funky custom L-shaped couch for the living room
– animated, networked lights for the Shame Project
– controller for Hunter C.’s solar light project
– Radian
I haven’t been making any progress on Radian lately. I think it might be time to ship it. Perhaps I need feedback from real people to figure out what I ought to work on next.
For the couch, I am waiting for the roll of batting to arrive. We’ll cover the foam with batting, cover the batting with upholstery fabric, then staple it all onto the wood frame and call it good.
My goal was to complete the Shame Project lights by the end of June. I’m going backpacking in California for a good chunk of July, so I’d like to have any time-sensitive stuff out of the way before then. I guess that the couch project will be finished by then, too. So, I’m thinking I might have time free to make some interesting personal project for Burning Man.
I’ve been thinking of making a custom tent: a heavy-walled, light-blocking tyvek/canvas sandwich, with no windows and no zippers, seven or eight feet tall. The door would have an internal strut to hold it rigid, and a closure made of either velcro or magnets, with a wide flap: something I could open and close without having to duck and climb in, but which would still keep the wind and dust outside. A pocket on the side would let me install an HVAC filter, through which a fan could pull cool air, and an array of clips and D-rings attached to the walls and ceiling would let me hang up flashlights, a mirror, camelbak, headlamp, and all the other stuff that ends up scattered on the floor. I’m sick of going to Burning Man in normal camping tents, which just aren’t very good at dealing with Black Rock Desert conditions.
Another idea is a second try at the inline tricycle I tried to build in 2009. This time I’d use even bigger, fatter back wheels, and a much longer, more ridiculous set of front forks, and I’d weld the frame instead of trying to bolt it together. (Oh yeah: there’s a welder at ALTSpace now. Whee!) It’d have the same long banana seat chopper design, but it would be even more ridiculous looking.
Finally, I have a few pieces of playawear I’d like to sew up: a new-model fur coat, a leather/nylon-webbing/silk jacket, a stylin’ utility vest, this red-tan-orange striped three-piece suit….
Oh, well. We’ll see how much time I actually have for this kind of stuff after I get back from Yosemite. Perhaps the new Google job will soak up all the time I have – that would be a certain kind of success.
The Arty Bollocks Generator creates synthetic artist statements. An example:
My work explores the relationship between acquired synesthesia and life as perfomance.
With influences as diverse as Nietzsche and Andy Warhol, new tensions are crafted from both explicit and implicit textures.
Ever since I was a student I have been fascinated by the ephemeral nature of the mind. What starts out as hope soon becomes corrupted into a cacophony of lust, leaving only a sense of decadence and the possibility of a new reality.
As shifting phenomena become clarified through boundaried and diverse practice, the viewer is left with a statement of the inaccuracies of our condition.
It’s a pretty good little mad-libs program, though its limitations show up after just a couple of repetitions.
I bought Burning Man tickets today. Whee. It still feels awfully wintery to be thinking about going to the desert, but the first four tiers of tickets are already sold out, and word is that they’re going to cap the total number of tickets this year. I’ve heard similar rumours in years past, but this year they’re going so far as to say they’re not going to offer ticket sales at the gate, which makes me think they might actually mean it.
Last night I had a work party for the Shame Project lanterns. We built fourteen microcontroller boards, each equipped with four cheap current regulators. Each lantern will have red, green, blue, and white LEDs, and the controllers will be linked in a ring network. They will run an evolving rhythm pattern, and they will pass pieces of their “genomes” around the network. Viewers will see the animations drift together and back apart over time as the controllers mutate and then re-converge the data driving the rhythm pattern.
The work party was fun – I did a lot of prep work writing up instruction sheets with diagrams and explanations, and I designed a very simple, almost primitive board where all the solder points are easy to reach and most of the traces are on the opposite side of the board. It seemed to work; the skill level ranged from “novice” to “moderate” and yet we got all the work done ahead of time with minimal rework. I still have to test all the boards, but the manufacturing process was so smooth that my hopes are high.
I spent the weekend in Portland with Ava, visiting a couple of her friends who recently moved over from Melbourne. We roamed around downtown, stopped in at a coffee shop so snobbish it was positively entertaining, wandered through the Saturday Market, visited the Multnomah County Fair… We tried to go look at the waterfalls in the Columbia River Gorge, but hundreds of other people had the same idea so there was nowhere to park. Oh, well – some other time I’ll go back on a motorcycle, since that windy little road looks like great fun. We were more successful with a trip to the Acropolis Steakhouse… and while we only managed to visit about half the rooms at Powell’s, we stumbled out, eyes glazed over, with a dozen new books between us. Yay, Portland.
I got the official, on-paper, signed-by-the-VP offer letter yesterday, and gave my notice today, so it’s official: I’m going to go work at Google, over in the Fremont office. I won’t start on til the end of July, so I’ll have plenty of time to finish up my project at Synapse, and to get a couple of weeks of high-Sierra backpacking in. I don’t know what project I’ll be working on yet, but I am angling for something to do with language tools, or some other kind of system software.
I’m excited! I know a bunch of smart, interesting people over there and met a few more during the interviews, so I have hopes that this will go well. Google is a big company but still seems to have its engineer-friendly charm, so I’m hoping it will be a place I can spend a few years learning and growing and tackling big, hairy, fascinating problems.
Hobbyist hacker builds his own parallel computer system using an array of Parallax Propeller chips, each of which has 8 processor cores.
TermKit is a novel, interesting design for a terminal architecture, based on mime-typed data streams. The designer’s explanation of the system is clear, readable, and well thought out. The idea of a terminal-style computer interface which actually takes advantage of modern datatypes and graphics hardware looks really appealing through his point of view, and there are lots of screen shots.
In the meantime, we’ve gotten a lot better at displaying information. We’ve also learned a lot of lessons through the web about data interchange, network transparency, API design, and more. We know better how small tweaks in an implementation can make a world of difference in usability.
And yet the world of Unix is rife with jargon, invisible processes, traps and legacy bits. Every new adept has to pass a constant trial by fire, of not destroying their system at every opportunity it gives them.
So while I agree that having a flexible toolbox is great, in my opinion, those pieces could be built a lot better. I don’t want the computer equivalent of a screwdriver and a hammer, I want a tricorder and a laser saw. TermKit is my attempt at making these better tools and addresses a couple of major pain points.
In my ongoing imaginations about the operating system I would design if I were to build everything from scratch, I’ve toyed with the idea of some kind of hybrid command line / graphics interface, some kind of new terminal which is aware that it is operating on a bitmapped display… this TermKit project looks like someone had a similar idea and then actually did the work of figuring out how to make it practical. Now I want to play with it and see how it feels in practice.
It’s been sunny this week in Seattle, and I’ve been taking advantage by hopping on the new bike and going for a spin after work. Even just a little breeze around the neighborhood fills me with delight – I’ve missed riding, the way I feel when I’m on a bike, the mix of peace and excitement, the combination of in-the-moment focus and mind-wide-open rumination. I’m planning to take the bike down the Oregon coast when I go to Mike and Alissa’s wedding – it’s a twelve-hour ride but I can’t wait to
I spent a couple hours working in the shop last night. The new apartment’s kitchen lacks for counter space, so I bought a little wooden cutting board at Ikea and cut it down to fit in a gap between the edge of the counter and the refrigerator. The gap is only about sixteen inches wide, but we only have about three linear feet of counter space to begin with, so that’s a significant improvement. I glued on some wooden mounting rails; Ava is going to oil the wood tonight, and we’ll install it this weekend some time.
I also worked on the couch project some more. After sitting on the not-yet-upholstered platform a while and observing the way it flexes, I decided to add some more support underneath, and to build up more substantial sockets for the four thinner legs. It’s going to be a fair bit heavier this way but I think it’s worth the effort.
I sold the last of my three motorcycles Friday night – the ’86 Intruder. I had intended to fix this one up and ride it, after selling the other two, but the mechanic’s verdict wasn’t good. It has an oil leak in the #2 cylinder somewhere, and it’d cost more than the bike was worth to have the mechanic fix it. I don’t have time or inclination to do it myself so I posted it on Craigslist. I put the ad up around 8 PM, thinking people would make arrangements to come look at the bike on Saturday – but three hours later I was standing on the sidewalk with cash in my hand, watching a guy who had driven down from Monroe load the bike onto his truck. So, that went well.
Saturday I test-rode Nika’s bike, a ’95 Honda Nighthawk 750. She’s pregnant and thus not going to be riding for a couple of years, so she decided to sell her bike rather than let it molder in the driveway. Its paint needs some work but it is in solid mechanical condition, so after a spin around the lake I decided to buy it. Amazing how quickly that old feeling of balance and exhilaration comes back! I’ve missed this.
Argument that programming is more like gardening than engineering:
If you were building a bridge or a skyscraper and you told me, before you began, that you knew exactly how it would look when it was finished – I would believe you. If you told me that you knew to some insane degree of accuracy how long it would take to get to ‘finished’ – I would believe you again. That’s how Engineers roll. Tell me the same thing about your garden and I’m gonna call bullshit. Tell me you are going to make it grow faster by hiring more gardeners and I’m gonna laugh at you.
This hybrid PWM / resistor DAC scheme combines two 8-bit PWM outputs with a resistor divider to create a composite 16-bit DAC.
Ava and I spent the weekend out in Eastern Washington at a fabulous, low-key, all-night-and-the-next-day dance party called Prosperity. We rode out with Jeff & Nika and camped with them and a handful of their friends. I didn’t actually dance til dawn this time; I hit a wall somewhere around 3 AM, and woke up in time for the sunrise set. Sunday was a lazy, sunny day listening to music, drinking whiskey, and talking with friends. Altogether a thoroughly worthwhile weekend.
Last night Ava and I spent a couple of hours working on our couch project. We finished up the carpentry and now have a bare wooden platform sitting in our living room. It’s a curved, L-shaped structure designed to seat two or three people in an otherwise unusable corner, low enough to work with our floor cushions and coffee table. Next step is to cut some high-density foam to shape and glue it on to the plywood surface; then we’ll upholster it, leaving only the finished legs showing.
I also did some work on the rhythm robot last night. I finished desoldering all the high-torque encoders I ordered by mistake and replacing them with a more finger-pleasing model. Removing parts is hard work! Once finished, I fitted up the faceplate, installed the knobs, and test fit the assembly in the box. It looks so sharp! I’m looking forward to actually using it… though I’m sure it will take more months of work before I actually get any sound out.
I briefly considered leaving the metal box unfinished, or possibly just giving it a clearcoat, but the aluminum is too bright and cheap-looking against the polished wood. I’ll stick with my original plan and have the box powdercoated.
How strange – some suicide-bomber blew up Cafe Argana in Marrakesh, which faces Djamaa-el-Fna, the central square. When MJ and I visited Marrakesh a few years back we spent all of our time there wandering around the back streets of the medina, passing through Djamaa-el-Fna several times a day. I don’t think we ever visited Cafe Argana but we must have passed by it many times.
I ran across a paper on Hacker News that looks like it probably contains useful insight into a problem I am currently trying to solve – Yield: Mainstream Delimited Continuations, by Roshan James and Amr Sabry. It so happens that I am designing an implementation of ‘yield’ for Radian, and have been thinking a lot about its relationship with C#-style async IO by way of continuations, trying to come up with an architecture which can conveniently express both. After reading this paragraph, I felt some hope that the authors were going to tell me how to do that:
Many mainstream languages have operators named yield that share common semantic roots but differ significantly in their details. We present the first known formal study of these mainstream yield operators, unify their many semantic differences, adapt them to a functional setting, and distill the operational semantics and type theory for a generalized yield operator. The resultant yield, with its delimiter run, turns out to be a delimited control operator of comparable expressive power to shift- reset, with translations from one to the other. The mainstream variants of yield turn out to be one-shot or linearly used restrictions of delimited continuations.
Well, yes, of course yield must be implemented using continuations. How else would you do it? But any hope I had that this paper would help me design a satisfactory implementation vanished when I ran into this sentence on page 6:
We are now ready to introduce the syntax of a monadic meta-language with yield. This language is Moggi’s monadic metalanguage (MML) extended with the opaque monadic type Yield i o r and a type Iterator i o r for interacting with iterators:
I don’t even know how to start understanding what this means, and the following paragraphs wander off into an impenetrable thicket of symbolic goobledygook I can’t quote here without destroying the formatting. I have no idea what happens on page 7.
Variations of this experience have begun to frustrate me with increasing frequency over the last couple of years. I ran into the same problem last month when I was implementing finger trees in Radian: every explanation I found was expressed in such a thick, symbolic academic jargon that I could make no sense out of it. I got halfway through my implementation on the strength of the sole exception, Eric Lippert’s clear, well-written explanation of an immutable deque in C#, and then reverse-engineered the rest of the finger tree concept using a lot of trial and error. I must give credit to Hinze and Paterson for inventing and publicizing the thing, since otherwise I would never have known it was possible to create a data structure with those performance characteristics, but I got nothing of any use out of their actual paper.
The thing which really frustrates me here is the apparently unbridgeable gap between academic computer-science language and practical software-engineering language. Of course the CS researchers are going to write papers in their community dialect no matter how much I’d prefer that they spared me the trouble of translation, but isn’t CS research eventually supposed to produce insight which informs the development of actual software? I don’t understand how I’m supposed to even start learning how to read what they’re writing short of burning ten years on a PhD or something. How is this supposed to work? Whose job is it to learn both dialects and perform the translation, and where can I find their writing?
Current list of projects:
– rhythm robot: just made first prototype of the laser-cut front panel
– raggedy-ann themed neoprene laptop sleeve: design worked out, need to actually sew it
– shop storage: half the wire shelves built, waiting to finish the project until we can do it without annoying the neighbors
– living room couch: lumber & hardware acquired, next to work on staining & finishing the legs
– 12V high-current LED fader circuit for Hunter Cross: device built, waiting for test lights
– Alissa’s “Temple of Shame” project: concept & budget ready, doing design work
I had a random little idea last night and decided to implement it. The soldering took a little longer than I had expected so I finished it up this morning. It’s a little LED sign for the front door at ALTSpace – we have a nice laser-cut wood sign on the front of the building, but once you walk into the entryway there was nothing to mark which of the two commercial spaces is ours. This little board sits at the top of the glass door frame, on the inside.
I’ve soldered all the components onto the main Rhythm Robot board. This is the part you actually interact with, containing all the rotary encoders (sixteen of them), the LEDs (322 of them), the push-buttons (fifteen), and 7-segment displays (ten). It was a lot of work just getting all the parts together – now I begin the “bring-up”, testing different subsections of the circuit to make sure they work the way I expect them to.
Once that’s done, it’s time to write code. I am not going to bring over much of the code from the first rhythm robot prototype, because – as is inevitable in software – I’ve come up with rather better ways of doing it. On top of that there is a whole pile of new functionality in this device; it was originally going to be three separate boxes, after all.