2020-10-15 11:11:35 +02:00
< ? php
// array of scooters, artist, title, description
global $scooters ;
$scooters = array (
//array('https://opencoil.show/test-json.php?scooterID=1', 'artist name 0', 'title 0', 'desciption 0' ),
//array('https://opencoil.show/test-json.php?scooterID=2', 'artist name 1', 'title 1', 'desciption 1' ),
//array('https://opencoil.show/test-json.php?scooterID=3', 'artist name 2', 'title 2', 'desciption 2' ),
2020-10-16 00:04:12 +02:00
array ( 'https://platform.tier-services.io/v1/vehicle/1cdccfec-60c3-4b9e-ad18-40861a3a9ab2' , 'Aram Bartholl' , 'Fossils of late capitalism' , 'Aram Bartholl has salvaged rental bikes and scooters from the Spree River and is now exhibiting them as material relics of the platform economy.' ),
array ( 'https://platform.tier-services.io/v1/vehicle/ec9437d8-b105-4c94-bcdd-8653f629d476' , '!Mediengruppe Bitnik' , 'Follow the Rider ƪ(ړײ)ƪ' , 'Follow the next person you see on an e-scooter. 👠 Keep distance but don\'t lose your guide.' ),
array ( 'https://platform.tier-services.io/v1/vehicle/bfe887ad-cb89-4311-836f-dfb804b46269' , 'Jonas Lund' , 'Hello Capitalism' , '\'Hello Capitalism\' is a text-based work by Jonas Lund, exploring a wide range of different types of capitalistic systems.' ),
array ( 'https://platform.tier-services.io/v1/vehicle/808decca-3537-41ad-96c0-45f29c57349d' , 'Martin Howse' , 'wok_the_cables' , 'Adventure game for psychogeophysical divination of portals, realtime instructions to follow #wokthecables' ),
array ( 'https://platform.tier-services.io/v1/vehicle/54aaed50-dd24-4c10-9580-b05b3bfc6985' , 'Sofya Aleynikova' , 'followers' , 'Eine weibliche Protagonistin manifestiert sich als Meme im Web und stellt die richtigen Fragen.' ),
array ( 'https://platform.tier-services.io/v1/vehicle/d794fac2-5c3e-4f2b-aed1-f70ef82f67d8' , 'JODI' , '%Location????????' , 'XXXXXXXXXXXXXX' ),
2020-10-16 04:04:52 +02:00
array ( 'https://platform.tier-services.io/v1/vehicle/86219ae1-416a-4b36-897a-c738397d7210' , 'Rosa Menkmann' , 'Ariane' , 'Ariane is a famous Shutterstock model. She also worries about getting older.' ),
2020-10-16 00:04:12 +02:00
array ( 'https://platform.tier-services.io/v1/vehicle/0b939caf-80e9-4d6b-8454-4a7f8eaf088c' , 'Sarah Grant' , 'title' , 'desciption' ),
array ( 'https://platform.tier-services.io/v1/vehicle/0f7fa267-4bc1-439a-8fd0-43b98b9ffba7' , 'Danja Vasiliev' , 'title' , 'desciption' ),
array ( 'https://platform.tier-services.io/v1/vehicle/8732f342-df2f-475f-b0f6-c0032743a944' , 'Constant Dullaart' , 'clock' , 'ssid that tells the time' ),
array ( 'https://platform.tier-services.io/v1/vehicle/511c3984-3f81-4022-acc2-8e22646a5e01' , 'Dennis de Bel & Anton Jehle' , 'Paracity Gallery v0.41' , 'HOW TO: diy scooter gallery' ),
2020-10-15 11:11:35 +02:00
);
function saveLatestJSON (){
global $scooters ; //"import" the global variable into the function's scope
//TODO if latestData.json = older than ..2 minutes...call the API again
$id = 0 ; //start id
foreach ( $scooters as $item ) {
$getJSON = callAPI ( $scooters [ $id ][ 0 ]); //abstract callAPI for neater reuse
// GET RID OF JSON DECODE!
$arr = json_decode ( $getJSON , true ); // decode JSON data to PHP associative array
// access values from the associative array
$lat = $arr [ " data " ][ " attributes " ][ " lat " ]; // get lattitude
$lng = $arr [ " data " ][ " attributes " ][ " lng " ]; // get longitude
$pos = $lat . ', ' . $lng ; // construct lat/lon for use in leafet
$lst = $arr [ " data " ][ " attributes " ][ " lastLocationUpdate " ]; // get time of last position
$rnt = $arr [ " data " ][ " attributes " ][ " isRentable " ]; // check if scooter is rentable,
$act = $arr [ " data " ][ " attributes " ][ " state " ]; // check if scooter is ACTIVE or MAINTAINANCE
// access values from the multidimensional $scooters array
$nam = $scooters [ $id ][ 1 ]; // get the artist name
$tit = $scooters [ $id ][ 2 ]; // get the works title
$des = $scooters [ $id ][ 3 ]; // get the works description
//construct json with latest data
$latestData [] = array ( " ID " => $id ,
" lastPos " => $pos ,
" lastLocationUpdate " => $lst ,
" isRentable " => $rnt ,
" state " => $act ,
" name " => $nam ,
" title " => $tit ,
" desc " => $des );
$id ++ ;
}
return $latestData ; //return array
}
function makeMarker ( int $id ){ // generate appropriate markers based on latest JSON
$readJSON = file_get_contents ( './latestData.json' ); //read latest data
$arr = json_decode ( $readJSON , true );
$pos = $arr [ $id ][ " lastPos " ]; // get last known position
$lst = $arr [ $id ][ " lastLocationUpdate " ]; // get time of last position
$rnt = $arr [ $id ][ " isRentable " ]; // check if scooter is rentable,
$act = $arr [ $id ][ " state " ]; // check if scooter is ACTIVE or MAINTAINANCE
// access values from the multidimensional $scooters array
$nam = $arr [ $id ][ " name " ]; // get the artist name
$tit = $arr [ $id ][ " title " ]; // get the works title
$des = $arr [ $id ][ " desc " ]; // get the works description
//check scooter status and construct marker with corresponding icon
//check if scooter is rentable
if ( $rnt == true && $act === 'ACTIVE' ){
$marker = 'var scooter' . $id . ' = L.marker([' . $pos . '], {time: "' . $lst . ' " }).addTo(map)
. bindPopup ( " <b>'. $tit .'</b><br>'. $des .'<br>Last updated: '. $lst =str_replace(array('T', 'Z'), ' ', $lst ).'<br>Status: rentable, Gallery available " )
. bindTooltip ( " '. $nam .' " ) . setIcon ( availableIcon ); ' ;
} elseif ( $rnt == false && $act === 'ACTIVE' ) {
$marker = 'var scooter' . $id . ' = L.marker([' . $pos . '], {time: "' . $lst . ' " }).addTo(map)
. bindPopup ( " <b>'. $tit .'</b><br>'. $des .'<br>Last updated: '. $lst =str_replace(array('T', 'Z'), ' ', $lst ).'<br>Status: rented Out, Gallery unavailable " )
. bindTooltip ( " '. $nam .' " ) . setIcon ( isRentedIcon ); ' ;
};
//check if scooter is in maintenace
if ( $act !== " ACTIVE " ){
$marker = 'var scooter' . $id . ' = L.marker([' . $pos . '], {time: "' . $lst . ' " }).addTo(map)
. bindPopup ( " <b>'. $tit .'</b><br>'. $des .'<br>Last updated: '. $lst =str_replace(array('T', 'Z'), ' ', $lst ).'<br>Status: unavailable, in maintenace " )
. bindTooltip ( " '. $nam .' " ) . setIcon ( isMaintenanceIcon ); ' ;
};
return $marker ;
}
function appendJSON ( $filename , $data ){ // create historical json data for documentation over time
// read the file if present
$handle = @ fopen ( $filename , 'r+' );
// create the file if needed
if ( $handle === null )
{
$handle = fopen ( $filename , 'w+' );
}
if ( $handle )
{
// seek to the end
fseek ( $handle , 0 , SEEK_END );
// are we at the end of is the file empty
if ( ftell ( $handle ) > 0 )
{
// move back a byte
fseek ( $handle , - 1 , SEEK_END );
// add the trailing comma
fwrite ( $handle , ',' , 1 );
// add the new json string
fwrite ( $handle , json_encode ( $data ) . ']' );
}
else
{
// write the first event inside an array
fwrite ( $handle , json_encode ( array ( $data )));
}
// close the handle on the file
fclose ( $handle );
}
}
function callAPI ( $url ){
$curl = curl_init ( $url );
curl_setopt ( $curl , CURLOPT_FAILONERROR , true );
curl_setopt ( $curl , CURLOPT_FOLLOWLOCATION , true );
curl_setopt ( $curl , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $curl , CURLOPT_SSL_VERIFYHOST , false );
curl_setopt ( $curl , CURLOPT_SSL_VERIFYPEER , false );
curl_setopt ( $curl , CURLOPT_HTTPHEADER , array (
'x-api-key: bpEUTJEBTf74oGRWxaIcW7aeZMzDDODe1yBoSxi2' ,
'Content-Type: application/json' ,
)); // set the api key
curl_setopt ( $curl , CURLOPT_USERAGENT , 'ProductionRelease/3.8.2 (app.tier.sharing; build:3.8.2.0; iOS 12.4.4) Alamofire/4.9.1' ); // set user-agent to that of the Tier.app, sniffed by burpsuite
$result = curl_exec ( $curl );
if ( ! $result ){ die ( " Connection Failure " );}
curl_close ( $curl );
return $result ;
}
?>
< html >
< head >
< meta charset = " utf-8 " >
< meta name = " viewport " content = " width=device-width,initial-scale=1.0, maximum-scale=1.0, user-scalable=no " />
< title > OPENCOIL </ title >
< script src = " https://code.jquery.com/jquery-1.12.4.min.js " ></ script >
< link rel = " stylesheet " type = " text/css " href = " https://unpkg.com/leaflet@1.3.3/dist/leaflet.css " >
< script src = 'https://unpkg.com/leaflet@1.3.3/dist/leaflet.js' ></ script >
<!-- icons -->
< script src = " https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js " ></ script >
< script src = " https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js " ></ script >
< link rel = " stylesheet " href = " https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css " />
< link rel = " stylesheet " href = " https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css " />
< link rel = " stylesheet " href = " https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css " />
< link rel = " stylesheet " href = " https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css " />
< link rel = " stylesheet " href = " https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css " />
< link rel = " stylesheet " href = " https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/leaflet.awesome.rotate.css " />
< link rel = " stylesheet " href = " main.css " />
<!-- begin timeslider
< script src = " SliderControl.js " ></ script >
< script src = " http://code.jquery.com/ui/1.9.2/jquery-ui.js " ></ script >
< link rel = " stylesheet " href = " http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css " />
< script src = " //cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.2/jquery.ui.touch-punch.min.js " ></ script >
<!-- end of timeslider -->
< script >
L_NO_TOUCH = false ;
L_DISABLE_3D = false ;
</ script >
</ head >
< body >
< div id = " map " ></ div >
< div id = " title-container " >
< h1 > OPENCOIL </ h1 >
< h2 > a roaming speedshow </ h2 >
2020-10-15 12:09:51 +02:00
<!--< p > legendary code has once been written on a cold rainy night in october . it was 2 nay 1 day before the opening of this show when i typed this silly code . it was legendary . both the situation as well as the code . thanks for reading . bye </ p >-->
2020-10-15 11:11:35 +02:00
< div id = " bottom_menu " >
2020-10-16 04:00:55 +02:00
< a href = " # " onclick = " document.getElementById('infotext').style.visibility='visible';document.getElementById('infotext').style.opacity='1';document.getElementById('contacttext').style.visibility='hidden';document.getElementById('abouttext').style.visibility='hidden';document.getElementById('howtotext').style.visibility='hidden'; " > info </ a >
< a href = " # " onclick = " document.getElementById('howtotext').style.visibility='visible';document.getElementById('howtotext').style.opacity='1';document.getElementById('infotext').style.visibility='hidden';document.getElementById('abouttext').style.visibility='hidden';document.getElementById('contacttext').style.visibility='hidden'; " > how to </ a >
< a href = " # " onclick = " document.getElementById('abouttext').style.visibility='visible';document.getElementById('abouttext').style.opacity='1';document.getElementById('contacttext').style.visibility='hidden';document.getElementById('infotext').style.visibility='hidden';document.getElementById('howtotext').style.visibility='hidden'; " > about </ a >
< a href = " # " onclick = " document.getElementById('contacttext').style.visibility='visible';document.getElementById('contacttext').style.opacity='1';document.getElementById('infotext').style.visibility='hidden';document.getElementById('abouttext').style.visibility='hidden';document.getElementById('howtotext').style.visibility='hidden'; " > contact </ a >
2020-10-15 11:11:35 +02:00
</ div >
</ div >
2020-10-16 04:00:55 +02:00
< div id = " howtotext " >
< div id = " infobuttons " >
< div id = " closeButton " onclick = " document.getElementById('howtotext').style.visibility='hidden';document.getElementById('howtotext').style.opacity='0'; " > X </ div >
< div id = " enButton " onclick = " document.getElementById('howtotext_en').style.visibility='visible';document.getElementById('howtotext_en').style.opacity='1'; " > EN </ div >
</ div >
< p >
< span id = " howto " > HOW TO : Die Scooter Gallerie besuchen </ span >< br >< br >
1. Finde den Roller : Der aktuelle Standort aller Opencoil Roller wird dir auf der Karte angezeigt .< br >
< span > Ein Pin mit dem 'Wifi' Icon bedeutet die Gallerie ist verfügbar .</ span >< br >
< span > Ein Pin mit einem Stundenglas Icon bedeuted , dass die Gallerie aktuell besetzt ist .</ span >< br >
< span > Ein schwarzer Pin mit Werkzeug Icon bedeuted , dass der Roller aktuell gewartet wird .</ span >< br >< br >
2. Verbinde dich mit dem Wifi Netzwerk . Es trägt den Namen der Arbeit die in der Gallerie zu sehen ist .< br >
Auf dem iPhone sollte sich automatisch ein Fenster öffnen , indem nach kurzer Ladezeit die Arbeit zu sehen ist . Sollte dies einmal nicht funktionieren , öffne selbst den Browser und tipp die folgende Adresse ein : opencoil . local < br >
Auf Android Geräten bekommst du eventuell ein Popup bekommen welches dich fragt ob du die Verbindung zum Netzwerk behalten möchtest , da keine Verbindung zum Internet besteht . Klicke Verbindung behalten . Sollte dich dein Gerät fragen ob du dich ins Netzwerk einloggen möchtest , klicke einloggen . Alternativ kannst du einen Browser deiner Wahl öffnen und entweder 'opencoil.local' oder eine beliebige Zeichenfolge gefolgt von '.com' in das URL Feld eingeben .< br >< br >
Solltest du Hilfe benötigen , zögere nicht uns per < a href = " mailto:service@opencoil.show " > Mail </ a > oder < a href = " https://t.me/opencoil " > Telegram App </ a > zu kontaktieren .
Viel Spaß !
</ p >
</ div >
< div id = " howtotext_en " >
< div id = " closeButton " onclick = " document.getElementById('howtotext_en').style.visibility='hidden'; document.getElementById('howtotext').style.visibility='hidden'; " > X </ div >
< p >
< span id = " howto " > HOW TO : Visit the scooter gallery </ span >< br >< br >
1. Find a scooter : The current location of all scooters will be displayed on the map .< br >
< span > A map marker with a wifi icon means the gallery is available .</ span >
< span > a marker with an hourglass icon means its currently unavailable .</ span >
< span > a black marker & wrench icon means the scooter is beeing serviced .</ span >< br >< br >
2. Connect to the wifi network . The name should be the same as the artwork title .< br >
Using an iPhone there should be a portal page popping up automatically . After a few seconds it will display the artwork . Should this not work for you , open up a browser and type 'opencoil.local' in the adressbar .< br >
On an Android device you might get a popup asking you wether you want to stay connected to the network even without an internet connection . select yes . Should your device ask wether you want to log in to the network , select yes as well . Otherwise open up a browser and type either 'opencoil.local' or any short combination of letters followed by '.com' into the adressbar .< br >< br >
if you can 't get it to work, don' t hesitate to contact us via < a href = " mailto:service@opencoil.show " > mail </ a > or < a href = " https://t.me/opencoil " > Telegram app </ a >< br >< br >
Have fun !
</ p >
</ div >
2020-10-15 12:42:54 +02:00
< div id = " abouttext " >
< div id = " infobuttons " >
< div id = " closeButton " onclick = " document.getElementById('abouttext').style.visibility='hidden';document.getElementById('abouttext').style.opacity='0'; " > X </ div >
</ div >
< p >
2020-10-15 15:54:36 +02:00
OPENCOIL - a roaming speedshow < br >< br >
< span id = " infolink " > curated by Dennis de Bel & Anton Jehle </ span >< br >< br >
Impressum < br >< br >
< span id = " infolink " >
Zentrum für Netzkunst e . V .< br >
c / o Robert Sakrowski < br >
Kollwitzstraße 71 < br >
10435 Berlin < br >< br >
Register - Eintrag Nr .: VR 38280 B < br >
Steuernummer 27 / 647 / 51440
</ span >
2020-10-15 12:42:54 +02:00
</ p >
</ div >
< div id = " contacttext " >
< div id = " infobuttons " >
< div id = " closeButton " onclick = " document.getElementById('contacttext').style.visibility='hidden';document.getElementById('contacttext').style.opacity='0'; " > X </ div >
</ div >
< p >
Generelle Anfragen / general inquiries < br >< br >
< a id = " infolink " href = " mailto:mail@opencoil.show " > mail @ opencoil . show </ a >< br >< br >
Technischer Support / technical support < br >< br >
2020-10-15 15:26:08 +02:00
< span > Mail : </ span >< a id = " infolink " href = " mailto:service@opencoil.show " style = " padding-left: 0; " > service @ opencoil . show </ a >< br >
< span > Telegram : </ span >< a id = " infolink " href = " https://t.me/opencoil " style = " padding-left: 0; " > https :// t . me / opencoil </ a >< br >< br >
Zentrum für Netzkunst < br >< br >
< span id = " infolink " > Werkstatt Haus der Statistik < br ></ span >
< span id = " infolink " > Karl - Marx - Allee 1 , Haus D < br ></ span >
< span id = " infolink " > 10178 Berlin < br ></ span >
< a id = " infolink " href = " mailto:info@netart.berlin " > info @ netart . berlin </ a >
2020-10-15 12:42:54 +02:00
</ p >
</ div >
2020-10-15 12:09:51 +02:00
< div id = " infotext " >
< div id = " infobuttons " >
< div id = " closeButton " onclick = " document.getElementById('infotext').style.visibility='hidden';document.getElementById('infotext').style.opacity='0'; " > X </ div >
< div id = " enButton " onclick = " document.getElementById('infotext_en').style.visibility='visible';document.getElementById('infotext_en').style.opacity='1'; " > EN </ div >
</ div >
< p >
OPENCOIL – a roaming Speedshow < br >< br >
Die Ausstellung OPENCOIL setzt sich mit den Auswirkungen von Mikro - Mobilitätsdiensten auf den Stadtraum auseinander , indem sie ihre dezentrale Infrastruktur als Ausstellungsraum nutzt und gleichzeitig die Bedingungen und Auswirkungen dieser Infrastrukturen auch zum Thema macht .
< br >< br >
11 Künstler * innen wurden eingeladen , ihre Arbeiten auf einem kleinen Wifi Controller mit ~ 2 MB Offline - Speicher zu präsentieren .
< br >< br >
Diese „digitalen Galerieräume“ werden an 11 zufällig ausgewählten E - Scootern angebracht .
< br >
So fährt die Ausstellung , von den Nutzer * Innen der Roller unbemerkt , als „roaming Speedshow“ durch die Stadt .
< br >< br >
Der aktuelle Standort der Kunstwerke kann ab dem 26. Oktober über diese Website verfolgt werden . Damit die Werke betrachtet werden können , muss die „Roller - Galerie“ im Stadtraum gefunden werden .
< br >< br >
Sobald der Roller angemietet ist , erhalten die Besucher * innen über ihr persönliches Smartphone , Zugang zu dem 2 MB großen Galerieraum und den ausgestellten Werken .
< br >< br >
Während Kapazitätsbeschränkungen und die bevorzugte Vermeidung von Zusammenkünften in geschlossenen Räumen , traditionelle Galerien und Museen vor Herausforderungen stellen , zielt OPENCOIL darauf ab , die Ortsunabhängigkeit des Online mit der Materialität des Offline ( und umgekehrt ) zu verbinden . Die Infrastruktur der „Mikro - Mobiltitätsdienste“ wird übernommen – klimaneutral und dezentral .
< br >< br >
Die Gehwege vieler Städte auf der ganzen Welt wurden in den letzten Jahren von sogenannten 'dockless sharing vehicles' regelrecht überflutet . Mit Versprechungen von Umweltfreundlichkeit und Elektromobilität , besetzten diese Risikokapitalismus Aktivisten die Grauzone zwischen privatem und öffentlichem Raum auf den Straßen unserer Städte . Diese gewissenlose Gewissenhaftigkeit der " Mikro-Mobilitätsdienste " wirft jedoch wichtige Fragen zu städtischem Raum , Eigentum , Agentur , Produktion , Ökologie und sehr spätem Kapitalismus auf .
< br >< br >
Wie umgehen mit der Inbesitznahme öffentlichen Raums ? < br >
Welche Werkzeuge und Wege gibt es sich diesen zurückzuerobern ? < br >
< br >
OPENCOIL soll nicht nur ein Pandemie - tauglicher Weg sein , um Kunst im öffentlichen Offline - Raum zu zeigen . OPENCOIL ist auch eine kreative ( Um - ) Nutzung von E - Scootern , ein Versuch , sich ihnen mit künstlerischen Mitteln zu nähern .
< br >
Gezeigt werden Arbeiten , die sich mit Fragen der Überschneidung von öffentlichem und privatem Raum , dem Umgang mit Ressourcen sowie mit Greenwashing , Risikokapitalismus und Vandalismus befassen .
< br >< br >
Die teilnehmenden Künstler * innen sind :
< br >< br >
Aram Bartholl < br >
Constant Dullaart < br >
Dennis de Bel & Anton Jehle < br >
JODI < br >
Jonas Lund < br >
Martin Howse < br >
! Mediengruppe Bitnik < br >
Rosa Menkman < br >
Sarah Grant < br >
Sofya Aleynikova < br >
Danja Vasiliev < br >
< br >< br >
Sonstige Erläuterungen :
< br >< br >
Die künstlerischen Beiträge sind jeweils auf einem Wifi Mikrocontroller gespeichert , welcher mit einem Tretroller verbunden ist und so , sobald der Roller ausgeliehen ist , mit Strom versorgt wird . Um die Arbeiten zu sehen verbindet man sich mit dem vom Wifi Chip gesendeten , lokalen unverschlüsselten WiFi Netzwerk . Es öffnet sich automatisch ein Webportal , indem die Arbeit zu sehen ist . Es ist keine mobile Datenverbindung notwendig .
Alle Arbeiten wurden von den Künstler * innen speziell für die Betrachtung auf Smartphones optimiert .
< br >< br >
OPENCOIL ist in keiner Weise mit der den „Mikro - Mobilitätsdiensten“ assoziiert , sondern bedient sich lediglich am bestehenden Rollernetzwerk . Die Umnutzung der Roller zu einem Ausstellungsort ist nach der Ausstellung komplett reversibel und schränkt den herkömmlichen Gebrauch der Roller ( auch während der Ausstellung ) in keiner Weise ein . Die Roller werden nicht beschädigt .< br >< br >
Die Ausstellung startet am 26. Oktober auf dem öffentlichen Platz vor dem Zentrum für Netzkunst ( Haus der Statistik ) und wird in der Woche bis zum 1. November täglich von unserem Team gewartet und am Laufen gehalten . Sollte eine Arbeit beschädigt oder nicht auffindbar sein bitte per Mail ( < a id = " infolink " href = " mailto:service@opencoil.show " > service @ opencoil . show </ a > ) oder über die Telegram App ( < a id = " infolink " href = " https://t.me/opencoil " > https :// t . me / opencoil </ a > ) < br >< br >
</ p >
< div id = " closeButtonbottom " onclick = " document.getElementById('infotext').style.visibility='hidden'; " > less info </ div >
2020-10-15 11:11:35 +02:00
</ div >
< div id = " infotext_en " >
2020-10-15 12:09:51 +02:00
< div id = " closeButton " onclick = " document.getElementById('infotext_en').style.visibility='hidden'; document.getElementById('infotext').style.visibility='hidden'; " > X </ div >
< p >
OPENCOIL - a roaming speed show
< br >< br >
The OPENCOIL exhibition explores the impact of micro - mobility services on urban space by using its decentralised infrastructure as an exhibition space , while also addressing the conditions and effects of this infrastructure .
< br >< br >
11 artists were invited to present their work on a small Wifi controller with ~ 2 MB offline memory .
< br >< br >
These " digital gallery spaces " are attached to 11 randomly selected e - scooters .
Thus the exhibition , unnoticed by the regular users of these scooters , drives through the city as a " roaming speed show " .
< br >< br >
From October 26 th onwards the current location of the artworks will be displayed here on this website . In order to view the works the corresponding " Scooter Gallery " must be found in the offline urban space .
< br >< br >
Once the scooter is rented , visitors will be able to access the 2 MB gallery space and the exhibited works via their personal smartphone .
< br >< br >
While capacity restrictions and the preferred avoidance of gatherings in closed spaces pose challenges on traditional galleries and museums , OPENCOIL aims to combine the independence of the online with the materiality of the offline ( and vice versa ) . The infrastructure of " micro-mobility services " will be taken over - climate - neutral and decentralised .
< br >< br >
The pavements of many cities around the world have been flooded in recent years by so - called 'dockless sharing vehicles' . With promises of eco - friendliness and electromobility , these risk capitalism activists have occupied the grey zone between private and public space on the streets of our cities . However , this unscrupulous conscientiousness of 'micro-mobility services' raises important questions about urban space , ownership , agency , production , ecology and very late capitalism .
< br >< br >
How to deal with the occupation of public space ?
What tools and ways are there to reclaim it ?
< br >< br >
OPENCOIL is not only meant to be a pandemic - proof way to show art in public offline space . OPENCOIL is also a creative ( re ) use of e - scooters , an attempt to approach them by artistic means .
On show are works that deal with questions of the overlap between public and private space , the use of resources , as well as greenwashing , risk capitalism and vandalism .
< br >< br >
The participating artists are :
< br >< br >
Aram Bartholl < br >
Constant Dullaart < br >
Dennis de Bel & Anton Jehle < br >
JODI < br >
Jonas Lund < br >
Martin Howse < br >
! Mediengruppe Bitnik < br >
Rosa Menkman < br >
Sarah Grant < br >
Sofya Aleynikova < br >
Danja Vasiliev < br >
< br >< br >< br >
Other explanatory notes :
< br >< br >
The artistic contributions are each stored on a Wifi microcontroller , which is connected to a scooter and is thus supplied with power as soon as the scooter is rented . To view the works , you connect to the local unencrypted WiFi network sent by the Wifi chip . A web portal opens automatically , where the work can be viewed . No mobile data connection is necessary . All works have been specially optimised by the artists to be viewed on smartphones .
< br >< br >
OPENCOIL is in no way associated with the " micro-mobility services " , but only uses the existing scooter network . The conversion of the scooters into an exhibition space is completely reversible after the exhibition ends and in no way restricts the conventional use of the scooters ( even during the exhibition ) . The scooters will not be damaged .
< br >< br >
The exhibition will start on October 26 th in the public space in front of Zentrum für Netzkunst ( Haus der Statistik ) . For one week , until November 1 st , the exhibition will be serviced and kept running daily by our team . Should a work be damaged or not be found , please send an e - mail ( < a id = " infolink " href = " mailto:service@opencoil.show " > service @ opencoil . show </ a > ) or use the Telegram App ( < a id = " infolink " href = " https://t.me/opencoil " > https :// t . me / opencoil </ a > )
</ p >
< div id = " closeButtonbottom " onclick = " document.getElementById('infotext').style.visibility='hidden'; document.getElementById('infotext_en').style.visibility='hidden'; " > less info </ div >
2020-10-15 11:11:35 +02:00
</ div >
2020-10-15 12:09:51 +02:00
< script >
2020-10-15 11:11:35 +02:00
// define icons
// prefix: glyphicon = bootstrap, list can be found here: https://getbootstrap.com/docs/3.3/components/
// prefix: fa = fontawesome, list is here: https://fontawesome.com/v4.7.0/cheatsheet/
var availableIcon = L . AwesomeMarkers . icon (
{ " icon " : " wifi " , " iconColor " : " white " , " markerColor " : " purple " , " prefix " : " fa " }
);
var isRentedIcon = L . AwesomeMarkers . icon (
{ " icon " : " hourglass-half " , " iconColor " : " white " , " spin " : " true " , " markerColor " : " pink " , " prefix " : " fa " }
);
var isMaintenanceIcon = L . AwesomeMarkers . icon (
{ " icon " : " wrench " , " iconColor " : " white " , " markerColor " : " black " , " prefix " : " fa " }
);
var map = L . map ( 'map' , { zoomControl : false , attributionControl : false }) . setView ([ 52.516190 , 13.377693 ], 11.5 );
var Stamen_Toner = L . tileLayer ( 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.{ext}' , {
attribution : 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> — Map data © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' ,
subdomains : 'abcd' ,
minZoom : 0 ,
maxZoom : 20 ,
ext : 'png'
});
map . addLayer ( Stamen_Toner );
//the magic: for each scooter in $scooters array, request status and construct marker
< ? php
$filename = " ./latestData.json " ; //latest locations, 1 entry per scooter
$filename_history = " ./historicalData.json " ; //historical locations
// check how old the latest json is
if ( time () - filemtime ( $filename ) > 60 ) { //if older than 60 seconds
$arrayToEcho = saveLatestJSON ();
//append to historical json
appendJSON ( $filename_history , $arrayToEcho );
$latestData = json_encode ( $arrayToEcho , JSON_FORCE_OBJECT ); // force object accepts 0 as a key for the array and not NULL
file_put_contents ( $filename , $latestData , LOCK_EX );
$id = 0 ; //start id
foreach ( $scooters as $item ) {
echo makeMarker ( $id );
$id ++ ;
}
} else { // file younger than 60 seconds
$id = 0 ; //start id
foreach ( $scooters as $item ) {
echo makeMarker ( $id );
$id ++ ;
}
}
?>
// time slider
//test markers
//var marker1 = L.marker([52.504926, 13.358061], {time: "2020-10-09T08:00:29Z"});
//var marker2 = L.marker([52.506926, 13.358061], {time: "2020-10-09T09:00:29Z"});
//var marker3 = L.marker([52.508926, 13.358061], {time: "2020-10-09T10:00:29Z"});
// var map = marker1;
// layerGroup = L.layerGroup([marker_e7a96a6d6b08479ba6d17d42769e5202]);
layerGroup = L . layerGroup ([ scooter0 , scooter1 , scooter2 ]); //make this dynamic
var sliderControl = L . control . sliderControl ({ layer : layerGroup });
map . addControl ( sliderControl );
sliderControl . startSlider ();
</ script >
</ body >
2020-10-16 04:04:52 +02:00
</ html >