Clojure Development With LightTable 0.2.x

LightTable is a kickstarter project to create new kind of developer tool for Clojure development, inspired by the Inventing on Principle talk by Bret Victor.

LightTable aims to give developers instant feedback about their code, showing how any change affects their applications. Giving you a developer “surface” to work on, which will bring information to the places you need it the most. The principles of the LightTable design include:

  • Documentation there when you need it, no need to search
  • Edit anywhere and anything - not just text and not just as files
  • Discover by doing, changes produces instantaneous results
  • Shine a light on related pieces of code

Read More

Managing Multiple SSH Keys to Avoid Heroku Permission Issues

I was a little surprised to have an access issue with Heroku when using my new Mac Book Pro, as its always been really easy to deploy my applications to Heroku in the past.  I kicked myself when I realised I’d only set up a public key specifically for my Github account.

This got me to wondering the best way to set up keys given I am using different services for both personal project and work.

Read More

EuroClojure - Developers Get Musical With Overtone

Sam Aaron and Jeff Rose gave a whirlwind tour of creating music with Overtone, an open source music generator written in Clojure.

You can define your own instruments, map keyboards and other synthesiser hardware, all to make some funky sounds - although you probably want to have headphones on when experimenting!

@samaaron with overtone you can sit on a train and make musicI had fun creating my first overtone project from scratch at the last Overtone Hackday. Have a look at how I set up my environment.

The Design of Overtone

Music is not a very easy concept to define in software. Typically you start with a synthesiser and work your way up to notes and chords. Eventually you may get to a music piece, but this is often driven by a hardware keyboard and recorded.

The difficulty is that everyone has a different idea of how to describe music.

Overtone comes in two parts. The Super-Collider generates all the sounds from over 500 midi building blocks, essentially you create a directed graph that returns values to represent those sounds. The clojure project part allows you to define instruments (synthesisers) and orchestrate these instruments together.

Basic approach to making music

Overtone generally works on the principle of subtractive synthesis. You create a number of different sounds by defining individual instruments and by adjusting the time and frequency of the sound wave to vary the sounds produced.

Once you have some instruments, then adding an envelope generator will give you a changing sound through time by, essentially multiplying the sound by the envelope.

Join sounds together by creating a player function that takes a time and plays the instruments - adding durations to the sound.

To spice up your sounds you can then experiment with playing two different frequencies at the same time, referred to as multi-channel expansion. A resident low pass filter is also fun to experiment with.

Sam and Geoff showed off what they call the stepinator, which seems to emulate a square wave form which steps through a series of values over time. This created some Buck Rogers style music.

Eventually you will want to use an external keyboard or some hardware device to pay your music as calling functions over and over again from within the REPL will only get you so far. If you map functions, frequencies, etc to the external player controls then you can play your clojure code..

Getting Visual

To make the music come alive even more, you can use the Java processing framework. Instead of calling processing directly, you can use the clojure project Quil to visualise the overtone sounds, creating a sphere and controlling the size of the sphere with the different frequencies of the sounds.

Get collaborative

Sam and Geoff are trying out different ways of sharing the REPL so they can jam together. Many people are sharing their sounds on freesound.org, a collaborative database of Creative Commons Licensed sounds. Browse, download and share sounds

Get started

Read the Overtone documentation to get started or have a look at my setup on Ubuntu. Dont forget to experiment.

Thank you.
@jr0cket


This work is licensed under a Creative Commons Attribution 4.0 ShareAlike License, including custom images & stylesheets. Permissions beyond the scope of this license may be available at @jr0cket
Creative Commons License

Keep Calm and Use Clojure

A really nice april fools from Cake Solutions. I actually think this works quite nice as a sound-byte for the Clojure functional programming language on the JVM.

There are lots of scarily possible april fools stories on Slashdot, although they are funny its disturbing how close some of them are to the truth.

My favourite april fools video is from the Bitbucket team, making light of developers who are weary of pair programming… I definitely have to get myself one of these t-shirts.

Thank you.
@JR0cket


This work is licensed under a Creative Commons Attribution 4.0 ShareAlike License, including custom images & stylesheets. Permissions beyond the scope of this license may be available at @jr0cket
Creative Commons License

ClojureScript - the Hard Truth - London Clojurians March 2012 Dojo

