5 years at MIT: post mortem

I wrote most of this 1.5 years ago, but for some reason never published it. This is a super condensed summary of my experience at MIT, written a few months before leaving the Institvte.

Each year in two sentences or so

Year 1 – I experience college real quick — social butterfly Cathy makes friends all over campus, attends frat parties, joins a ton of activities, takes part in a bunch of freshman programs. I also take too many classes and do not get enough sleep, but life is great and college is fun.
Year 2 – I explore the breadth of EECS — I start taking foundational classes and doing *real* research, I go to fewer parties but I continue to make friends, and I also try sleeping regularly, which is wonderful. MIT and life are dandy.
Year 3 – Then, in an attempt to not sacrifice depth while going after breadth, I hit a brick wall, crash and burn, become perpetually stressed, and withdraw from most people. I feel simultaneously empowered yet crushed, and MIT has not quite been the same place since; I am grateful to my friends who kept me alive and sane. I feel ready to leave MIT, for better or for worse. (But I don’t, despite company offers urging me to leave early.)
Year 4 – I essentially take this year off, at least technically, indulging myself with growing URGE, taking less technical classes, teaching computer architecture and ESL, and contemplating my future. I gain a ton of unexpected skills, experiences, and friends; this year is immensely rejuvenating and convinces me to stay at MIT for one more year, for the MEng.
Year 5 – I broaden my horizons by immersing myself in academia, and along with it, the adventures of rushing to my first conference deadline, agonizing over PhD programs, understanding advisor relationships, and working my butt off to make it to Germany. This year is marked first by the fear that the best days of my life have already passed and my unwillingness to grow up from being an undergrad, and second by the gradual realization that life can be better–more free, more engaging, more intellectually rich–in the future.

My main technical interests also morphed over the years

Year 1 – “durrr, what is EECS?”
Year 2 – signal processing (6.003) → speech recognition (UROP/6.345)
Year 3 – vision (MASLAB + 6.869)
Year 4 – vision (UROP) → autonomous robotics/vehicles (6.UAT)
Year 5 – autonomous vehicles → distributed control of agents + transportation

What I learned from MIT

There are no rules. There is no box to think outside of, anything could be possible.
To think further, broader. In some sense, I feel that every year I have spent at MIT has allowed me to think 5 years further out.
To go for it. In the words of my former advisor Professor Seth Teller, if you think something might be your life passion, go at it as hard as you possibly can. Otherwise, you might never find your passion. Become the world’s foremost expert in what you love.
To not be afraid to ask. I have earned and spent tens of thousands of dollars for student groups, by asking. By asking, I learned more about robotics during my CMU visit (Robotics Institute) than in a year working in a robotics lab. At the Berkeley visit (EECS), several professors remembered who I was because of my questions.
Having money is very nice. Having a department rolling in money makes wonderful things like URGE, Maslab, 6.570 possible (with just a little bit of student motivation).

How to Berkeley: Linear System Theory Prelim

Having just spent the last 3.5 weeks doing not much other than prepare for prelims, I thought I would summarize my experience and give some insights.

For starters, prelims are short for preliminary examination, an oral exam that is one of many requirements in your PhD journey at Berkeley (in EECS). The pass rate for this exam is on the order of 70-85%, though you are allowed to take it twice (or thrice, with a petition), and the overall pass rate is about 95%. [Disclaimer: these numbers are 2nd hand. They are approximate.] The exam takes place over 1 hour, with 3 professors. Each professor gives you 20 minutes (though it has been 16 minutes the last couple years) to solve some problems on the board. The topic of my prelim exam was linear system theory, meaning linear algebra and linear control theory. The highest order bit for success on this exam is taking EE221A (or already knowing the material).

Why take the prelim? What is it useful for?
Here are some perspectives I found interesting from some of the older (and wiser) students.
- “You’ll never feel as smart as you did when you took your prelim. That is the culmination of your expertise.” – Roy Dong
- “There is almost no correlation between how much of the question you get through and whether or not you pass. The thing to keep in mind for how they determine your score is ‘would you benefit from taking the prelim again?’”
In some sense, the prelim is as much testing your mastery of the content as it is testing how much you can think on the spot (and take hints/guidance from the committee), explain concepts, and present on the board.

