Wednesday, September 30, 2015

British Columbia by boat Day 6: Tenedos Bay

We got up at 6:00am and drove away from West View, projecting an arrival at Prideux Haven at 11:00am. The drive out was pretty, but knowing what I knew now, I'd drive through Thulin passage instead of bothering to go out beyond Savory island. Not only is the return between Hernando and Savary gave us some shallow areas with tricky navigation that added unwelcome tension to the vacation.
It turned out that the guidebooks on the boat which had mentioned the mandatory speed limits in the Thulin passage neglected to mention that the speed limit was all of 8 knots, which was what the Stray Cat could do at maximum speed. In other words, as far as we were concerned, there werre no speed limits anywhere in the area.

Turning Sarah Point into Desolation Sound, however, all was forgotten as the natural beauty of the area just stunned us. Tall mountains that come all the way down to the sea greeted us, as did a bevy of sailboats, kayakers, and motor cruisers. We originally thought about going to Prideux Haven, but a quick look at Tenedos Bay indicated that not only was it closer, it was also very sheltered and had access to a warm fresh water lake for swimming.

Arriving at low tide, we looked at anchoring, but quickly decided that the harbor was too crowded for just one anchor, and so did what everyone else did by dropping anchor at around 25m and then backing the boat towards shore for a stern line. Larry unfortunately injured his leg climbing onto the rocks to tie the stern line, but he said it was OK. We backed with the boat 10' from the shore. Unadvisable with ground tackle that I didn't know well, but on the other hand, I hauled hard on the stern line without being able to shift the anchor. I'd had plenty of experience anchoring just off a shore, and felt confident that it would hold.

The reason you need to stern tie in these deep harbors is that the ground under the water is curved steeply away from the shore. If the wind were to shift the boat around while you were anchor'd thus, the anchor would simply hold no traction and lift off the ground, dragging or coming loose in deep water. In strong tidal waters, you had to have enough rode for high tide while not having so much rode on low tide that you'd swing onto shore, but on a high tide you'd actually get more space from shore, so it's OK to have what looks like a dangerously long rode when anchoring.

