28.11.08

i'm not the only one!

true, he's using we feel fine, and he's making them into nice little cards, but Brendan Dawes is looking for feelings online.



here's a little sketch of how he envisioned it working, originally planning to use stickers.



and these are some of the cards.



I like this idea, as it gives you a static and tactile way of holding onto the feelings that would otherwise be lost in time. My idea is quite different, as my piece is going to be as fleeting as the data on the internet, but it's answering the same basic problem: getting emotional data offline and displayed in another way.

pictures taken from his flickr feed.

project related rant.

I've been looking around various processing and arduino sites, trying to find a piece of work that is similar to my idea, and i'm not really finding it anywhere. It seems people are more interested in getting data or information from the real world into the virtual, instead of the other way round.

There are several reasons why i chose to do this project this way, and make myself this brief. One is that technology is constantly becoming more and more personal, with mobile phones and ever smaller laptops. I don't think the internet is going to stay on screen forever, i think there are alternative ways of displaying the information and i think it's going to try to integrate more into the real world.

The reason i chose twitter for this project as the website to bring into the real world and display in an alternative way is because it's a tool that quite a lot of people use. It's a tool that people use to communicate with each other and also with themselves:



This data that people update whenever they feel like expresses how they are feeling in that moment in time, or just what they're up to. But it just sits on a web page, or in their widget, or in a feed somewhere in the internet. this information that expresses their thoughts isn't being expressed in a very expressive way (too many expressives, i know).

The reason that i'm choosing to display this information in patterns is because i'm trying to get it away from a screen, i don't want to recreate a standard display. i want it to be visual as that's personally my favourite sense, and i want there to be a level of secrecy in what each pattern means as there is a level of deciphering that needs to be done in twitter, with all the leet speek and emoticons.

I admit that i do need to work on what words the program is looking for, but that just means trawling through the twitterverse to see what the most popular and most relevant phrases are.

I hope this finally gets people understanding what i'm trying to do. I'm finding it quite frustrating that no matter how many times i try to explain this, no body seems to get the point of it.

cool wearables



I want this coat. It seems pretty unassuming, but is actually a tool for people who crave personal space in crowded places or are just shy. Depending on how infringed the user feels, the coat emits the sound of a dog barking. It can be anything from a poodle's yap to a rottweilers bark. By Suzi Webster and Jordan Benwick.



This lovely little piece of jewelry is by Mouna Andraos. It displays the distance to a special physical place, such as your home, in relation to where you are now. It's designed to make the user feel more attached to a place that is important to them, and make the world seem a little smaller or bigger.



Jayne Wallace made this hand worn piece for her friend, as a symbol of her relationship with her homeland in Cyprus. A sensor in Cyprus detects when it rains and controls the piece which is in London. When a set amount of rain has been detected, the flower blossoms, letting the wearer feel connected to her homeland.



This piece was also made by Jayne Wallace, made for another friend. The piece contains various files which reflect the wearers memories, stories and dreams. The piece projects these files onto digital displays near the wearer, acting as a constant reminder.

27.11.08

the lilypad (omg)

The lilypad was developed by Leah Buckley and Sparkfun electronics. The aim of the project was to create a mass producible easy to program microprocessors to get a broad range of people experimenting with wearable technology.



This is the e-textile construction kit version 1.0, which introduced the idea of a construction kit for wearables. All the pieces were very square and bulky but show the basic idea.





Here are some soft version of the lilypad, which are more flexible than the mass producible version which i have, but couldn't be mass produced. The flexible version is made of conductive fabric, and the connections are made from conductive thread.

22.11.08

think i should explain it really...

my boobs lighting up actually has a communicative purpose.

each LED shows when a certain word is found in this twitter feed.



and here's the code controlling it all:

arduino code:


//getting it to keep one light lit up

int timer = 10000000; // The higher the number, the slower the timing.
int happy[] = { 5, 6,}; // an array of pin numbers
int sad[] = { 7, 8 };
int meh[] = { 9, 10 };
int love[] = { 11, 12 };
int fuming[] = { 13, 14 };
int num_pins = 10; // the number of pins (i.e. the length of the array)
int val;

void setup()
{
Serial.begin(9600);

int i;

for (i = 0; i < num_pins; i++) // the array elements are numbered from 0 to num_pins - 1
pinMode(happy[i], OUTPUT); // set each pin as an output
pinMode(sad[i], OUTPUT);
pinMode(meh[i], OUTPUT);
pinMode(love[i], OUTPUT);
pinMode(fuming[i], OUTPUT);
}

