Constraints for Mobile Software

This post is mostly just an overview of Epistle by Matteo Villa, which is--to my mind--the best Android note taking application ever. By the time you read this I will have an Android Tablet, but it’s still in transit while you read this and that’s a topic that dissevers it’s own post.

Epistle is a simple notes application with two features that sealed the deal:

1. It knows markdown, and by default provides a compiled rich text view of notes before providing a simple notes editing interface. While syntax highlighting would be nice, we’ll take what we can get.

2. It’s a nice, simple application. There’s nothing clever or fancy going on. This simplicity means that the interface is clean and it just edits text.

For those on the other side there’s Paragraft that seems similar. While in my heart of hearts I’m probably still holding out for the tablet equivalent1 of emacs. In the mean time, I think developing a text editing application that provide a number of paradigmatic text editing features and advances for the touch screen would be an incredibly welcome development.

In the end there’s much work to be done, and the tools are good enough to get started.


  1. I want to be clear to say equivalent and not replacement, because while I’d like to be able to use emacs and have that kind of slipstream writing experience on an embeded device, what I really want is something that is flexible and can be customized and lets me do all the work that I need to do, without hopping between programs, without breaking focus, that makes inputting and manipulating text a joy. And an application that we can trust (i.e. open source, by a reputable developer,) in a format we can trust (i.e. plain text.) Doesn’t need to be emacs and doesn’t need lisp, but I wouldn’t complain about the lisp. ↩︎

Update Irregular

I’m sorry that I’ve not posted here very much recently and also that the links in this post will be pretty unadorned. I’ll make up for it with table of contents:

::: {.contents} :::

Ok, so it’s not much, but lets get started.

New Posts

While my posting volume has gone down, I have posted something since the last update post.

Rest assured that there’s more stuff in the pipeline.

Lost Posts

For some reason, that I haven’t figured out and don’t really care to, for a number of months, my posts from July of 2009 went missing. Usually this wouldn’t even be worth mentioning, except I July of 2009 was a big month for me writing wise--I’d just moved to the east coast, I had my first real tech job and my mind was full and I felt on fire. I consider a couple of these posts to be “tychoish classics.” The good news is I’ve found them, so here they are:

They seem to be arranged alphabetically rather than sequentially, Sorry about that!

Contra Dancing Feature

A contra dancing friend of mine solicited an email from me a few weeks ago about a couple of contra related topics, which have worked their way into posts that you can read below.

The Internet is A Cool Place: Tablet/Cloud Computing

I found the following link on twitter from a few of my awesome (former) coworkers. It’s a blog post about a programmer who is using an iPad, a remote server, and a computer to do all of his work. read more

It’s an interesting possibility, frankly and I could probably make the shift easily enough if I wanted. Having said that, I feel like I’m a little too sensitive to TCP/SSH hiccups and I feel weird throwing all of my (potential?) productivity into something totally network dependent.

An Emacs Tip Interlude

I picked up the following little bit of emacs configuration, that I think is wicked cool. It removes some of the limitations on m mini-buffers, which gives them a lot of pretty cool features. It seemed like the kind of configuration that I should have known about and didn’t, so maybe some of you don’t know either.

(setq shell-command-default-error-buffer t)
(setq enable-recursive-minibuffers t)

Git, not Hypertext, Is the tool by which we experience becoming Nomad

I’m not entirely sure why I’m following Stephen Ramsay on twitter, but I am. The other day I saw the following exchange, and I feel like it’s worth recording:

<sramsay> Back in the day, it was fashionable to say that hypertext
  enacted certain theories associated with postmodernism (Deleuze, etc.)
<sramsay> We had it totally wrong.  *Git* is the tool
  by which we experience becoming nomad.

I love this idea, and I’ve been saying variants of this for a while, but it’s nice to get reinforcements. At the same I think it’s possible to easy to loose sight of how git is actually used of git when focusing on its transformative aspects. Which makes the theory read a little more hollow.

Onward and Upward!

Remote Accessibility/Reverse Tunneling/Super Dynamic DNS

I have a question for my system administrator readers. And maybe the rest of you as well.

I run a web server on my laptop that hosts about 8 test sites. Nothing special: mostly test and development sites for various public sites, but from time to time I think, “shit, wouldn’t it be nice if I could just give someone a link to this.” My solution is generally to copy whatever it is that I’m working on up to the server that runs this website, and while that generally work just fine, it could be better.

