UK Developers Getting Social With JIRA 5

Many software development teams struggle to get the attention they need because of the way their communication is managed. Having tools to enable the team to involve the right people at the right time makes a huge impact.

Having the right feedback can make the difference between a projects success and failure. So its great to see the tools developers rely on are adopting these social tools in a meaningful way, without just recreating Facebook. The end goal should be powerful tools that easily allow the whole team to reach the whole organisation collaborate effectively.

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

Battleships at London Clojure Coding Dojo - January 2012

Its not quite Global Thermo Nuclear War, but battleships was a great choice for a coding dojo topic. Its a simple enough game and therefore a challenge that you feel you can tackle within one evening. Its also a game that most people know and have fond memories, so the discussions have lots of context.

If you are not familiar with the Battleships game, please see the Wikipedia page on Battleships.

At the January 2012 dojo we used a battleships server created by Neill Alexander and Robert Rees kindly facilitated the night. The battleships server allows you to submit your “player” and proceeds to play battleship games against is own player - CPU1 (shame the player is not called Master Control Program so I could slip in a Tron reference).

To get started with the dojo I forked the project on Github to my own account and cloned the project repository to my local machine. I still use the command line to clone remote repositories, its pretty straight forward:

git clone url local-folder-name

For my fork of the battleships game the command becomes

git clone https://github.com/jr0cket/battleships

When I clone a github repository that I have forked from someone elses repository I prefix the local folder name with my username so I know its my fork and not the original - saves a lot of hassle wondering why I cant push changes back to github directly

The project is on my local computer I can fire up leiningen build tool and get the project running. First thing to do is to make sure I have all the libraries the project depends upon. Leiningen will download the Internet of jars for me (just like maven) with the following command:

lein deps

The battleships project uses Clojail to create a sandbox, so its important to set the Java runtime environment security permissions. There is a handy lein task for this courtesy of Robert Rees that creats a .java-policy document in the … file:

lein policy

Or you can just create the file with any handy text editor.

I then fire up Emacs from within the top level project directory (makes it quicker to find my project files) and opened emacs with the project.clj file to see how the project is set up.

emacs project.clj &

Clojure has a repl for working with the language dynamically, so I fire the REPL server up using emacs (of course). Adding clojure-mode to emacs 24 gives you the swank REPL server - allowing you to call clojure-jack-in and fire up a swank REPl server using the lein project.clj project definition. I defined a keyboard shortcut Ctrl-c, Ctrl-j for the M-x clojure-jack-in command in the .emacs.d/config.el emacs configuration file.

I then open the relevant clojure code using the keyboard shortcut Ctrl-c Ctrl-f. For the dojo I just needed to work with the demo.clj file that defines a battleship player: jr0cket-battleships/src/battleships/demo.clj

Once the project is loaded into emacs and swank is running, load the battleships namespace into the swank server using the (use ...) function.

Note that (use) will load in all the required dependencies at once whereas (requires) will also require you add all the dependencies yourself.