Focused learning
Never in my life have I been so free for so long to focus on one thing. There have always been extra curriculars, homework, classes, social obligations, miscellaneous other responsibilities that chip away at life, hour by hour. 4 weeks ago, I wondered: “how long can you focus?” And it is amazing how much you can do and learn when you put your heart/mind into something. So, what can I accomplish if I put the same amount of focus into something else? I don’t know that a pure focus approach is suitable always, but it really is a key part of grad school and doing research.

Being healthy
This is actually just a continuation of things I’m learning after college. :) Oddly, there was never much incentive in my life to be healthy. Over the last month, I was healthier than I ever was. I took the time to eat enough, sleep enough, relax enough, and even exercise! I told most people ‘sorry, I’m MIA this month, poke me in September?’ There was nothing but prelims and me time (okay, and also a journal paper deadline 3 days after the prelim). Pushing everything else aside, reminded that I can be free (aside from prelims).

Now, without prelims, can I still be free?

How do you prepare for the prelim?
I stumbled around a bit at the beginning, not knowing quite where to start, how to split my time between the paper and studying, and being irked by the typeset of the Callier and Desoer book. Eventually (by the last week), I fell into a nice routine of:

  1. Do old prelim problems.
  2. Note down confusions. Note down topics to learn/review.
  3. Discuss confusions with study group.
  4. Read/review topics.
  5. Repeat.

I recommend getting into that routine sooner. I also spent the last 2 days before the exam going through the lecture notes from EE221A, to pick up anything I might have missed in ad hoc studying, which I also recommend. Preparation will vary from person to person, but the general advice for preparation seems to be:

  • Get a good study group and study with them. Early and often.
  • Ask older students for help, e.g. through mock exams.
  • Relax the day before the exam. (And have great friends who convince you to do so. :) )

The actual prelim
You study for a few weeks, discussing question after question, reviewing topic after topic. It all seems to be building up to something grand. You calm yourself the couple hours before the exam with some hot tea and a good book, unsure how you’ll perform when it matters. But then you go in to the examination room, a professor hands you a question and tells you you have 16 minutes, and you get started just like that. You cite theorems, sketch some proofs, and describe your intuition. You remain brief because there’s a lot to get through. You work out small examples when you are unsure of the full approach. Along the way, the professors attempt to hint you along. And you chug chug chug along. 48 minutes later, you thank the committee and leave the room. That’s it. The prelim exam itself is fully expected, almost routine. The bulk of the gains (learning, making friends, etc.) happen beforehand. So, don’t have too high expectations for the prelim exam itself. :)

Additional study references
- Modern Control System Engineering, in particular Chapters 3,5,10 [link] — great for perspective on modern vs classical control, control tools
- Linear Algebra Done Right — self-explanatory

Special thanks to Eric Kim for feedback on this post. Also thanks to all the friends who helped us prepare!

Update: average rating of the overall prelim experience this year is 7.8/10. Caution: statistics is dangerous, sample may be biased.

Professor Seth Teller

seth teller - shrinkrob

Professor Seth Teller, my former advisor (as an undergrad researcher), mentor, and academic role model, passed away earlier this month. He truly and passionately worked towards addressing important problems (with autonomous vehicles, assistive technologies, and robotics for disaster recovery at least!), somehow with both vigor and patience; he has done so much, and yet there was so much more to do and more to come. The situation is entirely shocking to me, and I wanted to share some words.

On 7/12, I was reminded of how compassionate of a community MIT is. I woke up to an email with the subject line “Call me ASAP” from my former grad student supervisor David Hayden. It had been more than 1.5 years since we were last in touch, but he wanted me to hear the sad news from a person and not from something less personal (i.e. email, internet). (Thank you, David, I really appreciated it!) And it’s a great reflection of the warm person that Seth was (and the people around him!). No matter how busy he was, he would smile and greet me in the halls, and always made time to meet with me when I asked. Throughout the day, friends messaged me, and I messaged friends, to make sure that everyone was doing alright. A couple years out of MIT now, I am reminded that Seth has touched so many people, so many lives. Even friends who did not know him except as a professor reached out to say a few kind words.

I want to share one small anecdote, which has affected me to today.

