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: 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.

Optimizing for happiness

Let $f(x)$ be a convex mood function, with happiness at its minimum. With all the swings of moods, $f(x)$ is not necessarily differentiable, and although it may be steep at parts, we assume it is continuous.

Then, we wish to solve the minimization problem
\min_x f(x)

We propose to use a subgradient method. The intuition is that you may pick a direction for your mood to change. Any subgradient at your current point $x$ will point upwards of the curve (less happy), so we take a step towards the opposite direction. There are a variety of ways to select a time step, e.g. exact line search, backtracking. Without loss of generality and for simplicity, we use a constant step size.

Bottom line: If you just smile a little more, you’ll end up happier.

Subgradient method for convergence on happiness

given a starting point $x \in \text{dom } f$
given an error parameter $\epsilon \ll 1$
$\text{stop} = \text{false}$
while $! \text{ stop}$ do

  • $\Delta x \leftarrow -\partial f(x)$ % Select a subgradient
  • $t \leftarrow \epsilon$ % Line search
  • if $x + t\Delta < x$ and $\abs{t \Delta x} \leq \epsilon$ then $\text{stop} = \text{true}$
  • $x \leftarrow \min(x, x + t\Delta x)$ % Update

end while

(Thanks, Pranjal, for the inspiration.)


2 months into the PhD now, and we are very much still exploring this grand academic environment at Berkeley. Here are a few of the questions that many of us are asking ourselves and one another. And even though we fully realize that our answers will develop, warp, and combust over the course of the next half decade, we at least have some established prior from which we can begin our journey. The discussions have been extremely insightful and provocative, and I look forward to many more.

About the past

  • How did you get here? Why are you here, at Berkeley? Perhaps differently, why do you think they admitted you?
  • How do you value money? What is your cost for agreeing to not pursue a PhD? 20 million vs 500 billion?

About the future

  • What do you care about? What is your big problem/idea/area?
  • What would you consider to be the biggest problem for society?
  • Do you consider your role in society? What do you consider it to be? Do you feel an obligation to serve society in the way that you are best suited? How does happiness factor in?
  • Do you think your time is best spent via a career in academia? Via research? In industry? As a parent?
  • Do you want to become a professor?

And about the present, quite literally

  • How many projects are you working on now? Which of them with professors?
  • How many group meetings of different professors are you attending?
  • What’s your plan for this semester? For the first year?

How to Berkeley

Berkeley’s online interfaces (e.g. for class registration) are very confusing as compared to what I’m used to at MIT. In case I’m not the only crazy person, here is a reference:

Bear Facts [link]: student homepage (i.e. websis)
TeleBEARS [link]: pre-registration, current class list, registration change
Class listings [EECS, EE, CS]
Grad Class listings [EE, CS]
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]

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