At midninght tonight, the UK (and EU) copyright on James Joyce’s Ulysses expires. (It’s already in the public domain in the US.

So in just a few hours it will be legal to download this file and load it in your ebook reading device or program here:


I think that @ubuwe said it best:

“Fuck you Stephen Joyce. EU copyright on James Joyce works ends at midnight: (via )”

Art Open Data – Government Art Collection Dataset

I have written a script to download a dataset containing collection information from the UK Government Art Collection site and save it in tab-seperated-value files and an sqlite database for easy access. As the data is from a UK government agency it’s under the OGL.

You don’t need to run the script, a downloaded dataset is included in the project archive:



The dataset doesn’t feature as many collections as the GAC website claims to feature, but the script does omit many duplicates. This project was inspired by Kasabi‘s scraper, adding the ability to download code and data in an easy-to-use format.

The Mona Lisa Of Disapproval


Psychogeodata (3/3)

cemetary random walk

The examples of Psychogeodata given so far have used properties of the geodata graph and of street names to guide generation of Dérive. There are many more ways that Psychogeodata can be processed, some as simple as those already discussed, some much more complex.

General Strategies

There are some general strategies that most of the following techniques can be used as part of.

  • Joining the two highest or lowest examples of a particular measure.

  • Joining the longest run of the highest or lowest examples of a particular measure.

  • Joining a series of destination waypoints chosen using a particular measure.

The paths constructed using these strategies can also be forced to be non-intersecting, and/or the waypoints re-ordered to find the shortest journey between them.


Other mathematical properties of graphs can produce interesting walks. The length of edges or ways can be used to find sequences of long or short distances.

Machine learning techniques, such as clustering, can arrange nodes spatially or semantically.

Simple left/right choices and fixed or varying degrees can create zig-zag or spiral paths for set distances or until the path self-intersects.

Map Properties

Find long or short street names or street names with the most or fewest words or syllables and find runs of them or use them as waypoints.

Find all the street names on a particular theme (colours, saints’ names, trees) and use them as waypoints to be joined in a walk.

Streets that are particularly straight or crooked can be joined to create rough or smooth paths to follow.

If height information can be added to the geodata graph, node elevation can be used as a property for routing. Join high and low points, flow downhill like water, or find the longest runs of valleys or ridges.

Information about Named entities extracted from street, location and district names from services such as DBPedia or Freebase and used to connect them. Dates, historical locations, historical facts, biographical or scientific information and other properties are available from such services in a machine-readable form.

Routing between peaks and troughs in sociological information such as population, demographics, crime occurrence, ploitical affiliation, property prices can produce a journey through the social landscape.

Locations of Interest

Points of interest in OpenStreetMap’s data are represented by nodes tagged as “historic”, “amenity”, “leisure”, etc. . It is trivial to find these nodes to use as destinations for walks across the geodata graph. They can then be grouped and used as waypoints in a route that will visit every coffee shop in a town, or one of each kind of amenity in alphabetical order, in an open or closed path for example. Making a journey joining each location with a central base will produce a star shape.

Places of worship (or former Woolworth stores can be used to find https://en.wikipedia.org/wiki/Ley_line using linear regression or the techniques discussed below in “Geometry and Computer Graphics”.


The words of poems or song lyrics (less stopwords), matched either directly or through hypernyms using Wordnet, can be searched for in street and location names to use as waypoints in a path. Likewise named entities extracted from stories, news items and historical accounts.

More abstract narratives can be constructed using concepts from The Hero’s Journey.

Nodes found using any other technique can be grouped or sequenced semantically as waypoints using Wordnet hypernym matching.


Renamed Tube maps, and journeys through one city navigated using a map of another, are examples of using isomorphism in Psychogeography.

Entire city graphs are very unlikely to be isomorphic, and the routes between famous locations will contain only a few streets anyway, so sub-graphs are both easier and more useful for matching. Better geographic correlations between locations can be made by scoring possible matches using the lengths of ways and the angles of junctions. Match accuracy can be varied by changing the tolerances used when scoring.

Simple isomorphism checking can be performed using The NetworkX library’s functions . Projecting points from a subgraph onto a target graph then brute-force searching for matches by varying the matrix used in the projection and scoring each attempt based on how closely the points match . Or Isomorphisms can be bred using genetic algorithms, using degree of isomorphism as the fitness function and proposed subgraphs as the population.

The Social Graph

Another key contemporary application of graph theory is Social Network Analysis. The techniques and tools from both the social science and web 2.0 can be applied directly to geodata graphs.

Or the graphs of people’s social relationships from Facebook, Twitter and other services can mapped onto their local geodata graph using the techniques from “Isomorphism” above, projecting their social space onto their geographic space for them to explore and experience anew.

Geometry and Computer Graphics

Computer geometry and computer graphics or computer vision techniques can be used on the nodes and edges of geodata to find forms.

Shapes can be matched by using them to cull nodes using an insideness test or to find the nearest points to the lines of the shape. Or line/edge intersection can be used. Such matching can be made fuzzy or accurate using the matching techniques in “Isomorphism”.

Simple geometric forms can be found – triangles, squares and quadrilaterals, stars. Cycle bases may be a good source of these. Simple shapes can be found – smiley faces, house shapes, arrows, magical symbols. Sequences of such forms can be joined based on their mathematical properties or on semantics.

For more complex forms, face recognition, object recognition, or OCR algorithms can be used on nodes or edges to find shapes and sequences of shapes.

Classic computer graphics methods such as L-sytems, turtle graphics, Conway’s Game of Life, or Voronoi diagrams can be applied to the Geodata graph in order to produce paths to follow.

Geometric animations or tweens created on or mapped onto the geodata graph can be walked on successive days.

Lived Experience

GPS traces generated by an individual or group can be used to create new journeys relating to personal or shared history and experience. So can individual or shared checkins from social networking services. Passenger level information for mass transport services is the equivalent for stations or airports.

Data streams of personal behaviour such as scrobbles, purchase histories, and tweets can be fetched and processed semantically in order to map them onto geodata. This overlaps with “Isomorphism”, “Semantics”, and “The Social Graph” above.

Sensor Data

Temperature, brightness, sound level, radio wave, radiation, gravity and entropy levels can all be measured or logged and used as weights for pathfinding. Ths brings Psychogeodata into the realm of Psychogeophysics.


This series of posts has made the case for the concept, practicality, and future potential of Psychogeodata. The existing code produces interesting results, and there’s much more that can be added and experienced.

(Part one of this series can be found here, part two can be found here . The source code for the Psychogeodata library can be found here .)

Psychogeodata (2/3)


Geodata represents maps as graphs of nodes joined by edges (…as points joined by lines). This is a convenient representation for processing by computer software. Other data can be represented in this way, including words and their relationships.

We can map the names of streets into the semantic graph of WordNet using NLTK. We can then establish how similar words are by searching the semantic graph to find how far apart they are. This semantic distance can be used instead of geographic distance when deciding which nodes to choose when pathfinding.

Mapping between these two spaces (or two graphs) is a conceptual mapping, and searching lexicographic space using hypernyms allows abstraction and conceptual slippage to be introduced into what would otherwise be simple pathfinding. This defamiliarizes and conceptually enriches the constructed landscape, two key elements of Psychogeography.

The example above was created by the script derive_sem, which creates random walks between semantically related nodes. It’s easy to see the relationship between the streets it has chosen. You can see the html version of the generated file here, and the script is included with the Psychogeodata project at https://gitorious.org/robmyers/psychogeodata .

(Part one of this series can be found here, part three will cover potential future directions for Psychogeodata.)

Psychogeodata (1/3)


tl;dr Psychogeographic Geodata using OpenStreetMap in Python. Download here.

Psychogeography is a set of techniques for defamiliarizing the landscape, particularly the urban landscape. It is a way of resisting and critiquing the historically, culturally and politically imposed reality of the built environment. Starting with Guy Debord, psychogeography has since followed the rest of the Situationist‘s techniques in being recuperated by society. But as Christine Harold points out in “Ourspace”, this can be redressed by intensifying the strategies of Situationism into new forms.

The town and tube maps used by previous psychogeographers have been replaced in modern experiences of the landscape by Geodata, a mesh of points joined by the lines of streets and accompanied by tagged information describing them for human and machine use. Combining Psychogeography and Geodata gives us Psychogeodata.


Geodata is tied to the logic of Googlization, of making the world rational and tractable for machines within the economy. Its positioning between commerce and consumer makes it ideal raw material for Situationist-inspired ironization. And Geodata, like other forms of information, can be made free. OpenStreetMap is a very successful project that does so.

Taking the inhuman logic of Geodata as the basis for Psychogeography allows us to use Graph Theory to examine the landscape mathematically. Graph Theory is also used in Social Network Analysis, and in discussions of the topology of the internet. It is a powerful mathematical abstraction.

The randomness, unfamiliarity and conceptual slippage that this provides us with can intensify historical strategies of Dérive. In order to do so we need Geodata (from OSM) and software to manipulate and present it. The software that I have written for Psychogeodata is in the Python programming language. It operates on graphs using the http://networkx.lanl.gov/ library. And the output is rendered using the OpenLayers Javascript library.


The first scripts written using the Psychogeodata library concentrate on the mathematics of graph theory. Click on the name of each script to open an example of its output in a new tab or window (which your browser’s popup blocker may warn you about):

(Disclaimer: This software currently generates paths that may or may not be safe or practical to actually follow. Use your discretion and common sense in choosing which ones to actually travel.)

derive – Generates random walks and non-self-intersecting random walks.

derive_degree – Generates journeys between high-and-low-connectivity nodes.

derive_loop – Generates circuitous journeys based on cycle bases

derive_tags – Generates paths between nodes with particular tags.


To download the software and for more information, see:


(Part two of this series will present some scripts based on semantics, part three will cover potential future directions for Psychogeodata.)

A Balloon Dog Print

Here’s a picture of the Balloon Dog printed on a Makerbot:


I love the “nose”.

Thanks Lunpa!

Source Code

The part of my review of “White Heat Cold Logic” that seems to have
caught people’s attention is:

“for preservation, criticism and artistic progress (and I do mean
progress) it is vital that as much code as possible is found and
published under a Free Software licence (the GPL). Students of art
computing can learn a lot from the history of their medium despite the
rate at which the hardware and software used to create it may change,
and code is an important part of that.”


I have very specific reasons for saying this, informed by personal

When I was an art student at Kingston Polytechnic, I was given an
assignment to make a new artwork by combining two previous artworks: a
Jackson Pollock drip painting and a Boccioni cyclist. I could not “read”
the Boccioni cyclist: the forms did not make sense to me, and so I was
worried I would not be able to competently complete the assignment. As
luck would have it there was a book of Boccioni’s drawings in the
college library that included the preparatory sketches for the painting.
Studying them allowed me to understand the finished painting and to
re-render it in an action painting style.

When I was a child, a book on computers that I bought from my school
book club had a picture of Harold Cohen with a drawing by his program
AARON. The art of AARON has fascinated me to this day, but despite my
proficiency as a programmer and as an artist my ability to “read”
AARON’s drawings and to build on Cohen’s work artistically is limited by
the fact that I do not have access to their “preparatory work”, their
source code.

I have been told repeatedly that access to source code is less important
than understanding the concepts behind the work or experiencing the work
itself. But the concepts are expressed through the code, and the work
itself is a product of it. I can see a critical case being made for the
idea that “computer art” fails to the extent that the code rather than
the resultant artwork is of interest. But as an artist and critic I want
to understand as much of the work and its history as possible.

So my call for source code to be recovered (for historical work) and
released (for contemporary work) under a licence that allows everyone to
copy and modify it comes from my personal experience of understanding
and remaking an artwork thanks to access to its preparatory materials on
the one hand and the frustration of not having access to such materials
on the other. And I think that awareness of and access to source code
for prior art (in both senses of the term) will enable artists who use
computers to stop re-inventing the wheel.

If you are making software art please make the source code publicly
available under the GPL3+, and if you are making software-based net art
please make it available under the AGPL3+ .