Tuesday, September 04, 2007

An Oakland Shade

Wow, that was a whiny post last weekend! Fortunately, this weekend was much better... after all, Labor Day, right?

My friend Jenny threw a party this weekend, a holiday barbecue. She had a problem: there's been a heat wave lately, and her house was going to be positively sweltering. She came to me, a friendly neighborhood engineer, to build a shade.

The party was Sunday, so on Saturday I went over there, scoped out the project, took some measurements, and made a list of supplies. Then, off we went to the hardware store to get supplies, which naturally deviated considerably from my list. (Anybody who likes going to hardware stores understands what I mean. Computer stores too.) Three canvas sheets, some rope, twine, dowels, and various fasteners. For once, I needed exactly what I got! (Well, I had a small pack of garden stakes left over.) A couple of supports, stitching together the canvas, some guy lines, and the job was done.

It's not the best shade in the world, but for an afternoon job, I liked it. I also had a lot of fun building it; I may have had more fun building the shade than going to the party! It reminds me of something I used to do when I was a kid called Christmas in April. A lot of people would get together and rebuild the house of somebody who really needed it, and couldn't afford it; usually, this was an elderly or severely disabled person on a very minimal income. We'd have people who knew what they were doing well enough to lead our efforts, plus lots of hands helping get the work done.

I like building stuff; I think I get that from my Dad. I think I was first attracted to computers because I could make my creations come to life, from my mind to the computer. Even so, there's something satisfying about building something in the physical world.

Monday, August 27, 2007

Why This Post Isn't About The Javascript DOM

My original title for this post was "Why The DOM Is The Best Lousy Thing We've Got". I guess I'm not feeling terribly creative with my titles tonight. To be honest, I'm not feeling terribly creative at all tonight. It was a terrific week, but a pretty lousy weekend. I had some unexpected work take up all my time, and it put me in a sour mood for most of the weekend.

It's strange how creativity is so dependent on mood. I'm not just talking about blogging, here; I'm talking about coding, too. When I'm doing well, I can code anything, start to finish, piece of cake. When I'm doing poorly, then even writing hello.c is a huge effort. The work I talked about earlier involved some coding at the end of it— nothing big, just a few dozen lines to shove some data around— but if it weren't for that, I probably would have had a really lousy weekend, instead of the merely lousy one I had.

Ok, now I'm just sounding needlessly whiny. If you start seeing emo bands show up on my weekly top ten chart on the sidebar, send help. Like a box of kittens or something.

Anyway, where was I. Oh, that's right, having a lousy weekend because of work. I really started thinking that maybe I made a mistake taking this job; maybe I was more cut out for the Juniper job than the Google one. Now, here's the irony. When I left Friday, I was writing a document that includes advice to people who feel that way... pretty much saying, "No, it's normal, everybody feels that way, you'll do fine". (This is advice I had previously given Cheryl, and also talked about more in my blog.) And then this weekend I get hit with this wave. Wasn't expecting it.

I did get some useful stuff done for myself this weekend, though. The office is in much better shape, with the bookshelf moved, lighting hung, and desk accessories connected. Even the living room looks cleaner for some reason. At the end of it, I wanted to relax by writing some code. I was going to learn some SVG. Still, as I sat down to work on it, nothing came to mind. I hate hacker's block.

If you haven't read Jhonen Vasquez's "I Feel Sick", it's about an artist who is suffering from artistic withdrawl once she takes a job at a big company. I hadn't read it, and didn't know what it was about, but picked it up tonight to read and forget about my bad mood. (Hint: the "Alice" soundtrack works well with Vasquez.) Y'know, that just didn't help me forget as well as I had expected.

Finally, I decided to write about a blog post I've been wanting to write for a while... I even alluded to it in a post from two weeks ago (when I refer to the "later, more technically-oriented post"). And that's what I've sat down to do here. Hmmm... I seem to have done a great job, haven't I?

Friday, August 17, 2007

Moving

We moved from upstairs to downstairs in the same building. I like the new crib, although now I'm back in a cube. Still, it's the best cube I've worked in, and there's plenty of opportunity for cube dressing. I'm going to go by the surplus store, hardware store, and toy store to get some supplies for a few ideas I have, and cube decorations from past jobs (which are still in the box I took home from Juniper) will also play a heavy part.

There was some discussion about airspace issues. There's 18' ceilings in this area, so the question of how to handle the airspace becomes relevant. Naturally, the discussion mostly involved us playing with Karl's RC helicopters, and trajectory arcs of Nerf guns.

Anybody have cube decoration ideas they want to throw into the ring?

SRE R00lz!


This was taken at a company picnic yesterday. We had a tropical theme going... steel drums, flower leis, etc. There was a climbing wall, human foosball, and, of course, volleyball. Since my knee has been giving me problems (I actually had to leave early to go to physical therapy), I stayed away from the volleyball pits and instead played frisbee.

Wednesday, August 15, 2007

Yesterday's Beans

Okay, yesterday's post was evidently more tantalizing than I meant for it to be. I started by saying that I wasn't talking about my new friend. Well, that seems to have been raising questions among my other friends, so I've been getting bugged to talk about it.

Well, not from all of my friends. Some of my friends were there, some of them are too polite to pry, some are so busy that we haven't talked since then, but this is not an exclusive partition of my friends. So m3tus, this post is for you.

The thing is, it's not like there's anything scandalous that would make Matt Drudge drool. I just talked to my new friend about some problems she's been going through. I thought those problems might make for an interesting post, but her problems are hers to tell the world, not mine. That's all.

Monday, August 13, 2007

Restraint

All week now, I've been mulling over a blog post. It's about a new friend I made last weekend, and the interesting circumstances under which we met. But there's a problem: that would be a violation of her privacy. I spent a fair bit of the week thinking about this. For a while, I was considering writing a version that left out some parts. Finally, I decided that I should let her tell her own story to the people she wants to; it's not my place to do so.

This is the sort of thing I have to think about when I'm writing to a public audience. (Okay, that public audience is-- in the last week-- only 56, but ethics is not a numbers game.) I have to do this all the time when I write about work. Obviously, this is partly because I don't want to end up like Mark Jen or something. But moreover, it's because I have a responsibility to my employer, and don't want to disclose information when it might do harm.

This is a sort of self-restraint, which is a good thing. It suppose that in this context, it's similar to the legal concept of prior restraint, which is generally considered a bad thing under most circumstance. However, there's a big difference. Here, I'm avoiding talking about things on my own volition; in the case of prior restraint, it's from a governmental gag order.

This weekend was my friend's birthday. His girlfriend and I had planned out a birthday party for him, culminating with us seeing a performance of The Compleat Wks Of Wm Shakespeare (Abridged). But it started off with us playing Guitar Hero Encore: Rocks the 80s. I've got Guitar Hero and Guitar Hero II, and we have a blast playing them multiplayer. Unfortunately, we realized when we started playing that most tracks in multiplayer aren't available until you unlock them in single player mode. That meant that, for the time being, we only had eight songs available. Luckily, by the time we finished those eight, it was time for us to head up to the city.

Now, that all happened Saturday, so Sunday I had to myself. I took care of some personal errands, like laundry and groceries, but also played Guitar Hero for a while... y'know, just to unlock the songs. I normally play GH on Expert, but this time, I played on Hard. That way, my friend and I would be able to play the Expert level for the first time together. (I did unlock all the songs, by the way. If you want the track list, and have iTunes, I put together an iMix with the songs.)

I thought about some of the stuff I had going on at work. There's plenty that I'd enjoy doing, but I was keeping myself from doing work. I was bound and determined to make the weekend about myself, and NOT the shiny new job that's been occupying me for the last few weeks.

I got pretty bored playing Guitar Hero on Hard, but wanted to unlock the songs. So I kept at it. I played on Hard, and not on Expert. I unlocked songs, instead of doing some interesting work.

Why the restraint there? I have to wonder if at some times, I'm holding back where I shouldn't.

I feel like that at work too. I keep feeling like I'm marking time, slowly learning, waiting until I get to the point where I get to take off the kid gloves and really get to it. Thursday and Friday, I sat down and did some coding. I started on a program to help me maintain my calendar, and another one to give me a cheat sheet for a weekly meeting. The former is pretty mundane, but the latter was certainly fun. I'll talk about why in a later, more technically-oriented post.

