Whpearson recently mentioned that people in some other online communities frequently ask "what are you working on?". I personally love asking and answering this question. I made sure to ask it at the Seattle meetup. However, I don't often see it asked here in the comments, so I will ask it:
What are you working on?
Here are some guidelines
- Focus on projects that you have recently made progress on, not projects that you're thinking about doing but haven't started, those are for a different thread.
- Why this project and not others? Mention reasons why you're doing the project and/or why others should contribute to your project (if applicable).
- Talk about your goals for the project.
- Any kind of project is fair game: personal improvement, research project, art project, whatever.
- Link to your work if it's linkable
I actually have a demo of an earlier version up on a nameless Amazon AWS micro instance, built with node.js and redis and a rather terrifying amount of JavaScript code:
http://ec2-50-16-79-81.compute-1.amazonaws.com/notepad/931ab120-b66b-4275-a20c-e4d7b70b4c62
There are some weird browser compatibility issues, but it works in vaguely recent versions of Chrome and Safari and Firefox.
There are two parts to it. The core of what I'm making is, essentially, a synchronized string data type: a string where changes are immediately applied locally, and propagate across the network. The other part, necessary for actually using the thing, is making an application which maps documents onto strings. That's not really hard so much as it is irritating, so I won't talk more about it.
The synchronized string part is actually pretty cool. You apply some arbitrary patch of insertions and deletions, and send this out over the network. No matter what order these patches are applied in, they're guaranteed to converge to the same ultimate result -- it's a lot like using a distributed version control system, except that you do a branch and merge on every keystroke, in a way that isn't slow and doesn't break horribly. :-)
You get the complete version history with the document, along with per-character records of who inserted it. If you want to have a server holding the canonical version of the document, you can do that, or go serverless. Technically, it's based on the really clever idea of causal trees (PDF) invented by Victor Grishchenko; I've just been adding refinements so it goes fast and doesn't involve terrifying regular expressions.
Since you mentioned Haskell...
What's the connection to Darcs? A faster less-powerful version since branches won't be long-lived and not all that much commutation should be necessary?