-
Programming with gates
Taeyoon introduced logic gates today and we played with an integrated circuit. The “bug” with the rounded notch on top brought back all these memories from high school where I soldered the IC on without knowing what they were. Now I know they are(or can be) simply a couple of NAND gates. We are, I think, in a weird uncanny valley between electric and electronic, where the ICs automate some of the work for us, but we still have to plug them into chunky breadboards.
Later some of us checked out the talk by Ellen Ulman, who was a programmer and author. She had really good insights on programming culture, as well as programming in our culture. She told the story about how programmers of the 60s were blamed for the Y2K “bug”
One of them was about the y2k ‘bug’. In the 90s, many critics blamed programmers for the ‘bug’ that they had introduced in the programs that was going to cost millions to fix.
he was angered by programmers being called “children that needed adult supervision”, and argued that programmers were optimizing for space. When I looked up articles describing that era, the response was not so clear, with some people arguging that programmers could have been more prepared.
She also talked about programming as an act of forgetting. This might be a fancier way of talking about abstraction, but I found it poetic anyhow. We never remember the programs we write, and it comes down to the magic number 7.
-
Recreating a work
The story here is written for an assignment for SFPC’s critical theory class. Here is the writing prompt:
“Imagine how a museum conservator would approach preserving your work for a show in 40 years. What issues would arise? There’s no such thing as too much science fiction, I think.”
The lights just went out. The lights don’t last forever in a place like this. But no matter, I have the world’s engineering knowledge in my head, and I can fix the lights.
The fuse is blown. I replace it. There had been attempts before me to find this ece left here in the 20s. Most of the time, they just looked at the walls for pictures, or ringing the objects that looked like they would make sound, in hopes for a melody. I was told perhaps, that it might be a primitive code, whose only task was to push colors to a flat screen.
The fix the rusted cables. The whole reason I’m talking through my process is because I’m supposed to leave some kind of audit trail. Audit trail, would you believe the nerve they have! Would they think I’m slacking off?
The lights turn on. My excitement is contrasted with the decaying shelves of books surrounding me. I had found an undiscovered room on this site, which others have missed. That should be no surprise, I was written to do this job. I grab a book, and it’s much thinner than it appears, oweing to the thick dust caking it.
After hours of reading, I begin putting some of the pieces together. The books describe the history of an ancient race. A theme keeps coming back again and again in these stories, that these people seem to repeat their mistakes over and over again. Forgetting. It’s like destroying memory, except unwilfully. Humans cannot help it, their hardware is made like that. But “unwillfully destroying” is a concept that I can only comprehend in theory. The words soon trail off into gibberish. I recognize the tell tale words and symbols in an ancient assembly language. Reciting this code could be quite harmful. I really should ask for permission, but the reception is really bad in here. My curiosity gets the better of me.
I read the first few words…and the lights go out. They don’t last forever in a place like this. But no matter, I have the world’s knowledge in my head, and I can fix the lights.
-
Programming languages

Today we talked about what programming languages do. They are supposed to help us get an idea that’s in our head out into the real world. It turns out that we’re pretty bad at describing what we actually want. All communication happens through manipulating the physical world, whether it’s vibrating the air around us, or changing the state of bits on a computer.
Ramsey mentioned many things both insightful and poetic, but one of the things that really struck me was how he mentioned that we think our tool, but we also become our tool. That is, repeated uses of a tool shapes our mind so that we become more fluent in it. This process could be called ‘learning the tool’, but that implies that there was a learner, a tool, and a delta of ‘learnt knowledge’. What Ramsey said, or at least what I think he said, was that the learner does not escape the learning unscathed. This is why it is important for us to create our own tools to think in. He made the case that most programming languages are accidents, and anyone can dream of their own programming language.
It brings to memory a John Maeda quote that says “If you do not like what is being drawn, draw something else. Never let the computer suppress your will to freely express”
-
Interesting Lissajous figures
These are some of the figures I discovered while trying to recreate John Whitney’s animations.
float time = ofGetElapsedTimef(); float x = center.x + r * cos(time * 1); float y = center.y + r * sin(time * 2);
float time = ofGetElapsedTimef(); float x = center.x + r * cos(time * 1); float y = center.y + r * sin(time * 3);
float time = ofGetElapsedTimef(); float x = center.x + r * cos(time * 1); float y = center.y + r * sin(time * 4);
float time = ofGetElapsedTimef(); float x = center.x + r * cos(time * 1); float y = center.y + r * sin(time * 5);
float time = ofGetElapsedTimef(); float x = center.x + r * cos(time * 2); float y = center.y + r * sin(time * 3);
float time = ofGetElapsedTimef(); float x = center.x + r * cos(time * 2); float y = center.y + r * sin(time * 5);
float time = ofGetElapsedTimef(); float x = center.x + r * cos(time * 4); float y = center.y + r * sin(time * 5);
By flipping sin and cos, we can essentially rotate the image. Note it’s similarity to the above.
float time = ofGetElapsedTimef(); float x = center.x + r * sin(time * 2); float y = center.y + r * cos(time * 5);
Adding starts to get interesting:
float time = ofGetElapsedTimef(); float x = center.x + r * (sin(time * 1) + sin(time * 1)); float y = center.y + r * (cos(time * 1) + sin(time * 2));
float time = ofGetElapsedTimef(); float x = center.x + r * (sin(time * 1) + sin(time * 3)); float y = center.y + r * (cos(time * 1) + sin(time * 2));
We picked up from Vera Molnar and explored John Whitney today, an artist working in the 60s to 70s that really started incorporating animation into his works. From the 1971 classic Matrix to 1975’s Arabesque(which has the wonderful soundtrack of Manoochehr Sadeghi), John Whitney pushed the boundaries of animation in film, building his own animation machines, repurposed from WW2 computers.
Zach talked a lot about sine and cosine and angles in relation to his work. It turns out that some of the visuals used in his work can be reproduced by using these two functions to trace lines accross the screen. For example, when using sin and cos to plot the x and y coordinates, we get a unit circle:
float time = ofGetElapsedTimef(); float x = center.x + r * cos(time * 1); float y = center.y + r * sin(time * 1);
Another interesting this is the pseudo 3d shapes that result when sin wave modulates the color components. The wavy like motion of this blob is decided by the using the sin wave to modulate the size and y position of the drawn circles.
float time = ofGetElapsedTimef(); for (int i = 0; i < 700; i++){ ofSetColor( 127 + 127 * sin(i * 0.01), 127 + 127 * sin(i * 0.041), 127 + 127 * sin(i * 0.022)); ofDrawCircle(200 + i, ofGetHeight()/2 + mouseX * sin(i*0.03 + time*1.4), 60 + 40 * sin(i*0.01 + time)); }
subscribe via RSS