For now, I'll have to think about when's the right time to hold back, and when's the right time to let loose.

Friday, August 03, 2007

I've been found!

Okay, this is a surprise. I've been writing this under the idea that I'd have some small portion of my friends and family reading. And maybe the occasional Google search. I figured that's where the one comment I've had came from. Then, today, I did a little log analysis.

Since I opened the site a couple of weeks ago, I've had 2,490 visits from all over the world, from Malaysia to Tanzania. The visitors are pretty telling of the type of audience: 49% have been using Windows, 29% using Macs, and 21% using Linux. The browser numbers are more optimistic: 69% Firefox, 12% Safari, and only 7.5% using Internet Explorer.

I will point out that these numbers may well be skewed. The statistics were only collected for about 2/3 or less of the page views. In other words, I know that there's been at least 6,000 views, but only about 4,000 of those had statistics logged.

How did all this come about? Well, somebody found my post about Sawzall, and posted it to reddit. There was a little bit of activity before that, but I haven't yet looked at what led them to find it.

Then again, I never did publicize Vigor at all (I just sent Illiad an email), and enough people downloaded it that I was getting dozens of emails a day. I suppose even the most trivial writings are still going to be found by the zillions of eyes on the Internet.

Carving out time

You haven't heard from me all week, and you're starting to wonder if I vanished into thin air, lost my password, or what. Well, I've just been busy.

All last week, I was wondering why I was having such a hard time getting anything done. I had so much stuff that I wanted to get done, but never seemed to be making any traction on it. Then I looked at my calendar, and it all became clear.

Okay, admittedly, that screen shot is from two weeks ago, when I still had a full schedule of training. But nevertheless, I've been going to a lot of meetings. Some of them are necessary, some aren't. I realized that I'd have to defend my schedule against meetings.

That's what I've been doing the past week: I was declining meetings that I didn't need to go to, and making time to work instead. This involved studying, coding, the usual stuff. This week, I was getting stuff done— but I was staying there until 11:30 PM at the earliest, 1:30 AM at the latest. I wasn't getting nearly enough sleep. On the upside, spending all this time in the office gave me a chance to learn about the laundry facilities at work, but overall, I think it was more of a bad thing.

Next week, I'm going to be defending my personal schedule against my work schedule. I need to make sure that I give myself time to relax, to take care of personal errands, to visit with friends, sleep, and do all of the rest of the things I have to do that don't involve work.

You may have noticed that my "Recent News I Found" sidebar has had a fairly high number of life organization articles. (Remember that it's a separate feed from my blog. To subscribe to that, click the "Read More..." in the sidebar, and subscribe to the feed there.) I suppose that, as I'm finding my feet in my new job, I've been thinking a lot about getting my life better organized.

Sunday, July 29, 2007

Welcome to the blog!

As you can see, the new format is up, up, and away! I've brought my Noogler writings over here, of course, and you'll be seeing more new content as the muse strikes.

Let me start by giving you the executive summary for this post. If you don't care about technical details, or getting things just right for your tastes, then just go to reader.google.com, sign up if you need to, click "Add subscription", then in the box that pops up, type "www.piquan.org". Then, add another subscription, this time for (and you'll need to copy/paste this) http://www.google.com/reader/public/atom/user/10100467309635594692/state/com.google/broadcast
(whew; got that all)? Add subscriptions for all the other sites you might go to frequently to read news (Slashdot, CNN, other blogs, etc). Then, instead of going to each of those sites each day, you can go to Google Reader to see them all together, easily read. There you go, now you don't have to read the rest of this post.

Whew. We've got the type A personalities out of here. Now the rest of us can relax and enjoy the new blog.

Now, if you've taken the time to look over the sidebar, you might think this website is the height of vanity. Besides my last ten posts, and monthly archives, you've also got my bookmarks, my news clippings, my music, my friends, my photos, my art, me, me, me! Yeah, okay. I guess the way I figure, it's my blog; it should have a lot of my personality in it. You've got links to loads of personality, right there in the sidebar. And naturally, you should come back every day to check it!

Okay, no, that's not true. Most of us already have websites we periodically look at; I have about 30 different websites I like to check every day already! (You can click on the "daily" tag in the sidebar under "My Bookmarks" to get a list.) Surely there's some great technology to help us keep up with all the articles from these different sites, and show us just the new ones that we, personally, haven't seen.

Why yes, there is! It's called RSS, and it's all over this website. I'll talk about some of the basics of using RSS now, so later on I can just say that some feature "has its own RSS feed", and you'll know what I mean, and how to use it.

First, I want you to look at the right hand side of the address bar. Yes, the bar at the top where you type in "www.piquan.org". There may be an RSS logo there. Depending on what browser you're using, it might be the word "RSS", or might look like a silly orange logo instead. Chances are, it looks like the silly orange logo. (If you're using Internet Explorer 6, you won't even see the logo; we'll talk about that case in a little bit.)

