RJ's Blog – Seriously this time A sprinkling of stuff I'm interested in and do

3Jan/101

What I did on my winter break

Vacation, despite being longer in college, goes by way faster each year.  Three weeks certainly isn't enough time to accomplish any huge projects, but I can say that I made some good progress on a lot of small things.  Here's what I did on my winter break!

Grading

As always, the flight home was filled with sleep, video games, and grading.  The first day back was no different, as I scrambled to finish a few assignments under the wire for this quarter.  Needless to say everything got done, but it always sours things a bit that my first day back is just spent grading assignments.

Interview essay

As part of an interview I was working towards, I needed to write a 3 page essay about a product.  Perhaps I'll post that here, but I think that might need to happen after the interview season is over.  I spent the first day thinking about what to write, and the second day (read: last 6 hours) writing it.  I was really pleased with the result, and based on this entry, it was clearly a success.

gCopter

A friend and I have been working on porting his iPhone copter game over to Android.  There are definitely still a lot of bugs, but things work!  It was great to learn a new platform, one I will hopefully be developing a lot more for in the coming months - let me know if you have any crazy Android ideas.

Mozilla Patches

I have this remarkable ability where I never really leave any job.  There were about 5 patches sitting in my bug queue over at Mozilla, and a few hours work finished them off.  It's always satisfying when I manage to clean out my inbox, and this killed about 5 emails, along with some pesky bugs on AMO.

Dad's Website

My dad's law firm has been around for five years now, but he still is missing a web site.  I've got a basic design up and running, and will probably publish the final page within the next couple of days.  Hopefully this will at least give him a bit more clout in the online space, despite him not really having any technical skills whatsoever.

Stackmap

The Stackmap team had a successful meeting at Harvard Law Library, and we've made some progress on the product as well, adding some cool new features.  The rest of the team will also be heading to a conference later this month in Boston to hopefully make some great new connections.

CS198 Autograder

My main goal for this break was to bring the autograder for CS106B/X into the future.  Unfortunately, it didn't really get the attention it deserved this break.  First, I wanted to create an end-all grading system, which the more I thought about it just became impossible, so that slowed me down.  Second, the number of other projects that popped up slowed my time for this as well, so that took some time off.  That being said, I do have a fancy little tool that lets me run assignments from a program, without the need to compile them individually in visual studio.  This is great for just running and grading assignments fast, and I'm sure I'll be able to use it this quarter.  I also refactored an existing autograder to make it more extensible for use in other projects.  With any luck at all, these two tools will make grading much easier in the future.  When the whole system is done, I'll have another post talking about some of the design decisions I made with the project.

Basement Cleanup

Our basement is a mess.  So my mom and I worked on cleaning it up.  Overall, it was a great success on a small scale, as we cleared some of the messiest areas.  I think I wanted to get rid of some more stuff, but perhaps that will happen over spring break.

Thankfully, despite being busy, I still had plenty of time to watch TV, play games, and sleep over break, so I'm going back to school ready to hit the ground running.  I'm excited for a new quarter, and we've certainly got a lot of fun things to look forward to!

Filed under: General 1 Comment
26Dec/090

Internship Interview Recap

I've finally finished the ridiculousness that is interview season.  It was substantially busier than last year, but I think it paid off in that I will not have to worry about looking for a job next quarter.  Having gone internship-hinting fall quarter for two years in a row now, both with very different results, there are a few really interesting things I've learned.

It can never hurt you to spread your resume around.  My brother is apply to college right now, and after a long discussion with him over break I convinced him that there is no harm in applying to a school you're not sure about.  You could argue that you lose the application fee and a bit of time working on additional essays, but isn't this worth it if it pays off in the long term?  A few dollars and hours now is certainly worth it for four spectacular years.  The same definitely holds true for jobs, although there is a much worse return on these applications.

I interviewed at five companies this quarter, most just found from the two career fairs at school in October.  Two were small, startup software development positions, two software development positions at larger companies, and one non-software development position at a large company.  I ended up getting three offers, all of which I was really pleased with.  However, I don't think this means that the time spent interviewing at the other two companies was wasted by any means.  First, I got to work on some great problems.  At the very least, if you have no idea how to solve an interview question, you can leave with the solution and the thought that you will be able to conquer it again in the future.  One of the two companies challenged me on a huge number of these problems.  I nailed some and fumbled others, but they were all fun and all good practice.

