Falling down the rabbit hole

Hello again world!  It’s been a *very* long time since my last post and I apologize profusely for that.

Since I last wrote about my chrome extension, I’ve been busy jumping from project to project, chasing whatever captures my interest.

It all started with the Google FooBar challenge.  Right after I published my chrome extension I felt listless.  Anytime after a big project or event is finished I always feel a bit let down and lost.  I wonder, now what?  After days of waking up each day with purpose and direction, I’m back again at square one.  Needing to find a new project to capture my interest, but not really knowing where to start.  I keep a lot of notes jotted down with project ideas to avoid staying in these doldrums for too long, but it’s hard not to find myself there for a least a little while.

In any case, I was at the library googling around and trying to figure out my next move when I stumbled across the Google FooBar challenge.  The challenge is a semi-secret easter egg that gets unlocked when you google a specific term.  For me, it was ‘list comprehensions python.’  The search results page dropped away and I was invited to try this coding game.

Screen Shot 2017-05-02 at 3.17.13 PM

The first level was quick and easy, a simple list comprehension.  From there, I plodded my way through level two, and barely eeked by level three.  I haven’t started level four yet as I know it’ll be a disaster.  I’m waiting to build up a bit more knowledge before opening up that Pandora’s box.  I won’t go into implementation details, but if you’re curious a few of my FooBar solutions are on my GitHub here.

My solutions aren’t always pretty, in particular the matrix transformations in doomsday fuel is embarrassing, but they worked!

Screen Shot 2017-05-02 at 3.46.10 PM

The big side effect of FooBar was getting me into the backend of code.  Up until that point, I had been mostly doing projects with a visual component.  I hesitate to say front end since it was hardly that (e.g. a custom designed form with an automated backend, or a chrome extension that changed words on the page).

Google FooBar, in the guise of an adventure game, gets you working on algorithms.  I read up on Dijkstra’s shortest path and breadth first search.  I discovered matrices and dot products.  And I realized I really preferred this stuff to JavaScript and GUIs.  A little extra context: right before I came across FooBar I had been trying to learn Three.js but my heart just wasn’t in it.

Alongside all this, I had been taking a MIT course in order to learn about state machines.  I had wanted to do this in order to improve the performance of my robot.

Through the MIT course, I was forced to figure out virtual environments (I ended up with conda as venv was a disaster for me) and learned a bit of object oriented programming.

I wasn’t loving the MIT course format so I wandered over to Udacity and began taking a class that covered many of the same concepts titled Artificial Intelligence for Robotics.

I got almost to the final project but was, once again, unsatisfied with the course format.  The Udacity class provided the bulk of the code for each assignment, so I didn’t feel like I was actually learning the concepts.  I could get the right answers on the quizzes and programming projects, but if asked to write the code from scratch I wouldn’t have known where to begin.

So I abandoned yet another course (so much for quitting quitting haha!) and tried instead an EdX course Introduction to AI.  For me, this hit the sweet spot.  The class was hard but not impossible.  Some assignments provided startercode, but most asked you to write programs from scratch.

The course kicked off with breadth first, depth first, and a star search.  Next, we were asked to program a 2048 solving AI.

While banging my head against the wall trying to figure out whether my implementation of minimax was wrong, or whether my heuristics were wrong, I took a little detour and coded up a tictactoe AI.  Through this exercise, I learned that my minimax was just fine but my heuristics were terrible.

The long and short of it is, I have been negligent in my posting but I’ve been busy!

This post focused on the mechanics of what I’ve been doing.  Next time, a bit about what I’ve learned about myself 🙂

(Oh, and I also took a glassworking class – photos of my terrible glass sculptures to come soon!)