Long live Mind Traffic Control!

No New Year’s Resolutions or even questions this year. But as an honorary Brazilian, my new year doesn’t really start until after carnival, so now would be the time for it.

However here’s a quick update. The answer to the old MTC question is now resolved for me.

It’s time to put the bullet into the Mind Traffic Control that was. The case against it is overwhelming. MTC was written to learn the exciting new world of Google App Engine and the style of web programming of the mid to late 2000s … Python, something almost Django-like (ie. Rails-like). Backed by a relational database-like thing.

It’s a world I later fell out of love with. Python and Django are … fine. But they aren’t what continues to excite me in 2016.

I toyed with Meteor. But how to host on GAE? And, anyway, in 2016 I have the sickness … I just AM a Lisp programmer. Not necessarily a very good one or particularly experienced one. But I’ve succumbed. This is what I’ve been looking for all my life. It’s what I want to do, going forward.

So a rewrite in Clojure / ClojureScript. That presumably can be hosted on GAE. And I can have a wonderful new reactive UI with Om.

Yes … I’ve been playing around with it … but …

But then again. The old GAE database isn’t a good match for the circular queue of MTC. And worse, I’m not keen on storing my personal data on someone else’s cloud. Yes, it would have to be a single-page app. Yes, it ought to talk to remoteStorage and offer Dropbox etc. too.

These are all wonderful things and yes I am playing with them and want to use them. But … MTC? MTC is a todo-list app. There are a million and one such apps. They’re the “hello world” of browser-based GUI frameworks.

I’d love people to experience what’s good about MTC. But is it likely? How would I cut through the noise of those millions of alternatives? (Some of which are very slick.) Could I really get any kind of audience for a todo-list app in 2016? Does it make sense to put my energy in this direction?

And then again … if I’m going to boot up my browser and run a local server, then I have OWL.

OWL is great for more extensive, smart-disorganized note-taking. It’s just that it doesn’t have some of the charms of MTC. It’s not dynamic … tasks sit around and clog up the pages. You have to navigate around to find them. Sure, it’s pretty easy to navigate around – wikiness makes complexes of documents into small-worlds – but it’s still lacking that immediacy of the river / feed of tasks.

So last year I was fairly convinced that MTC was just going to become OWL hosting. But that isn’t what happened. There is still something to MTC, to the todo-queue concept. And it has resisted being subsumed within the OWL paradigm. My early enthusiasm for OWL was wrong about this. And my initial intuitions vindicated.

So what next? These last months I’ve been drawn back to the command-line. And also to Racket. Which compiles to fast executables. (Clojure is great, but the JVM does take a long time to start.)

And I’ve been admiring (again) todo.txt. Which in many ways is the right approach.

And so … I present : the new Mind Traffic Control. Which is, I admit, nothing but a short Racket program. That reads a file called “todo.txt” from somewhere on your machine. And does MTCish things with it.

Philosophy :

– it’s (right now) a convenient command-line tool.

– it’s compatible with your existing todo.txt file. It doesn’t do everything that todo.sh does. But it has its own tricks.

– in particular, it keeps the queue-ness. You only see the latest item. And most of its commands are about flinging tasks you don’t care about now into the future where you don’t have to think about them (yet).

– obviously it loses a lot of what made the GAE-hosted, web-based MTC interesting. There’s no delegation to other users etc. But I’m not sure many people used that.

– very simple. very minimal.

I have to say … I am EXCITED by this … more excited than I’ve been by any potential refresh I could have made to the old MTC paradigm (even rewriting more or less the same thing in Meteor or ClojureScript / OM). This is fresh and different.

The Future : MTC has a new mission.

Firstly it’s going to be MY todo-queue tool. Previously, the web version was always thought about in terms of “what might people want?”. In practice, almost nobody else wanted it. Now MTC’s mission is “what do I need from a tool?” What maximizes my convenience? I like the command-line. I’m comfortable there. That’s where this is going to be.

Secondly, I’m not that into task-management software. I want software to help me DO stuff. And the focus of MTC going forward is going to be to add features to help me do. For example, I have an item with a link I wanted to read. I now read the link and want to post it to a link-blog. Can that feature be added to MTC? Why not? I come up with an idea for a new project and start putting todo items about it into MTC? Can MTC create the project directories for me? Can todo items be exploded into actual scripts? Within this environment? Once again, a direction worth exploring. (In a sense, MTC with extra tools could be seen as exploring the coming UI paradigm of bots in rivers.)

Syncthing is now my synchronization solution. I don’t think I’m going to worry about clouds and hosting, because I want to use horizontal P2P syncing as the way of making sure the queue is on all my devices.

The original MTC site will be updated shortly. You can, already, export your data from it in todo.txt format. That is now the recommended solution for MTC users. The new version of the site will probably continue to let you do that, without adding anything new to your queue. But it will give guidance on how to install and use the new software.

From hereon-in it’s all Lisp. I’m getting more fluent in Racket. I do have a nagging feeling that maybe I ought to convert to Clojure-like dialect. Which would allow me to use the same code in the browser, on a node server or even compiled using Pixie-Lang. I’m still thinking about this and will make a couple of small experiments in the near future and I’ll pay attention … will other people pick up the Racket code? Will I find myself with a new compelling reason to have MTC back in the browser? Is it worth moving to Rackjure to smooth a potential future port? Right now the code is still trivially small enough that I could port relatively quickly. But I’m watching.

Posted in Uncategorised.