Now, you could click on that, and I'll talk about how different browsers handle it.
  • Firefox: If you're using Firefox, you'll be shown the feed (a list of the recent articles) and given a chance to add it as a Live Bookmark, or subscribe (mark it as something you want to read) using one of a number of other possibilities (certain websites or programs). If you add it as a Live Bookmark, then you'll have a bookmark (by default, in your bar) that's actually a drop-down list of articles. When you feel like reading my articles, you can click on that bookmark, find a headline that looks interesting, and click it to go straight to the article. It's a quick way to scan headlines without having to visit the site!
  • Safari: When you click on the RSS icon, the web page will transform into a feed view. If you drag that to your bookmarks bar, it will turn into a bookmark that will always show how many new articles there are. If, for example, there's two articles since you last looked at the site, you'll see Piquan(2) for the bookmark. Clicking that bookmark will take you to back to the feed. Safari also has a lot of other RSS features, like the ability to show multiple feeds at once (put them in a bookmark folder), show just part of each article in the feed display (the control is on the right side), or turn your RSS feeds into a screensaver (it's in the Desktop & Screen Saver system preference panel, with all the other screensavers).
  • Opera: When you subscribe to the feed (use the Atom feed), it will be added to your Feeds menu. Within the feeds menu, you can click on an individual feed to read just that, or "Read Feeds" for all your feeds at once.
  • Internet Explorer 6: Doesn't support RSS. Use Firefox, or look at the section below for alternatives.
  • Internet Explorer 7: It supports RSS, but I don't really know anything about it. I'm afraid you'll have to play with it yourself, or use Firefox.
  • iPhone: The iPhone does support RSS, but its support is pretty primitive. The RSS icon isn't displayed, presumably because there's not much screen space. You'll need to click the Atom button at the bottom of the sidebar. You can view the feed that way, and it's easier to read and pick out articles that way, but it doesn't remember which articles are read, or let you aggregate articles. I recommend Google Reader instead; see below.
Lots of different websites have RSS. Pretty much, any website that has short, periodically added content will support RSS. Obviously, this includes blogs (both individual and corporate), but it also includes newspapers like the New York Times and San Jose Mercury-News (yes, even smaller local papers have RSS!), news channels like CNN and the BBC News, and even common social sites like personal photo galleries, music trackers, and even social bookmarking sites. If you have a personal site, such as a team high score list or baby diary, you may want to ask your administrator about enabling RSS, if he hasn't already.

Okay, everybody's using it, but why is RSS so great? It lets you keep up with a lot of different sites easily. Some feed readers (such as the one in Opera) let you read all your feeds at once, so you can read your day's news from a variety of different sites, all at the same time. Some (such as the one in Firefox) don't do that, but do let you quickly scan the article headlines without visiting the website, so you can quickly see if there are any articles you want to read.

There's also programs that let you see RSS news in other ways than your web browser. For example, the Mac ships with a screensaver that will read and display RSS feeds. Google Desktop for Windows has a widget that will display RSS feeds at the side of your screen.

Okay, you remember how I said that my website should have my personality? Apparently, that includes my tendency towards long-winded technical explanations. For just that reason, I'm going to recommend that you stand up, take a break, get a cuppa tea, and come back. But we're getting to my favorite part, so don't go too far!

Better? Okay, then, face front, true believer, 'cause here we go!

I mentioned before that there are third-party programs to view RSS feeds. I don't know what they are; you can search Google for them if you feel the need. (Firefox will automatically find several of these programs, and give you the option of using them to subscribe to RSS feeds.) But I have other ways I prefer to read my feeds.

My favored method is Google Reader. I hadn't really bothered with it before recently. The explanation they gave on the web page was far too vague for my taste, and I didn't really understand what it was. So now, I'm here to tell you.

Google Reader takes all of the RSS feeds you have from every different site and puts them all together. It keeps track of which ones you've read. It lets you mark some of them with a star so you remember to go back to them. It lets you share them with other people. It does all this in a very easy-to-use web interface. It also has a huge list of feeds available, so you can search for feeds on baby clothes, cowboy poetry, or whatever else tickles your fancy. Personally, I'll spend a few minutes each day scanning over my Google Reader inbox, and quickly pick out the articles that are worth reading.

If you use iGoogle, which is Google's customizable portal page, then you can also put a Google Reader widget there.

Okay, I probably sound like I work for Google or something. But seriously, I've really enjoyed using it. Now, maybe you go to Yahoo! every morning. Or perhaps you prefer Ask.com, because it used to be named after an amusing character from Wodehouse books. Well, you're in luck! Yahoo! has a similar service; you can put your RSS feeds on your My Yahoo! homepage. (I don't know how, but it's something they've been promoting a lot lately.) There's also a service called Bloglines that's owned by Ask.com; I don't know anything about that, though.

So maybe, just maybe, you're wondering what interesting stuff I'm finding while I'm looking over all my RSS feeds. Well, you're in luck! You see in the sidebar, where it says "Recent News I Found"? While I'm perusing my RSS feeds, I've got a button in Google Reader to share articles. That will put the article in the "Recent News I Found" sidebar. I've been doing this for several days now, and there's quite a few things I've found in that time.

Of course, the "Recent News I Found" section has an RSS feed. The articles I put in there aren't in the blog RSS feed, and vice versa. That way, you can choose to read just the articles I find interesting (but didn't write), without having to deal with my ramblings, or you can read all my wisdom without having to put up with the rush-a-day tidbits about killer badgers in the UK. The feed for the "Recent News I Found" section is a bit long, though... ready? Here goes: http://www.google.com/reader/public/atom/user/10100467309635594692/state/com.google/broadcast

Okay, that's it for today. That's plenty enough, don't you think?

Friday, July 27, 2007

If You Can Read This, Thank A Sysadmin

Today is Sysadmin Appreciation Day. Sysadmining, as most of you know, is a rough, thankless job. That's why the last Friday of July is designated Sysadmin Appreciation Day. Do something special for your system administrator, network administrator, sysop, support tech, or (ahem) son today!

If you have no idea what I'm talking about, then visit sysadminday.com.

Sunday, July 22, 2007

Noogler, Day 19: TGIF!

I HAD so hoped that I'd be able to get a few things done during work Friday. Well, to be fair, I did get a few things done... just not the things I had intended to.

I started off by going to the gym. I had class over my Thursday gym appointment, so had moved the appointment to Friday. This meant that I skipped a couple of minor meetings that I didn't have to go to anyway.

Normally, I don't like to start off a day at the gym. My knee is worst first thing in the morning, and I'm usually pretty tired... I'm just not a morning person. But if needs must!

My gym doesn't have a shower, so I went to Google still in my gym clothes. I'd heard there were showers in my building, in the first-floor bathrooms. On the way there, I passed by my Todd, my boss's boss, and stopped to tell him my idea.

In my day 18 entry, I talked about how I'd given Cheryl some advice on getting through the first bits of training. I figured it would be good to give some of the same advice to everybody coming in to the group: a kind of "new hire survival guide". For example, while there's an excellent internal glossary at Google, you can't look up every unknown word you see every time on the team mailing lists. It'd take a half hour to get through a five-line email!

There's a few terms you'll hear again and again when you first get started. In other words, the distribution of the usage of unknown terms you'll encounter follows the 80/20 rule. That means that a short, one-page, context-free glossary could give a Noogler a big head start on understanding what they're seeing... just something you could print out and put next to your monitor, so you're not constantly looking up words.

That sort of thing, I figure I could put together pretty easily. There's also some general advice I'd give. It's the same advice I always gave to new Juniperites: don't panic. In their first few months at Juniper, every new employee is certain they're about to be fired. There's so much coming at them from every direction, you get overwhelmed, and think you're not keeping up with expectations. The reality is, you're doing fine, people expect you to take time getting up to speed, and you're not expected to keep up with everything coming at you even after you're an established employee.

Besides, Juniper doesn't hire you unless they think you've got the chops. Once you're hired, you've got what it takes... they're not going to fire you a couple of weeks later!

I'd say the same "don't panic" advice applies to Google. That was the most important advice I gave Cheryl, and it's that sort of thing that I'd also like to put in the survival guide. I did, however, have to verify with Todd that he hadn't ever fired somebody a couple of weeks after hiring them! I figured that was a sure thing, but I wouldn't want to write it down without fact-checking. Todd, of course, said that he hadn't, and gave me some advice on the survival guide. He thought it was a great idea.

I also took the time to get the footrest that was recommended during my ergo eval. It will let me keep my knee extended, which helps with my knee problems, without giving me a bad posture. Fortunately, the footrest is a lot easier to get than the Kinesis... I just had to drop by the hardware depot and pick it up. (Regarding the Kinesis, I did drop by Fry's Sunday to get one for home. No luck; I didn't think about that Kinesis keyboard, while more common than Maltrons, are still pretty uncommon.)

After that, I had to catch up on my email. I've been talking to a couple of groups internally about their products. For example, just for my own convenience, I wrote a plugin to interface with one of our internal websites, and was talking with the responsible group about it. They had some responses, etc.

I also spent a few hours writing some code for some other Nooglers, to them with a question that had come up. Most programmers have code they've written just to customize and improve their development environment. You can often get a good indication of how far a programmer has progressed in their career by looking at how much they've customized their environment. This is partly because as you go through your career you tend to add on to the customizations you've made so far, so they accumulate. It's partly because more capable programmers can quickly write a customization without losing much time; a veteran programmer can write a customization in an hour what might take a new programmer all day or longer. It's also partly because old programmers tend to be more crotchety about the way they want their computers to do things! (I personally have about 3000-4000 lines of such code, 3/4 of which is for Emacs. It's been accumulating since 1993.)

Anyway, one of the Nooglers asked about a way to do one such customization. His question was actually a good one, and I thought of a solution that would be applicable to a wide range of similar problems. But it took me a while to write and the code— about 50 lines of shell script— and some time to write up the email.

Well, by the time that was all done, it was lunch time, followed by another class. This one was a more detailed class on our cluster infrastructure (see day 17). Exciting stuff, but I've still got more to learn on the topic. The rest of my learning about the cluster system will be self-directed, though.

I was barely after class when it was time to go to a TGIF. I ducked out of the TGIF halfway through, and that's when I heard from a friend who wanted to hang out. Since it was half past five, I figured it was okay to meet up, and so finished another day as a Noogler.

Thursday, July 19, 2007

Noogler, Day 18: The geekiest social scene