Another company really grilled me on an interview question.  When asked to rate my skills in a particular language on a scale of one to ten, I placed myself around a five or six, carefully noting that I wasn't really sure what a ten was.  After a few bits of tough criticism, one interviewer told me that I was more like a two or three.  As disheartening as that was, it was a great wake-up call that I need to start learning more in this field.  As I mentioned during the interview, I can't evaluate myself on things I don't know, but now I have a better way to gauge how far I need to go.

One thing that still surprises me is actually getting offers.  When you've been grilled for three to four hours, you're bound to make a few mistakes, and when I leave an interview, these are always the first thing on my mind.  As a result, I tend to think that I have failed every interview I have ever made a mistake in.  I get the impression from anecdotal evidence that this is quite common, as many friends mention the same feelings after tests, as well as interviews.  Thankfully, upon a closer examination, I did enough things right that I could manage to secure an offer.

When it came time to compare the offers, it was a truly difficult decision.  Not only did they all come with their own bells and whistles, but the locations, companies, and work itself made a huge difference to me this year.  In the end, I made my decision based on the type of work I will get to do, as it will undoubtedly be a new and exciting experience for me.  I'm looking forward to trying new things, exploring new concepts and ideas, and just generally learning this summer.

The biggest take-away point from the whole process was definitely that applying early works.  I thought I just caught a lucky break last year at Mozilla, but in reality I played the game better.  If you apply early, this gives you two advantages right off the bat.  First, the company knows that you are interested, specifically, more interested than everyone who will apply in two months, because you came to them early.  Second, since there is a small pool of early applicants (especially for internships) chances are you're one of few people interviewed thus far.  Companies will be eager to fill positions early if they find a good match.  Later on, once the applicant pool fills up, they can be more discerning with who they choose, so applying early gives you a more direct, streamlined process.

Anyways, as always it's nice to be done.  Given what my course schedule is starting to look like for next quarter, I am quite glad that I don't need to be thinking about jobs the whole time as well.

Filed under: General No Comments
23Dec/091

Staffing in Cedro

I promised a recap of the year so far in Cedro in my earlier post, so here goes.  I obviously can't reveal a lot of specifics, since people's personal information is private.  However, that doesn't mean there aren't a few observations I can make right now.

The Dorm as a whole

This is undoubtedly the trickiest thing to get a grip on, but also the one that I think we as a staff want to control.  One of the things I find myself doing constantly is comparing this year to my freshman year, and every time I do so I need to remind myself to stop.  Clearly, there are two different groups of people, the dorm is different, and I'm different.  As much as someone can try to tell me that both years are just a group of 93 freshmen and staff, this is simply not the case.  Another major problem in this comparison is that I am comparing Cedro from my freshman year as it exists now to this year's Cedro.  A year is a crazy long time.  So much can happen in just a few months - even weeks - and it's unfair to both groups to judge either one at this time.  Thankfully, one thing that is consistent between the two years is awesomeness.  I love old Cedro, and I love new Cedro - if there's one thing that's constant it's C-Love.

Social Atmosphere

The word of the day at one staff meeting was "organic," and this is how I'd describe the social atmosphere.  Frankly, 3 hours of icebreakers don't get you to meet people, but 3 months of living together does.  It's been exciting to watch people mix, meet, and just generally interact.  I'm not as outgoing as I want myself to be, which is one of the reasons I think I try to put myself into leadership roles.  It takes the pressure off me to introduce myself and talk to people - and they can come to me as a source of knowledge.  I joked with another member of our staff that one of our staff members from freshman year loved to "impart wisdom."  As much as this makes me laugh, I don't think I'm any different.

Alcohol

A word to future staffers - don't be on call the first Friday night of the year!  Nothing bad happened, but it was still a night to keep me busy.  Overall however, the dorm is rather similar to what I remember from our year.  There's the party crowd, and the non party crowd, and the crowd of people who party-sometimes-but-also-like-to-not-party-too.  the best thing, which I noticed my freshman year as well, is that none of these groups are exclusive.  Sure, it's tough to hang out in a room with beer pong when you don't drink, but that doesn't mean that you are not allowed to be friends.  Having seen both sides of the fence now, this is still one of my favorite aspects about Stanford: everyone respects the choices of others.  As a result of this, people tend to make better choices than they would otherwise, and the dorm is a better place as a result.

