Slow Messenger

© 2010 Julian. All rights reserved.

Slow Media Manifesto

“One might almost say that truth itself depends on the tempo, the patience and perseverance of lingering with the particular.” Via nettime and @bruces, we come across The Slow Media Manifesto, a 14 point statement capturing what slow media is … Continue reading

© 2010 Julian. All rights reserved.

Slow Down

It’s not often we’re found in print, but this happened when the magazine Good did its “Slow Issue”. Jennifer Leonard chatted with us one morning about our perspectives on the slow movement because of our work on the Slow Messenger … Continue reading

© 2010 Julian. All rights reserved.

The Week Ending 080110

Markings for repair or warnings to mitigate accidents? Seen in Seoul, South Korea. Whilst technically still on holiday, there were some things done as usual and *holiday* is never entirely just not doing nuthin’. There was a quick visit to … Continue reading

© 2007 Julian. All rights reserved.

SlowMessenger

Product Prototype: SlowMessenger Slow Messenger is an instant messaging device that delivers messages exceptionally slowly. Built into the device is a messaging technology that unfolds its content based on an interface that borrows from the traditions of long-form letter writing, … Continue reading

© 2007 Julian. All rights reserved.

Slow Messenger Prototype (II)

Slow Messenger

This is the second prototype hardware for the Slow Messenger project we’ve been working on. It’s slow going, naturally enough, probably the result of too many design projects for peculiar mobile devices going at once.

This prototype is using a small 96 x 64 pixel OLED display by 4D Systems and the idea is that you’d have your “instant” messages displayed over relatively long periods of time, and the more you carried the messaging device with you — the more you held it — the more of the message you would see. If you left the device by itself — thereby not really showing much commitment or affinity to the message — the longer it would take for the message to reveal itself.

The conceit of the project is to create a kind of “durable affinity” amongst the messaging participants. By coupling the message’s slow unfolding to a tangible object that the recipient must hold and carry around, the communication has a kind of interaction ritual that might be more intimate than punching little plastic squares while staring at a screen. Turning time, touch into a condition of affinity and commitment is the interaction ritual we are exploring.

The project is a “theory object” — not necessarily a product in the sense of something that could have a deep impact on the quarterly results of a large public company. It is meant to be a way to critique an aspect of digital networked interaction through a provocative designed object. Going beyond speculation to specification, design, fabrication, prototype experiences, iteration is significant. It creates something that helps me think about the questions that were initially raised in a day dream much, much more than only spinning the thoughts in my head and as writing on paper could ever possibly do. Constructing the device – taking the idea and making it artifact and then giving them to people to experience and provide their thoughts – is a crucial way to think about the questions and the larger problem of having sensible things to say about the near future of these sorts of interaction rituals.

Efficient, quick communication is a product of power-politics. In order to exert one’s influence geographically, it’s necessary to communicate one’s will over distances and do so in as little time and with as much efficiency as possible. Slow messaging just doesn’t make sense in that context. And that simple necessity has soaked through most of our forms of communicating, even when we are not particularly powerful. It just becomes an assumption that communication happens quickly – not because it cannot be any other way, but because it has become part of the unquestioned “DNA” of communication as a social practice.

But, as in most of our projects, we want to work from unconventional assumptions in order to see what the experiences of communication in a different “anti-” universe might be like. What can we learn about our existing social practices of communication – instant messaging, SMS, always-available styles of presence online – if we do an experiment where the assumption is the opposite. In this case, if we make communication much slower, what do we learn about new ways of relating and sharing with our friends and loved ones? We’re not necessarily assuming that this is the best way to communicate, for example. We’re not making a new product or something of this sort. It is very much an experiment in design as a way to answer some perplexing questions about the relationships we maintain through all these peculiar and compelling messaging systems.

Continue reading

© 2007 Julian. All rights reserved.

The World's Slowest Instant Messenger, Part II