The March edition of the London Clojurians coding dojo all the suggested dojo challenges were to be carried out with ClojureScript. After a long list of ideas we voted to do either Conway’s Game of Life or Monty Carlo graphics.

Getting started with ClojureScript seemed reminiscent of the challenge the group faced a couple of years ago when first trying out Clojure. Although getting started with Clojure itself is pretty easy these days, it feels like ClojureScript still has a way to go in terms of a great developer experience.

I looked at ClojureScript One and was put off a little by the amount of git projects it was downloading as part of its bootstrap process. I am sure its a great project, but seemed too much for the dojo and my netbook!

We settled on lein-cljsbuild project and used the simple example that comes with it. We fired the example up okay and had a working webserver thanks to some Ring Clojure magic and a tiny bit of JavaScript.

lein deps
lein ring server-headless 3000

Whilst we could display text in a web page and a JavaScript popup, we could not do anything that required working with the DOM - specifically setting up a graphic area or adding buttons.

In hindsight, perhaps we should have looked at the advanced example that came with lein-cljsbuild, although we would probably have also run out of time with that too…

Perhaps if we had spent a bit of time before the dojo with the basics things would have gone better, however it was good to discover as a group the level of challenge involved and it made it easier to get started as we could draw from a range of experiences.

So what else did I learn?

You need a JavaScript resource

I started to become a bit weary when it was mentioned that we should have someone in the team with JavaScript experience. Even though we had someone with experience we still had lots of challenges.

Google Closure libraries

The Closure Library is a JavaScript library that provides cross-browser functions for DOM manipulations and events, AJAX and JSON, as well as more high-level objects such as User Interface widgets and controls.

The Google Closure library looks really great, but there seems to be a few challenges to get it to work with ClojureScript. Again this is down to our limited time to get to grips with several APIs, so we had little luck finding something that worked.

Where’s my DOM

Our group got stuck on trying to find elements in the DOM via ClojureScript, repeatedly getting nil when asking for elements in the DOM. We postulated that is was a timing problem, but were not able to code around the problem.

We fired up the Chrome browser developer tools to see the errors, but couldn’t get any of the many fixes we found on Google to work.

Using jQuery to load things up

By the end of the night I had a strong impression that you cant do ClojureScript without knowing a lot of JavaScript. This goes against what I thought was possible, to write a Clojure style syntax that you could run inside a JavaScript engine. Yes, I expected quite a bit of interop, having lots of doto calls to chain some JavaScript calls, but didnt figure on jQuery being there or so essential.

Find an example that works

Find an example ClojureScript project that works and is easy enough to understand - without having to spend an hour setting up Leiningen plugins and dependencies or having to download lots of things from the Internet. This was tricky to find in the time we had.

Some blogs to and projects to review

In Summary

So first impressions of the experience suggest I need to read some good tutorials on the subject and review code of some more projects. I plan on doing some more projects around Noir, so I’ll try and see where the advantages of using ClojureScript are when using a set of Clojure web frameworks.

I am still excited about ClojureScript, but its one of those things where I need to find more time than I have to get to grips with it. If anyone has any other blog or project recomendations, please let me know.

Thank you.
@jr0cket


This work is licensed under a Creative Commons Attribution 4.0 ShareAlike License, including custom images & stylesheets. Permissions beyond the scope of this license may be available at @jr0cket
Creative Commons License

Learning Clojure Through Practice - London Clojurians February Dojo

Another chance to practice Clojure with the help of the great people that are part of the London Clojurians community. Each person at the dojo has a different experience with Clojure and functional programming, so there is always something different to learn. It still amazes me how much I learn and how confident each dojo makes me (by the end of the night anyway).

Read More

Clojure Developers Making Music Together - London Overtone Hackday

The coldest night in London of 2012 so far was the warm up to a symphony of music by a collection of unstoppable Clojure hackers. As it was my first hackday with Overtone there was lots of new things to learn, from setting up the environment to a whole load of interesting music theory.

I also have Gnossiennes No.1 by Erik Satie on an endless loop in my head after having fun playing around with a piano synthesiser.

I cant really cant do justice to how much fun it is working with Overtone. Its like getting your hands on a Stylophone for the first time, just after seeing Rolf Haris demo it on TV! The only difference being you can make much better music with Overtone.

There is something just so ultimately geeky and fun in creating music using a functional programming language like Clojure.