Programming

I was always the rah-rah guy during NSO who loved to cheer.  Cedro this year has its  enthusiasts, but as a whole the dorm is really chill.  This terrified me at first, but I have now grown to love it.  I really respect that people can recognize the atmosphere we strive to create and choose not to participate, instead finding their own way to have fun.  We've had plenty of cool events, and with our snow trip just around the corner, I know there will be plenty more to come in the next two quarters.

Co-ed vs. Single Gender floor

This was a change made by housing, to convert single-gender floors to all-coed floors.  As a staff, we all wanted single-gender floors to stick around, but housing made their own choices and overruled us instead.  I'm so glad they did - this is another way that a different experience has made staffing more rewarding for me.  The floors are all similar, but I am proud to say that the third floor still has that attitude that made it kick-ass freshman year.  Though I am totally biased on that front :)

It's been a great quarter.  I'm looking forward to the rest of the year as well, since the first quarter can always be a bit overwhelming with simply handling the adjustment to Stanford and college life.  As a result, there's not as much programming, but the next two quarters fill up with really fun and exciting activities.  I can only hope that they will live up to my expectations.

Filed under: Cedro, Stanford 1 Comment
18Dec/090

Some thoughts on the Droid

I recently got a Motorola Droid as my new cell phone.  I was holding out for an iPhone, since my family is still on Verizon we've yet to switch.  It was either keep my crappy phone for free, or pay $70+/month to switch.  I think the choice was rather clear as to the best option here.

I got an iPod Touch 2nd generation for my birthday last year, and until now that was my primary "internet-everywhere" device in lieu of my laptop.  Thus, despite that fact that I never had an iPhone, I feel like I'm uniquely qualified to evaluate the differences I've observed in the two devices, since I have used both as a primary device for an extended period of time.

Hardware

I noted in a recent interview that I'm a sucker for shiny, and this holds true on both devices in different ways.  The touch is clean, simple, and an overall well-polished and thought out device.  Apple is well known for engineering great hardware, and the iPod touch is no exception to this rule.  The screen gave me problems on occasion if my fingers dried out due to overuse or cold weather, but that's really the only gripe I can give it.  The Droid hardware is also shiny, but in a completely different way, taking sharp angles and a simple black throughout the device.  I love this style as well, in the sense that it's simple, clean, and one of the only colors I will ever buy tech devices in (black or silver).  The Droid also adds its full keyboard to the mix.  I have fat fingers, so I'm no good at typing on any keyboard, but it's easier to get started on a physical one.  I still don't have the hang of it, but I'm working on it.  That being said, it's great to have a lot of real estate on the screen.

Apps

This goes straight to iPhone.  They were first, and the app approval process, even with all its problems, does weed out the poor contenders.  I'm happy to say I've found some good apps for this and that, and background notifications enables a slew of possibilities unheard of on the iPhone, but there are way more bad apps in the Android Market than there are in the App Store.  As another disclaimer, I've still kept to the free apps, so it may just be that I'm missing out on the good selection.

OS

Android is probably the winner here.  The one point I could complain on is that UI elements aren't as classy, but that's what Apple is known for so there's nothing to worry about here.  Some are greatly improved.  For instance, selection drop-downs can combine with the keyboard to make for lightning-fast selection of the desired item.  The doorhanger notifications rock, but some apps abuse this great resource.  Thankfully, Visual Voicemail recently updates so I don't have to deal with it polluting my notifications any more.

Phone

This is really a comparison to my old flip phone, but hey.  I miss the satisfaction of physically opening and closing the phone - sliding a virtual bar does not equate at all.  However, the recently called list is amazing, and threaded text conversations (along with the ability to store more than 50 messages) is a godsend.  I've definitely started texting a lot more, though that could be related to other things as well.

Connectivity

Again, I might be comparing apples to oranges, but so what.  Having a 3G connection means that I can now watch dumb YouTube videos without relying on the place I'm at having Wifi.  This is totally a guilty pleasure, but I know it will come in handy some time when I'm lost on a road trip.  I've also accomplished something I never managed to do with my old cell phone: namely, tether successfully with my laptop.  I probably did get this to work at some point, but in retrospect it was most likely a total hack that never had any real potential or speed.  Either way, goodbye airport paid wifi!