So here’s what I’m thinking:

I’d like to be able to hook my laptop up to the internet and be able to let people access (some) of the content running on this web server. I don’t want it to be automatic, or open my entire machine to the world (though… I could secure it, I suppose.) The options I’ve considered.

  • I set up a VPN that I can connect to the public server (that hosts this website) from the laptop, and I have a virtual host (or set of virtual hosts) that proxy requests to the laptop. Wherever I am, it works. I’m not worried about the bandwidth or the strain on the server given the usage pattern I’m expecting.

    • Pros: Simple, Secure, works even if I’m on a weird local network. Potentially useful for other kinds of nifty hacking including tunneling all traffic through the VPN on insecure connections.
    • Cons: Way complex, and I’m not sure if it will work. I’ll need to set up VPN software. And it’s total overkill.
  • Some sort of scripted dynamic DNS solution, probably involving running my own DNS server.

    • Pros: less proxy madness. Pretty simple.
    • Cons: running a DNS server. Won’t work on some (most) local networks.
  • There has to be some sort of alternate approach using a minimalist tunneling solution. There are a few of them, I think they’re nifty, and it would probably be perfect. I’m just not sure what it is.

    …and then half the night later, I finished deploying the VPN. I have to say that I’m really pleased with it:

  • It can (and has) replaced my ssh tunnels for sending email. That’s pretty great.

  • The web server stuff works, though I don’t have anything really up there yet. I feel like I need some sort of access restriction method, but I don’t really like any of the options. HTTP Auth is annoying rather than protective, SSL is terribly imperfect and fussy, host based control isn’t very tight.

  • I think I will be able to finally sacrifice a laptop to the “homeserver” because aside from dis/re-enabling the “sleep on laptop close” function. If needed it’ll be dead simple to convert a sever laptop to a mobile laptop.

Thoughts?

Teaching Writing Skills

All of my friends who have taught composition are appalled when they hear me say that I want to teach writing. But it’s true: I would be interested in having the opportunity to give people the kind of writing education that I never got to have. I’ve even collected a few of these ideas on a very rough “pedagogy” page. This post, by contrast, will be a list of “things I wish I could have learned before I got a job writing.”

  • How to write in long form. The skils and process for writing something that’s a hundred pages is fundamentally different from the process for writing pieces that are a few hundred words or a few pages. Project management, planning, and organization are totally different skills.
  • Working with editors. In school, the editing process is very conversational. Editors, comment and ask you to make changes if agree with their judgment. Writers need to learn how to gather requirements, write the best possible content, and then hand it over to an editor who will modify the text without comment. Not only is it important to learn how to “get over this,” but also in how to learn from this kind of editing
  • How to revise work. While I’ve learned to avoid making a number of mistakes to which I’m particularly prone, and spot those errors when the slip through, it’s really the process of applying for jobs that has taught me how to revise my own writing. Revision is probably the hardest writing skill, and I think there are probably better ways to teach revision than some sort of idealized “drafting process.”
  • How to write at volume, even when you’re not feeling inspired. We’re pretty good at teaching people to write when they’re inspired or have done a lot of research. But writing Writing needs to be as instinctive as speech and the kind of thing that you don’t need to be inspired to be able to do. Not because anyone writes that much, but it’s a comfort thing.
  • How to document things. Which is to say, how to record a practice, wprocedure, or interface, to tell people (and your future self,) how to do something. I had to figure this out on my own, and I think people would be much better writers for being 10% worse at writing essays and 10% better at writing processes.

That would do it! I’ve included some work in this direction in the pedagogy page, but comments, are always valuable.

Is Dropbox the Mobile File System Standard

I’ve started using Dropbox on my Android devices recently (and my laptop as a result,1) and I’m incredibly impressed with the software and with the way that this service is a perfect example of the kind of web services that we need to see more of. While I have some fairly uninteresting concerns about data security and relying on a service that I’m not administrating personally, I think it’s too easy to get caught up the implications of where the data lives and forget what the implications of having “just works,” file syncing between every computer.

I used to think that the thing that kept mobile devices from being “real” was the fact that they couldn’t sell “post-file system” computer use. I’m not sure that we’re ready to do away with the file system metaphor yet. I think Dropbox is largely successful because it brings files back and makes them available in a way that makes sense for mobile devices.

