Merge branch 'master' of git.xpub.nl:/var/www/git.xpub.nl/repos/tgc3

master
giulia 7 years ago
commit f37a26b3c0

Binary file not shown.

74
.gitignore vendored

@ -0,0 +1,74 @@
/*
!.gitignore
!/boot
/boot/*
!/boot/config.txt
!/etc
/etc/*
!/etc/apt/
/etc/apt/*
!/etc/apt/apt.conf.d/
/etc/apt/apt.conf.d/*
!/etc/apt/apt.conf.d/90norecommend
!/etc/asound.state
!/etc/default/
/etc/default/*
!/etc/default/hostapd
!/etc/dnsmasq.conf
!/etc/fstab
!/etc/group
!/etc/hostapd/
/etc/hostapd/*
!/etc/hostapd/hostapd.conf
!/etc/hostname
!/etc/modprobe.d/
/etc/modprobe.d/*
!/etc/modprobe.d/alsa-base.conf
!/etc/modules
!/etc/network/
/etc/network/*
!/etc/network/interfaces
!/etc/nginx/sites-available/
!/etc/rc.local
!/floppies/
#/floppies/*/
!/usr/
/usr/*
!/usr/local/
/usr/local/*
!/usr/local/lib/
/usr/local/lib/*
!/usr/local/lib/pd-externals/
!/usr/local/lib/python2.7/
!/usr/local/sbin/
/usr/local/sbin/*/
!/var/
/var/*
!/var/www/
/var/www/*
!/var/www/static/
/var/www/static/*
!/var/www/static/404-floppy-not-found.html
!/var/www/static/404-style.css
*.pyc
.DS_Store

@ -0,0 +1,2 @@
gpu_mem=16
start_x=1

@ -0,0 +1,2 @@
APT::Install-Recommends "0";
APT::Install-Suggests "0";

@ -0,0 +1,85 @@
state.Device {
control.1 {
iface PCM
name 'Playback Channel Map'
value.0 0
value.1 0
comment {
access read
type INTEGER
count 2
range '0 - 36'
}
}
control.2 {
iface PCM
name 'Capture Channel Map'
value 0
comment {
access read
type INTEGER
count 1
range '0 - 36'
}
}
control.3 {
iface MIXER
name 'PCM Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.4 {
iface MIXER
name 'PCM Playback Volume'
value.0 97
value.1 97
comment {
access 'read write'
type INTEGER
count 2
range '0 - 151'
dbmin -2837
dbmax -6
dbvalue.0 -1019
dbvalue.1 -1019
}
}
control.5 {
iface MIXER
name 'Mic Capture Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.6 {
iface MIXER
name 'Mic Capture Volume'
value 0
comment {
access 'read write'
type INTEGER
count 1
range '0 - 16'
dbmin 0
dbmax 2381
dbvalue.0 0
}
}
control.7 {
iface MIXER
name 'Auto Gain Control'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
}

@ -0,0 +1,20 @@
# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
DAEMON_CONF="/etc/hostapd/hostapd.conf"
# Additional daemon options to be appended to hostapd command:-
# -d show more debug messages (-dd for even more)
# -K include key data in debug messages
# -t include timestamps in some debug messages
#
# Note that -B (daemon mode) and -P (pidfile) options are automatically
# configured by the init.d script and must not be added to DAEMON_OPTS.
#
#DAEMON_OPTS=""

@ -0,0 +1,4 @@
interface=wlan0
dhcp-range=10.10.10.11,10.10.10.254,12h
address=/#/10.10.10.10
no-resolv

@ -0,0 +1,4 @@
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 errors=remount-ro,noatime,nodiratime,commit=120 0 1
/dev/sda /media/floppy vfat noauto
tmpfs /tmp tmpfs defaults,nodev,nosuid 0 0

@ -0,0 +1,50 @@
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
sudo:x:27:
audio:x:29:www-data
dip:x:30:
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
input:x:101:
systemd-journal:x:102:
systemd-timesync:x:103:
systemd-network:x:104:
systemd-resolve:x:105:
systemd-bus-proxy:x:106:
crontab:x:107:
messagebus:x:108:
ntp:x:109:
netdev:x:110:
ssh:x:111:

@ -0,0 +1,6 @@
interface=wlan0
driver=nl80211
ssid=TGC #3
hw_mode=g
channel=6

@ -0,0 +1 @@
TGC3

@ -0,0 +1,2 @@
options snd-usb-audio index=0
options snd_bcm2835 index=1

@ -0,0 +1,7 @@
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
#snd-bcm2835
snd-pcm-oss

@ -0,0 +1,10 @@
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet static
address 10.10.10.10
netmask 255.255.255.0

@ -2,7 +2,6 @@ server {
listen 80 default_server;
listen [::]:80 default_server;
#root /var/www/html;
root /media/floppy/noweb;
# Add index.php to the list if you are using PHP
@ -10,9 +9,11 @@ server {
server_name _;
error_page 404 /insert.html;
location = /insert.html {
error_page 404 /404-floppy-not-found.html;
add_header Cache-Control no-cache;
location = /404-floppy-not-found.html {
root /var/www/static;
internal;
}

@ -0,0 +1,27 @@
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# TGC #3
# first line is just to buy some time to avoid text mixing up with other messages
echo "" | toilet -f ascii12 -w 100 --metal > /dev/console
echo "TETRA\nGAMMA\nCIRCULAIRE\n #3" | toilet -f ascii12 -w 100 --metal > /dev/console
/usr/bin/printf "\033[0;31m`/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{ print $2 }' | awk -F: '{ print $2 }'` \033[0m\n" > /dev/console
echo "" > /dev/console
# Restore audio levels
alsactl --file /etc/asound.state restore
# Magnum Innominandum!!!!!!!!!
/usr/local/sbin/thewhispererindarkness.sh > /dev/console &
exit 0

@ -0,0 +1,5 @@
Copyright 2017 Kimmy Spreeuwenberg
You may do anything with this work that copyright law would normally
restrict, so long as you retain this license in all redistributed
copies and derived works. There is no warranty.

@ -0,0 +1,11 @@
Author: Kimmy Spreeuwenberg
Date: 2017
Title: Rest
Description:
Make a silence.
“There is no such thing as an empty space or an empty time.
There is always something to see, something to hear. In fact,
try as we may to make a silence, we cannot.”
(John Cage, Silence: Lectures and Writings)

@ -1,8 +1,7 @@
#N canvas 280 23 912 793 10;
#N canvas 166 23 912 793 10;
#X obj 98 109 adc~;
#X obj 167 267 tabwrite~ noise;
#X obj 98 131 +~;
#X obj 143 205 /~ 2;
#X msg 209 208 bang;
#X obj 214 136 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
@ -15,10 +14,10 @@
#X coords 0 1 88200 -1 200 140 1 0 0;
#X restore 428 114 graph;
#X obj 313 193 env~;
#X floatatom 325 233 5 0 0 0 - - -, f 5;
#X floatatom 369 228 5 0 0 0 - - -, f 5;
#X obj 161 302 phasor~ 0.5;
#X obj 172 564 +~;
#X floatatom 291 263 5 0 0 0 - - -, f 5;
#X obj 175 525 +~;
#X floatatom 306 267 5 0 0 0 - - -, f 5;
#X obj 132 240 *~;
#X obj 274 322 line~;
#X obj 393 306 env~;
@ -38,97 +37,99 @@
#X obj 742 417 sel 1;
#X obj 211 658 delwrite~ fd 4000;
#X msg 379 442 1800;
#X obj 580 368 > 60;
#X obj 534 370 <= 60;
#X obj 500 368 > 55;
#X obj 454 370 <= 55;
#X obj 420 368 > 50;
#X obj 379 369 <= 50;
#X obj 742 369 > 75;
#X obj 698 370 <= 75;
#X obj 663 370 > 65;
#X obj 614 370 <= 65;
#X obj 318 523 vd~ fd 100;
#X obj 299 39 loadbang;
#X msg 299 68 \; pd dsp 1;
#X obj 98 176 *~ 1;
#X obj 98 151 lop~ 1000;
#X msg 274 300 \$1 40;
#X obj 660 623 pack f f;
#X obj 649 658 print;
#X obj 284 238 >= 80;
#X obj 173 564 /~ 2;
#X obj 98 151 lop~ 2500;
#X msg 422 442 1830;
#X msg 744 442 1900;
#X msg 502 442 1830;
#X msg 582 442 1850;
#X msg 422 442 1810;
#X msg 664 442 1880;
#X obj 318 549 *~ 0.7;
#X msg 664 442 1875;
#X msg 582 442 1865;
#X msg 502 442 1850;
#X obj 742 369 > 90;
#X obj 698 370 <= 90;
#X obj 663 370 > 80;
#X obj 614 370 <= 80;
#X obj 580 368 > 70;
#X obj 534 370 <= 70;
#X obj 500 368 > 60;
#X obj 454 370 <= 60;
#X obj 273 269 &&;
#X msg 274 300 \$1 40;
#X obj 271 238 > 60;
#X obj 98 176 *~ 20;
#X obj 324 238 <= 80;
#X obj 318 523 vd~ fd 200;
#X obj 288 552 *~ 0.95;
#X connect 0 0 2 0;
#X connect 0 1 2 1;
#X connect 2 0 48 0;
#X connect 4 0 1 0;
#X connect 5 0 9 0;
#X connect 6 0 14 0;
#X connect 8 0 6 0;
#X connect 9 0 1 0;
#X connect 11 0 12 0;
#X connect 11 0 51 0;
#X connect 11 0 53 0;
#X connect 13 0 8 0;
#X connect 14 0 33 0;
#X connect 14 0 7 0;
#X connect 14 0 7 1;
#X connect 14 0 18 0;
#X connect 16 0 1 0;
#X connect 17 0 16 1;
#X connect 18 0 20 0;
#X connect 18 0 35 0;
#X connect 18 0 36 0;
#X connect 18 0 37 0;
#X connect 18 0 38 0;
#X connect 18 0 39 0;
#X connect 18 0 40 0;
#X connect 18 0 41 0;
#X connect 18 0 42 0;
#X connect 18 0 43 0;
#X connect 18 0 44 0;
#X connect 18 0 51 1;
#X connect 19 0 45 0;
#X connect 21 0 31 0;
#X connect 22 0 34 0;
#X connect 23 0 57 0;
#X connect 24 0 23 0;
#X connect 25 0 55 0;
#X connect 26 0 25 0;
#X connect 27 0 56 0;
#X connect 28 0 27 0;
#X connect 29 0 58 0;
#X connect 30 0 29 0;
#X connect 31 0 19 0;
#X connect 32 0 54 0;
#X connect 34 0 31 0;
#X connect 35 0 28 0;
#X connect 36 0 26 1;
#X connect 37 0 26 0;
#X connect 38 0 24 1;
#X connect 39 0 24 0;
#X connect 40 0 22 0;
#X connect 41 0 32 0;
#X connect 42 0 30 1;
#X connect 2 0 39 0;
#X connect 3 0 1 0;
#X connect 4 0 8 0;
#X connect 5 0 13 0;
#X connect 7 0 5 0;
#X connect 8 0 1 0;
#X connect 10 0 11 0;
#X connect 10 0 55 0;
#X connect 10 0 57 0;
#X connect 12 0 7 0;
#X connect 13 0 38 0;
#X connect 15 0 1 0;
#X connect 16 0 15 1;
#X connect 17 0 19 0;
#X connect 17 0 34 0;
#X connect 17 0 35 0;
#X connect 17 0 45 0;
#X connect 17 0 46 0;
#X connect 17 0 47 0;
#X connect 17 0 48 0;
#X connect 17 0 49 0;
#X connect 17 0 50 0;
#X connect 17 0 51 0;
#X connect 17 0 52 0;
#X connect 18 0 58 0;
#X connect 20 0 30 0;
#X connect 21 0 33 0;
#X connect 22 0 40 0;
#X connect 23 0 22 0;
#X connect 24 0 44 0;
#X connect 25 0 24 0;
#X connect 26 0 43 0;
#X connect 27 0 26 0;
#X connect 28 0 42 0;
#X connect 29 0 28 0;
#X connect 30 0 18 0;
#X connect 31 0 41 0;
#X connect 33 0 30 0;
#X connect 34 0 23 0;
#X connect 35 0 21 0;
#X connect 36 0 37 0;
#X connect 36 0 8 0;
#X connect 38 0 6 0;
#X connect 38 0 6 1;
#X connect 38 0 32 0;
#X connect 38 0 17 0;
#X connect 39 0 56 0;
#X connect 40 0 30 0;
#X connect 41 0 30 0;
#X connect 42 0 30 0;
#X connect 43 0 30 0;
#X connect 44 0 28 1;
#X connect 45 0 59 0;
#X connect 46 0 47 0;
#X connect 46 0 9 0;
#X connect 48 0 11 0;
#X connect 48 0 16 0;
#X connect 50 0 17 0;
#X connect 51 0 52 0;
#X connect 53 0 15 0;
#X connect 53 0 50 0;
#X connect 54 0 31 0;
#X connect 55 0 31 0;
#X connect 56 0 31 0;
#X connect 57 0 31 0;
#X connect 58 0 31 0;
#X connect 59 0 14 1;
#X connect 44 0 30 0;
#X connect 45 0 31 0;
#X connect 46 0 29 1;
#X connect 47 0 29 0;
#X connect 48 0 27 1;
#X connect 49 0 27 0;
#X connect 50 0 25 1;
#X connect 51 0 25 0;
#X connect 52 0 23 1;
#X connect 53 0 54 0;
#X connect 54 0 16 0;
#X connect 55 0 14 0;
#X connect 55 0 53 0;
#X connect 56 0 10 0;
#X connect 56 0 15 0;
#X connect 57 0 53 1;
#X connect 58 0 59 0;
#X connect 59 0 13 1;

File diff suppressed because it is too large Load Diff

@ -0,0 +1,5 @@
Copyright <2017> <a_cAt> <http://www.aaaaa.cat>
You may do anything with this work that copyright law would normally
restrict. There is no warranty. Anyway, we are going to die.
Free yourself!

@ -0,0 +1,9 @@
Author: Clàudia Giralt Monedero, a_cAt
Date: 2017
Title: The fine line
Description:
“The fine line between everything matters and nothing matters”
The idea of this project is to represent this line digitally and sonorously, and let the audience play with it. seeking balance and breaking it. Harmonious sounds and the disruption of those. Experiencing how close from each other opposites can be.

Binary file not shown.

@ -4,10 +4,10 @@
<script language="javascript" type="text/javascript" src="libraries/p5.js"></script>
<script language="javascript" type="text/javascript" src="libraries/p5.min.js"></script>
<!-- uncomment lines below to include extra p5 libraries -->
<script language="javascript" src="libraries/p5.dom.js"></script>
<script language="javascript" src="libraries/p5.sound.js"></script>
<script language="javascript" src="libraries/p5.dom.min.js"></script>
<script language="javascript" src="libraries/p5.sound.min.js"></script>
<script language="javascript" type="text/javascript" src="sketch.js"></script>
<!-- this line removes any default padding and style. you might only need one of these values set. -->
<style> body {padding: 0; margin: 0;} </style>

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

@ -2,16 +2,20 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<title>The fine line - Explanation of the project</title>
<title>The fine line - Presentation of the fine line</title>
</head>
<body>
<div id="canvasp5"></div>
<div id="wrap">
<div id="wrap" style="line-height: 2;">
</div>
<p>This is a conceptual project based on a reflection around the sentence “The <b>FINE LINE</b> between <b>NOTHING MATTERS</b> and <b>EVERYTHING MATTERS</b>”. It took me a while to figure out how to translate this sentence into something. At the beginning, everything had to make perfect sense and had to have a reason to be. Among mind maps, research, crazy complicated ideas, and loads of thought, it became obvious that the concept was being explored from an “EVERYTHING MATTERS” perspective. Half of the sentence, “<b>NOTHING MATTERS</b>”, was being left behind. But, how to make a project based on meaninglessness? Suddenly, it clicked: <b>ANYWAY, WE ARE GOING TO DIE.</b> This sentence vanished all meaning this project could have, placing myself to the other side of the line. And then a process began: my mind tried to <b>MAKE SENSE</b> of everything saying words like: “If everyone thought this way, society would be aimless”. Then, on propose, I jumped to the other side: “Yes whatever, even though, we are going to die”. Quickly my mind tried to fix it again with other excuses in order to find meaning. And rushing, again on purpose, I shifted the side. It happened several times. I could feel the <b>TENSION</b>, the <b>POLARITIES</b>, the <b>OPPOSITION</b>: I was feeling the line between everything matters and nothing matters. </p>
<p style="margin-bottom:30px;">The idea of this project is to represent this line digitally and sonorously, and let the audience play with it. <b>SEEKING BALANCE AND BREAKING IT</b>. <b>HARMONIOUS</b> sounds and the <b>DISRUPTION</b> of those. Experiencing how close from each other <b>OPPOSITES</b> can be. </p>
<ul><a href="../fine-line/index.html" style="font-size:30px">EXPLORE THE LINE</a></ul>
</div>
</body>
</html>

@ -4,9 +4,9 @@
<link rel="stylesheet" type="text/css" href="style.css">
<script language="javascript" type="text/javascript" src="libraries/p5.js"></script>
<script language="javascript" src="libraries/p5.dom.js"></script>
<script language="javascript" src="libraries/p5.sound.js"></script>
<script language="javascript" type="text/javascript" src="../fine-line/libraries/p5.min.js"></script>
<script language="javascript" src="../fine-line/libraries/p5.dom.min.js"></script>
<script language="javascript" src="../fine-line/libraries/p5.sound.min.js"></script>
<script language="javascript" type="text/javascript" src="sketch.js"></script>
<title>The fine line</title>
@ -14,6 +14,7 @@
<body>
<div id="canvasp5"></div>
<div id="wrap">
@ -24,10 +25,10 @@
<div class="links">
<li>
<ul><a href="">Existencialism and Spirituality</a></ul>
<ul><a href="">Explanation of the project</a></ul>
<ul><a href="">Score to find the line</a></ul>
<ul><a href="../fine-line/index.html">The fine line</a></ul>
<!--<ul><a href="essay.html">Existencialism and Spirituality</a></ul>-->
<ul><a href="explanation.html">Presentation of the line</a></ul>
<!--<ul><a href="score.html">Score to find the line</a></ul>-->
<ul><a href="../fine-line/index.html" style="font-size:30px">THE FINE LINE</a></ul>
</li>

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,112 @@
var carrier; // this is the carrierillator we will hear
var modulator; // this carrierillator will modulate the amplitude of the carrier
var fft; // we'll visualize the waveform
var opac;
var carrier;
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
function setup() {
var myCanvas = createCanvas(innerWidth,100);
myCanvas.parent("canvasp5");
noFill();
//SETING FIRST OSCILLATOR: CARRIER
// EXPLANATION FROM WEBSITE: The carrier is typically set at an audible frequency (i.e. 440 Hz) and connected to master output by default. The carrier.amp is set to zero because we will have the modulator control its amplitude.
var randomnumb = getRandomArbitrary(0, 20);
console.log(randomnumb);
carrier = new p5.Oscillator(); // connects to master output by default
carrier.freq(200 + randomnumb); // it sets the frequency of the carrier. AN AUDIBLE ONE.
carrier.amp(1);
// carrier's amp is 0 by default, giving our modulator total control
carrier.start();
// create an fft to analyze the audio
//an FFT (fast Fourier transform) converts a signal from its original domain (often time or space) to a representation in the frequency domain and vice versa
fft = new p5.FFT();
}
function draw() {
var modAmp= 1;
// si el mouseY és igual o el mateix que la meitat de l'altura, fes aixo. ((DEFINEIX LA AMPLITUD.))
/* if(mouseY <= height) {
var modAmp = map(mouseY, 0, height, 0.01, 2.02);
}else{
var modAmp = map(mouseY, height, 0, 0.01, 2.02);
}
*/
carrier.amp(modAmp, 0.01); // fade time of 0.1 for smooth fading
// analyze the waveform
waveform = fft.waveform();
background(255,255,255,50); // alpha
// draw the shape of the waveform
drawWaveform();
}
function drawWaveform() {
stroke(0,0,0,100);
strokeWeight(0.5);
beginShape();
for (var i = 0; i<waveform.length; i++){
var x = map(i, 0, (waveform.length)/8, 0, width/2);
var y = map((waveform[i])/8, -1, 1, height/2, -height/2);
vertex(x, y + 100);
}
endShape();
}

