Differences that matter

Thinking through practices of sharing and collaboration that are inspired by the culture and cult of Free Software.

Automatic Merge Failed

September 22 → December 15 2013, Graz (Austria)

Animated slideshow, installed at ESC in Graz as part of the exhibition I Share Therefore I am.

#!/bin/bash

# AUTOMATIC MERGE FAILED

while [ 0 ]

do

TIME=16
HOME="/home/fs/versioning/automatic-merge-failed"

# clearing out xpad files
cd .config/xpad;
rm *;
cp $HOME/default-style $HOME/.config/xpad/default-style;
cd /home/fs/.config/xpad;
rm *;
cp $HOME/default-style /home/fs/.config/xpad/default-style;
cd $HOME;

clear

#### INTRODUCTION #### 

convert -background white -bordercolor white -fill black -size 500x350 -border 10 caption:'Automatic Merge Failed' documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

echo "The black and white image on the window in front of you was donated to the public domain by a group of illustrators from Madrid. Translated to English it reads: 'DIFF is the substance of change'." > note.txt;
xpad -h -n --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

feh --scale-down -B black --title 'DIFF es la sustancia del cambio' 'documents/poster-page-2nd-image.jpg' & disown; sleep $TIME;

echo "The group is called 'Collaboratorio de relatos' (Collaborative story lab) and this image was one of their contributions to a workshop 'Tools for a Read-Write World'." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

feh --scale-down -B black --title 'Understanding Version Control with Git' 'documents/IMG_0357.JPG' & disown; sleep $TIME;

echo "Although the practice of Colaboratorio de relatos is rather analog, their work is much inspired by digital culture. 
'We're trying to find something poetical in digital practices' they said when I asked them about their interest in Version Control." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "Carla: In all this work, we're trying to find something poetical in digital practices. We think that they are transforming things, and that there's something artistic in them, because they're not just programs, they're ways of doing things. 
So with Ricardo, he gave us two hours and he explained how version control systems work, with just a paper and a pencil. And he explained it for people who don't know anything about version control, and it was incredible, because he could translate these concepts to us. 
We decided that Diff was really important to us. Then, we decided we could get something symbolic or something poetic out of everything. 
Difference is the most important thing for me, version control, because the point in that, what is the difference, not which is the common, because that is the normal way of thinking." > transcription.txt;
sh -c "gedit 'transcription.txt'" & disown;

mplayer documents/colaboratorio.mp3 -ss 13:39 -endpos 1:29; 

killall -w gedit;

#### DISTRIBUTED VERSION CONTROL #### 

echo "In many distributed and collaborative creative practices (so not just in software development), the use of Distributed Version Control starts to make sense." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "Git is currently the most popular software for doing Distributed Version Control. 
The English word 'Git' also means 'a stupid or worthless person (especially a man).'" > note.txt
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:'Mikeal Rogers in Wired (March 2013): GitHub was intended to be an open software collaboration platform, but it’s become a platform for much, much more than code. It’s now being used by artists, builders, home owners, everyone in between, entire companies ... and cities.' documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

echo "Colaboratorio de relatos understood Git as a tool that works through difference rather than sameness. I like their image of multiple surfaces,  resisting and locking together." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

feh --scale-down -B black --title 'Teaching basic Git commands' 'documents/day2and3begin_0141_day2andbeginof3.jpg' & disown; sleep $TIME;

echo "Distributed version control is a way to collaborate on digital files. Everyone can work on their own local copy of a shared project; the software keeps a log of every change that is made.
When local copies are synchronized with each other, it can happen that several participants made different versions of the same file. After negotiating what changes need to persist, 'branches', 'forks' and 'merges' might occur." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "To support this type of distributed collaboration, keeping track of versions is key. The ability to go back and forth in history is one of the advantages of using such a system." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

mplayer documents/Rose.ogv -ss 00:41 -endpos 0:10;