Maps

Google Maps Navigation is by far one of the coolest things I've used in a while.  It's a free GPS, but it also does voice search, and since it's powered by Google I never have to update it.  This has already taken me to the city a few times, and it works quite well.  Undoubtedly, it's a few steps behind current GPS systems, but this is really only due to a lack of good data as far as road configuration, which in my opinion is just gravy.  The iPod had some great directions on it, but it was sequential, and lacked the auditory input that makes Droid's so easy.

I'm really happy with the device overall.  If I had bought an iPhone instead, I think I could have written an equally glowing review.  And of course, AT&T and Verizon aren't going to let each other forget each device's shortcomings anytime soon.  If you're in the market for a new phone and you're totally a power user, I say go for it.  Or, you can wait until January for the nexus one, and avoid the early adopter fee I knew I would inevitably end up paying.

Filed under: Software No Comments
14Oct/091

The Greatest Streak of all time

I thought that going eight years without ordering hot lunch would be my greatest accomplishment of all time.  However, this has now been surpassed.  With the 21-year (!) no-alcohol streak!

I had a beer at midnight on Sunday.  I don't think I really liked it - which was nice in that it validated my choices over the last two years.  That being said, if I did it all over again I might have changed some things.  One of the best things Stanford has taught me is that you can't rely on classes alone to teach you here - there's so much to learn about life in general.  Taking risks and trying new things is just as valuable as those IHUM lectures I sat through (well, in this case, one is clearly more valuable).  That being said, I think I missed out on a potential opportunity for new and exciting experiences over the past two years.  Thankfully, I'm old, so I have two years to figure these things out!

So why did I do it in the first place?  I think it was just because of the policy - I was under 21, so drinking appeared to be a no-go.  After being at Stanford, I realized that the reason people can drink so easily underage is not so that they can have a safe haven to break the law, but it's because they can have a safe haven to learn.  In my blind execution of the law, I think I glossed over this point rather quickly.

So, all this being said, I'll be trying some new experiments over the next few weeks.  Whatever outcomes I find will certainly be an experience one way or another, but at the very least I will learn new things.  I am confident now that I can execute my own choices, so I can add that to the list of benefits for this choice - no one can ever tell me what I should or should not do in any sort of alcohol-related situation.

Filed under: Stanford 1 Comment
26Sep/090

Pool and Ping pong played in dorms

I've seen a lot of pool and ping pong played in the first week here at Cedro.  Based on this, I constructed this very scientific graph representing the data as best I can.

Pool and Ping pong Over TimeClearly this is not accurate at all, but hey, that's science for you.  Why does this happen?  People are still mingling.  Someone sees a pool table or a ping pong table not so much as entertainment, but as a way to get to know a new person.  At the same time, those who are less socially inclined (myself included) tend to see these with some reaction like this: "Whoa, I can play pool any time I want!  I never played pool at home!"  Thankfully, this leads to more social interaction in the long run.

I'll be keeping an eye on the usage of the two tables throughout the year, but I'm willing to be that the results will be as predicted.  The actual slope might be different, but I recall it looking very steep like it is here.

Filed under: Stanford No Comments
28Aug/090

Add-on Validation on AMO

My internship at Mozilla this summer focused on creating a test framework to automatically scan and validate add-ons uploaded to the site.  This was originally meant for the add-ons blog, but since there were a bunch of new features this would have been a bit unruly to post.

Following up on Wil Clouser's post from a few weeks ago, we've added some new features to the validation suite, which will go live this Thursday.  This post will cover some of the changes, and let you know what to expect when these are pushed to AMO.

The most notable change that you will see is that new uploads are now run through the validation suite automatically.  After uploading an add-on, there is a new step which runs the validation tests.  Many of you will probably see a screen similar to this one:

Add-on uploader results

As mentioned in the previous post - don't be alarmed by this page!  Many of the validation tests are likely to generate false positives.  This doesn't necessarily mean that an add-on has problems, so it is important to take some time to review these flags.  The new page also provides the option to submit a new file.  This gives you the power to completely polish add-ons before submitting them for final reviews.  Rather than waiting for a review that might require a simple fix, you can now correct flaws based on immediate feedback.