@ -17,7 +17,7 @@ function getRandomArbitrary(min, max) {
function setup() {
var myCanvas = createCanvas(innerWidth,200);
var myCanvas = createCanvas(innerWidth,100);
myCanvas.parent("canvasp5");

@ -5,6 +5,7 @@
body{
font-family: 'FjallaOne', sans-serif;
margin: 0;
}
@ -19,6 +20,14 @@ h1{
font-size: 70px;
}
a{
text-decoration: none;
color:black;
}
#wrap{
@ -34,7 +43,7 @@ font-size: 70px;
padding-top: 300px;
width:200px;
margin:auto;
text-align: left;
/*text-align: left;*/
}
@ -52,6 +61,12 @@ position:absolute;
}
.explanation p{
margin-bottom: 300px;
}
/* Smartphones (portrait) ----------- */

@ -1 +1,8 @@
FLOPPYLEFT - 2017
MOTIONS - 2017
Copyright <2017> <FRANCISCO GONZALEZ>
You may do anything with this work that copyright law would normally
restrict, so long as you retain the above notice(s) and this license
in all redistributed copies and derived works. There is no warranty.

@ -1,7 +1,27 @@
Author: Slavoj Žižek
Date: 1989
Title: The Sublime Object of Floppy
Author: Francisco González
Date: 2017
Title: Motions
Description:
And so on, and so on, and so on.
This experiment analyses and measures data from peoples motion and explores how we humans become an extension of technology, adapting ourselves to immaterial environments by seeking information-control, performing sounds.
CONCEPT
Technology is providing us new ways to shape our perception of space, while at the same time it is transforming our bodies into gadgets. This is not only changing our spatial awareness but its also extending our senses beyond given nature. Moreover, control systems that regulate and command specific behaviours can be very practical tools to improve physical functionalities or translate its data. For instance, this experiment employs “Optical Flow” sensor which detects motion from image objects between frames, and “Open Sound Control (OSC)” which enables to exchange and format data from different devices, for instance, from Python to Puredata. Although the unique possibilities to improving human physical or cognitive limitations by plugging a body to an electronic or mechanical device are yet very hypothetical and might extend beyond our imagination, nevertheless technology is continuously transforming the abstract or fictional conception of “cybernetics” to a more realistic evidence. The communication between both automated and living systems is continuously evolving, upgrading and rising up more sophisticated engineered tools that might enable us to increase our knowledge, morphing our perception through deeper experiences.
In this experiment, the potential for controlling data through motion on space while becoming independent of physicality, opens up new creative and pragmatic alternatives for facing both technological and communication constraints.
BODY
This body analyses human motion on space and detects it using “Opitcal Flow” in “Python”, using a series of predesigned multidirectional interpreters. These interpreters are made up of a series of points (intersections), forming a grid which intersects with movement. This is detected in form of numeric values, which are automatically transmitted and formatted to a graphic array in Puredata.
This array arrange these values and generates a polygonal waveform based on these received coordinates (which numbers ranges between "x", having values from 0 to 10, and "y" from -1 to 1). This activates an “oscillator” object which defines the frequency of the tone, together with “metro” object, which time spans its duration in miliseconds, consequently iterating the audio (re-writting it in the display).
The intersections and the graphic array (together with the entire Puredata patch) become an interactive notation system, while people become the instrument/tool that triggers it.
WORK PROGRESS
By exploring the connection between motion and sound, experiments have been performed through different software and tools, which has substantially strengthen the following additional material in this project. For instance, Kinect sensor and Synapse, which receives input data from Kinect and sends it out to Ableton or Max MSP, have been tested out. Similarly, motion detection was together explored with “color detection” in Puredata, which brought up more interesting alternatives. Sound recording and feedback loop was further tested with this method, though mechanically it was hardly accurate. Finally with “Optical Flow”, this work was reconfigured with a wider sense for interacting with data.