void loop()
{
int i;

if (Serial.available()) {
val = Serial.read();
if (val == 'A') {
digitalWrite(happy[i], HIGH);
}
else {
digitalWrite(happy[i], LOW);
}


if (val == 'B') {
digitalWrite(sad[i], HIGH);
}
else {
digitalWrite(sad[i], LOW);
}

if (val == 'C') {
digitalWrite(meh[i], HIGH);
}
else {
digitalWrite(meh[i], LOW);
}

if (val == 'D') {
digitalWrite(love[i], HIGH);
}
else {
digitalWrite(love[i], LOW);
}

if (val == 'E') {
digitalWrite(fuming[i], HIGH);
}
else {
digitalWrite(fuming[i], LOW);
}
}


}


and the processing code:


//finds a word, sends a signal to the lilypad then stops the loop.

import processing.serial.*;

Serial port;

String[] tokens; //array
int counter;

void setup() {
size(100, 100);

println(Serial.list());
port = new Serial(this,Serial.list()[0], 9600);

//load file and split up words
String[] lines = loadStrings("http://twitter.com/allemotional");
String allText = join(lines, " ");
tokens = splitTokens(allText, " ,.?!:;[]-");

}

//so it's now pulling in that sentence and splitting it up.

void draw() {
background(255);
fill(0);

String s = tokens[counter];
counter = (counter +1) % tokens.length;
//look at the words one at a time please



//is the word there?
if (s.equals("happy")) {
println("happy");
port.write('A');
noLoop(); //DON'T LOOP IT BAHBEE.


}

if (s.equals("sad")) {
println("sad");
port.write('B');
noLoop(); //DON'T LOOP IT BAHBEE.

}

if (s.equals("meh")) {
println("meh");
port.write('C');
noLoop(); //DON'T LOOP IT BAHBEE.

}

if (s.equals("love")) {
println("love");
port.write('D');
noLoop(); //DON'T LOOP IT BAHBEE.

}

if (s.equals("fuming")) {
println("fuming");
port.write('E');
noLoop(); //DON'T LOOP IT BAHBEE.

}

}


i need to think more about the words that i'm looking for, they really need to reflect what people say in twitter.

20.11.08

my boobs light up!

sheer awesome.



the mister approves.

this is what fail looks like.

trying to sign my processing app in terminal and failing miserably.

following this tutorial.



obviously i've blocked out my name and password because i don't want any of you hacking my mac, but that's what i'm trying to get working. but it wont. i don't know why.

why didn't i just do animation?

having to cheat in an ugly way

when / if i get this working, it will either be pure genius or horribly grotesque. Or simply not as efficient as i would like it to be.

Since the only thing that i've found that even points me slightly in the right direction on how to reset my processing app after it finds a word is this extremely uninformative thread in the processing forums, i think i'm going to have to cheat a bit.

Instead of getting the app to reset itself, i'm thinking of putting it in a web page that is set to refresh every few minutes, therefore refreshing the app.

hopefully.

the only problem with this is that since the app is being exported to a web page it needs to be signed, so it is allowed to access the lilypad. damn security restrictions on java apps!!!

This means i have to go into terminal and do some scripting on the java docs from there. SCARY. i haven't done any apple scripting on my mac (terrible, i know).

Although there is the redraw() function in processing, my problem is that my string of the twitter feed is pulled in inside the setup tag, which can only be loaded once. i've tried putting it inside the draw tag which can be loaded as many times as you feel like, but it isn't having it.

I'm also quite aware that we've got a crit tomorrow and what i have isn't that visually stunning. :/

14.11.08

looking at twitter

I've now got a piece of code that looks at a twitter feed and sends that information to an arduino board:

arduino code:

//getting it to keep one light lit up

int timer = 10000000; // The higher the number, the slower the timing.
int happy[] = { 6, 7,}; // an array of pin numbers
int spiffing[] = { 8, 9 };
int num_pins = 6; // the number of pins (i.e. the length of the array)
int val;

void setup()
{
Serial.begin(9600);

int i;

for (i = 0; i < num_pins; i++) // the array elements are numbered from 0 to num_pins - 1
pinMode(happy[i], OUTPUT); // set each pin as an output
pinMode(spiffing[i], OUTPUT);
}

void loop()
{
int i;

if (Serial.available()) {
val = Serial.read();
if (val == 'A') {
digitalWrite(happy[i], HIGH);
}
else {
digitalWrite(happy[i], LOW);
}


if (val == 'B') {
digitalWrite(spiffing[i], HIGH);
}
else {
digitalWrite(spiffing[i], LOW);
}
}
}


processing code:

//finds a word, sends a signal to the lilypad then stops the loop.

import processing.serial.*;

Serial port;

String[] tokens; //array
int counter;

void setup() {
size(100, 100);

println(Serial.list());
port = new Serial(this,Serial.list()[0], 9600);

//load file and split up words
String[] lines = loadStrings("http://twitter.com/allemotional");
String allText = join(lines, " ");
tokens = splitTokens(allText, " ,.?!:;[]-");

}

//so it's now pulling in that sentence and splitting it up.