Finally, something to show for this “Slow Messenger” project, a playful interface for instant messaging. I’ve gotten all the hardware bits cobbled together and most of the firmware. Now I’m working on learning how to tie in AOL Instant Messenger so that messages can be delivered to the device. Fortunately (I think) AOL has opened their API somewhat. You get some sort of key and then can create your own IM applications based on their protocol and network. I don’t know how well this works, but I suspect if it works well-enough, a preposterous projects like this should be able to make good use of it.

I found one little unexpected design glitch — the LED driver (MAX6953) and the EEPROM I’m using (AT24C1024) have the exact same ‘default’ I2C address (0×50). I stumbled across this while trying to debug why the EEPROM didn’t seem to work, even after an electrical test and crap. You can typically hard-wire the chip to take on one of another possible addresses. On the AT241024 you just wire the A1 pin to either GND or VCC and set the A1 bit of the device address either low or high. The MAX6953 has a similar deal, only a larger matrix of possible different addresses, probably because the chip will typically be found in systems with lots of MAX6953s ganged together to drive large LED displays. In my case, it’ll be easier to make some small hardware changes to the Slow Messenger display board than it’ll be to change the AT241024, which is on a generic Flavonoid board that I want to keep as identical as possible to the other one’s to make managing the firmware easier.

Strange, but I thought that I got closer to having the real-deal I’d understand more about why I’ve committed so much time to doing it. But, I’m no where near understanding why I’m doing it or what it means. This may be beyond the near future and somewhere from another planet.

I heard someone confuse the Near Future Laboratory with corporate R&D. Like, essentially assuming that what I was doing was stuff just around the bend that someone at some corporate lab or product design operation is probably better suited to develop. Whatev. The Near Future Laboratory is the other near future — the one no one in a corporate lab would really think about because the demands of commerce minimize risk, don’t even scratch their heads if the perceived market is too small, and only think about what can be realized to help make next year’s earnings look good. Just to clarify.

Technorati Tags: ,

Continue reading

© 2007 Julian. All rights reserved.

World's Slowest Instant Messenger

I’ve been fixated on a story my wandering mind told me many months ago about a little theory object that forced me to think about how the connected things in the era of IP networks always do their thing as fast as possible, approaching speeds that are imperceptible to normal humans. Almost without question, this is seen as a good thing. But I wondered what it would take to disrupt that assumption. How hard would the apparatus of connected things fight back? Would it be hard to write slow networked communications software? What is “slow” in the era of connected things? Can their be a slow instant messenger device?

I decided the best way to figure these questions all out was to sketch out what a super slow communications device might be, how it would operate, what it would create in terms of affect for those participating in the messaging, and what it could be “good” for.

Naturally enough, I ran up against all kinds of brick walls. Most people thought I had definitely gone completely misheggeneur. Why in the world would I want something that communicated really, really slow? Everything is supposed to be faster, quicker, more instant that last year’s instant. I mean, processor speeds keep flying through the roof. Broadband gets thicker and quicker. Rates go up when it comes to speed, not down. And I had no clear way to explain why I was drawn to this idea, other than trying to do the opposite of the dominant trend for the sake of seeing what other possibilities for connected digital networking there might be.

moleskine_4_111706_6

This may not be as weird an experiment as it sounds, particularly in an age where the Internet is splitting up into all kinds of tiers of service, with for-pay super high speed networks and bottom-tier, low-rent slow networks. Is it really safe to assume that we’ll always have fast networks available to us? Suppose you had to make a choice for economic reasons — you can send this E-FedEx for $43 and it’ll get there in 1200 milliseconds, or send it E-Postal for $3.19 and it’ll arrive sometime early next week, probably. I mean — it wouldn’t surprise me if this were a likely near-future world. It really wouldn’t.

So, how can slow be good? In my wandering mind I imagined a little device that slowly, very slowly, spilled a message out one letter at a time. Like a slow-scan signal from an interplanetary probe, feeding back a nice galactic photo over the course of 32 hours. Some of those messages might have a certain enjoyable anticipation to them — that’s a good thing..affect in messages where we’ve perhaps re-oriented our sense of affect for communication because we’ve been learning how to expect our communications faster or we expect less from our communication because most of the electronic kind gets all gummed up with crap and spam?

