Category Programming

Code a Week #4 Wittgenstein, my idol.

So this week completes somewhat my dive into processing, at least for a a little while. We salvaged working copies of Canon X-07, which understands the programming language of my childhood: BASIC! WUHUU!!!

Canon X-07

So I am going to be experimenting with that and sharing some results. I am also teaching two eTextile courses in the coming months and using Adafruits Gemma’s and Flora’s in then so some ATTiny code is following also. But here is Wittgenstein and vectors with force applied into them. The grey dot should be draggable, not sure if it works in the p5.js environment though.

show code

class Attractor {
float mass;
float G;
PVector location;
boolean dragging = false;
boolean rollover = false;
PVector dragOffset;
Attractor() {
location = new PVector(width/2,height/2);
mass = 20;
G = (second()/30);
dragOffset = new PVector(0.0,0.0);
}

PVector attract(Mover m) {
PVector force = PVector.sub(location,m.location);
float d = force.mag();
d = constrain(d,5.0,25.0);
force.normalize();
float strength = (G * mass * m.mass) / (d * d);
force.mult(strength);
return force;
}

void display() {
ellipseMode(CENTER);
noStroke();
if (dragging) fill (second()*4.25,50);
if (dragging) text("Knowledge is in the end based on acknowledgement.",350,mouseY+6);
else if (rollover) fill(240,40,40,200);
else fill(175,200);
ellipse(location.x,location.y,mass*2,mass*2);
}

void clicked(int mx, int my) {
float d = dist(mx,my,location.x,location.y);
if (d < mass) {
dragging = true;

dragOffset.x = location.x-mx;
dragOffset.y = location.y-my;

}
}

void hover(int mx, int my) {
float d = dist(mx,my,location.x,location.y);
if (d < mass) {
rollover = true;
text("One often makes a remark and only later sees how true it is.",mouseX-80,mouseY+50);

}
else {
rollover = false;
fill(255);
text("One often makes a remark and only later sees how true it is.",100,240);
}
}

void stopDragging() {
dragging = false;
fill(255);
text("Knowledge is in the end based on acknowledgement.",150,150);
}

void drag() {
if (dragging) {
location.x = mouseX + dragOffset.x;
location.y = mouseY + dragOffset.y;
}
}

}

class Mover {

PVector location;
PVector velocity;
PVector acceleration;
float mass;

Mover(float m, float x, float y) {
mass = m;
location = new PVector(x, y);
velocity = new PVector(1, 0);
acceleration = new PVector(0, 0);
}

void applyForce(PVector force) {
PVector f = PVector.div(force, mass);
acceleration.add(f);
}

void update() {
velocity.add(acceleration);
location.add(velocity);
acceleration.mult(0);
}

void display() {
noStroke();
fill(10,180,140,100);
ellipse(location.x, location.y, mass*25, mass*25);
}
}

Mover[] movers = new Mover[10];

Attractor a;

void setup() {
PFont myFont;
myFont = createFont("Georgia", 12);
textFont(myFont);
size(640, 360);
for (int i = 0; i < movers.length; i++) {
movers[i] = new Mover(random(0.1, 2), random(width), random(height));
}
a = new Attractor();
}

void draw() {
background(255);

a.display();
a.drag();
a.hover(mouseX, mouseY);

for (int i = 0; i < movers.length; i++) {
PVector force = a.attract(movers[i]);
movers[i].applyForce(force);

movers[i].update();
movers[i].display();
}
}

void mousePressed() {
a.clicked(mouseX, mouseY);
}

void mouseReleased() {
a.stopDragging();
}

Code a Week #3: More Wittgenstein

Again did not have very much time to code and after coding mostly in C for arduino etc. I do find Java & Javascript (the p5.js) to not really fit into my way of thinking. I do still enjoy it and this week I mostly ported the first week’s scipt into vectors. Inspired again (a lot) by Shiffmans Nature of Code-book. It is a recommendable book, if you have some background on programming and Object-oriented programming. Not the most clearly written, but fun. He has done a video tutorials also, which are a joy to watch. Anyway this weeks code might not work on mobile devices that well, as it does track your mouse position. But who knows if it miraculously detects your touch also… (Did not code that into it, altough p5.js has support for touch controls.) And it’s a one minute loop on the text part. So stick around for the finale..   Wittgenstein and certainty:

show code

