Psychic iCal; rough schedule

When I started at Choice in March of 2004, I entered a recurring event into iCal.

It's called "MONEYS," and recurs every other Wednesday, when my paycheck appears. (At the time, getting a regular paycheck was kind of a novel concept. Freaking startups.)

Rather than telling the event to repeat forever, and littering my future calendar with paychecks, I entered a stop-date. When I got to that date, I figured I'd extend it into the future if I were still at Choice.

What stop date did I choose? 20 December 2005.
When's my last day at Choice? 20 December 2005.


So, for all three people that read my blog, here's the schedule I'm working with right now.

December: tidy up my affairs and start organizing (i.e. selling off) my stuff.
20 December: last day at Choice.
28ish December: apartment hunting trip to MV.
1 January: temp housing kicks in, allowing me to visit it at the end of my trip.
6 January: get all my stuff on the road to MV.
8 January: move into temp housing.
16 January: start new job.

This is tentative; I'm still waiting on confirmation from the relocation guys.


Well, that was sooner than expected

A number of scheduling issues came together today. The timing was perfect.

I submitted my resignation.

I am free!

(...well, in three weeks.)

Growing up.

So, as I mentioned, I received a job offer from Google.

It's in Mountain View, California, which is kind of a long commute from Tempe, so I'd have to relocate. Before you ask, no, I don't actually know the job title or responsibilities yet. Google is über-secretive, and they also seem to let people get acclimated before choosing an area of focus. Which is good.

If I accept the job, it'll be the first time I've lived outside of Arizona, or moved anywhere without a social support network. I think I'm ready for it, but it'll be interesting nonetheless.

As if to seal my decision, I arrived at work on Monday to find a performance bonus waiting for me. I'm glad Choice likes me, but the bonus — for expanding their customer data system to handle Canada, French, and the like — amounts to 1/40th of the pay increase Google's offered me.

They also announced that we would receive an additional 24 hours of personal time next year. "Personal time" is time you can take off, without pay, without getting fired. This is in addition to my thoroughly meager vacation allotment (currently 1/3 of the starting allotment at Google), meaning that I can now take a week vacation at some point during the year, and still have three days of unpaid leave available. Yay? I'll just burn my (paid) sick time, thank you very much.

I also received a small refrigerator magnet, for some reason. It's like the "My mood today" magnets, in that it has a bunch of little pictures and a sliding indicator-box. It's labeled "Today I need...." I found some of the options particularly ironic:
- "A day off!" (Using my new unpaid leave!)
- "Some respect!" or "A promotion!" (Rub it in.)
- "Overtime!" (Why would anyone ever use this setting?!)
- "A massage!" (There are two companies competing for me; the one that doesn't offer massages gives me this magnet?!)

Beyond the overt thoughtlessness of giving your employees an "I need things I can't have!" magnet, there's a practical issue: my cube contains no magnetic surfaces. I nailed it to the wall.

So, it's looking like I'm going to exercise a different kind of unpaid leave. The kind for which you give notice.



So, to put speculation to rest: I have received a job offer from Google.

The numbers are smaller than I wanted. However, it's fricking Google.

I'll keep everyone posted as things develop.


Birthday; frustrations with electronics stores and the Democrats


Yes, I have completed another year.

Went out today in the hopes of adding more sensors to the robot. While I work on convincing myself to strap a camera to the thing, I'm looking for some low-cost options, like simple light sensors. So what'd I do? I went to electronics stores.

Or so I thought. Fry's had neither photoresistors, nor the connectors I needed. Fry's, the store that drove TechAmerica out of business! RadioShack had photoresistors, but nothing else I needed. (I have no idea what it is RadioShack sells these days. Remote-controlled cars?)

Anyway. I was listening to NPR today for my daily dose of Liberal Bias™, and was reminded of some of the reasons why I'm so frustrated with the "political opposition" in this country.

Once again, Bush delivered a speech justifying our continued presence in Iraq by linking it to the "War on Terror." Why the hell are we still letting him get away with this? Even the daftest of neocons must recognize that Iraq is an entirely separate issue. Why weren't a dozen senators immediately leaping over themselves to point out this idiocy? Because the Republicans are expected to fall in line behind their party chief, and the Democrats are spineless.

And, of course, criticizing the war effort "emboldens our enemies." I'm tired and frightened of this sentiment. Political opposition and discourse — or what passes for it in this country — emboldens our enemies? Hm...is that because they "hate freedom," and political discourse is one of our fundamental freedoms? Frankly, I think it might cut down on hatred of this country if we could be seen as something other than a unified mass of greedy fundamentalist capitalists. But does the supposed opposition party attack this notion? No. It goes like this:

Realist: "The war, it does not go so well."
Neocon: "Saying that gives power to al Qaeda, like in Highlander, where they suck soul energy out of the decapitated body of the other Immortal."
Realist, now with tail between legs: "I HEART FREEDOM."

Sigh. A more appropriate response would be "Any high school debate class in the country would recognize that as an Appeal to Consequences of a Belief at best, and a strawman at worst." Or, in less civil circles, "Oh, hey, that's the old ad I'm-a-fucking-idiot argument."

And, of course, the neocons in this country presume to have a monopoly on moral values. Nevermind for the moment that these are the folks that want to tell you who you can marry, that want to abolish the minimum wage and send your job to India, and who count among their ranks formerly-fervent segregationalists. Let's ignore that for the moment, and get to a more topical issue:

When it came to light that the US was torturing inmates in Iraq, running secret prisons and interrogation centers in countries with poor human rights records, and the like, what happened? The neocons, turning their Jesus-powered million-candlepower spotlight of "moral values" onto the issue, immediately banded together as one voice to do absolutely nucking fothing. No bill condemning the use of torture. Many Republican congressmen came out in support of the methods, insisting that we could only win our War on Terror if the terrorists couldn't be sure how far we would go in interrogations.

In a word: No. This is not what we do in this country, and this is not what our anointed representatives do abroad. It is fundamentally contrary to the values on which this country was founded. If the richest, most technologically advanced nation on Earth cannot win a war without electrocuting the genitals of some terrorists, this is a problem.

And I'm sure our overtures to Freedom look pretty fucking anemic in light of this.

Fortunately, in response to the massive anti-torture "Eh" that arose from the right side of the aisle, the Democrats banded together to issue an "Eh" of their own. I have not heard a single member of Congress come forward and plainly state "Torture is wrong, it is not what we do in this country." It would have been an obvious moral crowbar in the 2004 Presidential Election. Sadly, the closest thing I've heard isn't even from the left side: it's from McCain, who has obvious motives for disliking torture. (I gain more respect for that guy every time I hear him talk. If only he weren't such a social conservative.)