echo "Tom Preston Werner is CEO at GitHub, a company that runs hosted services based on Git. In 'The Git Parabel' he introduces Alfred and Hazel to explain why moving back and forth in history could be useful." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:"Tom Preston Werner: Alfred tells you a story about a woman named Hazel who brings her daughter in for a portrait every year on the same day. 'She brings the photos from all the past years with her,' Alfred tells you. 'She likes to remember what her daughter was like at each different stage, as if the snapshots really let her move back and forth in time to those saved memories'." documents/slide.jpg; 
feh -x 'documents/slide.jpg' & disown; sleep $TIME;

echo "Of course this story would work for Wikipedia as well. For every article there is a page called 'Revision history' where you can see which edits were made so far. Editors can go back in time if they decide that an earlier version was better." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

feh -x --scale-down -B black --title 'Wikipedia Revision History' 'documents/collaboration.png' & disown; sleep $TIME;

echo "This page also helps readers understand how and by who the article was constructed." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "And this laptop has a sense of history too. If I type the command 'ps aux' in a terminal, you can see a list of processes that were started since the computer was booted." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;
killall -w feh;

ps aux; sleep $TIME;

clear

echo "More significant than an advanced sense of history is probably that there is no single, central repository in Distributed Versioning." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

mplayer documents/ownCloud.mp4 -ss 00:35 -endpos 00:50;

killall -w feh

# clearing out xpad files
cd .config/xpad;
rm *;
cp $HOME/default-style $HOME/.config/xpad/default-style;
cd /home/fs/.config/xpad;
rm *;
cp $HOME/default-style /home/fs/.config/xpad/default-style;
cd $HOME;

#### DECENTRALISED POLITICS ####

echo "Here's a fragment from a by now famous talk by Linus Torvalds, the man who named Linux after himself. He developed Git because he wanted a tool to manage the software development of the Linux Kernel. In the talk he explains how 'commit anxiety' goes away in Git." > note.txt;
xpad -h -n --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "The 'commit access issue' he refers to, alludes to centralized version control where only a few people might be allowed to add ('commit') new code." > note.txt;
xpad -h -n --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "Linus Torvalds: So this whole commit access issue, which some companies are able to ignore by just giving everybody commit access, is a huge psychological barrier and causes endless hours of politics in most open source projects. If you have a distributed model, it goes away. 
Everybody has commit access, you can do whatever you want to your project. You just get your own branch, you do great work or you do stupid work, nobody cares, it’s your copy. It’s your branch. 
And later on if it turns out that you did a good job, you can tell people, “hey here is my branch, and by the way it performs 10x faster than anybody else’s branch, so nyah nyah nyah, how about pulling from me?” And people do. 
And that’s actually how it works, and we never have any politics, that’s not quite true – we have other politics, but we do not have to worry about “commit access” thing." > transcription.txt;
gedit 'transcription.txt' & disown;
sleep 3;
mplayer documents/Torvalds.mp4 -ss 18:58 -endpos 01:02;

killall -w  gedit;

echo "I have listened to this fragment many times. I wanted to understand why and how the distributed architecture of Git would prevent projects from 'having politics'." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "'You can do whatever you want to your project ... nobody cares'. For Jara Rocha from Madrid, politics are a way to exercise difference, when people care enough to make an effort." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "Jara Rocha: You can redefine politics, if you start meeting in the square every now and than, periodically, with a number of people and doing politics, and you still call it politics and not invent another word for that you can get back certain definitions that otherwise would have been perhaps lost." > transcription.txt;
gedit 'transcription.txt' & disown;

mplayer documents/jara_rocha.mp3 -ss 27:50 -endpos 00:38 -af volume=21;

killall -w gedit;

echo "In 'The Return of the political', Chantal Mouffe writes:" > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:'Chantal Mouffe (1993): Radical democracy demands that we acknowledge difference - the particular, the multiple, the heterogeneous - in effect; everything that had been excluded by the concept of Man in the abstract. Universalism is not rejected but particularized; what is needed is a new kind of articulation between the universal and the particular.' documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