After lunch (which doubled as a way to observe the boat's behavior over a period of rising tide), I satisfied myself that the Stray Cat was in no danger, and we dingy'd over to the trailhead to Unwin lake. We discovered once again that our boat briefing was inadequate when we couldn't figure out how to raise the motor, but fortunately a group of people were leaving as we were arriving and showed Arturo how to push that button. We tied the boat down firmly as we were in tidal waters and I fully expected to come back to find that the rock we'd tied the dinghy to would be under water.

We hiked to Unwin lake, with everyone except Xiaoqin, Bowen, and I spotting a bear while we were there, indicating that we were in bear country.
Unwin lake turned out to have 72F water: warm enough to swim in, but not so warm that I could last for more than about 15-20 minutes in the water. Bowen, however, complained that it was too cold despite the wet suit, but everyone else got a chance in the water. We returned to the dinghy to find that indeed, we had tied it to a stone that was underwater, but since our tie-down had held, we were in good shape for going back to the Stray Cat, where we had dinner and settled in for what would be a windy night.

We'd checked the hand compass to ensure that we were going to be aligned with the prevailing wind that night, so I slept well, but at 1:00am was awoken by lights pointing into my eyes from other boats in the area. I wondered if things were going wrong, and so got up with the flash light to check the boat, but didn't find anything disturbing. I went back to sleep, and only discovered in the morning that one of the other skippers had panicked, dropped his stern lined, and moved out into the middle of the harbor to re-anchor. One benefit of being so close to shore was that the land really did act as a wind break for the Stray Cat, so we might have had a much easier night than those who had a longer anchor line.

Tuesday, September 29, 2015

British Columbia by Boat Day 5: Westview

True to our word, we got up at 6:00am, had a quick breakfast and coffee, and then left the dock, leaving Bowen island. It took us the better part of 60 minutes to actually leave the tip of Bowen island, illustrating again to us how giant Bowen island was.

The morning was beautiful, but there was next to no wind. Whenever we saw a boat with sails up, it would inevitably turn out that they would be motoring with the sails up for show. We passed several candidates for stopping for the night as we got to them too early: Smugglers Cove, Pender Harbor, We discovered that the starboard head wasn't working. The same owner who thought eliminating a V-berth was a good idea no doubt thought that an electric head would be just the thing to impress the folks. Unfortunately, those things are much less reliable than manual heads, and us charter people are the people to find out about that.

A call back to Aubrey gave us a bunch of trouble-shooting tips that weren't actually helpful, but since we were near the Powell River base, I thought we'd find out if their local mechanic could help us. The prospect of a working head therefore, drew us into Westview harbor under the direction of the harbormaster for both fuel and a slip for the night.


As we pulled into the harbor, we were told to back off and wait a bit while a giant motorboat "The Majestik" was leaving the fuel dock and making her way to her slip. I held off and saw this huge boat coming off the dock, with the skipper chattering with the harbor master asking questions. The harbor master seemed a little flustered but he managed to maneuver around the large piling in the middle of the harbor despite her misdirections.

We soon pulled into the fuel dock and filled up with both water and fuel. We then hosed down the head so it wouldn't stink from all our attempts to fix the head, and then headed over to the slip. I parked the boat gingerly while an audience of fellow yachtsmen watched to see if I was an incompetent who would destroy both my boat and theirs. The skipper of the Majestik impressed me by coming over and saying, "Want some help?" I said I'd never turn it down, and he quickly said, "Well, sometimes the help makes things worse."
After parking the boat to my satisfaction, everyone got off the boat while I waited for Larry, Cooper's Powell River manager to come by and see if he could fix our problem. My heart sank when I saw that the only tool he carried was a plunger! No amount of plunging helped, and I soon realized I was going to be stuck with one head for the rest of the trip. I did discover another idiotic thing the electric head did, however, which was to flush the toilet with fresh water, rather than salt water. Whatever it was that went on in the head of the owner of the Stray Cat, it wasn't one that concerned itself with long term cruising.

Since we didn't have an oven, we decided to figure out if the BBQ could bake frozen pizza. It turned out that it did, and did a fairly good (if slow) job at it. We made more friends with the owner of the Majestik, and he showed us aboard his luxury motor-yacht. With twin engines producing horsepower into the 4 figures, he could cruise at 20 knots and had a maximum speed of 30 knots. Throughout the rest of the trip, I would kick myself for not realizing that the Pacific Northwest wasn't a sailing destination, but was really a motorboat destination: one best served by motor-yachts such as Michael's.

Monday, September 28, 2015

British Columbia by boat Day 4: Bowen Island

We woke up and finished provisioning the boat, and by 9:00am, Aubrey, one of Cooper's mechanics, showed up to really show us the boat around. We found several more issues, including the main saloon's bed, which would not move up and down to double as a dining table. This was finally fixed, but it took her an hour or so. All this time, she was the most relaxed check-out person we'd encountered, and we still didn't get a chart briefing, as no one had actually been to desolation sound.
We then departed the slip, only to discover that we had left Xiaoqin's aunt behind --- she was using a land toilet and hadn't told anyone! We turned the boat around and motor'd back, and then Aubrey told us she'd left her cell phone aboard the Stray Cat anyway. As I backed the boat into the slip, I heard Aubrey say, "Oh wow, you can actually do this?!" I thought to myself, "Wait, if you're so surprised, why did you lend me the boat?" Xiaoqin's aunt came aboard and we drove away, leaving Vancouver behind.


When we first looked over the maps for the trip, we noticed that there was an island near Vancouver called Bowen Island. With Bowen aboard, we had no choice but to visit it for the trip. I originally thought it'd be a lunch stop, but given the state of the boat and how late we left the slip, we decided to stay the night at Bowen Island instead, and spend the day sailing to Bowen Island. It would turn out to be the only comfortable sailing we'd do the entire trip, so it was very much worth while.
Bowen Island turned out to be quite pretty, and we arrived in time to enjoy the sunset, a hike, a visit to the library, and of course, the gift shop to get Bowen Island T-shirts for Bowen. Our son's head was temporarily (I hope) inflated by everyone saying to him, "Welcome to your island!" That night, he asked me if there was a Piaw island, a mommy island, or an Arturo island. I had to explain that Bowen island was named after Captain James Bowen, not after him, but he was still pretty happy there was a Bowen island. I would later discover that there was second Bowen Island in Australia, named after James' brother Richard Bowen.

When Bowen first heard that there was a Bowen island, he would make statements like, "Bowen island is a giant island!" We would laugh, because that seemed to be a statement of conjecture from a 3-year old who didn't really know how to read maps. Now that we were on Bowen island, it was very clear that Bowen was right all along: Bowen Island was huge, with 3,000 permanent residents and plenty of room for visitors without feeling crowded.

We examined the tide tables and decided on a 6:00am start the next day.

Friday, September 25, 2015

British Columbia by Boat: Day 3 Vancouver

We got up early and headed over to the bus depot. I'd never seen a bus driver do so much paper work for what should be a common trip (the company ran multiple trips per day, in each direction), but the net result was that he ended up running late, and kept apologizing to every ferry worker as he bulldozed his way onto the ferry.
Once in Vancouver, the bus took a long time to deliver us to the bus depot, from whence we took a short walk over to the false creek ferry terminal and were served almost immediately by an aquabus taking us to Granville island.

The aquabus was fun, and a great way to view Vancouver's false creek. When we arrived at Granville Island, Larry Hosken met us at the dock and escorted us over to Cooper Boating. I will now confess that I'd left the paper copy of my sailing license at home, but it turned out not to be an issue: Cooper Boating is the most relaxed charter outfit I'd ever sailed with. Their idea of a warning briefing was a short 20 minute video reminding you that GPS is not reliable compared to using your brains and eyes. Arturo had arrived and joined us just in time for that video.

There was no chart briefing, and there couldn't be, since every person on staff I talked to about sailing up to Desolation Sound responded: "I've never been there!" Arturo, Larry, and I shrugged and then proceeded with moving into the boat and settling in.

The Stray Cat was a 38' Lagoon Catamaran, but it was the strangest layout I'd ever seen. It had a master-suite on the starboard pontoon, but it didn't take up the entire hull, leaving an empty V-berth shaped "cabin" that could only be accessed from a hatch. The saloon had next to no storage, and neither did the cabins, leaving us to dump most provisions on the shelves. On top of that, there was only a single 80 gallon water tank, but it was opaque so you couldn't tell how much water was in it! It was bizarre and strange. To top it off, they had a TV system with a high end sound system. If I had to construct an image of the sailor who owned this boat, I'd say that he was someone who'd run parties on this boat but had never done any extended cruising on it. At least the diesel engines were brand new.

We provisioned the boat and then had dinner. We were promised a full boat briefing the next morning, and hoped that we'd be able to ask some questions about the boat then.

Thursday, September 24, 2015

British Columbia by Boat: Day 2 Victoria

I'd originally planned to visit the Butchart gardens this day, but changed the plans because of the fireworks the night before, which was worth it. So this morning, we set out to explore the city and see Beacon Hill Park. The park itself was pretty, but after the Butchart gardens felt a bit of a let down. Beacon view, however, offered gorgeous views of the coast towards Washington, so after that we kept walking along the coast, where some sort of century was going on.
The coast walk took a while, and around lunch time we stopped at the farmer's market for lunch. Bowen decided he wanted to go back to the B&B to sleep (which caused us to become skeptical, but he did seem genuinely tired). On my way back to the B&B we stopped to pick up some fruit, chocolate, and Chocolate Ensure for Bowen. At the B&B, Bowen drank an entire bottle of Ensure, laid down to bed, and then after 20 minutes decided he wasn't tired enough to sleep after all.
Well, I had to buy bus tickets to Vancouver anyway, so we walked over to find the bus depot and buy tickets. After that, we went to a Victoria institution: high tea at the Empress hotel. When I tried to book this via Opentable the day before, I couldn't get a single table for 4 adults, but I could get 2 tables for 2 adults. Well, my jig was up as soon as my wife and I both presented our reservations (they were completely full: I saw the hostess turn away folks at the door), but they nicely put us into a 4 person table (plus an extra chair for Bowen). Looking at the setup, I concluded that they weren't hard up for space, but only had a certain number of dishes prepared for any given day, and once they ran out they were done.

I'd always avoided the high tea since it was relatively expensive and required reservations. It was quite excellently presented and the food was excellent, if diabetes inducing. The tea was good too, though we ended up with 4 boxes of Empress Hotel tea that I'm not sure we'd ever get around to finishing.

After dark, we got in a nice (if windy) walk around the inner harbor area, and hoped for good weather for a few days of sailing.

Wednesday, September 23, 2015

British Columbia by Boat: Day 1 Victoria

My wife, her aunt and uncle, and Bowen and I planned for a sailing trip to desolation sound. For various reasons, we had the trip cut short, but the original pitch for desolation sound sold the water temperatures hard (e.g., 80F water in Pendrell Sound). We were very skeptical (for reference, water temperatures in San Francisco Bay are around 60F, and we're much further south than British Columbia is. Despite that skepticism, the area is said to be beautiful, so we booked a Catamaran. The only Catamaran available in the area was down in Vancouver, but with 10 days we expected to be able to explore and still do the commute.

We started the trip with a flight from San Jose to Seattle, and then a transfer to a seaplane (by Kenmore Air) to Victoria. It was my first time on that sea plane, but it dropped us in the inner harbor, with the second easiest customs process I'd ever encountered on a transit into Canada.

From there, it was a short walk to our AirBnB stay, where hostess Naoko when she heard that we were headed over to the Butchart Gardens offered to call a taxi for us. When that didn't work out (British Columbia is an Uber-free zone), she ran back inside, grabbed exact change for our bus fare, and told us where to jump onto the bus.

The bus was crowded, as everyone was headed over to the gardens for the Friday night fireworks show.
The fireworks was impressive: the last time I was in the area, it had been a fountain and laser show. The bus, however, took a long time to show up for a pickup after the show, however, and despite the driver's attempt to catch up by not stopping at every stop, it took us a long time to get back to our B&B and catch some sleep.

Tuesday, September 22, 2015

Long Term Review: Garmin Vivoactive

It's been about 5 months since my original Vivoactive review. Since then, the watch has barely left my wrist! I don't even usually take it off to charge it, because I just plug the charger onto my wrist using a portable battery. I wanted to put the watch through extreme conditions before writing a long term review, so since my original review, I've:
  • Taken the watch on hiking, camping, sailing and RV trips
  • Swam in hot springs, cold water, sea water (both pool and open water)
  • Taken the watch cycling, sailing, tubing, and everything short of a scuba dive
The device has been outstanding in all ways, with reliable performance and of course, remained ticking despite everything I do (it's much more reliable than either my smartphone or my cell service!). The watch has enabled me to keep track of nightly wakings while being the skipper of a sailboat during a major storm in the Pacific Northwest, and it has allowed me to track hikes, bike rides, and swims almost on a daily basis.

By the way, here's why battery life is important: not only does the battery life needs to be long enough to be worn 24-hours/day in order to get sleep tracking data, it's also important as a measure of longevity. Modern lithium batteries are normally rated for 300 charge cycles before the charge capacity drops by 20%. If your battery's going to barely last the day, then within a year, the charge capacity is going to be degraded to the point where it won't last the day. A battery that goes a week between charges, by contrast, can easily go 5 years before the charge capacity is degraded, and even then it's a degradation from 7 days to 5 days or so. In other words, a battery that barely lasts a day is a built-in obsolescence machine, while the battery that lasts a week is designed to actually be useful for a significant lifespan.

There are a few bugs:
  • While driving, the device continues to tracks steps. There needs to be a "driving mode" that ignores steps, but then I'd forget to turn it off.
  • While on a sailboat, my walking patterns change and the device doesn't always register steps. (No big deal, though the "move!" alarm does get annoying)
  • The calories reading is laughably low. This is not a problem for me since I mostly ignore it and go with "how I feel" as far as eating is concerned. But if you're a pro Athlete weighing your food before you eat it, you probably want more accuracy.
As far as calorie-measurement is concerned, this is a general problem with Garmin's new "sensor pool" model of bike sensor pairing. In the old days (Edge 800/500), a sensor was associated with a bike. What this meant was that whenever you picked up a sensor by switching bikes, the device also knew how heavy your bike was, and could compute calorie output accordingly. In the new "sensor pool" model, you no longer have to tell your unit which bike you're currently riding, since it would pick up the sensor automatically. The flip side of it is that the device no longer knows how heavy your bike is! This is a serious problem, and would cause me to not consider the Edge 810/510/1000 series an upgrade for my use. For instance, when riding my triplet, I'd get 250 calories on the Edge 800 while my Vivoactive would read a less than 100 calories. That's because the triplet is north of 50 pounds and my son doesn't pedal that hard when going to school, so for the same effort I can only go so fast. If Garmin doesn't fix this, in the long term I could see myself going to great lengths to keep the 800 working rather than upgrade.

From my perspective, I could use a few more features:
  • Barometric pressure/air temperature sensor (I'd be OK with an external sensor like the Tempe)
  • A tide-table/app would be really useful for when I'm sailing in tidal regions.
But seriously? I highly recommend this watch despite its minor flaws, and on those long trips that I take, I don't see any other smart-watch coming even close to being rugged enough or having sufficient battery life to keep up with my lifestyle (I certainly didn't see anyone else with a smart watch on my last two adventure travel trips). This one nearly does it all, and that which it doesn't do, few other devices do as well, and none in its price range.

Monday, September 21, 2015

Review: French Kids Eat Everything

I checked French Kids Eat Everything out of the library because it seemed entertaining in the way Bring Up Bebe seemed to be, rather than because I thought I might learn something from it. After, as a Chinese person who eats nearly everything, I never thought my heritage would allow my children to not eat everything. An observation of my wife's Chinese relatives indicated that my assumption is absolutely untrue: mainland Chinese are just as bad as Americans in being averse to trying new foods, and I predict that in the coming decades the obnoxious Chinese tourist will replace the obnoxious American tourist in reputation for being loud, mono-lingual --- especially in the assumption that every Asian-looking person speaks Chinese --- and unable to tolerate different cuisines.

French Kids Eat Everything's written by a Canadian from Vancouver. Also a non-engineer/non-scientist, the book's full of generalizations unpacked by studies, and an over-emphasis in comparing her/her family's bad American poor eating habits. Given the huge diversity in cultures in American backgrounds, it's poor practice to generalize. In particular, I've encountered a French person in Japan who was having a miserable time because she refused to learn to eat with chopsticks, and couldn't stand rice every day. Clearly, the culinary culture and education of the French does not extend to learning to eat Asian foods, and the French can be just as obnoxious about being unable to adapt as anyone else can be.

Nevertheless, the book has a few tips (she calls them "rules") for parents with kids who will only eat a few foods:
  1. Parents: You are in charge of your children's food education
  2. Avoid emotional eating: food is not a pacifier, a distraction, a toy, a bribe, a reward, or a substitute for discipline.
  3. Parents schedule meals and menus. Kids eat what adults eat: no substitutes and no short-order cooking.
  4. Food is social. Eat family meals together at the table, with no distractions.
  5. Eat vegetables of all colors of the rainbow. Don't eat the same main dish more than once per week.
  6. For picky eaters: You don't have to like it, but you do have to taste it. For fussy eaters: You don't have to like it, but you do have to eat it.
  7. Limit snacks, ideally one per day (two maximum), and not within one hour of meals. In between meals, it's ok to feel hungry. At meals eat until you're satisfied rather than full.
  8. Take your time, for both cooking and eating. Slow food is happy food.
  9. Eat mostly real, home made food, and save treats for special occasions.
  10. Eating is joyful, not stressful. Treat the food rules as habits or routines rather than strict regulations; it's fine to relax them once in a while.
If you've read up on recent nutritional literature, such as In Defense of Food, none of this should be a surprise.  In particular, #5 and #9 are very common advise. What's controversial is #3 and #7. As a Dad, I'm very OK with letting my son get hungry and denying him food. I definitely don't view hunger as a bad thing at all. But for most American and Asian mothers, this is a no-no. I suspect this comes from food being scarce during the Great Depression, and of course, Asian famines were part of the history. In any case, good luck convincing your significant other to go with #3 and #7. In particular, American schools with their snack times that seem to go on through all parts of the day probably make it impossible to stick to rule #7.

In any case, the book does do a good job explaining how the French social system supports a fairly healthy eating culture. On the other hand, it's clear to me that it's not perfect: having had French meals that took over 2+ hours to serve and that still leave me fairly hungry at the end of a long day of cycling, I think that there's a lot to be said for American-style flexibility and portioning if you're involved in a lot of heavy physical activity and would just like to go to bed after a long hard day. And I'm not sure the author herself has had enough experience with a wide variety of food cultures to understand that the Asian cultures themselves have reasonable food cultures without having insanely long meal-times and school-enforced rules about eating. In particular, I've seen enough French people balk at what they consider "foreign Asian food" to find it hard to believe that the French have a complete (or even adequate) answer to modern society's dining crisis.

Despite all this, I'd recommend this book to the typical parent. In particular, if it helps convince you that it's OK for your child to be hungry because he refused lunch, and that in the long run that'll make him healthier, I think it's well worth your time to read it.

Friday, September 18, 2015

Indexing Google's Source Code

I couldn't talk about this before, but now that Wired magazine has disclosed the size of Google's code base (2 billion lines), I can discuss my authorship of gtags and what it did for Google, as well as some funny stories arising from that.

I wrote the first version of gtags in 1991 (yes, gtags is older than Google!), when I was at Geoworks. GEOS was several million lines of assembly, including every freaking app written for that OS. Since every object could potentially call any other object, the entire code base was relevant. Needing to get my head around that code base, I tried to build a TAGS database and that immediately caused my Emacs to start swapping. The performance was unacceptable.

The core insight was this: there's no reason to use a disk based search on a TAGS database. Stick the entire database into RAM, and use a hash-table to lookup your keywords, and search performance would go from multiple seconds (half a minute in some cases) to sub-second response time. So one weekend I coded up the hash-table, wrote code to load up a TAGS database into memory, and implemented a simple UI that let me browse code in Emacs. Soon, I enjoyed sub-second search times and could grok code that would have been impossible to do any other way.

If I ever needed validation that the tool-building approach to coping with large-scale software was the right approach, this was it. Once the senior engineers (remember, I was an intern at Geoworks then) got hold of the tool, I saw even loyal-vi users switch over to Emacs just to get their hands on the code browsing functionality (going from half a minute per search to sub-seconds was critical).

After I left Geoworks, most of my code was in C, C++, or other high level languages. Computers got so fast, and IDEs so sophisticated that I never dealt with a code base that couldn't be loaded into the IDE. It seemed to me that the need for such functionality had been obviated by ever more powerful machines.

That was, until I joined Google in 2003. By then, Google's code based was already approaching 1 billion lines, but in multiple languages. I needed to wrap my head around that code base in a hurry. Various teams were using random tricks to subset Google's code base into their IDEs, which I thought was a kludgy and unsatisfactory way to work. So in my 20% time, I rewrote my old tool using Google infrastructure (thanks to Craig Silverstein, who was the only person who believed in my code enough to waste precious time code reviewing it --- even then he was skeptical that my tool would be widely used or even substantially useful, given the huge amount of effort people had put into subsetting the codebase). I coded up the UI again in Emacs Lisp. I actually had to put some effort into the UI this time, given that C++ (and Java) overloading meant you had multiple search results for any given search term. Thankfully, Arthur Gleckler came in to lend a hand. Reading Arthur's Lisp code was like reading poetry: you can't believe the succinctness and elegance that can be expressed in so little space. It's worth your time to learn Emacs Lisp just so you can read Arthur's code.

Just as I expected, gtags took off in a huge way inside Google's engineering team. (By the time I left, 2500 daily active users was the metric, or about 25% of Google's engineering workforce. The internal tools team did a survey once and discovered that nearly every engineering workstation had a copy of Stephen Chen's gtags-mixer running on it) There wasn't a whole scale conversion from vi to Emacs though: Laurence Gonsalves stepped in and wrote a vim script that emulated the Emacs code. I don't even remember how I managed to do the code review for that checkin, but anything to help gtags, so I must have just gritted my teeth and done the code review or asked Laurence to find someone competent to review it.

But I wasn't nearly even close to done. Because of the huge amount of ambiguity and overloading involved in C++ and Java, I wanted gtags to do a better job of ranking the results of any given search. Phil Sung took a first crack at it, introducing Sung-ranking and later on, an include-rank that mirrored page-rank, except for code. Stephen Chen solved the problem of how to intermix protocol buffer files into the search results. Matei Zaharia (now a professor at MIT) spent a summer integrating a parser into the indexer for gtags, so that it was no longer a dumb lexical scanner but a full-on type-comprehension system for both C++ and Java. He also designed and implemented incremental indexing on Google's code base, no mean feat. Leandro Groisman and Nigel D'Souza both also made major contributions to gtags.

For several years, I had the entire Google source repository downloaded and checked out on a dedicated gtags indexing machine sitting under my desk. It was a standard underpowered workstation of that era: dual core, 2GB of RAM, and 500GB of disk: it had a special p4 client that eliminated the need to download any binary assets, since it was only interested in code! It was probably a major security hole, but I figured since Bill Coughran knew about it, I wasn't violating any corporate policies.

This illustrates a very important point: 2 billion lines of code sounds like a lot of code, but if you do the math (assuming 50 characters per line) you'll get only about 100GB of data (uncompressed). After dropping comments, white space, and lines that don't perform any declarations, your index is going to be pretty tiny, and you need to split that code base into several corpora (C++, Java, protocol buffer declarations, python), so each individual server could easily handle its entire corpus in RAM without any fancy sharding. Too many people get caught up in trying to apply fancy Google techniques required to manage terabytes of data when they're dealing with tiny amounts of data that fit into RAM and can be managed by traditional programming techniques.

In any case, gtags was a very hardware light project: it never took more than one machine to index all of Google's code base (and we never had to apply any fancy MapReduce techniques), nor did the serving cluster ever exceed more than about 10 machines. We came close to maxing out the RAM available on 32-bit machines for a while, but between Phil's string table optimization reducing memory use by 75% and the switch to a 64-bit architecture we never ever had to split indexes for any given language (there was a server for each language) across multiple servers. Those servers were under-utilized of course (they could probably have served 25,000 or 250,000 users at once), but on the flip side, you always got sub 10ms response times out of gtags. We switched from dedicated gtags server desktops sitting under people's desks to Google's cloud internally fairly early on, with Ken Ashcraft doing much of the work of converting gtags into a borg-ready service.

This came to a head when Google added the China office sometime in 2005 or so. After that, the powers that be decided that high intellectual property (HIP) code needed special permissions to access. Since I wasn't HIP enough, I simply stopped indexing that code. This burdened the HIP people so much that eventually some of them (including Sandor Dornbush) contributed to gtags. A HIP guy would take on the burden of downloading HIP code and indexing it using our indexer, and then put up the gtags server with that code behind a HIP firewall. The gtags-mixer would then be configured to talk to the HIP server and mix-in the result if you were HIP enough.

One of my prouder moments at Google was when Rob "Commander" Pike came to me and asked me how gtags worked. It turned out that he didn't want to talk to the gtags mixer or the gtags server, but just wanted his programming environment/editor to directly grok the output of the indexer. I was happy to give him access to the index for him to do whatever he wanted with it. I forget the mechanism by which this happened: he might have simply scp'd the index over to his machine, or I might have had the indexer push the index to his machine whenever it was done. This was great, because Rob became one of the folks who would notice whenever the indexer was broken because the file wouldn't get updated!

In any case, as with many things at Google, after I left gtags got replaced by some cloud solution that took way more resources than me, Arthur, and a bunch of interns, and I'm sure everything I wrote has been long retired by now, with the possible exception of the Emacs Lisp front-end.

Even after I left Google, gtags paid me back. Soon after I met my wife, she talked to some of her friends at Google about who she was dating. One of them did a p4 lookup on my changes, and said to her, "Hey wow, this guy has code commited everywhere, even the protocol-compiler." So I guess that worked out as far as a back-door reference check was concerned. (That change in the protocol-compiler was necessitated because I wanted to inject a clue in its output: that clue enabled the gtags indexer to map a generated C++ source file back to its original .proto form --- it was far easier to do that by having the protocol compile emit the clue than to try to guess --- it was a trivial change and Sanjay approved it in seconds)

If it seemed unbelievable to you that during that period of time I had such an illustrious group of people on a tiny 20% project, it should be. But I maintain that the test of a high quality engineering organization is whether or not that organization is able and willing to invest time, money, and effort into building tools that enable that organization to move faster and produce higher quality code. Google met that test and passed with flying colors.

Thursday, September 17, 2015

Review: The Opposite of Spoiled

I checked out The Opposite of Spoiled hoping for practical tips on how to teach children about money. I got more and less than what I bargained for.

In particular, the people this book are written for aren't anywhere close to my profile. These parents are white, privileged, have ridiculous amounts of money, and don't spend time with their kids. If you're Asian, come from an unprivileged background, and don't take private jets to fly to your vacations, you're probably in no danger of needing to read this book whatsoever. To be fair, I've met a large number of people who meet the above category, so this is not to say that the book is useless. It's probably very useful for white rich people in the 1%. It just makes no sense to read or follow its prescription if you're not.

Here are a few examples: the book describes a common problem of over-parenting as parents waiting in line outside summer camps rushing to their kids with all sorts of goodies, seeking to outdo each other. These summer camps seem cushy compared to the kind of trips I've already taken my 3 year old on. I can't imagine that I'd ever worry that my son couldn't make it a few days without his iPad. He's made weeks without any kind of electronic device. I imagine parents who have no idea what backcountry camping is would have the kinds of challenges described in this book.

Another example: the book presumes that you want to teach generosity to your kids. If you come from an immigrant background, especially if you were brought up in Asia, you learned to value society over the individual. Your problem isn't teaching your kids how to be generous and nice, Your problem is teaching kids how to be sufficiently selfish that they wouldn't get stepped on in the extremely competitive (by comparison) American society. I remember being horrified by story after story ex-Googlers told me about political behavior from my peers all in the name of getting ahead. Most of those stories involved people of privileged stepping on H1B holders or taking advantage of people who valued societal niceties over every man for himself. (I myself have had people tell me that it was my biggest barrier to succeeding)

What are my recommendations? If you're a white person, please read this book and apply it to your kids. If you're Asian, you'd do far better by pretending this book doesn't exist. And don't worry about teaching finance to your kids. Just by being Asian your example would probably be sufficient.

Wednesday, September 16, 2015

Teton/Yellowstone RV Trip: Tips, Conclusions, and Brief Equipment Reviews

When I planned the trip, the thought was that Bowen would love it, and I'd be indifferent. The reality was that Bowen loved it, but I constantly chafed at driving a giant-ass RV around. The fact is, there were too many roads in the National Parks that aren't accessible if you're driving an RV. If I were to do it again, I'd take the advise that the owner of Utah RV Rental gave to me as he was driving us to the airport: rent a towing vehicle and a trailer. That way you can dump the trailer in the campground and drive around in the towing vehicle and still access all the nice roads. Apparently, it's even cheaper! The reason he didn't recommend it to first-time RV renters was that it makes backing the vehicle much harder.

But beyond that, the biggest problem is that the Tetons and Yellowstone are just way too crowded in the summer. I don't enjoy spending time in traffic jams to begin with, but having to do so on vacation makes things even worse. I've always visited those areas in September, and never realized how much worse it was in the summer. And the reality, of course, is that my many summers in the Alps have spoiled me: neither the Tetons nor Yellowstone look pretty enough to me to justify the effort, and I'd take a week in the Alps over 2 weeks in those parks any day. (As far as I'm concerned, Glacier National Park is pretty much the only park in the US where the natural beauty comes close to what you can get in the Alps)

Finally, getting a good experience RV camping is much the same as getting a good experience in any outdoor endeavor: let the weather drive where you go and what you do, and don't let any plans disrupt that principle. In the summer, your early morning hours are by far the most valuable hours in your day, and picking what you do then strongly determines how smoothly the rest of the days go. If that means you wake up early, do it!

Several pieces of equipment were standout useful during the trip:

  • External Battery Packs: The RAVPower 10400mAh paid for itself multiple times, keeping my phone charged while driving the extremely long distances. The 3200mAh bank was also useful because it incorporated a flashlight, which was useful for other members of the party.
  • Garmin Vivoactive: Look for a long term review to come in the future. But let's just say that I'm very satisfied with this device, and it's really as good as it gets.
  • Bestek Inverter: You'll typically drive a lot more than you'll run the generator on this trip, and this handy and inexpensive device was what allowed me to keep my CPAP battery charged and ready for those nights without power. A literal life-saver.
  • Nokia HERE: Google still doesn't acknowledge that there's a world in which you won't have internet access everywhere. Well, Nokia HERE allows offline navigation, search, and routing. It's also a ton less power hungry than Google Maps. The download interface for maps is well done, and reliable. This is the must-have app if you're going to visit National Parks or going outside cell signal range.
  • Retevis Walkie-Talkie: Since cell signal doesn't work, if you have a big party, you want to be able to use walkie-talkies to coordinate when people wander around. At $55 for 3, these proved reliable and useful. Well worth the money.
  • Sony SBH52: If you have to manage a toddler while potentially having to make or receive phone calls, a bluetooth headset is a must. This one is hard to beat because it's water resistant (even the charging port is sealed), is extremely loud, and even better, when phone calls need to be made, you can remove the ear-buds and hand it to other members of the party to treat as a normal phone. I spent many hours driving with the earbuds in my ears so I could hear the directions from Nokia HERE in my ear while the kids and adults in the RV were talking at the top of their voices.
I doubt if I'll do another trip like this any time soon, but if you're going to attempt one, I hope these tips help.

Tuesday, September 15, 2015

Teton/Yellowstone RV Trip Day 15: Ogden to Salt Lake City

We got up early, drained the RV of all the essentials, and drove it back to Utah RV Rentals, where the checkin process revealed that we'd driven 300 miles more than our free allowance, used up 3.5 gallons of propane, and only used about 4 hours of generator. We got our free ride to the airport, but since our flight didn't depart till 9:50pm, and Delta wanted $50/person to fly standby on an earlier flight, we elected to spend the money by renting an SUV instead and driving up to Park City to have lunch, dinner, and enjoy the mountains.


Park City had these fun ski-resort things to do in the summer, like the Alpine Coaster, the Alpine Slide (which Bowen loved because he could do the controls, and so he did it twice, once with me and once with Grandma).

It's a nice town by American standards, but of course nowhere as picturesque or built with good taste as the equivalent European ski towns I've visited in the past summers.

The flight was easy and non-descript, and we were happy to be sleeping at home instead of a cramped RV.

Monday, September 14, 2015

Teton/Yellowstone RV Trip Day 14: Lava Hot Springs to Ogden

We went tubing in the morning, with Bowen hobbling his way to the rental shop, and then hobbling to the tubing put-in. I was very impressed that the little guy lived up to his word. I was actually a little concerned about the tubing portion, because the tube was constructed in such a way that he could only hang on to one handle at a time. Fortunately, the river was shallow and I could maneuver the tube using my feet. Keen sandals have proven their worth to me over and over again, and they did not fail me this time.

I eventually figured to have him sitting up, while I held on to his life jacket over the whitewater sections. It was by no means an easy balancing act, but it was safe under those very mild conditions. With his low walking speed, we could only manage one run in the hour we had, but he didn't protest (probably because he was tired from all the walking).

We drove the vehicle down to Ogden, where we found an RV site with full hookup and excellent facilities, including a swimming pool. We ate out for lunch to celebrate the end of the trip and the last night of camping, and started the job of packing everything.

In the afternoon, I took Bowen to the swimming pool, and spent a couple of hours there because it was so hot. We made friends with a 10-year-old girl who started talking to us by saying, "Are you Chinese? Because I don't like Chinese people." These little moments make me understand why some people willingly work with children: there's a directness and open-mindedness there that disappears when humans become fully socialized, ironically.

When all was packed, we got ready for the end of our adventure and returning our RV the next day.

Saturday, September 12, 2015

Trip Index: Grand Tetons, Yellowstone, and Sawtooth Mountains RV Trip

In August, Bowen, my parents, and two of Xiaoqin's relatives and I took an RV trip from Salt Lake City up through Grand Tetons and Yellowstone National Parks, and then back down to Salt Lake City via the Sawtooth Mountains. It was 1600 miles of driving, and many days of camping, swimming, and hiking in the area.

Because Google Photos can use up all your e-mail quota (that's right, some idiot at Google thought it was a good idea to commingle quota from a critical service with quota from a 'nice-to-have' service that has no way for you to manage quotas), I've switched away from using Google photos or Picasa to using OneDrive for photo sharing. OneDrive is slow compared to Google photos, but at least I won't accidentally use up critical quota, and it comes with decent quota management tools.

This page also serves at the central index for my day-by-day trip journal.


Friday, September 11, 2015

Teton/Yellowstone RV Trip Day 13: Wood River to Lava Hot Springs KOA

We woke up to clear skies and drove down to Sun Valley where gas was cheaper (though not cheap) and added gas and bought a few more groceries.

Our destination for the day was Craters of the Moon National Monument.Doug had told me that it was at most half a day, but the reality is that there was a lot to see if you wanted to see every sight. The weather was fortunately a lot cooler than it had been in the past, and we luckily happened upon a ranger guided hike to one of the lava caves. As a result, not only did we get great explication, he also told us that the Indian Tunnel could be traversed safely and we could go through the cave and pop out on the other side like a ground squirrel. So that's what we did. It was  a lot of fun but it consumed quite a bit of time, so we had to move after that.

Our destination for the day was Lava Hot Springs, which not only had Hot Springs but also a swimming pool with water slides, etc. We found a campground with full service but the only site available was a back-in site with lots of obstacles which required delicate maneuvering requiring no less than 3 spotters out of the vehicle providing directions. It wasn't that hard and we were never in danger but it required a lot of patience, fortunately something I'd learned to have when parking sailboats.

After dinner, Bowen wanted to go to the Hot Springs, so there we went. But after half an hour he stubbed his toe on something and started bleeding, so I had to take him back to the RV. He wanted to do the tubing on the river the next morning, but since I'd have to carry the huge inner tube, I couldn't carry him at the same time, so I told him that he had to be able to walk the next morning or we couldn't do any tubing. He nodded and agreed to go to sleep early so we could go tubing.

Thursday, September 10, 2015

Teton/Yellowstone RV Trip Day 12: North Fork Village to Wood River National Forest Campground

We left North Fork Village at a leisurely pace, heading up towards Stanley, which was strongly recommended by others. Near Stanley, we asked about where to go, and a local river guide told us to head into Red Fish Lake. Upon entry into the area, we noted that all the campgrounds were listed as being "full."
Despite the free parking area being extremely over-crowded and noisy, we found a paid day use parking site overlooking a swimming area that was serene by comparison. We paid the $6 fee and then went swimming. After the swim we did a short hike along the lake but discovered (not unexpectedly) that the trail was nowhere as well-maintained as those found in National Parks. It being 4:00pm anyway, we headed out of the area to search for a night to stay.

We visited several more national park campgrounds, but all were either full or didn't take RVs. National Forest campgrounds aren't monitored very well, so even if the sign outside the campground (we tried the one at Alturas Lake) says "open", you could easily drive in and discover that it's full. We weren't even close to being tempted by the campground at Smiley Creek.

We headed over the pass out of the Sawtooth Mountain area. The turnouts offered beautiful views, and we stopped several times for photos.
On the descent, we found Wood River campground which was open for RVs. We drove in and found only one spot open, site #20. We parked and I walked over to the campground host to pay, but once there discovered a beautifully shaded site next to her was available. Being no dummy, I quickly paid her for site #3, and then ran back to drive the RV over before anyone got too settled.
Wood River was a beautiful campground, including a small hiking trail that was quite pretty and easy. We enjoyed our stay despite the lack of power, as we managed to hookup to a campground hose and got unlimited water.

Wednesday, September 09, 2015

Tetons/Yellowstone RV Trip Day 11: Bozeman KOA to North Fork Village

The Bozeman KOA provides breakfast as part of the package, so we got up in time to eat the all-you-can-eat pancake breakfast. It was reasonable, and even the coffee didn't taste like water. Then the windshield guys showed up and replaced the windshield in a surprisingly short amount of time. Then it was time to visit Carl Strong, with whom I'd made an appointment the day before.
Carl worked in a workshop behind his home, and it was all laid out so he could produce a new frame every week. I'm still riding the replacement frame he made for me after the first one broke. The geometry is the best I've ever ridden, and I never get on the bike without thinking about what a great ride it is. It was nice to see the birthplace of my ride, and Carl and I chatted about cycling and the state of the industry a little bit, and I tried to convince him that touring without support in the European Alps is the thing to do.

I picked Carl's brain about where to go next. Like Douglas Wiegley, he suggested the Sawtooth Mountains since Glacier National Park was way too far to go. He provided several strong suggestions, including to gas up before entering the Wise river valley, which proved to be valuable advice. He also suggested visiting the Montana State University's Museum of the Rockies before leaving Bozeman, which we did.

It's a good thing we did, since my wife called while I was at the museum asking me to perform a series of transactions which involved fetching documents, finding a notary, signing it, and then sending those documents back via Fedex, which would have been much harder to do anywhere else. I felt like an RPG character on a fetch quest walking around in the 90 degree heat, but the flip side of that was that everywhere I went, everyone was very sympathetic and bent over backwards to help me. Even the notary public waived her customary fee when she saw my condition.

After that, it was time to go, and we did exactly as Carl Strong suggested, gassing up the RV at the precise gas station he told us to before heading into the Wise river valley. Along the way, we got to see the Big Hole National Battlefield, which depicted the war between the Nez Perce and the USA.

Then it was a long drive, but the place was beautiful and the road anything but boring. It was even more fun sitting in an AC cab than outside in the heat, so we only stopped at 5:00pm at the North Fork village campground which had nice river access and full hookups.

Tuesday, September 08, 2015

Tetons/Yellowstone RV Trip Day 10: Bridge Bay to Bozeman Hot Springs KOA

I woke up determined to beat the traffic jam and get to Mammoth Hot Springs before the crowds, so we managed to leave before 7:30am.
Arriving at Mammoth hot springs at 9:00am, we managed to see most of the sights there under cloudy skies and light rain before most of the tourists arrived, and then headed back down to boiling river for a perfect busk in the hot springs before leaving the park.
We headed out the park and upon the advise of one of the folks we met at boiling river, headed straight for Livingston and Mark's In & Out Burger. It was cheap and excellent, and then we drove towards Bozeman.

Because of the huge amount of construction in Yellowstone, our windshield had cracked. When I called the rental company, they were singularly unsympathetic, and told us that we were stuck repairing it. Fortunately, the folks we contacted in Bozeman gave us a quote and promised us a repair the very next morning.

Since it was my mom's birthday, we went out to a steak house in celebration for dinner. It was excellently priced, with very tasty steaks. I was impressed. We ended up staying at the Bozeman KOA next to Bozeman Hot Springs, and so that night paid the discounted entrance and enjoyed another busk in the hot springs, though in a much more artificial environment than in the National Park. Having had enough of warm springs, Bowen decided that he'd rather swim around in the cool pool instead, which was fine by me.

It thunderstormed that night, but we enjoyed having power, water, and clean rest rooms for a change after "dry camping" for 3 days in Yellowstone.

Saturday, September 05, 2015

Teton/Yellowstone RV Trip Day 9: Lake Yellowstone, Tower Falls, and Boiling River

The weather looked nice, and the forecast was for poorer weather the next day, so we checked out a motorboat and went on Lake Yellowstone.
The boat they gave us was superfast, and we made it all the way across the Lake to Steamboat Springs at warp speed, and returned the boat in time to get in the RV, and head out to the Roosevelt area with Tower Falls in mind.

Starting at 10am instead of at 8am, however, meant that we faced traffic jams. So what ought to be an hour drive turned into an hour and a half, at very low speed. Tower falls was disappointing, but the area next to it wasn't, with lava flows that had solidified into what looked like straight columns chiseled out of sheer rock.

It was very hot at this point, but also slightly past noon. We had lunch with the generator running and air conditioning on the whole time but it made next to no difference. After lunch we walked around and then headed over to the Mammoth Hot Springs area, not to see the Hot Springs, but to visit Boiling River to sit in the warm baths.
It was very warm, but the Hot Springs was a lot of fun anyway, and Bowen loved it. By the time we were done it was way too late to see Mammoth Hot Springs and still avoid driving in the dark. The perpetual traffic jam ensured that it was dusk by the time we got back to Bridge Bay, but we still had sufficient like to dump the sewage and take on fresh water.

I remembered that there was a picnic area on gull point that we passed earlier that morning on the boat. We drove over there but it was already taken. Fortunately, there was a turnout just down the road that was both flat and empty, so while we didn't have picnic benches, we could eat and shower on the RV and still enjoy the view of Lake Yellowstone before returning to sleep in the canted campground.

Friday, September 04, 2015

Teton/Yellowstone RV Trip Day 8: Yellowstone's Grand Canyon

We woke up fairly early, ate a quick breakfast, and headed north towards the Canyon area of Yellowstone. I'd thought about booking tours in the area so I didn't have to lug the multi-ton RV around all the time, but the reality was that everything I was interested in was already booked up. With the giant RV, I thought I'd use most of the day to see the Grand Canyon area, and then come back to do laundry near the lodge.

We saw Bison on the way to the Canyon area. I would learn to hate the Bison, because they would create traffic jams whenever we had to traverse this section, but this early in the morning it was no problem. The Canyon area of Yellowstone looks impressive, but you really only need to see it once in your life. Seeing it a second time felt kinda boring. Yellowstone's not one of my favorite parks. (My personal favorite is Glacier National Park)


I was determined not to have dinner or shower in the campground at that awful canted site that evening, so after laundry, I tanked up the RV and we plonked ourselves right in front of the Lake Yellowstone Hotel right on the vista point near the beach. We probably ruined the view for those folks paying $600/night to stay at the hotel, but we had a flat parking lot and enjoyed views of Lake Yellowstone for the evening.

After dinner and showers, we headed back into the campground and slept canted. It wasn't comfortable, but at least our bellies were full and we were showered.

Thursday, September 03, 2015

Teton/Yellowstone RV Trip Day 7: Colter Bay to Bridge Bay



After my memories of prior visits to the Teton National Park, the actual sunrise was comparatively disappointing. A fog bank had settled in before the Teton range, obscuring our views of the mountain and denying me the opportunity to shoot the alpenglow. I tried as best as I could but having only the Canon S100 with me and not having ideal conditions made it difficult to extract a photo I would be happy with.

After breakfast, we moved the RV out of the park. The idea was that we could take our time on the boat while reserving a picnic area for lunch and possible swimming in the Bay. The boat rental was fairly straightforward and surprisingly generous. We had a fairly restricted area we could move the boat around in, but other than that we had complete freedom to explore provided we didn't beach the boat or damage the motor.
From the boat you get a good idea of how huge Colter Bay and the lake is, but it was fairly non-descript otherwise, though we did manage to get nice views of the mountains now that most of the fog had been burned off.
After that, we went into the picnic area, where we changed into swimming trunks in our RV and then went onto the lake to swim. It was too cold to swim for long, but Bowen in his wetsuit actually came into the water and swam around in it a few times, putting everyone else to shame.

After a picnic lunch at the gorgeous picnic area, we filled up our gas and drove back into Yellowstone Park. Late in the afternoon, there really weren't many places to stop for pictures when you have a 32 foot RV. We got into Bridge Bay and had to do "dry camping" for the first time on the trip.

Pulling up the RV into the dump site in order to dump the sewer and pick up water, I was fortunate in that the folks behind us knew what they were doing and told me what I was doing wrong. There are two separate feeds into the RV for water. One of them filled the water tanks, while the other one was a direct connection into the internal plumbing for when you're hooked up. If you turn on the water pump inside the RV, that draws water from the tanks when you turn on the tap. If you're actually hooked up, what you need to do is to actually turn off the pump and let the water pressure from the direct connection feed drive the water flow. So I'd been driving around with the water tanks empty, which is no big deal since I was hooked up every night, and probably helping with my gas mileage.

In any case, we managed to get the water tanks filled up and then went to our camp site and discovered to our horrors that the site was canted: the RV listed heavily to the right, and we'd all be sleeping tilted for the next 3 days. It also made cooking and cleaning a pain in the neck. It being late in the day, I decided to bear with it for the evening and then figure out a better solution the next day.

That evening, on a walk, we saw the elk who'd been lurking around the campground.

Wednesday, September 02, 2015

Teton/Yellowstone RV Trip Day 6: Flagg Ranch to Colter Bay

The morning woke us up to rain and fog. It would be silly to take a boat out in this weather, but Old Faithful, Paint Pots, and the Geysers in general are immune to poor weather, so we went with the flow rather than trying to fight mother nature.
We arrived at the Old Faithful Area at 9:30, which meant that the parking lot was mostly empty and we did not experience any traffic jams. Not only could we leisurely lounge around waiting for Old Faithful to erupt, we could also look at the maps to see that Daisy was also due to erupt at a reasonable close time, so we could get 2 geysers for the price of one. I'm glad we made the effort to see Daisy, as compared to Old Faithful it's quite a bit more impressive, with an eruption time that felt significantly longer. Without the huge crowds in place, it was also a much more intimate experience. After that, we took a leisurely walk back via the various pools and geysers, and then visited the paint pots before heading towards Colter Bay.
By then, the skies had cleared some and we stopped by Lewis lake for some pictures. But what really took our breath away as we approached Colter Bay was the open views of the Tetons, now in its full summer glory.
By the time we got to Colter Bay a frenzy had over-taken me, and rather than try to find Kevin and his family to meet up, I went full-on into photo-mode and tried to find a location to shoot the sunset (and the sunrise the next morning). Colter Bay is very close to the beach, and the picnic area is easily the most picturesque in the park:

We had dinner and made plans to see the sunrise the next morning. Since we'd already seen Old Faithful et al, we weren't in a particular hurry to reach our campground the next day, so I proposed that we spend most of the day at Colter Bay rather than trying to reach the Bridge Bay campground the next day.