[Preface: I wrote all this last night, and promptly forgot to post it. D'oh!]

You may have noticed that my posts have been getting shorter. There's two reasons for this. The first reason is that you may well be getting quite tired of such long posts! A second reason is that now my days are not all completely different from one another.

Some of my posts are about the day's events, and some are about my philosophical musings on things like the campus atmosphere and 20% time. It looks like I've been moving from the former to the latter over time, as I'm doing less cool day-to-day stuff and more coming to understand the environment around me. That means that at some point, I'll probably stop doing the daily posts, and move to an as-I-think-about-things format.

Now that I've talked about that, I'll talk about the cool day-to-day stuff I did today. I was social today. Well, I always try to be pretty social, but moreso today. After classes, I spent some time hanging out in peoples' offices. This involved things like talking about the referral process, so I can refer my friends. Of course, a number of the people I'd want to refer work at Juniper, and my contract with Juniper says I can't refer people from there for a year... oh, well.

I also found out about schwag. The general shirt cabinets tend to empty out fast... I've been told that 10 minutes after they're stocked, they're emptied of everything but the small women's sizes, and those still don't last long either. Really, if it's schwag I'm after, my best bet is to go to http://www.googlestore.com/ and find what I'm after! I did manage to scrounge up a couple of shirts specific to the SRE team, though.

Today we had an Ads SRE party. This involved us going into a room with snacks and drinks and playing Wii. (The team has a Wii, with four controllers, and a number of party games.) I was fortunately able to help several people get going with the games, since I own most of the ones we have, and all the ones we played today. Nevertheless, I'm sad to say I was handed my hat in Wii Tennis and Monkey Battle, and we didn't finish the Mario Party game. Nevertheless, I think everybody had fun.

After that, I talked to Cheryl for a little while. She's the newest ads SRE; she just joined this week. See, there's a lot going on your first week, and while the SREs are all very supportive, they went through different training programs. I didn't really have anybody I could go to and say, "OhnoI'msofarbehindWLAAAUGH!". Well, I could, and might get sympathy, but no empathy, and there's no way they could have said "I went through the same thing, and felt the same way, and it turned out alright." So I figured I could do that for Cheryl.

After that, Matt came to visit. When I called him, he had just picked up food from Seto Deli, but they were closing, so he had to get it to-go. I invited him to come over here and we could relax and visit. I picked up some grub at Charlie's, and we sat around outside and ate our food. After that, we relaxed for a little while in some comfy sofas nearby, and then embarked on the self-directed one-hour tour that our guest center has designed. It's a tour that I'd been meaning to take anyway, just to explore the campus, but I was glad I could bring Matt along. I still think he shoulda tried one of the smoothies, though.

It looks like the entire campus is about socializing today. Earlier, there was a farmer's market. While I was showing Cheryl around, there was a dance class going on not far from our offices. There was a university that was having a mixer for current and past students here. There was some sort of event that involved firepits around the volleyball courts. On my way back from dropping off Matt, I saw that the firepits were lit, and there were people around talking cheerfully. Then the sprinklers came on.

Noogler, Day 17: The Light Dawns

This is going to be a short one, because I'm not getting started until pretty late.

I previously talked about the fact that I don't have a lot of experience with some programming architectures. One of these is something called cluster computing. This is when you have a lot of computers together all working on jobs.

Now, as you know, Google has a lot of data to process. We use cluster computing to deal with that. That means that there's a cluster infrastructure managing things. If you type a query into Google, the job of searching the web for what you typed (and correcting spelling, and looking for ads) gets spread out among many, many computers.

In a cluster system, there's some sort of cluster management infrastructure between the program and the machine. How thick this layer is depends a lot on your system. In an nCube system (which is more akin to a supercomputer than a cluster, but there's similarities), it's pretty obvious to the program that it's part of a cluster. In a Beowulf cluster, the entire cluster acts more like one computer than many. In a Cell cluster, the reality is somewhere in between.

Despite this range, in any cluster system, there's a layer between the program and the hardware. Now, as a programmer, I have to deal with abstractions all the time. It's a big part of my job. Nevertheless, on a typical system, I can talk about the computer at all levels. At the top level might be a user deciding to click on a hyperlink. What makes him want to do this? Why does he know what effect this will have? How did he decide that this was a useful action to take? All these are questions of user interface theory, which is an area that has gotten very little research until recently. At the lowest level, we have transistors. These are taking advantage of field effects to allow electrons to flow from one point to another, depending on the behavior of electrons at a third point. This is the fundamental component on which computers are generally built.

I've got a pretty good understanding of the layers between those two points. It's a bit sketchy near the extremes— my subatomic physics isn't really up to snuff— but in the middle, particularly in the lower level of the software, I've got it covered.

Now, a cluster system puts an entire abstraction layer between the software and the hardware. Instead of saying that program X is running on machine Y, you would say that program X is running on this cluster over there, that consists of a lot of machines. Depending on the cluster system, it might be running evenly spread across each machine, or parts of it are on some machine and parts on another, etc.

This has made me a bit uneasy. I've been having to learn about a lot of programs running, but I haven't really had a good feel for HOW they run. When we were talking about different programs, or subprograms communicating, I couldn't tell how they were communicating... whether it involved sharing some RAM, sending data over a network, or somewhere in between. All of these are possibilities in a cluster architecture, and I didn't know anything about ours.

Today, we went over the cluster architecture in general, so I'm quite happy about that. Now I have a basic groundwork for the computing infrastructure, and yesterday I got the basic groundwork about the data flow I'm supporting. Tomorrow, I've got training on a number of other job-specific aspects, such as what's expected when you're on call, and more detail about our specific systems and how they work.

I've also been talking to some people around here about some ideas I have. One involves using some AI techniques to make our lives easier. These are ideas I'd been thinking about at Juniper, but wasn't able to get the buy-in to start the project. Here, people seem enthusiastic about the idea, so I think I'm going to start looking in that direction pretty soon.

I've also got some ideas about ways to organize the communication between parts of our computers, but I'm less likely to be able to see that out; it may be too radical to be implemented with today's state of the art, even here. Nevertheless, I'm going to throw the idea around some and see if it sparks some good, more practical ideas.

As a brief note on another topic, I've been playing with a lot of the Google products I hadn't looked at closely before. I've got a couple of ads accounts now to play with, for example; that only makes sense, since I'm in the ads team! I'm also exploring some of the other properties, such as Google Reader, Co-Op, etc. Expect to hear more about that later, but for now, it's time for bed.

Oh, I almost forgot. I got my ergonomic evaluation today. They're backordered on the Kinesis keyboards, but I'm going to go by Fry's at some point and get one for home so I can learn the layout while I wait. Anybody care to play two-player typing speed games while I'm learning it?

One final note: in the picture, you can't tell clearly, but that balloon between the desk and the door is maintaining its position unsupported. It doesn't have much buoyancy, but it's still got a little.

Tuesday, July 17, 2007

Noogler, Day 16: Second wave of classes, Kinesis, and 20% time

I hope you weren't eagerly looking for a day 15 post. I think that some of my daily posts have gotten a bit thin anyway, so one missing day isn't going to be a killer.

I'm going to talk about a few things here. First off, let me tell you a bit about work. Crusher asked me today if I was enjoying my new job. I said that I'd give him an answer once I knew what my new job is.

There's certainly truth to that. I've been learning a lot about the company, the infrastructure, the languages, the libraries, the problems, the solutions, etc, etc. I still don't know what I'm going to be doing day to day. I've been reading the team mailing lists, but only understanding 5% of what I read.

Fortunately, last night, my boss started setting up the training classes that are specific to our job. I've been through all the stuff that every engineer goes through already, but I really have no idea what I have to do day to day. For the few weeks, I've got New Ads SRE training. The first session was today, taught by Alex. It was a more in-depth discussion of some of the stuff we'd gone over in previous classes, and it looks like a number of the upcoming classes will go into more depth on individual parts.

I'm quite excited about these classes. While I'm certainly learning a lot in my self-directed studies, I do still feel a bit ungrounded. I was hoping to get my sea legs with the starter project, but it looks like these classes will give me a lot of orientation.

I'm also looking forward to my ergonomic review tomorrow. I know, that sounds dull, but you may recall from day 10's entry that it's part of the process for me to get my new keyboard. The usual bowl-keyboard that Google issues is a Kinesis, but I'm used to a Maltron.

I had first started using the Maltron on the recommendation of some of my friends from GNU and red-bean. If it gives you any idea of the obscurity of the Maltron, though, mine has a serial number in the 4900s.

Still, I'd been thinking about switching to the Kinesis. The Maltron uses a proprietary key layout, whereas the Kinesis uses the Dvorak layout, which is built in to most OSs. This means that I could sit at any keyboard and switch it to using a key layout that I'm comfortable; with the Maltron, I'd have to bring my keyboard if I wanted to do that.

The Kinesis is also much more popular than the Maltron, and easier to get. Many hard-core geeks are at least passingly familiar with the Kinesis, whereas the Maltron is almost unheard of. The story is that Kinesis first tried to license the Maltron for the US, but Maltron turned them down. Kinesis then developed a similar keyboard, but with the Dvorak layout instead of the proprietary Maltron layout.

So I started wondering, has anybody switched from the Maltron to the Kinesis? What were their experiences like? I spent a bit of time scouring the web for comparisons.

I couldn't find any real comparisons, but I did find a blog entry from a guy who was in the process of switching from the Maltron to the Kinesis. This guy, Fitz, is one of my red-bean friends, but we hadn't talked in quite a while. I looked over his blog to see what he's doing these days, and found out that he's working at Google too! (Not at my complex, though; like many red-beaners, he lives in Chicago.)