When you are satisfied with the state of the results, click on 'Continue' to complete the add-on.  You'll then be taken to the familiar completion page:

Completed Add-on

And your add-on is complete!  One advantage of the in-place validation process is that there is no need to delete a version you want to replace.  We don't save your version until you are satisfied by clicking the 'Continue' button, so take your time in perfecting your add-on.

In addition to running tests on upload, we have added some new tests and improved others.  Based on feedback from the first post, we identified patterns that could be fine-tuned to reduce false positives, and added some new ones as well.  As always, remember that these are pattern matches, so be aware that false positives could be present.

A future release will also feature the introduction of a new tool, jshydra.  jshydra is a static analysis tool for JavaScript, and gives us a huge amount of power for building new tests.  Right now, two tests feature jshydra:

  • Global Namespace Pollution: This test is likely to generate errors for many of you, as it flags every global item in your JavaScript code.  For instance, consider the following:
    var foo;

    If foo is already defined somewhere else, JavaScript happily overwrites it with this new declaration.  Instead, you should properly namespace all globals.  This code, for example, will not cause problems:
    if(!org) var org={};
    if(!org.mozilla) org.mozilla={};
    if(!org.mozilla.addons) org.mozilla.addons={};

    We now have a unique namespace in the form of org.mozilla.addons.
  • install.js Security checks: This test analyzes the install.js file used by some add-ons to install in SeaMonkey.  There is a whitelist of only five functions that should be present, and we use jshydra to determine if any others are being called.

Though both of these tests are basic now, they demonstrate the power of jshydra as a tool.  As the test suite matures, there will undoubtedly be more tests added that take advantage of this engine for more advanced and creative checks.  Look for the introduction of these tests in a future release of AMO.

Just as before, if you have any questions, comments, or ideas for improvements please let us know, either as a comment on the add-ons blog or on IRC.

Filed under: Mozilla, Software No Comments
28Aug/090

Import Success and Mozilla wrap-up

The 58 old posts from my original site have been successfully imported into this new one.  There's not much content that's worthwhile, but someone might appreciate something up there.

This is also my final week at Mozilla - and it's been quite a ride!  The project I had a chance to work on was awesome - you can find the slides from the presentation I gave earlier this week here. The slides cover a lot of the technical details, which I might write another post about in the future, this will probably be about the internship as a whole.

Finding the internship still surprises me.  Last October, at the Stanford career fair, I dropped a few resumes not expecting anything in return.  One of those landed at the Mozilla booth, and within a few weeks I had calls to setup phone interviews.  After what struck me as a pair of unflattering technical interviews on my end, I found myself with a job offer.

I think the craziest part was how I wasn't expecting any of this to happen.  Typical internship shopping is generally March/April, so to have an offer in late November was nothing short of surprising.  I was also a bit worried about not having options - given the reply deadline, I was bound to not have another offer.  Thankfully some wise words from Keith Schwarz, a section leader who interned at Mozilla the summer before, convinced me that this would be a good option, so I took the plunge.  Throughout winter and spring quarter, not having to worry as my friends were frantically searching for jobs was a huge weight off my chest, though I still worried about having made the right decision.   Thankfully, as people started getting offers, Mozilla consistently ranked in the top tier, in regards to both technology and perks.

After finals were finished, the first step was moving in.  Having lived either at home or in a dorm for the entirety of my life, moving into an apartment left me rather anxious.  College is a great experience for living on your own and being independent, but Stanford does a great job of making this transition easy.  Food, laundry, it's all taken care of for you - and I had to re-learn a lot of things after jumping into the apartment lifestyle.

The first few days were a bit lonely, but most likely due to the fact that I had nothing to do.  It's true that you don't know what you've got until it's gone, and a workload is a great example of this.  Not having anything to do is just as painful, if not more painful than having too much on your plate.  Once I started at Mozilla, and later section leading, my problem of too much free time was solved, for better or worse.

My first week was still definitely the hardest one.  I think there were a number of factors that contributed to this, which individually I could handle, but together overwhelmed me.  First, I had to get used to a new job environment.  I think everyone goes through this at a new job, but I find that in my jobs this is always more difficult than it should be.  Why?  The first day isn't about writing code - it's about setting up your development environment.  Even with great guidance, this isn't something that people do every day, so this is bound to have its troubles.  Second, I was tasked with creating a "code plan," which I had also not encountered before.  The schedule on my project page gave me a week to accomplish this, so I was a bit confused as to what I was supposed to do.  Thankfully my mentor set me straight, and we had this more or less good to go by the end of the first day.