Binary file not shown.

@ -1,16 +1,9 @@
#N canvas 136 23 897 545 10;
#X floatatom 166 153 5 0 0 0 - - -;
#X floatatom 282 159 5 0 0 0 - - -;
#X obj 54 -92 tgl 15 0 empty empty empty 17 7 0 10 -262130 -1 -1 1
1;
#X msg 54 -54 \; pd dsp \$1;
#X obj 267 -7 OSC/unpackOSC;
#X obj 267 -46 iemnet/udpreceive 9001;
#X obj 267 33 OSC/routeOSC /dot;
#N canvas 143 176 897 545 10;
#X floatatom 166 153 5 0 0 0 - - -, f 5;
#X floatatom 282 159 5 0 0 0 - - -, f 5;
#X obj 190 121 unpack f f;
#N canvas 0 22 450 278 (subpatch) 0;
#X array waveform 11 float 1;
#A 0 -1 -1 -1 -1 -1 -1 -1 -0.333333 0 0.333333 -1;
#N canvas 0 50 450 278 (subpatch) 0;
#X array waveform 11 float 0;
#X coords 0 1 10 -1 200 140 1 0 0;
#X restore 494 188 graph;
#X obj 224 247 tabwrite waveform;
@ -21,11 +14,11 @@
#X obj 488 116 tabread waveform;
#X obj 543 23 + 1;
#X obj 505 21 i;
#X obj 504 -39 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
#X obj 504 -39 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X msg 534 78 0;
#X floatatom 483 72 5 0 0 0 - - -;
#X floatatom 424 254 5 0 0 0 - - -;
#X floatatom 483 72 5 0 0 0 - - -, f 5;
#X floatatom 424 254 5 0 0 0 - - -, f 5;
#X obj 535 54 select 10;
#X obj 204 325 *~ 10;
#X obj 416 207 + 1;
@ -34,33 +27,39 @@
#X obj 364 370 line~;
#X msg 364 342 \$1 10;
#X obj 337 295 expr 100 + (100 * $f1);
#X connect 2 0 3 0;
#X connect 4 0 6 0;
#X connect 5 0 4 0;
#X connect 6 0 7 0;
#X connect 7 0 0 0;
#X connect 7 0 10 0;
#X connect 7 1 1 0;
#X connect 7 1 11 1;
#X connect 10 0 11 0;
#X connect 10 1 9 1;
#X obj 267 -45 udpreceive 9001;
#X obj 267 -6 unpackOSC;
#X obj 267 33 routeOSC /dot;
#X obj 111 -112 loadbang;
#X msg 54 -54 \; pd dsp 1;
#X connect 2 0 0 0;
#X connect 2 0 5 0;
#X connect 2 1 1 0;
#X connect 2 1 6 1;
#X connect 5 0 6 0;
#X connect 5 1 4 1;
#X connect 6 0 4 0;
#X connect 7 0 8 0;
#X connect 7 0 8 1;
#X connect 9 0 18 0;
#X connect 10 0 11 1;
#X connect 11 0 10 0;
#X connect 11 0 14 0;
#X connect 11 0 9 0;
#X connect 12 0 13 0;
#X connect 12 0 13 1;
#X connect 14 0 23 0;
#X connect 15 0 16 1;
#X connect 16 0 15 0;
#X connect 16 0 19 0;
#X connect 16 0 14 0;
#X connect 16 0 21 0;
#X connect 17 0 24 0;
#X connect 18 0 16 1;
#X connect 21 0 18 0;
#X connect 22 0 12 0;
#X connect 11 0 16 0;
#X connect 12 0 19 0;
#X connect 13 0 11 1;
#X connect 16 0 13 0;
#X connect 17 0 7 0;
#X connect 18 0 15 0;
#X connect 18 0 23 0;
#X connect 19 0 11 0;
#X connect 20 0 17 0;
#X connect 22 0 21 0;
#X connect 23 0 22 0;
#X connect 23 0 20 0;
#X connect 23 0 28 0;
#X connect 24 0 16 0;
#X connect 25 0 22 0;
#X connect 27 0 26 0;
#X connect 28 0 27 0;
#X connect 28 0 25 0;
#X connect 24 0 25 0;
#X connect 25 0 26 0;
#X connect 26 0 2 0;
#X connect 27 0 28 0;
#X connect 27 0 19 0;

