Thursday, June 10, 2010

Recommendation for Tai-Wei (aka David) Lin

During my many years at Sun, I was fortunate to work with many talented individuals, many of whom got together to form a kickass team and pretty cool service. This is my recommendation for Tai-Wei (aka David) Lin.

David was one of the first engineers on the Sun Software Library (aka Project O'Malley) team, joining a grassroots effort to first prove the idea then work on implementation. David has taken on many different engineering roles during the project lifecycle, constantly and successfully learning new technologies and approaches on demand, all in the spirit of helping the team in any way possible, regardless of personal considerations. During this project, David demonstrated his ability to learn and adapt quickly, as well as lead a development effort through complex and ever changing technologies.

Initially, David took on implementation responsibilities for the user interface. During the project inception phases, as the effort evolved from vague ideas to concreteness, the UI needed to constantly change as well. The project also had technology requirements to develop a Rich Internet Application (RIA) user interface, using somewhat modern but not yet fully mature Web development technologies - JavaScript and Ajax. At the time (mid 2006), development and testing tools for these technologies were quite primitive and immature. To demonstrate the feasibility of RIA technologies and help refine our stakeholders' ideas, David successfully build several different user interfaces - exploring different look and feels as well as analyzing alternative JavaScript and Ajax based software libraries: Yahoo YUI Library, Dojo, JSF, Ext JS, and jQuery. Ultimately, the project settled on Ext JS. David never complained about all the work that was discarded, viewing it as a learning experience, both for him as an individual, and for the project as a whole.

David never hesitated to try new technologies (a must with the quickly evolving Web based RIA user interfaces), and develop tools as necessary. For example, at one point during our development cycles, our startup performance was abysmal. David took the time to truly understand the core of the problem (some would say this is the hardest part), find a way to measure the issue (so he could actually be sure that he's improving the performance), search for existing solutions, implement what he found, then shared it via various webinars, forum postings, and blog entries.

After the project was established and fully funded, David demonstrated his leadership skills by leading the Web UI development team - he took on this responsibility simply because there was a need, not because he was asked to do it. He helped tackle complex technical issues, set direction for implementation, and assisted new team members onto the team, mentoring them as necessary to ensure they become successful. Ultimately, David's efforts paid off. Our engineering VP and primary executive sponsor called the Web UI a "pretty slick UI" - publicly
complimenting the work
.

Time management and priority management are also David's strengths. While he was busy implementing various aspects Project O'Malley, David attended the local Toast Master's club, and began studying almost full time for his MBA. He also applied many of the concepts he learned at business school on the project: at one point, during a conflict with our users over approach, he mediated among the different parties, helping reach a reasonable compromise.

David is highly intelligent, dedicated, works extremely hard, and would make a very successful team lead and/or group manager. I highly recommend him.

Recommendation for Parnian Taidi

During my many years at Sun, I was fortunate to work with many talented individuals, many of whom got together to form a kickass team and pretty cool service. This is a recommendation for Parnian Taidi, one of the best product managers.

Parnian and I first started collaborating on Project O'Malley in the summer of 2007, during the project's initial brainstorming phases. Parnian presented our ISV and partner user community (the customer in Agile terminology), whereas I represented product engineering. Parnian demonstrated strong understanding of the problems experienced by the 3rd party users, and was able to articulate them clearly. Parnian's strength during these sessions, however, was her ability to interact with engineers who were scoping out the effort, and accurately represent our users' interests in evaluating options and prioritizing features based on rough level of effort estimates quickly, made the planning sessions quite productive. Along with Parnian's constant involvement, the team was able to prototype the concept and present to the stakeholders.

During the next 2+ years that we collaborated on the Sun Software Library, Parnian was an exceptional partner. Initially, we were tasked with building the Sun Software Library and getting the first revision implemented and deployed. Parnian was a quick learner, leveraging her technical background to help bridge the gap between what the users need versus what is actually feasible in a given timeframe. The engineering team enjoyed collaborating closely with Parnian, since she was able to translate and express the end users' issues in both terms that the engineers understood, and level of detail that the engineers wanted. When the engineering team faced an issue or problem that needed clarification, Parnian quickly learned the details, and either resolved it herself enabling the engineers to get back to work, or clearly communicate it to the users on behalf of the engineering team. This formed a strong bond of trust between the engineers and the product manager.

Once the Sun Software Library was launched, Parnian demonstrated wisdom creativity in spending a limited marketing budget to promote the site: Wisdom in using non-traditional (by Sun's standards) web 2.0 centric marketing tactics with no support from other Sun marketing organizations (blogs, twitter, facebook, forum postings on developer sites, etc.), as well as more traditional marketing approaches, such as presenting at conferences, staffing conference booths with giveaways, and so on. As a result of her efforts, the Sun Software Library usage has increased substantially (well over 2000% growth during the first few months) during the first year.

Parnian demonstrated a positive attitude to roll up her sleeves and take on responsibilities outside of her job description. A successful site, in order to build up a user community, requires a constant dialog with users. Although our executives committed resources for this activity, those resources never materialized. Realizing that our users would not be successful without this, Parnian took on this responsibility, in addition to her normal responsibilities.

In making the Sun Software Library a successful program, Parnian also demonstrated attention to the details. She routinely reviewed all the metrics (and was able to recite many of them from memory on demand during ad hoc hallway conversations, which is very necessary to turn skeptics into supporters), and constantly asked for new metrics and refinements of existing metrics, so she could better understand what it was being used for, and how it was being used. She also continued collaborating closely with the engineering team, spending many hours reviewing progress and making constant suggestions on user interface design and workflow.

In summary, through her dedication to the effort, hard work, participation at the ground level, and always supportive and positive attitude, Parnian earned the trust and respect of the engineering team. As a product manager, she is one of the best ones I've worked with. I recommend her highly.

Thursday, May 27, 2010

Remembering Jennifer Lam - an open letter to Theresa and Brandon Lam

Dear Theresa and Brandon Lam -

My sincerest condolences on your loss. I've known your mother, may her soul forever rest in peace, for about 5 years now. We both worked for Sun Microsystems, and although we lived over a thousand miles apart, we worked together very closely on several different projects. I got to know her well, but probably in a very different way than you knew her. Jennifer was always a huge inspiration to me and the whole team, for many different reasons, and I wanted to share those with you.

First, she always had a smile on her face, and always spoke with a tingle of a chuckle in her voice. This must have been very hard to do, since the late 2000's were very hard and lean years at Sun Microsystems (and in the technical industry as a whole). Over time, we saw more and more of our colleagues be laid off, more and more projects fail, for all of us it was always easier to frown than to smile, but Jennifer always maintained a positive attitude, and encouraged the rest of us to do the same. Her smile always rubbed off on us, cheered us in her own unique way.

Jennifer also always stepped up above and beyond her responsibilities, and did whatever was required to get the job done. At one point, we decided to release our application to our site around dawn Eastern Time (so we could minimize impact on our users). I assumed those of us on the East Coast would take on that responsibility, yet Jennifer cheerfully volunteered to take care of it. Jennifer woke up early, and implemented our weekly pushes at 5am, never complaining. Her rational was that she could work for a couple of hours before you woke up, which allowed her to spend a couple more hours with you during the day.

At other times, when our work load exceeded the normal working hours, Jennifer would work ridiculous hours to get the work done. I remember several 2am chat sessions we had..

I've never heard the words, "I don't know how to do that" from Jennifer. In the technical industry, it's quite normal for us to be exposed to stuff that we don't know anything about. Many of us, however, avoid tasks that we don't know or understand, preferring to stay in our "comfort zone", rather than take on risky endeavors. Not Jennifer - she had a unique ability to learn extremely quickly, and was never afraid to accept tasks, knowing that she'd have to learn quickly (and under pressure) and adapt in order to get them done. Her passion for for constantly learning and adapting to the changing times inspired the rest of us to do the same.

Jennifer was also never afraid to try anything. One time, during a group get together in Menlo Park, we voted on what activity we should do, as a group, "just for fun". By a slim margin, the group decided to go indoor sky diving. While this wasn't Jennifer's choice, and she had the "what are they, crazy?" kind of look, she went along, and as always, had a smile on her face when she jumped in there.

Whatever she learned, Jennifer was always willing to share and teach the rest of us. If we were stuck on something, even though Jennifer had a busy schedule, she'd always take the time to teach, mentor, train, and support her colleagues and teammates.

Even though it was far from her job responsibilities, Jennifer also was the "honorary mother" of our engineering group, always keeping track of the details, always making sure that the rest of us were organized and knew what we had to do and how to do it. She always made sure that the docs were up to date, procedures were documented, knowledge was shared, and that communications happened. Truthfully, as the manager of the engineering group, many of these tasks were my responsibility, but Jennifer had the natural passion and talent for doing this.

In her last year of employment at Sun, I was honored to rate Jennifer a "1", the highest rating possible at Sun, meaning not only did she consistently exceed expectations, but also performed better than 90%+ of her colleagues. Jennifer regularly excelled during her years at Sun, and received this rating more than once. She truly was an outstanding engineer and teammate.

On the personal side, whenever we traveled (which we had to do a couple of times a year, typically to the San Francisco Bay area), Jennifer always prioritized time for her family. During the afternoon and early evening (which would have been your late afternoon and evening hours), we'd always see Jennifer spending hours on the phone, talking to you, listening to you play the piano, talking to you while you were in bed, the same way as if she were right next to you. It was clear that she loved you beyond all things, and you loved her.

I'm hoping that this gave you a glimpse into a portion of your mother's life that may not have been visible to you.

May her soul and spirit be comforted. Wherever she is now, I'm sure she's watching and protecting you. At the same time, I'm sure she's working hard, preparing a home with the same love and attention to detail, waiting for all her family and friends to join her.

Jennifer - your mother - will always be on my mind. Every year form now on, on May 4th, I will light a candle in Jennifer's honor and memory, and remember all the happiness and good that she brought into my life.

Regards Always,
Ari

Friday, March 6, 2009

Adding to iTunes via the command line

I recently had the need to add a whole bunch of files to iTunes. I'm a nutty Unix geek, so rather than spending the 10 seconds required to start iTunes, select File->Add To Library, and then select the files, I spent the 30 minutes required to figure out how to do it from the command line, and then the extra 15 minutes to write it up in this blog. But hey, that's what we geeks do ;-).

Actually, this is not as crazy as it sounds, I wanted to automate the whole process of file conversion using Handbrake and then adding to iTunes. In the past, I used iSquint for this, but alas, iSquint is no more. The new version of Handbrake supports conversions from files, instead of only from DVD's.

This is how I did it:
  1. Use HandbrakeCLI to convert the files to MP4 format, using a script along these lines. I found this HandbrakeCLI guide to be very handy. This script is not foolproof - it should check to make sure the file exists before calling HandbrakeCLI, etc., but it shows the concept.

    for i in $*
    do
    echo starting $i at `date`
    base=`basename $i .avi`
    /Applications/HandBrakeCLI -i $i -o $base.mp4 --preset="iPhone & iPod Touch"
    echo ending $i at `date`

    done


  2. Use AppleScript to add it to iTunes, as in this script.

    for i in $*
    do
    if [ -f $i ];
    then
    echo adding file $i
    osascript -e "tell application \"iTunes\" to open POSIX file \"$i\""
    fi
    done

    The trick here is that you need to specify the full path when calling this script, something like this:

    $ add-to-itunes.bash `pwd`/*.mp4

    otherwise the AppleScript will fail:

    29:63: execution error: iTunes got an error: Can’t make some data into the expected type. (-1700)

  3. And that's it! iTunes automatically starts playing the file, this is an option that you can turn off via preferences.

Thursday, August 7, 2008

Upgrading the hard drive in my MacBook Pro

The MacBook Pro that I got about a year ago came with a 100 GB internal hard drive. This seemed huge, especially compared to the laptop that I had before that, which only had a 60GB internal hard drive. But, lo and behold, a year later, the internal disk was full.

I blame two things for filling up my disk:
  • Virtualization: I had both Parallels and VirtualBox installed, but those installations took minimal amount of space. It was the Windows XP, Ubuntu, and OpenSolaris installations that took a lot of space... Unfortunately, I needed these guest OS images, since I use them frequently.
  • iTunes and some movies: I have an iPod Touch. But given that my music and videos are as important to me as air (perhaps even more important), getting rid of this stuff is not an option.
So, what to do?

In browsing newegg.com, I found the answer. I would get more than 3 times the disk space, and a performance improvement to boot. And, some of the reviews there talk about how MacBook Pro's perform with this drive. I was sold.

Replacing the hard drive in the MacBook Pro is not as simple as it seems. On my previous laptop (Toshiba Tecra M2), it was trivial - one screw on a side slot, and I had access to the internal hard drive. The MacBook pro is not that simple.

Here are the steps I took:
  1. Getting ready from a hardware perspective

    There are several things I did to understand what I would need to do and acquire the right tools.

    These two web sites were invaluable.


    Then I had to get the right toolset - a Torx #6 and a small Phillips head #0.. I knew that Home Depot had these tools (since I actually bought one a while back, but it disappeared in my house), but with gas at $4.50 a gallon, I wasn't willing to make the 20 mile trip to Home Depot just for the screw driver. Fortunately, the local Radio Shack had a toolkit. It had more pieces than I explicitly needed (even ones that I didn't even recognize), but hey, at $16.49, it was reasonable.

    I now had everything I needed.

  2. Getting ready from a software perspective

    The question I had was, "how do I duplicate the boot disk onto the new disk"? There seemed to be several options:

    • Using the asr(8) tool built into MacOS X. The suggestion was to boot off the installation DVD with both the new disk and old disk connected (one via an external USB chassis, the other inside the Mac), then use this utility to duplicate one disk to another.
    • Use Time Machine and do a full restore. This wasn't an option for me, since I quickly learned that setting up Time Machine to back up my virtualized Guest OS's quickly fills up the Time Machine backup disk. So on my system, Time Machine doesn't back up everything...
    • Use SuperDuper! This is what I endded up doing.

  3. Getting "mentally" ready

    I repeated to myself several times, "I think I can, I think I can, I know I can, I know I can"

    A little confidence goes a long way.

    The thing I feared the most was breaking the MBP, and not being able to show up to work the next day. I rely on the MBP to perform my job.

  4. A test run

    The real question in my mind was, "how long will this take?" I had to allocate that much time to get this done, and make sure I didn't need the Mac during this time period. The only real test run I could do was a disk duplication.

    I took the new disk and put it into an external USB chassis I had lying around. I set up SuperDuper! to do a full backup from the internal disk to the external disk, and then boot the Mac off the external disk when it was done. This process took 3.5 hours (!) for approximately 95 GB of data copied. Final data copy rate was around 8 MB/second.

    So now I had my answer, I needed approximately 5 hours of Mac downtime to perform the upgrade.

  5. The final leap

    Around 6pm at night, I logged off from work, shut down all the apps on the Mac, and started SuperDuper!. I came back around 9:30pm, saw that it was finished, then started the upgrade.

    I'm happy to say that by 10:15pm, I was up and running with the new disk. No problems at all.

    As for performance?

    Not a real benchmark by any means. The current software project I'm on takes approximately 25 minutes to build and run the unit/functional tests. With the new hard drive, I'm down to 14 minutes. Since I do this many times a day, this is a huge productivity benefit to me.
I learned something by reading Richard's notes and watching the video: Pay careful attention to all the screws - amazingly, they are all different. To keep track, used small notepad sheets of paper - 6 of them - labeled as follows. Then, as I took out each screw, I put it on the right piece of paper. This way, I didn't make any mistakes regarding which screw went where.
  • Outside memory case
  • Inside memory case
  • Inside Battery Case
  • 4 screws on the bottom
  • 8 screws, 4 on each side
  • 2 screws on the back
For now, I'm content. I've got a ton of free space. I'll never fill it up!

Tuesday, May 20, 2008

NYC Bike Tour 2008

On Sunday, May 4th, Evan Rabeck and I biked the NYC Bike Tour . It was the first time that I ever biked this event (actually, it's the first time I rode my bike for more than 4 miles!), though Evan has done it before. In a nutshell, it was a great event, I had a blast.

I started the morning quite early (for me), I left my house around 6:30am, got my usual coffee at the local Starbucks, and drove to Evan's house in Brooklyn. I saw many cars along the way that had bike racks strapped to their back, just like I did. I parked my car at Evan's house, and we started our ride to Manhattan. Somewhere in Brooklyn, Evan got a phone call from work, we had to stop while he resolved some issue. Truly, in these days, one cannot get away, huh?

Start of bike tour

We rode over the Brooklyn bridge into Manhattan, and joined the bike tour in progress. I expected this to be a "grownup" kinda thing, I was very happily surprised at the number of parents who brought the kids along! I told my kids that they are coming with me next year.

05042008(001)

We rode our bikes up 6th avenue. There was some fun stuff along the way, including this Jamaican band.

05042008(011)

There was also a lot of silliness, like this Scottish marching band who cut across the bike tour. We never quite figured out what it was all about, but it was fun!

05042008(007)

Next up, the entrance to Central Park. Unfortunately, it was a long wait to get into Central Park, that's what happens when 6 lanes merge down into 2 lanes. Some folks in the bike tour wore amusing costumes! This made it easier for them to find one another in the crowd, but I'm sure also got them a lot of attention.

05042008(009)

More to come...

Tuesday, May 6, 2008

My First Blog... ever!

This is my first blog ever, funny how these things happen. There is a long story here, I'll tell it over time...