A quick update (for me, as much as anyone else) of where I’m at and what I’m currently thinking about … March 2017:

ClojureScript and Reagent

I want to get up to speed on this as my standard way of writing browser based software. React seems to have conquered the world as browser based, reactive framework. And with React Native it’s also come to mobiles. It seems that the ClojureScript / React Native story is becoming compelling too.

So, yes, this is mainly how I want to do GUIs moving forward. I’m doing some experiments. Expect, eventually, Patterning and some of my other projects to move to this.

WebAudio

A friend of mine has sold me on the idea of going back to audio in the web-browser. Which is obviously a great way to make little musical apps that are easy to share with people. He’s not so keen on ClojureScript but does like Javascript in a functional style with Redux and Immutable.js so we’ll probably be using them on a collaboration. I’m considering porting versions of Gbloink! and Zewp! to it. Along with more of my current Processing based “ArtToys” Library.

Lisps on Android

It may be that ClojureScript + ReactNative is the right way to go. But I’m also looking at Clojure on Android. And Racket on Android.

Reading online it seems that Clojure on Android has been improving, but is maybe not as efficient as ClojureScript with ReactNative. And, also obliges you to deal more directly with the Android Java frameworks. Maybe something that’s useful for larger, more framework intense, applications.

I was originally tempted by LambdaNative, a Scheme for Android app. development. But it now looks like Racket’s Android story has improved considerably and is quite similar. Especially sharing the focus on using OpenGL for visuals. Racket on Android basically compiles to C and uses the NDK, which might be a faff to get working, but might also be more efficient. One to have in the arsenal.

Also, of course, Racket on Android would let me keep a common Racket code-base for both the command-line and an Android version of Mind Traffic Control.

Rosette

I’m kind of intrigued by Rosette and the idea of “solver aided” programming. And being a Racket DSL is a bonus. I want to get my head around this, this year.

Music Languages

Last year. I did a lot on Sonic-Pi. This year I thought I’d go back and take another look at Overtone. Which is, in many ways, the predecessor of Sonic-Pi done as a Clojure library.

It’s not quite as simple as Sonic Pi with its integrated development environment but Clojure is
more powerful than Ruby.

While I still think that Faust looks cool. I’ve also been tempted by the lower-level simplicity of CSOUND … wondering if it might make sense to write a CSOUND generator in Clojure. I’m slightly pulled backwards and forwards on this question. Plus, Overtone provides its own synth-design functions.

Project ThoughtStorms

So, I haven’t trumpeted it here. But last year I moved away from the Smallest Federated Wiki for ThoughtStorms. See ThoughtStorms:LeavingTheSFW for the full story.

Here I’ll just note … I’m very happy with the decision, and I have lots of ideas for how to develop my currently very minimal wiki engine to do more of the things I want to do. In many ways, this is like the MTC reboot of last year.

Small Boards

I’ve become a bit of a collector of small hobbyist / maker boards, from Arduino to last year’s CHIP. I’ve just got a couple of BBC Micro:Bits which are great fun. These are a really smart and original idea in what’s becoming a crowded and competitive market. The computing power is pretty minimal. But what gives them an edge is that they’re packed with sensors. And come with their own primitive display.

I’m looking forward to playing with and giving these a good run for their money.

Interestingly they run MicroPython. Something I hadn’t really looked at before.

Python

All of which means, despite last year’s thinking, that I’m actually renewing my relationship with Python. I really thought I was deprecating it in favour of Javascript. This year, that seems fairly unlikely. Python just is nicer than Javascript in so many ways. It’s the back-end of my new wiki, which I’m planning to extend. It’s the language of the Microbit and potentially useful on other boards. It’s getting ported to the GoLang infrastructure and perhaps has a great future in front of it there. Meanwhile, even a tiny serverside JS program with node.js seems to install a million dependencies.

So Python is definitely here to stay in my near future.

QaSaC

A rather crazy art-project I dabbled with last year spawned an interesting toy / esolang : QaSaC. This is little experimental “concatenative” language like Forth and Joy cross-pollinated with a visual data-flow language like Pure Data.

I think there’s some potential here. And I’ve really enjoyed the concatenative / stack-based thinking and elegance of this kind of programming. So I am working (albeit slowly and interspersed with everything else) on getting an actual viable version of this out soon.

OK. I think that’s a pretty comprehensive list of my obsessions for 2017. Let’s see how much progress I make with them all. This year, I promise, I’ll be trying to release, and blog, more often about them.

Posted in Me.

qzhuyan responds to me tweeting Emacs on PocketCHIP.

Which is, er, very true. And wonderful.

But this haunts me continuously, as I explore the Mind Traffic Geometry of tools that support me tracking tasks and outlining ideas.