About 2.5 years ago, having very little clue about what I wanted to do/achieve with my life (what some of us fondly call the quarter-life crisis), I went to Seth Teller at a loss and told him the executive summary of my vague interests: “I think self-driving cars are pretty cool.” Seth had co-led the MIT DARPA Urban Driving Challenge team back in 2006, but at this point, it was mostly a past project. He told me the following: “If you have an idea of what your passion in life is, then you have to go after it as hard as you possibly can. Only then can you hope to find your true passion.”

Anyone can tell you to go after your dreams. Seth’s insight is that dreams and ambitions are not always clear from the start — they may be hidden, they may manifest themselves in several forms. He knew that hard work is required to find them, extract them from the mess of school and experience and daily life, pursue them, and achieve them.

Shortly after, I left his group and joined the Distributed Robotics Lab (under Daniela Rus, MIT), where I started studying transportation problems from a computational/robotics perspective and did my Masters thesis on algorithms for automatic mapping (“GPSZip: semantic representation and compression system for GPS using coresets”). And now I have moved on to Alex Bayen’s group at Berkeley to continue studying the problems of estimation, prediction, and control/automation of current and future transportation systems.

In short: When I grow up, I want to be like Seth Teller. I want to work on important problems, and I want to help people. I want to support the people around me, and I want to help people find and go after their dreams. And I want to always take the time to smile and say hello.

I am grateful for every short minute I spent with Seth. For more information, here is the initial press release, the investigation update, and his personal website. I do not know the circumstances for his death, but I am very sorry for the world (and especially those closest to him) for the loss.

Adventures in Hydroponics (Weeks 2-5)

Day 24 (July 8, 2014)
The watercress children got big, time to transplant! [In the meantime, I screwed up and lost a bunch of baby plants. Let's call it survival of the fittest.]

There we go, transplanted! So much room for roots to grow.

I transplanted a few more babies and prototyped a tiny irrigation system. Ah yes, a series of tubes. And I’ve got my own terrace farm. :)

The baby basil, California poppies, and wildflowers (new!), with their own water tubes!

Day 27 (July 11, 2014)
Just chillin’. The previous shots were a prototype system, so I removed everything except the stakes (black water tube holders). I planted some wildflowers and chives in soil too, and the first soiling sprouted!

Day 34 (July 18, 2014)
Oh man, the watercress is so delicious that the insects want some too!

Basil’s starting to look like basil.

And we’ve got some new babies (parsley)!

[Special thanks to Jacob for the prototyping bucket and to Kevin/Irena for the wildflower seeds!]

How to Berkeley: Establishing Residency

Actually, step 0 is to negotiate with your advisor to split the difference in the $$ that the department/someone saves by establishing residency. It could be a pretty great side-income. ..Just kidding.

The guidance / explanation they sent us is okay, but I just want to know exactly what steps are needed to get it done. Here I’ve included their guidance + annotated with my process. I also recorded the amount of time it took me to figure each step out, which should be an upper bound on the time it takes someone following these steps.

1) Submit your Statement of Legal Residence in BearFacts available NOW.

[15 minutes] It’s abbreviated as “SLR” in BearFacts. Go here and fill out the forms.

2) Please upload the following documents at: or.berkeley.edu/myresidency. PLEASE REDACT ANY SENSITIVE INFORMATION (account numbers, SSN, etc.) FOR SECURITY REASONS.

This means you have to collect a bunch of information. If you’re like me and waited until July to do this, then most of it should be done already by accident. Except for the driver’s license.

WARNING: they seem to do some sort of greedy evaluation, i.e. they evaluated my residency before I even finished submitting all my documents. To avoid this (and the subsequent petition process..), I recommend submitting all your documents at once.

- California driver’s license or state ID

[15 minutes on website, 90 minutes reviewing rules, 30 minutes transit, 60 minutes to get new license] If you have an existing driver’s license, you need to take the written driving test at the DMV to exchange it for a CA driver’s license. The website’s not the easiest to navigate, so I included some useful links here. Instructions are here.
1) Go to the CA DMV website to schedule an appointment. You want to select the “Office visit” option. To build in redundancy (since it’s nearing the deadline), I scheduled 3 appointments on 3 consecutive day. Just in case.
2) Materials for the written test are here. The test is ~30-40 questions and you are allowed 6 incorrect.
3) Stuff to bring to the DMV
- $33 Fees documented here. Bring cash because sometimes the DMV loses credit card information to hackers.
- Application form DL 44 (you fill this one out there)
- Social security card (you don’t actually need this, but you do need to know your SSN)
- Passport or birth certificate

