I recently went to a conference called IndieWebCamp. It was a great experience, for many reasons (meeting up with Aaron Wolf and Ward Cunningham, watching a presentation by a 10 year old girl who knows more Ruby than half the people in the room, eating the most delicious tacos I have ever had in my life, slicing open my pinky and getting an extremely brief story out of it, etc.).
It also validated a promising pattern in my own behavior. Conferences make me develop like mad, on the projects that matter most to me. And why? Because of a few factors:
- Presence of fellow geeks (enthusiasm by osmosis)
- Ability to spend large amounts of time in peaceful heads-down hacking
- Pressure to demo
The first two can be approximated at home, by spending time on IRC and (certain parts of) reddit, and setting aside an hour or so after work. But those are really just facilitators - the motivation comes from the third item.
Demos have a few really important properties. They require one’s work to be demonstratable - forcing one to focus on that which can be seen, not that which is esoteric (and may or may not be meaningful). People respond to visible improvements, including me, the author. Demos also force regular productivity - even if you’re flexible on what you’ll be demoing, you still need something demonstratable on a regular basis. Deadlines motivate.
So, in order to act as additional documentation, a historical archive, advertisement and development motivation, I’ve started doing weekly demos of the state of DJDNS.
Demo 01 - CLI and Browser Clients
A basic introduction to the current DEJE tools and concepts. Not a lot of DNS stuff. But there is a publicly available WAMP1 router on my site, that people can play with in a web interface!
Demo 02 - DJDNS
The first DJDNS demo screencast. Will include a public instance of DJDNS, where people can mess with the content. Don’t use this as a real DNS server, seriously.
Finn was very generous and helpful in trying to get Icecast to work for this, but it’s not as reliable or convenient as Google Hangouts yet. I’m not opposed to switching at some point in the future, but I really do not want to waste a lot of time on meta-infrastructure concerns, when I could be working on the software itself. Also, Icecast is just godawful to configure/work with (Icecast devs: please don’t take offense, I would really like to see your software improve, and I’d be happy to elaborate on why Icecast is a pain for noobs).
This demo ended up being a parade of technical difficulties. I forgot to pack a mic, so I had to do everything as text in the #djdns channel of HypeIRC. Then I ran into hash disagreements between JS and Go, which points to serialization differences that will need further examination soon (I actually have a plan of attack for this - a language-agnostic test suite for serialization and hashing). In the end, I was even having trouble writing JSON clean enough to appease the parser, which is unfortunately ambiguous about why something is invalid.
I eventually got things to work in a second video, but the fiddliness convinced me that DJDNS is not ready to have a public instance yet.
- DEJE Pagegetter for DJDNS
- CLI client got –topic flag support
- Browser client got support for reconnecting, which also allows for connecting to arbitrary topics (no ticket)
- Fixed an issue in go-deje where events with numbers in the path didn’t work
- js-deje got deterministic object serialization
- Added DELETE support in CLI client
- Moved all repositories into DJDNS organization, for better collab and issue tracker consolidation
- Fixed a bug in js-deje’s handling of deleting array items
- Expanded protocol to work better with file storage
- Brought js-deje up to speed with that protocol expansion
- Fixed bug in Document.Deserialize()
Next week, I’ll be working to get all the code settled into its new home in the ‘DJDNS’ Github organization, and implementing the reverse proxy DNS and recursive resolution features that made the Python edition so tolerable. My hope is that by the end of the week, we’ll have a static
<ROOT> with a few DEJE TLDs to play around in.
EDIT: That turned out to be pretty optimistic, but there’s still some good stuff to show off.