Week 11: 6/11 - 12/11
Four more weeks of classes left! I'm not sure if I should be happy or panicking right now, so I've decided to go for an unhealthy mix of both. Let's get started with this week's blog entry.
What did you do this past week?
I dedicated this past week mostly to catching up again with classes. There was definitely a lot I had to keep up with. An Artificial Intelligence project was due (on Bayes Nets, really interesting topic). I'm also getting caught up in my World Literature class (which is creeping up on me faster than I hoped), and have been doing a lot of reading in general. I've also advanced in my research project in the robotics lab in the GDC. There's some promising work going on with human-robot interaction and reinforcement learning. Hopefully, by next week I'll be talking about the successful simulations.
The one other big thing that got finished last week was the final phase of our SWE project, IDB. We managed to get the entire website working pretty well, with search and a lot of other features included. I actually quite liked how it ended up looking, so if you get a chance, take a look at it here: phonedb.info.
What's in your way?
At this point in time, not much. In a way, the only thing blocking me from moving forward is lack of time and a little bit of sleep deprivation. I can't wait for Thanksgiving to catch up on both of those!
What will you do next week?
Next week seems like it'll be another case of a pretty standard week. There's an Artificial Intelligence project that I need to work on (those keep coming up more often than you expect them to). There's also the usual readings, homework, and the like that I need to get done throughout the week. The hope is that next week I'll have some more time left to hang out with friends and get to enjoy being with them before I graduate soon. As the semester comes to a close, I've come to realize that I should take as much advantage as possible of these last month and a bit that I'll be living in Austin.
What's my experience of the class?
We definitely had an interesting set of classes this week. We spent Monday and Wednesday talking more about SQL. We basically spent time solidifying concepts of sets, and aggregation. While there were some interesting parts, I did feel like the class went a bit slow. It would have been nice to have moved on from SQL onto a different topic. Something like talking about other useful Python tools (such as Jupyter or Scipy would have been particularly useful for a lot of the class).
The second half was spent talking about refactoring and the Strategy pattern in Object Oriented Design. It was definitely a very useful thing to know if you've never used it before. It lets you write extensible and easy to change code. However, there's a cost associated with using it. Particularly, the code becomes a lot more verbose, and to get information on how the strategies work, you need to open a lot more files. While this is definitely a great technique for large-scale applications, I've seen it be misused for smaller programs far too often. Hell, even I've been asked to use it in an internship when, in retrospect, it just made the code harder to read. It's important to consider this when using these patterns. Always stop and thing, is this going to make the code easier to use, or am I just seeing problems that are actually very unlikely to happen?
What's my pick-of-the-week or tip-of-the-week?
This week's pic-of-the-week is going to be Jupyter! Before I do anything else, let me give you a link to try it out, here: https://try.jupyter.org/. To summarize, Jupyter is a web server tool that lets you write notes in an easy to use format on the web and insert runnable segments in the notes. As an example, Jupyter supports what they call a Python "kernel" (more on that in a bit). Basically, what that means is that you can insert Python code halfway through a page of notes, execute it, and have output on the page! After doing that, you can turn it into a PDF or just print it out, say, if you did your homework there. It's a great tool, and the only thing you need is somewhere to run the server. I recommend using something like AWS' free tier EC2 instances and have your server running there. You'll be able to create files there, run python documents, open a shell, everything! Just be sure to set up security (aka a password and SSL if you can). There's plenty of tutorials on how to do all this, so knock yourself out!