It's conditions like this that make me think about going into politics. We've got the Jesus Party, and the Unspecified Platform Party. They're either espousing the ideals of their religion and ideology, or they're not espousing anything in particular. This country needs a good shot of constitutional idealism, right in the arm.

This is a nation founded on freedom, sure, but it's also a nation founded on integrity, free flow of information, personal responsibility, secularism — overall, a nation founded on, and in the pursuit of, human enlightenment. Everyone seems to have forgotten this in their race to cover their cars with flags and ribbons.


Mountain View wrapup

I've been back in Phoenix for a couple days recharging. Here's the wrapup on the Mountain View trip.

Click any photo to see a larger version or comment on it specifically.

First, Mountain View is pretty.
Look! Pretty leaves! And they do that EVERY YEAR!

On Saturday I went to the Laughing Squid 10th Anniversary party. It was sort of web-geeks-meet-Burning-Man.
Laughing Squid 10th: Exterior
Laughing Squid 10th: Interior

Hung out with a bunch of folks from Yahoo!, a couple Apple-types, and at least one Googler, but the highlight was most certainly Ouchy the Clown, who was spinning the best of Burl Ives and other modern hits.
Laughing Squid 10th: Ouchy the Clown

There were a number of exhibits there that clearly came from people with too much spare time. My favorite, which was too dark for me to photograph, was a center-pivoted spinning rod with a seat on each end. Each rider, facing in toward the center, could pedal to make the whole contraption spin around. Fuuuuun. Jason served as an excellent counterweight.

At one point, we tried to pass a beer to one of the riders. After whooshing past us several times, he finally made contact with the beer — which, in devout observation of Newton's laws, shot off tangentially and beered the audience.

See also: the Photoboof!
Laughing Squid 10th: Photoboof!
This was a homemade photobooth...err...boof, which spit out free pictures of its inhabitants. I did not use the Photoboof!, because I wasn't sure where else the pictures would end up. You can't trust those web developers.

On the home front, the robot has learned to navigate hallways and hookah lounges with surprising grace, considering the simplicity of the program. It's being controlled entirely by its motor-control board — the equivalent of a chicken with its head cut off, running only on base neural reflexes. I'm working to wring every last drop of smarts out of this simple system, which, among other things, means I get to rewrite the abysmal compiler and library supplied by its manufacturer. Sigh.


