But, I think as humans we ultimately can’t leave well-enough alone, and being human (yes, debatable), something needed to change. Due to some personal and professional reasons, I decided to leave Yahoo! to pursue other opportunities. I was there 3 1/2 years and I had some great times. I worked with really smart, passionate people and worked on projects with major impact. Yahoo! was a great experience for me – they moved me out here, gave me fun stuff to work on, allowed me to pursue my technical interests and even do some traveling, all on their dime. For that, I’m very sincere when I say, “Thanks.”.
So, why did I have to leave? Well, to paraphrase a thoughtful colleague’s blog post, Yahoo! and I had reached a crossroad where I really couldn’t “add” to Yahoo! and pursue my current interests at the same time. There is plenty of work to be done, but for me to take it on would mean me putting aside my own aspirations. While I do believe that my interests and Yahoo!’s immediate needs will converge again one day, it’s just not today, and so, I needed to move on. With all of that said, I really, REALLY want to thank upper management for trying really, really hard to find a position for me that met my needs – Thanks.
So, what’s next? How can one top working on the Number 1 News site in the world? Work on stuff in space, of course!
I’m now the Senior Platform Software Engineer at Skybox Imaging. Skybox is a venture-backed startup that’s building satellities (yes, we literally build them in house) better, faster, cheaper and smaller than anyone has before. So what am I doing there? In short, I’m responsible (solely ATM) for storing, processing and serving all of the data (video, photos and text) we get from the satellites.
This is an awesome opportunity for me for several reasons:
And of course, there are the perks:
It is going to be a fun year. We’ve got lots of cool toys to play with (we have our first satellite dish *inside* the office) and some serious $$$ behind us. Of course, I’ll miss working with my friends at Y!, but we’re all in the same town and I’m sure we’ll stay in touch. I wish Y! the best and do believe they are now on the right course – 2010 was a planning/design/initial implementation year and 2011 will further implement that vision. And I look forward to the day that Y! News publishes the article describing our first launch – look out for it!
]]>With those in place, I set out and evaluated these, with some of my brief comments:
As it stands now, I’m using RTM and am still in the 15 day window. Zenbe Lists is definitely a close second and I’ll reevaluate that before my 15 days expire with RTM.
]]>Moved to Mountain View
On July 5th of 2009, we moved into our new place in Mountain View. We weren’t really looking in Mountain View (we were looking in west San Jose and Willow Glen) but I have to say, so far I love it. Just a couple of miles to downtown (can ride my bike or take a < 10 minute bus ride) and central to many stores, two parks, freeways and Caltrain. I'm closer to work as well, which I've been taking advantage of by riding my bike to and from twice a week (7.3 miles each way). Our (town)house is great too, with a creek right that opens up into a small (man-made) lake with fountains all right outside our front door. Just behind that is the (usually empty) pool which is close enough for me to pick up the WiFi from our place. The 3 beds, 2.5 bath, patio (the cats dig that) and 2 car garage give us the space we wanted and really not for much more than we were paying in Santa Clara. Oh, and the schools: Los Altos. You don't get any better than that. The twist in the story was that we learned of our July 5th move-out date on July 2nd. We had just seen this place the night before and it just so happens that we loved it. Can't believe we moved everything in 3 days. Much thanks to Pierre and Janise for all the help and support. We couldn't have done it without you guys.
Joined a new team at Yahoo!
Not sure how much of this is public knowledge, but I’ve joined a new team at Yahoo!. Funny thing is, so did the rest of News. We’re now all part of the Media Integration Team (MIT). We’ll be bridging the gap between Media properties (News, Sports, Finance, Entertainment) and Platforms by working with both groups to create uniform, ready-to-go solutions for Media. It’s a neat gig, as we get evaluate and prototype with new technology at Yahoo! and come up with whatever is necessary to roll it out. Many times a technology at Y! can’t get implemented right away due to scheduling, lack of resources or the “lack of polish” (usability, SLA, required features) needed for a Media Property to use it. We’re the solution to those problems. I’m definitely looking forward to working on some new and challenging things.
Trip to NY/Cruise to Bermuda
Elissa and I are joining our friends Dale and Katrina on a cruise to Bermuda. This will be our first trip without Evan – and I absolutely can’t wait! We both need a break and a chance to recharge and what better way to relax? The on-shore excursions look great and I’ll enjoy doing nothing while “at sea”. Evan will be vacationing as well at Chez Grandma, aka: boot camp. I’m sure she’ll whip him into shape. Much to Elissa’s dismay, of course.
In retrospect, our timing may not have been the best for this cruise, but we bought the flight and cruise tickets during the “OMG, the economy is going to crash and we’re all gonna die” period of this year (has that ended yet?) and so we’re going on a great vacation for a bargain. Nice to see some $$$$ flow our way as Uncle Sam got plenty of it in 2008.
Shoulder surgery in September
I’ve lived with my “trick” shoulder long enough. Evan just got his first baseball mitt, and I’d like to play catch with him without risking a trip to the hospital. So, I’m going under the knife in September. Should be in and out in a couple of hours. My shoulder will need to be immobilized but I’ll still be able type (albeit awkwardly). Three to nine months of physical therapy to follow.
International PHP Conference in November
In November, I’m heading to Karlsruhe, Germany to the International PHP Conference. I’ll be speaking about highly-configurable web applications and will certainly share my slides, etc. with the community afterwards.
I plan on staying a few extra days to do some sightseeing, and even went to my first German restaurant in preparation the other day. Delicious.
New Baby in January
Elissa and I are pleased to announce a new addition to the family come January. We won’t know the sex until the big day and we’re at a loss for names. I suggested “Sylvester” and “Jesus” (pronounced “Hey-Zeus“) but Elissa shot those down cold.
So, that’s about it from me. I’d like to say, “I’ll be posting something new every week”, but I doubt that will happen.
]]>Argh!
]]>Background
In the suburbs of Long Island, public transportation is mildly useful but totally uncool. It is not acceptable to not have a car, even if it is by choice. Now that I travel back to LI often, I’ve come to rely on PT (or, transportation other than my own personal car) I see how lousy it really is, which is probably due to the fact that only people who can’t afford a car (or can’t drive for some reason) use it for the most part.
Here in the Bay Area, however, that is not the case. People of all types use public transportation. It is definitely better than the bus system on LI, but not as robust and fast as the NYC system. It also gets confusing as there are several different transit systems here and depending on where you are and where you want to go, you may use more than one.
I use VTA as I’m traveling inside Santa Clara county. Plus, it is free for me to ride thanks to Y!.
Planning and Preparation
I used the public transportation feature of Google Maps for my initial planning. It is very cool, but not without its flaws. The VTA website and a paper-copy of the VTA schedule were my best friends during the week. Also, a big thanks to my co-workers for the advice and tips along the way.
My bike had been chained to my storage closet in my complex with the front wheel removed since I arrived here in CA, so on Memorial Day I decided to put it back together, cleaned it up and put air in the tires. The bike is nothing fancy – just a cheap Huffy I bought a few years ago. It has knobby tires that are made for dirt and makes a swooshing noise when I ride. But, I’m not a pro cyclist – I just need something to get me from point A to point B.
VTA fully supports using your bike for this purpose and describe what they offer on the bus and light rail here. In short, up to 4 bikes on a bus, 6 on the light rail.
I’ve already seen lots of bikes on PT – ten-speeds, old clunkers, mountain bikes, pro-bikes, BMX bikes, folding bikes, tandem bikes and even bikes with banana seats. Its all about getting around.
Here are some of the highlights from my journey:
5/27
Bus was 2 minutes late. One other bike in the rack. Bike is simple to put in – just place front wheel in and pull the hook over the front tire (although, I was still worried about my bike falling out). I also had the outer slot, but I saw the other bike owner get his bike out OK. Another Y! got on the bus a few stops later and sat right in front of me, so I thought I’d follow him, but he got off at Great America. Stops are announced which is very helpful, too.
Light Rail and Bike rack – that totally sucks – just hold your bike if you can. Especially if you have a heavy mountain bike like mine.
Ride home was fine – I skipped the plan big G gave me to opt for the route returning home. I goofed, however (see what happens when you cross the big G?) and took a train 15 minutes too early, which left me at the connecting bus stop for 15 minutes. But, now I know.
The only other downside is that I need to cross a major road on the way home, with no traffic light. Argh.
5/28 – signed up for free wifi – a little slow, and doesn’t seem to work on the bus itself, but hey, it is free. It would be nice if just worked everywhere, though, as I wouldn’t need a broadband card. Oh well.
A couple of Y!s were at the bus stop this morning. It seems that people tend to not use public transport everyday but rather just a few times a week. I’ve had conservations with other Y!s and one said he saved $30 a week plus wear-and-tear by just using PT twice a week. Pretty cool.
Had to leave work early on Wednesday because my wife had plans. The public transport schedule accommodated me just fine. I was a little too early for the train leaving Y!, but had the connection to the bus optimized so I only waited two or 3 minutes.
6/2 – rode my scooter to the bus stop. That is more of a workout than I thought! It also shows that I am out of shape.
The scooter is cool because it folds up but I do wish the platform was a little bigger. I bought the “pro” model of the scooter as it supports my weight – you would think that bigger people would have larger feet and hence they would make the platform larger. Not so.
6/3 – missed the bus by 30 seconds – a very nice woman actually took myself and a fellow Y! up the road (about 4 miles) to catch the bus. Never got her name, but thank you!
6/4 – bus was late – missed my train, but Y! shuttle to the rescue!
Lessons Learned
This got started when I got caught up in reading the recent thread on the NYPHP mailing list about interviewing developers and its reference to Joel Spolsky’s, “The Guerrilla Guide to Interviewing” (v. 3.0 10/2006). I discovered that he actually wrote a book on the topic as well (don’t click the link, please).
I don’t know how to say this any other way: All these people got it wrong.
If you read through the threads I’ve linked to, you see that this quickly becomes “me too” party where everyone interjects their criteria/question as to not feel inadequate. So, whats the best answer? There is none, but here are my thoughts on the issue:
I won’t get long winded, but rather than fun algorithm tests that only prove if the user has seen the latest parlor tricks, you need to assess their experience, skill level, and THEIR goals. All of this fun should be done at the phone screen level, so when they are here in person, you should seriously be considering them. So, do this:
The last one is pretty important. You really don’t care if they can solve the carnival game you gave them at the interview, you really care if they can handle whatever may come at them in the future. I think this is the part that people don’t get. Language, platform, etc, don’t really matter at that point. If you are looking for a true expert, you need to look for the traits that one displays:
So, make a pot of coffee and sit and have a chat with the person. You’ll never know what you don’t know without it.
]]>I (thought) I planned well for this trip: that day I took the free Y! shuttle up the SF office (on Sansome) and worked from there. The meeting was only a few blocks away and I made sure to get there really early. I got a great seat, met some great people and waited for dinner and the talk.
The highlights:
It was a short, but great talk. BALUG seems to get some great speakers so I’ll definitely be going back.
The irony:
So, for all of my planning upfront, I still managed to get home at 2AM. Leaving the restaurant, I got on the right bus going the wrong way, which caused my house of cards to tumble. Missed the train out of SF by 5 minutes, which caused me to miss the connecting light rail to my car. We’ll see if I get this right next time.
PS: Here’s a fun link: Bug #1 for Ubuntu, filed by Mark Shuttleworth himself. Thanks to Jeff Boulter for the link.
]]>The man page provides some good info but what is really helpful is the info documentation. To access it, type:
info make
Info is usually too verbose for what people are looking for when working with the shell, but since make is more than just a simple shell command it is definitely worth a read.
So, what is make?
From the man page:
“The purpose of the make utility is to determine automatically which pieces of a large program need to be recompiled, and issue the commands to recompile them.”
So, think of it as a management system for your program. As mentioned in the documentation, make is not limited to compiled programs, or even programs at all. If you have some type of file that needs a command (or set of commands) executed after it is modified you can use make for the job!
An example.
So, lets create a small C program. We’ll call it junk.c:
#include
int main()
{
printf("Hello Worldn");
return 0;
}
Simple enough, right? Good. Now, I would normally compile this program with:
cc junk.c -o junk
and once you do that, you’ll see that you have an executable called ‘junk’ which you can run with
./junk
(if not, check permissions and see if you actually have an executable file called ‘junk’)
Fine. So, lets throw make into the mix. We’ll create a file called “Makefile” (notice the capital ‘M’, the capital ‘M’ is not required, but is convention and convenient as it separates this file from your source files in the same directory) in the same directory. That file looks like this:
# Makefile
# build junk executable
junk : junk.o
junk.o : junk.c
cc junk.c
so, once you this file created, lets run the make command:
make
You should receive output similar to this:
~/junk supertom$ make
cc junk.o -o junk
~/junk supertom$
If you run make again, you should receive output similar to this:
~/junk supertom$ make
make: `junk' is up to date.
~/junk supertom$
That’s the whole idea behind the make command. It acts as a manager for your program files. If they need to be recompiled they will be, otherwise it will do nothing. May not be a big deal with our simple program but if you are dealing with lots of program files compiling only the modified files is a big time saver. To force make to recompile in this case just remove the junk executable.
Ok, back to our example. Looking at our Makefile, “junk” is the ultimate name of our executable and to build it, we need junk.o. In terms of make, both junk and junk.o are called targets. You can think of targets as appearing to the left of the ‘:’ in the file. So, the “junk” target needs file “junk.o” and “junk.o” needs junk.c. Notice the command:
cc junk.c
This is command to be run when that target is encountered. Commands that you want executed by make must be prefaced by a tab. The make utility is actually pretty smart when it comes to C files, so if you look at the makefiles for current applications it might not be so verbose. Don’t forget, however, that make can be used for other things, so take not of what is going on in our example.
Ok, lets pick it up a bit:
# Makefile
# builds the junk executable
prg = junk
objects = junk.o
$(prg) : $(objects)
# what would normally explicitly be here...
#junk.o : junk.c
# make knows what to do with .c files so you can actually leave it out
# it knows that .c -> .o
# junk.o :
# and, we can put a var in, like this:
$(objects) :
# .IGNORE gets us around the problem of rm not finding the files to delete
.IGNORE clean :
rm $(prg) *~ *.o
tarup :
tar -czf $(prg).tar.gz $(prg).c
So, what are the targets in this file? junk, clean and tarup. “junk” is our first target and is the one that will be executed if no other targets are specified. “clean” runs the rm command to remove backup and .o files and tarup executes a command to create a tarball of junk.c. So, I can execute these targets with:
make clean
make (or make junk)
make tarup
We’ve introduced some new concepts in our Makefile, so lets discuss briefly. One is the concept of variables. See prg and objects at the top? Yup, those are vars. Similar to the bash shell, we declare and initialize with no distinct chars, but then use it with $ and parentheses. You’ll also see that we’re a little less verbose about what is going on. As I mentioned earlier, make is smart about C files and knows what to do with them.
We’ve also introduced the “phony” target .IGNORE which keeps us from receiving errors from the rm command. Ever try to rm something that didn’t exist? You’ll receive an error. Maybe not such a big deal to you now, but if you try to include it in a dependent sequence of commands, like
make clean && make
make will never execute because make clean will return with a status of 1 if there are no ~* or *.o files.
So, my train ride is about over, but here are some thoughts/reasons/ideas on how/when to use make for non-compiled applications:
Here are some links:
Recent earthquakes – it is the “big” square.
earthquake.usgs.gov
Moderate earthquake hits Northern California – Y! News
So, I was happily running 6.06 on my Dell Inspiron 5150 and decided to upgrade for really no good reason. The cd-rom drive in my laptop is a little wonky so I was planning on using an external drive and doing a fresh install. At the last minute I opted for the net upgrade instead – a risky procedure – upgrades never go well.
Well for the most part, it did go well. I did the net upgrade from 6.06 to 6.10 and then again to 7.04. I had two issues, one of which is resolved. I couldn’t get the zippy desktop effects to work and it had to do with the libGl libraries. I symlinked to the previous versions and all was good. Also had to put in some stuff in my xorg.conf, but now I have those cool desktop effects. You can see what I changed here:
supertom@supertom-laptop:~$ ls -l /usr/lib/libGL*
lrwxrwxrwx 1 root root 21 2007-08-26 22:21 /usr/lib/libGLcore.so.1 -> libGLcore.so.1.0.9631
-rw-r–r– 1 root root 8961220 2007-06-25 14:33 /usr/lib/libGLcore.so.1.0.9631
-rwxr-xr-x 1 root root 9916028 2007-02-26 17:21 /usr/lib/libGLcore.so.1.0.9746
lrwxrwxrwx 1 root root 16 2007-08-26 07:30 /usr/lib/libGLEW.so.1.3 -> libGLEW.so.1.3.4
-rw-r–r– 1 root root 199848 2007-03-04 21:16 /usr/lib/libGLEW.so.1.3.4
-rw-r–r– 1 root root 653 2007-02-26 17:22 /usr/lib/libGL.la
lrwxrwxrwx 1 root root 10 2007-02-26 17:22 /usr/lib/libGL.so -> libGL.so.1
lrwxrwxrwx 1 root root 26 2007-08-26 22:31 /usr/lib/libGL.so.1 -> /usr/lib/libGL.so.1.0.9631
-rw-r–r– 1 root root 567704 2007-06-25 14:33 /usr/lib/libGL.so.1.0.9631
-rwxr-xr-x 1 root root 601272 2007-02-26 17:21 /usr/lib/libGL.so.1.0.9746
lrwxrwxrwx 1 root root 20 2007-08-26 07:30 /usr/lib/libGLU.so.1 -> libGLU.so.1.3.060502
-rw-r–r– 1 root root 521000 2007-07-13 05:23 /usr/lib/libGLU.so.1.3.060502
Unfortunately, my Netgear WG511 stopped working with WPA and I have tried unsuccessfully to fix it so far. I had originally followed the instructions on linuxquestions.org for Dapper but no luck on 7.04. I blacklisted what I believe to be the appropriate drivers and tried different windows drivers under ndiswrappers with no luck. Works fine with WEP. I have a wireless USB adapter which I might give a shot or I might just break down and buy something better supported. This laptop is now 3+ years old, but, other than a cdrom issue (meaning, it doesn’t always work) it works fine, so it would be nice to keep it around, you know?
]]>