diff --git a/chatbothubs,js b/chatbothubs,js new file mode 100644 index 0000000..e2ab6f5 --- /dev/null +++ b/chatbothubs,js @@ -0,0 +1,157 @@ +const WebSocket = require("ws"); +const { Client } = require("node-osc"); + +const ws = new WebSocket( + "wss://relaxed-werewolf.reticulum.io/socket/websocket?vsn=2.0.0" +); + +const STATE_STARTING = "starting"; +const STATE_JOINING = "joining"; +const STATE_CONNECTED = "connected"; + +let state = STATE_STARTING; +let hubId = "qPxWfFA"; +let fullHubId = `hub:${hubId}`; +let receiveId = 1; +let sendId = 1; +let botSessionId; +let vapidPublicKey; +let avatarId = "qPxWfFA"; +let displayName = "000"; +// Members keyed by session ID. +let members = {}; +let chatStates = {}; + +const oscClient = new Client("127.0.0.1", 3333); + +let dialogOptions = [ + ["START", /(hello|hi)/, "Welcome to the attic, you are getting close.", "START"], + + + ["START", /(shell)/, "One correct!", "SHELL"], + ["START", /(mirror)/, "One correct!", "MIRROR"], + ["START", /(computer)/, "One correct!", "COMPUTER"], + + ["SHELL", /(shell)/, "You already said that!!", "SHELL"], + ["SHELL", /(mirror)/, "Two correct!", "SHELL_MIRROR"], + ["SHELL", /(computer)/, "Two correct!", "SHELL_COMPUTER"], + + [ "SHELL_COMPUTER", /(shell|computer)/, "You already said that!", "SHELL_COMPUTER"], + [ "SHELL_COMPUTER", /(mirror)/, "Ahhhhh...... the number of the portal is... 32!", "WIN"], + [ "SHELL_MIRROR", /(shell|mirror)/, "You already said that!", "SHELL_MIRROR"], + [ "SHELL_MIRROR", /(computer)/, "Ahhhhh...... the number of the portal is... 32!", "WIN"], + + ["MIRROR", /(mirror)/, "You already said that!!", "MIRROR"], + ["MIRROR", /(shell)/, "Two correct!", "MIRROR_SHELL"], + ["MIRROR", /(computer)/, "Two correct!", "MIRROR_COMPUTER"], + + [ "MIRROR_COMPUTER", /(mirror|computer)/, "You already said that!", "MIRROR_COMPUTER"], + [ "MIRROR_COMPUTER", /(shell)/, "Ahhhhh...... the number of the portal is... 32!", "WIN"], + [ "MIRROR_SHELL", /(shell|mirror)/, "You already said that!", "MIRROR_COMPUTER"], + [ "MIRROR_SHELL", /(computer)/, "Ahhhhh...... the number of the portal is... 32!", "WIN"], + + ["COMPUTER", /(comptuer)/, "You already said that!!", "COMPUTER"], + ["COMPUTER", /(mirror)/, "Two correct!", "COMPUTER_MIRROR"], + ["COMPUTER", /(shell)/, "Two correct!", "COMPUTER_SHELL"], + + [ "COMPUTER_SHELL", /(shell|computer)/, "You already said that!", "COMPUTER_SHELL"], + [ "COMPUTER_SHELL", /(mirror)/, "Ahhhhh...... the number of the portal is... 32!", "WIN"], + [ "COMPUTER_MIRROR", /(computer|mirror)/, "You already said that!", "COMPUTER_MIRROR"], + [ "COMPUTER_MIRROR", /(shell)/, "Ahhhhh...... the number of the portal is... 32!", "WIN"], + + // Guessing game + +]; + + + + + + +function sendMessage(roomId, command, body) { + const message = JSON.stringify([receiveId, sendId, roomId, command, body]); + ws.send(message); + sendId++; +} + +function receiveMessage(data) { + const [n1, n2, channel, command, body] = JSON.parse(data); + if (Number.isInteger(n1)) { + receiveId = n1; + } + if (command === "phx_reply" && state === STATE_STARTING) { + if (body.status === "ok") { + console.log("Joining Hubs..."); + state = STATE_JOINING; + botSessionId = body.response.session_id; + vapidPublicKey = body.response.vapid_public_key; + sendMessage(fullHubId, "phx_join", { + profile: { avatarId, displayName }, + auth_token: null, + perms_token: null, + context: { mobile: false, embed: false }, + }); + } else { + console.log(`ERROR WHILE STARTING: ${JSON.stringify(body)}`); + } + } else if (command === "phx_reply" && state == STATE_JOINING) { + if (body.status === "ok") { + const hub = body.response.hubs[0]; + console.log(`Connected to ${hub.name}.`); + state = STATE_CONNECTED; + setInterval(sendHeartbeat, 30000); + } else { + console.log(`ERROR WHILE JOINING: ${JSON.stringify(body)}`); + } + } else if (command === "message" && state === STATE_CONNECTED) { + console.log(body); + handleChatMessage(body); + } else if (command === "presence_diff") { + for (const sessionId of Object.keys(body.joins)) { + if (sessionId === botSessionId) continue; + const meta =body.joins[sessionId].metas[0]; + if (meta.presence !== 'room') continue; + const displayName = meta.profile.displayName; + const message = `Welcome, dear ${displayName}, to my attic..I like to listen here for any sounds from the outside.. So few come in… Stay here among the paintings for a while, you will see there is no way out..But let’s play a game! In each of these images, there is one element which you must name… For each image, this will be the most central object. But beware! Name all of the elements, and I shall steal your voice. Lo, I shall join the other world. You shall also be set free, for I shall tell you the secret of the portal...`; + sendMessage(fullHubId, "message", { body: message, type: "chat" }); + } + } else { + //console.log(`Unknown command ${command}`); + } +} + +function handleChatMessage(message) { + if (message.type !== "chat") return; + // This is the user that sent the message. + const sessionId = message.session_id; + // Ignore messages we sent ourselves. + if (sessionId === botSessionId) return; + const body = message.body.trim(); + let chatState = chatStates[sessionId] || "START"; + // Find a suitable dialog option. + for (const [startState, input, output, endState] of dialogOptions) { + if (startState !== chatState) continue; + if (body.match(input)) { + console.log(sessionId, chatState, output); + setTimeout(() => { + sendMessage(fullHubId, "message", { body: output, type: "chat" }); + chatState = endState; + chatStates[sessionId] = chatState; + if (chatState === 'WIN') { + oscClient.send("/win"); + chatStates[sessionId] = 'START'; + } + }, 500 + Math.random() * 1000); + break; + } + } +} + +function sendHeartbeat() { + sendMessage("phoenix", "heartbeat", {}); +} + +ws.on("open", function () { + sendMessage("ret", "phx_join", { hub_id: hubId }); +}); +ws.on("message", receiveMessage); diff --git a/downloading-party/beautifulsoup-notebook.ipynb b/downloading-party/beautifulsoup-notebook.ipynb new file mode 100644 index 0000000..1f13350 --- /dev/null +++ b/downloading-party/beautifulsoup-notebook.ipynb @@ -0,0 +1,72 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beautifulsoup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import urllib\n", + "from bs4 import BeautifulSoup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "url = 'https://go-dh.github.io/mincomp/thoughts/2016/10/02/minimal-definitions/'\n", + "response = urllib.request.urlopen(url)\n", + "html = response.read()\n", + "soup = BeautifulSoup(html, 'html.parser')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "print(soup.prettify())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/downloading-party/distribusi-test-files/UCU-Strikes-Back.jpeg b/downloading-party/distribusi-test-files/UCU-Strikes-Back.jpeg new file mode 100644 index 0000000..ad7b7dc Binary files /dev/null and b/downloading-party/distribusi-test-files/UCU-Strikes-Back.jpeg differ diff --git a/downloading-party/distribusi-test-files/Wave-particle_duality.gif b/downloading-party/distribusi-test-files/Wave-particle_duality.gif new file mode 100644 index 0000000..2baf229 Binary files /dev/null and b/downloading-party/distribusi-test-files/Wave-particle_duality.gif differ diff --git a/downloading-party/distribusi-test-files/dennis-tenen-plain-text-the-poetics-of-computation.pdf b/downloading-party/distribusi-test-files/dennis-tenen-plain-text-the-poetics-of-computation.pdf new file mode 100644 index 0000000..fb7ecf1 Binary files /dev/null and b/downloading-party/distribusi-test-files/dennis-tenen-plain-text-the-poetics-of-computation.pdf differ diff --git a/downloading-party/distribusi-test-files/newest patch_floor_rain.txt b/downloading-party/distribusi-test-files/newest patch_floor_rain.txt new file mode 100644 index 0000000..9e406a1 --- /dev/null +++ b/downloading-party/distribusi-test-files/newest patch_floor_rain.txt @@ -0,0 +1,74 @@ +================================================================================== +================================================================================== +================================================================================== +================================================================================== +================================================================================== +================================================================================== +=====================================autonomy===================================== +==================================autonomyequality================================ +==================================autonomysocially================================ +===============================sociallymutuallysocially=========================== +============================sociallymutuallyautonomyunderway====================== +============================globallymutuallyAutonomyunderway====================== +==========================Autonomymutuallyequalityunderwayautonomy================ +=========================sociallyautonomysociallyunderwayequality================= +================================================================================== +================================================================================== +================================================================================== +================================================================================== +================================================================================== +==========================================================================mutually +==================================================================autonomyequality +==================================================================humanityautonomy +==========================================================sociallymutuallysocially +==================================================sociallymutuallysociallyunderway +==================================================autonomymutuallyAutonomyunderway +==========================================Autonomymutuallyequalityunderwayautonomy +==========================================sociallyautonomygloballyunderwayequality +=============================================================//===/========//=/==/ +====================================================================//===/====/=// +===========================================================================/===//= +================================================================================== +==========================================================================/======= +================================================================================== +================================================================================== +=============================mutually===============================/============= +==========================autonomyequality====================================/=== +==========================sociallyautonomy======================================== +=======================sociallymutuallysocially========================/========== +====================sociallymutuallysociallyunderway============================== +====================globallymutuallyAutonomyunderway============================== +==================Autonomymutuallyequalityautonomyautonomy======================== +==================sociallyautonomysociallyunderwayequality======================== +========================/////=========//===/====================================== +=========================///======/=============================================== +========================/=/=======//============================================== +======================/=====/===================================================== +========================/========================================================= +================================================================================== +================================================================================== +=======================/============================mutually====================== +==============================================autonomyequality==================== +===========================/==================sociallysocially==================== +===================/======================sociallymutuallysocially================ +========================================sociallymutuallysociallyunderway========== +=====================================sociallymutuallyAutonomyunderway============= +====================================Autonomymutuallyequalityunderwayautonomy====== +==================================autonomyAutonomyautonomysociallyunderwayequality +==================================underwayAutonomyautonomysociallyunderwayequality +==================================sociallyequalityautonomyunderwayunderwayequality +==========================equalityautonomymutuallysociallysociallyunderwayequality +==========================mutuallyautonomyequalitysociallyunderwaymutuallymutually +==========================Autonomyunderwaymutuallysociallyautonomyunderwaysocially +==================sociallymutuallyunderwayautonomyequalityautonomymutuallyAutonomy +==================sociallymutuallyunderwayautonomyequalityautonomymutuallyAutonomy +==========equalitysociallymutuallyunderwayautonomyAutonomyautonomysociallyequality +==========underwayequalitysociallyautonomyautonomyautonomyunderwayequalitysocially +==========underwayAutonomyhumanityautonomygloballyautonomyhumanityequalitysocially +==========underwayequalityautonomyautonomyautonomyautonomyautonomyequalitysocially +========lygloballyequalitysociallyautonomyautonomyautonomyunderwayequalitysocially +========underwayequalitysociallyautonomyautonomygloballyunderwayequalitysociallyhu +========tyunderwayequalitysociallyautonomyautonomyautonomyunderwayequalitysocially +========underwayequalitysociallyautonomyAutonomyautonomyunderwayequalitysociallyau +autonomyunderwayequalitysociallyautonomygloballyautonomyunderwayequalitysociallyso +ygloballyunderwayequalitysociallyautonomygloballyunderwayunderwayequalitysociallya \ No newline at end of file diff --git a/downloading-party/distribusi-test-files/tools-shapes-practice-shapes-tools-osp.png b/downloading-party/distribusi-test-files/tools-shapes-practice-shapes-tools-osp.png new file mode 100644 index 0000000..c23cefc Binary files /dev/null and b/downloading-party/distribusi-test-files/tools-shapes-practice-shapes-tools-osp.png differ diff --git a/downloading-party/jinja-template.html b/downloading-party/jinja-template.html new file mode 100644 index 0000000..988266a --- /dev/null +++ b/downloading-party/jinja-template.html @@ -0,0 +1,10 @@ + + + + + This is my page generated with Jinja! + + +

Hello {{ name }}!

+ + diff --git a/downloading-party/jinja-templates.ipynb b/downloading-party/jinja-templates.ipynb new file mode 100644 index 0000000..b312deb --- /dev/null +++ b/downloading-party/jinja-templates.ipynb @@ -0,0 +1,254 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Jinja templates" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from jinja2 import Template " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jinja\n", + "\n", + "https://jinja.palletsprojects.com/en/2.11.x/\n", + "\n", + "> Jinja is a modern and designer-friendly templating language for Python (...). It is fast, widely used and secure with the optional sandboxed template execution environment:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Basic usage of Jinja\n", + "template = Template('Hello {{ name }}!')\n", + "you = 'XPUB1'\n", + "output = template.render(name=you)\n", + "print(output)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Jinja is very useful for generating HTML pages\n", + "# Let's start with a HTML snippet: \n", + "template = Template('

Hello {{ name }}!