I’m also sort of speculating that this experiment might teach me more about how the “weight” of pre-digital interaction rituals can be re-invested with their pre-digital semantic heft even in the age of electronic mail. That is, can the momentum and weight (of time, of material things moving so as to make connections between people, of haptic/touch/proximity connections based on material coming in contact with things) imbue digital communications with something other than the transfer of information?

Boy, that’s out there. What I’m wondering is — what happens when I have to invest some material energy to get a message between (or from) someone and myself? That’s all this is — it takes three things to get the message going and finally delivered in its entirety.

1. Time, lots of it.

2. Commitment — the thing only works if I keep it close. If it’s off on its own, it slows down its delivery to glacial proportions.

3. Movement — I basically need to carry it with me wherever I go. And if I don’t go anywhere..if I sit at my computer all day, kind of like I did this entire afternoon and evening? That message just isn’t going to move anywhere.

At the end, perhaps a week or so, the message will start revealing itself, one character at a time.

Obviously, this is for the dedicated communicator, who enjoys the anticipation of a message from someone extra special.

Technorati Tags: , ,

Continue reading

© 2007 Julian. All rights reserved.

The Ersatz Cylon Detector: A Hardware Sketch To Illuminate The Inner Workings of the MAX6953 Integrated Circuit

Cylon Detector In Operation

An on-going project that requires the display of alphabetic and numeric characters using a 5×7 LED matrix turned me towards a chip by Maxim IC — the MAX6953. The chip, while expensive (~$8), has lots of built-in features that mitigate the damage to my purse, trading such in kind for time-saved. It will directly drive up to 4 5×7 LED matrices with direct control from a microcontroller over a two-wire interface (TWI/I2C), can manage varying intensities (16 or 32 degree scales), has a built-in Arial-like font set with a reasonably full-range of characters, diacritics and symbols, and allows me to create 24 characters of my own design.

SlowMessenger_Max6953_Breakout

SlowMessenger_Max6953_Breakout_Board

My first attempt at mucking with the chip used the DIP version, which is ginormous and requires such patience and diligence with wiring the thing up — all those lines going to the pins of the LED matrix — that I pretty much gave up after it didn’t work the first time. I decided that I’d just go ahead and design a PCB for the thing and continue to hone my skills with Eagle, while also learning how to work with the MAX6953.

Some Samples

I sent a design off, it came back, I stared at it for a few minutes, looked for the MAX6953′s in my bin of samples and realized I didn’t have any. I managed to coax a bunch from Maxim’s sample guy, which is great. (Thanks whoever you are, wherever you are.) A couple of weeks later, when my plate was relatively clear, I assembled one of the boards, using a yellowish/orange 5×7 matrix LED I purchased from Digikey and manufactured by LiteOn. I wanted small, but the closest I got to small was 0.7″, which still seems big to me. (The story of it’s assembly and problems therein is instructive if you’re curious about surface-mount PCB work..and the problems therein.)

I powered the thing up and, naturally enough, it didn’t illuminate at all. I poked through the spec sheet and figured out that there’s a whole start-up ritual you’ll want to go through, such as the test mode and negating the shutdown bit, which defaults to “shutdown enabled.” After an hour or so of puzzling, I managed to get it displaying characters while hooked up to my usual Arduino test harness thing.

Lower "T"

While I was assembling the board, I realized I wasn’t sure what the proper orientation of the LED device should be. I looked for markings to indicate pin 1 and found nothing definitive. I looked at the product data sheet and they had an arrow pointing at pin 1 but nothing that clearly told me how to determine which of the pins was the first. Now, the holes I put in for the LED device in Eagle were a bit snug — too snug, really. It required a bit of jiggering to get the LED device to fit. (I went back and made the holes slightly bigger in the design.) But, I realized this could be an advantage given my current pin alignment peril — the snugness would allow the LED device’s pins to make contact with the through-holes’ platings! In other words, I could fit the device one way and not solder the pins to see if I had the thing right-way-around.

Evil Rabbit Character

Well, that worked. A consequence of it working was that some of the columns and rows didn’t illuminate quite consistently — they’d flicker and such — and a mysterious character appeared — an evil rabbit was the first thing I saw.