Will I one day end up simply falling into Emacs Org Mode? Isn’t that basically everything I really want?

Am I wasting my time with quixotic effort of writing my own software for this stuff when I could be writing something newer and more important?

Another thing that’s pushing me to think about this : this week I’ve been playing with Faust. A wonderful language for writing signal processing networks (ie. synthesizers, audio FX etc.) that compiles to multiple back-ends … including PureData, Supercollider, VST plugins and stand-alone programs.

It’s basically where I imagined Gates of Dawn eventually going.

But rather than a Python library, its a very nice “little-language”, with great operators for describing composition of data-flow blocks. It’s well developed and supported. I’m trying it out for writing small synths / FX units I can run on small boards like CHIP and Raspberry Pi.

I can see myself doing a lot with this. But it’s basically going to kill Gates of Dawn. Maybe there’s room for a Python library for those who don’t want to learn Faust. But for me, Faust is looking extremely viable.

So … another wasted project?

Perhaps I need to look at this positively. I’m not old. But I’m not as young as I used to be. I don’t have so many projects left ahead that I can afford to squander them. Perhaps its time to pivot. Time for a cull. A “spring-clean”. To remove some more cruft projects that occupy too much of my mind, but are actually just weak “me-too” versions of existing things that I would use perfectly happily if I made the effort to learn them. Enough with the Not Invented Here syndrome.

I’m not saying that OWL or MTC are going anywhere yet. I use them, and they work for me. And they are DIFFERENT from OrgMode, or todo.txt or any similar thing out there. They are what I want.

But I need to embrace this change. There are so many exciting NEW opportunities, there’s no point getting hung up on the old stuff.

Dawn is over. For me it’s 2PM. And there’s plenty of work to be done.

Posted in Me.

You all probably knew where this was going, right?

Mind Traffic Control (Racket version) running on PocketCHIP
Mind Traffic Control (Racket version) running on PocketCHIP.

Of course, it’s been my priority to run the new MTC on the PocketCHIP. And it runs fine, without any special conversion; just needed to figure out how to install a library it depended on without going through drracket.

Now I’m off for my celebratory bike ride. 🙂

 

 

Save

Posted in Me.

Fixed a minor, but annoying, bug in MTC Racket today.

There’s an option, when you have a URL in an item, to get MTC to pull it and show the “title” of the page that the URL is pointing out. It’s a quick reminder of what the page is about without opening up the browser (when it’s not obvious from the link itself). You do this simply by typing “a” (for “analyze”).

However, if you typed that in an item without a URL, MTC was blowing up. That is now fixed.

Posted in Me.

Today I killed the old Mind Traffic Control on Google App Engine. And replaced it with a new, fairly basic, site. (Though one that’s quite pretty, in a Packt Publishing kind of way.)

This is the beginning of a whole new MTC ecosystem.

1) I’m no longer interested in hosting your todos on Google App Engine. The only functionality that’s left on the site is the “export”. You can get the tasks you put into the old MTC in one of .txt, .csv or .opml formats.

.txt means you can use either an ordinary text editor, todo.txt or the new command-line based mtc program on your own machine.

.csv means you can use a spreadsheet if you prefer

.opml can be read into an outliner such as OWL.

2) The site has a new mission. Right now, it’s simply pointing visitors to the two pieces of software that I use to manage my todos and information : MTC command-line (in Racket) and OWL (in its three different versions : desktop, Android and web-served).

These are currently all simply source-code, hosted on GitHub. (Both MTC-racket and OWL are free-software, under the GPL).

It’s a geek view. But going forward, I’m going to be preparing, packaging and documenting these for actual users.

3) Right now, I still don’t know the relationship between MTC and OWL. They’re different programs, with different “mind traffic geometry”, in different languages. But I use both and I’m constantly musing about how they can and should interact.

The only thing which is clear to me at the moment, is that they should be brought together under the common Mind Traffic Control “brand”. As a statement of intent.

The question of 2014 is getting resolved.

4) “What about Project ThoughtStorms?”, you ask.

Well, I tend to think of “Project ThoughtStorms” as the developers’ view on my knowledge management / personal productivity software. While “Mind Traffic Control” is the user perspective.

There’s more to it than that. Project ThoughtStorms covers my experiments and add-ons to the Smallest Federated Wiki and thinking about wiki in general. MTC heavily emphasizes the dynamic flow of tasks. But that’s the broadest overview.

In practice I’ll continue to refer to MTC-racket and OWL within the contexts of both Mind Traffic Control and Project ThoughtStorms.

5) I am VERY happy to be deleting code. And collapsing several different overlapping ideas and codebases into … er … fewer. It’s a therapeutic decluttering that’s clearing space in my mind, and helping me focus and drive the surviving projects forward faster. It’s good.