void thought1(){ int m = second(); if (m >5 && m <25 ){ fill(0); text("I act with complete certainty. But this certainty is my own.",100,250); } else { fill(255); text("I act with complete certainty. But this certainty is my own.",100,250); } } void thought2(){ int m = second(); if (m >27 && m <55 ){ fill(0); text("At the core of all well-founded belief lies belief that is unfounded.",100,50); } else { fill(255); text("At the core of all well-founded belief lies belief that is unfounded.",100,50); } } class Mover { PVector location; PVector velocity; PVector acceleration; float topspeed; Mover() { location = new PVector(width/2, height/2); velocity = new PVector(0, 0); topspeed = 10; } void update() { acceleration = PVector.random2D(); acceleration.mult(random(2)); velocity.add(acceleration); velocity.limit(topspeed-int(random(10))); location.add(velocity); } void display() { fill(255,50); noStroke(); rect(0,0,640,360); fill(10); ellipse(location.x, location.y, 5, 5); } void checkEdges() { if (location.x > width) { location.x = 0; } else if (location.x < 0) { location.x = width; } if (location.y > height) { location.y = 0; } else if (location.y < 0) { location.y = height; } } } class Follower { PVector location2; PVector velocity2; PVector acceleration2; float topspeed2; Follower() { location2 = new PVector(random(width),random(height)); velocity2 = new PVector(0,0); topspeed2 = 4; } void update2() { PVector mouse = new PVector(mouseX,mouseY); PVector dir = PVector.sub(mouse,location2); dir.normalize(); dir.mult(0.5); acceleration2 = dir; velocity2.add(acceleration2); velocity2.limit(topspeed2); location2.add(velocity2); } void display2() { noStroke(); fill(255,0,0,100); ellipse(location2.x,location2.y,4,4); } void checkEdges2() { if (location2.x > width) { location2.x = 0; } else if (location2.x < 0) { location2.x = width; } if (location2.y > height) { location2.y = 0; } else if (location2.y < 0) { location2.y = height; } } } Mover mover; Follower[] follower = new Follower[20]; void setup() { PFont myFont; myFont = createFont("Georgia", 12); textFont(myFont); size(640,360); mover = new Mover(); for (int i = 0; i < follower.length; i++) { follower[i] = new Follower(); } background(255); } void draw() { thought1(); thought2(); mover.update(); mover.checkEdges(); mover.display(); for (int i = 0; i < follower.length; i++) { follower[i].update2(); follower[i].checkEdges2(); follower[i].display2(); } }[/p5js]

Ohjelmoinnin opetusta kouluissa