I ran through a few code gyrations and got characters to show, right-way-around, so I went ahead and soldered the LED device permanently to the board, easy-peasy.

Thinking of a few possible ways to make this learning project fun to share for the show-and-tell session of the weekly luncheon I have with some friends, I decided that I’d make a combination Magic 8 Ball / Cylon Detector, the idea being that one could reasonably ask the Magic 8 Ball if one were a Cylon — I mean..why not? — which would be a lot easier than what Baltar was trying to construct, and wouldn’t require blood samples or anything. You could just ask yourself, in the privacy of your own home or a public restroom, and then choose whether or not you wanted to share your result.

So, I hooked it up to an accelerometer that detects the normative shaking motion one inflicts on the Magic 8 Ball..the evil rabbit then divines the response.

Anyway, it definitely works.

The Ersatz Cylon Detector is meant for entertainment purposes only. It does not purport to factually report whether or not individuals are Cylons, except for Don Milvio. (He’s definitely a weird hybrid Franco-Italian Cylon thing.) The results are for home amusement and cannot be used for discovery or detection of actual Cylons, their friends or family. The results cannot be used for legal purposes, nor as a sanction for physical violence. The Ersatz Cylon Detector and its results are not endorsed by the producers of Battlestar Galactica, The SciFi Channel, or its affiliates and their station managers.


Arduino Code

#include <Wire.h>
#include <math.h>

// http://wiring.org.co/reference/libraries/Wire/index.html
// On the Arduino board, Analog In 4 is SDA, Analog In 5 is SCL
// These correspond to pin 27 (PC4/ADC4/SDA) and pin 28 (PC5/ADC5/SCL) on the Atmega8
// The Wire class handles the TWI transactions, abstracting the nitty-gritty to make
// prototyping easy.
// This sketch has two TWI devices connected to it — a LIS3LV02DQ tri-axis accelerometer
// and the MAX6953 5x7 matrix LED driver. The MAX6953 is at address 0×50, and the LIS3LV02DQ is
// at address 0x1D.