- California voter’s registration

[10 minutes] Check your registration for Alameda here. There you can enter your address and get a pdf of your voter status. For other counties, go here.

- California motor vehicle registration (if you own a vehicle)

[0 minutes]

- 2013 federal and state taxes and W2s (for the 2013 filing year, we recommend that you file California part-year returns if you were not in the state for the entire year)

[25 minutes] Depending on how careful you want to be, you can probably skip some of these steps. Instructions are geared for OSX.
1) Redact sensitive info: Open up your tax returns and search for your social security number. Use your favorite PDF tool (e.g. Preview, Adobe Acrobat) to draw black boxes over those fields. Also search for your bank account numbers.
2) Convert to jpg: Download imagemagick (available at least for Ubuntu and OSX). Go to the directory and run:
convert -density 400 -scale 2000x1545 {FILENAME}.pdf {FILENAME}.jpg
3) Convert back to pdf:
convert {FILENAME}*.jpg {FILENAME}-jpg.pdf

- Evidence of your arrival date in CA prior to August 28, 2013 (plane ticket and/or credit card statement)

[7 minutes]
I uploaded my boarding pass for my one-way flight out from Boston to SFO. Sniffle.

- Evidence of your Summer 2014 whereabouts (this can be a memo from your department indicating your summer research plans; a letter from your employer indicating your employment status, etc.). Please note that depending on your circumstances we may pend your file for evidence of your summer whereabouts.

[5 minutes]
I uploaded the NSF “Certification of Appropriate Fellowship Activities” form, which certifies NSF to pay me for the summer because I’m doing research.

- For students born in 1991 or later and you were claimed by your parents on their taxes: documentation that you are employed 49% or more time or equivalent in university-administered funds (e.g. grants, fellowships, stipends, etc.).

[0 minutes]

3) Please note that after receiving ALL of the documents requested, it will take three to four weeks to make a final evaluation and residency determination. If you do not submit all of your documents by the documentation deadline of August 15, 2014, you will be considered a non-resident for the purposes of tuition and fees for Fall 2014.

Annnnd recording the process took about 45 minutes, for a grand total of 5 hours.. sigh.

From 2012

Looking back, this article/interview was a cool snapshot of my life from 2 years ago. The startup behind these such articles is no longer around, so I’ve copied the article unredacted below.


Originally published by The PhenomList on January 02, 2012.
By Janet Li, a senior at MIT

It was envy that caused Cathy to first start programming.

In middle school, all of her friends were enrolled in a class that she couldn’t get into, and they were learning how to make a website. Cathy was jealous and decided she would make one on her own. She started playing around with HTML, CSS, and JavaScript, and eventually produced a GeoCities site.

Later, she realized that her friends had only learned how to use Microsoft Publisher, so she ended up actually being thankful she wasn’t able to take the class.

Cathy continued coding all throughout high school and participated in several programming competitions. For her graduation project senior year, she embarked on an ambitious mission to create her school’s very own Mapquest tool. Her school actually wouldn’t give her the blueprint, so she and a friend spent their afternoons measuring hallways.

Her family told her to stop wasting her time, and her advisor recommended that she scale down the scope of the project. Cathy didn’t listen, though, and by the end, produced a tool that gave users step-by-step directions on the fastest way to get from where they were to their desired destination. The directions could be printed and even read aloud. After Cathy came to MIT, her high school actually contacted her and asked to purchase the software in order to help students get to class faster.

In her time at MIT, Cathy has been splitting her time in half studying both Electrical Engineering and Computer Science. At first, she was interested in every aspect of EECS, but has recently begun to focus more on machine learning in classes on speech recognition, computer vision, and robotics. “They’re the embodiment of CS in the world,” she says. “They’re more real.”

Every January, MIT has an autonomous robotics competition called MASLAB. Two robots compete on a field split in half, try to pick up and throw as many balls as possible onto the opponent’s side, and must stop after exactly three minutes. Last year, the robot designed by Cathy’s team, made up of four of the residents on her hall, won.