Tänä syksynä ohjelmoinnin opetus on ollut esillä mediassa useampaan otteeseen. Viimeisimpänä on uuden opetussuunnitelman luonnos, jossa ohjelmoinnin opetusta on nostettu esille. Tästä on noussut keskustelua* siitä mitä se ohjelmointi oikeastaan on ja miksi sitä pitäisi nyt kouluissa opettaa?  Keskustelusta inspiroituneena päätin kirjoittaa vapaamuotoisesti hieman omia ajatuksiani asiasta. Kysymystä ohjelmoinnin opetuksen tärkeydestä voidaan toki tarkastella usealta eri kannalta. Ehkä nopeiten mieleen tulee työelämän oma kanta ja suomalaisen peliteollisuuden tämänhetkinen noste: koulujen olisi hyvä opettaa ohjelmointia, jotta kykenisimme paremmin vastaamaan työelämän kasvaviin ohjelmoijatarpeisiin. Tämä näkemys on kuitenkin yksipuolinen ja melko kapea. Vaikka peliteollisuus Suomessa kasvaisikin tärkeäksi työllistäjäksi ei se ehkä yksinään riitä perustelemaan uuden oppiaineen syntyä. Ohjelmointia voidaan perustella sen ominaisuuksilla: se kasvattaa ongelmanratkaisutaitoja, loogista ajattelua, matemaattisia taitoja, taiteellisia taitoja ja jopa onnistuu näiden integroinnissa. Ei mikään pieni asia tämä. Varsinkin kun ohjelmointi yhdistetään fyysiseen maailmaan (esimerkiksi arduinon avulla, kuten vaikka Jouni Korhosen esimerkissä) ja otetaan mukaan peruskoulussa vielä käsityöt ja elektroniikka niin pääsemme ohjelmoimaan robotteja tai omia älyvaatteita. Voi kuulostaa ufoilulle, mutta on itseasiassa aivan mahdollinen ja realistinen projekti toteuttaa peruskoulussa. Omasta mielestäni silti tämäkään ei ole se tärkein asia miksi ohjelmointia pitäisi opettaa kouluissa. Asiaa kannattaisi katsoa kenties hieman laajemmasta näkökulmasta ja miettiä miten maailma jossa elämme toimii? – Herätessämme aamulla painamme kahvinkeittimemme napin päälle ja kahvinkeitin keittää meille aamukahvin, television kaukosäätimestä painamalla saamme television päälle, katsomme kenties tabletilta uutiset, sähköpostit, viestit, sään jne… Työmatkalla auto varoittaa että turvavyö ei ole päällä tai jos matkaamme bussilla bussikortti piippaa lukijassa merkiksi veloitetusta matkasta, työpaikan ovet avautuvat kortinlukijalla, kaupankassalla ostokset luetaan viivakoodinlukijalla… -listaa voisi jatkaa loputtomiin. Koko yhteiskuntamme toimii digitaalisen tekniikan varassa. Ja tulevaisuudessa vielä enemmän varsinkin, jos ,ja kun robotiikka alkaa korvaamaan yhä useampia ammatteja, samalla kun yhä useammat palvelut ovat automatisoituja tai toimivat osittain automatisoidusti. Yhteistä kaikelle tälle digitaaliselle tekniikalle on se että ne ovat luonteeltaan ohjelmoituja.  Kuinka nopeasti vesi tippuu kahvinkeittimessä, kuinka ärsyttävä on auton varoitusääni, miten hyvin sähköpostimme toimii jne… Digitaalinen tekniikka on ennalta jonkun päättämää ja määrittämää. Se että sähköpostimme asetusviidakko on käsittämätön, tai VR:n lippujärjestelmä ei toimi oikein ei edusta objektiivista totuutta vaan muutaman koodarin päätöksiä ja oletuksia. Näillä muutaman henkilön tekemillä päätöksillä on kuitenkin valtavia vaikutuksia jokapäiväiseen elämäämme. Tiedostamalla ohjelmoinnin kaikkiaallisuuden sekä sen ettei ohjelmointi ole arvovapaata tuo esille mielestäni ohjelmoinnin opetuksen tärkeimmän syyn: Digitaalisen tekniikan ohjelmoitu luonne tekee ohjelmointia ymmärtävistä ja ymmärtämättömistä eriarvoisia. Ja mitä enemmän siirrymme digitaaliseen yhteiskuntaan sitä suuremmaksi tuo eriarvoisuus syvenee. Ohjelmoinnin opetuksen tärkein elementti ei mielestäni siis ole se, että opetamme lapsistamme ohjelmoijia peliteollisuuteen, vaan se että opetamme heistä täysivertaisia digitaalisen ajan kansalaisia, jotka pystyvät ymmärtämään mitä heidän ympärillään tapahtuu. Sillä ilman tätä ymmärrystä heidän on vaikea vaatia muutosta tai kritisoida ympäristöä tai yhteiskuntaa.** Ohjelmoinnin opetusta voisi kenties kutsua ohjelmoinnin lukutaidon*** opetukseksi? Netissä: http://www.tietoviikko.fi/kaikki_uutiset/ministeri+ohjelmointi+tulee+peruskouluihin/ http://www.edutopia.org/blog/code-literacy-21st-century-requirement-douglas-rushkoff http://readwrite.com/2012/05/17/computer-programming-for-all-a-new-standard-of-literacy#awesm=~onF8LU3YF4gz5F  * Esimerkiksi Facebookin Tieto- ja Viestintätekniikka opetuksessa ryhmässä: https://www.facebook.com/groups/237930856866/# ** Tässä miellän opetuksen tehtäväksi sekä kasvattamaan yhteiskunnan jäseneksi, myös kasvattamaan oppilasta sellaiseksi jäseneksi, joa käystyy muokkamaan yhteiskuntaa ja osallistumaan yhteiskunnan kehitykseen tasavertaisena jäsenenä. Eli käsitykseni on kriittisen pedagogiikan peruja Henry Girouxin mukaan. (Ks. esim. Henry Giroux: On Critical Pedagogy) *** Ohjelmoinnin lukutaidon englanninkielistä termiä Code literacy käyttää ainakin mediateoreetikko Douglas Rushkoff, jonka hieman kärjistyneet tekstit ovat ihan ok luettavaa aiheeseen. Katso esimerkiksi: Program or be programmed, Ten Commands for a Digital Age. Käytännön esimerkkejä antaa esimerkiksi Libow Martinez & Stagerin kirja: Invent to Learn: Making, Tinkering and Engineering in the Classroom. Koodin vallasta kirjoitti ansioituneesti jo Lawrence Lessig kirjassaan Code and other Laws of Cyberspace. Mielenkiintoinen kirja edelleenkin!

