Sonic Pi

In my free time over the last week I’ve managed to start making some interesting noise in Sonic Pi, a live coding environment designed as an educational tool. It’s free, and it comes with a surprisingly friendly tutorial.

LCS #1 - Goodbyes… from Sam Aaron on Vimeo.

It’s been a lot of fun because although Sonic Pi feels a little toyish, it’s fundamentally similar to live coding software like Impromptu, Extempore, and Overtone. Now that Sonic Pi has helped me get a clearer picture of how loops work and the processing of composing pieces of music rather than just making standalone sounds, I’m interested in moving back to learning Overtone and working more on instrument and effect creation.

Learning Curve

What a couple weeks it’s been since I started the coding boot camp. The excercises are hard (it is a boot camp, afterall) so there are planty of moments of frustration and self-doubt, but the holy-shit-it-works-and-I-know-why moments make it awesome. I think ultimately they’re why most of us are there, and by there I mean not just at the boot camp but why we’re trying to become developers in the first place. We like defeating tough problems.

Some of the problems we’ve been presented with off the top of my head:


  • Make a function that only works the first time it’s called.

  • Find the similar words in two text files.

  • Make your own version of the forEach method.

  • Put together a map game from several .js modules

  • Set a reminder that occurs some time in the future.

This last example reminds me of a little variation I wrote that I’m kind of pround of. A classmate was trying to include a countdown for the reminder that would fire every second (we tested the reminder set 10 seconds out):

1
2
3
4
5
6
7
8
for (var i = 10; i > 0; i--) {
setTimeout(
function() {
console.log(i);
},
1000);
}

This program sort of looks like it should work, but it actually just set 10 timers that counted down from 10 to 0 and then each printed i. This is partly because of Node’s asynchronous nature.

I’m not sure my solution necessarily fixed the problem my classmate was trying to solve, but it does make a countdown using Node’s setInterval function:

1
2
3
4
5
6
7
8
counter = 10;
intervalID = setInterval(countdown, 1000);
function countdown() {
console.log(counter);
counter--;
if (counter === 0) {
clearInterval(intervalID);
}

There’s so much more I could talk about regarding coding boot camp, but I’m going to start shooting for smaller updates more often.

On the Hexo front, I figure’d out why some of the icons weren’t appearing here on this blog. I hadn’t copied the theme I’m using to the hosted version of my blog (the one you’re looking at now). Enough CSS made it through to trick me into thinking it was present but just being glitchy, and I only discovered it was absent when I went to upload a new theme.

General Update

I haven’t updated in a bit because I’ve been so busy with the Holidays and trying to get ready for Portland Code School. My strategy is to develop a solid grasp of the fundamentals so I can spend as much time as possible building a portfolio. I’ve been making some good progress in that regard.

After finishing the AJAX course on Treehouse, I now have over 6,000 points, most of that being in the Front End Development track. I’ve also been spending some time on HackerRank. I’ve solved a couple problems in the Algorithms domain. Interestingly, I am one of what seems like just a few people using JavaScript. C++ seems to be the most popular language on that site.

I’ve been reading /r/webdev religiously, and even managed to start a thread that got over 100 replies. I asked why the word “hipster” is used so often when talking about web developers and technology. Coming from working around a lot of musicians where using the word “hipster” prejoratively is often parsed as insecure or shallow, I was curious how people in tech felt about it. I got a lot of interesting replies. The takeaway for me was that while I won’t go clamoring to use every newest JavaScript library, I still can’t stand the word “hipster.”

Speaking of obscure new things that norms don’t know about, I decided to explore Overtone, a live coding environment that uses SuperCollider’s audio engine and the lisp-based language Clojure. I managed to get a few ugens making noise, so I’m excited!

Here’s a talk from Erik Swanson that shows Overtone in action and is also a nice introduction to audio synthesis in the context of live coding:

I’ve still been looking at Extempore too, but it’s still very much in the development stages. Things are changing so fast that most of the tutorials the developers have posted are now broken. I’m definitely going to keep paying attention, however. Maybe some day I’ll even be able to contribute to the code.

I was able to find some other environments to check out after finding TOPLAP’s website. TOPLAP stands for Temporary Organization for the Permanence of Live Art Programming. I want to share some more of the stuff I’ve learned about there, but for now I’ll leave you with my favorite line from their manifesto: Live coding may be accompanied by an impressive display of manual dexterity and the glorification of the typing interface.

Portland Code School Showcase

A few days ago I swung by Portland Code School to see what their most recent batch of graduates had been working on during their time in class. There were some great projects that I’ll get to, but what impressed me the most was how finished everything looked. I was expecting to see mostly prototypes and unstyled APIs, but the grads had fully functional, handsome looking sites. I’m guessing the development students teamed up with the front-end design students to make things look as nice as they did.

I tried to pick as many brains as I could. I’m sure there was an occasion or two when my eyes glazed over as a graduate explained what was running on the back end of their site or why they chose a specific database, and that’s a good thing because, hey, that’s why I’m doing the Immersion program. For the most part, however, it all made sense. JQuery, AJAX, Ember, Node etc.: full-stack JavaScript.

Most importantly, I came away confident that my ideas will be doable in the allotted time and that I’ll have the requisite skills to develop — or at least help develop — any web app I put my mind to once I’m done.

Now on to some of the ideas that I thought were most interesting.

Letefeed is a really promising site that is like a social media-infused fan page for professional athletes. As one of the developers, Mike Wroblewski, and I discussed, most sports sites are trying to cram as many statistics into a player’s profile page as possible. I like Letefeed’s focus on the player’s Twitter posts and mentions because it’s more personal than a huge stat grid.

Another project I liked was Realfeelz.com, a sort of bathroom wall-like site where users simply leave a random thought or look up others’ thoughts by category (confessions, insights, etc.) One of the developers, Leslie Strauss, said she wanted to make something social but without the ephemeral feedback (like buttons, +1s, etc.) found on so many social networking sites.

I didn’t get a chance to speak to Ondine Gallatin, the developer behind Mudramum, but hers was an interesting project indeed. Her project is a site about mudras, which are an ancient meditation practice based on holding one’s hands in various positions to achieve emotional or physical well being. I have absolutely no prior knowledge of mudras, but cheers to an original idea and a site that looks awesome.

I wish all the graduates the best of luck in their new careers, and I can’t wait to start my PCS class on January 5th.

Yo Planet

This is my shiny new blog. It runs on Hexo, a Node.js powered blog framework. I chose Hexo because I’m going to be learning a lot of Node at Portland Code School starting next month, and I figured this would be a good way to get acquainted.

That brings me to one of the points of this blog. I’m going to be writing here about my transmogrification into a professional coder and web developer. I’ve loved computers since I first saw Castle Wolfenstein on my neighbor’s Commadore 64. Before computers, however, I loved sitting at the pedal board of my Gran’s Wurlitzer organ while she played Roy Orbison tunes.

So I’ll be posting here about music too, especiallyy music for video games and live coding. I have done a bit of the former, and I’m excited to learn more about the latter. On that note, I’ll finish here with a video of the brilliant Andrew Sorensen narrating a live coding performance at this year’s Open Source Conference (OSCON). Sorensen is using Extempore, a live coding environment of his own creation.