user+> (use :reload-all '[battleships.client :as client])
nil

For the dojo we had a central server that we all submitted to. I also spun up a local battleships server so I could do some testing.

lein ring server

Now I am in the namespace I can submit the player I created - initially this was just the default demo.clj player as I was interested in a baseline player to work with. By default the demo.clj player will shoot and place your ships at random, with no intelligence to these
actions

user> (submit-player "src/battleships/demo.clj" "baseline" "http://localhost:3000")
Submitting to http://localhost:3000/create
    {:status 200, :headers {"date" "Tue, 31 Jan 2012 21:24:18 GMT", "content-type" "text/html; charset=utf-8", "connection" "close", "server" "Jetty(6.1.25)"}, :body "player1912"}

When submitting your “enhanced” player you should give it a name you will remember, different from other players. As the game does not replay any matches, its probably worth submitting a new player rather than updating an existing one (there would have to be a lot of players to overload the server!).

user> **(submit-player "src/battleships/demo.clj" "Masher001" "http://localhost:3000")**
Submitting to http://localhost:3000/create
{:status 200, :headers {"date" "Tue, 31 Jan 2012 21:24:18 GMT",
"content-type" "text/html; charset=utf-8", "connection" "close",
"server" "Jetty(6.1.25)"}, :body "player1912"}

If you are playing against each other in teams, then the server address will be the IP address of a shared server.

Now the clojure fun begins. Using the demo.clj as a basis, modify your player so it wins all the games, or at least stop it from sucking more than everyone else’s player.

So if you want to have some Clojure fun with Battleships, go make your own fork of the Battleships server and get coding!

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

Emacs Tip - Turn Auto Fill Off When Writing Blog Posts

The Fill minor mode will wrap your text so the lines dont become too long. Whist this is good for code, it puts in hard line breaks for your text which you would have to remove if copied into your blog post.

If you are using emacs to write the content for your blog you probably want to turn off the Fill minor mode, as this seems to be on by default when using Emacs 24 and the Emacs starter kit.

Easiest way for the new starter is to use the right mouse button to select the mode options on the control bar at the bottom of the buffer you are working in.

For those who enjoy the keyboard, fire up the macro auto-fill-mode to toggle the mode on and off.

If you would like to have a keyboard oriented lifestyle but are still learning Emacs, press the key combination Meta-x, type auto-fill-mode and press return. This toggles the mode, so if its on it switches it of and vice versa.

On a Linux PC, Meta-x is the keyboard combination Alt-x, on MacOSX it is Option-x

Happy Emacs fun!

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

MonkiGras London - the Craft of Conferences

It a little soon to be choosing my favouite event of 2012 but MonkiGras London is going to be a hard act to follow.

Monkigras London had such a diverse range of topics, a great line up of speakers, great party games and a host who had so much passion and enthusiasm share. It certainly was the most thrilling of conferences to experience. Here are the parts that stood out the most.

Read More

Java on Ubuntu - Time to Move to OpenJDK!

Oracle have had many ups and downs with the community over the last few years, although recently I though they seemed to be getting things right.

On the one hand Oracle are supporting FOSDEM but with the other hand are stopping the Sun JDK from being shipped freely by Linux distributions.

Is this simply an aggressive way to move everyone over to the OpenJDK platform at a quicker pace?  If it is then its a bit of a big stick to use, when you could just use the carrot of new features in OpenJDK 7 & 8.

Now Oracle has retired the ‘distributor license’ which allowed OS vendors to package Sun JDK (August 2011), the security board for Ubuntu announced that it would be removing Sun JDK package from its ‘Partner‘ repository from 16th February 2012.

“The Sun JDK packages will remain installed on current systems with no further security updates. On new systems, it will no longer be possible to install the packages from the partner archive. “

So if you want a new install of the Sun JDK after February 16th 2012 then you will need to do a manual install by downloading a .bin file from the Oracle website and installing it into /opt or /usr/local/. Or you could have a look at the  package from one enterprising Ubuntu user, Martin Wimpress.

Moving to OpenJDK

Instead of the fiddling with the Oracle version of Java, you could use this move as a good excuse to test drive your Java applications on OpenJDK which is currently available to install through the Ubuntu Software Centre.

I was concerned about moving over to OpenJDK at first until I realised that I had been using OpenJDK for everything for quite a while anyway.  In the last year I have been doing JIRA and Confluence plugin development, using Netbeans IDE and coding with Scala and Clojure all on OpenJDK 1.6 without any issues.  So is it time for us to move over to the OpenJDK platform for good?

In Summary

Its a funny feeling that moving to OpenJDK is not only what a huge commercial organisation wants but also a great boost for open source projects in general and of course the OpenJDK project itself.  The world has certainly changed in the last few years !!

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

Thats What I Call Visualisation... Black Holes

Trying to see the heart of our galaxy even though its black… thats a major task for any visualisation project. Not forgetting the huge amound of space and the sheer volume of data required if you were going to map the galaxy accurately. This kind of scope is what I think about when people start talking about “big data” analysis as it helps me determine how relatively big their big data project actually is.

Read More

Google Search Page Major Revamp

Google Search page has been around almost as long as I have on the Internet, which is too scary to think how long this actually is. The main search page has been kept the model of simplicity, both in terms of design and of usability. This simplicity has helped Google become iconic.

Whist there have been a long running stream of tweaks to the page, very little of this simple design has been changed. With Google now reaching out with their Chrome OS operating system on devices like the Asus Transformer Prime, the main search page is in for a bit of a major facelift.

I must confess that I do rely on Google for a lot of services, not just search but also email, calendars, blogging, websites, RSS reader and so on.. So I am very keen to see what changes are coming to the search page and other services.

From the information available so far, things are looking promising. The clean and simple look is going to be retained and a new Google bar and menu system will help you move quickly between the different services.

The current black Google bar is replace by this with a more subtle design. The Google logo will provide an application menu and although this requires an additional kick with the mouse, hopefully it will make the Google apps I use most frequently easier to select.

When this new year present from Google arrives I hope I will find it a welcome one. Check out the blog post and video on this change from Google itself.

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

Building Your Online Persona for Fun and Profit

There is an ever growing number of software developers in the world and a very limited number of rewarding jobs, so how do you make yourself noticed without killing yourself working crazy hours? 

Here are just a few ideas…

Social Coding… share your code

There is a steadily growing move away from the traditional HR route to getting a job, especially for those great jobs.  The most common approach seems to be scanning code repositories such as Github.

Its not surprising that one of the main skills an employer is looking for is good code, but how much code do you put on your CV?

Developers have seen the benefits of sharing their pet projects (it worked for Linus Torvald) and its a great way to show off not just your skills but also you interests.

I share the code I help create at coding dojos and those kind of events are a great way to show of your interest in learning something new.

Good employers also look for active committers on open source projects to understand the quality a developer can provide.  Working on an open source project is a demonstration of how well you can work in a team.  Not only showing code, but also helping other developers with problems and how they deal with the community of users around the project.

Get Linked In

LinkedIn is simple, its like your traditional online CV and a no-brainer to keep current so people can see your general history.  I also include any significant community involvement on my profile, to give a more complete picture.

Get social… learn to tweet effectively

I didnt get twitter at first, until I saw tools like Tweetdeck (a great startup success story in the UK) and Hootsuite. These tools allow you to filter out noise and turn twitter into an excellent research and communication tool.  If there is some great event happening, an interesting article to read, or a cool new project update, you can usually find it out first on twitter.

The other aspect to twitter is following interesting people - or as is more common, following interesting hash-tags - eg. #LJCJug for the London Java Community or #Clojure for discussions on the functional programming language.  Most technical events have a hash tag so you can give feedback and share the lessons learnt from those events.

Although many people share their blog posts by twitter, its not a complete replacement for for RSS feeds, rather it is a good way to find blogs that are worth reading and adding them to your feed reader (eg. Google Reader).

Twitter tools

Blogging - don’t forget to share your thoughts…

Your code does not tell the whole story, so why not share your thoughts, opinions and aspirations.  Having a blog is not about telling the world what they should be doing, but showing leadership in the discussion of worthy topics.

Rather than try starting language wars, interesting blogs are those that encourage you to improve and give you the tools to do so.  Have a look at the range of topics covered on the London Java Community blog aggregation site, agrity.

Blogging tools: blogger.com , wordpress.com

Update (May 2014): I have moved away from the classic blogging platforms to something lightweight and much easier to use. I now use Hexo.io to generate my blog and static websites and deploy them to Github Pages

Events… step away from the keyboard

Being part of a great technical community also includes events outside of the Internet and is a great way to build meaningful connections with people.

There are hundreds of amazing technical communities in the UK and I find it very rewarding (socially and financially) to be a part of many of them.

Meetup.com is a great tool for organising events and getting feedback from the community as to what kind of events to run.

Lanyrd is a social conference website where the community creates and manages events.  It allows you to pull together all the information around the conference too - such as videos of the events, presentation slides, speaker lists, etc.  Lanyrd is great for building up your speaker profile, when you get round to speaking at events :-)

