Sunday, February 26, 2012

2/20 - 2/24 CS373 Blog Post

Good evening everyone,

Another week has passed, and we are getting closer and closer to a glorious Spring break! Anyone have any plans?

In class this week, we had a great presentation by some employees of Mutual Mobile, a mobile software developer company.  They had discussed what they do, how they do it, and why they do it.  As a curious mobile application developer, I've always found it interesting creating apps for mobile technology.  As they had said in their presentation, mobile development is becoming a lot more prominent with the rise in mobile technology.  The influx of smartphone holders has allowed for the birth of mobile development. It's truly an exciting area of development.  Even when I'm busy with projects in multiple classes, I find myself wanting to develop for my iPhone because it's a lot of fun.  I'm so used to developing things in the command line; it's nice seeing some GUI output!  It was also very cool to see the technologies they use.  I had never heard of Jenkins or Jira until they had talked about it; I need to take a look and see if I can incorporate these things into any of my personal projects.

We had also started discussion about the Netflix project, which is due this coming Wednesday.  I had heard about the "Netflix question" about two years ago in my 336 class, but that was more so figuring out the logical aspect of the question; not so much figuring out an algorithm that could beat theirs.  It's been an interesting problem at the least, and there are a lot of things to take into consideration when trying to produce a better RMSE (Root Mean Squared Error).  For instance, the plethora of different caches one could try to implement given the movie data.  We had discussed two in class: providing the average rating for a given movie, and providing the average rating for a given user.  I'm currently in the process of creating these caches to test out in my program (the average rating for a given user does seem to take a while to create, given that we have 1.5GB of files to look at!).  But other ones that can be implemented may be a bit tricky to create.  For instance, finding users who have similar tastes in movies would take a while to look at, unless we developed another meta-cache that could tally up all the different movies one user has seen, and then compare from there.  Another cache is creating an average rating for movies that were created in a certain decade.  For instance, we would have movie averages from the 1950-1960s, 1960-1970s, etc.  We could also go further and develop another cache that had movie averages based on the year a user reviewed it.  So many options to discover; the only downside is actually parsing all of the 1.5GB of data into a useable cache.  But, the rest is fairly easy.

This class has been a great experience; probably one of my favorite classes.  I have learned so much simply through practice.  It wasn't until this class that I became devoted to creating multiple unit tests to assert that my programs work correctly, and it's kind of a crazy thought.  I've looked back at some older programs and projects that I've worked on, and it's absolutely insane that I didn't use unit testing on them!  Unit testing in Java was emphasized a little in 337 (Theory in Programming Practice) but they never emphasized on what we were to test on.  We would test methods for some corner cases, but not so much the fact that it produces valid output all the time, that we can throw/catch appropriately given the potential input we could face, and so on.  It's a little ridiculous.  Unit testing, I've learned, keeps me pretty sane about my programs!

This is all for now, I've got to get working on multiple projects.  More on the Netflix project will come next week!

Until then,

Corey

No comments:

Post a Comment