Go workshop at Gilt Tech

Friday I attended a Go workshop at Gilt Tech in New York. It was fantastic!

pic of my badge for Gilt

I had never heard of Gilt Tech before. I found out about the course from Lauri Apple’s Google+ post. I signed up immediately! I live in Baltimore, so I had to get up very early to get on a train to New York. My train was held up with a bad axle, so I was late arriving to New York. Thankfully, the workshop started at 10:00, rather than 9:00, so I still made it on time!

pic of the Empire State Building

Figure 1: Looking up at the Empire State Building from my walk down 33rd St.

Everyone at Gilt was super nice. They have a really nice facility on Park Avenue. They had a beautiful classroom set up and even had coffee and bagels waiting for us! At lunch time, they provided pizza and other things to eat and drink as well. Amazing!

The workshop was led by Aditya Mukerjee, who has been using Go professionally for over two years. He was terrific! He covered a lot of ground, but was clear and concise about everything. He made heavy use of screen, git, and tig, so anyone unfamiliar with those tools might have been a bit lost, but it was very effective. Most of what he did was checked in to a repo on github, so we could all check out the same thing he was showing if we wanted.

pic of Aditya Mukerjee at the head of the Gilt classroom

Figure 2: Aditya Mukerjee at the head of the Gilt classroom

During the hands-on exercises, I paired with Rafael. We didn’t finish our project that day, but I think we both learned a lot.

After the workshop, I walked around New York a bit. I saw Birdland, had a few lovely pints at Heartland Brewery, and went up the Empire State Building. Then I hopped back on the train to Baltimore. This was also delayed, making for a very long day, but it was worth it. By the time the train rolled into Baltimore, it was my birthday. Happy birthday to me!

Update: Gilt posted a blog about the class as well. You can see me (and Rafael) in the second to last photo there.

Get small in Go present

Among the many cool tools in the Go ecosystem is present, a package for making slide presentations and blog posts. It’s an easy way to make a nice looking HTML5 presentation that can also run live code samples. Keen!

Because it’s so cool, lots of folks use it. Often they publish their slides afterwards. For example, here is a terrific talk by Brad Fitzpatrick from GoCon Tokyo.

The problem is, Go present must have only been used by folks with high-resolution displays so far. When I look at any Go present presentation in my browser, the top gets chopped off. On most slides, this is the title!

screen cap of Go present in smaller browser

That top line is supposed to read, “60% of the time, it works every time….”, but even though I am scrolled all the way to the top, I can’t see it.

This appears to be a typical case of making fixed-size assumptions in HTML. I fiddled with the CSS a bit until I arrived at manipulating the margin-top value. Ten percent was a bit too much

screen cap of Go present with 10% top margin.

but 5% worked pretty well.

screen cap of Go present with 5% top margin.

So, I added the following to my userContent.css file.

/*
 * This is to force "Go present" presentations to fit in my browser.
 */
.slides { margin-top: 5% !important; }

Now all such presentations I encounter (which is a lot lately) are readable in my browser.

My first bad MOOC

I recently completed the “Big Data and Social Physics” MOOC at edX.

 

Image

 

What a waste of time. Thankfully, it was only one week long, so I didn’t waste too much time. But still. Even though it didn’t cost any actual money, I feel like I was ripped off. This was basically a big sales pitch for Alex Pentland’s new book, Social Physics How Good Ideas Spread–The Lessons from a New Science. The course itself is entirely free of content.

I did not cave in and buy the book, so I can’t really say, but it sure smells like it’s largely free of content as well. A new science? Is that really necessary? It sounds to me like maybe Pentland’s got a Wolfram-sized ego and has convinced himself that his ideas are so extraordinary they cannot be described with regular science. If you haven’t read Stephen Wolfram’s A New Kind of Science, you haven’t missed anything. I’m going to guess that it’s safe to skip Pentland’s “new science” as well.

Even if I’m wrong about that and it turns out Pentland’s book does contain interesting content, I still think it was wrong of him to exploit the wonderful edX platform in this way. This was not a real course. This was a TED talk that spiraled out of control.

Tomorrow, an edX course called Sabermetrics 101: Introduction to Baseball Analytics is starting. This appears to be chock full of real content including practical things like R and SQL. What does it mean if the baseball course has more “big data” in it than the Big Data course?

Inappropriate sarcasm

Dear modern C++. It’s okay. We like you. You don’t have to pretend you’re something you’re not.

Herb Sutter just gave an excellent talk on modern C++, but I thought one part was more than a little silly. At about the 10 minute mark, he showed an example (originally due to Bjarne Stroustrup) calculating the mean in Python and C++14. Before revealing the code, he sarcastically said that maybe he didn’t leave enough space on the right hand side because it will be so much longer and harder in C++. Then we see that the C++14 is line-for-line the same as how you would write it in Python. Har har.

screen cap of Python and C++14 side by side