Stop drawing fish

I recently watched Brett Victors talk from SF SIGGRAPh from 2012 where he talks about artists need to learn code, or to be more specific he argues that artists shouldn’t need to learn to code in order to take control of digital media. I found his ideas very insightful (As always, couldn’t recommend more to check out his other stuff too.) but still I tend to disagree with him on this. Below I write some reasons why. To really understand I suggest to watch the presentation before, it is well worth your time, if you are at all interested on what is happening in the digital arts at the moment.
Read More

My rant on digital creation

For the last five or so years I have extensively worked with digital media. My art works use digital technologies and I have taught digital technologies. In my day work I use computers for almost everything. I have to say that many things run very smoothly with digital technologies. Pictures, video, programming (naturally) -All this enables me to do-and create-  many things.

But…

Read More

Algorithmic creation: Unbearable thinnes of flatness?

I recently read Christopher Steiners: Automate This: How Algorithms Came to Rule Our World (2012) which is a good overview of how computer algorithms have become commonplace in most unusual places. 

Steiner starts his journey with the 2010 flash crash in Wall Street, when Dow Jones suddenly lost over trillion dollars of it’s value in one day. Which is by the far the largest single loss ever recorded. Reason for this loss was a bug in one of the automated trading algorithms. Steiner then expands to the history of algorithms and how they took over stock trading and how they are now taking over many other areas, like entertainment industry, medical and health care industry. Steiner’s book is a good introduction on algorithms and their importance in our lives. The book got me thinking about algorithms in culture creation, where they are also already utilized.

Read More

Ohjelmoitua taidettaProgrammed art

Ohjelmoitua taidetta

Tietotekniikka kattaa nykypäivänä yhä kasvavan osan elämämme alueista. Yhteiskunnastamme rakentuukin yhä enemmän tietotekniikan ja ohjelmistojen varaan. Tietotekniikka on ehkä suurin murros sitten kirjapainon keksimisen. Se on mahdollistanut yhteiskuntamme uudistumisen monella tavalla. Paradoksaalista on että tietotekniikan yhä yleistyessä ja vallatessa uusia osa-alueita elämästämme, me ymmärrämme yhä vähemmän miten tietotekniikka toimii. This post is only in Finnish, and is a copy of article I wrote for Stylus magazine (magazine for art educators in Finland) Read More

Wearable Electronics course final presentations

 

Electronics and sensors allow artists to create interactive smart garments that produce sound and images in reaction to movement. They sense and communicate with the environment and the user, and may react to them. In some cases the garment is in connection with the Internet and exchanges information based on the data it has measured.

As the term ‘wearable’ suggests, these interactive artworks are carried by the user and in bodily connection with him or her.

The Wearable Electronics course has been organised during autumn 2011 in collaboration between Aalto University School of Art and Design, and Muu Artists’ Association. The participants who come from a variety of backgrounds such as new media, costume design, textile design, fine art and performing arts have been encouraged to create their own visions of wearable technology. They have worked in teams to carry out their ideas based on the Arduino development platform.

Welcome to experience these six unique projects – to see them in use and even to try some of them on.

Place: Muu Gallery (Lönnrotinkatu 33, Helsinki) Time: Monday 5.12. at 17-19

Organised by Muu Artists’ Association and Aalto University

Teachers: Tomi Dufva and Jukka Hautamäki, and visiting teachers More about the course: http://wearable.mlog.taik.fi/

Lecture on eTextiles

Next monday, nicely after mayday you can come to a very interesting presentation by Meg Grant about wearable technology in Muu Gallery, Helsinki.  Presentation is a part of a bigger course on wearable electronics that I will be teaching with Jukka Hautamäki in coming fall. We will also shortly present the course, for more info about it look here.

On web 2.0, education and humanity

First

This is my quite informal and not so scientific text on the subject. More of a ideas and questions on this subject than a real essay, which I hope to do later on as a part of my graduation work from Univeristy of arts and crafts.

Second

I have been lately reading “Program or be programmed, ten commands for digital age”, “Life inc” by Douglas Rushkoff and “You are not a gadget, a manifesto” by Jaron Lanier which all are really great and very wise books which I wholeheartedly recommend to anyone or actually to everyone. But I do not mean to promote these books (I bought my copies btw.)but rather to first acknowledge that I might be a bit biased toward quite critical attitude on web 2.0 and on social media.

Read More