By the end of the week, things were moving along well, and within two week's time I had my first patch in for review.  This is also a process I was unfamiliar with - having worked mostly in a start-up-based atmosphere, having to get all my code reviewed before check-in was a new experience to say the least.  Looking back on the summer, I think I could still stand some practice with this model, but I've learned two very important things:

  1. Think about everything you do.  Actions have consequences, so try things out first and make sure you're doing things right.  This can range from forgetting to include a new file in a patch to rm'ing a week's worth of code, both of which I managed to pull off this summer.  Going back to my previous point, I like to work fast, along the lines of "code fast now and fix things later," but Mozilla works along the lines of "code well now so you don't need to fix later," a model I have come to believe is superior.  That being said, I'm still making my mistakes, but it only tells me I need to slow down and think things through a bit more.
  2. Slow down!  It's not a race to the finish, unlike school where taking a late day will impact your grade, in the real world missing a deadline doesn't have the same impact.  Granted, it's not something you should do all the time, but it's important to slow down and make sure everything is polished.

As time went on, I got into the swing of the coding pattern, and started to get to know the other interns as well.  We had a great crew - lots of really fun intelligent people.  One tradition I'm certain I'll miss is the weekly trip to the Original Pancake House in Los Altos - I doubt I will ever be able to finish the apple pancake I ordered last week!  From the weekly movie nights to the trip to LA one weekend, we had a blast.  The only downside here is that most people will now be scattered across the country, so it won't be easy to have any sort of reunion.  Facebook to the rescue!

The final two weeks were a real shift from the rest of the summer.  Since the big aspects were mostly complete, I began working on random bugs here and there.  This was a bit of a mixed bag - I solved some neat problems, but also got my hands dirty in things I probably should have left alone.  Still, it was nice to inflate my 'fixed bugs' count to absurdly high numbers compared to some other developers.

And that brings me to today!  With my last day tomorrow, I can look back on this internship very satisfied.  I learned a ton more than I did last summer (not to trivialize that, however), made some great new friends, and contributed to a project that will (hopefully!) make a real difference in the Mozilla community.  Even though most users will never see my code, I still think I managed to create something that will benefit the community in the long run - and that's something I'm quite proud of.

Thanks to everyone who helped me this summer - especially my mentor Wil Clouser.  It's great to have someone who asks you what you need help with before you ask questions, and this made my life way easier.

Now it's on to staff training!  But first, a quick mini-vacation :)

Filed under: General, Mozilla No Comments
24Aug/092

The return of the Site

This site has been out of commission for too long.  I'm bringing it back, with a few goals in mind:

  1. The site needs to be updated often.  The last post on rjwprogramming.com was over a year ago, and the last before that was probably a month prior.  My goal for this blog is to write about once a week, if not more often.  Hopefully I can get into a habit and actually stick with it this time.
  2. The posts need to be real content that people might care about.  Frankly, one of my pet peeves is TechCrunch writing in every other post how Twitter has gone down, or changed something, or whatever.  Looking at some of my old posts, my site wasn't far from this.  Moving forward, I want to have posts that aren't all technobabble about what's happening on my server (though I reserve the right to write a few of these).  I do interesting things now and then, so why not tell people!
  3. Use this site for more fun projects.  There were a lot of neat projects on the old rjwprogramming.com, but most of them were long lost and unmaintained.  I'd like to use this new site to make some real projects that I can have some fun with, and make sure that everyone can use them (read: goodbye .NET).
  4. Don't let this happen to the blog: http://xkcd.com/621/. Cliche, I know, but that's what I was trying to say in point 2.

Most of this probably isn't that ambitious, but it still might be tricky to do all this correctly.  Next step is migrating in everything from the old blog, and then the adventure begins!

Filed under: General 2 Comments
20Apr/090

Redesign coming

Wow, first post in a while.I've realized that this site as it exists cannot continue.  So, I'm redesigning it!  Sometime in the next month or two, things will move over to rjwalsh.net, and a new design will be prominently featured.  Hopefully it will give me the chance to use this site for real development projects and actual experiments.

Filed under: General No Comments