Mountain View; Google vs. Microsoft

Once again, I'm at the Red Rock Coffee Company in downtown Mountain View (at Castro and Unlabelled Street #48, which Google Maps suggests may be called Villa). I'm outside, where the air is brisk, the leaves are turning, and the traffic is...well, shitty.

But I'm on foot, so it's okay.

Mountain View has its perks. I'm at this great coffee shop, across the street from (clockwise from left) an excellent Indian restaurant, a great brewery/burger joint, and one of the best Thai places in the area (so I'm told). There are also an absurd number of tech companies here, judging from the commuter shuttles that keep passing by. Microsoft was the most recent, which reminded me to blog.

Like last time, I spent a solid five hours in my Google interview today. I was very comfortable with everyone, which, with any luck, showed through in my responses. I think I did well, but I really have no way of knowing. At the very least, I had fun.

I returned home to find an "e-Interview" email from Microsoft. Now, I expected to hear from Microsoft — mge sent them my name about a week back — but I found the contents of the email indicative.

First of all, I can't decide whether "e-Interview" should be pronounced "EEHN-turr-vyoo" or "EIN-turr-vyoo." I lean toward the former, but that's probably just because I like saying EEHN.

But moving beyond issues of pronunciation, the email contained a curt greeting followed by a form for me to fill out. Not, like, "How should we contact you with more information?" either. No, this contained 11 short-answer questions, ranging from "How confident are you in your ability to write C/C++ without a reference?" to some pretty specific coding methods questions.

Now, I realize I'm but a Southern boy, but I always learned that peppering someone with questions was an awfully rude way to introduce one's self.

To explain why I'm taken aback by this, let's step back for a moment and look at the equivalent communication from Google. The process went like this:
1. Google requested my résumé. I supplied it.
2. Someone from Google called me and told me about what they were looking for, gave me a synopsis of how life at Google works, and offered to answer any questions I might have. Later, he collected info on where I felt my strengths lied, to better route my further interviews.
3. He called back a few days later to set up a phone interview.

By comparison, the email from Microsoft seems awfully presumptuous. It's as though they're assuming I want to work there — they made no effort to convince me that MS was where I should be. I've seen the questionnaire on which my name was provided, and it asks this:

"Is there anyone else in your set of peers or friends who you would like to recommend as a great candidate for Software Development positions at Microsoft?"

So, basically, anyone that is recommended as a great candidate obviously wants to work at Microsoft. I did not send in my résumé unsolicited, or even solicit this contact through a friend. No — I was simply recommended.

I'm trying to decide how to respond. Compared to my correspondence with Google, this seems awfully brusque.


Upon the rails, among the weeds

I'm back in Mountain View. It's colder this time.

(The orange shiny thing in the distance is the ocean. I'm not used to this shit yet.)

For the first time, I slept on the airplane.

Geek that I am, I brought the robot (which was working) to entertain myself this weekend. TSA managed to, um, damage parts of it. I am not amused. Fortunately, the repairs are straightforward.


It seems my robot is Jewish.

It's Tuesday, and we all know what that means: I've finished my work for this week. So, I've been doing math.

Specifically, robot math. (And no, I don't mean ROBOT + ROBOT = EVIL ROBOT ARMY.)

You may remember my holonomic drive design. It can move in any direction without turning, sure, but I knew that its maximum speed would be different in different directions, in the way the speed of light isn't.

My reasoning was thus: a wheel can exert force best in the direction it's driven — in a car, for example, that'd be "forward or backwards." Since the omni-wheels on the robot are frequently dragged side-to-side by the other wheels, as well, they can't always give their all. The robot can exert the most force — and thus move fastest, barring other influences — when any two of its wheels are moving at top speed. (If all three move at top speed, it spins in place.)

I tend to think visually, so I wanted to get this idea into graph form. The visual representation is simple: for each direction from a central point, shade outwards according to how fast the bot can move in that direction. (Mathematically speaking, this is a polar inequality bounded by a set of three linear equations, one for each wheel.)

Well, here's the amusing bit:

The solution — the maximum speed, given limits on the speed of each wheel — is the shaded hexagon. But boy, was it odd to see my calculator slowly drawing a shield-of-David before it shaded the center.

The wheels are indicated by the fat dots around the circle there. So, if you note the locations of the points on the hexagon, you'll see my suspicion was correct: the robot moves fastest when being driven toward or away from any one wheel, meaning that wheel is stationary while the other two spin at top speed.



Human textual behavior

As noted on my old blog, I was asked to submit comments on a prepublication copy of Java Concurrency in Practice.

Every Java programmer should own a copy of this book. It's that important. I'm pretty familiar with the inner workings of the virtual machine and its memory model, but I'm still learning a lot from this marvelous book.

The book also states, clearly and simply, principles that I've had to derive by hand over the past fifteen years or so.

If you clicked on the link, you'll note that the book's not yet available, because we haven't finished polishing it. I just submitted my first batch of comments. Now, those of you who've seen me loosed on another's writing know what the authors are in for here. My standards are high. (Though, before I get the snide comments, I don't enforce them on my own blogging.)

Fortunately, the authors dug it:
Truly excellent comments. I will tell the editor to push back the pub date some more :) Keep 'em coming!

