It's two weeks in to NaNoWrimo 2014 and as I've written more than 40 thousand words I though it was time to procrastinate a little and write a post on how I like to get things done. My motivations for this are partly to consolidate some ideas in my own head but also show that desktop GNU/Linux is just as capable a platform for creative and productive work (especially writing and publishing) as more commonly used platforms.
Ubuntu is now my daily driver both at home and in my professional life as a technical writer. I run a variant of Ubuntu 14.04 on all my production machines, namely Unity on my work computer, Xubuntu on my personal laptop, Ubuntu Mate on my home server, and Ubuntu Server on my DigitalOcean droplets. I should admit too that I also have a Mac Mini but it only gets used occasionally these days and so is not one of the my main production machines. I wonder if I should sell it and get a Nuc?
My main activities are writing (fiction and technical) and development (mostly web and Bash scripting) but I also like to make fantasy maps, and I occasionally have to edit and create graphics. I also do all the regular stuff that most people do with their computers, i.e. web, email, consume media and occasionally play games.
Today I want to talk about creating stuff, or getting shit done as it's tastefully known across the internet. Consuming stuff is essentially the same on any platform and even a complete Noob can probably figure that out on Linux without too much bother.
I do all my writing in plain text with no exceptions. This goes for my activities at home (fiction, blogging, even cooking recipes and shopping lists) and work (manuals, release notes and even marketing collateral). The only difference is the format I use differs depending on the complexity of the document I'm writing.
For my personal writing I use Markdown, typically the Markdown Extended variety which has been implemented in a number of different interpreters. Markdown is ideal for less complex documents made up of headings, paragraphs, lists, images and simple tables.
At work I use AsciiDoc (specifically the AsciiDoctor dialect), because it has all the features that technical writers typically need such as variables, complex tables conditional tagging and robust numbering, captioning, indexing and so on.
In both cases, Markdown and AsciiDoc, can be processed into HTML by an interpreter and once in HTML it's trivial to style the document and convert into other formats (epub, pdf) for publication. I'm planning on writing a post soon just on markdown-based publishing so watch this space.
I've posted elsewhere why I use plain text but in summary I do so because it's platform agnostic, lightweight and is just about indestructible. In more than twenty-five years of computing I can't recall a single instance where a text document corrupted on me; I wish I could same for Microsoft Word documents.
When I first started writing fiction seriously, I wrote in MS Works and then Word, but early on I realised that it had too many problems for long text. In fact I jumped ship to Scrivener before it even made the 1.0 release because I saw it's potential very early on. I loved Scrivener, still do in many respects, and while it's probably the best Writer's IDE on the market, it's often much more than I need. Scrivener is also proprietary software and I don't feel comfortable basing my entire creative and professional toolkit on an application that does not respect my freedoms.
So today I primarily do all my writing in Gedit and Pyroom.
Gedit is an underrated program but it's remarkably powerful for writing, editing and manipulating text. It has excellent support for many, many computer languages out of the box and these can be added with any gtsourceview definition. Markdown syntax support is built in.
Gedit has a rich plugin API based on Python which provides features such as Snippets, Bookmarking, text manipulation and just about anything else you want. It also supports spell checking, document statistics and a powerful Find and Replace feature that supports regular expressions.
Pyroom by contrast is about as simple as you can get. It's a text editor that gives you a full-screen distraction free view that's ideal when you want to ignore the world and simply write.
In this year's Nanowrimo, 90% of my writing was done in Gedit and Pyroom with the other 10% done in Markdown Composer on the Mac, which I used when I wanted the luxury of two monitors. Markdown Computer is a Mac exclusive, written by Fletcher Penny, who created MultiMarkdown.
I've also recently started playing with Remarkable, which is very similar to Markdown Composer. Remarkable is based on Github flavoured markdown. I personally find it a little heavy on resources (particularly when writing larger documents) but's it a project I'm watching the interest.
Managing writing projects
I've posted about my efforts to create a skeleton world-building and writing toolkit comprising entirely free software, built around scripted workflows rather than a do-all app.
I use the file system to keep the project ordered into meaningful, nested folders. Documents including manuscripts, character bios, articles, notes etc are all written in markdown while data is stored in json format with the exception of scenes, which I keep in CSV format so I can use a spreadsheet.
Automation at the moment is provided with a collection of PHP scripts with PHP chosen as a temporary solution to get started quickly. However I have not installed PHP on my laptop and am actually thinking about using Python instead because it's installed by default in pretty much every Unix-like system and has basked in support for json and markdown.
Taken as a whole, the system works well (and across several machines) and I used it for my Nanowrimo project. I will likely refine it further and will when I finally settle on the programming language, I'll load it all on github.
Publishing markdown documents
I'm planning to post in coming weeks on how I turn markdown documents into distributable formats and how I'm planning to integrate the workflow into Xubuntu's file manager, Thunar.
I do love a good task manager and my favourite is todo.txt and various utilities that have have grown around it. I keep the todo.txt synchronised across all my devices and edit/view it in the following ways:
- WebUpdate todo.txt indicator in Ubuntu
- Todo-txt CLI on Ubuntu and OS X
- GeekTool on OS X (to view it on the desktop)
- SimpleTask on my Android phone
Todo.txt has a simple syntax that's easy to read and write and being a text file, I can view and edit it anywhere and it requires very little bandwidth to move across networks, including mobile data, which is expensive in Australia.
Keep things in sync
Laptop, desktop, work machine, smartphone; my workload is spread over several computers and naturally they are no good to me if they are outside the productivity chain.
Because just about everything I do is in text, synchronising is relatively easy and fast. The obvious way would be to use a service such as DropBox and initially this is what I did. DropBox however is proprietary -- and therefore untrustworthy with my data -- and it's also blocked by my employer's firewall.
I've migrated instead of ownCloud, which I run from a DigitalOcean droplet. I have clients on all my devices, including my phone, and it does almost as good a job as keeping things synced as DropBox.
With most of my content written in plain text, I feel confident enough to keep more and more in the ownCloud folder and symlink it to where you'd expect to find in the respective sub-folders of my home directory. At present however I don't do this for my writing/world-building project because that's sitting in a private git repository. Given that I'm the only developer/writer I'm not sure if this is a worthwhile exercise but I will continue to use it while I decide if it is the best approach. I may actually detach the automation scripts from the world/writing content and install them globally.
Cartography and artwork
The one thing I didn't need to do this Nanowrimo was draw maps for my story or world because I was writing historical fiction rather than fantasy. I also didn't create a cover this year, because I had something particular in mind that would have cost me time to pull off.
I'll likely revisit this topic when I start my next fantasy project but suffice to say that there's plenty of tools in the GNU/Linux universe to get this done too.