Jon McCormack

Jon McCormack

Jon McCormack is a researcher in computing and an internationally acclaimed electronic media artist. He is currently a research fellow in the Faculty of Information Technology at Monash University.

Location Monash University, Melbourne, Australia


  • Thanks Ian, we have updated the code and the text - the variable is called "numCircles" (previously "noCircles")

  • Hi Ian,
    You can always start from scratch if you have an idea you want to explore. For this course we have provided a number of starting points so you don't need to begin with a blank canvas all the time, but often it's fun to test an idea from the beginning. You can also take bits of code from other sketches to help build a more complete program. Learning to...

  • Hi Ben,
    The example was meant to be a simple process that explains "emergence" using phase shifted cycles - this is a common motif in art and music (look at/listen to the works of Bridget Riley and Steve Reich for example). Having knowledge of what "works" in art and music is really helpful when it comes to creative coding, we're going to look at this in more...

  • Thank you Fergus.
    Remember you can download the transcript and the slides used in the video if you need them.

  • Hi Csilla,
    A great book with chapters on art and autonomy is Margaret Boden's "Creativity and Art: Three Roads to Surprise", published by Oxford University Press in 2012.

    A simple introduction to some of the main philosophical issues in Artificial Intelligence can be found in "Introducing Artificial Intelligence" by Henry Brighton & Howard Selina, Icon...

  • And @Ian is absolutely correct - in my example the ++x changes the value of x, whereas in the first example it doesn't. So the y = ++x is equivalent to:
    x = x + 1;
    y = x;

    You can see why the ++ was invented as it allows you to do the same thing with much less typing.

  • Remember that you can always come back to this earlier material later in the course. You may find after more practice that it's worth reviewing this material again as a refresher.

    Also, its easy to test simple things in Processing by trying them out. For example you can type statements into a new sketch window without the setup() and draw() functions and...

  • If you're not sure about which to use, a good solution is to use the normal + operator:
    y = x + 1;
    This is easier to understand and does the same thing as:
    y = ++x;
    The only reason these 'double' operators are there is to reduce the amount of typing programmers need to do. They don't allow you to do anything you can't do using the regular + (or -, / * etc.)

  • Hi Judy,
    The server was down (too many page requests) - its back up now.


  • Thanks all, "express" should have been "expression" -- I've corrected it in the quiz.

  • Hi Michael, yes, version 2.0.3 should be ok for the code used in this course.

  • We'll post pictures here at the end of week 1

  • Hi everyone,
    Thanks very much for all your feedback and comments. We really appreciate them and will try to address any of the concerns people have expressed, particularly with regard to the time commitment for the course. We look forward to seeing you again in future creative coding courses.
    Best wishes and thanks for participating in the course,

    Jon and...

  • Hi Paul, do you mean the screen image in the left side?
    The rest of the page is black (or coloured) text on white.

  • You can see some more about the software William Latham used here in a recent talk:

  • Well spotted, thanks Mike. I've fixed the error.

  • Hi Penny,
    We tried to provide all the examples discussed, but there are copyright issues - however you can find any of them through google.

  • Thanks Linda! We'll fix it for the next release.

  • :-)

  • Yes, all the backgrounds are generated by Processing.

  • Thanks, fixed!

  • Thanks Jerome,
    I've updated the page.

  • Hi Jerome,
    Its certainly possible to use variable names with the same name as a function. Java can tell the difference by the way they are used.

    Whether its good programming practice or not is an interesting question. That probably depends on personal style. It's certainly worth knowing that you can do it, and also knowing why you might not want to do it too!

  • Thanks for the corrections, I've updated the page.

  • The reason is that toxi (Karsten Schmidt) got the code from a group in the demo scene, who had a poor implementation. This code has been sitting in Processing since the very first release.

    See line 5537 of the Processing source in Github:

    // [toxi 030901]
    // implementation by the german demo group farbrausch
    // as used in their demo "art":...

  • Thanks Eelco, I've corrected the typos.

  • Hi everyone, these 1 pixel cinema sketches are really great, congratulations to everyone who has posted their work and made it this far in the course. There's enough here for a 1 pixel film festival.

  • Yes please!

  • Hi David,
    The code for the noise function that produces both images is available. As explained in this step, the correct implementation is provided with the w4_06 sketch and is based on Ken Perlin's code. The processing implementation is available at:

    The issue with...

  • If you take a look at Tim Knowles' work you'll see that the tree drawings are part of a continuing exploration that examines our connection with the environment and the "random" processes that mediate between them. Its a beautiful connection between people, land and environment. See: for...

  • You should get a "Missing a pushMatrix() to go with that popMatrix()" error from Processing if you try popping before pushing.

  • ...continued
    Multiplying by sdTreeSize expands or contracts the standard deviation (width of the bell curve). In this case it is 2, so 99.7% of the values assigned to treeSize will be 10 +/- 6, so between 4 and 16, with an average of 10 using the values in the example code for this lesson step.

  • If you were to call randomGaussian() many times (like thousands of times) and add all the values returned together then divide by the number of times you called randomGaussian(), the result would be the average, which would be about 0. Try pasting this into Processing:

    int n = 1000;
    float total = 0.0;

    for (int i = 0; i < n; ++i)
    total +=...

  • Yes, this is the latest version.

  • Hi Liz,
    Yes, this is great, but unfortunately its not possible currently from within FutureLearn. Maybe in the future...

  • Hi Penny,
    The main point to understand here is how to use colour in Processing, using the colorMode() function. If you can specify colours using HSB and RGB, then that's great. If you have time you could try to implement one of the suggested improvements in the challenge, but if not, don't worry.

  • Thanks Neroli!

  • Unfortunately FutureLearn doesn't allow this feature.

  • Hi everyone,
    I've made some improvements to the readability of the code and updated the " (which you'll need to re-download to use the new version.

  • Hi Jerome,
    Thanks, yes we hear you! And thanks so much for all the help you've been providing to people doing the course. We really value everyone's feedback and will do our best to improve the course the next time it is run.

  • Thanks Leo, no chance of real explosions here

  • Sage advice!

  • There are no errors with the foldout now (as far as I know). If you downloaded it earlier in the course the sin and cos were the wrong way around. The current version is correct, so if in doubt just download it again.

    Unfortunately there's no way to make announcements within FutureLearn, however we'll let everyone know in the email for week 4 to re-download...

  • I think you want:
    if (bright > 4 && bright < 9) {
    // do something here if bright is greater than 4 and less than 9

  • Hi Mike,
    You can access the course indefinitely, so you can always come back at any time and pick up where you left off. There's no need to complete everything in 6 weeks if you don't want to.

  • Thanks, fixed.

  • Thanks Jerome, fixed now.

  • I've added more comments - you'll need to re-download the sketches in step 1.12 (

  • duh! Thanks, fixed (hopefully for the last time).

  • Quite right Lorraine, thanks! Fixed.

  • Well, nice to see a meeting of minds in art and science!

  • Hi folks,
    Sorry about this! I've fixed the foldout and the associated sketch to make things clearer. Yes, y increases going down, not up. This is a hangover from the early days of resizable windows where is was easier to fix the 0 point rather than having it change if you changed the vertical dimensions of the window.

  • Hi Richard,
    You're right there were a number of ambiguities in the sketch, so I've re-written it, making it clearer I hope (and also updated the foldout).

    To access the new version of the sketch you'll need to re-download the Creative Coding sketches from step 1.12 (

  • Its not so much a matter of where the rules come from (art school, other artists, the world at large) or who came up with them (people apart from Harold Cohen could teach AARON rules if Harold were to let them).

    Most (all?) recognised artists have a unique style (identity) that allows people to identify a work as belonging to them (one reason copies or...

  • So it did generate an emotional response then (dislike?)

  • Ah, well spotted, the second loop should say list!
    I've fixed it now, thanks.

  • The course material will be available to anyone who has signed up for it indefinitely, so you can work at your own pace - take your time if you need to.

  • Hi Leonard,
    The course will remain available indefinitely for anyone who has signed up for it, so you don't have to finish everything in 6 weeks - you can take as long as you need (even to 2015!) to work through the material.

  • Thanks all for your suggestions.

    Linda: we did think about having live code examples that you can play with and run within your browser (similar to khan academy or code academy) and highlighting what changes occur where, however the FutureLearn platform isn't capable of this yet. I appreciate your comments about showing a row of dots and leaving out code,...

  • Hi everyone,
    One thing to point out is that once you have signed up for the course you will be able to access it indefinitely. It won't disappear after 6 weeks. So if you are finding it is taking more time than you have each week you can always work at your own pace and do as much or as little as you have time for.

    If you're having difficulty with...

  • Hello everyone. Thank you for your feedback on the course so far. We appreciate that many people have found the programming aspects of the course can be quite difficult, and also that 3 hours per week may not necessarily be enough time, particularly if you're a beginner.

    We really appreciate your feedback and will try and improve things for the next...

  • Arrays are a special kind of variable that's used to store a collection of things and keep them together. The reason is so that you can deal with this collection as a single entity, rather than having to deal with each individual element all the time.

    So in the example the array stores different grey values for element that is being drawn. The main things...

  • If by not strict you mean you're allowed to make changes to then, then AARON certainly does that. It also "bends" the rules as well.

  • Check the folder that your sketch is in. You should see a file called "yourName.jpg".
    When you press 's' there is no feedback from Processing that it has saved anything, but it does save the current image in the directory that the sketch is in.

  • "Chopin created something new - the computer only emulated it."
    Chopin didn't create the Mazurka style. He copied it from an existing form (which has certain rules).

    It's not that the computer-created Mazurka was a perfect emulation or copy of Chopin's Mazurka. Many people thought (even musical experts) that it was a brand new Chopin Mazurka that had been...

  • All you really need to do is listen to the music :-).
    As you're listening, think about the music you're hearing - how does it make you feel...happy, sad, indifferent? What do you think the composer is communicating in the work? Maybe listen a couple of times, then take a look at the discussion on the next page.

  • For a long time paintings were considered far more authentic than photographs. And to some extent they still are, because painting has a much longer history than photography. Photography was also a catalyst for important changes to painting, because it made image making mechanically reproducible. This was quite liberating for painting since it no longer had to...

  • Kind of like learning from a teacher then? If you go to art school you learn rules and algorithms about how to make art, but when you finish you probably wouldn't consider yourself dependent on your teacher.

  • Hi Jerome and Patricia,
    Thanks for the feedback, we'll try and make this clearer in the next iteration of the course. Foldout sketches are always in the "Foldout Sketches" folder for the week, and they always have the title appended to the name (e.g. w3_01_Array_and_List). Also any pages for the course that have foldouts always mention the location of the...

  • The 4 arguments to rect() are
    x - x (horizontal) location of the top left corner
    y - y (vertical) location of the top left corner
    width - the width or the rectangle
    height - the height of the rectangle

    So rect(20,20,560,330) draw a rectangle of size 560 x 330 (w x h) with the top left corner 20 units across and 20 units down in the display window.

  • Nice work!

  • As many a slip twixt code and...foldout.

  • Yes, good point, we'll try and make it clearer in the next iteration of the course.

  • Yes, but that's important - parameter names for functions don't have to have the same name as the variables passed as arguments. Using the same name all the time might make you think that you have to use the same names for both all the time.

  • Yes, that's right. It doesn't hurt to include it so the intention is clear.

  • Thanks for spotting this - I've fixed it and uploaded the corrected version.

  • Like I said, this one is quite tricky! It actually looks more complex than it really is, and like the previous sketches for this week, it's just animating shapes that are drawn on a fixed grid. If you don't understand it completely don't worry too much - you can always come back to it later in the course if you want to. As Ted suggests, sometimes it helps to...

  • Yes, sorry that's a typo in the comment - it should say 30 times.
    Thanks for picking it up!

  • It should be inside the draw() function.

  • Hi Penny,
    You're on the right track but you need to make sure you generate a new random number each time around the loop. That is, move the "int n = (int) random(11);" inside the loop.

    You could even remove the in n bit and just say:

    if ((int)random(11) > 8) {

  • Jon McCormack replied to [Learner left FutureLearn]

    Thanks guys, I fixed it.

  • Thanks Kathleen, good point!

  • One subtle point: (float)x is a cast, float(x) is a function that converts x to a float. They effectively do the same thing, but the function call is slower. However, casting only works when there is what's called a defined promotion between two types. So

    String s = "3.14";
    println(float(s)); // this works, prints 3.14
    println( (float)s ); // won't run

  • Hi Richard,
    Thanks, yes, you're correct! margin should be the border around the grid of circles and gap is the interior space between them. I have uploaded a new version of the code, but to access it you'll need to download the Creative Coding Sketches zip file from week 1 again.
    Thanks for picking up on this.

  • Yes, x and y is the location of the ellipse, a is the width, b is the height. For (x,y) to be the centre, you need to have specified ellispeMode(CENTER) before calling the function.

    You can find the details in the processing reference:

  • There are 3 sketches in week 1, plus 1 in the "Foldout Sketches" folder.

  • Hi Anmol,
    Nice work! We'll be covering how to use images and textures in week 4.

  • Hi Peter,
    There was some detail about using fill and colour specification in the video in Week 1. If you need reference for any processing function just highlight the text, right-click and select "Find in Reference..." - you can also see all the Processing reference at:

  • Rather than framerate(0) you can say noLoop() in the setup function. That will only cause draw() to be called once.

    The reason why the sketch 'knows' how to adjust the speed is because the rotation of the clock hands is set by the millis() function, which returns the elapsed real time since the sketch began. Its a good idea to use this function if you want...

  • Have you checked inside the folder where the sketch is? saveFrame doesn't tell you anything when it saves. Also, as the frameRate is 1 you might need to hold down the s key momentarily.

    And thanks Jerome for all the excellent help you've been providing, its very generous of you!

  • The video has been corrected now.

  • There's no reason why you have to use the ++ style operators. They're whats referred to as "syntactic sugar" (the programming equivalent of eye candy I guess). They don't add any new functionality to the programming language, just convenience.

    So if you find them counterintuitive, don't use them for now. As you get more practiced you may find they become...

  • Hi Heather,
    Thanks for your comments and sorry to see you go! If you are finding all the coding too difficult there are still parts of the course you can do without the need for coding. These include the discussions and non-programming sections (such as What is Interactivity 2.8 - 2.10 this week, Creativity and computers 3.16-3.19 next week and so...

  • also you can use #### (hashes) which get replaced by the current frame number in the environment variable frameCount, eg:

  • Hi Eileen,
    You could optimise your brain function just a little for better efficiency :-)
    if (thirsty==true)
    speak("Yes", POSITIVE);
    speak("No", NEGATIVE);

    Assuming speak is a function that takes some words to say and a mood:

    void speak(String wordsToSay, Mood m) {
    This kind of algorithmic thinking will come in handy for week 3...

  • Yes, num is an integer (the number of rows and columns) but cellsize must be a float so the (float) cast forces the conversion. 5/2 (2 is an int) is different than 5/2.0 (2.0 is a float).
    cellsize needs to be a float because the sizes passed to the rect() function are floats.

  • Hi Nigel,
    Thanks for your feedback and sorry to hear you don't like the foldouts. We will try to address your concerns in the next iteration of the course. In the meantime, if you are using a pdf viewer you can enlarge them to any size for on-screen viewing.

  • Jon McCormack replied to [Learner left FutureLearn]

    Thanks David, I've updated the sketch.

  • ok, thanks for the feedback everyone, we'll try to make it clearer.

  • Quite right Stuart, I should have said evaluates to FALSE will cause the loop to exit. Apologies, we'll fix it for the next fun of the course.