@ -1,7 +1,8 @@
#!/usr/bin/env python
from __future__ import print_function
import numpy as np
import cv2, math
import cv2, math, sys
# import video
from picamera.array import PiRGBArray
from picamera import PiCamera
@ -10,7 +11,8 @@ import OSC
# from pythonosc import udp_client
import time
# MESSAGES NEED TO GO TO STDERR
print ("1.HELLO FROM PYTHON stderr", file=sys.stderr)
# def draw_flow(img, flow, step=4): # size grid
# h, w = img.shape[:2]
# y, x = np.mgrid[step/2:h:step, step/2:w:step].reshape(2,-1)
@ -45,7 +47,7 @@ def send_flow0(img, flow, step=4): # size grid
dy = y2 - y1
m = int(math.sqrt( (dx*dx) + (dy*dy) ))
if m>2:
print ("dot", (normx, normy))
print ("dot", (normx, normy), file=sys.stderr)
msg = OSC.OSCMessage()
msg.setAddress("/dot")
#msg.append(dx)
@ -53,62 +55,71 @@ def send_flow0(img, flow, step=4): # size grid
#msg.append(m)
msg.append(normx)
msg.append(normy)
client.send(msg)
try:
client.send(msg)
except OSC.OSCClientError:
print ("Unable to send OSC", file=sys.stderr)
# client.send_message("/franc", m)
flines = np.int32(flines)
cv2.polylines(vis, flines, 0, (0, 40, 255)) # BGR
for (x1, y1), (x2, y2) in flines:
cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
return vis
# flines = np.int32(flines)
# cv2.polylines(vis, flines, 0, (0, 40, 255)) # BGR
# for (x1, y1), (x2, y2) in flines:
# cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
# return vis
flines = np.int32(flines)
cv2.polylines(vis, flines, 0, (0, 40, 255)) # BGR
for (x1, y1), (x2, y2) in flines:
cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
return vis
# flines = np.int32(flines)
# cv2.polylines(vis, flines, 0, (0, 40, 255)) # BGR
# for (x1, y1), (x2, y2) in flines:
# cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
# return vis
# cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
if __name__ == '__main__':
import sys
print help_message
try: fn = sys.argv[1]
except: fn = 0
#data="hello"
# client = udp_client.SimpleUDPClient("127.0.0.1", 9001)
# connect camera
# cam = video.create_capture("0:size=160x120") #canvas size in pixels
print ("Starting camera", file=sys.stderr)
cam = PiCamera()
framesize = (160, 120)
camera.resolution = framesize
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=framesize)
framesize = (160, 128)
cam.resolution = framesize
cam.framerate = 32
rawCapture = PiRGBArray(cam, size=framesize)
# allow the camera to warmup
time.sleep(0.25)
print ("Starting main camera loop", file=sys.stderr)
# connect to pd
# Init OSC
client = OSC.OSCClient()
client.connect(('127.0.0.1', 9001)) # first argument is the IP of the host, second argument is the port to use
while True:
try:
client = OSC.OSCClient()
client.connect(('127.0.0.1', 9001)) # first argument is the IP of the host, second argument is the port to use
break
except OSC.OSCClientError:
print ("Unable to connect via OSC to pd, trying again in 5", file=sys.stderr)
time.sleep(5)
prevgray = None
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
for frame in cam.capture_continuous(rawCapture, format="bgr", use_video_port=True):
# while True:
# print "GRAB FRAME"
img = frame.array
# ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0)
if prevgray != None:
flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0)
send_flow0(gray, flow)
prevgray = gray
# clear the stream in preparation for the next frame
rawCapture.truncate(0)
# cv2.imshow('flow', send_flow0(gray, flow))
# cv2.imshow('flow', )
#ch = 0xFF & cv2.waitKey(5)
#if ch == 27:

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

@ -0,0 +1,308 @@
<style>
/* add my font? */
body{
/* font */
color: black; /* font color */
font-size: 17pt;
font-family: Times,
line-height: 15px;
letter-spacing: 0.7px;
margin-left: 0px;
margin-right: 0px;
margin-top: 0px;
padding: 0px;
}
/* Responsive scaling */
h1 {
font-size: calc(2.4vW + 2.4vH);
text-align: center;
font-weight: normal;
}
h2 {
font-size: calc(0.8vW + 0.8vH);
font-weight: normal;
}
#container {
display: flex;
}
iframe {
border: 0px;
width: 30vW;
height: 60vH;
}
/* Text & image links*/
a { color: blue; text-decoration: none;
padding-bottom: 0.00em;
border-bottom: 0em rgba(255, 255, 255, 0.31);
}
a:visited {
color: blue; }
a:hover {
text-decoration: underline; }
a.image-link,
a.icon-link,
a.image-link:hover,
a.icon-link:hover
{ border-bottom: 0; padding-bottom: 0; }
div#noise-image {
margin-top: 0px;
text-align: center;
background: transparent;
position: absolute;
}
.container {
background-color: #e6ffe6;
background-image: url(noise.gif);
background-blend-mode: multiply;
}
div#header {
margin-top: 98px;
margin-left: 230px;
margin-right: 230px;
line-height: 47px;
font-size: 54px;
font-family: Times;
letter-spacing: 0pt;
color: black;
background: transparent;
position: absolute;
}
div#links {
margin-top: 40px;
margin-right: 0px;
margin-left: 1025px;
font-size: 14px;
font-family: Courier;
letter-spacing: 0px;
line-height: 12pt;
text-align: right;
color: blue;
text-decoration: underline;
background: transparent;
position: fixed;
}
div#buttons {
margin-top: 40px;
margin-left: 60px;
font-size: 14px;
font-family: Courier;
letter-spacing: 0px;
line-height: 12pt;
text-align: left;
color: black;
background: transparent;
position: fixed;
}
div#title {
margin-top: 40px;
margin-left: 550px;
font-size: 14px;
font-family: Times;
letter-spacing: 1pt;
text-align: center;
color: blue;
background: transparent;
position: fixed;
}
div#concept {
margin-top: 495px;
margin-left: 51px;
font-size: 18px;
font-family: Courier;
letter-spacing: 0pt;
text-align: left;
color: black;
background: transparent;
border: 1px solid black;
border-collapse: collapse;
position: absolute;
}
div#body {
margin-top: 495px;
margin-left: 684px;
font-size: 18px;
font-family: Courier;
letter-spacing: 0pt;
text-align: left;
color: black;
border: 1px solid black;
border-collapse: collapse;
background: transparent;
position: absolute;
}
div#samples {
margin-top: 1160px;
margin-left: 51px;
font-size: 18px;
font-family: Courier;
letter-spacing: 0pt;
text-align: left;
color: black;
border: 1px solid black;
border-collapse: collapse;
background: transparent;
position: absolute;
}
.mobile.icon {
color: blue;
position: fixed;
margin-left: 16px;
margin-top: 210px;
width: 12px;
height: 19px;
border-radius: 2px;
border: solid 1px currentColor;
}
.mobile.icon:before {
content: '';
position: absolute;
left: 5px;
top: 1px;
width: 2px;
height: 1px;
background-color: currentColor;
}
.mobile.icon:after {
content: '';
position: absolute;
bottom: 1px;
left: 5px;
height: 2px;
width: 2px;
border-radius: 50%;
background-color: currentColor;
}
.tablet.icon {
color: blue;
position: fixed;
margin-left: 15px;
margin-top: 240px;
width: 15px;
height: 17px;
border-radius: 2px;
border: solid 1px currentColor;
}
.tablet.icon:before {
content: '';
position: absolute;
top: 1px;
left: 0;
height: 13px;
width: 15px;
border-top: solid 1px currentColor;
border-bottom: solid 1px currentColor;
}
.tablet.icon:after {
content: '';
position: absolute;
bottom: 0px;
left: 6px;
width: 3px;
height: 1px;
background-color: currentColor;
}
.laptop.icon {
color: blue;
position: fixed;
margin-left: 16px;
margin-top: 269px;
width: 12px;
height: 8px;
border-radius: 2px;
border: solid 1px currentColor;
}
.laptop.icon:before {
content: '';
position: absolute;
left: -4px;
bottom: -5px;
width: 18px;
height: 1px;
border-radius: 0 0 2px 2px;
border: solid 1px currentColor;
}
div#rotate {
transform: rotate(270deg);
color: blue;
font-family: Courier;
font-size: 12px;
text-decoration: underline;
margin-left: 1150px;
margin-top: 225px;
position: fixed;
background: transparent;
/* Safari */
-webkit-transform: rotate(-90deg);
/* Firefox */
-moz-transform: rotate(-90deg);
/* IE */
-ms-transform: rotate(-90deg);
/* Opera */
-o-transform: rotate(-90deg);
/* Internet Explorer */
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
}
</style>