void draw() {
background(255);
fill(0);

String s = tokens[counter];
counter = (counter +1) % tokens.length;
//look at the words one at a time please



//is the word there?
if (s.equals("happy")) {
println("happy");
port.write('A');
noLoop(); //DON'T LOOP IT BAHBEE.


}

if (s.equals("spiffing")) {
println("spiffing");
port.write('B');
noLoop(); //DON'T LOOP IT BAHBEE.

}

}


it's not perfect. i just need to sort out a way of getting the program to delay then restart after finding a word. That piece of code is eluding me at the moment.

13.11.08

the else function is a LIE.

but i have code that works the way i want it to, so i'm chuffed.

//the else function is a LIE. but the loop is working how i want it to, which is nice.

String[] tokens; //array
int counter;

void setup() {
size(100, 100);


//load file and split up words
String[] lines = loadStrings("words.txt");
String allText = join(lines, " ");
tokens = splitTokens(allText, " ,.?!:;[]-");

}

//so it's now pulling in that sentence and splitting it up.

void draw() {
background(255);
fill(0);

String s = tokens[counter];
counter = (counter +1) % tokens.length;
//look at the words one at a time please



//is the word there?
if (s.equals("happy")) {
println("happy");
noLoop(); //DON'T LOOP IT BAHBEE.

}

if (s.equals("spiffing")) {
println("spiffing");
noLoop(); //DON'T LOOP IT BAHBEE.

}

}

stalking allemotional:

i've created a new twitter account, called allemotional, to use with my processing program. All it says at the moment is that it's happy, but as i test out more and more words it'll soon build up. I've also used yahoo pipes to create a RSS feed of the twitter feed that processing likes. It didn't like the twitter RSS very much.

I'm working on Liams mini mac, it's freaking tiny!!!

7.11.08

it is actually finding cheese

in an RSS feed.

i made this code yesterday, but i didn't think it was finding cheese. i don't know if it was the server being dodgy or if i just didn't let it run long enough, but it is actually finding the word.


//Trying to get it recognizing words.
//Would be nice.

String[] tokens; //array
int counter;

void setup() {
size(100, 100);


//load file and split up words
String[] url = loadStrings("http://fionnualamurphy.blogspot.com/feeds/posts/default");
String allText = join(url, " ");
tokens = splitTokens(allText, " ,.?!:;[]-");

}

//so it's now pulling in that sentence and splitting it up.

void draw() {
background(255);
fill(0);

String s = tokens[counter];
counter = (counter +1) % tokens.length;
//look at the words one at a time please

//is the word there?
if (s.equals("cheese")) {
println("CHEESY!");
} else {
println("no cheese.");
}
}


// trying it out on a RSS feed. actually works!


i've spent most of my day messing around with XML, getting the program to look inside specific tags, which could hopefully speed the whole thing up if i get it working, but at least i have something that works!!!

6.11.08

playing..

with last years scripts....



cos it makes me feel like i know what i'm doing in processing.

still needs work.

it works...

with plain old fashioned .txt files, haven't got it working with streams or plain old HTML yet.



cheesy.

The document it's reading only contains three words, the only three words i could think of at the time: "pleh", "cheese", and "moo".

it found no cheese!!

After this it will now find cheese.
because i've typed in cheese.

The following code looks through my blog for the word cheese, and then prints the result.


//Trying to get it recognizing words.
//Would be nice.

HashMap words; //hashmap object

String[] tokens; //array
int counter;

PFont f;

void setup() {
size(500, 500);
words = new HashMap();

//load file and split up words
String[] lines = loadStrings("http://fionnualamurphy.blogspot.com/feeds/posts/default");
String allText = join(lines, " ");
tokens = splitTokens(allText, " ,.?!:;[]-");
f = createFont("Calibri-Bold", 36, true);
}

//so it's now pulling in that scentence and splitting it up. It's also going to show it in Calibri-Bold, size 36.

void draw() {
background(255);
fill(0);

String s = tokens[counter];
counter = (counter +1) % tokens.length;
//look at the words one at a time please

//is the word there?
if (words.containsKey("cheese")) {
System.out.println("CHEESY!");
} else {
System.out.println("no cheese.");
}
}


// IT FOUND NO CHEESE!! SUCCESS!


There was no cheese.



EDIT: doesn't work, i'm sad now.

EDIT: Got it working with a .txt file, just not an RSS feed.

getting somewhere....

I found some stuff on Daniel Shiffman's site about Bayesian Filtering, whilst i don't understand it completely i think it's what i've been looking for. Using Hashmaps you can search a document for words, and have the program state that it's found or how many times it's appeared etc. It's the system used to detect spam coming into your inbox.

I've found a relatively simple example in java, and a bit more complex version in Processing. i'm hoping to mush the two together to get a bit of code that works.