But there is just a slight twinge of sadness. As I realize that this is a mile-stone in letting go of Python, a language I had a long and passionate engagement with. Both the old MTC code-base AND the server-side PageStore of OWL are Python.

But since porting OWL to Electron I can see that its future is very much in the Javascript (node / CoffeeScript) camp. Meanwhile the new MTC codebase is in Racket. And my latest quick conversion script persuades me that Racket is a good language for other small-scale tools. I have about a dozen of them in Python. But I’m pretty sure that new development in these areas will almost certainly be Lisp. (Racket or Clojure).

(Actually there is a project that’s still in Python where you’ll see some further development soon … but I’ll leave that to another post.)

Posted in Me.

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 Me.

Bloody hell! I just wrote a blog post and WordPress lost it.

Grrrr …

The short resume was :

– yes, I’m late (Feb) continuing my “Welcome to 2015” blog posts.

– last year I got the functional programming bug. Haskell is pretty damned good, but I’ve fallen for Clojure because a) dynamic types, b) Lisp syntax(lessness), c) Paredit.

– last year I did more Python, but not much OWL. This year, OWL is calling again. And as well as making me want to rethink Mind Traffic Control in light of it, is also seeming to demand some kind of pivot on GeekWeaver.

I’ll be coding and blogging more on this ongoing development in coming weeks / months.

I’ve also been playing a bit with remoteStorage, but nothing to show yet.

Posted in Uncategorised.

I’m not going to be making predictions for 2014. Or promises that I may or may not keep. Or even resolutions. At least, not public ones : who knows what crazy trajectories my life will take this year?

But I do have a couple of questions. These are the things occupying my mind at the beginning of 2014. And which may plausibly inform what I do.

1) What’s the relation between OWL and Mind Traffic Control?

There’s little doubt in my mind now. OWL is great. It’s the future. At least, as far as my private notebook is concerned. And that means it’s now my de facto to-do list manager as well.

Which is kind of embarrassing for Mind Traffic Control.

MTC does have some virtues :

  • firstly, a kick-ass name that I love. “Mind Traffic Control” is the best name ever! For personal organizer stuff.
  • it’s solid. It has remembered everything I put into it from the moment it was written. It’s all still hanging around to haunt me. (Even if I kind of wish some of it wouldn’t)
  • the task delegation is pretty sweet. I don’t know anything else as simple as MTC for delegating tasks to other people and tracking what you delegated. To be honest, I don’t do a lot of delegating tasks to people. But if I did, I’d want to use MTC.
  • the deferral part works as advertised and it’s a nice feature for a task-tracking app.
  • MTC is slicker than you remember, if you haven’t looked at it for a while. In 2013 I did a bunch of Ajaxing it up so it’s now sending more little json fragments around and doing a lot less recreating the page.

But it also has big problems.

  • It’s not OWL. (See above. Doh!)
  • There is a major impedance mismatch between queues and the ORM-style storage system that Google App Engine uses. Moving items around on the queues seems to be really inefficient. To such an extent that whenever I do a burst of development / testing on the live server, Google kick me off for going over my quota of data queries. Querying also seems to take longer than it needs.
  • It’s on the GAE cloud, at a time when I and, I think, many others are becoming wary of storing their personal / private data on servers belonging to large corporations under the jurisdiction of the NSA. And at a time when I, myself, am seeking to become less entwined with Google and its technologies.
  • While the UI has improved, it’s still not as slick as it ought to be. It still needs a lot of work to look as good or work as well as modern web-apps.
  • It never really caught on. People try it, some have used it off and on over a couple of years, but I don’t think I have any long-term users except me.

So if I look deep into the abyss and am honest, MTC is a failed experiment. Whatever its theoretical virtues.

And in 2014 I think there’s a straight choice :

Either admit to myself that MTC is no longer a going concern. Perhaps kill it entirely. (Like I did with Platform Wars last year.)

Or, to use a fashionable term, pivot the site to become something else. Probably something with OWL at its core. I don’t quite know what that would mean. Maybe doing the hard work of remodelling the queue data-model (use localStorage? synchronized to large BLOBs on the server?) and then trying to put OWL / Concord on the front-end of that? Maybe just a one-time export of MTC data? (Remember, MTC has exported to OPML since its inception.) Maybe becoming a GAE hosted farm of OWL wikis? If so, what, if anything, of the original queue and delegation model could / should be preserved / recreated?

Today, I only have these questions rather than answers. But this year, I’ll be trying to resolve them one way or another.

(I’ll post the next of my 2014 questions tomorrow. Maybe.)

Posted in Uncategorised.