I first tried Overtone at a London Clojurian coding dojo and with the help of the rest of the team we were quickly creating weird and wonderful sounds - although not quite in the same leaguge of

Thanks to some great documentation on the overtone github site it was pretty easy to set up my lubuntu laptop with an audio server, Overtone server and a nice lightweight clojure development environment (emacs, leiningen). I am afraid it will take me a bit longer to absorb music theory!

Setting up the audio for Overtone

In order to get sounds out of your overtone project on Linux, you need to add a few packages.

sudo apt-get install jack-tools ant openjdk-6-jdk fftw3 qjackctl

As you grow your overtone project you may want to switch to a linux kernel set up for real time processing, but to start with this is not necessary. If you do get more involved projects, its probably a good idea to also look at Ubuntu studio which provides a great selection of audio, video and graphics tools.

_Mac OSX already has a suitable sound server, so nothing extra is required. If you are using windows, overtone is supported also (not sure if you need to set anything up though).

Create a new overtone project

An overtone project is just like any other clojure project, with the overtone dependency added.

Create a new clojure project with your build management tool of choice: maven, cake or leiningen. I used leiningen as my tool of choice.

lein new tutorial

Add the Overtone dependencies to the project configuration file tutorial/project.clj

1
2
3
(defproject tutorial "1.0"
:dependencies [[org.clojure/clojure "1.3.0"]
[overtone "0.6.0"]])

With the overtone dependencies added to the project file, used leiningen to download the jars that make up overtone itself.

lein deps

Leiningen will download about 16 jar files for overtone 0.6.0 and places them in the project lib folder. This gives you all the libraries you need to start creating things in overtone, including an appropriate version of clojure.

Fire up your environment

Emacs not only has great support for the Clojure language, its a great way to try out your code by evaluating individual functions (s-expressions).

My preferred way to launch emacs is to change directory to the project top level and fire off emacs with the project file

emacs project.clj &

Using the dynamic environment of Clojure, the REPL, is a great time saver for trying out functions as well as running your project code. To fire up a repl inside emacs I use the new emacs 24 approach, running Meta-x (clojure-jack-in) to start up and connect to a repl using the underlying lein project file.

Meta-x (clojure-jack-in)

I have set up a keyboard shortcut of C-c C-j to make this even easier.

Starting Overtone

For my initial experiments I run an overtone server on my laptop, that way I can also play on the train home. You can also use an external overtone server called the SuperCollider (no not the LHC)

In the repl, I fired up the internal server (dont try to fire off both servers in the same repl, it crashed my repl)

in the REPL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(use 'overtone.live)
_____ __
/ __ /_ _____ _____/ /_____ ____ ___
/ / / / | / / _ \/ ___/ __/ __ \/ __ \/ _ \
/ /_/ /| |/ / __/ / / /_/ /_/ / / / / __/
\____/ |___/\___/_/ \__/\____/_/ /_/\___/
Programmable Music. v0.6
Hello jr0cket, may this be the start of a beautiful music hacking session...
nil
```
# Defining my first instrument
I soon discovered that it does take a little time to build your instruments. Its like any good programming challenge, there are many ways to do things and there are always lots of surprises. Reading the [getting started guide](https://github.com/overtone/overtone/wiki/Getting-Started) helped me with my first instrument.

(definst annoying-tone [] (saw 220))

1
2
This is a simple and rather annoying tone that uses the saw function to create the sound. To play the sound I simply call its name:

(annoying-tone)
```

The easiest way to end your experiment in sound quickly is to use the (stop) function.

Quickly testing out your instruments with emacs

Many cool things were done at the hack day and it was great fun to play with the Ableon Novation Lauchpad. Its a midi controller that can be used to help you play your instruments and make it easier to turn overtone into a song maker.

I got as far as creating a few basic instruments and borrowing a few others, such as the one to create Jingle Bells!

Thanks to Phil Potter for having the energy to organise this event, Thoughtworks for supporting us with the venue and everyone there for making it a great day.

To have a whole day focused on overtone really helped me accomplish something and its going to be easier now to keep the learning going. All my experiments are now uploaded to my github account.

Hope you find the time to make music with Clojure and Overtone, you will love it.

Thank you.
@jr0cket


This work is licensed under a Creative Commons Attribution 4.0 ShareAlike License, including custom images & stylesheets. Permissions beyond the scope of this license may be available at @jr0cket
Creative Commons License