echo "I'll play a snippet of a recent lecture so you can hear her voice." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

mplayer documents/Mouffe.flv -ss 40:49 -endpos 0:26;

echo "Her demand for 'a new kind of articulation between the universal and the particular' and Jara Rocha's description of redefining politics echo in the concept of the 'recursive public' that Christopher Kelty describes in his book 'Two Bits: The Culture of Free Software." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:'Chris Kelty (2008): Free Software is a public of a particular kind: a recursive public. Recursive publics are publics concerned with the ability to build, control, modify, and maintain the infrastructure that allows them to come into being in the first place and which, in turn, constitutes their everyday practical commitments and the identities of the participants as creative and autonomous individuals.' documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

cd .config/xpad;
rm *;
cp $HOME/default-style $HOME/.config/xpad/default-style;
cd /home/fs/.config/xpad;
rm *;
cp $HOME/default-style /home/fs/.config/xpad/default-style;
cd $HOME;

#### FORK ####

echo "(GitHub manager Michael McCullough explaining the difference between argument and debate.)" > note.txt;
xpad -h -n --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

mplayer documents/McCullough.mp4 -ss 12:15 -endpos 01:03;

convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:'GitHub website: Today a project can have hundreds of forks, each trying out ideas that may get merged back in to the main project. Forks now represent a vibrant and active community.' documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

echo "(I'm learning to love to fork and letting go of emotional attachments)" > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "A 'project fork' happens when software developers take a copy of source code from one software package and start independent development on it, creating yet another piece of software. The right to do so is guaranteed in Free Software licenses." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

feh --scale-down -B black --title 'Debian forks' 'documents/debianubuntu.png' & disown; sleep $TIME;

echo "The idea of 'forking' as a positive event is relatively new to the Free Software community. 
With little human resources and many bugs to swat, projects were until recently careful not to lose energy over multiple versions, derivatives, deltas, branches or forks." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "In the 'Jargon File' (1990), Eric Raymond explains why forking should be considered a Bad Thing." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:'Eric Raymond: Forking is considered a Bad Thing — not merely because it implies a lot of wasted effort in the future, but because forks tend to be accompanied by a great deal of strife and acrimony between the successor groups over issues of legitimacy, succession, and design direction. There is serious social pressure against forking.' documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

echo "Did you notice that Eric Raymond and Linus Torvalds use the same arguments to explain why forks are respectively Bad and Good Things?" > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad

echo "I enjoyed reading 'To Fork or Not To Fork: Lessons From Ubuntu and Debian', a text written in 2005 by Benjamin Mako Hill. 
As a participant in both the Ubuntu and the Debian project, he describes with compassion the very real social issues that come up when working on parallel but related code-bases that result from derivatives or forks." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:'Benjamin Mako Hill: Distributed version control allows people to work disconnected from each other and to sync with each other, in whole or in part, in an arbitrary and ad-hoc fashion. It allows deltas to be maintained over time. Ultimately, this requires tools that are better at merging changes and in not merging certain changes when that is the desired behavior. It also leads to tools capable of history-sensitive merging.' documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

echo "'history sensitive merging'. Interesting." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

feh --scale-down -B black --title 'View from the train' 'documents/mountains.JPG' & disown; sleep $TIME;

echo "On the train from Brussels to Graz, with Els Van Riel. Between Munchen and Salzburg, we compare family histories. Els summarizes:
'Well, everybody has their own facts'." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

killall -w feh;

#### DIFFERENCE & FREEDOM ####

echo "The idea that differences matter is written deeply into the practices of Free Software. Version Control actually functions through recording and comparing differences between files and/or folders." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:"From the diffutils manual: Computer users often find occasion to ask how two files differ. Perhaps one file is a newer version of the other file. Or maybe the two files started out as identical copies but were changed by different people." documents/slide.jpg; 
feh -x 'documents/slide.jpg' & disown; sleep $TIME;

convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:"You can use the DIFF command to show differences between two files, or each corresponding file in two directories. DIFF outputs differences between files line by line in any of several formats, selectable by command line options. This set of differences is often called a DIFF or PATCH." documents/slide.jpg; 
feh -x 'documents/slide.jpg' & disown; sleep $TIME;

killall -w feh;

echo "Difference also matters in relation to a particular idea of freedom. Freedom from boredom, or as Michael Murtaugh writes in 'Do (Not) Repeat Yourself': freedom from repetition." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "Michael Murtaugh (2013): The GNU project and the ensuing Free Software movement, encourage a practice of software development whereby code is released under a license that ensures that it remains not only freely usable, but also reworkable and redistributable by subsequent programmers. In 'freeing' the code, the GPL shifts value from the code to the surrounding practice. (...)"> slide.txt;
convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:@slide.txt documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

echo "Stallman's early manifesto still includes a 'Don't Repeat Yourself' stance as one of the core 'benefits' of the project. '[The GNU project] means that much wasteful duplication of system programming effort will be avoided. This effort can go instead into advancing the state of the art.'" > slide.txt;
convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:@slide.txt documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

feh --scale-down -B black --title 'Merge-O-Matic by Eleanor Greenhalgh' $HOME/documents/MergeoMatic.png & disown; sleep $TIME;
feh --scale-down -B black --title 'Merge-O-Matic by Eleanor Greenhalgh' $HOME/documents/IMG_0995.JPG & disown; sleep $TIME;

# Tom Preston Werner on "less rules for freedom, or: "projects compete (?)"

echo "If you consider Free Software to be an ecosystem of shared cultural objects, a non-hierarchical, parallel and non-linear approach to development is both exhilirating and problematic." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "Collaborative Futures (2010): One could say that the future is one where the fork, a separated initiative, is the basic state, always awaiting its moment of reintegration." > slide.txt;
convert -background white -bordercolor white -fill black -size 600 -pointsize 25 -interline-spacing 5 -border 10 caption:@slide.txt documents/slide.jpg;
feh -x 'documents/slide.jpg' & disown; sleep $TIME; killall -w feh;

echo "This bleak prospect of projects 'always awaiting reintegration' concludes the chapter 'Ownership, control and conflict' in the collaboratively written book, 'Collaborative Futures'." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "Projects compete for the committed care of an ever growing number of developers and users. But to figure out a form of shared responsibility, there needs to be time and space for politics." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

echo "There is no such thing as an automatic merge. 'Reintegration' requires the tedious work of patching up numerous holes and discontinuities." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

sh -c "xterm -hold -e 'man diff'" & disown; sleep $TIME;
sh -c "xterm -hold -e 'man patch'" & disown; sleep $TIME;

echo "I think we need to shift attention from 'forking' to 'merging', in ways that take advantage of differences as a substance of change. Or in the words of Chantal Mouffe: 'a new kind of articulation between the universal and the particular'." > note.txt;
xpad -h --new-from-file=$HOME/note.txt & disown; sleep $TIME; killall -w xpad;

feh --scale-down -B black --title 'Between the universal and the particular' $HOME/documents/resist.jpeg & disown; sleep $TIME; killall -w feh;

sleep $TIME; killall -w xterm;

echo "END";

done

# Promiscuous slideware tested on Ubuntu and Linux Mint 14/15 with following additional applications installed:
# $ sudo apt-get install feh xpad gedit imagemagick mplayer xterm
# Copyleft Femke Snelting (2013). This file can be copied, distributed and changed under the conditions of the Free Art License.
# http://snelting.domainepublic.net/merge
# TODO xpad wants an empty note after clear. Slide, note, image functions. Unhide transcriptions from below mplayer window.