Third in a series (#1, #2) of questions occupying my mind at the beginning of 2014. Which may (or may not) inform what I’ll be working on.

3) How can we program on tablets?

I’m now a tablet user. I became a tablet owner at the end of 2012. For six months I played around with it, trying a few Android programming exercises. But I only really became a regular tablet user half-way through the year. Firstly when I put Mind Traffic Control into a responsive design. Secondly when I bought a couple of e-books. And I only really got committed when I did OWLdroid and coupled that with btsync.

So – somewhat late to the party, I admit – I’m now a tablet enthusiast.

And so my question is, how the hell do I program on this thing?

There’s a trivial answer to that question : get an external keyboard, an appropriate editor / IDE and treat it like a normal computer with a small screen. I can do that. I’ve worked a lot on netbooks and small screens don’t freak me out. But that’s not really what I mean.

Because tablets aren’t meant to have keyboards. And a computer without a keyboard challenges one of my deepest held programming beliefs : the superiority of plain text.

Plain-text is so flexible, so expressive, so powerful, so convenient to work with, that I’ve always been highly sceptical of those who want to do away with it. But on a keyboardless computer, it’s a different matter. Plain text isn’t at all convenient without a keyboard.

Especially the text of programming languages which makes rich use of another dozen or so punctuation symbols beyond the alphabet and numerals. And where manipulation relies on cursor-keys, shift and control, deletes (both forward and backspace), page up and down, tab-complete etc.

And yet tablets are becoming ubiquitous. Increasingly they’re the target of our programming, and the tool we have with us. So how are we going to program in this new environment? With multi-touch or stylus but no keyboard?

I have yet to see anything even vaguely plausible as the revolution in programming “language” we’re going to need for this.

I don’t think it’s the “Scratch”-like or “App Inventor”-like “stick the blocks together” languages. The problem of programming on tablets shouldn’t be conflated with the problem of teaching novices to program. (Which is what most visual programming environments seem to be about.)

One issue with that kind of system (and other “flow-charts”) is that blocks need to be big enough to be easily and unambiguously manipulated with fat fingers. But to be decently usable, a programming system should be able to have a reasonable density of information on the screen, otherwise you’ll spend all your time scrolling and forgetting what you’ve seen. How do you resolve that tension?

Perhaps “data-flow” programming of the Max/MSP, PD, Quartz kind. Piping diagrams. Process Modelling packages have something to teach us about orchestrating in the large. But they are shockingly clumsy for certain fine-grained activities that are expressed easily in text. (Eg. how the hell can you talk about tree-shaped data or recursive algorithms using this kind of piping model?)

So I don’t have any information about who is doing interesting work in this area. (Aside : while writing this post, I thought I’d consult the collective wisdom on StackExchange. Needless to say, my question was immediately shot down as too vague.) But I’m now very curious about it.

Posted in Uncategorised.
Giles Bowkett :

This is, in my opinion, the strongest argument for seeing Unix and basic coding skills as fundamental required literacy today. As prostheses for memory and identity, computers are too useful not to use, but if you don’t know how to craft your own code which gives you a UX which matches the way you think, you’re doomed to matching the way you think to the available tools, and even the best available tools basically suck. Interaction design is not only incredibly hard to do well, it’s also incredibly idiosyncratic.

Posted in Uncategorised.
This looks very interesting :

I laughed when I first saw it, said “it’s like Emacs”. Seems Emacs is involved somehow. Also reminds me of Enso.

Posted in Uncategorised.
I’ve been travelling with my trusty (but ageing) eeepc netbook this last week. There’s much to love about it but it’s starting to feel slow in comparison with my other machine.

Increasingly when I use the netbook I try to get away with doing things in a ctrl-alt-f1 shell without logging in to the GUI at all. I’m starting to wish more software could be used in this environment so I began to look at Curses, the standard library for text-window UIs. There’s a convenient Python wrapper of course. And there’s another nice library in Python : Cmd, for creating a command-line driven apps. That is, not programs that literally run as small tools on the shell with command-line arguments, but programs which have their own internal “repl” style loop which you drive by typing in commands. Cmd handily hides the details from you, letting you declare a subclass of the Cmd class which simply defines handlers for specific commands. It’s not a million miles away from something I ended up writing to handle the commands in SdiDesk.

For some of my projects it would be useful to combine the two modes : to have Cmd style input driving a 2D textual output using Curses. Unfortunately Cmd and Curses don’t obviously play well together.  Both of them want to take over the input, with Curses thinking in terms of keystrokes while Cmd still expects full lines.

Nevertheless, after a bit of exploration, and learning about Curses’s textpads and Cmd’s supplementary methods, I’m starting to get the two to co-operate. As this gist shows :

It doesn’t do anything yet. Just handles a “greet NAME” command that prints “hello NAME”. And a “quit” command that exits the program. But it has combined Cmd inputs with Curses output.

Posted in Uncategorised.

Can’t remember if I saw this before, or if I posted it, but it’s beautiful.

One of my favorite business model suggestions for entrepreneurs is, find an old UNIX command that hasn’t yet been implemented on the web, and fix that. talk and finger became ICQ, LISTSERV became Yahoo! Groups, ls became (the original) Yahoo!, find and grep became Google, rn became Bloglines, pine became Gmail, mount is becoming S3, and bash is becoming Yahoo! Pipes. I didn’t get until tonight that Twitter is wall for the web. I love that.

Marc Hedlund via Coding Horror

Posted in Uncategorised.