Friday, July 31, 2009

Patient Identifiers as Functional Equations

Not long ago I was talking to the CIO of a major hospital - won't say which one ;) - and describing how the Brazilian national EMR uses URIs to render unnecessary the traditional names, addresses, and other identifiers which many people in the Amazon River Basin simply don't have.

URI - Universal Resource Identifier.

His reaction surprised me. First, that he had not heard of this, a nationwide paperless medical record system, the largest open source project in the world, funded in part by the United Nations global health fund. I came across it through the open source Java community. Then he asked, "Why can't we have a universal identifier?"

So right now I am telling you to forget about universal identifiers. Not in this country. Instead start thinking about something better:

Organizational identifiers and computational inferences of equivalency.

I just started studying the IHE technical framework, and I have not yet dug into the guts of the live system, but I'm already getting the feeling that this approach is more in line with how I have been thinking about things.

Thursday, July 30, 2009

Semantic Search Done Right

Someone gets it...

Sigma, Semantic Information Mash-up, from our friends at DERI in Galway. This is a glimpse into the power of semantic search. It will not look like regular search. It will not look like Google. It will not be a simple ranking of keyword matches. It will not, in short, be one dimensional.

Sematic web, the web of data, is multi-dimensional. The days of one-dimensional search ranking are drawing to a close. I don't know what the UI will ultimately look like, but when we finally get there you will search by starting with an idea, and from that idea you move in one direction or another to other related ideas. Your sources will be ranked according to relevance and reliability. You will find new, related concepts. Keyword homonyms will no longer be an issue. This is where the web is going.

Tag your pages now.

Thursday, July 23, 2009

My Google Interview: Epilogue

I could put this badge next to a stock ticker to show the exact moment the economy went into free-fall, dragging Google's stock price and hiring budget down with it. Do I have great timing, or what? I guess you can't be in the right place at the right time every time.

A few weeks after the rejection - and my free t-shirt - I got an email from Google. It was a customer satisfaction survey! They wanted to know what I thought of the interview process, how it could be improved, etc. Did I apply for a job, or buy a home stereo? Personally I thought the whole process was great, and so were the people involved. Of the phone interview I said, "It was an efficient exchange of relevant information, exactly what I look for in a technical interview." The interviewers got high marks from me.

I never had to fill out a customer satisfaction survey after a job interview before. Sometimes I really like Google.

I was talking to Kevin, who co-organizes SV-GTUG, the developer group for all things Google in Silicon Valley. He was rejected three times. Would I apply again? Probably not. I'm glad Google exists, but I'm going in a different direction now, and I am happy to be just another silicon valley software engineer. I think it's a pretty cool thing to be.

Friday, July 17, 2009

My Google Interview, Part 2

"Everyone knows about the crazy benefits at Google," I said, "but the truth is I'm only interested in one benefit, and that's 20% time. I'll take a job as janitor if you let me spend 20% of my time working on a research and development project of my choice."

So began my series of conversations with Google. I knew that would be a good selling point, but it was also true. I had some ideas and could think of no better place to develop them. Access to the resources, talent, and knowledge base within the Gooogleplex was my #1 reason for wanting to work there. All the other stuff you hear about - free food, car washes, volleyball, the purpose of that is to make it a good place to stay and code 24 hours straight.

I like smart people, and I like solving computer problems, so the all-day on-site interview was very enjoyable. The HR recruiter greeted me in the lobby and asked if I'd ever been to the Googleplex before. I replied that I had actually been there the previous Tuesday. In fact I'm down there probably once or twice a month just through my involvement in the developer community.

I'm not going to discuss the interview itself or say anything in violation of the NDA I signed, but let me answer the most common questions. First, I did not get a tour of the Googleplex. Through the entire day I saw the lobby, the cafeteria, and a conference room. Like I said, I'm in Building 43 often, the one with the model of Spaceship One hanging from the ceiling. I do have a funny story involving Spaceship One, the X Prize, and William Shatner that I didn't get to share, but that's my only regret there. Second, no they did not ask goofy questions. I know Google has a reputation for doing that but it wasn't the case. The questions were very good, relevant to the job, and clearly tested my knowledge and skill. Third, being grilled all day was not stressful. It was fun. At the end of the day I felt great. I got to show off and fill up whiteboards with drawings and show that I know how to solve the kinds of problems they need solved. Finally, to answer the big question and remove any remaining suspense, I did not get the job.

