Restrictive Creativity

Work on my ‘Interactive Outliner’ system is coming along extremely well. I’ve run into a few hurdles here and there, but I’ve gotten through them by focusing on a few key ideas:

  • This is 1.0 – There are features that I want to put in, parts of the system that I want to redesign, more long term planning that I want to do. But that’s what version 2.0 is for. This version just needs to work and get out the door. Real artists ship.
  • Restrictions are good – It is extremely difficult to make something that does everything people would ever need. Damn near impossible. Decide what rational limits need to be and stick with them. If the restrictions are too much refer to the above point.
  • Constantly look for inconsistencies. – This project has its own mojo and it needs to permeate throughout the entire code base. Straying from said mojo is not only bad style but negative progress. Don’t cut corners just to get something done. Do it right the first time.
Advertisements

IOML – Interactive Outline Markup Language

The format I have been working with now has its official name: Interactive Outline Markup Language. IOML.

The IOML format is an evolutionary step from OPML with some of the structure changed to make using outlines, uh, interactive.

IOML is used to communicate with an Interactive Outline Server. The server I am working on is called CoffeeTalk. It is written in Python. Initial coding is almost (damn I’ve been saying that for a long time) done. The feature set is almost frozen. I’m only debating on one more feature before deciding on freezing the specification.

The first clients to use IOML will be in Python, ActionScript 3.0, and JavaScript/Ajax. The Python client is being developed along with the server.

I’m very excited about the possibilities of IOML. It is very flexible, easy to understand, scalable, portable, and, best of all, it just makes a lot of sense.

Development at the speed of thought…

Instant Outlining

I had no idea that Instant Outlining has been around since at least April of 2002. Dave and the team at Userland shipped a version in Radio 8 back then. As always, Dave was ahead of his time.

I first encountered Instant Outlining in August of 2005 when Dave added it to the OPML Editor. I was expecting Instant to mean ‘instant’, but that wasn’t the way things were setup. The OPML Editor would poll the server once a minute to check for changes, which saves a lot on the backend.

From somewhere inside my head came a little voice: “You write server software for a living, why not make an Instant Outlining server that sends updates immediately?” Using the OPML format as a guideline I started putting the pieces together and came up with a proof of concept by the end of August 2005. The name ‘CoffeeTalk’ seemed like a natural fit due to the ancestry from Dave’s love of coffee.

There are a lot of differences between CoffeeTalk and the Instant Outlining tools provided by Dave’s and Userland’s tools. Their tools were/are designed to be open and provide an easy standard for others to adopt. Everything goes through XmlRPC and modifying your web server to handle Instant Outlining is fairly similar to getting your web server to handle blogs. Dave strives to make things easy and accessible.

CoffeeTalk, on the other hand, is not currently an open standard, requires a separate server to be running, has no GUI client to speak of, and no documentation. It also isn’t finished 🙂

I’ll be working on getting version 2.0 finished and ready for internal use in the next couple of weeks. Demos come after that, and then I’ll be figuring out which direction to take things at that point. The next couple of months promise to be very exciting…

Twisted vs. Asyncore

I’ve spent the last couple of days digging into Twisted to try and figure out if it is worth the hassle to tear out the networking code for CoffeeTalk, my Instant Outlining Server. Turns out that Twisted is waaaaay too much for what I need. Asyncore will be just fine, now that I pulled my head out of my ass and figured out how to get asyncore to do what I need. No wasted time looking into Twisted because I was able to find an answer to another problem. I guess that’s called ‘research’.

The site that was…

Way back on April 1st of 2003, 4 long years ago, we started a site called NowStream.com. The idea was simple: Allow people to broadcast live events from anywhere to anyone. We had a few broadcasters setup here in Las Vegas and a few others scattered across the country. Version 1.0 was decent, but it wasn’t good enough, it wasn’t up to my (insanely) unrealistic expectations. So we put all our weight behind it and attempted to get version 2.0 done and out the door.

There were a lot of technical challenges to overcome. We didn’t make the right choices in the long run, but we made the right choices at the time. Windows Media was our streaming solution which meant Windows servers (ugh!). The rest of our site was powered by LAMP and was being designed to scale to our wildest dreams.

Designing a huge system that ‘just works’ is, I’m assuming, every geeks dream. It sure is one of mine. And we had several huge systems to design: a live-streaming solution, a community-fostering system, and an administrative system to make sure everything was working. I can’t think of anything more exhilarating. Programmers live for stuff like this.

Things didn’t work out so well however. Our team worked their butts off and did everything in their power to make 2.0 happen, but the timing just wasn’t right. The market wasn’t ready and neither was I. We ran out of money and had to let it go. It was one of the most difficult experiences I’ve ever gone through in my life.

The effect of that defeat still lives with me today. The biggest pain has come from the growing ‘socialization’ of the web since then. Not a jealous pain because of the extreme financial success of sites like YouTube, Flickr, and others, but an empty pain that comes with not fulfilling the dreams an aspirations of others. Everyone we talked to about NowStream.com loved the idea. People thought it would be the coolest thing. Watch almost anything happening anywhere in the world. Imagine the possibilities!

We could have been a part of moving the Net towards its ultimate goal: communicating and interacting with one other through every means possible. Being able to watch something happening anywhere on the planet right now is one of the next natural steps. One of the next evolutionary steps.

We were on the cusp, ahead of our time. 4 years ago. 4 long years…

Testing the waters and deciding to jump in head first…

I’ve been given the chance of a lifetime: Take an extended sabbatical from work and spend my time working on a new project all by myself. No distractions from actual work. No one to answer to but myself for the foreseeable future. And I still get paid! What a deal…

I’ll be taking this time to work on CoffeeTalk, a system still awaiting a proper description. I have a map of everything in my head and in some documents about where CT is going from a programming standpoint, but nothing concrete business-wise. I’ve done my fair share of ‘business development’ over the past 9 years, but I really suck at it. My record is like 1 and 10, which I guess is pretty standard for business ideas. Or so I heard.

Anyways, I’ll be focusing on getting CT stable and feature complete over the next couple of months. This means a few of things:
– Rip out the networking code in the server and replace it with the Twisted framework
– Update the Python client to use Twisted as well
– Start working on a Flex client
– Finalize all features for version 2.1

I want to treat this like I’m going into seclusion to write the ‘Great American Novel’. I’ll need to stay focused, but relaxed. This is an incredible chance for me to do something that I am passionate about. I already have a good start on things, I just need to focus on the next step.