Binary file not shown.

@ -1,12 +1,6 @@
#!/usr/bin/env python
import os, random, time
while True:
freq = str(random.randint(0,10)*110)
print(freq)
os.system('echo "'+freq+';" | pdsend 3000')
time.sleep(0.25)
import subprocess
subprocess.call(["mpv", "inthemood.mp3", "--loop", "inf", "--volume", "25"], cwd="/media/floppy")

@ -7,17 +7,17 @@ import subprocess
f = cgi.FieldStorage()
p = f.getvalue("p", "Bump.mp3")
p = os.path.join("voice", p)
out = subprocess.check_output(["mplayer", p], stderr=subprocess.STDOUT)
out = subprocess.check_output(["mpv", p], cwd="/media/floppy/noweb", stderr=subprocess.STDOUT)
# print "Location: /pushingscore-Karina.html"
# print "Location: /index.html"
# print
print "Content-type:text/html; charset=utf-8"
print
print """<html>
<head>
<meta http-equiv="refresh" content="0;url=/pushingscore-Karina.html" />
<meta http-equiv="refresh" content="0;url=/index.html" />
</head>
<body>
</body>
</html>"""
</html>"""

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2,.cls-3{fill:none;stroke-miterlimit:10;stroke-width:4px;}.cls-2{stroke:#2e3192;}.cls-3{stroke:#c1272d;}</style></defs><title>choreology-Bump</title><g id="_1_Basic_Turn-2" data-name="1 Basic Turn"><rect class="cls-1" width="150" height="150"/><polyline id="A2_basic_turn" data-name="A2 basic turn" class="cls-2" points="17.48 48.21 32.95 61 71 61"/><path id="A2_basic_turn-2" data-name="A2 basic turn" class="cls-3" d="M17.75,100.64l15-12.74,42.37,2.43s6,0.25,6,6-6,6-6,6-6-.21-6-6,6-6,6-6l42.31-2.47L132.5,75.07"/></g></svg>

After

Width:  |  Height:  |  Size: 658 B

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2,.cls-4{fill:none;stroke-miterlimit:10;stroke-width:4px;}.cls-2{stroke:#c1272d;}.cls-3{fill:#c1272d;}.cls-4{stroke:#2e3192;}.cls-5{fill:#2e3192;}</style></defs><title>choreology-Bump</title><g id="_10_Chicken_Walks-2" data-name="10 Chicken Walks"><rect class="cls-1" width="150" height="150"/><path id="A2_basic_turn" data-name="A2 basic turn" class="cls-2" d="M75.05,132.5l12.82-15L90.3,75s0.25-6,6-6,6,6,6,6-0.21,6-6,6-6-6-6-6L87.83,32.61,75,17.5"/><circle class="cls-3" cx="88.5" cy="45.95" r="4"/><polyline class="cls-2" points="71.01 53.53 88.72 45.95 106.35 53.53 88.63 45.95"/><polyline id="A2_basic_turn-2" data-name="A2 basic turn" class="cls-4" points="62 58 62 101.91 61.65 102 46.56 89.47"/><circle class="cls-5" cx="62" cy="79.35" r="4"/><polyline class="cls-4" points="79.27 71.77 61.55 79.35 43.93 71.77 61.64 79.35"/></g></svg>

After

Width:  |  Height:  |  Size: 976 B

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2,.cls-3{fill:none;stroke-miterlimit:10;stroke-width:4px;}.cls-2{stroke:#c1272d;}.cls-3{stroke:#2e3192;}</style></defs><title>choreology-Bump</title><g id="_2_Follow-2" data-name="2 Follow"><rect class="cls-1" width="150" height="150"/><path id="A3_follow" data-name="A3 follow" class="cls-2" d="M103.87,132.9l-12.77-15L93.53,75.4s0.25-6,6-6,6,6,6,6-0.21,6-6,6-6-6-6-6L91.05,33,78.24,17.9"/><path id="A3_follow-2" data-name="A3 follow" class="cls-3" d="M46.13,132.9l12.77-15L56.47,75.4s-0.25-6-6-6-6,6-6,6,0.21,6,6,6,6-6,6-6L58.95,33,71.76,17.9"/></g></svg>

After

Width:  |  Height:  |  Size: 689 B

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2,.cls-3,.cls-4{fill:none;stroke-miterlimit:10;}.cls-2,.cls-4{stroke:#c1272d;}.cls-2,.cls-3{stroke-width:4px;}.cls-3{stroke:#2e3192;}.cls-4{stroke-width:3px;}</style></defs><title>choreology-Bump</title><g id="_3_American_Spin-2" data-name="3 American Spin"><rect class="cls-1" width="150" height="150"/><path id="A2_basic_turn" data-name="A2 basic turn" class="cls-2" d="M17.56,100.24l15-12.77L75.06,89.9s6,0.25,6,6-6,6-6,6-6-.21-6-6,6-6,6-6l42.4-2.47,15.11-12.81"/><polyline id="A2_basic_turn-2" data-name="A2 basic turn" class="cls-3" points="17.82 48.18 32.79 61 72 61"/><path class="cls-4" d="M97.81,99.11a8.63,8.63,0,1,0-4.44-3.66"/><polyline class="cls-4" points="101.57 103.27 97.89 99.11 102.55 95.99"/></g></svg>

After

Width:  |  Height:  |  Size: 854 B

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#c1272d;}.cls-3,.cls-5{fill:none;stroke-miterlimit:10;stroke-width:4px;}.cls-3{stroke:#c1272d;}.cls-4{fill:#2e3192;}.cls-5{stroke:#2e3192;}</style></defs><title>choreology-Bump</title><g id="_4_Bump-2" data-name="4 Bump"><rect class="cls-1" width="150" height="150"/><circle class="cls-2" cx="70" cy="80.41" r="4"/><polyline id="A2_basic_turn" data-name="A2 basic turn" class="cls-3" points="82.82 134.25 70 119.33 70 80"/><circle class="cls-4" cx="70" cy="69.6" r="4"/><polyline id="A2_basic_turn-2" data-name="A2 basic turn" class="cls-5" points="82.82 15.26 70 30.68 70 69"/></g></svg>

After

Width:  |  Height:  |  Size: 727 B

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2,.cls-5{fill:none;stroke-miterlimit:10;stroke-width:4px;}.cls-2{stroke:#c1272d;}.cls-3{fill:#c1272d;}.cls-4{fill:#2e3192;}.cls-5{stroke:#2e3192;}</style></defs><title>choreology-Bump</title><g id="_5_Stop_and_Go-2" data-name="5 Stop and Go"><rect class="cls-1" width="150" height="150"/><path id="A2_basic_turn" data-name="A2 basic turn" class="cls-2" d="M17.59,100.31l15-12.76L75,90s6,0.25,6,6-6,6-6,6-6-.21-6-6,6-6,6-6l42.36-2.47,15.09-12.8"/><circle class="cls-3" cx="55.7" cy="89.04" r="4"/><circle class="cls-4" cx="56.65" cy="61" r="4"/><polyline id="A2_basic_turn-2" data-name="A2 basic turn" class="cls-5" points="17.26 48.19 32.8 61 56 61"/></g></svg>

After

Width:  |  Height:  |  Size: 793 B

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2,.cls-3{fill:none;stroke-miterlimit:10;stroke-width:4px;}.cls-2{stroke:#c1272d;}.cls-3{stroke:#2e3192;}</style></defs><title>choreology-Bump</title><g id="_6_Windmill-2" data-name="6 Windmill"><rect class="cls-1" width="150" height="150"/><path id="A2_basic_turn" data-name="A2 basic turn" class="cls-2" d="M48.81,102L36.08,86.87s0-39,38.87-38.87"/><path id="A2_basic_turn-2" data-name="A2 basic turn" class="cls-3" d="M113.92,48.1l-12.35,15s0,39-38.87,38.87"/></g></svg>

After

Width:  |  Height:  |  Size: 604 B

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2,.cls-3{fill:none;stroke-miterlimit:10;stroke-width:4px;}.cls-2{stroke:#2e3192;}.cls-3{stroke:#c1272d;}</style></defs><title>choreology-Bump</title><g id="_7_Spanish_Arms-2" data-name="7 Spanish Arms"><rect class="cls-1" width="150" height="150"/><polyline id="A2_basic_turn" data-name="A2 basic turn" class="cls-2" points="95.81 25.14 83 40.25 83 125"/><path id="A2_basic_turn-2" data-name="A2 basic turn" class="cls-3" d="M66.6,124.91l-12.76-15,2.43-42.43s0.25-6,6-6,6,6,6,6-0.21,6-6,6-6-6-6-6L53.8,25.09"/></g></svg>

After

Width:  |  Height:  |  Size: 652 B

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#c1272d;}.cls-3,.cls-5{fill:none;stroke-miterlimit:10;stroke-width:4px;}.cls-3{stroke:#c1272d;}.cls-4{fill:#2e3192;}.cls-5{stroke:#2e3192;}</style></defs><title>choreology-Bump</title><g id="_8_Hucklebuck-2" data-name="8 Hucklebuck"><rect class="cls-1" width="150" height="150"/><circle class="cls-2" cx="74.96" cy="86.82" r="4"/><polyline class="cls-3" points="57.33 94.4 75.04 86.82 92.67 94.4 74.96 86.82"/><circle class="cls-4" cx="74.96" cy="63.18" r="4"/><polyline class="cls-5" points="92.67 55.6 74.96 63.18 57.33 55.6 75.04 63.18"/></g></svg>

After

Width:  |  Height:  |  Size: 690 B

@ -0,0 +1 @@
<svg id="step_S_" data-name="step (S)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><defs><style>.cls-1{fill:#fff;}.cls-2,.cls-3,.cls-4,.cls-5{fill:none;stroke-miterlimit:10;}.cls-2,.cls-4{stroke:#c1272d;}.cls-2,.cls-3{stroke-width:3px;}.cls-3,.cls-5{stroke:#2e3192;}.cls-3{stroke-dasharray:30 30;}.cls-4,.cls-5{stroke-width:4px;}</style></defs><title>choreology-Bump</title><g id="_9_Whip-2" data-name="9 Whip"><rect class="cls-1" width="150" height="150"/><path class="cls-2" d="M95.18,82.63L95.7,82.8a8.51,8.51,0,0,0,6.75-.81,8.62,8.62,0,1,0-12-3.5c0.16,0.31.26,0.47,0.26,0.47"/><path class="cls-3" d="M95.22,82.64s0.18,0.07.51,0.17a8.6,8.6,0,0,0,1.5.3A8.69,8.69,0,0,0,102.47,82a8.62,8.62,0,1,0-12-3.51l0.26,0.47"/><polyline class="cls-2" points="98.78 86.79 95.11 82.63 99.76 79.51"/><polyline class="cls-3" points="98.78 86.78 95.11 82.63 99.75 79.51"/><polyline id="A2_basic_turn" data-name="A2 basic turn" class="cls-4" points="43.51 94.8 58.31 82 85 82"/><polyline id="A2_basic_turn-2" data-name="A2 basic turn" class="cls-5" points="43.45 55.2 58.39 68 85 68"/></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

@ -1 +1,69 @@
GREAT JOB!
<html>
<head>
<title></title>
<style>
body {
margin-left: 20;
margin-right: 20;
padding: 0;
color: grey;
}
form.buttons {
}
form.buttons input {
width: 150px;
height: 150px;
/*hide the labels*/
font-size: 0;
line-height: 0;
border: 0;
margin: ;
}
</style>
</head>
<body>
<form action="cgi-bin/play.cgi" class="buttons">
<input type="submit" name="p" value="BasicTurn.mp3" style="background:url(images/choreology1-BasicTurn.svg) no-repeat;" />
<input type="submit" name="p" value="Follow.mp3" style="background:url(images/choreology2-Follow.svg) no-repeat;" />
<br>
<input type="submit" name="p" value="AmericanSpin.mp3" style="background:url(images/choreology3-AmericanSpin.svg) no-repeat;" />
<input type="submit" name="p" value="Bump.mp3" style="background:url(images/choreology4-Bump.svg) no-repeat;" />
<br>
<input type="submit" name="p" value="StopAndGo.mp3" style="background:url(images/choreology5-StopAndGo.svg) no-repeat;" />
<input type="submit" name="p" value="Windmill.mp3" style="background:url(images/choreology6-Windmill.svg) no-repeat;" />
<br>
<input type="submit" name="p" value="SpanishArms.mp3" style="background:url(images/choreology7-SpanishArms.svg) no-repeat;" />
<input type="submit" name="p" value="Hucklebuck.mp3" style="background:url(images/choreology8-Hucklebuck.svg) no-repeat;" />
<br>
<!--"Whip" of "The Whip" options - needs testing with music playing in the background
<input type="submit" name="p" value="TheWhip.mp3" style="background:url(images/choreology9-Whip.svg) no-repeat;" />
-->
<input type="submit" name="p" value="Whip.mp3" style="background:url(images/choreology9-Whip.svg) no-repeat;" />
<input type="submit" name="p" value="ChickenWalks.mp3" style="background:url(images/choreology10-ChickenWalks.svg) no-repeat;" />
<div class="tempo">
<br>
<br>
<br>
<input id="slider3" type="range" min ="100" max="180" step ="1" style="width: 640px" />
<!-- <input id="slider3" type="range" min ="100" max="180" step ="1" orient="vertical" style="-webkit-appearance: slider-vertical; writing-mode: bt-lr" />
-->
</div>
</form>
</body>
</html>

@ -1,53 +0,0 @@
<html>
<head>
<title></title>
<style>
form.buttons input {
width: 160px;
height: 160px;
/*hide the labels*/
font-size: 0;
line-height: 0;
}
</style>
</head>
<body>
<form action="cgi-bin/play.cgi" class="buttons">
<input type="submit" name="p" value="BasicTurn.mp3" style="background:url(images/Choreology-BasicTurn.png) no-repeat;" />
<input type="submit" name="p" value="Follow.mp3" />
<input type="submit" name="p" value="AmericanSpin.mp3" />
<input type="submit" name="p" value="Bump.mp3" />
<input type="submit" name="p" value="StopAndGo.mp3" />
<input type="submit" name="p" value="Windmill.mp3" />
<input type="submit" name="p" value="SpanishArms.mp3" />
<input type="submit" name="p" value="Hucklebuck.mp3" />
<input type="submit" name="p" value="TheWhip.mp3" />
<input type="submit" name="p" value="Whip.mp3" />
<input type="submit" name="p" value="ChickenWalks.mp3" />
<div class="tempo">
<input id="slider3" type="range" min ="100" max="180" step ="1" style="width: 640px" />
<!-- <input id="slider3" type="range" min ="100" max="180" step ="1" orient="vertical" style="-webkit-appearance: slider-vertical; writing-mode: bt-lr" />
-->
</div>
</form>
</body>
</html>

@ -0,0 +1,23 @@
A sonification of the Dutch elections March 2017; based on the hashtags #gestemd and #ikstem
Creative Commons - Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
You are free to:
Share — copy and redistribute the material in any medium or format
Adapt — remix, transform, and build upon the material
for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
More information can be found here:
https://creativecommons.org/licenses/by-sa/4.0/
///////////////////////////////////////////////////////////////////////////
TGC (Terra Gamma Circulaire) scripts and config files
WTFPL (Do What the Fuck You Want To Public License).
More information can be found here:
https://en.wikipedia.org/wiki/WTFPL

@ -0,0 +1,17 @@
Author: Margreet Riphagen
Date: 2017
Publication: Special Issue #2
Publication launch: Tetra Gamma Circulaire #3 at De Player in Rotterdam (24th of March 2017)
Title: A sonification of the Dutch elections March 2017; based on the hashtags #gestemd and #ikstem
Description:
In the run up to the 2017 general elections in the Netherlands last Wednesday, the 15 of March 2017, a lot of Twitter traffic was generated. Literally millions of tweets were send that day over the Internet.
This sonification entails three kinds of scores;
a) for the whole tweet,
b) for the hashtag ikstem (#ikstem), and
c) for the hashtag gestemd (#gestemd).
Thanks to:
All PZI tutors, fellow students and Jan-Kees van Kampen

File diff suppressed because one or more lines are too long

@ -0,0 +1,58 @@
#N canvas 553 37 553 723 10;
#X declare -lib unpackOSC;
#X obj 34 92 unpackOSC;
#X text 360 432 attack;
#X text 431 433 release;
#X obj 362 569 line~;
#X obj 179 589 *~;
#X obj 361 452 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 435 455 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 371 480 stop;
#X text 70 455 #ikstem;
#X text 188 454 #gestemd;
#X obj 179 685 dac~;
#X obj 34 142 unpack s s s;
#X obj 19 243 print;
#X obj 133 345 select #ikstem both;
#X text 264 345 #gestemd;
#X obj 175 539 osc~ 450;
#X obj 361 503 del 50;
#X msg 432 526 0 250;
#X msg 296 503 30 30;
#X obj 476 483 del 50;
#X msg 361 527 1 500;
#X msg 195 477 400;
#X msg 68 480 150;
#X obj 212 198 loadbang;
#X obj 364 23 import unpackOSC;
#X msg 211 244 \; pd dsp 1;
#X text 16 34 comment;
#X text 176 446 comment;
#X obj 34 48 mrpeach/udpreceive 127.0.0.1 4000;
#X connect 0 0 11 0;
#X connect 3 0 4 1;
#X connect 4 0 10 0;
#X connect 5 0 18 0;
#X connect 5 0 16 0;
#X connect 5 0 19 0;
#X connect 6 0 17 0;
#X connect 6 0 7 0;
#X connect 7 0 16 0;
#X connect 11 1 12 0;
#X connect 11 1 13 0;
#X connect 11 2 12 0;
#X connect 13 0 22 0;
#X connect 13 0 5 0;
#X connect 13 1 21 0;
#X connect 13 1 5 0;
#X connect 15 0 4 0;
#X connect 16 0 20 0;
#X connect 17 0 3 0;
#X connect 18 0 3 0;
#X connect 19 0 17 0;
#X connect 20 0 3 0;
#X connect 21 0 15 0;
#X connect 22 0 15 0;
#X connect 28 0 0 0;

@ -1,4 +1,5 @@
import csv
from __future__ import print_function
import csv, os, sys
from datetime import datetime
from time import sleep
import OSC
@ -8,7 +9,7 @@ import OSC
client = OSC.OSCClient()
address = '127.0.0.1', 4000 # 57120==SC
client.connect( address ) # set the address for all following messages
print client
print ("1.client stderr", file=sys.stderr)
msg = OSC.OSCMessage() # OSCresponder name: '/touch'
@ -16,26 +17,38 @@ msg.setAddress("/twitter-ikstem")
#msg.append('hello from python')
#client.send(msg)
#os.system('xzcat /media/floppy/twittersonification.csv.xz > /tmp/twittersonification.csv') #floppydisk
os.system('xzcat twittersonification.csv.xz > /tmp/twittersonification.csv') #lokaal
then = None
with open('final-ikstem-openinghours.csv', 'rU') as csvfile:
with open('/tmp/twittersonification.csv', 'rU') as csvfile:
file = csv.DictReader(csvfile)
print file
print ("2.opening file stderr", file=sys.stderr)
#csv.DictReader(csvfile)(["time"] + ['time'])
i=0
sleep_time=1
for row in file:
#print row
print ("3.row stderr", file=sys.stderr)
i+=1
t = row['time']
print ("4.time stderr", file=sys.stderr)
t = float(t)
now = datetime.fromtimestamp(t) #[]dictreader reads the rowheader
print now, row
#print now, row
if then:
ti = (now-then).total_seconds()
#print ti/100
sleep_time = ti/15
sleep_time = ti/1000
print ("5.msg stderr", file=sys.stderr)
#msg.append( row['text'].lower() )
#client.send(msg)
#msg.clearData()
if "#ikstem" in row['text'].lower() and '#gestemd' in row['text'].lower():
msg.append( ['both', str(now)] )
@ -43,10 +56,13 @@ with open('final-ikstem-openinghours.csv', 'rU') as csvfile:
msg.append( ['#ikstem', str(now) ])
elif '#gestemd' in row['text'].lower():
msg.append( ['#gestemd', str(now)] )
# msg.append( [ str(row['text']) ] )
# send an osc message to pd
print msg#[ i, row['text'], str(now)]
#print msg#[ i, row['text'], str(now)]
sleep(sleep_time)
client.send(msg)
msg.clearData()
then = now
then = now
print ("6.last print stderr", file=sys.stderr)

@ -0,0 +1,236 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>twitter sonification</title>
<style>
.background {
background-image: url('stemicoon.svg');
background-repeat: no-repeat;
background-size: contain;
background-position: center;
position: fixed;
top: 0;
left: 0;
height: 90vh;
width: 90vw;
margin: 5vh 5vw;
opacity: .2; /* PAS HIER DE OPACITY AAN VOOR DE TRANSPARANTIE VAN HET ICOON */
z-index: -1;
}
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote {
margin: 0;
padding: 0;
}
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px;
line-height: 18px;
margin: 10px 13px 10px 13px;
background-color: rgb(173,169,169); /* PAS DEZE KLEUR AAN VOOR DE ACHTERGRONDKLEUR VAN DE GEHELE PAGINA */
}
table {
margin: 10px 0 15px 0;
border-collapse: collapse;
}
td,th {
border: 1px solid #ddd;
padding: 3px 10px;
}
th {
padding: 5px 10px;
}
a {
color: #d64646;
}
a:hover {
color: #0050a3;
text-decoration: none;
}
a img {
border: none;
}
p {
margin-bottom: 9px;
}
h1,
h2,
h3,
h4,
h5,
h6 {
color: #f4eded;
line-height: 36px;
}
h1 {
margin-bottom: 18px;
font-size: 30px;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 16px;
}
h5 {
font-size: 14px;
}
h6 {
font-size: 13px;
}
hr {
margin: 0 0 19px;
border: 0;
border-bottom: 1px solid #ccc;
}
blockquote {
padding: 13px 13px 21px 15px;
margin-bottom: 18px;
font-family:georgia,serif;
font-style: italic;
}
blockquote:before {
content:"\201C";
font-size:30px;
margin-left:-10px;
font-family:georgia,serif;
color:#eee;
}
blockquote p {
font-size: 14px;
font-weight: 300;
line-height: 18px;
margin-bottom: 0;
font-style: italic;
}
code, pre {
font-family: Monaco, Andale Mono, Courier New, monospace;
}
code {
background-color: #fee9cc;
color: rgba(0, 0, 0, 0.75);
padding: 1px 3px;
font-size: 12px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
pre {
display: block;
padding: 14px;
margin: 0 0 18px;
line-height: 16px;
font-size: 11px;
border: 1px solid #d9d9d9;
white-space: pre-wrap;
word-wrap: break-word;
}
pre code {
background-color: #fff;
color:#737373;
font-size: 11px;
padding: 0;
}
b, strong {
color: red;
}
sup {
font-size: 0.83em;
vertical-align: super;
line-height: 0;
}
* {
-webkit-print-color-adjust: exact;
}
@media screen and (min-width: 914px) {
body {
width: 854px;
margin:10px auto;
}
}
@media print {
body,code,pre code,h1,h2,h3,h4,h5,h6 {
color: black;
}
table, pre {
page-break-inside: avoid;
}
}
</style>
<title>Sonification of the Dutch elections 2017</title>
</head>
<body>
<div class="background"></div>
<h1>Sonification of the Dutch elections 2017</h1>
<p>In the run up to the 2017 general elections in the Netherlands last Wednesday, the 15 of March 2017, a lot of Twitter<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> traffic was generated. Literally millions of tweets were send that day over the Internet.</p>
</p>
<br>
<h1>The online political battle</h1>
<blockquote><p>En meteen is daar de tweet: #waarwasBuma<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>
(And right after there was the tweet: #wherewasBuma)</p></blockquote>
<p>This research is inspired on an article in the NRC (27 februari 2017) about the online political battle. Just like in the United States, parties attempt to reach voters through social media and to frame political opponents. The parties use social media more than ever this years elections. They try to convey their message to the unprecedented number of undecided voters and they try to frame opponents with catchy slogans or hashtags.</p>
<p>Seeing all these tweets passing so quickly it reminds me of a cascade of data, the starting point of a sonification<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup> to perceptualize this huge amount of data in a <em>score</em>.</p>
<br>
<h1>Pushing the score</h1>
<p>This sonifiction entails three kinds of scores; a) for the whole tweet, b) for the hashtag ikstem (#ikstem), and c) for the hashtag gestemd (#gestemd).</p>
<p>a) It captures tweets sed during the day of the elections, between 07.30 and 21.00, when the polling stations were open. In total there are 47613 tweets captured. Some examples of tweets send:</p>
<blockquote><p>Ik wist niet wat ik moest stemmen, dus heb ik uiteindelijk maar een bootje gevouwen van het stembiljet <strong>#ikstem</strong> #tk2017 <strong>#gestemd</strong> https://t.co/KBqLBkYrpV</p>
<p>Grappig! RT @Mvan_berkel: In Leiden is rekening gehouden met zwevende kiezers. <strong>#ikstem</strong> #TweedeKamerverkiezingen https://t.co/Un8uJfNZ0v</p>
<p>Met volle trotst en vrolijkheid voor de eerste keer gaan stemmen vandaag <strong>#ikstem</strong></p></blockquote>
<p>b + c) A hash tag is used to streamline relevant topics by keyword or phrase by grouping them together to make it easier to find and follow tweets from people who are talking about the same thing. In this sonificatoin I used #ikstem and #gestemd. Both are given a different kind of sound.</p>
<br>
<br>
<h1>Used hardware and software</h1>
<p><a href="https://www.python.org">Python</a> , specific libraries: <a href="https://www.python.org/dev/peps/pep-0305/">csv</a>, <a href="https://docs.python.org/2/library/os.html">os</a> and <a href="https://pypi.python.org/pypi/python-osc">OSC</a></p>
<p><a href="https://puredata.info">Pure Data</p>
<p><a href="https://pzwiki.wdka.nl/mediadesign/The_Ultimate_RPi_Installation_Guide">RaspberryPi</a> and <a href="https://pzwiki.wdka.nl/mediadesign/Pi_skin_conductivity">Pi skin conductivity</a></p>
<p>Flyer: <a href="https://issue.xpub.nl/02/">https://issue.xpub.nl/02/</a></p>
<br>
<h1>References</h1>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:1">
<p>Twitter is an online news and social networking service where users post and interact with messages, &ldquo;tweets,&rdquo; restricted to 140 characters, (<a href="http://twitter.com">http://twitter.com</a>).<a href="#fnref:1" rev="footnote">&#8617;</a></p></li>
<li id="fn:2">
<p>En meteen is daar de tweet: #waarwasBuma, De politieke strijd online, door Andreas Kouwenhoven &amp; Hugo Logtenberg, 27 februari 2017, 21:05 (<a href="https://www.nrc.nl/nieuws/2017/02/27/en-meteen-is-daar-de-tweet-waarwasbuma-7033073-a1547979">https://www.nrc.nl/nieuws/2017/02/27/en-meteen-is-daar-de-tweet-waarwasbuma-7033073-a1547979</a>).<a href="#fnref:2" rev="footnote">&#8617;</a></p></li>
<li id="fn:3">
<p>Sonification is the use of non-speech audio to convey information or perceptualize data. Auditory perception (the sensory system for the sense of hearing) has advantages in temporal, spatial, amplitude, and frequency resolution that open possibilities as an alternative to visualization techniques.<a href="#fnref:3" rev="footnote">&#8617;</a></p></li>
</ol>
</div>
</body>
</html>

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 274 274"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#e21e27;}</style></defs><title>Asset 11</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M274,137a137,137,0,1,1-40.13-96.87A136.57,136.57,0,0,1,274,137Z"/><g id="aPOneC.tif"><path class="cls-2" d="M136.82,35.19h1.13a19.14,19.14,0,0,0,7.61,1.37c5.14.18,3.59-.54,7.05,3.57a1.74,1.74,0,0,1,.55,1.24c0,.28-.13.64.35.79.83.27.51.9.11,1.15-1,.67-1,1.8-1.55,2.77,2.54,1.19,5,2.34,7.44,3.46.55.25,1,.45.95,1.18-.19,1.93-.66,3.77-2.47,4.8a24.45,24.45,0,0,0-5.53,4.92,2.71,2.71,0,0,0-.89,1.71c0,3-2,4.42-4.28,5.73-6.84,3.89-13.39,8.26-20.09,12.39a7.61,7.61,0,0,0-1,.77.87.87,0,0,0-.34,1.11,1,1,0,0,0,1,.69,5.76,5.76,0,0,0,1,0c3-.39,5.86-1.15,8.8-1.69,5.06-.92,10.14-1.71,15.22-2.54,5.31-.86,10.61-1.78,15.94-2.53,8.4-1.18,16.83-2.09,25.28-2.8,1.26-.11,2.65-.52,3.6.93a4.34,4.34,0,0,1,2.73-1.61c5.19-.35,10.36-.84,15.52-1.51a3.45,3.45,0,0,1,2.46.16,15.58,15.58,0,0,0,7.51,2c1.31.07,2.6.31,3.91.48a1,1,0,0,1,.92.74,44.64,44.64,0,0,1,1.81,6.91c.32,2.4,1.25,4.58,3.5,5.76a1.5,1.5,0,0,1,.82,2.14c-.38,1.2-.84,2.39-1.24,3.59a4,4,0,0,0,.7,4c.22.29.54.54.52,1a26.74,26.74,0,0,1-5,4.71,13.92,13.92,0,0,0-4.76,5.6,2.24,2.24,0,0,1-1.25,1.25,29.5,29.5,0,0,1-5.87,1.77,11.55,11.55,0,0,0-4.62,1.86,18.8,18.8,0,0,1-9.08,3.74c-2.8.28-5.24,1.91-7.57,3.45-1.47,1-1.29,1.85.31,2.55a6.1,6.1,0,0,0,3.17.44,28.49,28.49,0,0,0,5.2-1.12,36.39,36.39,0,0,1,13.56-1.7c2,.14,3.9.49,5.87.54a10,10,0,0,1,6.45,2.31,12.65,12.65,0,0,0,2.86,1.77c3.77,1.73,5.67,4.57,5.47,8.76a14.31,14.31,0,0,0,1.18,6.43,4.8,4.8,0,0,1-1.44,6.07,24.24,24.24,0,0,0-4.95,5.87,24.16,24.16,0,0,1-8.11,7.94c-5.57,3.39-11.17,6.73-16.73,10.13-1.35.83-2.52,2.26-4,2.58-2.89.65-5,2.28-7.18,4.09-.81.69-1.64,1.78-2.68,1.66-2.27-.27-3.57,1-4.88,2.44a3.65,3.65,0,0,1-.68.48c-1.62,1.11-3.44,1.85-5.14,2.82a8.74,8.74,0,0,0-3.71,3.41,13.38,13.38,0,0,0,2.47.52A51.48,51.48,0,0,1,192,189.6a40.79,40.79,0,0,1,7.41,3.57c2.19,1.2,2.21,1.22,1.52,3.53a1.35,1.35,0,0,0,.53,1.76,9.25,9.25,0,0,1,3.47,6.06,7.93,7.93,0,0,1-.34,4.92c-.7.21-1-.25-1.33-.39s-.76-.32-1.14-.48a2.92,2.92,0,0,0-.13,3.68,1.54,1.54,0,0,1-.41,2.26c-1.7,1.55-3.29,3.2-5,4.74s-3.35,3.72-5.51,5A68.25,68.25,0,0,0,175.66,236a10.46,10.46,0,0,0-2.94,5.17,5.24,5.24,0,0,1-2.62,3.63,15.22,15.22,0,0,0-5.67,5.86,9.71,9.71,0,0,1-6,4.7c-2.23.63-4.6.18-6.79,1-1,.37-1.61.06-1.84-1-.37-1.66-1.3-2.17-3-1.86-2.32.42-3.2-.42-3.76-3-.12-.55-.17-1.11-.32-1.66a15.93,15.93,0,0,1-.78-6.92,2,2,0,0,0-.51-1.54,10.92,10.92,0,0,1-2.06-6.73c0-1.3.16-2.6.24-3.89-.13,0-.24,0-.31,0-.28.17-.54.37-.81.55a10.3,10.3,0,0,1-7.88,1.55c-3.13-.57-6.22-1.28-9.32-2a10,10,0,0,1-6.81-4.44,4.31,4.31,0,0,1-.92-3,12.73,12.73,0,0,0-2-9.36,6,6,0,0,1,0-6.53c1.69-2.8,3.43-5.58,5.19-8.34,5.82-9.13,14.1-15.89,22.22-22.77,1.23-1,2.7-1.84,3.38-3.63a14.18,14.18,0,0,0-3.39.31,34.26,34.26,0,0,0-6.69,2c-3.64,1.65-7.7,2.22-11.09,4.54-3.12,2.14-6.81,3.17-10.23,4.74-6.47,3-12.53,6.74-18.71,10.25-6,3.41-11.56,7.61-18.16,10.08a44.33,44.33,0,0,1-15,2.53,1.59,1.59,0,0,1-1.63-.85,6.65,6.65,0,0,0-2.71-2.6c-2.1-1.16-3-3-3.65-5.23-.74-2.72-.71-5.58-1.65-8.25-.65-1.85-1.43-3.66-2-5.53-.45-1.44-1.11-2.92-.35-4.49a17.62,17.62,0,0,1,2.22-3.57c1.16-1.4,2.32-2.8,2.52-4.74a3,3,0,0,1,1-1.67,58.35,58.35,0,0,1,5.75-5.36c8-6.16,16.48-11.78,24.85-17.48,3.55-2.41,7.44-4.35,10.8-7a96.06,96.06,0,0,1,11.91-7.76c3.68-2.09,7.44-4.07,10.55-7-2.63-2.71-2.53-4.19-7.16.33-2-1.15-2.41-1.16-4.21.36a3.66,3.66,0,0,1-2.84.85,12.81,12.81,0,0,0-5.79.66c-1.94.77-4,1.39-5.91,2.13-4.73,1.79-9.57,3.29-14.17,5.43-6.92,3.23-13.68,6.93-21.29,8.36a22.13,22.13,0,0,1-9.33-.14c-2.93-.7-5.57-2.11-8.31-3.23-3.1-1.27-3.5-2.17-3.12-5.55a12.7,12.7,0,0,0-.88-7.16,14.36,14.36,0,0,1-1.13-7,3.46,3.46,0,0,1,.89-2.41C35.88,114.77,38.1,112,41,110a7.31,7.31,0,0,0,1.58-1.38,119.41,119.41,0,0,1,16.68-16.8c4.81-4.1,9.73-8.08,13.74-13,.24-.3.73-.48.56-1-1.48-.32-3.11.46-4.4-.57a3,3,0,0,0-3.49-.2,7.93,7.93,0,0,1-6.11.66c-1.29-.47-2.35-1.48-4-1.52a9,9,0,0,0,.65-4.22A4.41,4.41,0,0,1,58,68.32c-.23-.47-.66-.55-1-.77-3.52-2.26-4.83-4.54-1.4-7.43.18-.15.33-.33.5-.49,5.5-5.24,12.23-8.28,19.32-10.64,3.44-1.15,6.9-2.24,10.37-3.31,2.62-.81,5.25-1.61,7.9-2.3,3.57-.92,7.16-1.77,10.75-2.58s7.11-1.56,10.74-2c2.65-.33,5.32-.41,7.94-1s5.09-.73,7.59-1.3C132.76,36,134.89,36.08,136.82,35.19Z"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

@ -1 +0,0 @@
#N canvas 518 144 450 300 10;

@ -0,0 +1 @@
FLOPPYLEFT - 2017

@ -0,0 +1,7 @@
Author: Slavoj Žižek
Date: 1989
Title: The Sublime Object of Floppy
Description:
And so on, and so on, and so on.

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save