The thing is, that isn’t how you would write it in Python. If you weren’t Bjarne Stroustrup, you would write

def mean(seq):
    return sum(seq)/len(seq)

Heck, if you’re using Python 3.4, you would just write

from statistics import mean

Showing that C++ is every bit as expressive as non-idiomatic Python doesn’t really show anything.

In Appreciation of Jazz

jeff_hellmer1.png

Figure 1: Jazz Appreciation

I just completed the Jazz Appreciation MOOC at edX. It was fantastic! It’s like a whole new world has opened up for me!

I am a lifelong fan of rock and roll, so I wasn’t completely unaware of jazz. I’ve been to a Pat Metheny concert. I own a Miles Davis record. Rock and roll is a term which includes an awful lot of things. The intersection of rock and roll and jazz is not exactly empty (both include blues, for example).

But I knew there was a whole lot more to jazz that I didn’t get. Jazz made me feel stupid (“I mean, just play the right notes!”) and jazz fans have a (mostly deserved?) reputation for snobbery. So jazz had remained largely inaccessible to me. I didn’t get it and there seemed to be no good way to find out what others were getting.

Until now.

Jeff Hellmer and the folks at the University of Texas (that’s right, UT. In Austin. The indie rock mecca. Who knew they even had jazz there?) have made remarkably effective use of the MOOC platform to spread their encyclopedic knowledge and obvious love of jazz to anyone in the world who wants it. And it’s completely accessible. Hellmer is whatever the opposite of a snob is, generously sharing his vast knowledge without making anyone feel dumb. Ten weeks ago I knew hardly anything about jazz, really. Now, I’m so excited, I have to be careful that I don’t turn every conversation into a one-sided jazz lecture. It’s an amazing transformation!

And an it’s an amazing gift. Of course I haven’t learned everything. Not by a long shot. Jazz is a huge topic. But I feel that I now have the tools I need to explore on my own. I didn’t have that ten weeks ago. It’s much more than just listening and deciding if you like it or not. I can now listen and identify all sorts of things about a piece. I still might not like it, but now I know why.

This is the third MOOC I’ve taken. Last year, I took the Stanford database course and MongoDB for Developers. Both of those consisted of video lectures and programming assignments. Jazz Appreciation also had video lectures, but in lieu of programming assignments they used something called Cerego, which was sort of like flashcards, only multimedia. In addition to text, they could play music to quiz you with. Also, the questions weren’t just random; they used an algorithm to decide what you still needed to work on. It was kind of fun, if a bit repetitive. Some of the questions were subverted by the pictures. For example, one of the little icons for “Fusion” was a picture of Herbie Hancock. So if it was a question about Herbie Hancock and you already know what Herbie Hancock looks like, then you don’t really have to know the answer to the question. The task is reduced to “click on the picture of Herbie Hancock.”

cerego1.png

Figure 2: Click on the picture of Herbie Hancock

Another difference with the previous MOOCs I’ve taken were the video lectures. Rather than speaking to slides or a white board, Hellmer lectured right from the piano. This enabled him to illustrate many points immediately on the keyboard.

jeff_hellmer3.png

Figure 3: Motivic Development

There are also other members of the UT faculty with different instruments in some of the videos. Most of the videos are just Hellmer at the piano, though. He’s very skilled and managed to get his point across even when he was talking about things that pianos can’t really do, such as scooping or growling.

Like the other MOOCs I’ve taken, this one had a discussion board. I don’t think this format scales up to thousands of users, but there were some nice discussions on there with interesting people from all over the world. I learned about Oscar Peterson, whose statue in Ottawa I have seen many times, but not given proper attention.

oscar_peterson_statue.jpg

Figure 4: Oscar Peterson statue in Ottawa