char mAnswer_1[19] = {‘S’,‘i’,‘g’,‘n’,‘s’,‘ ‘,‘p’,‘o’,‘i’,‘n’,‘t’,‘ ‘,‘t’,‘o’,‘ ‘,‘y’,‘e’,‘s’,0×00};
char mAnswer_2[4] = {‘Y’,‘e’,‘s’,0×00};
char mAnswer_3[12] = {‘M’,‘o’,‘s’,‘t’,‘ ‘,‘l’,‘i’,‘k’,‘e’,‘l’,‘y’,0×00};
char mAnswer_4[16] = {‘W’,‘i’,‘t’,‘h’,‘o’,‘u’,‘t’,‘ ‘,‘a’,‘ ‘,‘d’,‘o’,‘u’,‘b’,‘t’,0×00};
char mAnswer_5{16] = {‘Y’,‘e’,‘s’,‘,’,‘ ‘,‘d’,‘e’,‘f’,‘i’,‘n’,‘i’,‘t’,‘e’,‘l’,‘y’,0×00};
char mAnswer_6[17] = {‘A’,‘s’,‘ ‘,‘I’,‘ ‘,‘s’,‘e’,‘e’,‘ ‘,‘i’,‘t’,‘,’,‘ ‘,‘y’,‘e’,‘s’,0×00};
char mAnswer_7[19] = {‘Y’,‘o’,‘u’,‘ ‘,‘m’,‘a’,‘y’,‘ ‘,‘r’,‘e’,‘l’,‘y’,‘ ‘,‘o’,‘n’,‘ ‘,‘i’,‘t’,0×00};
char mAnswer_8[13] = {‘O’,‘u’,‘t’,‘l’,‘o’,‘o’,‘k’,‘ ‘,‘g’,‘o’,‘o’,‘d’,0×00};
char mAnswer_9[14] = {‘I’,‘t’,‘ ‘,‘i’,‘s’,‘ ‘,‘c’,‘e’,‘r’,‘t’,‘a’,‘i’,‘n’,0×00};
char mAnswer_10[19] = {‘I’,‘t’,‘ ‘,‘i’,‘s’,‘ ‘,‘d’,‘e’,‘c’,‘i’,‘d’,‘e’,‘d’,‘l’,‘y’,‘ ‘,‘s’,‘o’,0×00};
char mAnswer_11[22] = {‘R’,‘e’,‘p’,‘l’,‘y’,‘ ‘,‘h’,‘a’,‘z’,‘y’,‘,’,‘ ‘,‘t’,‘r’,‘y’,‘ ‘,‘a’,‘g’,‘a’,‘i’,‘n’,0×00};
char mAnswer_12[24] = {‘B’,‘e’,‘t’,‘t’,‘e’,‘r’,‘ ‘,‘n’,‘o’,‘t’,‘ ‘,‘t’,‘e’,‘l’,‘l’,‘ ‘,‘y’,‘o’,‘u’,‘ ‘,‘n’,‘o’,‘w’,0×00};
char mAnswer_13[16] = {‘A’,‘s’,‘k’,‘ ‘,‘a’,‘g’,‘a’,‘i’,‘n’,‘ ‘,‘l’,‘a’,‘t’,‘e’,‘r’,0×00};
char mAnswer_14[26] = {‘C’,‘o’,‘n’,‘c’,‘e’,‘n’,‘t’,‘r’,‘a’,‘t’,‘e’,‘ ‘,‘a’,‘n’,‘d’,‘ ‘,‘a’,‘s’,‘k’,‘ ‘,‘a’,‘g’,‘a’,‘i’,‘n’,0×00};
char mAnswer_15[19] = {‘C’,‘a’,‘n’,‘n’,‘o’,‘t’,‘ ‘,‘p’,‘r’,‘e’,‘d’,‘i’,‘c’,‘t’,‘ ‘,‘n’,‘o’,‘w’,0×00};
char mAnswer_16[18] = {‘M’,‘y’,‘ ‘,‘s’,‘o’,‘u’,‘r’,‘c’,‘e’,‘s’,‘ ‘,‘s’,‘a’,‘y’,‘ ‘,‘n’,‘o’,0×00};
char mAnswer_17[14] = {‘V’,‘e’,‘r’,‘y’,‘ ‘,‘d’,‘o’,‘u’,‘b’,‘t’,‘f’,‘u’,‘l’,0×00};
char mAnswer_18[20] = {‘O’,‘u’,‘t’,‘l’,‘o’,‘o’,‘k’,‘ ‘,‘n’,‘o’,‘t’,‘ ‘,‘s’,‘o’,‘ ‘,‘g’,‘o’,‘o’,‘d’,0×00};
char mAnswer_19[18] = {‘D’,‘o’,‘n’,\’,‘t’,‘ ‘,‘c’,‘o’,‘u’,‘n’,‘t’,‘ ‘,‘o’,‘n’,‘ ‘,‘i’,‘t’,0×00};

void setup()
{

Serial.begin(9600);

CLKPR = (1<<CLKPCE);
CLKPR = 0;

// initialize the LIS3LV02DQ
Wire.begin(); // join i2c bus (address optional for master)
Wire.beginTransmission(0x1D);
Wire.send(0×20); // CTRL_REG1 (20h)
Wire.send(0×87); // Device on, 40hz, normal mode, all axiss enabled
Wire.endTransmission();

// initialize the MAX6953
Wire.beginTransmission(0×50);
Wire.send(0×07); // Display Test
Wire.send(0×00); // Normal Operation
Wire.endTransmission();

Wire.beginTransmission(0×50);
Wire.send(0×01); // Intensity16
Wire.send(0x0F); // Full
Wire.endTransmission();

Wire.beginTransmission(0×50);
Wire.send(0×04); // configuration register
Wire.send(0×01); // disable shutdown mode
Wire.endTransmission();
initializeSpecialCharacters();
}

