00100.png

Today I want to talk about a project that I’ve been working on lately.

00150.png
00206.png

The book collects documentation, ideas, software, graphic design and experiments made with free software between 2008 and 2016. This collection is complemented by inspirational writings on different aspects of free culture generously made available by their authors under copyleft licenses.

00250.png
00252.png
00254.png
00256.png
00258.png
00262.png
00264.png
00266.png
00268.png
00270.png
00280.png
00284.png
00286.png
00290.png
00300.png
00302.png
00312.png
00318.png
00320.png
00324.png
00326.png
00338.png
00342.png
00350.png
00352.png

Unfortunately it is not completely finished right now. These are images from the first proof.

00390.png

The setup for this project is connected to an ongoing attempt, which is to find a personal approach to do layout in the sense of developing a practise that may include questioning the current status quo from and within digital publishing.

00400.png

There were some references (or better preferences) I had in mind when starting this. I was imagining something not too different from HTML. HTML has been for me the first exposure to the possibilities to write code to create visual form. Something I’ve been excited about since then.

00410.png
00412.png

BUT: It should be a little bit different to read and write. (Still finding out what this means exactly)

00415.png

AND: It should work for print.

00420.png

About 2 years ago I wrote a little etherpad2pdf utility.

00450.png
00454.png

Basically a more or less standard pandoc procedure.

00458.png

to not forget this completely as I will mention more often:

PANDOC IS A HASKELL LIBRARY FOR CONVERTING FROM ONE MARKUP FORMAT TO ANOTHER, AND A COMMAND-LINE TOOL THAT USES THIS LIBRARY.

00459.png

It became clear that this was going into the right direction.

00460.png

Direction means:

BUT: I had the ambition for a little more complexity than what seemed possible with standard markdown.

00500.png

The first thing I was really missing when using markdown was the possibility to have comments. Comments are more or less standard for most types of source code. This means you may have some kind of information written within the text which is not part of the actual output. Normally I’d use comments:

00595.png
00605.png

Unfortunately standard markdown has no comments…

00700.png

…so I decided to add the possibility to have comments just as some plugged-on functionality.

00705.png

This meant: instead of processing the markdown source directly…

00715.png

…all lines starting with a % sign have to be removed first.

00720.png

This hack also gave me a first idea about how things might work. Motivated by the simplicity of this comment option, I decided to pick up an original idea of markup.

00760.png

As described on wikipedia:

The term markup is derived from the traditional publishing practice of “marking up” a manuscript, which involves adding handwritten annotations in the form of conventional symbolic printer’s instructions in the margins and text of a paper manuscript or printed proof. For centuries, this task was done primarily by skilled typographers known as “markup men” or “copy markers” who marked up text to indicate what typeface, style, and size should be applied to each part, and then passed the manuscript to others for typesetting by hand. *

00765.png

or shorter: instructions describing the form of the content are written along the content as comments.

00770.png
00775.png

As I was not planning to pass the manuscript to others for typesetting by hand I had to deal with the question:

How will the instructions be understood and handled?

00800.png

The basic translation from markdown to LaTeX is handled by pandoc. The translation of the instructions needs to be done separately. I decided to handle this by creating a dictionary, where 'whoever is in charge' could look up what should be done.

00850.png
00952.png

The vocabulary may be extended by adding new instructions to the dictionary just as needed. Instructions that don’t exist in the dictionary will be ignored.

00870.png
00980.png
00975.png

Most instructions were not developed in advance, but written as they were needed. Some of these instructions made more sense and where used quite often. Others were too specific or unflexible and just disapeared.

01000.png
01005.png
01010.png
01012.png
01016.png
01021.png

This is a list of instructions/functions made until today. Some of them have telling names, that’s the more ideal case. Some of them are more cryptic.

01025.png

Different dictionaries allow different translations. In the beginning the dictionaries were intended to extend and change the vocabulary on-the-fly…

01026.png

…but they proofed quite practical to support different output formats.

01028.png
01030.png

Different dictionaries define instructions according to the requirements of different output formats. Some instructions should produce a similar effect, although there may happen quite different things in the background.

01050.png

Other instructions were created with a specific output in mind. A very targeted behaviour for example is everything related to pages.

01100.png

E.g. the % CLEARTORIGHT instruction pushes the content to the next right page when making a book. But there are no left and right pages in HTML.

01110.png

When defining the dictionary for the HTML output % CLEARTORIGHT could be either ignored or I can think about the wanted effect of % CLEARTORIGHT and try to find an equivalent e.g. insert vertical space.

AND AGAIN: the dictionary may changed or extended while writing. There is no definitive vocabulary, there is no definitive meaning.


WHAT DO WE HAVE?

Shared source code means that sources may be and are shared for different output formats, in parts but not necessarily as a whole.

01200.png
01210.png

A core functionality and prerequisite for the ‘shared source’ approach is the % INCLUDE instruction, which, as it says, allows to include parts of source files, based on line numbers (btw: this is far from new). This allows to store a resource once, yet distributing it for reuse in multiple documents.

01250.png

To include by line numbers is actually a big potential problem, because it presumes that the source does not change. This is not so nice (and close to impossible to ensure) when working within collaborative settings.

01255.png

But there is something like an happy accident, at least something that was not planned from the beginning, but seems more and more crucial to make the whole thing work. (+ it makes it much more interesting)

Since using mostly remote sources from etherpad and git …

01290.png

… it really makes no difference if I refer to a file or to a specific version of a file.

01300.png
01310.png

This can be mixed. There can be material which is always at its latest state, with the advantage and disadvantage that it can change. And there can be material as it was at a specific moment in time. To make it even more complex: versions in time may refer to versions in time. This works basically for anything in a git repository.

01320.png

What you can see here is the current source for the book.

01322.png

Distributed across the network …
…frozen in time.

01324.png

From making a bookmaking workflow…

01350.png

…I moved more and more towards imagining a source format…

01357.png

…which is in a way disconnected from how it will exactly be processed.

To round this up I want to show 2 practises that developed along the imagined .mdsh source format.

01420.png

Number one is the use of the Libre Office as a WYSIWYG interface to create and edit the source files. While the idea was primarily to not force the editors into my workflow, it also easified versioning and inclusion within the rest of the setup. Libre Office became one more player within the workflow. It was added as an interface, but not meant to replace anything.

01430.png
01452.png

The second idea is inspired by discussions about the dominance of plain text culture. It’s a interface based on hotglue made for the very specific task to sort and select posters from huge collections. While it is a visual approach, it is not WYSIWYG. Plain text is generated according to relations created visually.

01456.png
01458.png

Within both approaches plain text still plays a central role, but not so much for editing but as an intermediary format. And that’s where I’m coming back to the title of this talk and I will try to add some explanation. Instead of searching or even programming the one killer application…

01510.png

…my biggest interest at the moment is to create and move through layers of different complexities.

01676.png

And that’s a thing I’ve learned while using GNU’s Bourne-Again-SHell.

01680.png
01700.png

GET THE SOURCE!