Today was too broken up by running around dropping people off and picking them up to feel like I had been effective. I also felt terribly tired, especially in the evening. I think I might have a cold coming on.
Consider this situation. A server maintains some database whose contents changes at some unpredictable rate. A remote client that wishes to maintain a replica of some part of the database connects, retrieves an initial snapshot, and tells the server to send it updates as the database content changes. This works well in common cases where the database changes relatively slowly. It fails when the database changes quickly enough that the client cannot keep up or when the network connection to the client has less bandwidth than needed.
I've encountered this pattern a few times in my work over the last few years. I suspect that it comes up all over, and that maybe the solutions are formalized in some networking papers or texts that I've never read. Anyway, I'd like to take this space to explain the solutions that I've used so far.
To start, buffering updating to send to the client, while necessary, is not a solution, because a slow client and a quickly changing database can mean that the required buffer space grows without bound.
One can attempt to limit the rate of change of the database. I have not found this to be a satisfactory solution so far. One reason that it is unsatisfactory is that one slow client can essentially prevent the database from changing at all.
Another approach is to drop the connection to a given client when the data buffered to that client for updates exceeds the amount that would be required to send a complete copy of the entire database. The client then reconnects and obtains a new initial snapshot. This approach worked well for some time for the OVSDB server in Open vSwitch. However, we eventually came upon a few situations where it caused real problems. For example, when the database continuously changes at a high rate, this can cause slow client connections to drop almost immediately after retrieving their initial snapshots. In turn, because OVSDB connections are used for operations other than monitoring, this meant that slow OVSDB clients couldn't accomplish any of their goals other than monitoring.
A more effective approach responds to the socket buffer to a given client filling up by tracking the aggregate changes to the database relative to the client. That is, if a datum in the database changes more than once, track only the final change; if a row is modified and then deleted, track only the deletion; if a row is inserted and deleted, pretend nothing changed at all; and so on. This aggregate cannot take more space than the larger of the original or final size of the database, so as long as the database itself is bounded in size, it is practical to maintain it. When space frees up in the socket buffer, the server sends the client the aggregated change. This is the strategy now used in the OVSDB server in Open vSwitch.
A final approach is the one used for flow monitoring in the Open vSwitch main ovs-vswitchd process. (I originally designed this as part of a Nicira extension to OpenFlow. It was later standardized as part of OpenFlow 1.4, so you can read that specification for more details.) When buffered changes grow above a threshold, the server sends a “paused” message. After that, the server stops sending updates for rows that are added or modified. It does continue sending updates for deletions of rows that had already existed before the pause. When the client catches up, the server sends “add” and “modify” updates for rows that were added (and not deleted before catching up) or modified, and then a “resumed” message to let the client know that it has caught up again.
I went to a meeting at the ONF offices in Menlo Park. It seems that we're making some progress; I had my doubts before.
None of the April Fool's jokes today really impressed me. I enjoyed the “ClosedStack” one about as much as any of them.
Someone dumped an old, banged up screen door on my front lawn. WTF?
I painted the shelves for the plant stand. It took longer than I expected, but I got it done. I really wanted to assemble the whole thing, but it's going to rain tomorrow and the paint says to avoid getting it wet for 48 hours after painting. So after it was dry to the touch I stacked it in the garage, with little shims in between to avoid sticking, to dry for a full two days.
For dinner, I roasted a turkey, baked a casserole dish of cornbread dressing (after baking the cornbread itself), and made a recipe for “Hungarian potatoes” that I found in Professional Cooking. Everyone agreed it was all delicious. I think Kate is going to make a turkey pot pie out of the rest of the turkey tomorrow.
In the morning I designed and built an outdoor stand to hold plants out of 2x4s. It is huge: 3 feet tall, 3 feet deep, and 6 feet wide. It looks like a set of bleachers, with three 1-foot deep shelves each set one foot higher off the ground. Initially I had planned to make the shelves out of 1x6s from an old fence, but when I put them on the supports it was obvious that kids would try to climb on them and that my 1x6s would instantly snap when they did that. Kate and I decided to get 2x6s instead, which should be strong enough to actually use the stand as a set of bleachers.
Kate and I went out to test drive used trucks. We tried out a Ram, a Silverado, and an F-150. I liked the Ram and would have supported buying it if Kate had not had reservations. The Silverado seemed to shake a lot at speed. The F-150 was too old (2003) and reminded both Kate and me of our grandparents.
On the way back from the test drives we bought the 2x6s and a couple of quarts of yellow and green paint for the stand. In the evening Cassie and I painted the supports.
I met Simon Horman at the office. He had been in town for the Linux Collaboration Summit.
Today's session was less attended, with perhaps 20 or so attendees. I started out the day with a more detailed (and recorded) version of the talk I had given the day before.
Partway through the talk, I realized that I had briefly flashed up on the screen a file that contained my email password in plaintext, so immediately after the talk I changed it to a new randomly chosen password. (Fortunately, I use a given password at only a single site, so I only had to change one password.) Just after I did that, I realized that although I had stopped recording first, I hadn't disconnected the projector, so everyone in the room had been able to see the new one too. So then I disconnected the projector and changed the password one more time…
Today was the first day of the Open vSwitch Hackathon that Kyle Mestery and I organized. We began with a logistical introduction from Kyle, followed by an introduction to Open vSwitch development by Justin. At this point, I expected everyone to break up into teams to work on individual projects. The audience, however, was mainly Open vSwitch administrators, users, and generally interested people, not primarily developers as I had guessed it would be. So, instead, I ran a demo of Open vSwitch development while Justin led a discussion of potential OVS support for L4/L7 services in a separate room.
Maybe as many as 40 people attended today.
In the evening about 10 of us went to Pedro's, a local restaurant, for dinner.
Yesterday I sat down to eat lunch in the company cafeteria and found myself struck by an odd thought: did I pay for this? I thought back and couldn't remember doing it. I checked my credit card statement last night and there was no charge from the cafeteria for the day. I paid for it today instead (although a few coworkers suggested that I shouldn't bother).
We got our electrical bill for the last year. $220 for the whole year. I guess the solar panels do pay off.
On my ride home I spotted the coolest license plate I've seen in a long time: H+H=HE. On a Ford Fusion!
We went to the garden show at the San Mateo fairgrounds.
Kate and Lucila and I went into San Francisco for dinner and Chelsea Handler's show at Davies Symphony Hall. The show was fun, but I don't think it's twice as much fun as the much cheaper and easier-to-get-to comedians at Rooster T. Feathers in Sunnyvale. I think parking in San Francisco cost as much as two show tickets in Sunnyvale.
I had been expecting a package from Amazon, but it hadn't showed up. I checked Amazon's website this morning and it said that Fedex had reported “invalid address, undeliverable.” That doesn't make sense, because we get mail and packages all the time, so I called Fedex. The guy on the phone told me that in fact the package had been turned over to them in a damaged state and that they'd handed it back to Amazon. I could not get the guy on the phone to tell me when they were going to actually report that to Amazon instead of “invalid address.” I had to go back to Amazon and explain the problem. They sent me a new package. I'm still not sure whether the problem is on the Fedex end or the Amazon end.
Spent some time in an online webex today. Why can't it scale the image to fit my screen? It is a pain to pan around.
Kate and I went out to Rok, a restaurant in Sunnyvale, using a gift card that a friend gave me for my birthday back in October. This restaurant has the gimmick that they bring out your entrée, only partially cooked, on a superheated slab of volcanic rock, and then you finish cooking it yourself with a knife and a fork. This was fun for a minute, but then I realized that a skilled cook in a kitchen can do a better job, especially for the price that Rok charges. The service was also very slow: we were there for almost 2 hours.
After dinner we went out with our friends Grace and Roberto.
Reading the latest Communications of the ACM, I found a paper that cites one that I coauthored years ago. I always enjoy that, it makes the painful paper writing process seem like it was more worthwhile.
Three important meetings today, all with exactly the same content. Sigh.
We had my coworker Justin and his family over for St. Patrick's Day dinner. Even though we've lived here over 18 months now, it's the first time they've made it here.
I went to a party at a friend's house. I was surprised to meet Peter Anvin there, who I've known as a Linux developer for many years. (I doubt he knows me.)
Wrote my self-evaluation for what I've done at work from January 2013 until now. I ended up being impressed; I've done more than I thought lately. Here's part of what I wrote:
Considering the 2141 patches applied to the Open vSwitch “master” branch between 1 Jan 2013 and 14 March 2014, I was involved in about 70% of them:
I committed 749 patches of my own.
I reviewed and committed about 484 patches written by others.
I reviewed about 289 patches written and committed by others.
(All of those numbers are approximate.)
Came across a quote from White House CTO Todd Park today that seemed a little odd to me:
There is strong evidence that when affordable healthcare isn't exclusively tied to employment, in more instances people choose to start their own companies.
But, if you start a company, you've always been able to get healthcare for employees, as far as I know. For example, when I was involved in the founding of Nicira, the rule that I remember hearing was that you could get group coverage if your company had two or more employees, and in fact I believe that's how many we had initially when we got healthcare there. So the quote is puzzling to me in that context.
I spent all day in the program committee meeting for VMware's internal RADIO conference. It is the only program committee I've been on. The format was simple: discuss each of the papers that received high enough scores and come to consensus on whether they should be given a long talk, a short talk, or a poster. I think we discussed over 50 papers with an average discussion of 8 minutes or so, each.
I finished reading Fuzzy Nation. Awesome quick read. I give it 9 out 10. It ended long before I expected, though, because the publisher stuck a preview of a different book at the end. I hate that, not because I object to previews but because I like to know how much of the book is really left.
I joined a meeting at the ONF office in Menlo Park. I had shown up a week earlier, misunderstanding the date. Each time, I rang the doorbell to their locked lobby area, but no one showed up, and each time I then walked around to the unlocked employee entrance and walked through a large open area full of employees to find where I was going. Each time, no one even looked up. Weird.
The wood had swollen on the side gate where I installed a deadbolt lock a while back, so that it no longer fit past the strike. I fixed it this morning by chiseling away a small amount of material, maybe 1/32” or 1/16” thickness.
We went ice skating again, this time at the rink in Redwood City with a friend of Cassie's. Last time it was great fun, but this time I found my skates painful. I switched to different styles a couple of times but it did not help much. Too bad.
I added a x86-64 build to the PSPP autobuilder.
For perhaps the first time, I agree with Caille Millner.
The second ONF Workday was even duller than the first, but at least it was shorter.
Back to the Hyatt in Santa Clara today for the first ONF Workday. I had a really hard time staying engaged, since most of what was said seemed either obvious, irrelevant, or wrong. I think that these huge meetings with hundreds of people are a waste of time. It is much better to get together a handful of people to work out a real solution to a real problem than to run 2-hour PowerPoint presentations.
I gave a 10-minute introduction to Open vSwitch in the “extensibility” session. I worked from handwritten notes, not slides, according to my preference. I felt pretty good about that when the next two speakers had technical difficulties. After that session it seemed that I had become a bit of a minor celebrity. I had a hard time getting to lunch because people kept coming up and wanting “just a minute” of my time. I also felt a little odd when one guy told me that he thought I'd be older and another said that he thought I'd gotten a bit fatter (really?).
Kate and I went to another cooking class tonight at the San Carlos Adult Community Center. Tonight the class focused on Irish food for St. Patrick's Day. My favorite was a beef stew that we baked with pastry on top in individual cups. There was also an amazing three-layer brownie.
I managed to finish up and post a version of my own homegrown RCU library for Open vSwitch. Somehow I expected RCU to be complicated and difficult to implement, but when I got down to it there just wasn't much there. The most difficult part was in fact making sure that the code worked and was reasonably type-safe with all four of the compiler variants supported by the OVS atomic library.
I spent all afternoon through late evening at the Hyatt in Santa Clara. The afternoon was occupied with the ONF workday “premeeting” in which we discussed various aspects of OpenFlow that have now slipped my mind. In the evening Justin Pettit and I met Neela Jacques, Brent Salisbury, Chris Wright, and some others in the Hyatt lobby. Neela graciously bought us drinks and sushi. I think that Neela had previously been very nervous about VMware's level of commitment to Open vSwitch and related software. I think that Justin and I managed to reassure him.
I spent most of the day in bed recovering from Spring Fling. Next year I will drink much less.
I did manage to read most of a book that I was interested in. It's pleasant enough having a day just for reading. I don't remember the last time I managed to do that.
This evening was Spring Fling, the San Carlos Education Foundation's big annual fundraiser for the San Carlos public schools. Since it is the first year that we have a child in the schools, it is the first year that we attended. It was a pretty fun time and I drank way too much.
We went to a birthday party for one of Cassie's friends in the evening at the ice skating rink in Belmont. It was a blast. I spent an hour and a half skating, some with the kids, some by myself. It took me most of that time to remember that I can actually skate pretty competently, but by the time I did the rink was filled to bursting with small children. I want to go skating again sometime soon.
Last weekend I finally finished building up and sanding the spackling on the wall next to the thermostat, and then painted it. It looks good, finally. I also spent a few minutes looking over the rest of the wall, fixing up a bunch of nicks. While doing that I found a couple of places where someone had drawn small flowers on the wall in black pen. No one admits to doing it. Very puzzling. I painted over them.
There is a lot of confusion going around lately about naming around Open vSwitch:
OpenDaylight has some kind of interface to the Open vSwitch Database (OVSDB). The name for this interface is, apparently, just OVSDB. This leads to statements like this one:
@PariseauTT @cswolf Is VMware committed to contributing to OpenSource communities like OVSDB, OpenStack and OpenDaylight?
Of course, on the face of it, the OVSDB part of that is ludicrous: I, a VMware employee, am practically the sole contributor to OVSDB. But people go around saying this kind of thing anyway because they have named something else OVSDB.
Tilera has launched an Open vSwitch based product that they call OVS:
Tilera Launches Open Virtual Switch Solution (OVS) to Accelerate NFV and SDN
Tilera Corporation, the leader in high-performance, power-efficient computing, today announced the availability of TILE-OVS, an optimized Open vSwitch (OVS) offload solution for network functions virtualization (NFV) deployments in data center and telco networks.
I think it's awesome that so many groups and organizations are launching Open vSwitch related products. Please continue to do so! But, as a favor to me, if you launch something related to Open vSwitch, please give it a distinguishing name!
There's a discussion going on internally at VMware that irks me a bit. Donald Knuth's visit sparked an interest in literate programming. I've actually done some literate programming—GNU libavl is a literate program, as is a smaller program that I wrote as part of a course project in college—so I have some interest in joining the discussion. But the discussion is being held under the auspices of a women's programming organization. Ordinarily I wouldn't let that stop me from chiming in, but the note about it heads me off with its final sentence:
Naturally, there is nothing stopping anyone else from creating and running their own groups, so, if that works, that's great (attempt to mitigate the inevitable comments about “non-inclusion” of everyone etc. etc.).
I guess I'll just stay away.
Lejna showed me that some of the shelves I put up in the kitchen are tippy. I think that some of the holes need to be a little deeper; the pegs don't go in all the way.
We spent most of the day with our friends Cassidy and Raquel and their daughter Stella. We also dropped by an AFS event so that Lejna could pitch the exchange experience to other potential exchange students and host families.
We had our friends Brandy and Olof and their kids over for a great dinner. My favorite parts were the braided, cinnamon sugar topped bread that I made and the pineapple that I grilled. Brandy and Olof brought lots of food too; my favorite there was the mojitos.
I need to work on my grilling. The hot dogs and chicken was OK, but the lamb chops were too charred.
Donald Knuth came to VMware for a question and answer session in the afternoon today. I arrived at the large conference room about 10 minutes early and it was already above capacity, with probably 200 people in a room meant for 150. Half as a joke, I climbed up on the top of an upholstered bench to see better. When a bunch of other people followed me on up, I realized that it wasn't a joke anymore. I didn't want to feel responsible for (potentially) wrecking furniture, and I hate crowds, so I went back to my office to listen on the phone.
I'm in the middle of reading One Day at Kitty Hawk, a book about the Wright brothers' invention of the airplane. This book is like the ultimate engineers' dream. There's nothing like coming up with an entirely new theory—and having to disprove old theories as wrong—and daring to demonstrate it at great personal risk, and amazing the entire world.
Lejna told me a few days ago that the brakes on her bike rubbed, and that it was so bad going uphill that she couldn't ride it at all. I took a look at it and, after trying a few futile adjustments, discovered that the axle inside the rear wheel was broken. I've never seen an axle break like that. I decided to just fix up a different (and nicer) bike for her.
I made and installed shelves in the kitchen using the plywood I bought yesterday plus a roll of veneer edging.
Lejna and I ate dinner at Lobster Shack in Redwood City. I expected a great meal because of the reviews online and the Zagat rating. At half the price, I would have considered it a good meal. But $19 for a “lobster roll” at a place with no waiters or tablecloths seemed too much.
I picked up Lejna from the airport.
Yesterday I built a rack, out of 2x4s, for carrying 4x4 sheets of plywood on the top of the car. Today I took it over to Woodcraft and tried it out with a sheet of 3/4-inch oak. It worked great.
Lejna and I ate dinner at Red Hot Chilli Pepper in San Carlos. It is a nice place and we will probably go there again, but I would not take anyone who does not like spicy food.
I spent some time this last week implementing an optimistic concurrent cuckoo hash based on Doug Zhou et al, “Scalable, High Performance Ethernet Forwarding with CuckooSwitch” and Bin Fan et al, “MemC3: Compact and Concurrent MemCache with Dumber Caching and Smarter Hashing.” Based on my experience, I have a recommendation for anyone else who is working on the same thing. I recommend that you use breadth-first search to find a path for rearranging keys. The CuckooSwitch paper does not mention the algorithm used, but libcuckoo, by the authors of CuckooSwitch, uses breadth-first search. In my first attempt, I used a random walk algorithm instead, but this is hard to get right efficiently because a random walk often loops through the same node, which means that to actually execute the rearrangement in reverse one must keep track of all the changes already made (or prevent loops). Breadth-first search, on the other hand, always generates a shortest path, and no shortest path will contain a loop, so one does not need to make any special provisions in that case.
I drove Kate, Cassie, and Lejna to the airport for a weekend trip to Portland and Seattle. I got the house to myself for the weekend.
I spent some time studying Ashley's Book of Knots, specifically splices. I had never spliced ropes together before. From the book, I successfully practiced the short splice and eye splice with some sisal rope that I had left over from redoing cat scratchers.
Valentine's Day and Kate's birthday.
A few days ago I already gave Kate her birthday present: a weathervane that I put up on the top of the garage, where it is visible from the street, the yard, and our bedroom on the second story of the house.
A few weeks ago the city mailed out brochures about the new local bus schedule, which they call a “flexible” schedule. This week new “FLX” signs went up along the route. This reminded me what a misnomer the name is. It is not flexible: to get bus service, you have to call and request a pickup the day before.
I helped sell hot dogs and popcorn at the school book fair in the evening. We collected over $600, although I think that about half of that went to costs.
I helped at Cassie's school again this morning, even though I had not planned to. I am getting a little tired of helping out there because it is so similar every time. Every time, there is some formulaic art r craft project that I help the children to complete. The first few times I remember helping, the art project was very free-form, so that the children could do it their own ways. That was interesting, because there was a lot of variation between one child's project and the next to hold my interest. But the last several of them have been very rigidly defined, and so all there is to see is where the children didn't follow the plan well: defects, instead of creativity.
The POSIX iconv function is really subtle. I found (and fixed) a bug in GNU PSPP's usage of it that had been there for years because we hadn't tested converting away from any encodings like windows-1258 that use combining diacritics.
FedEx “tracking” is so useless. It mostly tells you useless things, like that a package left Wisconsin 5 days ago.and has not shown up anywhere since then.
I keep hearing the usual jokes about forgetting to write the new year on checks. But who is still writing all these checks? I write less than one a month.
My colleague Joe Stringer reminded me on our walk over to lunch about the Ryu controller's OpenFlow tests, so I took an hour or two in the afternoon to write and post a patch that makes it easy to run these tests against development versions of Open vSwitch. My thanks to the Ryu developers for making this easy to script, even for a person like me who knows little about Ryu or Python testing frameworks.
I finally polished up the IPv6 support patch from Arun Sharma at Calsoft and pushed it to the Open vSwitch repository. Thanks Arun!x
This was a very long day. I spent the morning at a “100 Days of School” party in Cassie's classroom, helping children string 100 Froot Loops on necklaces. I had a series of meetings the rest of the day at work. Then I hurried home to make it to a cooking class that Kate and I went to at the San Carlos Community Center from 6:30 to 8:30. We went out for drinks with some of the other students afterward.
I finally checked in major improvements to the MPLS implementation in Open vSwitch. This has been a long time in the making. Many thanks to Simon Horman, without whose patches and prodding I probably wouldn't have ever gotten around to taking care of this.
Kate and I taught Cassie how to play “Carcassonne” a few evenings ago. We've had the game out before, but only used the cards to make layouts, never to play a game with scoring. We used pretty much all the rules, only simplifying slightly by leaving out farmers. Cassie was good at it—she ended up winning—but she got pretty cranky toward the end. Kate said that she could see Cassie concentrating hard to figure out how to play.
Kate and Lejna were out all evening shopping for Lejna's dress for winter formal. Cassie and I spent the evening together until bedtime. She started me out on the wrong foot by being cranky, but we managed to have an OK evening together.
It rained overnight. Keep raining!
It's my dad's 70th birthday. Happy birthday, Dad!
I took Cassie to Home Depot for their monthly workshop for kids. We made a racecar and painted it.
I went over to REI for a new blinky.
I spent most of the day working on house maintenance.
Riding into work, the blinky on the back of my bike fell off its clip. The next three cars behind me ran directly over it and shattered it into a million pieces.
Lejna left for the weekend for some AFS student orientation. We have to pick her up in the North Bay on Sunday.
I finished making the rack to go on a shelf in the kitchen. It functions, it looks just the way I intended it to look, and its many imperfections are not casually visible. The wood and its finish match the kitchen, too, but somehow it does not match the overall look of the kitchen. Kate and I think that may be because it sticks out too far on the shelf. We are discussing different ways we could redesign it.
I'm on the VMware RADIO conference program committee, so today I started looking through papers. I spent about 2 minutes on each of 67 of the submissions. I recommended about 25 of those for “light review” only, because they were not up to snuff. Disappointing.
We finished and submitted our paper for the VMware RADIO conference. It is a much better paper than I expected. Initially we were just writing it because management wants everyone to submit papers. Our paper was really just about performance improvements in Open vSwitch. No research there. But after writing for a while, and getting some feedback, I realized that there really is enough novel work in the Open vSwitch classifier and flow cache to warrant a paper, so we pivoted and wrote only about that. It's pretty good, I think.
A while back I was reading something in the newspaper about getting kids involved in some kind of craft. Some way into the article, the reporter had clearly gone out of his way to find a contrary viewpoint. The quote still bothers me: “These people are trying to conscript kids into the Maker Movement.”
People like to make things. Kids like to make things. The fact that adults are helping kids to make things doesn't have to be ascribed to any “Movement.” I like to make things, too, and that's basically what I like to do all the time, whether I'm making things with words or code or wood or food or something else. Most of the rest of the stuff I do is just taking breaks. I don't have to relate to any “Movement” to make things, and I'm not sure that I really do relate.
So, to whoever said that: stuff it.
Back to work after the weekend. I spent most of the weekend either working on my research paper or procrastinating on it. I'm a champion procrastinator when it comes to papers. I can sit there right at the keyboard and think of anything else. Paragraphs and individual sentences or even words can take ages.
I registered Cassie for the Home Depot kids workshop on Saturday. We're making a racecar. I think it'll be fun.
In the morning we went to a jigsaw puzzle competition. We were a few minute late. When we arrived, the organizers had given away our reserved spot to someone who had not reserved one and no copies of the competition puzzle were left. We were disappointed, but we took a different puzzle and spent a few hours on it. It was a very difficult puzzle and we did not make much progress, so we dumped all the pieces back into the box and went home.
Kate took Lejna dress shopping for the Sequoia winter formal in the afternoon. Cassie and I played together at home. We went for a bike ride in the neighborhood.
I found some moments to work on my kitchen shelves during the day. I tested the stain that I had bought. It matches the existing cabinets well (Lejna says “perfectly” but I am not sure).
In the evening I worked on my research paper.
I am so far behind on reading and processing bug reports on the PSPP mailing lists. To PSPP users, sorry about that. I am in the midst of writing a research paper and a document on Open vSwitch fields, there is a reorg going on at work, and I am spending a lot of time working on carpentry and other projects around the house.
Give me a few more weeks and I'm sure things will turn around. In particular, the rest of the family is going on a trip in a few weeks, and that will give me some uninterrupted time to work.
Writing research papers is the hardest professional activity I do.
The phrase “flat-screen TV” is my new pet peeve. It's meaningless because no one sells the old curved screen TVs anymore.
I am working on a document on OpenFlow and Open vSwitch fields. I've started sending, to people involved early on in OpenFlow, a draft of a section on the history of OpenFlow fields. If you want to review it, let me know.
Rev. Martin Luther King, Jr. Day, a day off work.
We have some cabinets that were installed in the house in funny places when we moved in. We removed them and they were in a closet until now. We are trying to better organize the garage, so this morning Kate and I installed one on the wall (no drywall there, making it easy to find the studs). Later, I made a shelf to fit inside (on little metal shelf holders).
The shelf is made from the same oak veneer plywood that I'm using for the kitchen shelves, so I spent some time experimenting with the veneer edge banding that I am going to use there. I applied it to the visible edge with an iron, using aluminum foil to protect the iron, then I trimmed it with a trimming tool I bought last week. I was worried that it would be difficult or not work well, but in fact it took only two or three minutes total (not counting ten minutes waiting for it to cool between ironing and trimming) and was not tricky or error-prone.
I also replaced a rack in the garage that was in fact an adapted curtain rod by a proper closet rod, using a shelf bracket with a hook at the end. I intend to put a shelf on the bracket also, but did not do it today.
I installed the outdoor speakers. They sound good. I still need to go back and caulk around the holes to make sure that water can't get inside the stucco.
With the table saw, I cut my 4x4 sheet of plywood to the sizes I need for the kitchen shelf, and fit them together. It was not perfect at first, which I think is because I initially forgot to lock down the bevel on the table saw and it wandered about 10 degrees from vertical during my cuts. This made the pieces not square, so I had to trim off some on the sides carefully with a hand saw. Anyway, I managed to fit everything together acceptably.
I spent some time experimenting with the router. I think that it will do everything I want.
After talking to my dad, I decided that the kitchen shelf project would be much easier if I had a table saw. I've been delaying on buying one for a long time, because they're scary, but I had spent a long time reading reviews and had a good idea of what I wanted, so I went out and bought a Bosch GTS1031. This model is portable, with a tough metal frame and handles, and storage for all the components inside the frame. I can store it vertically under my bench and pull it out when I need to use it.
I read through the manual and practiced using the saw.
I bought a Porter-Cable router, model 960, and some bits, for a project I'm working on to build some shelves in the kitchen. I used the Home Depot gift card my dad gave me for Christmas. Thanks, Dad!
Had dinner with Justin and his family, Jesse and Ethan, and Ethan's girlfriend, at Justin's house.
There's been horrible turmoil at work this week. A bunch of decisions came down from on high. They are not necessarily bad decisions, but they are big changes and not communicated well. I have hardly managed to get anything done this week.
I released GNU PSPP 0.8.2.
Over the last few days I've noticed an occasional mysterious beeping when I'm outside. Tonight I figured out that, when I replaced a smoke detector inside the house, I put the old one in the garage but forgot to remove its battery.
We wrote and mailed thank-you notes for Christmas gifts in the morning.
In the afternoon I went to Woodcraft to buy some wood for a project. I bought a 4x4 sheet of plywood with oak veneer to match our kitchen cabinets. Putting it in the car, I found that a 4x4 sheet of plywood fits, diagonally only if one is willing to push and to scuff the interior trim. Next time I will take the old car, and a rope for the roof rack.
There's a little playhouse for kids in the back yard. It hasn't seen much use because it had a wasp problem. We were working on that, and Kate went out there to check on it today.
We don't have a wasp problem anymore, because the playhouse has bats now. For me, this posed the question of what do we get to eat bats, but Kate decided to buy a “bat house” instead and somehow try to coax the bat into living there. We'll see.
I managed to expand a 1-gang low voltage box for speaker wires in our TV room by a 2-gang box with extra wires for our outdoor speakers. I think this is the only time I've put a hole in a wall and not regretted it.
Here are the books I read in 2013, along with the year that they were written and, in some cases, my rating on a scale from 1 to 10:
Erica Jong, “Fear of Flying”, 1973, 3.
Jules Verne, “Le tour du monde en quatre-vingts jours”, 1895.
Hans Christian Andersen, “La Petite Sirène et autres contes”, 1875.
Jules Verne, “Le Pays des Fourrures”, 1873.
Garrison Keillor, “Pontoon: A Novel of Lake Wobegon”, 2008, 5.
Jules Verne, “Cinq Semaine en Ballon”, 1863.
Jules Verne, “Les révoltes de la Bounty”, 1879.
Richard Henry Dana, “Two Years Before The Mast”, 1840, 8.
This list is shamefully short. It is shorter than my list for any other year that I've kept one and, probably, for most years that I have not written it down. I plead, first, that it took longer to read many of them because they are in French and, second, that I spent a lot of time on other hobbies this year instead of reading.
My peak year for reading was 2011, in which I read 61 books. However, I don't want to repeat that year, either, because I think that too many of the books I read that year were simplistic and forgettable. In 2014 I hope for some happy medium.
I've been getting weary of this form of blogging. I am thinking about some alternatives. I might eventually get around to trying one of them.
I'm feeling awfully tired now. I think I need another vacation.
I went back to work.
I dropped Kate and Lejna at “snuba.” Cassie and I went swimming at the hotel for a little while, then we checked out and picked the others back up.
We drove to the airport and flew home. I was pleased that our bottles of rum did not shatter or leak.
The others went to yoga in the morning, while I finished reading Babbitt.
We spent the day driving the opposite direction around the island. Our first stop was the Makauwahi Cave Reserve archaeological site, over a rutted dirt. We spent some time walking around and talking to the docents. I took some photos of the collapsed innards of the cave.
Afterward we drove toward Waimea Canyon on 552. We stopped at a lookout point and bought some exotic fruit, including fresh coconut meat (pretty much flavorless) and rambutan (pretty good). We made it up to the nature center and museum a while later and took a very short hike.
On the way home we stopped at a ruined (never completed, in fact) Russian fort.
We ate dinner at Keoki's again.
We ate breakfast at a Whole Foods-like grocery store near the hotel. The food was very good, but it was also very expensive.
We spent the day driving counterclockwise around the island from our hotel, almost to the point where the road ended, and back again. The highlight of the morning was the Kamokila Hawaiian village, which recreates the buildings in a historical Hawaiian village, with explanations.
We drove through Princeville and ate lunch in a shopping center there. Just past Princeville was Hanalei, the town from the “Pete the Magic Dragon” song. We stopped at Tunnels Beach to watch surfers on huge waves. Across the street from the beach was a huge cave. We only walked into the large outer chamber, because we did not have a flashlight, but other visitors told us it went back much farther than that.
We ate dinner at Rum Fire, the hotel restaurant. The food was better than Brennecke's, but didn't measure up to Keoki's.
We drove a short distance from the hotel to set out on a 3-hour guided adventure. Our adventure began by kayaking down a river, which was very still and quiet. About 45 minutes later we landed on the bank and hiked along a small stream to see waterfalls and eat a picnic lunch. We hiked back to our kayaks, pausing for Lejna to jump into the water from a rope. Back at the river, we were picked up by another guide with a power boat. We went back to the hotel.
We went to a luau at the Koloa rum plantation in the evening. Kate and I had a chance to taste the rum. The Koloa dark rum and spiced Hawaiian rum were both amazing. We rode a train around the plantation, ate our dinner, and watched the show, which featured an amazing fire act.
I ate breakfast at the hotel restaurant, to try it out. I decided not to go back again, at $30 for a basic breakfast served slowly. I walked along the beach and climbed on some lava rocks. I managed to slip and cut my legs and feet badly. I rubbed dry sand on them until the bleeding stopped, then I walked over to where the others were taking a “surfing lesson,” which turned out to mean sitting on a surfboard in the pool.
We discovered that the hotel's “kids club,” described in the guidebook, did not exist.
We had heard the locals talking up the Koloa Fish Market restaurant, so we went there for lunch. It turned out to be a tiny hole-in-the-wall with food that is cheap (the cheapest we've seen!) but tasty. It didn't have any seating, so we sat on the steps of the building next door while we ate.
We spent some time shopping. I bought a Hawaiian shirt.
Kate and I went for a scuba lesson in the afternoon. The instructor basically handed each of us a mask and said “put this on and dive.” It was easy—I always had this idea that scuba was difficult and technical—and fun, and left me wanting more. Kate sounded like she wants to get certified when we make it back home.
We ate dinner tonight at Keoki's Paradise, which turned out to be a great place. We might go back again another night. The highlights for me were my monchong fish with lemon butter sauce, and the carrot-cinnamon-pineapple muffins served before dinner.
After dinner we walked around the shopping center that Keoki's was in and bought a few souvenirs.
New year, new title. Last year.
We took off for Kauai in the morning. I both started and finished reading Red Shirts on the plane (it was disappointing) and started reading Babbitt.
We landed and picked up our bags and the rental car. I drove us to the Sheraton, stopping at a Mexican food truck for a late lunch along the way. We went swimming in the pool and walked in the surf.
For dinner we drove out to Brennecke's, a beachfront restaurant. There had been some confusion about reservations, so we had to wait a long time to be seated. The actual food was disappointing, and expensive.