Cathy has also played around with the Xbox Kinect, which has launched applications from many different developers because of its function as a fancy camera. She created a demo in which a user can stand in front of it and conduct a symphony. The music slows down or speeds up based on how fast the user waves his or her arms. The demo was showcased at the MIT 150 Open House, and it brought Cathy a lot of satisfaction to see kids playing with it and having fun.

She has also used the Kinect to solve a problem in her dorm, by designing a dirty dish offenders system for the communal kitchen on her hall. Essentially, the kitchen’s sink has two cameras: one facing the person washing dishes and the other facing the sink. Cathy programmed the sink-facing camera to keep track of when dishes enter and leave the sink, so the system can tell exactly who is responsible when dirty dishes are left there.

Cathy loves programming and is constantly working on several projects at once. “I like to make useful things,” she says, “and I’ve found that the most efficient way for me to make useful things is to code.”

A project in the works for Cathy is a lyric generator for songs. She has been scraping the Internet for song lyrics. Then, by matching songs to words using speech recognition and working with timing, she is working on generating videos that automatically display the lyrics of any song that is playing.

For her master’s thesis at MIT, Cathy is planning on studying traffic systems. She has a vision for a city of the future where there are no traffic signs and cars don’t have to stop until they reach their destination. This would significantly save both time and energy, and could eventually be made possible by the research that is currently being done on autonomous vehicles.

In Cathy’s free time, she loves cooking, exploring the outdoors, and traveling. Her advice for anyone interested in computer science is to explore both the theoretical side and the applied side. Fundamentally, she says, “I really encourage people to try and fix problems in the world, because there are a lot of them.” She will certainly be doing so.

Article replica [src]
CSAIL press release [src]

Adventures in hydroponics (Week 1)

Day 1 (June 15, 2014)
Berkeley has an awesome hydroponics store! Turns out, getting started with hydroponics is really easy. Buying and planting everything took Eric and me just a few hours. See the end for a build of materials and a comparison with soil!

Day1-SeedsOn the menu are: arugula, basil, California poppy (I guess I won’t eat these..), (chinese) garlic chives, parsley, soy bean, and watercress!

Day1-My own little farm45 little plots for my own little farm. :) These modular “grow blocks” are a synthetic material from molten rock in which the plants take root.

Day1-Chive seedlingI had pre-germinated the garlic chives, so they get a head start of a week or two (hard to see, but you can see one sprout if you zoom in!).

Day 5 – June 19, 2014
Day5-ChivesGrow, chives, grow!

Day 7 – June 21, 2014
Day7-ArugulaBaby arugula.

Day7-SoyBaby soy!

Day7-So many seedlingsSooo many babies.

Appendix I: Cost analysis
(Rough) build of materials
$2 – “Nursery” tray for the plants
$8 – Concentrated plant nutrients (Botanicare CNS17, 1qt)
$7 – pH test kit
$10 – Growing media (45 stonewool blocks, Grodan mini Gro Blocks, $0.21ea)
$14 – Misc seeds
$?? – A lemon
$41 – Total

As compared with growing with soil, from a quick home depot search:
$8 – Potting mix (soil + fertilizer)
$21 – Plaster planter boxes (24in, 3x)
$14 – Misc seeds
$43 – Total

Both are spec’ed for about 6 months of growing for 7 types of plants (45 individual plants via hydroponics, probably fewer than that for soil due to space) and with no consideration for permanent planters or automation. So the material costs can be comparable at the early stages at least. However, hydroponics should save significantly on the water bill.

Appendix II: Possible next steps
Water automation (irrigation) with Grodan Gro Blocks via timer pump + reservoir [src]


My blog has been getting a lot of spam on one particular post that I wrote earlier this year. Here’s some sample spam on my blog. It looks like someone forgot to fill in the words from their spam template and instead posted the entire template by accident, but this makes writing spam look like a fun pastime for a bored teenager.

This template is particularly interested in what blogging service I use and also notes that my blog posts are awesome. Woohoo, external validation via spam!

Uh, although it was pretty fun seeing this, I’ve enabled Akismet’s anti-spam WordPress plugin, but let me know if you have any other anti-spam suggestions (aside from using this template to filter out spam generated from this template).