I shot him an email, and we talked a bit. He has been moving to the Kinesis over the past few weeks, and is quite happy about it. Based on his recommendation, and the reasons I went into above, I think I'm going to get a Kinesis at work, and another here to replace the Maltron, so I can learn the Dvorak layout.

Now I'm going to talk a bit about 20% time. One of the most famous things about working for Google is that you can spend 20% of your time working on whatever you want. Some released products, such as GMail, started as 20% projects.

Some people will take part of their 20% time to fix a bug that's annoying them, or add a feature they want, to some other Google product. For example, there's a story on the official Google blog from a guy who writes internal tools to manage partner relationships, who used some of his 20% time to add a new key shortcut to Google Reader.

Other people will use their 20% time working in groups that interest them. It's not uncommon for people to spend their 20% time in a different group, in order to size them up for maybe moving to that group. It makes for a pretty smooth transition. I had wondered about that; people move around a lot within Google, so I was wondering how the internal turnover didn't eat them alive in retraining. Part of it is that people have been spending 20% of their time doing the job before they move!

Some areas are resourced mostly with 20% time. I know a number of my teachers generally taught in their 20% time, and had an 80% job doing engineering.

In fact, there's a lot of groups that are composed of people spending their 20% time on something they feel strongly about. In any development organization, there's a number of areas that people feel are important, but don't get well-resourced: training, code readability, testing, etc. For instance, there's one group of people that, in their 20% time, write flyers about code test techniques, and puts these in the bathroom stalls. "Testing on the Toilet", the series is called. Through this and other means, they're actually doing a lot to improve the quality of testing at Google.

That's what I find the second best about 20% time, as a concept. You get people who are passionate about what they're working on. They really do want to work on testing, or really do want to teach, etc. This means that they do good work: they are thinking about this area all the time! Now, this isn't to say that people aren't passionate about their 80% work. They certainly are! But I think that the 20% time has a fluidity and openness that your 80% projects just don't have.

So what do I find the best about 20% time? Morale. Engineers work best when they're finding outlets for what they really want to do. Traditionally, management theory has focused on handling this by improving morale either by encouraging developers to be engaged in their projects (see the books "Quality is Free", and most especially "Peopleware"), or by collateral means (such as free food and offsites). I don't know of anywhere that's ever decided to channel engineers' ideas into productive areas directly, to improve both production and morale.

And before you ask, no, I don't have a 20% project yet. Of course, I don't even have a grasp of the other 80% of my time yet!

Friday, July 13, 2007

Noogler, Day 14: Picture Extravaganza!

I'm still in the office as I start this, since I'm hoping to hang out with Scott later on. [It ended up being finished Sunday, 1:30 AM. So much for that plan. -Piq]

Today was a pretty typical day, whatever that means. I overslept, which is a typical start to the day. I was quite panicked when I woke up, and hoped to get ready in time to make it to my class this morning. I ended up about 10 minutes too late. It's a class I should attend, but it's okay to put it off a little while. I'll take it next week instead.

On the upside, I've been sleeping MUCH better. The pharmacist's advice seems to have been helping, and now I'm pretty much caught up to normal sleep levels.