void loop() {
int z_val, x_val, y_val;
int sum_sq, sum_sq_2, diff, mShake, message;
int max_accel;
byte i;

message = 0;

setCharacter(0×00);
delay(random(500,1000));
setCharacter(0×01);
delay(random(500,1500));

x_val = getX();
y_val = getY();
z_val = getZ();

sum_sq = sqrt(pow(x_val, 2) + pow(y_val, 2) + pow(z_val, 2));

delay(100);
x_val = getX();
y_val = getY();
z_val = getZ();
mShake = 0;
sum_sq_2 = sqrt(pow(x_val, 2) + pow(y_val, 2) + pow(z_val, 2));
diff = abs(sum_sq-sum_sq_2);
if(diff > 300) { mShake = 1; }
if(diff > 1000) { mShake = 2; }
if(diff > 1200) { mShake = 3; }

//Serial.print(diff); Serial.print(" "); Serial.print(max_accel); Serial.print(" "); Serial.println(mShake);

if(diff > max_accel) max_accel = diff;

//delay(500);

if(mShake > 0) {
message = random(0,18);
for(int i=0; i<3; i++) {
setCharacter(‘*’); delay(500); setCharacter(‘ ‘); delay(500);
}
} else {
message = -1;
}
switch(message) {
case 0:
i = 0;
while(mAnswer_1[i] != 0×00) {
setCharacter(mAnswer_1[i]); delay(800);
i++;
}
break;
case 1:
i = 0;
while(mAnswer_2[i] != 0×00) {
setCharacter(mAnswer_2[i]); delay(800);
i++;
}
case 2:
i = 0;
while(mAnswer_3[i] != 0×00) {
setCharacter(mAnswer_3[i]); delay(800);
i++;
}
break;
case 3:
i = 0;
while(mAnswer_4[i] != 0×00) {
setCharacter(mAnswer_4[i]); delay(800);
i++;
}
break;
case 4:
i = 0;
while(mAnswer_5[i] != 0×00) {
setCharacter(mAnswer_5[i]); delay(800);
i++;
}
break;
case 5:
i = 0;
while(mAnswer_5[i] != 0×00) {
setCharacter(mAnswer_5[i]); delay(800);
i++;
}
break;
case 6:
i = 0;
while(mAnswer_6[i] != 0×00) {
setCharacter(mAnswer_6[i]); delay(800);
i++;
}
break;
case 7:
i = 0;
while(mAnswer_7[i] != 0×00) {
setCharacter(mAnswer_7[i]); delay(800);
i++;
}
break;
case 8:
i = 0;
while(mAnswer_8[i] != 0×00) {
setCharacter(mAnswer_8[i]); delay(800);
i++;
}
break;
case 9:
i = 0;
while(mAnswer_9[i] != 0×00) {
setCharacter(mAnswer_9[i]); delay(800);
i++;
}
break;
case 10:
i = 0;
while(mAnswer_10[i] != 0×00) {
setCharacter(mAnswer_10[i]); delay(800);
i++;
}
break;
case 11:
i = 0;
while(mAnswer_11[i] != 0×00) {
setCharacter(mAnswer_11[i]); delay(800);
i++;
}
break;
case 12:
i = 0;
while(mAnswer_12[i] != 0×00) {
setCharacter(mAnswer_12[i]); delay(800);
i++;
}
break;
case 13:
i = 0;
while(mAnswer_13[i] != 0×00) {
setCharacter(mAnswer_13[i]); delay(800);
i++;
}
break;
case 14:
i = 0;
while(mAnswer_14[i] != 0×00) {
setCharacter(mAnswer_14[i]); delay(800);
i++;
}
break;
case 15:
i = 0;
while(mAnswer_15[i] != 0×00) {
setCharacter(mAnswer_15[i]); delay(800);
i++;
}
break;
case 16:
i = 0;
while(mAnswer_16[i] != 0×00) {
setCharacter(mAnswer_16[i]); delay(800);
i++;
}
break;
case 17
i = 0;
while(mAnswer_17[i] != 0×00) {
setCharacter(mAnswer_17[i]); delay(800);
i++;
}
break;
case 18:
i = 0;
while(mAnswer_18[i] != 0×00) {
setCharacter(mAnswer_18[i</fon Continue reading