{I have|I’ve} been {surfing|browsing} online more than {three|3|2|4} hours today, yet I never found any interesting article like yours. {It’s|It is} pretty worth enough for me. {In my opinion|Personally|In my view}, if all {webmasters|site owners|website owners|web owners} and bloggers made good content as you did, the {internet|net|web} will be {much more|a lot more} useful than ever before.|
I {couldn’t|could not} {resist|refrain from} commenting. {Very well|Perfectly|Well|Exceptionally well} written!| {I will|I’ll} {right away|immediately} {take hold of|grab|clutch|grasp|seize|snatch} your {rss|rss feed} as I {can not|can’t} {in finding|find|to find} your {email|e-mail} subscription {link|hyperlink} or {newsletter|e-newsletter} service.

More spam…

How to Berkeley, v2

The first 10 seconds is how I feel.

Berkeley should hire a couple software engineers to fix their online interfaces (e.g. for class registration). People have obviously noticed the problem and now there are layers and layers of web pages / services maintained by different organizations / departments that each contain different amounts of information. It’s all very confusing, disorganized, and arduous, and I miss MIT WebSIS. Here is a guide with some simplified steps for paying fees at Berkeley and class registration for EECS graduate classes:

Shortcut for paying bills/fees:

  1. Login to e-bill/e-check. Scroll to the bottom and click “I agree.”
  2. Click “Pay now” and follow instructions from there.

Methodology for class registration:

  1. Browse for possible classes of interest: Look through the relevant listings [CS, EE, CS-next, EE-next]. This just gives you the names of the courses offered this/next semester. To get the description of the classes, you’ll need to follow the links to the general catalog, but even then, they are probably out of date because the process for faculty to update it is arduous. Good luck finding any descriptions for the special seminars (e.g. CS 294). You might have to be on some mailing list at the right time to get these, so try searching your inbox…
  2. Create a schedule of your classes: Go to ScheduleBuilder and start adding your classes of interest. In the first field, type the department (“EE” or “CS”) and in the next field type the number of the course. When you’re done, click “Generate Schedules.” Select “Save as Main Schedule.” Next, view your Saved Schedules. Optionally export the calendar by selecting “Download iCal.” (From there, you can import this into gCalendar, iCal, etc.) Take note of the CCN numbers displayed to the right side of the interface. You’ll need these for the actual registration step.
  3. An alternative to the previous step is to build the schedule in your head and get the CCN numbers straight from [EE Fall, CS Fall, Stat Fall] [EE Spring, CS Spring, Stat Spring]. Apparently, some of the classes have a direct link to register a class from this interface, but it seems inconsistent.
  4. Finally, login to TeleBEARS to actually register your classes. Be sure to do this outside of its schedule maintenance hours of 6-7am M-F, 6-noon Su, and some Saturdays. I don’t know what this means, but if your appointment has expired, forget about accessing TeleBEARS at normal hours. Here are the available “Open Hours”: 7-8am, 7pm-12am M-F, and 12pm-12am Sa-Su. WTF. Also FYI, you can’t register for more than 1 seminar (i.e. CS 294) because the registrar thinks they are all the same class. Okay, anyway. First, click on the top tab for the semester that you’re registering for. To the left, click “Add class,” and enter in the CCN from the previous step. Repeat for all your classes.

Bear Facts [link]: student homepage (i.e. websis)
TeleBEARS [link]: pre-registration, current class list, registration change, there is a tab for each semester
General class catalog [EECS, EE, CS]: usually out of date and doesn’t contain information about special seminars
Class listings [EE Fall, CS Fall] [EE Spring, CS Spring]: contains CCN and enrollment status for graduate classes
Class schedule [CS, EE, CS-next, EE-next]: includes class time, lists special classes (CS 298 = Seminars, CS 294 = Courses, not sure where the descriptions are though)

Class schedule [link, ScheduleBuilder]: printable class schedules, clunky searchable interface for classes

EECS Grad Info [link]
EECS Grad Handbook [link]
Transfer Credit Petition [link]
Add/Drop Form [link]

Please feel free to comment with suggestions on what else to include in this reference.

beyond low hanging fruit