Public speaking… interact with lightning talks & presentations

Talking to people shouldn’t be a scary thing, we are all human after all.  As with most things the more you practice speaking, the more confident you become.  Start with topics you are comfortable with and do small presentations eg. a 5 minute lightning talk.

Speaking at a community event is a great opportunity to talk to a friendly audience and get positive feedback.  Its easy to get lots of ideas on how you can continually improve.

An added bonus to speaking in public is that is makes speaking at an interview seem a great deal easier.  You will have more to talk about and will have explored many different ways to try explain things.

Event tools

Sometimes a blog is not enough

I’ve used Google sites as a great learning tool for myself and a simple way to share my learning experiences with others.  Whist a blog post series can help you learn, there is always a trade off with brevity.  A really long blog can quickly becomes irrelevant and dull (hopefully not this one).  However a well organised website allows you to find the relevant information you need quickly.

The websites I build also show the level of understanding I have gained and I always feel I have learnt more when I write down (and draw) what I have learnt.  As you build up the site, you have reference materials you can refer to from your blog posts, allowing you to keep those articles focused and interesting.

To support this blog I have therefore added an online persona section to my website.

Update (May 2014): I have moved away from the classic blogging platforms to something lightweight and much easier to use. I now use Hexo.io to generate my blog and static websites and deploy them to Github Pages

In Summary

By sharing a little of who you are and what you do, the basics of your personality, helps open up opportunities that you many not have otherwise had.

If you keep your online presence an honest reflection of yourself then its a great way to establish meaingful communication with the wider world.

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