I got a call a week and a half later and knew that was too soon to be a yes. They said it was a close decision. It's okay. I know more or less where I went wrong, I'm in good company, and I'm convinced I could get the job if I interview again. Also this was during their big stock slide and they had an unofficial hiring freeze and were laying off contractors. In any case I feel good enough getting as far as you can possibly get without actually getting an offer. It tells me they think I'm good enough to work there, and that's good enough for me.

The day after the rejection I called back and said if I can't have the job can I at least have a free t-shirt.

I got it.

Do I know how to negotiate or what?

My Google Interview, Part 1

Google has a famous (infamous?) hiring process: long waits, weird questions, or so I heard. My experience was markedly different. Someone put me in touch with Google HR, I sent my CV, and I almost immediately heard back. Later that week I had my initial phone screen, which went really well. The following day she asked when I would be available for a phone interview. I gave her some inconvenient times this week, and said anytime next week. From this point onward, I was actually putting them off. I knew it was going to be a tough technical interview, and I wanted time to study.

Some of the books I studied:

The Art of Computer Programming (Knuth), volume 1, sections 1.1-1.3, working all the exercises, for a math and algorithm refresher.

Introduction to Algorithms, the canonical college textbook.

The Practice of Programming (Kernighan and Pike), an excellent book.

Sun Certification guides for Java and JEE.

Design Patterns in Java, Core J2EE Patterns, and the Gang of Four book.

Effective Java, if you are a Java programmer and have not read this book, read it now.

The "Fielding Dissertation" on the REST interface and other ACM/IEEE technical papers.

...and many others! For the next 2 weeks it looked like a library exploded in my house.

Phone interview came and went great. It was given by a Dutch engineer who's job at Google is to classify pornography. The questions were challenging and tested my knowledge of algorithms, Java, and problem-solving. Mostly centered around search, sort, and general programming practice, he seemed impressed when I answered one question with an "except when..." and pulled out a bit of trivia on how the JVM deals with pointers to arrays of primitive types in a pass-by-value scenario. Ha! The guy is quizzing me and he had to look something up.

Two days later I was invited for an on-site interview.

Again, I gave them the, "Well this week is booked but how about next week" stall to give me still more time to study. They were merciful and scheduled it for Friday.

About this time, I'm feeling really special. I sent an email to my friends, one of whom had already interviewed at Google, which led to the following exchange.

From: Tom Wilson

to Charles, Elana, Lori, Alex
Sep 19

I got an on-site interview (with Google) scheduled for next Friday.



From: Elana Silver

Sep 19

Make sure to figure how how many pandas can fit on a cruise liner before you get there. Also, how many prime numbers there are between 17 and 775.


From: Tom Wilson

to Elana
7:55 PM

Good idea!

google search: cruise liner deadweight tonnage
10,000 tons at 100 cu ft/ton = 1,000,000 cu ft of cargo space.

google search: panda transport cage size
45cm x 40 cm x 45 cm (red panda)
= 1.48ft x 1.31ft x 1.48ft = 2.87 cu ft

1,000,000 cu ft / 2.87 cu ft

= 348,000 pandas.

That would be 131 prime numbers. Algorithm follows.

static public ArrayList getPrimes(Integer lowerBound,
Integer upperBound) {
int i, j, notPrime;
int[] n = new int[upperBound - lowerBound + 1];
// list all numbers
for (i = lowerBound; i <= upperBound; i++) {
n[i - lowerBound] = i;
// remove non-primes
for (i = 2; i <= upperBound / 2; i++) {
j = 2;
while ((notPrime = i * j++) <= upperBound) {
if (notPrime >= lowerBound)
n[notPrime - lowerBound] = 0;
// put remaining numbers in a list
ArrayList primeNumbers = new ArrayList();
for (i = lowerBound; i < upperBound; i++) {
if (n[i-lowerBound] != 0)
return primeNumbers;