At any rate, I was all free and clear to study. I worked on a few different things, and after a while, I got a call from Matt. There are several 7-11s that have, in preparation for the Simpson's Movie, renamed themselves to Kwik-E-Mart, and started selling items from the Simpsons show. You may have noticed the KrustyO cereal in my day 10 post. They're also selling things like Squishee frozen drink, Buzz cola (which smells somewhere between Jolt and generic store cola, and if you've played Simpsons Road Rage, you may have some more thoughts on the matter) and the pink-glazed donuts with sprinkles that are ubiquitous in the Simpsons.

Now, the only one in this area is in Mountain View, about half a mile from the Googleplex. Dennis (a friend of mine from Juniper, one of the ones I try to keep in touch with) is a die-hard Simpsons fan. He, Matt, and another guy at Juniper who had been hired after I left were all going to the Kwik-E-Mart to check it out. Matt was called me to see if I wanted to join them. Of course I did, so I went down to grab a bike.

As I was getting on the bike, three Koreans asked me a few questions about the bikes: if they're just open for anybody to use, what the flag is for, etc. As I spoke with them, I learned that they were visiting. One is a reporter, another is her translator, and the third hung back with no apparent involvement in what was going on. (Despite the translator's assertion that the reporter wasn't on the job, I did see her taking some notes.)

They told me that they were in the area and decided to visit the Googleplex, to see if they could arrange a tour. They had intended to go to the visitor's lobby and see what could be arranged. I escorted them to the visitor's lobby in building 42, talking to them as we walked, and then went back to the bike.

When I got to the Kwik-E-Mart, the Juniperites were waiting out front, with Dennis sipping on a Buzz cola. They got a kick out of the little blue Google bike with the oversized basket and orange flag. After checking out the Kwik-E-Mart (and taking pictures; note the faux cartoon walls on the exterior), we decided to eat. And what better place for this than at Google!

Now, I didn't tell them that it was a somewhat special day. There was a whole Viva la France thing going at Charlie's, with special menus, special cheeses, oysters, etc, etc. We ended up all three going to Bistro G, where they were serving ratatouille, roast chicken, etc. I went over and got some (non-alcoholic) chardonnay, and we sat down outside to eat and talk.

After we had eaten, I took them on a brief tour of campus. Google does actually have a number of prepared campus tour plans, for just such an occasion. I hadn't memorized any of those, but had fun ad-libbing. Unfortunately, Dennis had to go soon, so we wrapped up quickly and they headed off.

After they left, I went back to work. I talked to Jason about my starter project. He explained the project to me, and we worked out more or less what parts of it he knows, and what parts I know, and what parts neither of us know. I've got a pretty good idea of what I need to do on this score now.

I was setting up a plan for what else I was going to learn, but it occurred to me that I don't know how much I don't know! Fortunately, there's some internal self-assessment quizzes. I sat down to go through the C++ quiz, since that's one area that I have no idea whether I'm a dunce or a whiz. I took exception to a few questions on this quiz... some are a bit vague, and they're vague in ways that mean that they clearly mean one thing to a novice, but clearly mean something different to an expert. (I'm not an expert in C++ by any stretch of the imagination, but I'm talking about some general language concepts.)

I worked through the first 2/3 or so of the quiz, but by then it was getting rather late indeed, and my brain was starting to deteriorate. I decided to put the quiz away and do something more productive— like start on this post!

Fortunately, we got the pics from the offsite today. Unfortunately, I can't post them on the Intarweb for obvious privacy reasons. To make it up, I've posted several other pictures from around the Google campus. There's some of a microkitchen; I'll point out that those are all from a single microkitchen. There's a number of doodles from one of the nearby markerboards. There's a few signs that started from the fact that one of our products is called AdSense. There's a mockup of SpaceShip One. There's fun stuff around Google.

Thursday, July 12, 2007

Noogler, Day 13: A Day At the Races

I'm starting on this one before I leave the office. I figure I'd be better able to write these when they're fresh in my mind.

I'm not sure if you recognize the title. It's a Marx Brothers film. I'm aware of the fact that I make a lot of references that people don't get, but sometimes that takes me off guard. Like today; I told a guy, "Welcome to the jungle. We've got fun and games." He had never heard the song I was quoting; when I said that it was a mid-80s song, he said he was about so (1'6") tall at the time. Every now and then, I'm reminded that I'm the old one around here.

This was as we were getting on the bus. "What bus," you ask? Why, the Google bus to take my team to the go-kart track.

You see, today was an off-site team (Ads SRE) event. We first went for lunch (Cafe Moma, which serves "multi-cultural comfort food"). I had just shown up; I slept late this morning.

After lunch, we all piled onto the bus, which is one of the usual Google buses. It's pretty much like a nice charter bus with TVs, wireless Internet access, etc. And a bunch of geeks having conversations about various geeky things. For example, I was talking to the guy next to me about how much I'd like to see a recreational mathematics course; it turned out that he used to teach such a course (by a different name) at a university. Others were talking about things like switching fabrics, new gadgets, and influential people in the computer community.

At the track, we all signed in, and changed into jumpsuits. After that, we were given a briefing about the rules of the track. We divided into two groups, and each group was given 10 minutes on the track to get used to it.

Now we're ready to race. Here's the rules. We were divided into teams of 3s and 4s. Each team had a kart, and we'd decide who the first driver would be. The race was for 45 minutes, and everybody on the team had to drive. When we'd want to switch drivers, we'd write the car number, the driver's name, and a note on a markerboard, and hold it up. The driver would then drive into the pit stop after the lap, and swap out with a different driver.

But, because this is SRE, we had to make things difficult. The boss brought puzzles. Once your driver pitted, while your replacement driver was getting ready, the others on your team would have to put together a puzzle. Only once that was done could your driver leave the pit.

My team consisted of myself, Yao (an officemate), Eric (my mentor), and Basab (an older Indian man whom I didn't know). Yao was the best driver, followed by me, Eric, and then Basab.

We used Yao for the qualifying round (10 minutes), which was a mistake. We didn't know it, but the qualifying driver would also be the first driver for the race. That meant that he was already getting tired when the real race began. Meanwhile, we looked at what the puzzles were.

They were maps of the US with the 50 states cut out. On the board, under each piece, was the state's capital marked with a dot and the name. As Yao raced, the rest of my team made a strategy. We'd avoid putting me and Eric back-to-back, since that would mean that Yao and Basab would have to solve the puzzle. Seeing as how that involved US geography, Eric and I were probably marginally more qualified to solve it. We decided to split the driving time with Yao for about 13 minutes, me for 12, and Eric and Basab for about 10 each. This was to give our better drivers more time on the track, while still giving everybody a chance to drive. The rotation we picked was Yao, Eric, Basab, and me.

This plan saw its first weakness when Yao got tired and pitted. We hadn't considered that our plan would lead to him starting with 23 minutes in the car, which is a LONG time! While Basab and I started on the puzzle, Eric put on his helmet and got in the car. Basab and I started on the puzzle, and Yao joined us a minute later once Eric was in the car. We finished the puzzle and Eric took off.

We considered another problem: the puzzle takes about 2 minutes to solve, so we subtracted that from each person's time-on-track preparations. We worked out about when to bring Eric in, and gave him a "last lap" note. Unfortunately, between when we gave him the note and when he pitted, lots of other cars were pitting. Since there were only three puzzles, we had to wait for one of those to come free before we could start.

Yao and I waited for a puzzle to come free, and Basab went to relieve Eric. Once the puzzle was free, I called to Yao and we jumped on it. Eric joined us, we finished, and sent Basab on his way.

Now, Basab was rather self-conscious about his speed. When I had talked with him earlier, I wanted to be both encouraging for him to go out and do his best, but also making it clear that the point was to have fun, not to win. It came off as a rather schizophrenic talk. In the end, in order to not hold the team back, he pitted after just about five minutes.

That left me, our last driver, with 15 minutes to go! I suited up and hopped into the car. Once I got the signal, I headed up to the line and floored the gas.

You can look at the maps at http://www.gokartracer.com/track_maps.html if you like; we were on the Monza track. Unfortunately, the start line isn't marked on that map. If you're going along the bottom (left to right), you can either take the track, or go straight into the pits. The ramp out from the pits is just above it, so the pits are kind of an extension of that bottom-left turn. The start line is just after that, near the bottom left. So the first turn is a little bit down from the center of the map.

I'd figured that the hard spot would be turn 7, the U-turn in the right center of the map. I asked one of the workers there about that, and he said that no, the toughy is the chicane at turns 3-5. The thing to do is to try to take a tight line on it, and you can pretty much floor it; the bridge right after the chicane is going to help you recover traction going into the straightaway.

Generally, things went pretty well. I got pretty frustrated with one car on the track, who had about four cars stuck behind him, despite being told by the track marshals to let us pass. There's a blue and yellow flag that's used to signal this; he ignored that flag for about two full laps while I was behind him. (I later heard one of our more vocal employees griping about his behavior; we never did find out who the driver was.)

My biggest problem was at turn 9, the U-turn a little bit above the center of the map, just to the right of the chicane. You take that turn pretty much blind to what's on the other side. Well, there had been a spinout there, and RIGHT on the other side were three karts stopped. I slammed on my brakes as soon as I came around that turn, and although I had lost a lot of speed going into it, I still wasn't able to brake fast enough to avoid a small collision. Not enough to be a problem, though.

After the race, they gave out medals to the top three teams. The go-kart facility provided medals, and our boss provided another set of medals. I liked our set better: gold, silver, and bronze pagers. (I later examined one: they were real pagers, just obsolete, from Weird Stuff, spray painted, with "Google SRE '07" written over their screens.)

We went to a classy looking place where we ate and drank and played pool. There, they gave out prizes to the top few teams, the top individual lap, and the slowest individual lap. They also gave everybody a pretty nice socket set. The handle was stuck in the foam in mine; I had to use my Leatherman to pry it out.

After that, I came back to the office, caught up on my email and a few other menial tasks, and sat down to write this. Despite my protests in Monday's entry, today WAS an all-play-and-no-work day.

Wednesday, July 11, 2007

Noogler, Day 12: Back to classes

Today I had to get up extra-early to go to the gym. I won't be able to make my normal Thursday timeslot because I have class then, so I had moved it to this morning. Which made for a tired, but quite vigorous, workout. I think the pharmacist's advice helped, too. I slept well last night, and was doing much better today.

After my workout, though, I did have to shake a leg to make sure I could get to class on time, with a banana as a quick snack. I did actually end up getting there early, though, and sat in The Hub until it was time to go to class.

The instructor was an engineer whom I'd briefly spoken with before; I needed to talk to her about data I'll be needing for my starter project. More about this class another time; for now, I'm hoping to get done writing this by midnight.

I should probably explain one of my photos from yesterday. In case you couldn't read it, it reads:

GOOGLE CULINARY TEAM KITCHEN FOOD STANDARDS

  • We will source fresh, seasonal, local & organic produce as a first choice & preference
  • All prepared meets are nitrite & nitrate free
  • Our chicken is always antibiotic & hormone free
  • Our beef, lamb & pork are premium, natural products
  • We follow the seafood standards as outlined by the Monterey Bay Aquarium Seafood Watch Program (http://www.mbayaq.org/cr/seafoodwatch.asp)
  • We will engage local artisan vendors that can provide the quantity and quality of culinary products expected by Googlers
  • All stocks, sauces and dressings are made from scratch
  • We do not use products that contain MSG

OUR STATEMENT OF VALUES

  • We encourage openness, creativity and the sharing of thoughts, ideas and new concepts
  • Our menus are produced with sustainable, local and organic products using healthy cooking methods
  • Our goal is to educate our staff, customers, vendors and ourselves about the food experience and the effect it has on our global community
  • We commit to live our values by participating as a team in at least one charitable event each quarter in our community
  • We commit to continually evolve our business model to improve service, quality and efficiencies

— Google Culinary Team

Okay, that was one sign. I read another today. I'll preface this by saying that we normally use ceramic plates and metal flatware, which can be taken elsewhere and left in a microkitchen to be bussed if so desired. There are also disposable "to-go" boxes and flatware. The other sign was about that.

ABOUT OUR NEW "GREEN" FOOD CONTAINERS, TAKE-OUT BOXES, PLATES, AND CUTLERY

We are now using non-oil based disposable "take-out" packaging made from renewable, tree-free, resources that are sustainable, compostable and biodegradable.

Our paper plates, take out boxes and soup cups are made from "sugar cane bagasse," the fibrous residue remaining after juice is extracted from the crushed stalks of sugar cane. The use of this agricultural waste product to make food containers prevents it form being burned in the sugar cane fields, reducing air pollution and the production of greenhouse gasses.

Our new 100% corn-plastic cutlery, clear take-out and deli containers are made from NatureWorks(TM) PLA, a corn based plastic. Naturally derived from corn, the basic raw materials for PLA are carbon dioxide and water. Growing plants, like corn, take these building blocks from the atmosphere and soil. They are combined in the plant to make carbohydrates (sucrose and starch) through photosynthesis. Dextrose, a natural sugar derived from the starch in kernels of corn (or maize) is used as the primary raw material for PLA. NatureWorks(TM) PLA uses up to 50% fewer fossil resources than conventional plastics in its manufacture. It can compost completely back to carbon, water, and organic matter, keeping a balance in nature.

Now, lunch is done, and back to classes. They were over interested topics, but by the end of the day I was still a bit glazed over.

The classes took up most of my day, and as I write this, it's now just a bit past midnight. (Part of this is because I got distracted watching "House".) I guess that means it's time for me to send this off.

I remembered to take a picture of my balloons today. It looks like they're almost done with their job. I suppose the MTBF for mylar balloons is about 2 weeks; I've only got a short time left of being a Noogler.

Tuesday, July 10, 2007

Noogler, Day 11: Work and Play at Google

I know, it's earlier than I normally send this out, but I really hope to get to bed early. When I got up this morning, I was exhausted. I ended up getting in too late to make it to my first class, and the other two classes today depend on it. It's not something vital to me at the moment, so I'm okay with making it up next week.

That also meant that I had all day to work on some of my other studies. Today, I was studying Sawzall, a log analysis tool we have around Google. After what I said yesterday about how I don't talk about work, I figured I should talk about work a little, in case you're curious about what I'm looking at. (And lest anybody wonder about all the company secrets I'm divulging, I'll note that the following is all in a published paper.)

Sawzall is a programming language developed by Google specifically for analyzing logs and extracting relevant data. There's a LOT of log data, and so they developed a system to distribute the analysis over hundreds or even thousands of computers. Although this could be done using a general-purpose language like Python, using a purpose-built language has a few important advantages. Sawzall is designed around the idea of processing logs. It has a lot of functionality that is useful in this context, such as date-handling functions, easy-to-use regexes, etc.

Now, Perl is also built around the idea of processing text files, but Sawzall has one big advantage over Perl: it's designed for distributed computing. When a Sawzall program is run, it automatically is given to many, many computers. Each computer processes a portion of the logs, and then they work together to combine their results appropriately. However, all of this coordination is done by Sawzall. It doesn't require any special code by the programmer; it's done automatically.

These traits allow you to write efficient programs for log analysis quite easily. For example, a program to compute a frequency distribution of number of queries vs. minute within the week only takes 7 lines. In a few simple benchmarks (Mandelbrot and Fibonacci), run in a non-distributed manner, Sawzall is quite fast: 3.5 times faster than Python, 5 times faster than Ruby, and 4 times faster than Perl.

It also scales incredibly well. Ideally, putting five times as many machines on a job should make the job five times faster. In practice, this isn't ever achieved, since there's some overhead. The overhead is only 2% in Sawzall: putting five times as many machines on a job makes it 4.9 times faster.

Now, most languages are built around an idea of execution similar to Algol's. They don't work too well when a different execution style is needed. (This is why I figure that the current state of the art in multithreaded programming is so lousy.) Generally, languages that are designed to work in an unusual evaluation model are fairly different from most traditional programming languages. For example, programs in Haskell, ML, or Prolog are quite different from those in C, Perl, or Python, and require a different way of thinking about programs.

Now, I've worked with unusual evaluation models; for example, Params, my magnum opus at Juniper, is based around reverse-chaining evaluation. I haven't done much work on distributed computing, though. I did a small research project at SWT, and designed Params v1 and v2 so they each could later be migrated to a distributed model (e.g., Beowulf) without completely redesigning the core algorithm.

Sawzall is, as alternative model languages go, pretty straightforward. But it's still a bit more work to think about. As I've been working to understand how the language works, I've had to think carefully about what the implications of the distributed model are. This is the area where I had the questions I mentioned on day 9, when I got referred from one person to the next. I'm a little bit surprised that the others I spoke with hadn't looked into these issues themselves. On the other hand, I'm a bit more of a programming language geek than most programmers. I enjoy thinking about the ins and outs of programming languages.

Now that I've gone through all that, you might understand why I don't talk about what I'm working on much. So let's talk about some more fun stuff, and more of my narratives.

As I said, I was pretty tired today. After just a couple of hours of working, I was having trouble concentrating on anything of significant complexity. I decided to take a little walk, see if that would help wake me up.

After a little bit of walking around, I decided it wasn't helping, and a nap was in order. But where? I walked into the nearest building and wandered until I found a couch. I put Pachelbel's Canon on the iPod, and relaxed.

It wasn't much of a rest. The couch had a pretty hard frame. It would be fine to sit on and talk, but it wasn't much of a bed. Fortunately, a friend I'd seen around campus happened by, and gave me another suggestion. Just upstairs, there were some small conference rooms; little more than phone booths. (My understanding is that they're usually used either for phone calls or interviews.) Two of them have the huge 6' beanbags I mentioned on day 2. Both of those were occupied, but there was another such beanbag (this one 8') nearby. We moved it into an empty room (have you ever tried to get an 8' beanbag into a phone booth-sized room?), where I was able to rest to the strains of Schubert's Piano Sonata No. 20 in A, D. 959: IV. Rondo (Allegretto). Despite the overly complex name, this simple song is possibly the most relaxing music I know. (A portion of this was used as the credits music for the 80's sitcom, Wings.) (The enclosed photo is of a 6' bag, taken later when the room was unoccupied.)

After that, I went on to lunch, and enjoyed some orange chicken with jasmine rice and a small green onion cake. I will say, despite the wonderful food at Google, the chopsticks are pretty lousy. If I find myself eating Asian often, I might keep my own set at work. While I ate, I considered that although I'm a pretty finicky eater, I don't ever have problems finding food that I like at Google. I'm a bit surprised by this.

Back to the desk, back to work for a little while. Still sleepy, and my knee hurt. After some time at this, I went to the pharmacy nearby. Now, if you have time, you might look at the route Google Maps gives to get from Google to the Walgreens. I ask you, how could I have taken a wrong turn?

http://maps.google.com/maps?f=d&hl=en&geocode=9430998064533961443,37.403936,-122.096970&saddr=1600+Amphitheatre+Parkway,+Mountain+View,+CA+94043+(Google)&daddr=112+N+Rengstorff+Ave,+Mountain+View,+CA+94043+(Walgreens)&sll=37.41393,-122.090945&sspn=0.03395,0.058365&ie=UTF8&z=14&om=1

Nevertheless, I did, but it was easily rectified. I spent a little bit of time talking with the pharmacist about my sleeping problems, and got what I think is pretty good advice. (I'll still need to order a PSG, but this should help deal with the issue temporarily.) I also picked up another reusable icepack with a knee strap, so I can have one at work and another at home. Finally, I got a couple of chemical (instant) icepacks and an Ace bandage, so I can apply an icepack if I need to when I don't have one frozen.

As I went to Google (about 16:00), I saw that the sky had suddenly gotten overcast. When I got back, Karl pointed it out, saying, "Is this still California?"

The overcast skies didn't keep people from enjoying themselves outdoors, though. Volleyballers played volleyball, jugglers juggled, dancers danced. The dancers were what originally caught my eye— or rather, the music caught my ear. Bongos and guitar can do that.

Noogler, Day 10: What am I doing here?

I had no idea what to do today. Last week, I had no classes, so I was able to do my own work. This week, I have classes, but none today. I didn't want to embark on a long course of study, since I had only today to work on it, but then again, I didn't want to waste the day either.

My morning, however, didn't give me much of a problem deciding. I slept late. I got up around 9:30 or 10:00. While I was in the shower, it occurred to me that I have an 11:30 workout scheduled. If I left here at 10:30, I could get to campus, be there for half an hour, and then have to leave. What was the point of that?

I did a little reading from my living room, and then went to my workout.

Straight from there to Charlie's to get some lunch, or (if you remember my day 8 post), "breakfast". As I ate my chicken enchiladas, I had a brief chat with a security guard I had met but hadn't mentioned on day 3, and listened to a podcast of Gabe and Tycho ranting about how disappointed they were in the Zune. (I didn't bother to finish listening to it.)

Filled with energy, I promptly dodged going to my desk by walking by the techs instead. It may have been a vain hope, but I asked if they knew anything about the stocking situation on the Macs. Fortunately, they informed me that they now are distributing Macs, and I might get mine any day now! I stood there and contemplated what life would be like if I had the ability to carry around my own personal computer. But that's just silly fantasy.

Then I went to my desk, where I still didn't know what to do to be productive. So I worked on my HR checklist instead. I went to add my pager to the pager database, but there were some technical problems with that.

I had previously asked— on my first day— about getting a Maltron keyboard, since it's much easier on my wrists. They told me that the Kinesis is the one they usually give out, but I could get a Maltron if that was more appropriate. They recommended that I get an ergonomic evaluation. (I've had one early on at every company I've worked at out here.) I had put that off so far, but it's something I should attend to. So I did.

The ergonomics group has a web page with some steps to take to adjust your chair and monitor properly, as well as some information on stretches and other work habits. They also had a link to where you can request an evaluation. I went down their list, and then requested the eval.

I soon decided that I should do something more directly related to my job, so I sat down to study some of the material I'd been working on.

At this point, I should probably point something out. There's large stretches of time that I don't chronicle. Of course, I'm talking about the technical study I do; I don't write about it, because it doesn't make for very interesting storytelling. Douglas Adams, in the early chapters of "So Long and Thanks For All the Fish", poked fun at himself for doing that.

It's just not terribly exciting to wade through a lot of my day. "I tried to check out the ops repository, but was told that my client wasn't created. However, it was trying to check out a different client than I was using. So I went back over the steps from a previous lesson, and realized that the client name needs to be set in an environment variable. I hadn't remembered that, so I checked my environment, and sure enough, it wasn't set. I took a little bit of time to clean up the phantom clients I had inadvertently created..." and so on.

It's fluff. You've got your own life to live once you're done reading this post (and possibly commenting); I won't bore you with the duller parts of mine. I'll leave the vast filler material to the works of bestselling fiction, so they'll have something to abridge for the audiobook version. It's not my place to do so here.

I bring this up because you might otherwise get the idea, based on a reading of these emails alone, that I never actually do any work. You might think I flit from cafeteria to gym to pool to arcade, never doing anything that might improve shareholder value. While I will readily acknowledge that I spend a degree of time in such activities, I also do spend unlisted hours at my computer working.

If I hadn't told you that, then you might wonder about if I worked at all today when my narrative went from asking for an ergo evaluation to riding a bike around the north end of campus, with only a sentence between.

I had intended to explore the park at the north end since I got there, but never had gotten around to it. The park turned out to be not at all what I expected, but nevertheless quite a nice place to relax and clear my head. I took a picture to include here, but I couldn't get the sun to move to the right angle to avoid the picture being backlit. I figure the best lighting for that photograph is to be had at about 8:30am, so you therefore should learn to live with disappointment. I did, however, manage to post a picture from a more unusual angle.

I took the bike back towards Charlie's, made myself a salad and turkey panini, and went back to work.

The rest of the day was the sort of dull work-stuff that I previously said I'd skip over, and besides, my laundry's done, and I need to sleep and be up early tomorrow. Oh sleep! it is a gentle thing, beloved from pole to pole.

Yeah, if I'm quoting Coleridge— and not even the best parts— it's definitely too late for me to be writing. So I'll just leave you with the pictures. I'm sorry I forgot to include the balloon picture again; one of them is now purely in the force of gravity, no longer buoyant. You'll have to either use your imagination (which should be quite easy for you), or wait until tomorrow to see it.

Monday, July 09, 2007

Noogler, Day 9: Freedom!

I showed up at work at about 10:30 or so, and most of the desks in my part of the building— where my team all is— were unmanned. I made a mental note to ask about what the team's typical hours were.

Since I now have my starter project, I figured I should start learning about the systems I'd be working on. I'll be working with a guy named Jason on this project, so I looked over at the desk where he sits. (Our offices have mostly glass walls. There's furniture, markerboards, etc. in the way, but I could still barely see Jason's desk from mine.) He wasn't there, so I sat down to study the systems I'd be working on for this project. It's not on my existing to-do list, but it seems important, and a good way to be going. There's several hours of material for me to work through to learn it.

My knee was bugging me that day, so I pulled my icepack out of the microkitchen's freezer where I left it Thursday. (My trainer and PT both tell me I need to be icing it daily anyway.) Unfortunately, some sort of syrupy substance had dripped on it. It was quite icky, so I carefully put it on my desk and went back to wash my hands. By the time I got back, my officemates were present. No ice today, sigh.

At lunchtime, I went off to lunch. There's a lot of options on campus, and I hadn't really been doing a lot of exploring in that vein. Although Charlie's has four to six different stations— depending on how you count— there's still plenty of variety around. I looked over the menus online, and picked out a place called American... er, something.

I hopped on one of the bikes and started going over to the building where it was located. I took off my headphones as Dirk's advice regarding them echoed through my head. (Dirk was the one who helped me when I first started biking.) I wish I'd remembered another part of his advice... the part involving shoelaces.

The shoes I was wearing that day have long, floppy laces. I double-knot them, but they're still too long. As you've no doubt figured out by now, one of them got tangled in the pedal. Being long, it was able to twist around the pedal several times before I felt the tangle— i.e., when my foot suddenly was stopped by my own shoe.

Naturally, my first instinct was to pedal backwards to untwist my shoelace. Bad idea. These bikes don't have the handbrakes I'm used to. They've got coaster brakes, i.e. the kind where you pedal backwards to stop. Instead of untwisting my shoelace, I came to an abrupt stop at the corner of the intersection I had been crossing.

I couldn't pedal forwards because of the shoelace being tangled, and couldn't pedal backwards with the coaster brakes. The pedal was at a rather inconvenient angle, and I couldn't dismount the bike. All I could do is hobble along awkwardly until I was well away from the corner, and then work out how to lower the bike to the ground without falling myself. I hope you're getting an amusing Charlie Chaplin-esque picture of this in your head, because I'd hate to have gone through all that silliness without getting some entertainment out of it.

Eventually, I did manage to disentangle myself from my bike, tucked my shoelace into my shoe, and rode on. I took a bit of a scenic route to get to the building I was going to, since I hadn't really explored campus much.

The cafeteria in question had a long line— unusually long, from what I overheard one of the chefs saying. There were also a high percentage of guests that day. I'd heard that a number of people had family visiting for Independence Day. Talking to somebody near me in line, I theorized that this could be the cause for the long line. She pointed out that many of the employees were taking vacations for the holiday.

I acquired and ate my lunch, and considered going to the next room over, where there were a number of classic arcade games like Defender and Robotron. But I had my work cut out for me, and I had taken a relaxing lunch, so I went back to work without playing. I considered taking the bike trail, but decided to do that sometime when I'd have proper time to check it out.

I considered these things. What I should have considered was tucking my shoelaces in this time. Feel free to incorporate by reference the relevant paragraphs here, because it all happened again.

Are you done laughing yet? Take your time; I'm not offended.

I went back to my desk, again checking to see if Jason was available. Not around again, so I sat down to continue on with my studies. I went through these for a few hours, and came across some questions. Karl, my officemate, was the first one I'd go to, since he knows that system, but he wasn't in the office today. Eric, my mentor, wasn't around at the time, so I went to Alex, my boss. He gave me the names of a few people, one of whom I knew: Chip, who had interviewed me. I asked Chip, and he referred me to somebody who knew more than him. I went to that guy, asked him my questions, and he referred me to somebody who knew yet more. In an intellectual environment like Google, it's quite flattering when you've got questions that nobody can answer. (One writer on the culture (esr) once wrote that "Good question" is a high compliment indeed.)

Finally, I did meet somebody who could answer my questions, and a few others that I thought of while I was talking to him. There's a number of programming styles that Google uses regularly to deal with the scale they work on, and these are styles that I just haven't ever had to think about much. In some ways, it's like I'm starting over with programming... just with enough experience to get up the learning curve quicker this time.

After I got back, my mentor stopped by to talk to me about how things were going. We chatted a bit, and I asked him about the time that most people start their day; he said about 10:00 or so.

I also asked about a few things regarding communication. First, I asked if I would be expected to have my pager around when I'm not on-call; he said it wasn't necessary. He did say that I should put my cell phone number in the internal directory. That's something I haven't done, because at Juniper I knew that there were people who wouldn't respect my personal time. Eric, however, told me that in the years he's had his cell in the directory, he's only had a very few calls— and all of them were very appropriate. Okay, that makes me feel better.

It also doesn't hurt that if Google wants me to put my cell number in the directory, then I can get reimbursed for my cell plan.

Speaking of such things, I had heard back from Speakeasy on Thursday. They were calling to ask whether I wanted the reimbursement put as a credit forward on my account, or returned to my credit card.

After the conversation with Eric, I spent a little more time working, then took off to start my weekend. Unfortunately, I forgot to take the balloon picture. All I got was a picture of my shoelaces wrapped in my bike pedals, and it wasn't really that interesting.

Next week, I have more classes, so I'm off to bed.