The caveat is that it provides a file system in a way that makes sense in the context for these kinds of “file systemless” platforms. Dropbox provides access to files, but in a way that doesn’t require applications (or users) to have a firm awareness of “real files. Best of all, Dropbox (or similar) can handle all of the synchronization, so that every application doesn’t need to have its own system.

This might mean that Dropbox is the first functionally Unix-like mobile application. I think (and hope) that Dropbox’s success will prove to be an indicator for future development. Not that there will be more file syncing services, but that mobile applications and platforms will have applications that “do one thing well,” and provide a functionality upon which other applications can build awesome features.


This isn’t to say that there aren’t other important issues with Dropbox. Where your data lives does matter, who controls the servers that your data lives on is important. Fundamentally, Dropbox isn’t doing anything technologically complicated. When I started writing the post, I said “oh, it wouldn’t be too hard to get something similar set up,” and while Dropbox does seem like the relative leader, it looks like there is a fair amount of competition. That’s probably a good thing.

So despite the concerns about relying on a proprietary vendor and about trusting your data on someone else’s server, data has to go somewhere. As long as users have choices and options, and there are open ways of achieving the same ends, I think that these issues are less important than many others.


  1. To be fair, I’m using it to synchronize files to the Android devices, and not really to synchronize files between machines: I have a server for simple file sharing, and git repositories for the more complex work. So it’s not terribly useful for desktop-to-desktop sharing, But for mobile devices? Amazing. ↩︎

Why you Don't Want Programers to Write Your Documentation

So the documentation sucks. Hire someone to make the documentation suck less.

Simple enough, right?

Right.

Just don’t hire a programmer to write documentation, even though this seems to be a pretty common impulse. There are a lot of reasons, but here are some of the most important from my perspective:

  • Programmers focus on the code they write, or might write, to be able to describe and document entire projects. It’s really hard to get programmers to approach documentation from the biggest possible frame.
  • Programmers have a hard time organizing larger scale documentation resources, because they approach it as a database problem rather than a cognitive/use problem.
  • Programmers solve problems by writing code, not by documenting it. You can push programmers to write notes and you can push the best programmers who can write to work on documentation; but unless you dedicate an engineer to writing documentation full time (which is a peculiar management decision) documentation will always come second.
  • I’d wager that every organization large enough to have documentation that sucks is probably large enough to have enough documentation for a full time technical writer.
  • Engineers, particularly those who are familiar with a piece of technology, do this really interesting thing where they explain phenomena from the most basic assumptions prompted to describe something, but regularly skip crucial steps in processes and parts explanations if they think they’re obvious.

Interesting cognitive phenomena do not make for good documentation.

What am I missing?

Overdue Update

I went through a few days ago to collect all of the updates and work that I’d done since the last time I did one of these posts. Sometimes just looking through an activity log is all you need to remember that you’re actually doing something. Here’s what I’ve been working on:

The coolest part about this is that some of you have helped to build a page of ssh tricks on the wiki that go above and beyond the little tricks that I use.

And finally,I ’d like to welcome Kevin Grande, who made a new folk page recently. I’m also very sorry that I haven’t been updating more frequently. I started a new job on September 26, and between that and my usual gallivanting around for singing and dancing my blogging habit has. One the other hand I’m writing about 1200 words a day, and life is pretty good so no complaints there.

Onward and Upward!

Writing Software Beyond Emacs

The ideal writing application is emacs, at least for me. In the absence of emacs (as on a tablet,) I’ve been thinking about what features I actually need in a writing application. While I’ve grown to admire the power of a full Lisp machine in my text editor, I accept that it’s not, strictly speaking required. Here’s a first stab at the list of requirements. Feel free to comment or submit a patch to this page.

  • Simple, primarily full screen editing.
  • The ability edit very large files, 100kbs should present no issue.
  • Some sort of syntax highlight during the editing process, preferably support for LaTeX, Markdown, and org-mode.
  • Word count generation for the entire files and for current selections.
  • Auto-save as crash protection.
  • Undo/Redo last typing action.

Nice to have (but not crucial) features:

  • The ability to edit one file and reference another (or potentially edit) at the same time. Bonus points for being able to switch between to parts of a single file at once.
  • The ability to hide or collapse some sections of a file.
  • Optional spell checking.
  • Parenthetical and double-quote matching.
  • Soft and hard line/word wrapping.

Other than that I don’t think there’s anything that I really need to have to get writing done 90% of the time. How about you?