Material wealth and fame will be yours for this endeavor. (OK, a free book and a mention therein.) And my undying gratitude. And all the beer you can drink next I see you.


The ironic thing here? I still have to argue with marketing at work about where the commas go, in addition to things like verb number agreement. I'm a programmer, after all, and obviously don't know what I'm talking about. Perhaps I should point this out to them. :-)


Resurrecting ideas from a 14-year-old journal: the Holonomic Drive

When I was about 10, I realized that I should keep a journal of my ideas.

Mostly, I started doing this because other people were having the same ideas. Many of the things I was sketching out in class were appearing in Popular Science and the like a few months later, so it seemed I was on to something(s).

Many of the ideas were robotics-related. I'd been tinkering on mobile robotics off and on since I was about 8, thanks to my techie parents.

Around age 11, I started to think about alternative locomotive schemes. Most robots I had encountered were driven by wheels, obviously inspired by a car or wheelchair. As anyone who's driven a car knows, the wheel scheme limits your mobility (three-point turns, anyone?). This is even more painfully obvious to anyone bound to a wheelchair.

I had seem walking robots. Hell, I had built walking robots; the robotic spider I built out of Legos in sixth grade was slow and fragile, but it freaked the hell out of the girls. I learned a lot from it — for example, I learned that building creepy robots is a great way to put off getting laid until college, if not later. But more importantly, I learned that man-made legs are complex, error-prone, and fragile. (For the other armchair roboticists, I used a pantograph leg mechanism with overlapping sweep and tripod gait, each with two degrees of freedom. Not that I knew any of those words.)

So, during summer school, I came up with a number of alternative schemes. One (which I called the Trinity Motor) involved special wheels which had smaller wheels, pointing off to the sides, around the rim. Here's a cleaned-up version of my original sketch:

Envision the axle coming out of your monitor, through that hole in the center. The whole assembly can rotate clockwise/counterclockwise (rolling to the left or right). However, if you grab the axle and push it into your screen, or pull it out of your screen, the little wheels on the edges roll freely. The key here is that the wheel can push along one axis (left/right, here) but be pushed freely on another (in/out of your monitor).

So, then you gang three of these up, 120 degrees apart around a circle, and you get this:

In this diagram, two wheels are being turned by motors (in the directions of the colored arrow) while the third wheel is being pulled along freely on its little edge-wheels.

This type of drive can move freely in any direction (well, except into the air), and can even rotate while it moves: if each wheel in the diagram spun a little more counter-clockwise (or a little less clockwise), the whole body would turn as it moved.

This was before the age of cheap and ubiquitous computing power, so I even designed a special joystick to control the base, doing the calculations with a series of interlinked levers. (I now understand that the calculation is the "vector dot-product.") The main problem I could see is the bumpy ride: as the wheel turns, it would go thunk thunk thunk from edge-wheel to edge-wheel. This can be reduced by putting more, smaller wheels on the edge, but that struck me as less-than-ideal.

Anyway. Shortly thereafter, I discovered girls, and my productivity tanked. Fortunately, however, someone in the past n years has had the same idea, and fixed the wheel problem!

Clever! I exclaimed. Two of my wheels, bonded back to back, so that a roller is always touching the ground!

In the mainstream robotics community, these are called omni-wheels, and the drivetrain design is known as a holonomic drive — a fancy math word that means it can rotate in place, move in any direction, or do both at the same time.

My original prototype used scavenged rollerblade wheels on wire around a cut-up lawnmower wheel. These prebuilt wheels are not only higher quality, but at $16, they're cheaper than building it myself. I think it's time I return to robotics.

Who cleans the champagne off the front of the boat?

Welcome to my new blog. I'm tired of separating my social, scientific, and techie stuff; I'm merging everything into one place.