This class also featured weekly “office hours” on Twitter (#jazzofficehour), where @UTJazzApp would answer questions real time. This also would not have scaled if everyone in the class had shown up, but in fact it turned out great. It seems just the right amount of people showed up each week to keep things lively without getting out of control.

I really can’t say enough good things about this course. There is talk of repeating it in January 2015. If you have any interest in jazz at all, you owe it to yourself to check it out!

Mongo MOOC

I just completed M101P: MongoDB for Developers! This is a free online course that uses the edX platform, but is not offered through edx.org. Instead, it is offered directly from MongoDB (formerly 10gen).

Certificate_640.png

As the name implies, it’s an introduction to MongoDB, a database that is not a relational database, but a document store. Last year, I took the Stanford database course which mentioned all sorts of databases, including MongoDB, but mostly focused on relational databases (there was a unit on NoSQL, but it had no exercises). As such, this course made a nice follow-up to that one.

Manipulexity v. Whipuptitude

One of the first lessons explains the motivation for MongoDB with a plot showing where Mongo fits in between the scalability of a key-value store and the functionality of an RDBMS.

Mongo_Manipulexity-v-Whipuptitude_640.png

Figure 1: Manipulexity v. Whipuptitude?

This struck me as analogous to Larry Wall’s motivation for creating Perl; he wanted something in between the manipulexity of C and the whipuptitude of shell! Since Perl is one of my favorite programming languages (by far the one I’ve used the most), this analogy bodes well! If Mongo fits into the database world similarly to the way Perl fits into the programming world, I think I will like it!

Ubuntu

The course recognizes only two kinds of computers: Macs and PCs. Since I use Linux machines almost exclusively, I have had to learn to cope with this view of the world. It’s pretty popular among the general population. But not for developers usually. It feels especially odd here since MongoDB is probably running on more Linux machines in the world right now than all other machines combined.

Fortunately, installing MongoDB on my laptop running Ubuntu was dead simple

sudo apt-get install mongodb-server mongodb-clients mongodb-dev

Ubuntu 13.10 has MongoDB 2.4.6, which is pretty up-to-date (the latest is 2.4.8). For this course, MongoDB 2.2 or newer will suffice. Note that Ubuntu 12.04 (the most recent LTS) supplies MongoDB 2.0. This lacks the aggregation framework, so it would not be sufficient for this course.

In the course video, they download MongoDB to a Mac, create a data directory in /data/db, and then start the server by changing to the bin directory and executing mongod. Using the Ubuntu package, the server is already running and it’s using /var/lib/mongodb as a data directory. So there’s nothing else to do!

$ mongo
MongoDB shell version: 2.4.6
connecting to: test
>

Here mongo, the command line MongoDB client, connects to our running server and gives us a prompt. It’s basically a JavaScript REPL with some extensions for doing MongoDB stuff

> 2 + 2
4
> 
bye

Easy peasy lemon squeezy!

Python

There are actually several versions of this course. This one uses Python. As such, we needed to install pymongo, the driver that enables our Python programs to communicate to MongoDB. In the course video, they download it manually and run easy_install as root…gah! Again, if you ignore that advice, it’s really quite simple to do

$ pip install pymongo

The course also creates a web application and for that they use Bottle, a nice little web framework that I was unfamiliar with (originally a fork of Flask, I guess). Again, it installs easily

$ pip install bottle

Even though both pymongo and Bottle work fine in Python 3, the course uses Python 2 for some reason. I found this particularly odd because I think of MongoDB as a new thing. I mean, their whole business is based around convincing people to eschew decades of database research and try this new way instead. If anyone was going to embrace Python 3, I would have thought it would be the MongoDB folks. Anyway, I started out converting everything to Python 3, but eventually I gave up and installed Python 2.7.6 and used that for the rest of the course.

The sample Python code left a lot to be desired, even given that it was Python 2. In addition to using the print statement instead of the print function and %s instead of string format, it was loaded with bare except statements. That was never good form, even in Python 2. And they incremented variables with “i = i + 1,” explaining that Python lacks i++ (yes, but it has i += 1, so we needn’t repeat the name). Also, they use classic classes everywhere!

There were also issues with the inline quizzes. This appeared to be because they were doing string matching when they should have been evaluating. For example, I got this wrong

Write the to code to initialize a list with the items "hammer", "nail"
and "wall" and assign the list to the variable named "things".

because I wrote

things = ['hammer', 'nail', 'wall']

and they only accepted

things = ["hammer", "nail", "wall"]

These, of course, are equivalent in Python.

Despite all of these issues, I think Python is a good choice for this course. I wish they had used an up-to-date Python and I wish they had used more idiomatic Python, but in the end it didn’t really affect the course too much. How to use MongoDB from Python was effectively communicated. Indeed, I’m sure you can extrapolate everything to any similar language. I tried several of the examples and exercises in Perl and things worked nearly the same way. I’m confident I could easily do things in Ruby as well.

edX

The bulk of the course went very well. The edX platform was easy to use (I had some difficulty with the edX demo course, but none with the MongoDB course). It’s very similar to Class2Go, which is what was used for the Stanford database class. Most lessons consisted of a video lecture, a quiz, and its answer. There is some discussion in some of the answers. It took a me a while to catch on to this. Early on, if I got the answer right, I didn’t look at the answer video. After I got a few wrong, it dawned on me that there was good stuff in some of those answer videos! After that I started watching all of them, even when I got the right answer.

The final exam was harder than I expected. Most of the course was pretty easy to follow, so I guess I was expecting a pretty easy final as well. That was not the case. It was actually pretty challenging. I got what was probably the easiest question wrong because I didn’t submit the answer correctly. It was a pretty straightforward update, but we weren’t supposed to merely provide the update command. Instead, we were meant to execute on some unseen database. The confusion was worsened because you couldn’t go back and look at your answer afterwards. In any case, I’m certain I did it right (I ran it locally), I just didn’t submit it right.

Summary

Overall, I think the course was very worthwhile. Compared to a relational database, MongoDB is a joy to use from programming languages and I think going through this course saved me a lot of the trouble of discovering stuff on my own.

If you’re interested, there’s another section starting soon!