')\n", + "you = 'XPUB1'\n", + "html = template.render(name=you)\n", + "print(html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# But these templates can be much longer.\n", + "# Let's now use a separate jinja-template.html file, as our template:\n", + "template_file = open('jinja-template.html').read()\n", + "template = Template(template_file)\n", + "you = 'XPUB1'\n", + "html = template.render(name=you)\n", + "print(html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## For loops & if / else" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### For loops\n", + "\n", + "For loops are written in a *pythonic* way.\n", + "\n", + "What is different, is the \"closing tag\" `{% endfor %}`.\n", + "\n", + "```\n", + "{% for item in list %}\n", + " \n", + " {{ item }}\n", + " \n", + "{% endfor %}\n", + "```\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "template = Template('''\n", + "\n", + "

Hello to

\n", + "\n", + "{% for name in XPUB1 %}\n", + "\n", + "

{{ name }}

\n", + "\n", + "{% endfor %}\n", + "\n", + "''')\n", + "XPUB1 = ['you', 'you', 'you']\n", + "html = template.render(XPUB1=XPUB1)\n", + "print(html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Or display it in HTML here in the notebook directly :)\n", + "from IPython.core.display import HTML\n", + "HTML(html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### if / else\n", + "\n", + "Also if / else statements are written in a *pythonic* way.\n", + "\n", + "The only thing again that is new, is the \"closing tag\" `{% endif %}`.\n", + "\n", + "```\n", + "{% for item in list %}\n", + " \n", + " {% if 'hello' in item %}\n", + "\n", + "

HELLO

\n", + " \n", + " {% else %}\n", + " \n", + " {{ item }}\n", + " \n", + " {% endif %}\n", + " \n", + "{% endfor %}\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "template = Template('''\n", + "\n", + "

Hello to

\n", + "\n", + "{% for name in XPUB1 %}\n", + "\n", + " {% if name == 'me' %}\n", + "\n", + "

{{ name }}

\n", + " \n", + " {% else %}\n", + "\n", + "

{{ name }}

\n", + " \n", + " {% endif %}\n", + "\n", + "{% endfor %}\n", + "\n", + "''')\n", + "XPUB1 = ['you', 'me', 'you']\n", + "html = template.render(XPUB1=XPUB1)\n", + "HTML(html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Further diving\n", + "\n", + "More syntax details can be found here: https://jinja.palletsprojects.com/en/2.11.x/templates/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/downloading-party/pirate-downloading-to-pdf.css b/downloading-party/pirate-downloading-to-pdf.css new file mode 100644 index 0000000..122089b --- /dev/null +++ b/downloading-party/pirate-downloading-to-pdf.css @@ -0,0 +1,13 @@ +@page { size: A4; + margin: 10mm; + background-color: pink; +} + +body{} + +img { + width: 100%; + height: auto; + page-break-before: always; +} + diff --git a/downloading-party/pirate-downloading-to-pdf.html b/downloading-party/pirate-downloading-to-pdf.html new file mode 100644 index 0000000..9d41847 --- /dev/null +++ b/downloading-party/pirate-downloading-to-pdf.html @@ -0,0 +1,17 @@ + + + + + This is my page generated with Jinja! + + + + + {% for source in sources %} + + + +{% endfor %} + + + diff --git a/downloading-party/pirate-downloading-to-pdf.ipynb b/downloading-party/pirate-downloading-to-pdf.ipynb new file mode 100644 index 0000000..1af7155 --- /dev/null +++ b/downloading-party/pirate-downloading-to-pdf.ipynb @@ -0,0 +1,130 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from jinja2 import Template \n", + "from urllib.parse import urlparse" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "from bs4 import BeautifulSoup\n", + "\n", + "url = \"https://archive.org/details/cd-roms?and[]=mediatype%3A%22image%22\"\n", + "response = requests.get(url)\n", + "html = response.content\n", + "soup = BeautifulSoup(html, 'html.parser')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "titles = scraped.find_all(\"img\", src=True)\n", + "titles2 = scraped.find_all(\"img\", source=True)\n", + "\n", + "allimages = titles + titles2\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sources = []\n", + "domain = urlparse(url)\n", + "full_domain = domain.scheme + '://' + domain.hostname\n", + "\n", + "\n", + "for img in allimages:\n", + " source = img.get ('src')\n", + " if not source:\n", + " source=img.get('source')\n", + " if source.startswith('/'):\n", + " source=full_domain+source\n", + " \n", + " sources.append(source)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "template_file = open('pirate-downloading-to-pdf.html').read()\n", + "template = Template(template_file)\n", + "\n", + "html = template.render(sources=sources)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#Save\n", + "output = open('piratezine.html', 'w')\n", + "output.write(html)\n", + "output.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! weasyprint piratezine.html -s pirate-downloading-to-pdf.css piratezine.pdf" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/download_all_image_from_wikipedia_page.ipynb b/mediawiki-api/.ipynb_checkpoints/download_all_image_from_wikipedia_page-checkpoint.ipynb similarity index 100% rename from download_all_image_from_wikipedia_page.ipynb rename to mediawiki-api/.ipynb_checkpoints/download_all_image_from_wikipedia_page-checkpoint.ipynb diff --git a/mediawiki-api.ipynb b/mediawiki-api/.ipynb_checkpoints/mediawiki-api-checkpoint.ipynb similarity index 100% rename from mediawiki-api.ipynb rename to mediawiki-api/.ipynb_checkpoints/mediawiki-api-checkpoint.ipynb diff --git a/mediawiki-api/.ipynb_checkpoints/mediawiki-api-download-images-checkpoint.ipynb b/mediawiki-api/.ipynb_checkpoints/mediawiki-api-download-images-checkpoint.ipynb new file mode 100644 index 0000000..9ea8eca --- /dev/null +++ b/mediawiki-api/.ipynb_checkpoints/mediawiki-api-download-images-checkpoint.ipynb @@ -0,0 +1,156 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Download Images from one Wikipage\n", + "\n", + "(using the Mediawiki API)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import urllib\n", + "import json\n", + "from IPython.display import JSON # iPython JSON renderer\n", + "import sys" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### API request > list of image filenames" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wiki = 'https://pzwiki.wdka.nl/mw-mediadesign' # no slash at the end!\n", + "page = 'Category:Situationist_Times'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "url = f'{ wiki }/api.php?action=parse&prop=images&page={ page }&format=json'\n", + "response = urllib.request.urlopen(url).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "images = data['parse']['images']\n", + "# images = ['FILENAME.jpg', 'FILENAME2.jpg']\n", + "\n", + "# We have our variable \"images\"\n", + "print(images)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Downloading the image files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Let's loop through this list and download each image!\n", + "for filename in images:\n", + " print('Downloading:', filename)\n", + " \n", + " filename = filename.replace(' ', '_') # let's replace spaces again with _\n", + " filename = filename.replace('.jpg', '').replace('.gif', '').replace('.png','').replace('.jpeg','').replace('.JPG','').replace('.JPEG','') # and let's remove the file extension\n", + " \n", + " # first we search for the full filename of the image\n", + " url = f'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&list=allimages&aifrom={ filename }&format=json'\n", + " response = urllib.request.urlopen(url).read()\n", + " data = json.loads(response)\n", + " \n", + " # we select the first search result\n", + " # (assuming that this is the image we are looking for)\n", + " image = data['query']['allimages'][0]\n", + " \n", + " # then we download the image\n", + " image_url = image['url']\n", + " image_filename = image['name']\n", + " image_response = urllib.request.urlopen(image_url).read()\n", + " \n", + " # and we save it as a file\n", + " out = open(image_filename, 'wb') \n", + " out.write(image_response)\n", + " out.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/mediawiki-api-dérive.ipynb b/mediawiki-api/.ipynb_checkpoints/mediawiki-api-dérive-checkpoint.ipynb similarity index 100% rename from mediawiki-api-dérive.ipynb rename to mediawiki-api/.ipynb_checkpoints/mediawiki-api-dérive-checkpoint.ipynb diff --git a/mediawiki-api-part-2.ipynb b/mediawiki-api/.ipynb_checkpoints/mediawiki-api-part-2-checkpoint.ipynb similarity index 99% rename from mediawiki-api-part-2.ipynb rename to mediawiki-api/.ipynb_checkpoints/mediawiki-api-part-2-checkpoint.ipynb index 2d840ad..a338f36 100644 --- a/mediawiki-api-part-2.ipynb +++ b/mediawiki-api/.ipynb_checkpoints/mediawiki-api-part-2-checkpoint.ipynb @@ -13,6 +13,7 @@ "source": [ "This notebook:\n", "\n", + "* continues with exploring the connections between `Hypertext` & `Dérive`\n", "* uses the `query` & `parse` actions of the `MediaWiki API`, which we can use to work with wiki pages as (versioned and hypertextual) technotexts\n", "\n", "## Epicpedia\n", diff --git a/mediawiki-api/download_all_image_from_wikipedia_page.ipynb b/mediawiki-api/download_all_image_from_wikipedia_page.ipynb new file mode 100644 index 0000000..6b3c883 --- /dev/null +++ b/mediawiki-api/download_all_image_from_wikipedia_page.ipynb @@ -0,0 +1,217 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import urllib\n", + "import json\n", + "from IPython.display import JSON # iPython JSON renderer\n", + "import sys" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Download all the images from one wikipedia page :)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wikipediapage = 'Sculpture'\n", + "\n", + "#https://en.wikipedia.org/wiki/Sculpture" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "url = f'https://en.wikipedia.org/w/api.php?action=parse&prop=images&page={ wikipediapage }&format=json'\n", + "response = urllib.request.urlopen(url).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# We have our variable \"images\"\n", + "images = data['parse']['images']\n", + "\n", + "print(images)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "#ctrl + ? => remove all" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# Let's loop through this list and download each image!\n", + "for filename in images:\n", + " try:\n", + " print('Downloading:', filename)\n", + "\n", + " filename = filename.replace(' ', '_') # let's replace spaces again with _\n", + " filename = filename.replace('.jpg', '').replace('.gif', '').replace('.png','').replace('.jpeg','').replace('.JPG','').replace('.JPEG','') # and let's remove the file extension\n", + "\n", + " # first we search for the full URL of the image\n", + " url = f'https://commons.wikimedia.org/w/api.php?action=query&list=allimages&aifrom={ filename }&format=json'\n", + " response = urllib.request.urlopen(url).read()\n", + " data = json.loads(response)\n", + " image = data['query']['allimages'][0]\n", + "\n", + " # then we download the image\n", + " image_url = image['url']\n", + " image_filename = image['name']\n", + " image_response = urllib.request.urlopen(image_url).read()\n", + "\n", + " # and we save it as a file\n", + " out = open(\"wikiimage/\"+image_filename, 'wb') \n", + " out.write(image_response)\n", + " out.close()\n", + " \n", + " except:\n", + " error = sys.exc_info()[0]\n", + " print('Skipped:', image)\n", + " print('With the error:', error)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "html = ''\n", + "\n", + "for imagelink in images:\n", + " print(imagelink)\n", + " \n", + " # let's use the \"safe\" pagenames for the filenames \n", + " # by replacing the ' ' with '_'\n", + " filename = imagelink.replace(' ', '_')\n", + " \n", + " if '.pdf' in filename:\n", + " a=f''\n", + " else:\n", + " a = f''\n", + "\n", + " html += a\n", + " html += '\\n'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "output = open('wikiimage/imageimage.html', 'w')\n", + "output.write(html)\n", + "output.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#git pull\n", + "#git status\n", + "#git add FILENAME\n", + "#git commit -m \"write a msg\"\n", + "#git push" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/mediawiki-api-download-images.ipynb b/mediawiki-api/mediawiki-api-download-images.ipynb similarity index 51% rename from mediawiki-api-download-images.ipynb rename to mediawiki-api/mediawiki-api-download-images.ipynb index 97568e4..9ea8eca 100644 --- a/mediawiki-api-download-images.ipynb +++ b/mediawiki-api/mediawiki-api-download-images.ipynb @@ -4,105 +4,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Mediawiki API Download Images" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Let's first test it with one image.\n", - "# For example: File:Debo 009 05 01.jpg\n", + "# Download Images from one Wikipage\n", "\n", - "filename = 'Debo 009 05 01.jpg'\n", - "filename = filename.replace(' ', '_') # let's replace spaces again with _\n", - "filename = filename.replace('.jpg', '') # and let's remove the file extension" + "(using the Mediawiki API)" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# We cannot ask the API for the URL of a specific image (:///), but we can still find it using the \"aifrom=\" parameter.\n", - "# Note: ai=allimages\n", - "url = f'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&list=allimages&aifrom={ filename }&format=json'\n", - "response = urllib.request.urlopen(url).read()\n", - "data = json.loads(response)\n", - "JSON(data)" + "import urllib\n", + "import json\n", + "from IPython.display import JSON # iPython JSON renderer\n", + "import sys" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Select the first result [0], let's assume that that is always the right image that we need :)\n", - "image = data['query']['allimages'][0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(image)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(image['url'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now we can use this URL to download the images!" + "### API request > list of image filenames" ] }, { @@ -111,25 +34,20 @@ "metadata": {}, "outputs": [], "source": [ - "image_url = image['url']\n", - "image_filename = image['name']\n", - "image_response = urllib.request.urlopen(image_url).read() # We use urllib for this again, this is basically our tool to download things from the web !" + "wiki = 'https://pzwiki.wdka.nl/mw-mediadesign' # no slash at the end!\n", + "page = 'Category:Situationist_Times'" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "print(image_response)" + "url = f'{ wiki }/api.php?action=parse&prop=images&page={ page }&format=json'\n", + "response = urllib.request.urlopen(url).read()\n", + "data = json.loads(response)\n", + "JSON(data)" ] }, { @@ -138,33 +56,18 @@ "metadata": {}, "outputs": [], "source": [ - "out = open(image_filename, 'wb') # 'wb' stands for 'write bytes', we basically ask this file to accept data in byte format\n", - "out.write(image_response)\n", - "out.close()" + "images = data['parse']['images']\n", + "# images = ['FILENAME.jpg', 'FILENAME2.jpg']\n", + "\n", + "# We have our variable \"images\"\n", + "print(images)" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Download all the images of our page" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# We have our variable \"images\"\n", - "print(images)" + "### Downloading the image files" ] }, { @@ -180,10 +83,13 @@ " filename = filename.replace(' ', '_') # let's replace spaces again with _\n", " filename = filename.replace('.jpg', '').replace('.gif', '').replace('.png','').replace('.jpeg','').replace('.JPG','').replace('.JPEG','') # and let's remove the file extension\n", " \n", - " # first we search for the full URL of the image\n", + " # first we search for the full filename of the image\n", " url = f'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&list=allimages&aifrom={ filename }&format=json'\n", " response = urllib.request.urlopen(url).read()\n", " data = json.loads(response)\n", + " \n", + " # we select the first search result\n", + " # (assuming that this is the image we are looking for)\n", " image = data['query']['allimages'][0]\n", " \n", " # then we download the image\n", diff --git a/mediawiki-api/mediawiki-api-dérive.ipynb b/mediawiki-api/mediawiki-api-dérive.ipynb new file mode 100644 index 0000000..89bfe57 --- /dev/null +++ b/mediawiki-api/mediawiki-api-dérive.ipynb @@ -0,0 +1,464 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# MediaWiki API (Dérive)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook:\n", + "\n", + "* continues with exploring the connections between `Hypertext` & `Dérive`\n", + "* saves (parts of) wiki pages as html files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import urllib\n", + "import json\n", + "from IPython.display import JSON # iPython JSON renderer\n", + "import sys" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Parse" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's use another wiki this time: the English Wikipedia.\n", + "\n", + "You can pick any page, i took the Hypertext page for this notebook as an example: https://en.wikipedia.org/wiki/Hypertext" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# parse the wiki page Hypertext\n", + "request = 'https://en.wikipedia.org/w/api.php?action=parse&page=Hypertext&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Wiki links dérive\n", + "\n", + "Select the wiki links from the `data` response:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "links = data['parse']['links']\n", + "JSON(links)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's save the links as a list of pagenames, to make it look like this:\n", + "\n", + "`['hyperdocuments', 'hyperwords', 'hyperworld']`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# How is \"links\" structured now?\n", + "print(links)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It helps to copy paste a small part of the output first:\n", + "\n", + "`[{'ns': 0, 'exists': '', '*': 'Metatext'}, {'ns': 0, '*': 'De man met de hoed'}]`\n", + "\n", + "and to write it differently with indentation:\n", + "\n", + "```\n", + "links = [\n", + " { \n", + " 'ns' : 0,\n", + " 'exists' : '',\n", + " '*', 'Metatext'\n", + " }, \n", + " {\n", + " 'ns' : 0,\n", + " 'exists' : '',\n", + " '*' : 'De man met de hoed'\n", + " } \n", + "]\n", + "```\n", + "\n", + "We can now loop through \"links\" and add all the pagenames to a new list called \"wikilinks\"." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "wikilinks = []\n", + "\n", + "for link in links:\n", + " \n", + " print('link:', link)\n", + " \n", + " for key, value in link.items():\n", + " print('----- key:', key)\n", + " print('----- value:', value)\n", + " print('-----')\n", + " \n", + " pagename = link['*']\n", + " print('===== pagename:', pagename)\n", + " \n", + " wikilinks.append(pagename)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "wikilinks" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving the links in a HTML page\n", + "\n", + "Let's convert the list of pagenames into HTML link elements (``):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "html = ''\n", + "\n", + "for wikilink in wikilinks:\n", + " print(wikilink)\n", + " \n", + " # let's use the \"safe\" pagenames for the filenames \n", + " # by replacing the ' ' with '_'\n", + " filename = wikilink.replace(' ', '_')\n", + " \n", + " a = f'{ wikilink }'\n", + " html += a\n", + " html += '\\n'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "print(html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Let's save this page in a separate folder, i called it \"mediawiki-api-dérive\"\n", + "# We can make this folder here using a terminal command, but you can also do it in the interface on the left\n", + "! mkdir mediawiki-api-dérive" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "output = open('mediawiki-api-dérive/Hypertext.html', 'w')\n", + "output.write(html)\n", + "output.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recursive parsing\n", + "\n", + "We can now repeat the steps for each wikilink that we collected!\n", + "\n", + "We can make an API request for each wikilink, \\\n", + "ask for all the links on the page \\\n", + "and save it as an HTML page." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# First we save the Hypertext page again:\n", + "\n", + "startpage = 'Hypertext'\n", + "\n", + "# parse the first wiki page\n", + "request = f'https://en.wikipedia.org/w/api.php?action=parse&page={ startpage }&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)\n", + "\n", + "# select the links\n", + "links = data['parse']['links']\n", + "\n", + "# turn it into a list of pagenames\n", + "wikilinks = []\n", + "for link in links:\n", + " pagename = link['*']\n", + " wikilinks.append(pagename)\n", + "\n", + "# turn the wikilinks into a set of links\n", + "html = ''\n", + "for wikilink in wikilinks:\n", + " filename = wikilink.replace(' ', '_')\n", + " a = f'{ wikilink }'\n", + " html += a\n", + " html += '\\n'\n", + "\n", + "# save it as a HTML page\n", + "startpage = startpage.replace(' ', '_') # let's again stay safe on the filename side\n", + "output = open(f'mediawiki-api-dérive/{ startpage }.html', 'w')\n", + "output.write(html)\n", + "output.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Then we loop through the list of wikilinks\n", + "# and repeat the steps for each page\n", + " \n", + "for wikilink in wikilinks:\n", + " \n", + " # let's copy the current wikilink pagename, to avoid confusion later\n", + " currentwikilink = wikilink \n", + " print('Now requesting:', currentwikilink)\n", + " \n", + " # parse this wiki page\n", + " wikilink = wikilink.replace(' ', '_')\n", + " request = f'https://en.wikipedia.org/w/api.php?action=parse&page={ wikilink }&format=json'\n", + " \n", + " # --> we insert a \"try and error\" condition, \n", + " # to catch errors in case a page does not exist \n", + " try: \n", + " \n", + " # continue the parse request\n", + " response = urllib.request.urlopen(request).read()\n", + " data = json.loads(response)\n", + " JSON(data)\n", + "\n", + " # select the links\n", + " links = data['parse']['links']\n", + "\n", + " # turn it into a list of pagenames\n", + " wikilinks = []\n", + " for link in links:\n", + " pagename = link['*']\n", + " wikilinks.append(pagename)\n", + "\n", + " # turn the wikilinks into a set of links\n", + " html = ''\n", + " for wikilink in wikilinks:\n", + " filename = wikilink.replace(' ', '_')\n", + " a = f'{ wikilink }'\n", + " html += a\n", + " html += '\\n'\n", + "\n", + " # save it as a HTML page\n", + " currentwikilink = currentwikilink.replace(' ', '_') # let's again stay safe on the filename side\n", + " output = open(f'mediawiki-api-dérive/{ currentwikilink }.html', 'w')\n", + " output.write(html)\n", + " output.close()\n", + " \n", + " except:\n", + " error = sys.exc_info()[0]\n", + " print('Skipped:', wikilink)\n", + " print('With the error:', error)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## What's next?\n", + "\n", + "?\n", + "\n", + "You could add more loops to the recursive parsing, adding more layers ...\n", + "\n", + "You could request all images of a page (instead of links) ...\n", + "\n", + "or something else the API offers ... (contributors, text, etc)\n", + "\n", + "or ..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/mediawiki-api/mediawiki-api-part-2.ipynb b/mediawiki-api/mediawiki-api-part-2.ipynb new file mode 100644 index 0000000..6b4879d --- /dev/null +++ b/mediawiki-api/mediawiki-api-part-2.ipynb @@ -0,0 +1,438 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# MediaWiki API (part 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook:\n", + "\n", + "* uses the `query` & `parse` actions of the `MediaWiki API`, which we can use to work with wiki pages as (versioned and hypertextual) technotexts\n", + "\n", + "## Epicpedia\n", + "\n", + "Reference: Epicpedia (2008), Annemieke van der Hoek \\\n", + "(from: https://diversions.constantvzw.org/wiki/index.php?title=Eventual_Consistency#Towards_diffractive_technotexts)\n", + "\n", + "> In Epicpedia (2008), Annemieke van der Hoek creates a work that makes use of the underlying history that lies beneath the surface of each Wikipedia article.[20] Inspired by the work of Berthold Brecht and the notion of Epic Theater, Epicpedia presents Wikipedia articles as screenplays, where each edit becomes an utterance performed by a cast of characters (both major and minor) that takes place over a span of time, typically many years. The work uses the API of wikipedia to retrieve for a given article the sequence of revisions, their corresponding user handles, the summary message (that allows editors to describe the nature of their edit), and the timestamp to then produce a differential reading. \n", + "\n", + "![](https://diversions.constantvzw.org/wiki/images/b/b0/Epicpedia_EpicTheater02.png)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import urllib\n", + "import json\n", + "from IPython.display import JSON # iPython JSON renderer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Query & Parse" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will work again with the `Dérive` page on the wiki: https://pzwiki.wdka.nl/mediadesign/D%C3%A9rive (i moved it here, to make the URL a bit simpler)\n", + "\n", + "And use the `API help page` on the PZI wiki as our main reference: https://pzwiki.wdka.nl/mw-mediadesign/api.php" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# query the wiki page Dérive\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&titles=D%C3%A9rive&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# parse the wiki page Dérive\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=parse&page=D%C3%A9rive&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Links, contributors, edit history" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can ask the API for different kind of material/information about the page.\n", + "\n", + "Such as:\n", + "\n", + "* a list of wiki links\n", + "* a list of external links\n", + "* a list of images\n", + "* a list of edits\n", + "* a list of contributors\n", + "* page information\n", + "* reverse links (What links here?)\n", + "* ...\n", + "\n", + "We can use the query action again, to ask for these things:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# wiki links: prop=links\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&prop=links&titles=D%C3%A9rive&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# external links: prop=extlinks\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&prop=extlinks&titles=D%C3%A9rive&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/json": { + "batchcomplete": "", + "query": { + "pages": { + "33524": { + "images": [ + { + "ns": 6, + "title": "File:Debo 009 05 01.jpg" + }, + { + "ns": 6, + "title": "File:Sex-majik-2004.gif" + } + ], + "ns": 0, + "pageid": 33524, + "title": "Dérive" + } + } + } + }, + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": { + "application/json": { + "expanded": false, + "root": "root" + } + }, + "output_type": "execute_result" + } + ], + "source": [ + "# images: prop=images\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&prop=images&titles=D%C3%A9rive&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# edit history: prop=revisions\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&prop=revisions&titles=D%C3%A9rive&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# contributors: prop=contributors\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&prop=contributors&titles=D%C3%A9rive&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# page information: prop=info\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&prop=info&titles=D%C3%A9rive&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# reverse links (What links here?): prop=linkshere + lhlimit=25 (max. nr of results)\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&prop=linkshere&lhlimit=100&titles=Prototyping&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use the `data` responses in Python (and save data in variables)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# For example with the action=parse request\n", + "request = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=parse&page=D%C3%A9rive&format=json'\n", + "response = urllib.request.urlopen(request).read()\n", + "data = json.loads(response)\n", + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "text = data['parse']['text']['*']\n", + "print(text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "title = data['parse']['title']\n", + "print(title)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "images = data['parse']['images']\n", + "print(images)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use these variables to generate HTML pages " + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "# open a HTML file to write to \n", + "output = open('myfilename.html', 'w')" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2813" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# write to this HTML file you just opened\n", + "output.write(text)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "# close the file again (Jupyter needs this to actually write a file)\n", + "output.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use these variables to generate HTML pages (using the template language Jinja)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jinja (template language): https://jinja.palletsprojects.com/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/mediawiki-api/mediawiki-api.ipynb b/mediawiki-api/mediawiki-api.ipynb new file mode 100644 index 0000000..94043eb --- /dev/null +++ b/mediawiki-api/mediawiki-api.ipynb @@ -0,0 +1,731 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Today's iPython errors" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# to hide the warning for today\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\", category=DeprecationWarning)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# MediaWiki API" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Let's start with an API reqeust example, using the PZI wiki:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# When you visit .... https://pzwiki.wdka.nl/mw-mediadesign/ ........ the URL magically turns into ........ https://pzwiki.wdka.nl/mediadesign/Main_Page\n", + "# This is probably something configured on the server (which is the XPUB XVM server, the wiki is installed there)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How to access the API?\n", + "\n", + "# Visit in the browser: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "https://pzwiki.wdka.nl/mw-mediadesign/api.php (This is the main access point of the API of the PZI wiki.)\n", + "\n", + "https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&titles=Main%20page&format=json (This is an example of an API request.)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What's in this URL?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# api.php " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ?action=query" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# &" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# &titles=Main%page" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# &format=json" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Documentation page of the MediaWiki API: https://pzwiki.wdka.nl/mw-mediadesign/api.php" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dérive in the API" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Wander around in the documentation page, edit the URL, make a couple requests!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Try to use the actions: \"query\" and \"parse\". \n", + "# We will focus on these two today." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# (paste your requests on the pad)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use the API in a Notebook" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Using urllib & json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import urllib\n", + "import json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "url = 'https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=query&titles=Main%20page&format=json'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "request = urllib.request.urlopen(url).read()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data = json.loads(request)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Display JSON in Notebooks nicely, using iPython" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import JSON" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "JSON(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Try different *query* and *parse* actions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Let's write the URL in two parts:\n", + "# - main domain\n", + "# - API request" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wiki = 'https://pzwiki.wdka.nl/mw-mediadesign'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "query = f'{ wiki }/api.php?action=query&titles=Category:Situationist_Times&format=json'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "parse = f'{ wiki }/api.php?action=parse&page=Category:Situationist_Times&format=json'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "querylinks = f'{ wiki }/api.php?action=query&prop=links&titles=Main%20Page'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Documentation page for query: https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=help&modules=query\n", + "\n", + "Documentation page for parse: https://pzwiki.wdka.nl/mw-mediadesign/api.php?action=help&modules=parse" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# make the request here in the notebook\n", + "request = urllib.request.urlopen(url).read()\n", + "data = json.loads(request)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save HTML as files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# try to use .open() and .write() to open and write the HTML to a file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## $ cp to /var/www/html/PrototypingTimes/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Let's publish the HTML files that you just created" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# We can use terminal commands here (\"bash commands\" to be more precise), by using the \"!\" as the first character in a cell.\n", + "# For example:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! figlet hello" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# So, to copy files and folders over to the \"PrototypingTimes\" folder, we can use $ cp (from copy).\n", + "# The folder \"PrototypingTimes\" sits on the Sandbot server on this path: /var/www/html/PrototypingTimes/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# /var/www/html/PrototypingTimes/ == https://hub.xpub.nl/sandbot/PrototypingTimes/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# So to copy a file there, you can use this command:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! cp YOURFUNNYFILENAME.html /var/www/html/PrototypingTimes/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# And in case you want to copy over folders, you can use $ cp -r (-r for recursive)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! cp -r YOURFOLDERNAME /var/www/html/PrototypingTimes/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "### Let's also publish this notebook as .html file?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# First, we can convert it to a .html file, using jupyter command line tools:\n", + "# (https://nbconvert.readthedocs.io/en/latest/usage.html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! jupyter nbconvert YOURNOTEBOOK.ipynb --to html " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# And then, copy it to the /var/www/html/PrototypingTimes/ folder with $ cp (as we just did above)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/visceral-facades/visceral_facades.ipynb b/visceral-facades/visceral_facades.ipynb index ceb2a9a..43958c7 100644 --- a/visceral-facades/visceral_facades.ipynb +++ b/visceral-facades/visceral_facades.ipynb @@ -2,20 +2,35 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ - "import re\n", - "with open(\"Visceral_Facades.txt\") as f:\n", - " text = f.read()\n", + "import re, json\n", + "\n", + "def text_to_list_of_paragraphs(path):\n", + " with open(path) as f:\n", + " text = f.read()\n", "\n", - "tt = re.split(r\"\\n+\", text)" + " return re.split(r\"\\n+\", text)\n", + " \n", + "def text_to_list_of_sentences (path):\n", + " tt = text_to_list_of_paragraphs(path)\n", + " text = []\n", + " for para in tt:\n", + " ss = para.strip().split(\".\")\n", + " ss = [s.strip()+\".\" for s in ss if s.strip()]\n", + " text.append(ss)\n", + " return text\n", + "\n", + "los = text_to_list_of_sentences(\"Visceral_Facades.txt\")\n", + "with open(\"Visceral_Facades_los.json\", \"w\") as fout:\n", + " print (json.dumps(los, indent=2), file=fout)\n" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 32, "metadata": { "collapsed": true, "jupyter": { @@ -24,55 +39,1779 @@ }, "outputs": [ { - "data": { - "text/plain": [ - "[\"Visceral Facades: taking Matta-Clark's crowbar to software.\",\n", - " 'Architecture was the first art of measurement of time and space. Ancient megalithic structures such as Stonehenge are the ancestors of the machine you are reading this text on. Whereas computers build up from the scale of electrons rather than that of giant lumps of stone and the tasks they complete are abstract and changeable, rather than specific and singular, they both remain physical instantiations of abstract logic into which energy is fed in order to produce results to one or more of a range of potential calculations embodied in their structure.',\n", - " \"Nowadays, as films such as Die Hard and novels such as Gridlock are so keen to show us, buildings and telecommunications are profoundly interrelated. As architecture is caught up in the mesh of the 'immaterial', of security and communications systems, of gating and processing (think of an airport) its connection to its originary development as geometry realised in synthetic space becomes ever more apparent. The proliferation of special effects that effect consciousness of time and distance and the perception of the environment in a context where maximum stratification combines in the same device with maximum fluidity, is presented as an abrupt break with an older style of architecture wherein power can be deciphered by the maximum possession of space.\",\n", - " 'In a short story, Tangents, science fiction writer Greg Bear introduces four-dimensional beings into a three dimensional shape: something which he likens to looking at fish through the corner of an aquarium. The shape that these fourth dimensional beings appear in is a normal, two storey house. The house is gradually, neatly, Swiss-cheesed by a series of cones, columns, and spheres as the dimensions intersect.',\n", - " \"Possibly, this might be the kind of effect you'd worry about if you'd invited Gordon Matta-Clark around to your home. An artist who trained as an architect, Matta-Clark was born in New York City in March 1943 and died in 1978. His most prolific period, between 1971 and 1976, occurred within a rich context of experimental and anti-commercial dematerialization in both art and architecture, (although certainly within the field of 'authorised' architecture, much of this work remained on a theoretical and propositional basis). Matta-Clark carried out his investigations of architecture and space through performance, drawing, sculpture, photography, video, film and material interventions known as 'cuttings'.\",\n", - " 'One action carried out in 1974, Splitting, involved taking a simple detached wooden house in Englewood, a New York State dormitory town, and bisecting it. The house, already slated for demolition, is cut exactly in two, from the roof, down the walls and through the floors to the raised foundation of building blocks. In the short film which documents the process a shard of sunlight streams through the split, effacing the wall, energising the new structure. The next stage is to take the rear half of the house and, supporting it on jacks, gradually knock away the upper surface of the foundation at an angle of five degrees. The back of the house is then tilted away from the other half of the structure back onto the now sloping foundation. Throughout the film, Matta-Clark can be seen working away at the building. A scrawny longhair in jeans and boots doing with a simple toolkit the serious structural re-adjustment that only the most deranged of do-it-yourselfers can dream about.',\n", - " \"Another short film, Conical Intersect, made in 1975 documents an intervention which is even more reminiscent of the transdimensional interference of Tangents. Made during the Paris Biennial in the area of Les Halles, tellingly close to the construction of the Centre George Pompidou - a politically inspired scheme reminiscent of that other artiste démolisseur, Baron Hausmann - the cut probes into two adjoining seventeenth century 'mansions'. Appearing from the outside as a series of receding circles, the cut punctures the building at the fourth storey and moves upwards towards the sky. When the outer wall goes through, the film shows the trio of people working on the hole perform a brief can-can on a soon-to-be-demolished section of floor.\",\n", - " 'In a 1976 film, Substrait (Underground Dailies), Matta-Clark explored and documented some of the underground of New York City. Grand Central Station, 13th Street and the Croton Aqueduct are filmed to show the variety and complexity of the hidden spaces and tunnels in the metropolitan area. Somewhat reminiscent of the ultra-dull documentaries made by the Canadian National Film Board in the same period, this film develops an intimate concern with the material qualities of the structures under investigation, and perhaps provides for the New York sewage system a precursor to the geek art of the internet. It is possible to imagine a film of its travels through the nets made by a software worm, being of remarkable similarity.',\n", - " \"Some of Matta-Clark's work could have only been produced by someone deeply familiar with the strange reality of realty. In Reality Properties: Fake Estates he bought up fifteen minuscule sections of land that had been left over in property deals, or that teetered just off the edges of architectural plans drawn slightly out-of-whack: a foot strip down somebody's driveway, and a square foot of sidewalk, tiny sections of kerbs and gutters. Buying up this ludicrous empire was again part of Matta-Clark's project of the structural activation of severed surfaces. It is also an example of the idiosyncratic manipulation of rule-based behaviour to achieve different ends.\",\n", - " \"Along with the dematerialised art that provided a context in which this work can be sensed, the period it was produced in was also the peak of minimal art. Whilst Matta-Clark's work is in part concerned with formalism, the application of procedures and the revelation of structural properties, it is precisely because his work is formally non-reductive and purposely heterogenic that it is profoundly at variance to an art that was only supposed to speak of itself and of the immaculate connoisseurship of its audience. This is an artwork that is exactly the reverse of autonomous. It is openly dependent on a network of coincidences and interconnectedness: on being seen by chance passers-by; on the receipt or avoidance of bureaucratic permissions; on the functioning of recording devices; on good weather; on not being discovered when acting in secret; on the theatre of its enaction being an oxygenation of the still smouldering embers of history. At the same time as it articulates the space in sculptural terms it also complexifies it in terms of its placehood, as an object, and within its social, chronological and economic contexts.\",\n", - " 'Knowing that there is freedom in suprise, it is along this fault line of rationality and the non-rational that Gordon Matta-Clark runs his fingers. Fingers which he also uses to tease another split - that between art and architecture. Comparable to his relationship to minimal art, rather than partaking in the functionalist urban sublime of the glass and steel skyscraper typified in the architecture of Mies van der Rohe - with its interior opened to make it more governable - Matta-Clark\\'s work operates a dis-enclosure of urban space: its malfunctions, voids, shadows. The tension inherent in such spaces is portrayed well by Gilles Deleuze in describing \"any-space-whatever\" the half-urban, half-waste lands often used as sets and exteriors in post World War Two films: \"Any-space-whatever is a perfectly singular space, which has merely lost its homogeneity, that is, the principle of its metric relations or the connection of its own parts, so that linkages can be made in an infinite number of ways\" This tension between particularity and obliteration found in the European bombsite translated well into the conditions in which Matta-Clark worked out of necessity and choice: buildings eviscerated by the progress of urban restructuring.',\n", - " '\"There is a kind of complexity that comes from taking an otherwise completely normal, conventional, albeit anonymous situation and redefining it, retranslating it into overlapping and multiple readings of conditions past and present\"',\n", - " \"As an aside, this too easy lock-down into textuality implied by the use of the word 'reading' is of his time, (and one replicated in perpetuity by artists hungry for the valorising seal of textual authority) but it rather understates the multiple sensory affect of the work. It is this aspect, of working with material that is in the process of being made anonymous, generic - yet turning it into an engine of connotation - that is particularly suggestive for a context that, in its apparent dematerialization seems most likely to resist it: software.\",\n", - " 'Software lacks the easy evidence of time, of human habitation, of the connotations of familial, industrial or office life embedded in the structure of a building. As a geometry realised in synthetic space, it is an any-space-whatever, but dry-cleaned and prised out of time.',\n", - " 'Use of the computer happens at many levels, both hard and soft. A crucial difference with how we traditionally understand architecture, rather than what it is becoming under the impact of information technologies, is that everything necessarily happens at human scale. That the size, and to a certain extent the organisation, of people has a determining effect on the shape of the building. Conversely, the axiomatics that channel and produce the behaviour necessary for use of computers happen at both human and subscopic scale. The hard organs of the computer: mouse, keyboard, modem, microphone, monitor, though all matched to greater or lesser extents to human form, all snake back to the CPU.',\n", - " 'Whilst what is of interest here is an investigation of the moment of composition between user and computer, and not a reiteration of text-book schematics, it is worth noting that simply because they occur at the level of electrons the axes of software are impossible to find for the average user. Just as when watching a film we miss out the black lines in between the frames flashing past at 24 per second, the invisible walls of software are designed to remain inscrutable. However, the fact that these subscopic transformation of data inside the computer are simultaneously real and symbolic; where the most abstract of theoretical terms to be found in mathematics becomes a thing, allows the possibility of a kinaesthetic investigation. An investigation that opens up a chance for dialogue between the smooth running of the machine and material that might be thought of as contamination within the terms of its devices.',\n", - " \"Much of the 'legitimate' writing and artistic production on information technology is concerned with expanding the application of the theoretical devices used to recognise replication and simulation, (what constitutes 'the real') and of those used to recognise surveillance. These themes, carried over most commonly from debates around photography and architecture, are of course suggestive and in some cases useful, but in the easiness of their translation we should not forget that they are moving into a context that subsumes them and is not marked by their boundaries. In acknowledging the distinct interconnectedness of the symbolic and material, this is also an approach which is opposed to the conception of 'virtuality' being taken as the desired end state of digital technology: taking virtuality as a condition which is contained and made possible by the actuality of digital media.\",\n", - " 'To provide the skewed access to the machines that such an investigation requires we can siphon some fuel from the goings-on of Gordon Matta-Clark: use faults; disturb conventions; exploit idiosyncrasies.',\n", - " 'Faults arise in systems when the full consequences of technical changes are not followed through before the changes are made, or are deliberately covered up. This is an enormous game of hiding and finding being played by a cast of millions and one which has wide ramifications. Perhaps the most crucial faultlines being traced at the moment are those around security: the world of minutiae that compose the integrity of existence in dataspace and the way it maps back onto everyday life.',\n", - " 'The profoundest restructuring of existence is taking place at the levels of the electron and the gene. Technical complexity, commercial pressure and the mechanisms of expression management are blocking almost all real public discourse on the former. They are less able to do so to the latter.',\n", - " 'Whether radical or reactionary, traditional political structures have, either deliberately or through drastic relevance-decay, abdicated almost all decision making in these areas to commercial interests. From a similar catalogue of stock characters to that of the artist, the pariah/hero figure of the hacker has largely set the pace for any critical understanding of the changes happening in and between information technologies.',\n", - " 'Picking up a random copy of the hacker zine 2600 - summer 1996 - the scale and ramifications of issues being dealt with in this area becomes apparent. Subjects covered include: an editorial on the position of hackers in the legal system and media; the code of a LINUX program to block internet sites by flooding them with connection requests; a list of free phone carriers in Australia; acquiring phone services under imaginary names; the telecommunications infrastructure in Prague and Sarajevo; encryption; consumer data security; catching passwords to specific multi-user computer systems; passenger in-flight communications systems; phreaking smart pay-phones; starting a hacker scene; the transcription of part of a court case involving the show trial of hacker, Bernie S; plus pages of small ads and letters. (Perhaps noticeable in comparing the importance of these scenes with that of art is that the second-order commentary on the work comes mainly from the media/legal system rather than just critics).',\n", - " 'The faults identified by hackers and others, where ethico-aesthetic situations are compounded under sheer pressure into technical ones, are implicated in wider mechanisms. These technical situations can be investigated from any point or development within these wider mechanisms regardless of the degree of technical proficiency. Cracking open technical situations with the wider social conditions within which they occur is an increasingly necessary task. Doing so in a manner that creates a transversal relationship between different, perhaps walled-off, components, and that intimately works the technical with other kinds of material or symbolic devices is something that remains to be developed. Tracking the faults, the severed surfaces, of technology is one way in which this can begin to be done.',\n", - " 'This intimacy, as well as concerning itself with the cracks and disjunctures, the faults in systems, can also become involved in situations where they appear to be most smooth. For the average user, the conventions of personal computers appear secure, rational, almost natural, if a little awkward and tricky at times. Like many social protocols, computer use is a skill which is forgetful of its acquisition. Perhaps that user can remember back to when they first got hold of a machine, when they were waving a mouse in the air to get the cursor to move towards them; afraid to touch the wrong key in case it damaged something; saving files all over the place; trying to draw curves in Pagemaker; putting floppies in upside-down; trying to work a cracked copy of CuBase with something missing; learning how to conform to the machine in order to make the machine conform to them...',\n", - " \"In computer interface design the form-function fusion is made on the basis of averages, a focus grouped reality based on peoples' understanding of a context in which it is impossible for them to function unless they develop the understanding already been mapped out for them. Perhaps in this context, the user will always be the ideal user, because if they are not ideal - if, within this context at least, they do not conform to the ideal - they won't be a user.\",\n", - " \"Interface design is a discipline that aspires to saying nothing. Instead of trying to crack this invisibility, one technique for investigation is to tease it into overproduction. Why use one mouse-click when ten-thousand will do? Why use any visual information when navigation is perfectly possible with sound alone? Why just look at the interface, why not print it out and wear it? Why read text on screen when a far better technology is paper? Why use a cursor when the object you're actually pointing at can function perfectly well to indicate the mouse position?\",\n", - " 'In any other social context, what because of the arbitrary nature of the abstract machine appear as protocols, would be revealed as mannerisms. (Take a fast taxi through the ruined neighbourhoods of cyberspace by travelling through emulators of old computers: punch a hole in the surface of your shiny new machine by loading up the black hole of a 1k ZX81). When the construction of machines from the fundamental objects of the hardware: bits, bytes, words, addresses, upwards are realised to be synthetic rather than given, or even necessarily rational - though produced through the application of rationalisation, logic - they become subject to wider possibilities for change. Software as an aggregate of very small sensory experiences and devices becomes an engine, not just of connotation, but of transformation.',\n", - " 'Some of those transformations in occurrence can be sensed in the sheer idiosyncrasy of much software. In the Atrocity Exhibition and other books, J.G. Ballard mixes flat, technical descriptions of body positions as they come into composition with the synthetic geometry of architecture, automobiles, furnishings, to produce an investigation of machined erotics. He continues and intensifies the Surrealist stratagem of cutting together transgressed functionalities in order to regain entry to the order of the symbolic. To an objective observer, the transitory point at which a thigh comes into convergence with a table also suggests the way in which the original Microsoft Windows interface was bolted on top of the old DOS language. The tectonic impact of two neural landscapes performs an operation called progress. The software is tricked into doing something more than it was intended for. Instead of dramatic breaks, hacks and incrementally adaptive mutations are often the way things are made to move forward. (For instance on Apple computers, the desktop is already being bypassed by the absorption of some of the functions of the finder into various applications. From being a grossly over-metaphoric grand entrance hall, it has become a back alley). When they work well they are elegant usable collages. Often they are botch jobs. In both cases, the points at which the systems mesh, collide, or repel, can, at the points of confused demarcation, produce secret gardens, car parks, lamps that fuck.',\n", - " 'Idiosyncrasies can also develop when a software system is applied to a situation in toto. Perhaps most obviously, databases. The production of software dedicated to knowledge organisation and information retrieval, a field largely seen as the domain of linguists and computer scientists, immediately brings with it a range of problematics that are at once both cultural and technical. The technology underlying search engines and databases - set theory - is based on creating classifications of information according to arbitrarily or contingently meaningful schemes. It is in the application and development of those schemes with all their inevitable biases and quirks that the aesthetics of classification lies.',\n", - " 'Attuned to quantifying; organising; isolating and drawing into relationships, particular cases of the possible and working them till they bleed some kind of relevance, databases exist firmly on the cusp of the rational and non-rational. When the Subjective Exercise Experiences Scale locks onto the Human Genome Initiative processing library stock-holding data: prepare for something approaching poetry.',\n", - " \"Perhaps in some ways sensing into the future this destratification of conventions is the architecture of the internet. This, (almost despite its position within and between various political, commercial and bureaucratic formations) after all, is a network which functions on a basis of being broken, continuously finding the shortest route between nodes: even as a squatter will always see the empty buildings on any street before those that are full. At these shifting, transitory points where sensoriums intermesh, repel, clash and resynthesize are the possibilities for a ludic transdimensionality. Knock through a wall, and beyond the clouds of brick dust clogging up and exciting your eyes, tongue, palate and throat, there's another universe: an empty, unclassifiable complex seething with life.\",\n", - " 'Matthew Fuller, May 1997',\n", - " 'I/O/D ']" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + " [\n", + " [\n", + " \"Visceral Facades: taking Matta-Clark's\",\n", + " \"crowbar to software.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Architecture was the first art of\",\n", + " \"measurement of time and space.\"\n", + " ],\n", + " [\n", + " \"Ancient megalithic structures such as\",\n", + " \"Stonehenge are the ancestors of the\",\n", + " \"machine you are reading this text on.\"\n", + " ],\n", + " [\n", + " \"Whereas computers build up from the\",\n", + " \"scale of electrons rather than that of\",\n", + " \"giant lumps of stone and the tasks they\",\n", + " \"complete are abstract and changeable,\",\n", + " \"rather than specific and singular, they\",\n", + " \"both remain physical instantiations of\",\n", + " \"abstract logic into which energy is fed\",\n", + " \"in order to produce results to one or\",\n", + " \"more of a range of potential\",\n", + " \"calculations embodied in their\",\n", + " \"structure.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Nowadays, as films such as Die Hard and\",\n", + " \"novels such as Gridlock are so keen to\",\n", + " \"show us, buildings and\",\n", + " \"telecommunications are profoundly\",\n", + " \"interrelated.\"\n", + " ],\n", + " [\n", + " \"As architecture is caught up in the mesh\",\n", + " \"of the 'immaterial', of security and\",\n", + " \"communications systems, of gating and\",\n", + " \"processing (think of an airport) its\",\n", + " \"connection to its originary development\",\n", + " \"as geometry realised in synthetic space\",\n", + " \"becomes ever more apparent.\"\n", + " ],\n", + " [\n", + " \"The proliferation of special effects\",\n", + " \"that effect consciousness of time and\",\n", + " \"distance and the perception of the\",\n", + " \"environment in a context where maximum\",\n", + " \"stratification combines in the same\",\n", + " \"device with maximum fluidity, is\",\n", + " \"presented as an abrupt break with an\",\n", + " \"older style of architecture wherein\",\n", + " \"power can be deciphered by the maximum\",\n", + " \"possession of space.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"In a short story, Tangents, science\",\n", + " \"fiction writer Greg Bear introduces\",\n", + " \"four-dimensional beings into a three\",\n", + " \"dimensional shape: something which he\",\n", + " \"likens to looking at fish through the\",\n", + " \"corner of an aquarium.\"\n", + " ],\n", + " [\n", + " \"The shape that these fourth dimensional\",\n", + " \"beings appear in is a normal, two storey\",\n", + " \"house.\"\n", + " ],\n", + " [\n", + " \"The house is gradually, neatly, Swiss-\",\n", + " \"cheesed by a series of cones, columns,\",\n", + " \"and spheres as the dimensions intersect.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Possibly, this might be the kind of\",\n", + " \"effect you'd worry about if you'd\",\n", + " \"invited Gordon Matta-Clark around to\",\n", + " \"your home.\"\n", + " ],\n", + " [\n", + " \"An artist who trained as an architect,\",\n", + " \"Matta-Clark was born in New York City in\",\n", + " \"March 1943 and died in 1978.\"\n", + " ],\n", + " [\n", + " \"His most prolific period, between 1971\",\n", + " \"and 1976, occurred within a rich context\",\n", + " \"of experimental and anti-commercial\",\n", + " \"dematerialization in both art and\",\n", + " \"architecture, (although certainly within\",\n", + " \"the field of 'authorised' architecture,\",\n", + " \"much of this work remained on a\",\n", + " \"theoretical and propositional basis).\"\n", + " ],\n", + " [\n", + " \"Matta-Clark carried out his\",\n", + " \"investigations of architecture and space\",\n", + " \"through performance, drawing, sculpture,\",\n", + " \"photography, video, film and material\",\n", + " \"interventions known as 'cuttings'.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"One action carried out in 1974,\",\n", + " \"Splitting, involved taking a simple\",\n", + " \"detached wooden house in Englewood, a\",\n", + " \"New York State dormitory town, and\",\n", + " \"bisecting it.\"\n", + " ],\n", + " [\n", + " \"The house, already slated for\",\n", + " \"demolition, is cut exactly in two, from\",\n", + " \"the roof, down the walls and through the\",\n", + " \"floors to the raised foundation of\",\n", + " \"building blocks.\"\n", + " ],\n", + " [\n", + " \"In the short film which documents the\",\n", + " \"process a shard of sunlight streams\",\n", + " \"through the split, effacing the wall,\",\n", + " \"energising the new structure.\"\n", + " ],\n", + " [\n", + " \"The next stage is to take the rear half\",\n", + " \"of the house and, supporting it on\",\n", + " \"jacks, gradually knock away the upper\",\n", + " \"surface of the foundation at an angle of\",\n", + " \"five degrees.\"\n", + " ],\n", + " [\n", + " \"The back of the house is then tilted\",\n", + " \"away from the other half of the\",\n", + " \"structure back onto the now sloping\",\n", + " \"foundation.\"\n", + " ],\n", + " [\n", + " \"Throughout the film, Matta-Clark can be\",\n", + " \"seen working away at the building.\"\n", + " ],\n", + " [\n", + " \"A scrawny longhair in jeans and boots\",\n", + " \"doing with a simple toolkit the serious\",\n", + " \"structural re-adjustment that only the\",\n", + " \"most deranged of do-it-yourselfers can\",\n", + " \"dream about.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Another short film, Conical Intersect,\",\n", + " \"made in 1975 documents an intervention\",\n", + " \"which is even more reminiscent of the\",\n", + " \"transdimensional interference of\",\n", + " \"Tangents.\"\n", + " ],\n", + " [\n", + " \"Made during the Paris Biennial in the\",\n", + " \"area of Les Halles, tellingly close to\",\n", + " \"the construction of the Centre George\",\n", + " \"Pompidou - a politically inspired scheme\",\n", + " \"reminiscent of that other artiste\",\n", + " \"d\\u00e9molisseur, Baron Hausmann - the cut\",\n", + " \"probes into two adjoining seventeenth\",\n", + " \"century 'mansions'.\"\n", + " ],\n", + " [\n", + " \"Appearing from the outside as a series\",\n", + " \"of receding circles, the cut punctures\",\n", + " \"the building at the fourth storey and\",\n", + " \"moves upwards towards the sky.\"\n", + " ],\n", + " [\n", + " \"When the outer wall goes through, the\",\n", + " \"film shows the trio of people working on\",\n", + " \"the hole perform a brief can-can on a\",\n", + " \"soon-to-be-demolished section of floor.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"In a 1976 film, Substrait (Underground\",\n", + " \"Dailies), Matta-Clark explored and\",\n", + " \"documented some of the underground of\",\n", + " \"New York City.\"\n", + " ],\n", + " [\n", + " \"Grand Central Station, 13th Street and\",\n", + " \"the Croton Aqueduct are filmed to show\",\n", + " \"the variety and complexity of the hidden\",\n", + " \"spaces and tunnels in the metropolitan\",\n", + " \"area.\"\n", + " ],\n", + " [\n", + " \"Somewhat reminiscent of the ultra-dull\",\n", + " \"documentaries made by the Canadian\",\n", + " \"National Film Board in the same period,\",\n", + " \"this film develops an intimate concern\",\n", + " \"with the material qualities of the\",\n", + " \"structures under investigation, and\",\n", + " \"perhaps provides for the New York sewage\",\n", + " \"system a precursor to the geek art of\",\n", + " \"the internet.\"\n", + " ],\n", + " [\n", + " \"It is possible to imagine a film of its\",\n", + " \"travels through the nets made by a\",\n", + " \"software worm, being of remarkable\",\n", + " \"similarity.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Some of Matta-Clark's work could have\",\n", + " \"only been produced by someone deeply\",\n", + " \"familiar with the strange reality of\",\n", + " \"realty.\"\n", + " ],\n", + " [\n", + " \"In Reality Properties: Fake Estates he\",\n", + " \"bought up fifteen minuscule sections of\",\n", + " \"land that had been left over in property\",\n", + " \"deals, or that teetered just off the\",\n", + " \"edges of architectural plans drawn\",\n", + " \"slightly out-of-whack: a foot strip down\",\n", + " \"somebody's driveway, and a square foot\",\n", + " \"of sidewalk, tiny sections of kerbs and\",\n", + " \"gutters.\"\n", + " ],\n", + " [\n", + " \"Buying up this ludicrous empire was\",\n", + " \"again part of Matta-Clark's project of\",\n", + " \"the structural activation of severed\",\n", + " \"surfaces.\"\n", + " ],\n", + " [\n", + " \"It is also an example of the\",\n", + " \"idiosyncratic manipulation of rule-based\",\n", + " \"behaviour to achieve different ends.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Along with the dematerialised art that\",\n", + " \"provided a context in which this work\",\n", + " \"can be sensed, the period it was\",\n", + " \"produced in was also the peak of minimal\",\n", + " \"art.\"\n", + " ],\n", + " [\n", + " \"Whilst Matta-Clark's work is in part\",\n", + " \"concerned with formalism, the\",\n", + " \"application of procedures and the\",\n", + " \"revelation of structural properties, it\",\n", + " \"is precisely because his work is\",\n", + " \"formally non-reductive and purposely\",\n", + " \"heterogenic that it is profoundly at\",\n", + " \"variance to an art that was only\",\n", + " \"supposed to speak of itself and of the\",\n", + " \"immaculate connoisseurship of its\",\n", + " \"audience.\"\n", + " ],\n", + " [\n", + " \"This is an artwork that is exactly the\",\n", + " \"reverse of autonomous.\"\n", + " ],\n", + " [\n", + " \"It is openly dependent on a network of\",\n", + " \"coincidences and interconnectedness: on\",\n", + " \"being seen by chance passers-by; on the\",\n", + " \"receipt or avoidance of bureaucratic\",\n", + " \"permissions; on the functioning of\",\n", + " \"recording devices; on good weather; on\",\n", + " \"not being discovered when acting in\",\n", + " \"secret; on the theatre of its enaction\",\n", + " \"being an oxygenation of the still\",\n", + " \"smouldering embers of history.\"\n", + " ],\n", + " [\n", + " \"At the same time as it articulates the\",\n", + " \"space in sculptural terms it also\",\n", + " \"complexifies it in terms of its\",\n", + " \"placehood, as an object, and within its\",\n", + " \"social, chronological and economic\",\n", + " \"contexts.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Knowing that there is freedom in\",\n", + " \"suprise, it is along this fault line of\",\n", + " \"rationality and the non-rational that\",\n", + " \"Gordon Matta-Clark runs his fingers.\"\n", + " ],\n", + " [\n", + " \"Fingers which he also uses to tease\",\n", + " \"another split - that between art and\",\n", + " \"architecture.\"\n", + " ],\n", + " [\n", + " \"Comparable to his relationship to\",\n", + " \"minimal art, rather than partaking in\",\n", + " \"the functionalist urban sublime of the\",\n", + " \"glass and steel skyscraper typified in\",\n", + " \"the architecture of Mies van der Rohe -\",\n", + " \"with its interior opened to make it more\",\n", + " \"governable - Matta-Clark's work operates\",\n", + " \"a dis-enclosure of urban space: its\",\n", + " \"malfunctions, voids, shadows.\"\n", + " ],\n", + " [\n", + " \"The tension inherent in such spaces is\",\n", + " \"portrayed well by Gilles Deleuze in\",\n", + " \"describing \\\"any-space-whatever\\\" the\",\n", + " \"half-urban, half-waste lands often used\",\n", + " \"as sets and exteriors in post World War\",\n", + " \"Two films: \\\"Any-space-whatever is a\",\n", + " \"perfectly singular space, which has\",\n", + " \"merely lost its homogeneity, that is,\",\n", + " \"the principle of its metric relations or\",\n", + " \"the connection of its own parts, so that\",\n", + " \"linkages can be made in an infinite\",\n", + " \"number of ways\\\" This tension between\",\n", + " \"particularity and obliteration found in\",\n", + " \"the European bombsite translated well\",\n", + " \"into the conditions in which Matta-Clark\",\n", + " \"worked out of necessity and choice:\",\n", + " \"buildings eviscerated by the progress of\",\n", + " \"urban restructuring.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"\\\"There is a kind of complexity that\",\n", + " \"comes from taking an otherwise\",\n", + " \"completely normal, conventional, albeit\",\n", + " \"anonymous situation and redefining it,\",\n", + " \"retranslating it into overlapping and\",\n", + " \"multiple readings of conditions past and\",\n", + " \"present\\\".\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"As an aside, this too easy lock-down\",\n", + " \"into textuality implied by the use of\",\n", + " \"the word 'reading' is of his time, (and\",\n", + " \"one replicated in perpetuity by artists\",\n", + " \"hungry for the valorising seal of\",\n", + " \"textual authority) but it rather\",\n", + " \"understates the multiple sensory affect\",\n", + " \"of the work.\"\n", + " ],\n", + " [\n", + " \"It is this aspect, of working with\",\n", + " \"material that is in the process of being\",\n", + " \"made anonymous, generic - yet turning it\",\n", + " \"into an engine of connotation - that is\",\n", + " \"particularly suggestive for a context\",\n", + " \"that, in its apparent dematerialization\",\n", + " \"seems most likely to resist it:\",\n", + " \"software.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Software lacks the easy evidence of\",\n", + " \"time, of human habitation, of the\",\n", + " \"connotations of familial, industrial or\",\n", + " \"office life embedded in the structure of\",\n", + " \"a building.\"\n", + " ],\n", + " [\n", + " \"As a geometry realised in synthetic\",\n", + " \"space, it is an any-space-whatever, but\",\n", + " \"dry-cleaned and prised out of time.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Use of the computer happens at many\",\n", + " \"levels, both hard and soft.\"\n", + " ],\n", + " [\n", + " \"A crucial difference with how we\",\n", + " \"traditionally understand architecture,\",\n", + " \"rather than what it is becoming under\",\n", + " \"the impact of information technologies,\",\n", + " \"is that everything necessarily happens\",\n", + " \"at human scale.\"\n", + " ],\n", + " [\n", + " \"That the size, and to a certain extent\",\n", + " \"the organisation, of people has a\",\n", + " \"determining effect on the shape of the\",\n", + " \"building.\"\n", + " ],\n", + " [\n", + " \"Conversely, the axiomatics that channel\",\n", + " \"and produce the behaviour necessary for\",\n", + " \"use of computers happen at both human\",\n", + " \"and subscopic scale.\"\n", + " ],\n", + " [\n", + " \"The hard organs of the computer: mouse,\",\n", + " \"keyboard, modem, microphone, monitor,\",\n", + " \"though all matched to greater or lesser\",\n", + " \"extents to human form, all snake back to\",\n", + " \"the CPU.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Whilst what is of interest here is an\",\n", + " \"investigation of the moment of\",\n", + " \"composition between user and computer,\",\n", + " \"and not a reiteration of text-book\",\n", + " \"schematics, it is worth noting that\",\n", + " \"simply because they occur at the level\",\n", + " \"of electrons the axes of software are\",\n", + " \"impossible to find for the average user.\"\n", + " ],\n", + " [\n", + " \"Just as when watching a film we miss out\",\n", + " \"the black lines in between the frames\",\n", + " \"flashing past at 24 per second, the\",\n", + " \"invisible walls of software are designed\",\n", + " \"to remain inscrutable.\"\n", + " ],\n", + " [\n", + " \"However, the fact that these subscopic\",\n", + " \"transformation of data inside the\",\n", + " \"computer are simultaneously real and\",\n", + " \"symbolic; where the most abstract of\",\n", + " \"theoretical terms to be found in\",\n", + " \"mathematics becomes a thing, allows the\",\n", + " \"possibility of a kinaesthetic\",\n", + " \"investigation.\"\n", + " ],\n", + " [\n", + " \"An investigation that opens up a chance\",\n", + " \"for dialogue between the smooth running\",\n", + " \"of the machine and material that might\",\n", + " \"be thought of as contamination within\",\n", + " \"the terms of its devices.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Much of the 'legitimate' writing and\",\n", + " \"artistic production on information\",\n", + " \"technology is concerned with expanding\",\n", + " \"the application of the theoretical\",\n", + " \"devices used to recognise replication\",\n", + " \"and simulation, (what constitutes 'the\",\n", + " \"real') and of those used to recognise\",\n", + " \"surveillance.\"\n", + " ],\n", + " [\n", + " \"These themes, carried over most commonly\",\n", + " \"from debates around photography and\",\n", + " \"architecture, are of course suggestive\",\n", + " \"and in some cases useful, but in the\",\n", + " \"easiness of their translation we should\",\n", + " \"not forget that they are moving into a\",\n", + " \"context that subsumes them and is not\",\n", + " \"marked by their boundaries.\"\n", + " ],\n", + " [\n", + " \"In acknowledging the distinct\",\n", + " \"interconnectedness of the symbolic and\",\n", + " \"material, this is also an approach which\",\n", + " \"is opposed to the conception of\",\n", + " \"'virtuality' being taken as the desired\",\n", + " \"end state of digital technology: taking\",\n", + " \"virtuality as a condition which is\",\n", + " \"contained and made possible by the\",\n", + " \"actuality of digital media.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"To provide the skewed access to the\",\n", + " \"machines that such an investigation\",\n", + " \"requires we can siphon some fuel from\",\n", + " \"the goings-on of Gordon Matta-Clark: use\",\n", + " \"faults; disturb conventions; exploit\",\n", + " \"idiosyncrasies.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Faults arise in systems when the full\",\n", + " \"consequences of technical changes are\",\n", + " \"not followed through before the changes\",\n", + " \"are made, or are deliberately covered\",\n", + " \"up.\"\n", + " ],\n", + " [\n", + " \"This is an enormous game of hiding and\",\n", + " \"finding being played by a cast of\",\n", + " \"millions and one which has wide\",\n", + " \"ramifications.\"\n", + " ],\n", + " [\n", + " \"Perhaps the most crucial faultlines\",\n", + " \"being traced at the moment are those\",\n", + " \"around security: the world of minutiae\",\n", + " \"that compose the integrity of existence\",\n", + " \"in dataspace and the way it maps back\",\n", + " \"onto everyday life.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"The profoundest restructuring of\",\n", + " \"existence is taking place at the levels\",\n", + " \"of the electron and the gene.\"\n", + " ],\n", + " [\n", + " \"Technical complexity, commercial\",\n", + " \"pressure and the mechanisms of\",\n", + " \"expression management are blocking\",\n", + " \"almost all real public discourse on the\",\n", + " \"former.\"\n", + " ],\n", + " [\n", + " \"They are less able to do so to the\",\n", + " \"latter.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Whether radical or reactionary,\",\n", + " \"traditional political structures have,\",\n", + " \"either deliberately or through drastic\",\n", + " \"relevance-decay, abdicated almost all\",\n", + " \"decision making in these areas to\",\n", + " \"commercial interests.\"\n", + " ],\n", + " [\n", + " \"From a similar catalogue of stock\",\n", + " \"characters to that of the artist, the\",\n", + " \"pariah/hero figure of the hacker has\",\n", + " \"largely set the pace for any critical\",\n", + " \"understanding of the changes happening\",\n", + " \"in and between information technologies.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Picking up a random copy of the hacker\",\n", + " \"zine 2600 - summer 1996 - the scale and\",\n", + " \"ramifications of issues being dealt with\",\n", + " \"in this area becomes apparent.\"\n", + " ],\n", + " [\n", + " \"Subjects covered include: an editorial\",\n", + " \"on the position of hackers in the legal\",\n", + " \"system and media; the code of a LINUX\",\n", + " \"program to block internet sites by\",\n", + " \"flooding them with connection requests;\",\n", + " \"a list of free phone carriers in\",\n", + " \"Australia; acquiring phone services\",\n", + " \"under imaginary names; the\",\n", + " \"telecommunications infrastructure in\",\n", + " \"Prague and Sarajevo; encryption;\",\n", + " \"consumer data security; catching\",\n", + " \"passwords to specific multi-user\",\n", + " \"computer systems; passenger in-flight\",\n", + " \"communications systems; phreaking smart\",\n", + " \"pay-phones; starting a hacker scene; the\",\n", + " \"transcription of part of a court case\",\n", + " \"involving the show trial of hacker,\",\n", + " \"Bernie S; plus pages of small ads and\",\n", + " \"letters.\"\n", + " ],\n", + " [\n", + " \"(Perhaps noticeable in comparing the\",\n", + " \"importance of these scenes with that of\",\n", + " \"art is that the second-order commentary\",\n", + " \"on the work comes mainly from the\",\n", + " \"media/legal system rather than just\",\n", + " \"critics).\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"The faults identified by hackers and\",\n", + " \"others, where ethico-aesthetic\",\n", + " \"situations are compounded under sheer\",\n", + " \"pressure into technical ones, are\",\n", + " \"implicated in wider mechanisms.\"\n", + " ],\n", + " [\n", + " \"These technical situations can be\",\n", + " \"investigated from any point or\",\n", + " \"development within these wider\",\n", + " \"mechanisms regardless of the degree of\",\n", + " \"technical proficiency.\"\n", + " ],\n", + " [\n", + " \"Cracking open technical situations with\",\n", + " \"the wider social conditions within which\",\n", + " \"they occur is an increasingly necessary\",\n", + " \"task.\"\n", + " ],\n", + " [\n", + " \"Doing so in a manner that creates a\",\n", + " \"transversal relationship between\",\n", + " \"different, perhaps walled-off,\",\n", + " \"components, and that intimately works\",\n", + " \"the technical with other kinds of\",\n", + " \"material or symbolic devices is\",\n", + " \"something that remains to be developed.\"\n", + " ],\n", + " [\n", + " \"Tracking the faults, the severed\",\n", + " \"surfaces, of technology is one way in\",\n", + " \"which this can begin to be done.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"This intimacy, as well as concerning\",\n", + " \"itself with the cracks and disjunctures,\",\n", + " \"the faults in systems, can also become\",\n", + " \"involved in situations where they appear\",\n", + " \"to be most smooth.\"\n", + " ],\n", + " [\n", + " \"For the average user, the conventions of\",\n", + " \"personal computers appear secure,\",\n", + " \"rational, almost natural, if a little\",\n", + " \"awkward and tricky at times.\"\n", + " ],\n", + " [\n", + " \"Like many social protocols, computer use\",\n", + " \"is a skill which is forgetful of its\",\n", + " \"acquisition.\"\n", + " ],\n", + " [\n", + " \"Perhaps that user can remember back to\",\n", + " \"when they first got hold of a machine,\",\n", + " \"when they were waving a mouse in the air\",\n", + " \"to get the cursor to move towards them;\",\n", + " \"afraid to touch the wrong key in case it\",\n", + " \"damaged something; saving files all over\",\n", + " \"the place; trying to draw curves in\",\n", + " \"Pagemaker; putting floppies in upside-\",\n", + " \"down; trying to work a cracked copy of\",\n", + " \"CuBase with something missing; learning\",\n", + " \"how to conform to the machine in order\",\n", + " \"to make the machine conform to them.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"In computer interface design the form-\",\n", + " \"function fusion is made on the basis of\",\n", + " \"averages, a focus grouped reality based\",\n", + " \"on peoples' understanding of a context\",\n", + " \"in which it is impossible for them to\",\n", + " \"function unless they develop the\",\n", + " \"understanding already been mapped out\",\n", + " \"for them.\"\n", + " ],\n", + " [\n", + " \"Perhaps in this context, the user will\",\n", + " \"always be the ideal user, because if\",\n", + " \"they are not ideal - if, within this\",\n", + " \"context at least, they do not conform to\",\n", + " \"the ideal - they won't be a user.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Interface design is a discipline that\",\n", + " \"aspires to saying nothing.\"\n", + " ],\n", + " [\n", + " \"Instead of trying to crack this\",\n", + " \"invisibility, one technique for\",\n", + " \"investigation is to tease it into\",\n", + " \"overproduction.\"\n", + " ],\n", + " [\n", + " \"Why use one mouse-click when ten-\",\n", + " \"thousand will do? Why use any visual\",\n", + " \"information when navigation is perfectly\",\n", + " \"possible with sound alone? Why just look\",\n", + " \"at the interface, why not print it out\",\n", + " \"and wear it? Why read text on screen\",\n", + " \"when a far better technology is paper?\",\n", + " \"Why use a cursor when the object you're\",\n", + " \"actually pointing at can function\",\n", + " \"perfectly well to indicate the mouse\",\n", + " \"position?.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"In any other social context, what\",\n", + " \"because of the arbitrary nature of the\",\n", + " \"abstract machine appear as protocols,\",\n", + " \"would be revealed as mannerisms.\"\n", + " ],\n", + " [\n", + " \"(Take a fast taxi through the ruined\",\n", + " \"neighbourhoods of cyberspace by\",\n", + " \"travelling through emulators of old\",\n", + " \"computers: punch a hole in the surface\",\n", + " \"of your shiny new machine by loading up\",\n", + " \"the black hole of a 1k ZX81).\"\n", + " ],\n", + " [\n", + " \"When the construction of machines from\",\n", + " \"the fundamental objects of the hardware:\",\n", + " \"bits, bytes, words, addresses, upwards\",\n", + " \"are realised to be synthetic rather than\",\n", + " \"given, or even necessarily rational -\",\n", + " \"though produced through the application\",\n", + " \"of rationalisation, logic - they become\",\n", + " \"subject to wider possibilities for\",\n", + " \"change.\"\n", + " ],\n", + " [\n", + " \"Software as an aggregate of very small\",\n", + " \"sensory experiences and devices becomes\",\n", + " \"an engine, not just of connotation, but\",\n", + " \"of transformation.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Some of those transformations in\",\n", + " \"occurrence can be sensed in the sheer\",\n", + " \"idiosyncrasy of much software.\"\n", + " ],\n", + " [\n", + " \"In the Atrocity Exhibition and other\",\n", + " \"books, J.G. Ballard mixes flat,\",\n", + " \"technical descriptions of body positions\",\n", + " \"as they come into composition with the\",\n", + " \"synthetic geometry of architecture,\",\n", + " \"automobiles, furnishings, to produce an\",\n", + " \"investigation of machined erotics.\"\n", + " ],\n", + " [\n", + " \"He continues and intensifies the\",\n", + " \"Surrealist stratagem of cutting together\",\n", + " \"transgressed functionalities in order to\",\n", + " \"regain entry to the order of the\",\n", + " \"symbolic.\"\n", + " ],\n", + " [\n", + " \"To an objective observer, the transitory\",\n", + " \"point at which a thigh comes into\",\n", + " \"convergence with a table also suggests\",\n", + " \"the way in which the original Microsoft\",\n", + " \"Windows interface was bolted on top of\",\n", + " \"the old DOS language.\"\n", + " ],\n", + " [\n", + " \"The tectonic impact of two neural\",\n", + " \"landscapes performs an operation called\",\n", + " \"progress.\"\n", + " ],\n", + " [\n", + " \"The software is tricked into doing\",\n", + " \"something more than it was intended for.\"\n", + " ],\n", + " [\n", + " \"Instead of dramatic breaks, hacks and\",\n", + " \"incrementally adaptive mutations are\",\n", + " \"often the way things are made to move\",\n", + " \"forward.\"\n", + " ],\n", + " [\n", + " \"(For instance on Apple computers, the\",\n", + " \"desktop is already being bypassed by the\",\n", + " \"absorption of some of the functions of\",\n", + " \"the finder into various applications.\"\n", + " ],\n", + " [\n", + " \"From being a grossly over-metaphoric\",\n", + " \"grand entrance hall, it has become a\",\n", + " \"back alley).\"\n", + " ],\n", + " [\n", + " \"When they work well they are elegant\",\n", + " \"usable collages.\"\n", + " ],\n", + " [\n", + " \"Often they are botch jobs.\"\n", + " ],\n", + " [\n", + " \"In both cases, the points at which the\",\n", + " \"systems mesh, collide, or repel, can, at\",\n", + " \"the points of confused demarcation,\",\n", + " \"produce secret gardens, car parks, lamps\",\n", + " \"that fuck.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Idiosyncrasies can also develop when a\",\n", + " \"software system is applied to a\",\n", + " \"situation in toto.\"\n", + " ],\n", + " [\n", + " \"Perhaps most obviously, databases.\"\n", + " ],\n", + " [\n", + " \"The production of software dedicated to\",\n", + " \"knowledge organisation and information\",\n", + " \"retrieval, a field largely seen as the\",\n", + " \"domain of linguists and computer\",\n", + " \"scientists, immediately brings with it a\",\n", + " \"range of problematics that are at once\",\n", + " \"both cultural and technical.\"\n", + " ],\n", + " [\n", + " \"The technology underlying search engines\",\n", + " \"and databases - set theory - is based on\",\n", + " \"creating classifications of information\",\n", + " \"according to arbitrarily or contingently\",\n", + " \"meaningful schemes.\"\n", + " ],\n", + " [\n", + " \"It is in the application and development\",\n", + " \"of those schemes with all their\",\n", + " \"inevitable biases and quirks that the\",\n", + " \"aesthetics of classification lies.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Attuned to quantifying; organising;\",\n", + " \"isolating and drawing into\",\n", + " \"relationships, particular cases of the\",\n", + " \"possible and working them till they\",\n", + " \"bleed some kind of relevance, databases\",\n", + " \"exist firmly on the cusp of the rational\",\n", + " \"and non-rational.\"\n", + " ],\n", + " [\n", + " \"When the Subjective Exercise Experiences\",\n", + " \"Scale locks onto the Human Genome\",\n", + " \"Initiative processing library stock-\",\n", + " \"holding data: prepare for something\",\n", + " \"approaching poetry.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Perhaps in some ways sensing into the\",\n", + " \"future this destratification of\",\n", + " \"conventions is the architecture of the\",\n", + " \"internet.\"\n", + " ],\n", + " [\n", + " \"This, (almost despite its position\",\n", + " \"within and between various political,\",\n", + " \"commercial and bureaucratic formations)\",\n", + " \"after all, is a network which functions\",\n", + " \"on a basis of being broken, continuously\",\n", + " \"finding the shortest route between\",\n", + " \"nodes: even as a squatter will always\",\n", + " \"see the empty buildings on any street\",\n", + " \"before those that are full.\"\n", + " ],\n", + " [\n", + " \"At these shifting, transitory points\",\n", + " \"where sensoriums intermesh, repel, clash\",\n", + " \"and resynthesize are the possibilities\",\n", + " \"for a ludic transdimensionality.\"\n", + " ],\n", + " [\n", + " \"Knock through a wall, and beyond the\",\n", + " \"clouds of brick dust clogging up and\",\n", + " \"exciting your eyes, tongue, palate and\",\n", + " \"throat, there's another universe: an\",\n", + " \"empty, unclassifiable complex seething\",\n", + " \"with life.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"Matthew Fuller, May 1997.\"\n", + " ]\n", + " ],\n", + " [\n", + " [\n", + " \"I/O/D.\"\n", + " ]\n", + " ]\n", + "]\n" + ] + } + ], + "source": [ + "import textwrap\n", + "\n", + "WIDTH=40\n", + "def wrap_los (los, width=40):\n", + " ret = []\n", + " for sentences in los:\n", + " llines = []\n", + " ret.append(llines)\n", + " for sentence in sentences:\n", + " llines.append(textwrap.wrap(sentence, WIDTH))\n", + " return ret\n", + "with open(\"Visceral_Facades_los.json\") as fin:\n", + " los = json.load(fin)\n", + "\n", + "print(json.dumps(wrap_los(los), indent=2))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "def esc (t):\n", + " return t.replace('\"', r'\\\"')\n", + "\n", + "def dump_lua_table (s,fout=sys.stdout):\n", + " print(f'text={{}}', file=fout)\n", + " for pid, p in enumerate(s):\n", + " print (f'text[{pid}]={{}}', file=fout)\n", + " for sid, s in enumerate(p):\n", + " print (f'text[{pid}][{sid}]={{}}', file=fout)\n", + " for lid, l in enumerate(s):\n", + " print (f'text[{pid}][{sid}][{lid}]=\"{esc(l)}\"', file=fout)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text[]={}\n", + "text[0]={}\n", + "text[0][0]={}\n", + "text[0][0][0]=\"Visceral Facades: taking Matta-Clark's\"\n", + "text[0][0][1]=\"crowbar to software.\"\n", + "text[1]={}\n", + "text[1][0]={}\n", + "text[1][0][0]=\"Architecture was the first art of\"\n", + "text[1][0][1]=\"measurement of time and space.\"\n", + "text[1][1]={}\n", + "text[1][1][0]=\"Ancient megalithic structures such as\"\n", + "text[1][1][1]=\"Stonehenge are the ancestors of the\"\n", + "text[1][1][2]=\"machine you are reading this text on.\"\n", + "text[1][2]={}\n", + "text[1][2][0]=\"Whereas computers build up from the\"\n", + "text[1][2][1]=\"scale of electrons rather than that of\"\n", + "text[1][2][2]=\"giant lumps of stone and the tasks they\"\n", + "text[1][2][3]=\"complete are abstract and changeable,\"\n", + "text[1][2][4]=\"rather than specific and singular, they\"\n", + "text[1][2][5]=\"both remain physical instantiations of\"\n", + "text[1][2][6]=\"abstract logic into which energy is fed\"\n", + "text[1][2][7]=\"in order to produce results to one or\"\n", + "text[1][2][8]=\"more of a range of potential\"\n", + "text[1][2][9]=\"calculations embodied in their\"\n", + "text[1][2][10]=\"structure.\"\n", + "text[2]={}\n", + "text[2][0]={}\n", + "text[2][0][0]=\"Nowadays, as films such as Die Hard and\"\n", + "text[2][0][1]=\"novels such as Gridlock are so keen to\"\n", + "text[2][0][2]=\"show us, buildings and\"\n", + "text[2][0][3]=\"telecommunications are profoundly\"\n", + "text[2][0][4]=\"interrelated.\"\n", + "text[2][1]={}\n", + "text[2][1][0]=\"As architecture is caught up in the mesh\"\n", + "text[2][1][1]=\"of the 'immaterial', of security and\"\n", + "text[2][1][2]=\"communications systems, of gating and\"\n", + "text[2][1][3]=\"processing (think of an airport) its\"\n", + "text[2][1][4]=\"connection to its originary development\"\n", + "text[2][1][5]=\"as geometry realised in synthetic space\"\n", + "text[2][1][6]=\"becomes ever more apparent.\"\n", + "text[2][2]={}\n", + "text[2][2][0]=\"The proliferation of special effects\"\n", + "text[2][2][1]=\"that effect consciousness of time and\"\n", + "text[2][2][2]=\"distance and the perception of the\"\n", + "text[2][2][3]=\"environment in a context where maximum\"\n", + "text[2][2][4]=\"stratification combines in the same\"\n", + "text[2][2][5]=\"device with maximum fluidity, is\"\n", + "text[2][2][6]=\"presented as an abrupt break with an\"\n", + "text[2][2][7]=\"older style of architecture wherein\"\n", + "text[2][2][8]=\"power can be deciphered by the maximum\"\n", + "text[2][2][9]=\"possession of space.\"\n", + "text[3]={}\n", + "text[3][0]={}\n", + "text[3][0][0]=\"In a short story, Tangents, science\"\n", + "text[3][0][1]=\"fiction writer Greg Bear introduces\"\n", + "text[3][0][2]=\"four-dimensional beings into a three\"\n", + "text[3][0][3]=\"dimensional shape: something which he\"\n", + "text[3][0][4]=\"likens to looking at fish through the\"\n", + "text[3][0][5]=\"corner of an aquarium.\"\n", + "text[3][1]={}\n", + "text[3][1][0]=\"The shape that these fourth dimensional\"\n", + "text[3][1][1]=\"beings appear in is a normal, two storey\"\n", + "text[3][1][2]=\"house.\"\n", + "text[3][2]={}\n", + "text[3][2][0]=\"The house is gradually, neatly, Swiss-\"\n", + "text[3][2][1]=\"cheesed by a series of cones, columns,\"\n", + "text[3][2][2]=\"and spheres as the dimensions intersect.\"\n", + "text[4]={}\n", + "text[4][0]={}\n", + "text[4][0][0]=\"Possibly, this might be the kind of\"\n", + "text[4][0][1]=\"effect you'd worry about if you'd\"\n", + "text[4][0][2]=\"invited Gordon Matta-Clark around to\"\n", + "text[4][0][3]=\"your home.\"\n", + "text[4][1]={}\n", + "text[4][1][0]=\"An artist who trained as an architect,\"\n", + "text[4][1][1]=\"Matta-Clark was born in New York City in\"\n", + "text[4][1][2]=\"March 1943 and died in 1978.\"\n", + "text[4][2]={}\n", + "text[4][2][0]=\"His most prolific period, between 1971\"\n", + "text[4][2][1]=\"and 1976, occurred within a rich context\"\n", + "text[4][2][2]=\"of experimental and anti-commercial\"\n", + "text[4][2][3]=\"dematerialization in both art and\"\n", + "text[4][2][4]=\"architecture, (although certainly within\"\n", + "text[4][2][5]=\"the field of 'authorised' architecture,\"\n", + "text[4][2][6]=\"much of this work remained on a\"\n", + "text[4][2][7]=\"theoretical and propositional basis).\"\n", + "text[4][3]={}\n", + "text[4][3][0]=\"Matta-Clark carried out his\"\n", + "text[4][3][1]=\"investigations of architecture and space\"\n", + "text[4][3][2]=\"through performance, drawing, sculpture,\"\n", + "text[4][3][3]=\"photography, video, film and material\"\n", + "text[4][3][4]=\"interventions known as 'cuttings'.\"\n", + "text[5]={}\n", + "text[5][0]={}\n", + "text[5][0][0]=\"One action carried out in 1974,\"\n", + "text[5][0][1]=\"Splitting, involved taking a simple\"\n", + "text[5][0][2]=\"detached wooden house in Englewood, a\"\n", + "text[5][0][3]=\"New York State dormitory town, and\"\n", + "text[5][0][4]=\"bisecting it.\"\n", + "text[5][1]={}\n", + "text[5][1][0]=\"The house, already slated for\"\n", + "text[5][1][1]=\"demolition, is cut exactly in two, from\"\n", + "text[5][1][2]=\"the roof, down the walls and through the\"\n", + "text[5][1][3]=\"floors to the raised foundation of\"\n", + "text[5][1][4]=\"building blocks.\"\n", + "text[5][2]={}\n", + "text[5][2][0]=\"In the short film which documents the\"\n", + "text[5][2][1]=\"process a shard of sunlight streams\"\n", + "text[5][2][2]=\"through the split, effacing the wall,\"\n", + "text[5][2][3]=\"energising the new structure.\"\n", + "text[5][3]={}\n", + "text[5][3][0]=\"The next stage is to take the rear half\"\n", + "text[5][3][1]=\"of the house and, supporting it on\"\n", + "text[5][3][2]=\"jacks, gradually knock away the upper\"\n", + "text[5][3][3]=\"surface of the foundation at an angle of\"\n", + "text[5][3][4]=\"five degrees.\"\n", + "text[5][4]={}\n", + "text[5][4][0]=\"The back of the house is then tilted\"\n", + "text[5][4][1]=\"away from the other half of the\"\n", + "text[5][4][2]=\"structure back onto the now sloping\"\n", + "text[5][4][3]=\"foundation.\"\n", + "text[5][5]={}\n", + "text[5][5][0]=\"Throughout the film, Matta-Clark can be\"\n", + "text[5][5][1]=\"seen working away at the building.\"\n", + "text[5][6]={}\n", + "text[5][6][0]=\"A scrawny longhair in jeans and boots\"\n", + "text[5][6][1]=\"doing with a simple toolkit the serious\"\n", + "text[5][6][2]=\"structural re-adjustment that only the\"\n", + "text[5][6][3]=\"most deranged of do-it-yourselfers can\"\n", + "text[5][6][4]=\"dream about.\"\n", + "text[6]={}\n", + "text[6][0]={}\n", + "text[6][0][0]=\"Another short film, Conical Intersect,\"\n", + "text[6][0][1]=\"made in 1975 documents an intervention\"\n", + "text[6][0][2]=\"which is even more reminiscent of the\"\n", + "text[6][0][3]=\"transdimensional interference of\"\n", + "text[6][0][4]=\"Tangents.\"\n", + "text[6][1]={}\n", + "text[6][1][0]=\"Made during the Paris Biennial in the\"\n", + "text[6][1][1]=\"area of Les Halles, tellingly close to\"\n", + "text[6][1][2]=\"the construction of the Centre George\"\n", + "text[6][1][3]=\"Pompidou - a politically inspired scheme\"\n", + "text[6][1][4]=\"reminiscent of that other artiste\"\n", + "text[6][1][5]=\"démolisseur, Baron Hausmann - the cut\"\n", + "text[6][1][6]=\"probes into two adjoining seventeenth\"\n", + "text[6][1][7]=\"century 'mansions'.\"\n", + "text[6][2]={}\n", + "text[6][2][0]=\"Appearing from the outside as a series\"\n", + "text[6][2][1]=\"of receding circles, the cut punctures\"\n", + "text[6][2][2]=\"the building at the fourth storey and\"\n", + "text[6][2][3]=\"moves upwards towards the sky.\"\n", + "text[6][3]={}\n", + "text[6][3][0]=\"When the outer wall goes through, the\"\n", + "text[6][3][1]=\"film shows the trio of people working on\"\n", + "text[6][3][2]=\"the hole perform a brief can-can on a\"\n", + "text[6][3][3]=\"soon-to-be-demolished section of floor.\"\n", + "text[7]={}\n", + "text[7][0]={}\n", + "text[7][0][0]=\"In a 1976 film, Substrait (Underground\"\n", + "text[7][0][1]=\"Dailies), Matta-Clark explored and\"\n", + "text[7][0][2]=\"documented some of the underground of\"\n", + "text[7][0][3]=\"New York City.\"\n", + "text[7][1]={}\n", + "text[7][1][0]=\"Grand Central Station, 13th Street and\"\n", + "text[7][1][1]=\"the Croton Aqueduct are filmed to show\"\n", + "text[7][1][2]=\"the variety and complexity of the hidden\"\n", + "text[7][1][3]=\"spaces and tunnels in the metropolitan\"\n", + "text[7][1][4]=\"area.\"\n", + "text[7][2]={}\n", + "text[7][2][0]=\"Somewhat reminiscent of the ultra-dull\"\n", + "text[7][2][1]=\"documentaries made by the Canadian\"\n", + "text[7][2][2]=\"National Film Board in the same period,\"\n", + "text[7][2][3]=\"this film develops an intimate concern\"\n", + "text[7][2][4]=\"with the material qualities of the\"\n", + "text[7][2][5]=\"structures under investigation, and\"\n", + "text[7][2][6]=\"perhaps provides for the New York sewage\"\n", + "text[7][2][7]=\"system a precursor to the geek art of\"\n", + "text[7][2][8]=\"the internet.\"\n", + "text[7][3]={}\n", + "text[7][3][0]=\"It is possible to imagine a film of its\"\n", + "text[7][3][1]=\"travels through the nets made by a\"\n", + "text[7][3][2]=\"software worm, being of remarkable\"\n", + "text[7][3][3]=\"similarity.\"\n", + "text[8]={}\n", + "text[8][0]={}\n", + "text[8][0][0]=\"Some of Matta-Clark's work could have\"\n", + "text[8][0][1]=\"only been produced by someone deeply\"\n", + "text[8][0][2]=\"familiar with the strange reality of\"\n", + "text[8][0][3]=\"realty.\"\n", + "text[8][1]={}\n", + "text[8][1][0]=\"In Reality Properties: Fake Estates he\"\n", + "text[8][1][1]=\"bought up fifteen minuscule sections of\"\n", + "text[8][1][2]=\"land that had been left over in property\"\n", + "text[8][1][3]=\"deals, or that teetered just off the\"\n", + "text[8][1][4]=\"edges of architectural plans drawn\"\n", + "text[8][1][5]=\"slightly out-of-whack: a foot strip down\"\n", + "text[8][1][6]=\"somebody's driveway, and a square foot\"\n", + "text[8][1][7]=\"of sidewalk, tiny sections of kerbs and\"\n", + "text[8][1][8]=\"gutters.\"\n", + "text[8][2]={}\n", + "text[8][2][0]=\"Buying up this ludicrous empire was\"\n", + "text[8][2][1]=\"again part of Matta-Clark's project of\"\n", + "text[8][2][2]=\"the structural activation of severed\"\n", + "text[8][2][3]=\"surfaces.\"\n", + "text[8][3]={}\n", + "text[8][3][0]=\"It is also an example of the\"\n", + "text[8][3][1]=\"idiosyncratic manipulation of rule-based\"\n", + "text[8][3][2]=\"behaviour to achieve different ends.\"\n", + "text[9]={}\n", + "text[9][0]={}\n", + "text[9][0][0]=\"Along with the dematerialised art that\"\n", + "text[9][0][1]=\"provided a context in which this work\"\n", + "text[9][0][2]=\"can be sensed, the period it was\"\n", + "text[9][0][3]=\"produced in was also the peak of minimal\"\n", + "text[9][0][4]=\"art.\"\n", + "text[9][1]={}\n", + "text[9][1][0]=\"Whilst Matta-Clark's work is in part\"\n", + "text[9][1][1]=\"concerned with formalism, the\"\n", + "text[9][1][2]=\"application of procedures and the\"\n", + "text[9][1][3]=\"revelation of structural properties, it\"\n", + "text[9][1][4]=\"is precisely because his work is\"\n", + "text[9][1][5]=\"formally non-reductive and purposely\"\n", + "text[9][1][6]=\"heterogenic that it is profoundly at\"\n", + "text[9][1][7]=\"variance to an art that was only\"\n", + "text[9][1][8]=\"supposed to speak of itself and of the\"\n", + "text[9][1][9]=\"immaculate connoisseurship of its\"\n", + "text[9][1][10]=\"audience.\"\n", + "text[9][2]={}\n", + "text[9][2][0]=\"This is an artwork that is exactly the\"\n", + "text[9][2][1]=\"reverse of autonomous.\"\n", + "text[9][3]={}\n", + "text[9][3][0]=\"It is openly dependent on a network of\"\n", + "text[9][3][1]=\"coincidences and interconnectedness: on\"\n", + "text[9][3][2]=\"being seen by chance passers-by; on the\"\n", + "text[9][3][3]=\"receipt or avoidance of bureaucratic\"\n", + "text[9][3][4]=\"permissions; on the functioning of\"\n", + "text[9][3][5]=\"recording devices; on good weather; on\"\n", + "text[9][3][6]=\"not being discovered when acting in\"\n", + "text[9][3][7]=\"secret; on the theatre of its enaction\"\n", + "text[9][3][8]=\"being an oxygenation of the still\"\n", + "text[9][3][9]=\"smouldering embers of history.\"\n", + "text[9][4]={}\n", + "text[9][4][0]=\"At the same time as it articulates the\"\n", + "text[9][4][1]=\"space in sculptural terms it also\"\n", + "text[9][4][2]=\"complexifies it in terms of its\"\n", + "text[9][4][3]=\"placehood, as an object, and within its\"\n", + "text[9][4][4]=\"social, chronological and economic\"\n", + "text[9][4][5]=\"contexts.\"\n", + "text[10]={}\n", + "text[10][0]={}\n", + "text[10][0][0]=\"Knowing that there is freedom in\"\n", + "text[10][0][1]=\"suprise, it is along this fault line of\"\n", + "text[10][0][2]=\"rationality and the non-rational that\"\n", + "text[10][0][3]=\"Gordon Matta-Clark runs his fingers.\"\n", + "text[10][1]={}\n", + "text[10][1][0]=\"Fingers which he also uses to tease\"\n", + "text[10][1][1]=\"another split - that between art and\"\n", + "text[10][1][2]=\"architecture.\"\n", + "text[10][2]={}\n", + "text[10][2][0]=\"Comparable to his relationship to\"\n", + "text[10][2][1]=\"minimal art, rather than partaking in\"\n", + "text[10][2][2]=\"the functionalist urban sublime of the\"\n", + "text[10][2][3]=\"glass and steel skyscraper typified in\"\n", + "text[10][2][4]=\"the architecture of Mies van der Rohe -\"\n", + "text[10][2][5]=\"with its interior opened to make it more\"\n", + "text[10][2][6]=\"governable - Matta-Clark's work operates\"\n", + "text[10][2][7]=\"a dis-enclosure of urban space: its\"\n", + "text[10][2][8]=\"malfunctions, voids, shadows.\"\n", + "text[10][3]={}\n", + "text[10][3][0]=\"The tension inherent in such spaces is\"\n", + "text[10][3][1]=\"portrayed well by Gilles Deleuze in\"\n", + "text[10][3][2]=\"describing \\\"any-space-whatever\\\" the\"\n", + "text[10][3][3]=\"half-urban, half-waste lands often used\"\n", + "text[10][3][4]=\"as sets and exteriors in post World War\"\n", + "text[10][3][5]=\"Two films: \\\"Any-space-whatever is a\"\n", + "text[10][3][6]=\"perfectly singular space, which has\"\n", + "text[10][3][7]=\"merely lost its homogeneity, that is,\"\n", + "text[10][3][8]=\"the principle of its metric relations or\"\n", + "text[10][3][9]=\"the connection of its own parts, so that\"\n", + "text[10][3][10]=\"linkages can be made in an infinite\"\n", + "text[10][3][11]=\"number of ways\\\" This tension between\"\n", + "text[10][3][12]=\"particularity and obliteration found in\"\n", + "text[10][3][13]=\"the European bombsite translated well\"\n", + "text[10][3][14]=\"into the conditions in which Matta-Clark\"\n", + "text[10][3][15]=\"worked out of necessity and choice:\"\n", + "text[10][3][16]=\"buildings eviscerated by the progress of\"\n", + "text[10][3][17]=\"urban restructuring.\"\n", + "text[11]={}\n", + "text[11][0]={}\n", + "text[11][0][0]=\"\\\"There is a kind of complexity that\"\n", + "text[11][0][1]=\"comes from taking an otherwise\"\n", + "text[11][0][2]=\"completely normal, conventional, albeit\"\n", + "text[11][0][3]=\"anonymous situation and redefining it,\"\n", + "text[11][0][4]=\"retranslating it into overlapping and\"\n", + "text[11][0][5]=\"multiple readings of conditions past and\"\n", + "text[11][0][6]=\"present\\\".\"\n", + "text[12]={}\n", + "text[12][0]={}\n", + "text[12][0][0]=\"As an aside, this too easy lock-down\"\n", + "text[12][0][1]=\"into textuality implied by the use of\"\n", + "text[12][0][2]=\"the word 'reading' is of his time, (and\"\n", + "text[12][0][3]=\"one replicated in perpetuity by artists\"\n", + "text[12][0][4]=\"hungry for the valorising seal of\"\n", + "text[12][0][5]=\"textual authority) but it rather\"\n", + "text[12][0][6]=\"understates the multiple sensory affect\"\n", + "text[12][0][7]=\"of the work.\"\n", + "text[12][1]={}\n", + "text[12][1][0]=\"It is this aspect, of working with\"\n", + "text[12][1][1]=\"material that is in the process of being\"\n", + "text[12][1][2]=\"made anonymous, generic - yet turning it\"\n", + "text[12][1][3]=\"into an engine of connotation - that is\"\n", + "text[12][1][4]=\"particularly suggestive for a context\"\n", + "text[12][1][5]=\"that, in its apparent dematerialization\"\n", + "text[12][1][6]=\"seems most likely to resist it:\"\n", + "text[12][1][7]=\"software.\"\n", + "text[13]={}\n", + "text[13][0]={}\n", + "text[13][0][0]=\"Software lacks the easy evidence of\"\n", + "text[13][0][1]=\"time, of human habitation, of the\"\n", + "text[13][0][2]=\"connotations of familial, industrial or\"\n", + "text[13][0][3]=\"office life embedded in the structure of\"\n", + "text[13][0][4]=\"a building.\"\n", + "text[13][1]={}\n", + "text[13][1][0]=\"As a geometry realised in synthetic\"\n", + "text[13][1][1]=\"space, it is an any-space-whatever, but\"\n", + "text[13][1][2]=\"dry-cleaned and prised out of time.\"\n", + "text[14]={}\n", + "text[14][0]={}\n", + "text[14][0][0]=\"Use of the computer happens at many\"\n", + "text[14][0][1]=\"levels, both hard and soft.\"\n", + "text[14][1]={}\n", + "text[14][1][0]=\"A crucial difference with how we\"\n", + "text[14][1][1]=\"traditionally understand architecture,\"\n", + "text[14][1][2]=\"rather than what it is becoming under\"\n", + "text[14][1][3]=\"the impact of information technologies,\"\n", + "text[14][1][4]=\"is that everything necessarily happens\"\n", + "text[14][1][5]=\"at human scale.\"\n", + "text[14][2]={}\n", + "text[14][2][0]=\"That the size, and to a certain extent\"\n", + "text[14][2][1]=\"the organisation, of people has a\"\n", + "text[14][2][2]=\"determining effect on the shape of the\"\n", + "text[14][2][3]=\"building.\"\n", + "text[14][3]={}\n", + "text[14][3][0]=\"Conversely, the axiomatics that channel\"\n", + "text[14][3][1]=\"and produce the behaviour necessary for\"\n", + "text[14][3][2]=\"use of computers happen at both human\"\n", + "text[14][3][3]=\"and subscopic scale.\"\n", + "text[14][4]={}\n", + "text[14][4][0]=\"The hard organs of the computer: mouse,\"\n", + "text[14][4][1]=\"keyboard, modem, microphone, monitor,\"\n", + "text[14][4][2]=\"though all matched to greater or lesser\"\n", + "text[14][4][3]=\"extents to human form, all snake back to\"\n", + "text[14][4][4]=\"the CPU.\"\n", + "text[15]={}\n", + "text[15][0]={}\n", + "text[15][0][0]=\"Whilst what is of interest here is an\"\n", + "text[15][0][1]=\"investigation of the moment of\"\n", + "text[15][0][2]=\"composition between user and computer,\"\n", + "text[15][0][3]=\"and not a reiteration of text-book\"\n", + "text[15][0][4]=\"schematics, it is worth noting that\"\n", + "text[15][0][5]=\"simply because they occur at the level\"\n", + "text[15][0][6]=\"of electrons the axes of software are\"\n", + "text[15][0][7]=\"impossible to find for the average user.\"\n", + "text[15][1]={}\n", + "text[15][1][0]=\"Just as when watching a film we miss out\"\n", + "text[15][1][1]=\"the black lines in between the frames\"\n", + "text[15][1][2]=\"flashing past at 24 per second, the\"\n", + "text[15][1][3]=\"invisible walls of software are designed\"\n", + "text[15][1][4]=\"to remain inscrutable.\"\n", + "text[15][2]={}\n", + "text[15][2][0]=\"However, the fact that these subscopic\"\n", + "text[15][2][1]=\"transformation of data inside the\"\n", + "text[15][2][2]=\"computer are simultaneously real and\"\n", + "text[15][2][3]=\"symbolic; where the most abstract of\"\n", + "text[15][2][4]=\"theoretical terms to be found in\"\n", + "text[15][2][5]=\"mathematics becomes a thing, allows the\"\n", + "text[15][2][6]=\"possibility of a kinaesthetic\"\n", + "text[15][2][7]=\"investigation.\"\n", + "text[15][3]={}\n", + "text[15][3][0]=\"An investigation that opens up a chance\"\n", + "text[15][3][1]=\"for dialogue between the smooth running\"\n", + "text[15][3][2]=\"of the machine and material that might\"\n", + "text[15][3][3]=\"be thought of as contamination within\"\n", + "text[15][3][4]=\"the terms of its devices.\"\n", + "text[16]={}\n", + "text[16][0]={}\n", + "text[16][0][0]=\"Much of the 'legitimate' writing and\"\n", + "text[16][0][1]=\"artistic production on information\"\n", + "text[16][0][2]=\"technology is concerned with expanding\"\n", + "text[16][0][3]=\"the application of the theoretical\"\n", + "text[16][0][4]=\"devices used to recognise replication\"\n", + "text[16][0][5]=\"and simulation, (what constitutes 'the\"\n", + "text[16][0][6]=\"real') and of those used to recognise\"\n", + "text[16][0][7]=\"surveillance.\"\n", + "text[16][1]={}\n", + "text[16][1][0]=\"These themes, carried over most commonly\"\n", + "text[16][1][1]=\"from debates around photography and\"\n", + "text[16][1][2]=\"architecture, are of course suggestive\"\n", + "text[16][1][3]=\"and in some cases useful, but in the\"\n", + "text[16][1][4]=\"easiness of their translation we should\"\n", + "text[16][1][5]=\"not forget that they are moving into a\"\n", + "text[16][1][6]=\"context that subsumes them and is not\"\n", + "text[16][1][7]=\"marked by their boundaries.\"\n", + "text[16][2]={}\n", + "text[16][2][0]=\"In acknowledging the distinct\"\n", + "text[16][2][1]=\"interconnectedness of the symbolic and\"\n", + "text[16][2][2]=\"material, this is also an approach which\"\n", + "text[16][2][3]=\"is opposed to the conception of\"\n", + "text[16][2][4]=\"'virtuality' being taken as the desired\"\n", + "text[16][2][5]=\"end state of digital technology: taking\"\n", + "text[16][2][6]=\"virtuality as a condition which is\"\n", + "text[16][2][7]=\"contained and made possible by the\"\n", + "text[16][2][8]=\"actuality of digital media.\"\n", + "text[17]={}\n", + "text[17][0]={}\n", + "text[17][0][0]=\"To provide the skewed access to the\"\n", + "text[17][0][1]=\"machines that such an investigation\"\n", + "text[17][0][2]=\"requires we can siphon some fuel from\"\n", + "text[17][0][3]=\"the goings-on of Gordon Matta-Clark: use\"\n", + "text[17][0][4]=\"faults; disturb conventions; exploit\"\n", + "text[17][0][5]=\"idiosyncrasies.\"\n", + "text[18]={}\n", + "text[18][0]={}\n", + "text[18][0][0]=\"Faults arise in systems when the full\"\n", + "text[18][0][1]=\"consequences of technical changes are\"\n", + "text[18][0][2]=\"not followed through before the changes\"\n", + "text[18][0][3]=\"are made, or are deliberately covered\"\n", + "text[18][0][4]=\"up.\"\n", + "text[18][1]={}\n", + "text[18][1][0]=\"This is an enormous game of hiding and\"\n", + "text[18][1][1]=\"finding being played by a cast of\"\n", + "text[18][1][2]=\"millions and one which has wide\"\n", + "text[18][1][3]=\"ramifications.\"\n", + "text[18][2]={}\n", + "text[18][2][0]=\"Perhaps the most crucial faultlines\"\n", + "text[18][2][1]=\"being traced at the moment are those\"\n", + "text[18][2][2]=\"around security: the world of minutiae\"\n", + "text[18][2][3]=\"that compose the integrity of existence\"\n", + "text[18][2][4]=\"in dataspace and the way it maps back\"\n", + "text[18][2][5]=\"onto everyday life.\"\n", + "text[19]={}\n", + "text[19][0]={}\n", + "text[19][0][0]=\"The profoundest restructuring of\"\n", + "text[19][0][1]=\"existence is taking place at the levels\"\n", + "text[19][0][2]=\"of the electron and the gene.\"\n", + "text[19][1]={}\n", + "text[19][1][0]=\"Technical complexity, commercial\"\n", + "text[19][1][1]=\"pressure and the mechanisms of\"\n", + "text[19][1][2]=\"expression management are blocking\"\n", + "text[19][1][3]=\"almost all real public discourse on the\"\n", + "text[19][1][4]=\"former.\"\n", + "text[19][2]={}\n", + "text[19][2][0]=\"They are less able to do so to the\"\n", + "text[19][2][1]=\"latter.\"\n", + "text[20]={}\n", + "text[20][0]={}\n", + "text[20][0][0]=\"Whether radical or reactionary,\"\n", + "text[20][0][1]=\"traditional political structures have,\"\n", + "text[20][0][2]=\"either deliberately or through drastic\"\n", + "text[20][0][3]=\"relevance-decay, abdicated almost all\"\n", + "text[20][0][4]=\"decision making in these areas to\"\n", + "text[20][0][5]=\"commercial interests.\"\n", + "text[20][1]={}\n", + "text[20][1][0]=\"From a similar catalogue of stock\"\n", + "text[20][1][1]=\"characters to that of the artist, the\"\n", + "text[20][1][2]=\"pariah/hero figure of the hacker has\"\n", + "text[20][1][3]=\"largely set the pace for any critical\"\n", + "text[20][1][4]=\"understanding of the changes happening\"\n", + "text[20][1][5]=\"in and between information technologies.\"\n", + "text[21]={}\n", + "text[21][0]={}\n", + "text[21][0][0]=\"Picking up a random copy of the hacker\"\n", + "text[21][0][1]=\"zine 2600 - summer 1996 - the scale and\"\n", + "text[21][0][2]=\"ramifications of issues being dealt with\"\n", + "text[21][0][3]=\"in this area becomes apparent.\"\n", + "text[21][1]={}\n", + "text[21][1][0]=\"Subjects covered include: an editorial\"\n", + "text[21][1][1]=\"on the position of hackers in the legal\"\n", + "text[21][1][2]=\"system and media; the code of a LINUX\"\n", + "text[21][1][3]=\"program to block internet sites by\"\n", + "text[21][1][4]=\"flooding them with connection requests;\"\n", + "text[21][1][5]=\"a list of free phone carriers in\"\n", + "text[21][1][6]=\"Australia; acquiring phone services\"\n", + "text[21][1][7]=\"under imaginary names; the\"\n", + "text[21][1][8]=\"telecommunications infrastructure in\"\n", + "text[21][1][9]=\"Prague and Sarajevo; encryption;\"\n", + "text[21][1][10]=\"consumer data security; catching\"\n", + "text[21][1][11]=\"passwords to specific multi-user\"\n", + "text[21][1][12]=\"computer systems; passenger in-flight\"\n", + "text[21][1][13]=\"communications systems; phreaking smart\"\n", + "text[21][1][14]=\"pay-phones; starting a hacker scene; the\"\n", + "text[21][1][15]=\"transcription of part of a court case\"\n", + "text[21][1][16]=\"involving the show trial of hacker,\"\n", + "text[21][1][17]=\"Bernie S; plus pages of small ads and\"\n", + "text[21][1][18]=\"letters.\"\n", + "text[21][2]={}\n", + "text[21][2][0]=\"(Perhaps noticeable in comparing the\"\n", + "text[21][2][1]=\"importance of these scenes with that of\"\n", + "text[21][2][2]=\"art is that the second-order commentary\"\n", + "text[21][2][3]=\"on the work comes mainly from the\"\n", + "text[21][2][4]=\"media/legal system rather than just\"\n", + "text[21][2][5]=\"critics).\"\n", + "text[22]={}\n", + "text[22][0]={}\n", + "text[22][0][0]=\"The faults identified by hackers and\"\n", + "text[22][0][1]=\"others, where ethico-aesthetic\"\n", + "text[22][0][2]=\"situations are compounded under sheer\"\n", + "text[22][0][3]=\"pressure into technical ones, are\"\n", + "text[22][0][4]=\"implicated in wider mechanisms.\"\n", + "text[22][1]={}\n", + "text[22][1][0]=\"These technical situations can be\"\n", + "text[22][1][1]=\"investigated from any point or\"\n", + "text[22][1][2]=\"development within these wider\"\n", + "text[22][1][3]=\"mechanisms regardless of the degree of\"\n", + "text[22][1][4]=\"technical proficiency.\"\n", + "text[22][2]={}\n", + "text[22][2][0]=\"Cracking open technical situations with\"\n", + "text[22][2][1]=\"the wider social conditions within which\"\n", + "text[22][2][2]=\"they occur is an increasingly necessary\"\n", + "text[22][2][3]=\"task.\"\n", + "text[22][3]={}\n", + "text[22][3][0]=\"Doing so in a manner that creates a\"\n", + "text[22][3][1]=\"transversal relationship between\"\n", + "text[22][3][2]=\"different, perhaps walled-off,\"\n", + "text[22][3][3]=\"components, and that intimately works\"\n", + "text[22][3][4]=\"the technical with other kinds of\"\n", + "text[22][3][5]=\"material or symbolic devices is\"\n", + "text[22][3][6]=\"something that remains to be developed.\"\n", + "text[22][4]={}\n", + "text[22][4][0]=\"Tracking the faults, the severed\"\n", + "text[22][4][1]=\"surfaces, of technology is one way in\"\n", + "text[22][4][2]=\"which this can begin to be done.\"\n", + "text[23]={}\n", + "text[23][0]={}\n", + "text[23][0][0]=\"This intimacy, as well as concerning\"\n", + "text[23][0][1]=\"itself with the cracks and disjunctures,\"\n", + "text[23][0][2]=\"the faults in systems, can also become\"\n", + "text[23][0][3]=\"involved in situations where they appear\"\n", + "text[23][0][4]=\"to be most smooth.\"\n", + "text[23][1]={}\n", + "text[23][1][0]=\"For the average user, the conventions of\"\n", + "text[23][1][1]=\"personal computers appear secure,\"\n", + "text[23][1][2]=\"rational, almost natural, if a little\"\n", + "text[23][1][3]=\"awkward and tricky at times.\"\n", + "text[23][2]={}\n", + "text[23][2][0]=\"Like many social protocols, computer use\"\n", + "text[23][2][1]=\"is a skill which is forgetful of its\"\n", + "text[23][2][2]=\"acquisition.\"\n", + "text[23][3]={}\n", + "text[23][3][0]=\"Perhaps that user can remember back to\"\n", + "text[23][3][1]=\"when they first got hold of a machine,\"\n", + "text[23][3][2]=\"when they were waving a mouse in the air\"\n", + "text[23][3][3]=\"to get the cursor to move towards them;\"\n", + "text[23][3][4]=\"afraid to touch the wrong key in case it\"\n", + "text[23][3][5]=\"damaged something; saving files all over\"\n", + "text[23][3][6]=\"the place; trying to draw curves in\"\n", + "text[23][3][7]=\"Pagemaker; putting floppies in upside-\"\n", + "text[23][3][8]=\"down; trying to work a cracked copy of\"\n", + "text[23][3][9]=\"CuBase with something missing; learning\"\n", + "text[23][3][10]=\"how to conform to the machine in order\"\n", + "text[23][3][11]=\"to make the machine conform to them.\"\n", + "text[24]={}\n", + "text[24][0]={}\n", + "text[24][0][0]=\"In computer interface design the form-\"\n", + "text[24][0][1]=\"function fusion is made on the basis of\"\n", + "text[24][0][2]=\"averages, a focus grouped reality based\"\n", + "text[24][0][3]=\"on peoples' understanding of a context\"\n", + "text[24][0][4]=\"in which it is impossible for them to\"\n", + "text[24][0][5]=\"function unless they develop the\"\n", + "text[24][0][6]=\"understanding already been mapped out\"\n", + "text[24][0][7]=\"for them.\"\n", + "text[24][1]={}\n", + "text[24][1][0]=\"Perhaps in this context, the user will\"\n", + "text[24][1][1]=\"always be the ideal user, because if\"\n", + "text[24][1][2]=\"they are not ideal - if, within this\"\n", + "text[24][1][3]=\"context at least, they do not conform to\"\n", + "text[24][1][4]=\"the ideal - they won't be a user.\"\n", + "text[25]={}\n", + "text[25][0]={}\n", + "text[25][0][0]=\"Interface design is a discipline that\"\n", + "text[25][0][1]=\"aspires to saying nothing.\"\n", + "text[25][1]={}\n", + "text[25][1][0]=\"Instead of trying to crack this\"\n", + "text[25][1][1]=\"invisibility, one technique for\"\n", + "text[25][1][2]=\"investigation is to tease it into\"\n", + "text[25][1][3]=\"overproduction.\"\n", + "text[25][2]={}\n", + "text[25][2][0]=\"Why use one mouse-click when ten-\"\n", + "text[25][2][1]=\"thousand will do? Why use any visual\"\n", + "text[25][2][2]=\"information when navigation is perfectly\"\n", + "text[25][2][3]=\"possible with sound alone? Why just look\"\n", + "text[25][2][4]=\"at the interface, why not print it out\"\n", + "text[25][2][5]=\"and wear it? Why read text on screen\"\n", + "text[25][2][6]=\"when a far better technology is paper?\"\n", + "text[25][2][7]=\"Why use a cursor when the object you're\"\n", + "text[25][2][8]=\"actually pointing at can function\"\n", + "text[25][2][9]=\"perfectly well to indicate the mouse\"\n", + "text[25][2][10]=\"position?.\"\n", + "text[26]={}\n", + "text[26][0]={}\n", + "text[26][0][0]=\"In any other social context, what\"\n", + "text[26][0][1]=\"because of the arbitrary nature of the\"\n", + "text[26][0][2]=\"abstract machine appear as protocols,\"\n", + "text[26][0][3]=\"would be revealed as mannerisms.\"\n", + "text[26][1]={}\n", + "text[26][1][0]=\"(Take a fast taxi through the ruined\"\n", + "text[26][1][1]=\"neighbourhoods of cyberspace by\"\n", + "text[26][1][2]=\"travelling through emulators of old\"\n", + "text[26][1][3]=\"computers: punch a hole in the surface\"\n", + "text[26][1][4]=\"of your shiny new machine by loading up\"\n", + "text[26][1][5]=\"the black hole of a 1k ZX81).\"\n", + "text[26][2]={}\n", + "text[26][2][0]=\"When the construction of machines from\"\n", + "text[26][2][1]=\"the fundamental objects of the hardware:\"\n", + "text[26][2][2]=\"bits, bytes, words, addresses, upwards\"\n", + "text[26][2][3]=\"are realised to be synthetic rather than\"\n", + "text[26][2][4]=\"given, or even necessarily rational -\"\n", + "text[26][2][5]=\"though produced through the application\"\n", + "text[26][2][6]=\"of rationalisation, logic - they become\"\n", + "text[26][2][7]=\"subject to wider possibilities for\"\n", + "text[26][2][8]=\"change.\"\n", + "text[26][3]={}\n", + "text[26][3][0]=\"Software as an aggregate of very small\"\n", + "text[26][3][1]=\"sensory experiences and devices becomes\"\n", + "text[26][3][2]=\"an engine, not just of connotation, but\"\n", + "text[26][3][3]=\"of transformation.\"\n", + "text[27]={}\n", + "text[27][0]={}\n", + "text[27][0][0]=\"Some of those transformations in\"\n", + "text[27][0][1]=\"occurrence can be sensed in the sheer\"\n", + "text[27][0][2]=\"idiosyncrasy of much software.\"\n", + "text[27][1]={}\n", + "text[27][1][0]=\"In the Atrocity Exhibition and other\"\n", + "text[27][1][1]=\"books, J.G. Ballard mixes flat,\"\n", + "text[27][1][2]=\"technical descriptions of body positions\"\n", + "text[27][1][3]=\"as they come into composition with the\"\n", + "text[27][1][4]=\"synthetic geometry of architecture,\"\n", + "text[27][1][5]=\"automobiles, furnishings, to produce an\"\n", + "text[27][1][6]=\"investigation of machined erotics.\"\n", + "text[27][2]={}\n", + "text[27][2][0]=\"He continues and intensifies the\"\n", + "text[27][2][1]=\"Surrealist stratagem of cutting together\"\n", + "text[27][2][2]=\"transgressed functionalities in order to\"\n", + "text[27][2][3]=\"regain entry to the order of the\"\n", + "text[27][2][4]=\"symbolic.\"\n", + "text[27][3]={}\n", + "text[27][3][0]=\"To an objective observer, the transitory\"\n", + "text[27][3][1]=\"point at which a thigh comes into\"\n", + "text[27][3][2]=\"convergence with a table also suggests\"\n", + "text[27][3][3]=\"the way in which the original Microsoft\"\n", + "text[27][3][4]=\"Windows interface was bolted on top of\"\n", + "text[27][3][5]=\"the old DOS language.\"\n", + "text[27][4]={}\n", + "text[27][4][0]=\"The tectonic impact of two neural\"\n", + "text[27][4][1]=\"landscapes performs an operation called\"\n", + "text[27][4][2]=\"progress.\"\n", + "text[27][5]={}\n", + "text[27][5][0]=\"The software is tricked into doing\"\n", + "text[27][5][1]=\"something more than it was intended for.\"\n", + "text[27][6]={}\n", + "text[27][6][0]=\"Instead of dramatic breaks, hacks and\"\n", + "text[27][6][1]=\"incrementally adaptive mutations are\"\n", + "text[27][6][2]=\"often the way things are made to move\"\n", + "text[27][6][3]=\"forward.\"\n", + "text[27][7]={}\n", + "text[27][7][0]=\"(For instance on Apple computers, the\"\n", + "text[27][7][1]=\"desktop is already being bypassed by the\"\n", + "text[27][7][2]=\"absorption of some of the functions of\"\n", + "text[27][7][3]=\"the finder into various applications.\"\n", + "text[27][8]={}\n", + "text[27][8][0]=\"From being a grossly over-metaphoric\"\n", + "text[27][8][1]=\"grand entrance hall, it has become a\"\n", + "text[27][8][2]=\"back alley).\"\n", + "text[27][9]={}\n", + "text[27][9][0]=\"When they work well they are elegant\"\n", + "text[27][9][1]=\"usable collages.\"\n", + "text[27][10]={}\n", + "text[27][10][0]=\"Often they are botch jobs.\"\n", + "text[27][11]={}\n", + "text[27][11][0]=\"In both cases, the points at which the\"\n", + "text[27][11][1]=\"systems mesh, collide, or repel, can, at\"\n", + "text[27][11][2]=\"the points of confused demarcation,\"\n", + "text[27][11][3]=\"produce secret gardens, car parks, lamps\"\n", + "text[27][11][4]=\"that fuck.\"\n", + "text[28]={}\n", + "text[28][0]={}\n", + "text[28][0][0]=\"Idiosyncrasies can also develop when a\"\n", + "text[28][0][1]=\"software system is applied to a\"\n", + "text[28][0][2]=\"situation in toto.\"\n", + "text[28][1]={}\n", + "text[28][1][0]=\"Perhaps most obviously, databases.\"\n", + "text[28][2]={}\n", + "text[28][2][0]=\"The production of software dedicated to\"\n", + "text[28][2][1]=\"knowledge organisation and information\"\n", + "text[28][2][2]=\"retrieval, a field largely seen as the\"\n", + "text[28][2][3]=\"domain of linguists and computer\"\n", + "text[28][2][4]=\"scientists, immediately brings with it a\"\n", + "text[28][2][5]=\"range of problematics that are at once\"\n", + "text[28][2][6]=\"both cultural and technical.\"\n", + "text[28][3]={}\n", + "text[28][3][0]=\"The technology underlying search engines\"\n", + "text[28][3][1]=\"and databases - set theory - is based on\"\n", + "text[28][3][2]=\"creating classifications of information\"\n", + "text[28][3][3]=\"according to arbitrarily or contingently\"\n", + "text[28][3][4]=\"meaningful schemes.\"\n", + "text[28][4]={}\n", + "text[28][4][0]=\"It is in the application and development\"\n", + "text[28][4][1]=\"of those schemes with all their\"\n", + "text[28][4][2]=\"inevitable biases and quirks that the\"\n", + "text[28][4][3]=\"aesthetics of classification lies.\"\n", + "text[29]={}\n", + "text[29][0]={}\n", + "text[29][0][0]=\"Attuned to quantifying; organising;\"\n", + "text[29][0][1]=\"isolating and drawing into\"\n", + "text[29][0][2]=\"relationships, particular cases of the\"\n", + "text[29][0][3]=\"possible and working them till they\"\n", + "text[29][0][4]=\"bleed some kind of relevance, databases\"\n", + "text[29][0][5]=\"exist firmly on the cusp of the rational\"\n", + "text[29][0][6]=\"and non-rational.\"\n", + "text[29][1]={}\n", + "text[29][1][0]=\"When the Subjective Exercise Experiences\"\n", + "text[29][1][1]=\"Scale locks onto the Human Genome\"\n", + "text[29][1][2]=\"Initiative processing library stock-\"\n", + "text[29][1][3]=\"holding data: prepare for something\"\n", + "text[29][1][4]=\"approaching poetry.\"\n", + "text[30]={}\n", + "text[30][0]={}\n", + "text[30][0][0]=\"Perhaps in some ways sensing into the\"\n", + "text[30][0][1]=\"future this destratification of\"\n", + "text[30][0][2]=\"conventions is the architecture of the\"\n", + "text[30][0][3]=\"internet.\"\n", + "text[30][1]={}\n", + "text[30][1][0]=\"This, (almost despite its position\"\n", + "text[30][1][1]=\"within and between various political,\"\n", + "text[30][1][2]=\"commercial and bureaucratic formations)\"\n", + "text[30][1][3]=\"after all, is a network which functions\"\n", + "text[30][1][4]=\"on a basis of being broken, continuously\"\n", + "text[30][1][5]=\"finding the shortest route between\"\n", + "text[30][1][6]=\"nodes: even as a squatter will always\"\n", + "text[30][1][7]=\"see the empty buildings on any street\"\n", + "text[30][1][8]=\"before those that are full.\"\n", + "text[30][2]={}\n", + "text[30][2][0]=\"At these shifting, transitory points\"\n", + "text[30][2][1]=\"where sensoriums intermesh, repel, clash\"\n", + "text[30][2][2]=\"and resynthesize are the possibilities\"\n", + "text[30][2][3]=\"for a ludic transdimensionality.\"\n", + "text[30][3]={}\n", + "text[30][3][0]=\"Knock through a wall, and beyond the\"\n", + "text[30][3][1]=\"clouds of brick dust clogging up and\"\n", + "text[30][3][2]=\"exciting your eyes, tongue, palate and\"\n", + "text[30][3][3]=\"throat, there's another universe: an\"\n", + "text[30][3][4]=\"empty, unclassifiable complex seething\"\n", + "text[30][3][5]=\"with life.\"\n", + "text[31]={}\n", + "text[31][0]={}\n", + "text[31][0][0]=\"Matthew Fuller, May 1997.\"\n", + "text[32]={}\n", + "text[32][0]={}\n", + "text[32][0][0]=\"I/O/D.\"\n" + ] } ], "source": [ - "tt" + "dump_lua_table(wrap_los(los))" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"Visceral_Facades_3d.lua\", \"w\") as fout:\n", + " dump_lua_table(wrap_los(los), fout)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -92,7 +1831,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "collapsed": true, "jupyter": { @@ -104,224 +1843,202 @@ "name": "stdout", "output_type": "stream", "text": [ - "Visceral Facades: taking Matta-\n", - "Clark's crowbar to software.\n", + "Visceral Facades: taking Matta-Clark's\n", + "crowbar to software.\n", "Architecture was the first art of\n", - "measurement of time and space.\n", - "Ancient megalithic structures such\n", - "as Stonehenge are the ancestors of\n", - "the machine you are reading this\n", - "text on. Whereas computers build up\n", - "from the scale of electrons rather\n", - "than that of giant lumps of stone\n", - "and the tasks they complete are\n", - "abstract and changeable, rather than\n", - "specific and singular, they both\n", - "remain physical instantiations of\n", - "abstract logic into which energy is\n", - "fed in order to produce results to\n", - "one or more of a range of potential\n", - "calculations embodied in their\n", + "measurement of time and space. Ancient\n", + "megalithic structures such as Stonehenge\n", + "are the ancestors of the machine you are\n", + "reading this text on. Whereas computers\n", + "build up from the scale of electrons\n", + "rather than that of giant lumps of stone\n", + "and the tasks they complete are abstract\n", + "and changeable, rather than specific and\n", + "singular, they both remain physical\n", + "instantiations of abstract logic into\n", + "which energy is fed in order to produce\n", + "results to one or more of a range of\n", + "potential calculations embodied in their\n", "structure.\n", - "Nowadays, as films such as Die Hard\n", - "and novels such as Gridlock are so\n", - "keen to show us, buildings and\n", + "Nowadays, as films such as Die Hard and\n", + "novels such as Gridlock are so keen to\n", + "show us, buildings and\n", "telecommunications are profoundly\n", - "interrelated. As architecture is\n", - "caught up in the mesh of the\n", - "'immaterial', of security and\n", - "communications systems, of gating\n", - "and processing (think of an airport)\n", - "its connection to its originary\n", + "interrelated. As architecture is caught\n", + "up in the mesh of the 'immaterial', of\n", + "security and communications systems, of\n", + "gating and processing (think of an\n", + "airport) its connection to its originary\n", "development as geometry realised in\n", "synthetic space becomes ever more\n", - "apparent. The proliferation of\n", - "special effects that effect\n", - "consciousness of time and distance\n", - "and the perception of the\n", - "environment in a context where\n", - "maximum stratification combines in\n", - "the same device with maximum\n", - "fluidity, is presented as an abrupt\n", - "break with an older style of\n", - "architecture wherein power can be\n", - "deciphered by the maximum possession\n", - "of space.\n", + "apparent. The proliferation of special\n", + "effects that effect consciousness of\n", + "time and distance and the perception of\n", + "the environment in a context where\n", + "maximum stratification combines in the\n", + "same device with maximum fluidity, is\n", + "presented as an abrupt break with an\n", + "older style of architecture wherein\n", + "power can be deciphered by the maximum\n", + "possession of space.\n", "In a short story, Tangents, science\n", "fiction writer Greg Bear introduces\n", "four-dimensional beings into a three\n", - "dimensional shape: something which\n", - "he likens to looking at fish through\n", - "the corner of an aquarium. The shape\n", - "that these fourth dimensional beings\n", - "appear in is a normal, two storey\n", - "house. The house is gradually,\n", - "neatly, Swiss-cheesed by a series of\n", - "cones, columns, and spheres as the\n", - "dimensions intersect.\n", + "dimensional shape: something which he\n", + "likens to looking at fish through the\n", + "corner of an aquarium. The shape that\n", + "these fourth dimensional beings appear\n", + "in is a normal, two storey house. The\n", + "house is gradually, neatly, Swiss-\n", + "cheesed by a series of cones, columns,\n", + "and spheres as the dimensions intersect.\n", "Possibly, this might be the kind of\n", "effect you'd worry about if you'd\n", "invited Gordon Matta-Clark around to\n", - "your home. An artist who trained as\n", - "an architect, Matta-Clark was born\n", - "in New York City in March 1943 and\n", - "died in 1978. His most prolific\n", - "period, between 1971 and 1976,\n", - "occurred within a rich context of\n", - "experimental and anti-commercial\n", - "dematerialization in both art and\n", - "architecture, (although certainly\n", + "your home. An artist who trained as an\n", + "architect, Matta-Clark was born in New\n", + "York City in March 1943 and died in\n", + "1978. His most prolific period, between\n", + "1971 and 1976, occurred within a rich\n", + "context of experimental and anti-\n", + "commercial dematerialization in both art\n", + "and architecture, (although certainly\n", "within the field of 'authorised'\n", - "architecture, much of this work\n", - "remained on a theoretical and\n", - "propositional basis). Matta-Clark\n", - "carried out his investigations of\n", - "architecture and space through\n", - "performance, drawing, sculpture,\n", - "photography, video, film and\n", - "material interventions known as\n", - "'cuttings'.\n", + "architecture, much of this work remained\n", + "on a theoretical and propositional\n", + "basis). Matta-Clark carried out his\n", + "investigations of architecture and space\n", + "through performance, drawing, sculpture,\n", + "photography, video, film and material\n", + "interventions known as 'cuttings'.\n", "One action carried out in 1974,\n", "Splitting, involved taking a simple\n", - "detached wooden house in Englewood,\n", - "a New York State dormitory town, and\n", - "bisecting it. The house, already\n", - "slated for demolition, is cut\n", - "exactly in two, from the roof, down\n", - "the walls and through the floors to\n", - "the raised foundation of building\n", - "blocks. In the short film which\n", - "documents the process a shard of\n", - "sunlight streams through the split,\n", - "effacing the wall, energising the\n", - "new structure. The next stage is to\n", - "take the rear half of the house and,\n", - "supporting it on jacks, gradually\n", - "knock away the upper surface of the\n", - "foundation at an angle of five\n", - "degrees. The back of the house is\n", - "then tilted away from the other half\n", - "of the structure back onto the now\n", - "sloping foundation. Throughout the\n", - "film, Matta-Clark can be seen\n", - "working away at the building. A\n", - "scrawny longhair in jeans and boots\n", - "doing with a simple toolkit the\n", - "serious structural re-adjustment\n", - "that only the most deranged of do-\n", - "it-yourselfers can dream about.\n", - "Another short film, Conical\n", - "Intersect, made in 1975 documents an\n", - "intervention which is even more\n", - "reminiscent of the transdimensional\n", - "interference of Tangents. Made\n", - "during the Paris Biennial in the\n", - "area of Les Halles, tellingly close\n", - "to the construction of the Centre\n", - "George Pompidou - a politically\n", - "inspired scheme reminiscent of that\n", - "other artiste démolisseur, Baron\n", - "Hausmann - the cut probes into two\n", - "adjoining seventeenth century\n", - "'mansions'. Appearing from the\n", - "outside as a series of receding\n", - "circles, the cut punctures the\n", - "building at the fourth storey and\n", - "moves upwards towards the sky. When\n", - "the outer wall goes through, the\n", - "film shows the trio of people\n", - "working on the hole perform a brief\n", - "can-can on a soon-to-be-demolished\n", + "detached wooden house in Englewood, a\n", + "New York State dormitory town, and\n", + "bisecting it. The house, already slated\n", + "for demolition, is cut exactly in two,\n", + "from the roof, down the walls and\n", + "through the floors to the raised\n", + "foundation of building blocks. In the\n", + "short film which documents the process a\n", + "shard of sunlight streams through the\n", + "split, effacing the wall, energising the\n", + "new structure. The next stage is to take\n", + "the rear half of the house and,\n", + "supporting it on jacks, gradually knock\n", + "away the upper surface of the foundation\n", + "at an angle of five degrees. The back of\n", + "the house is then tilted away from the\n", + "other half of the structure back onto\n", + "the now sloping foundation. Throughout\n", + "the film, Matta-Clark can be seen\n", + "working away at the building. A scrawny\n", + "longhair in jeans and boots doing with a\n", + "simple toolkit the serious structural\n", + "re-adjustment that only the most\n", + "deranged of do-it-yourselfers can dream\n", + "about.\n", + "Another short film, Conical Intersect,\n", + "made in 1975 documents an intervention\n", + "which is even more reminiscent of the\n", + "transdimensional interference of\n", + "Tangents. Made during the Paris Biennial\n", + "in the area of Les Halles, tellingly\n", + "close to the construction of the Centre\n", + "George Pompidou - a politically inspired\n", + "scheme reminiscent of that other artiste\n", + "démolisseur, Baron Hausmann - the cut\n", + "probes into two adjoining seventeenth\n", + "century 'mansions'. Appearing from the\n", + "outside as a series of receding circles,\n", + "the cut punctures the building at the\n", + "fourth storey and moves upwards towards\n", + "the sky. When the outer wall goes\n", + "through, the film shows the trio of\n", + "people working on the hole perform a\n", + "brief can-can on a soon-to-be-demolished\n", "section of floor.\n", - "In a 1976 film, Substrait\n", - "(Underground Dailies), Matta-Clark\n", - "explored and documented some of the\n", - "underground of New York City. Grand\n", - "Central Station, 13th Street and the\n", - "Croton Aqueduct are filmed to show\n", - "the variety and complexity of the\n", - "hidden spaces and tunnels in the\n", - "metropolitan area. Somewhat\n", - "reminiscent of the ultra-dull\n", + "In a 1976 film, Substrait (Underground\n", + "Dailies), Matta-Clark explored and\n", + "documented some of the underground of\n", + "New York City. Grand Central Station,\n", + "13th Street and the Croton Aqueduct are\n", + "filmed to show the variety and\n", + "complexity of the hidden spaces and\n", + "tunnels in the metropolitan area.\n", + "Somewhat reminiscent of the ultra-dull\n", "documentaries made by the Canadian\n", - "National Film Board in the same\n", - "period, this film develops an\n", - "intimate concern with the material\n", - "qualities of the structures under\n", - "investigation, and perhaps provides\n", - "for the New York sewage system a\n", - "precursor to the geek art of the\n", - "internet. It is possible to imagine\n", - "a film of its travels through the\n", - "nets made by a software worm, being\n", - "of remarkable similarity.\n", - "Some of Matta-Clark's work could\n", - "have only been produced by someone\n", - "deeply familiar with the strange\n", - "reality of realty. In Reality\n", - "Properties: Fake Estates he bought\n", - "up fifteen minuscule sections of\n", - "land that had been left over in\n", - "property deals, or that teetered\n", - "just off the edges of architectural\n", - "plans drawn slightly out-of-whack: a\n", - "foot strip down somebody's driveway,\n", - "and a square foot of sidewalk, tiny\n", - "sections of kerbs and gutters.\n", - "Buying up this ludicrous empire was\n", - "again part of Matta-Clark's project\n", - "of the structural activation of\n", - "severed surfaces. It is also an\n", - "example of the idiosyncratic\n", - "manipulation of rule-based behaviour\n", - "to achieve different ends.\n", - "Along with the dematerialised art\n", - "that provided a context in which\n", - "this work can be sensed, the period\n", - "it was produced in was also the peak\n", - "of minimal art. Whilst Matta-Clark's\n", - "work is in part concerned with\n", - "formalism, the application of\n", - "procedures and the revelation of\n", - "structural properties, it is\n", - "precisely because his work is\n", + "National Film Board in the same period,\n", + "this film develops an intimate concern\n", + "with the material qualities of the\n", + "structures under investigation, and\n", + "perhaps provides for the New York sewage\n", + "system a precursor to the geek art of\n", + "the internet. It is possible to imagine\n", + "a film of its travels through the nets\n", + "made by a software worm, being of\n", + "remarkable similarity.\n", + "Some of Matta-Clark's work could have\n", + "only been produced by someone deeply\n", + "familiar with the strange reality of\n", + "realty. In Reality Properties: Fake\n", + "Estates he bought up fifteen minuscule\n", + "sections of land that had been left over\n", + "in property deals, or that teetered just\n", + "off the edges of architectural plans\n", + "drawn slightly out-of-whack: a foot\n", + "strip down somebody's driveway, and a\n", + "square foot of sidewalk, tiny sections\n", + "of kerbs and gutters. Buying up this\n", + "ludicrous empire was again part of\n", + "Matta-Clark's project of the structural\n", + "activation of severed surfaces. It is\n", + "also an example of the idiosyncratic\n", + "manipulation of rule-based behaviour to\n", + "achieve different ends.\n", + "Along with the dematerialised art that\n", + "provided a context in which this work\n", + "can be sensed, the period it was\n", + "produced in was also the peak of minimal\n", + "art. Whilst Matta-Clark's work is in\n", + "part concerned with formalism, the\n", + "application of procedures and the\n", + "revelation of structural properties, it\n", + "is precisely because his work is\n", "formally non-reductive and purposely\n", "heterogenic that it is profoundly at\n", "variance to an art that was only\n", - "supposed to speak of itself and of\n", - "the immaculate connoisseurship of\n", - "its audience. This is an artwork\n", - "that is exactly the reverse of\n", - "autonomous. It is openly dependent\n", - "on a network of coincidences and\n", - "interconnectedness: on being seen by\n", - "chance passers-by; on the receipt or\n", - "avoidance of bureaucratic\n", + "supposed to speak of itself and of the\n", + "immaculate connoisseurship of its\n", + "audience. This is an artwork that is\n", + "exactly the reverse of autonomous. It is\n", + "openly dependent on a network of\n", + "coincidences and interconnectedness: on\n", + "being seen by chance passers-by; on the\n", + "receipt or avoidance of bureaucratic\n", "permissions; on the functioning of\n", - "recording devices; on good weather;\n", - "on not being discovered when acting\n", - "in secret; on the theatre of its\n", - "enaction being an oxygenation of the\n", - "still smouldering embers of history.\n", - "At the same time as it articulates\n", - "the space in sculptural terms it\n", - "also complexifies it in terms of its\n", - "placehood, as an object, and within\n", - "its social, chronological and\n", + "recording devices; on good weather; on\n", + "not being discovered when acting in\n", + "secret; on the theatre of its enaction\n", + "being an oxygenation of the still\n", + "smouldering embers of history. At the\n", + "same time as it articulates the space in\n", + "sculptural terms it also complexifies it\n", + "in terms of its placehood, as an object,\n", + "and within its social, chronological and\n", "economic contexts.\n", "Knowing that there is freedom in\n", - "suprise, it is along this fault line\n", - "of rationality and the non-rational\n", - "that Gordon Matta-Clark runs his\n", - "fingers. Fingers which he also uses\n", - "to tease another split - that\n", - "between art and architecture.\n", - "Comparable to his relationship to\n", - "minimal art, rather than partaking\n", - "in the functionalist urban sublime\n", - "of the glass and steel skyscraper\n", - "typified in the architecture of Mies\n", - "van der Rohe - with its interior\n", + "suprise, it is along this fault line of\n", + "rationality and the non-rational that\n", + "Gordon Matta-Clark runs his fingers.\n", + "Fingers which he also uses to tease\n", + "another split - that between art and\n", + "architecture. Comparable to his\n", + "relationship to minimal art, rather than\n", + "partaking in the functionalist urban\n", + "sublime of the glass and steel\n", + "skyscraper typified in the architecture\n", + "of Mies van der Rohe - with its interior\n", "opened to make it more governable -\n", "Matta-Clark's work operates a dis-\n", "enclosure of urban space: its\n", @@ -329,413 +2046,372 @@ "tension inherent in such spaces is\n", "portrayed well by Gilles Deleuze in\n", "describing \"any-space-whatever\" the\n", - "half-urban, half-waste lands often\n", - "used as sets and exteriors in post\n", - "World War Two films: \"Any-space-\n", - "whatever is a perfectly singular\n", - "space, which has merely lost its\n", - "homogeneity, that is, the principle\n", - "of its metric relations or the\n", - "connection of its own parts, so that\n", + "half-urban, half-waste lands often used\n", + "as sets and exteriors in post World War\n", + "Two films: \"Any-space-whatever is a\n", + "perfectly singular space, which has\n", + "merely lost its homogeneity, that is,\n", + "the principle of its metric relations or\n", + "the connection of its own parts, so that\n", "linkages can be made in an infinite\n", "number of ways\" This tension between\n", - "particularity and obliteration found\n", - "in the European bombsite translated\n", - "well into the conditions in which\n", - "Matta-Clark worked out of necessity\n", - "and choice: buildings eviscerated by\n", - "the progress of urban restructuring.\n", + "particularity and obliteration found in\n", + "the European bombsite translated well\n", + "into the conditions in which Matta-Clark\n", + "worked out of necessity and choice:\n", + "buildings eviscerated by the progress of\n", + "urban restructuring.\n", "\"There is a kind of complexity that\n", "comes from taking an otherwise\n", - "completely normal, conventional,\n", - "albeit anonymous situation and\n", - "redefining it, retranslating it into\n", - "overlapping and multiple readings of\n", - "conditions past and present\"\n", + "completely normal, conventional, albeit\n", + "anonymous situation and redefining it,\n", + "retranslating it into overlapping and\n", + "multiple readings of conditions past and\n", + "present\"\n", "As an aside, this too easy lock-down\n", - "into textuality implied by the use\n", - "of the word 'reading' is of his\n", - "time, (and one replicated in\n", - "perpetuity by artists hungry for the\n", - "valorising seal of textual\n", - "authority) but it rather understates\n", - "the multiple sensory affect of the\n", - "work. It is this aspect, of working\n", - "with material that is in the process\n", - "of being made anonymous, generic -\n", - "yet turning it into an engine of\n", + "into textuality implied by the use of\n", + "the word 'reading' is of his time, (and\n", + "one replicated in perpetuity by artists\n", + "hungry for the valorising seal of\n", + "textual authority) but it rather\n", + "understates the multiple sensory affect\n", + "of the work. It is this aspect, of\n", + "working with material that is in the\n", + "process of being made anonymous, generic\n", + "- yet turning it into an engine of\n", "connotation - that is particularly\n", - "suggestive for a context that, in\n", - "its apparent dematerialization seems\n", - "most likely to resist it: software.\n", + "suggestive for a context that, in its\n", + "apparent dematerialization seems most\n", + "likely to resist it: software.\n", "Software lacks the easy evidence of\n", "time, of human habitation, of the\n", - "connotations of familial, industrial\n", - "or office life embedded in the\n", - "structure of a building. As a\n", - "geometry realised in synthetic\n", - "space, it is an any-space-whatever,\n", - "but dry-cleaned and prised out of\n", - "time.\n", + "connotations of familial, industrial or\n", + "office life embedded in the structure of\n", + "a building. As a geometry realised in\n", + "synthetic space, it is an any-space-\n", + "whatever, but dry-cleaned and prised out\n", + "of time.\n", "Use of the computer happens at many\n", - "levels, both hard and soft. A\n", - "crucial difference with how we\n", - "traditionally understand\n", - "architecture, rather than what it is\n", - "becoming under the impact of\n", + "levels, both hard and soft. A crucial\n", + "difference with how we traditionally\n", + "understand architecture, rather than\n", + "what it is becoming under the impact of\n", "information technologies, is that\n", - "everything necessarily happens at\n", - "human scale. That the size, and to a\n", - "certain extent the organisation, of\n", - "people has a determining effect on\n", - "the shape of the building.\n", - "Conversely, the axiomatics that\n", - "channel and produce the behaviour\n", - "necessary for use of computers\n", - "happen at both human and subscopic\n", - "scale. The hard organs of the\n", - "computer: mouse, keyboard, modem,\n", - "microphone, monitor, though all\n", - "matched to greater or lesser extents\n", - "to human form, all snake back to the\n", - "CPU.\n", - "Whilst what is of interest here is\n", - "an investigation of the moment of\n", - "composition between user and\n", - "computer, and not a reiteration of\n", - "text-book schematics, it is worth\n", - "noting that simply because they\n", - "occur at the level of electrons the\n", - "axes of software are impossible to\n", - "find for the average user. Just as\n", - "when watching a film we miss out the\n", - "black lines in between the frames\n", + "everything necessarily happens at human\n", + "scale. That the size, and to a certain\n", + "extent the organisation, of people has a\n", + "determining effect on the shape of the\n", + "building. Conversely, the axiomatics\n", + "that channel and produce the behaviour\n", + "necessary for use of computers happen at\n", + "both human and subscopic scale. The hard\n", + "organs of the computer: mouse, keyboard,\n", + "modem, microphone, monitor, though all\n", + "matched to greater or lesser extents to\n", + "human form, all snake back to the CPU.\n", + "Whilst what is of interest here is an\n", + "investigation of the moment of\n", + "composition between user and computer,\n", + "and not a reiteration of text-book\n", + "schematics, it is worth noting that\n", + "simply because they occur at the level\n", + "of electrons the axes of software are\n", + "impossible to find for the average user.\n", + "Just as when watching a film we miss out\n", + "the black lines in between the frames\n", "flashing past at 24 per second, the\n", - "invisible walls of software are\n", - "designed to remain inscrutable.\n", - "However, the fact that these\n", - "subscopic transformation of data\n", - "inside the computer are\n", - "simultaneously real and symbolic;\n", - "where the most abstract of\n", - "theoretical terms to be found in\n", - "mathematics becomes a thing, allows\n", - "the possibility of a kinaesthetic\n", - "investigation. An investigation that\n", - "opens up a chance for dialogue\n", - "between the smooth running of the\n", - "machine and material that might be\n", - "thought of as contamination within\n", - "the terms of its devices.\n", + "invisible walls of software are designed\n", + "to remain inscrutable. However, the fact\n", + "that these subscopic transformation of\n", + "data inside the computer are\n", + "simultaneously real and symbolic; where\n", + "the most abstract of theoretical terms\n", + "to be found in mathematics becomes a\n", + "thing, allows the possibility of a\n", + "kinaesthetic investigation. An\n", + "investigation that opens up a chance for\n", + "dialogue between the smooth running of\n", + "the machine and material that might be\n", + "thought of as contamination within the\n", + "terms of its devices.\n", "Much of the 'legitimate' writing and\n", "artistic production on information\n", - "technology is concerned with\n", - "expanding the application of the\n", - "theoretical devices used to\n", - "recognise replication and\n", - "simulation, (what constitutes 'the\n", - "real') and of those used to\n", - "recognise surveillance. These\n", - "themes, carried over most commonly\n", - "from debates around photography and\n", - "architecture, are of course\n", - "suggestive and in some cases useful,\n", - "but in the easiness of their\n", - "translation we should not forget\n", - "that they are moving into a context\n", - "that subsumes them and is not marked\n", - "by their boundaries. In\n", - "acknowledging the distinct\n", - "interconnectedness of the symbolic\n", - "and material, this is also an\n", + "technology is concerned with expanding\n", + "the application of the theoretical\n", + "devices used to recognise replication\n", + "and simulation, (what constitutes 'the\n", + "real') and of those used to recognise\n", + "surveillance. These themes, carried over\n", + "most commonly from debates around\n", + "photography and architecture, are of\n", + "course suggestive and in some cases\n", + "useful, but in the easiness of their\n", + "translation we should not forget that\n", + "they are moving into a context that\n", + "subsumes them and is not marked by their\n", + "boundaries. In acknowledging the\n", + "distinct interconnectedness of the\n", + "symbolic and material, this is also an\n", "approach which is opposed to the\n", - "conception of 'virtuality' being\n", - "taken as the desired end state of\n", - "digital technology: taking\n", - "virtuality as a condition which is\n", - "contained and made possible by the\n", - "actuality of digital media.\n", + "conception of 'virtuality' being taken\n", + "as the desired end state of digital\n", + "technology: taking virtuality as a\n", + "condition which is contained and made\n", + "possible by the actuality of digital\n", + "media.\n", "To provide the skewed access to the\n", "machines that such an investigation\n", - "requires we can siphon some fuel\n", - "from the goings-on of Gordon Matta-\n", - "Clark: use faults; disturb\n", - "conventions; exploit idiosyncrasies.\n", - "Faults arise in systems when the\n", - "full consequences of technical\n", - "changes are not followed through\n", - "before the changes are made, or are\n", - "deliberately covered up. This is an\n", - "enormous game of hiding and finding\n", - "being played by a cast of millions\n", - "and one which has wide\n", - "ramifications. Perhaps the most\n", - "crucial faultlines being traced at\n", - "the moment are those around\n", - "security: the world of minutiae that\n", - "compose the integrity of existence\n", - "in dataspace and the way it maps\n", - "back onto everyday life.\n", + "requires we can siphon some fuel from\n", + "the goings-on of Gordon Matta-Clark: use\n", + "faults; disturb conventions; exploit\n", + "idiosyncrasies.\n", + "Faults arise in systems when the full\n", + "consequences of technical changes are\n", + "not followed through before the changes\n", + "are made, or are deliberately covered\n", + "up. This is an enormous game of hiding\n", + "and finding being played by a cast of\n", + "millions and one which has wide\n", + "ramifications. Perhaps the most crucial\n", + "faultlines being traced at the moment\n", + "are those around security: the world of\n", + "minutiae that compose the integrity of\n", + "existence in dataspace and the way it\n", + "maps back onto everyday life.\n", "The profoundest restructuring of\n", - "existence is taking place at the\n", - "levels of the electron and the gene.\n", - "Technical complexity, commercial\n", - "pressure and the mechanisms of\n", - "expression management are blocking\n", - "almost all real public discourse on\n", - "the former. They are less able to do\n", - "so to the latter.\n", + "existence is taking place at the levels\n", + "of the electron and the gene. Technical\n", + "complexity, commercial pressure and the\n", + "mechanisms of expression management are\n", + "blocking almost all real public\n", + "discourse on the former. They are less\n", + "able to do so to the latter.\n", "Whether radical or reactionary,\n", - "traditional political structures\n", - "have, either deliberately or through\n", - "drastic relevance-decay, abdicated\n", - "almost all decision making in these\n", - "areas to commercial interests. From\n", - "a similar catalogue of stock\n", - "characters to that of the artist,\n", - "the pariah/hero figure of the hacker\n", - "has largely set the pace for any\n", - "critical understanding of the\n", + "traditional political structures have,\n", + "either deliberately or through drastic\n", + "relevance-decay, abdicated almost all\n", + "decision making in these areas to\n", + "commercial interests. From a similar\n", + "catalogue of stock characters to that of\n", + "the artist, the pariah/hero figure of\n", + "the hacker has largely set the pace for\n", + "any critical understanding of the\n", "changes happening in and between\n", "information technologies.\n", - "Picking up a random copy of the\n", - "hacker zine 2600 - summer 1996 - the\n", - "scale and ramifications of issues\n", - "being dealt with in this area\n", - "becomes apparent. Subjects covered\n", - "include: an editorial on the\n", - "position of hackers in the legal\n", - "system and media; the code of a\n", - "LINUX program to block internet\n", - "sites by flooding them with\n", - "connection requests; a list of free\n", - "phone carriers in Australia;\n", - "acquiring phone services under\n", - "imaginary names; the\n", - "telecommunications infrastructure in\n", + "Picking up a random copy of the hacker\n", + "zine 2600 - summer 1996 - the scale and\n", + "ramifications of issues being dealt with\n", + "in this area becomes apparent. Subjects\n", + "covered include: an editorial on the\n", + "position of hackers in the legal system\n", + "and media; the code of a LINUX program\n", + "to block internet sites by flooding them\n", + "with connection requests; a list of free\n", + "phone carriers in Australia; acquiring\n", + "phone services under imaginary names;\n", + "the telecommunications infrastructure in\n", "Prague and Sarajevo; encryption;\n", "consumer data security; catching\n", "passwords to specific multi-user\n", - "computer systems; passenger in-\n", - "flight communications systems;\n", - "phreaking smart pay-phones; starting\n", - "a hacker scene; the transcription of\n", - "part of a court case involving the\n", - "show trial of hacker, Bernie S; plus\n", - "pages of small ads and letters.\n", - "(Perhaps noticeable in comparing the\n", - "importance of these scenes with that\n", - "of art is that the second-order\n", - "commentary on the work comes mainly\n", - "from the media/legal system rather\n", - "than just critics).\n", + "computer systems; passenger in-flight\n", + "communications systems; phreaking smart\n", + "pay-phones; starting a hacker scene; the\n", + "transcription of part of a court case\n", + "involving the show trial of hacker,\n", + "Bernie S; plus pages of small ads and\n", + "letters. (Perhaps noticeable in\n", + "comparing the importance of these scenes\n", + "with that of art is that the second-\n", + "order commentary on the work comes\n", + "mainly from the media/legal system\n", + "rather than just critics).\n", "The faults identified by hackers and\n", "others, where ethico-aesthetic\n", - "situations are compounded under\n", - "sheer pressure into technical ones,\n", - "are implicated in wider mechanisms.\n", - "These technical situations can be\n", - "investigated from any point or\n", - "development within these wider\n", - "mechanisms regardless of the degree\n", - "of technical proficiency. Cracking\n", - "open technical situations with the\n", - "wider social conditions within which\n", - "they occur is an increasingly\n", - "necessary task. Doing so in a manner\n", - "that creates a transversal\n", - "relationship between different,\n", - "perhaps walled-off, components, and\n", - "that intimately works the technical\n", - "with other kinds of material or\n", - "symbolic devices is something that\n", - "remains to be developed. Tracking\n", - "the faults, the severed surfaces, of\n", - "technology is one way in which this\n", - "can begin to be done.\n", + "situations are compounded under sheer\n", + "pressure into technical ones, are\n", + "implicated in wider mechanisms. These\n", + "technical situations can be investigated\n", + "from any point or development within\n", + "these wider mechanisms regardless of the\n", + "degree of technical proficiency.\n", + "Cracking open technical situations with\n", + "the wider social conditions within which\n", + "they occur is an increasingly necessary\n", + "task. Doing so in a manner that creates\n", + "a transversal relationship between\n", + "different, perhaps walled-off,\n", + "components, and that intimately works\n", + "the technical with other kinds of\n", + "material or symbolic devices is\n", + "something that remains to be developed.\n", + "Tracking the faults, the severed\n", + "surfaces, of technology is one way in\n", + "which this can begin to be done.\n", "This intimacy, as well as concerning\n", - "itself with the cracks and\n", - "disjunctures, the faults in systems,\n", - "can also become involved in\n", - "situations where they appear to be\n", - "most smooth. For the average user,\n", - "the conventions of personal\n", - "computers appear secure, rational,\n", - "almost natural, if a little awkward\n", - "and tricky at times. Like many\n", - "social protocols, computer use is a\n", - "skill which is forgetful of its\n", + "itself with the cracks and disjunctures,\n", + "the faults in systems, can also become\n", + "involved in situations where they appear\n", + "to be most smooth. For the average user,\n", + "the conventions of personal computers\n", + "appear secure, rational, almost natural,\n", + "if a little awkward and tricky at times.\n", + "Like many social protocols, computer use\n", + "is a skill which is forgetful of its\n", "acquisition. Perhaps that user can\n", "remember back to when they first got\n", - "hold of a machine, when they were\n", - "waving a mouse in the air to get the\n", - "cursor to move towards them; afraid\n", - "to touch the wrong key in case it\n", - "damaged something; saving files all\n", - "over the place; trying to draw\n", - "curves in Pagemaker; putting\n", - "floppies in upside-down; trying to\n", - "work a cracked copy of CuBase with\n", - "something missing; learning how to\n", - "conform to the machine in order to\n", - "make the machine conform to them...\n", - "In computer interface design the\n", - "form-function fusion is made on the\n", - "basis of averages, a focus grouped\n", - "reality based on peoples'\n", - "understanding of a context in which\n", - "it is impossible for them to\n", + "hold of a machine, when they were waving\n", + "a mouse in the air to get the cursor to\n", + "move towards them; afraid to touch the\n", + "wrong key in case it damaged something;\n", + "saving files all over the place; trying\n", + "to draw curves in Pagemaker; putting\n", + "floppies in upside-down; trying to work\n", + "a cracked copy of CuBase with something\n", + "missing; learning how to conform to the\n", + "machine in order to make the machine\n", + "conform to them...\n", + "In computer interface design the form-\n", + "function fusion is made on the basis of\n", + "averages, a focus grouped reality based\n", + "on peoples' understanding of a context\n", + "in which it is impossible for them to\n", "function unless they develop the\n", - "understanding already been mapped\n", - "out for them. Perhaps in this\n", - "context, the user will always be the\n", - "ideal user, because if they are not\n", - "ideal - if, within this context at\n", - "least, they do not conform to the\n", - "ideal - they won't be a user.\n", - "Interface design is a discipline\n", - "that aspires to saying nothing.\n", - "Instead of trying to crack this\n", - "invisibility, one technique for\n", - "investigation is to tease it into\n", - "overproduction. Why use one mouse-\n", - "click when ten-thousand will do? Why\n", - "use any visual information when\n", - "navigation is perfectly possible\n", - "with sound alone? Why just look at\n", - "the interface, why not print it out\n", - "and wear it? Why read text on screen\n", - "when a far better technology is\n", - "paper? Why use a cursor when the\n", - "object you're actually pointing at\n", - "can function perfectly well to\n", - "indicate the mouse position?\n", + "understanding already been mapped out\n", + "for them. Perhaps in this context, the\n", + "user will always be the ideal user,\n", + "because if they are not ideal - if,\n", + "within this context at least, they do\n", + "not conform to the ideal - they won't be\n", + "a user.\n", + "Interface design is a discipline that\n", + "aspires to saying nothing. Instead of\n", + "trying to crack this invisibility, one\n", + "technique for investigation is to tease\n", + "it into overproduction. Why use one\n", + "mouse-click when ten-thousand will do?\n", + "Why use any visual information when\n", + "navigation is perfectly possible with\n", + "sound alone? Why just look at the\n", + "interface, why not print it out and wear\n", + "it? Why read text on screen when a far\n", + "better technology is paper? Why use a\n", + "cursor when the object you're actually\n", + "pointing at can function perfectly well\n", + "to indicate the mouse position?\n", "In any other social context, what\n", - "because of the arbitrary nature of\n", - "the abstract machine appear as\n", - "protocols, would be revealed as\n", - "mannerisms. (Take a fast taxi\n", - "through the ruined neighbourhoods of\n", - "cyberspace by travelling through\n", - "emulators of old computers: punch a\n", - "hole in the surface of your shiny\n", - "new machine by loading up the black\n", - "hole of a 1k ZX81). When the\n", + "because of the arbitrary nature of the\n", + "abstract machine appear as protocols,\n", + "would be revealed as mannerisms. (Take a\n", + "fast taxi through the ruined\n", + "neighbourhoods of cyberspace by\n", + "travelling through emulators of old\n", + "computers: punch a hole in the surface\n", + "of your shiny new machine by loading up\n", + "the black hole of a 1k ZX81). When the\n", "construction of machines from the\n", "fundamental objects of the hardware:\n", - "bits, bytes, words, addresses,\n", - "upwards are realised to be synthetic\n", - "rather than given, or even\n", - "necessarily rational - though\n", - "produced through the application of\n", - "rationalisation, logic - they become\n", + "bits, bytes, words, addresses, upwards\n", + "are realised to be synthetic rather than\n", + "given, or even necessarily rational -\n", + "though produced through the application\n", + "of rationalisation, logic - they become\n", "subject to wider possibilities for\n", - "change. Software as an aggregate of\n", - "very small sensory experiences and\n", - "devices becomes an engine, not just\n", - "of connotation, but of\n", - "transformation.\n", + "change. Software as an aggregate of very\n", + "small sensory experiences and devices\n", + "becomes an engine, not just of\n", + "connotation, but of transformation.\n", "Some of those transformations in\n", - "occurrence can be sensed in the\n", - "sheer idiosyncrasy of much software.\n", - "In the Atrocity Exhibition and other\n", - "books, J.G. Ballard mixes flat,\n", - "technical descriptions of body\n", - "positions as they come into\n", - "composition with the synthetic\n", - "geometry of architecture,\n", - "automobiles, furnishings, to produce\n", - "an investigation of machined\n", - "erotics. He continues and\n", - "intensifies the Surrealist stratagem\n", - "of cutting together transgressed\n", - "functionalities in order to regain\n", - "entry to the order of the symbolic.\n", - "To an objective observer, the\n", - "transitory point at which a thigh\n", - "comes into convergence with a table\n", - "also suggests the way in which the\n", - "original Microsoft Windows interface\n", - "was bolted on top of the old DOS\n", - "language. The tectonic impact of two\n", - "neural landscapes performs an\n", - "operation called progress. The\n", - "software is tricked into doing\n", - "something more than it was intended\n", - "for. Instead of dramatic breaks,\n", - "hacks and incrementally adaptive\n", - "mutations are often the way things\n", - "are made to move forward. (For\n", - "instance on Apple computers, the\n", - "desktop is already being bypassed by\n", - "the absorption of some of the\n", - "functions of the finder into various\n", - "applications. From being a grossly\n", - "over-metaphoric grand entrance hall,\n", - "it has become a back alley). When\n", - "they work well they are elegant\n", - "usable collages. Often they are\n", - "botch jobs. In both cases, the\n", - "points at which the systems mesh,\n", - "collide, or repel, can, at the\n", - "points of confused demarcation,\n", - "produce secret gardens, car parks,\n", - "lamps that fuck.\n", - "Idiosyncrasies can also develop when\n", - "a software system is applied to a\n", + "occurrence can be sensed in the sheer\n", + "idiosyncrasy of much software. In the\n", + "Atrocity Exhibition and other books,\n", + "J.G. Ballard mixes flat, technical\n", + "descriptions of body positions as they\n", + "come into composition with the synthetic\n", + "geometry of architecture, automobiles,\n", + "furnishings, to produce an investigation\n", + "of machined erotics. He continues and\n", + "intensifies the Surrealist stratagem of\n", + "cutting together transgressed\n", + "functionalities in order to regain entry\n", + "to the order of the symbolic. To an\n", + "objective observer, the transitory point\n", + "at which a thigh comes into convergence\n", + "with a table also suggests the way in\n", + "which the original Microsoft Windows\n", + "interface was bolted on top of the old\n", + "DOS language. The tectonic impact of two\n", + "neural landscapes performs an operation\n", + "called progress. The software is tricked\n", + "into doing something more than it was\n", + "intended for. Instead of dramatic\n", + "breaks, hacks and incrementally adaptive\n", + "mutations are often the way things are\n", + "made to move forward. (For instance on\n", + "Apple computers, the desktop is already\n", + "being bypassed by the absorption of some\n", + "of the functions of the finder into\n", + "various applications. From being a\n", + "grossly over-metaphoric grand entrance\n", + "hall, it has become a back alley). When\n", + "they work well they are elegant usable\n", + "collages. Often they are botch jobs. In\n", + "both cases, the points at which the\n", + "systems mesh, collide, or repel, can, at\n", + "the points of confused demarcation,\n", + "produce secret gardens, car parks, lamps\n", + "that fuck.\n", + "Idiosyncrasies can also develop when a\n", + "software system is applied to a\n", "situation in toto. Perhaps most\n", - "obviously, databases. The production\n", - "of software dedicated to knowledge\n", - "organisation and information\n", - "retrieval, a field largely seen as\n", - "the domain of linguists and computer\n", - "scientists, immediately brings with\n", - "it a range of problematics that are\n", - "at once both cultural and technical.\n", - "The technology underlying search\n", - "engines and databases - set theory -\n", - "is based on creating classifications\n", - "of information according to\n", - "arbitrarily or contingently\n", + "obviously, databases. The production of\n", + "software dedicated to knowledge\n", + "organisation and information retrieval,\n", + "a field largely seen as the domain of\n", + "linguists and computer scientists,\n", + "immediately brings with it a range of\n", + "problematics that are at once both\n", + "cultural and technical. The technology\n", + "underlying search engines and databases\n", + "- set theory - is based on creating\n", + "classifications of information according\n", + "to arbitrarily or contingently\n", "meaningful schemes. It is in the\n", "application and development of those\n", - "schemes with all their inevitable\n", - "biases and quirks that the\n", - "aesthetics of classification lies.\n", + "schemes with all their inevitable biases\n", + "and quirks that the aesthetics of\n", + "classification lies.\n", "Attuned to quantifying; organising;\n", "isolating and drawing into\n", - "relationships, particular cases of\n", - "the possible and working them till\n", - "they bleed some kind of relevance,\n", - "databases exist firmly on the cusp\n", - "of the rational and non-rational.\n", - "When the Subjective Exercise\n", - "Experiences Scale locks onto the\n", - "Human Genome Initiative processing\n", - "library stock-holding data: prepare\n", - "for something approaching poetry.\n", - "Perhaps in some ways sensing into\n", - "the future this destratification of\n", - "conventions is the architecture of\n", - "the internet. This, (almost despite\n", - "its position within and between\n", - "various political, commercial and\n", - "bureaucratic formations) after all,\n", - "is a network which functions on a\n", - "basis of being broken, continuously\n", - "finding the shortest route between\n", - "nodes: even as a squatter will\n", - "always see the empty buildings on\n", - "any street before those that are\n", - "full. At these shifting, transitory\n", - "points where sensoriums intermesh,\n", - "repel, clash and resynthesize are\n", - "the possibilities for a ludic\n", + "relationships, particular cases of the\n", + "possible and working them till they\n", + "bleed some kind of relevance, databases\n", + "exist firmly on the cusp of the rational\n", + "and non-rational. When the Subjective\n", + "Exercise Experiences Scale locks onto\n", + "the Human Genome Initiative processing\n", + "library stock-holding data: prepare for\n", + "something approaching poetry.\n", + "Perhaps in some ways sensing into the\n", + "future this destratification of\n", + "conventions is the architecture of the\n", + "internet. This, (almost despite its\n", + "position within and between various\n", + "political, commercial and bureaucratic\n", + "formations) after all, is a network\n", + "which functions on a basis of being\n", + "broken, continuously finding the\n", + "shortest route between nodes: even as a\n", + "squatter will always see the empty\n", + "buildings on any street before those\n", + "that are full. At these shifting,\n", + "transitory points where sensoriums\n", + "intermesh, repel, clash and resynthesize\n", + "are the possibilities for a ludic\n", "transdimensionality. Knock through a\n", "wall, and beyond the clouds of brick\n", - "dust clogging up and exciting your\n", - "eyes, tongue, palate and throat,\n", - "there's another universe: an empty,\n", + "dust clogging up and exciting your eyes,\n", + "tongue, palate and throat, there's\n", + "another universe: an empty,\n", "unclassifiable complex seething with\n", "life.\n", "Matthew Fuller, May 1997\n", @@ -750,7 +2426,7 @@ "\n", "import textwrap\n", "\n", - "WIDTH=36\n", + "WIDTH=40\n", "\n", "for i,p in enumerate(tt):\n", " p = p.strip()\n", @@ -761,12 +2437,12 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "def esc (t):\n", - " return t.replace('\"', r'\\\"')\n", + "\n", + "WIDTH=40\n", "\n", "with open(\"visceral_facades.lua\", \"w\") as fout:\n", " print (\"text={}\", file=fout)\n",