The Plan

It’s been 2 weeks since I’ve started my sabbatical and I think I’ve come up with ‘The Plan’ for what I’m going to do. This actually required a little bit of business planning, in addition to technical planning, so it took me a little longer than I would have liked. So here’s what I’ve come up with:

– NowStream Server (codename CoffeeTalk): an Instant Outlining server for developing and deploying collaborative applications.
– NowStream clients that connect to the NowStream Server in various languages and frameworks.
– Collab@Web: a dynamic project management system built on NowStream technology.

Collab@Web will be the product that we figure out how to sell. I’m still working on the details, but I’ve been working on the work flow for quite a while.

A lot of my thinking has been inspired by the changing forces of the web. Adobe and its Apollo platform look very promising and the rise of Twitter has sparked a lot of ideas on instant information.

I want a tool that can help me manage this huge deluge of valuable information. Something that can keep me in close contact to the important happenings of the moment. That means that group members and what they’re doing needs to be easily accessible and tracked. There’s a lot of competition in this space, but I want my own version that fits my needs. As long as it is useful to me I’ll consider it a success.

Time to dig in.


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

Flash/Flex vs. WPF/e: How I Learned to Stop Worrying and Love the Bomb

Some interesting discussion about Flash/Flex vs. WPF/e on Robert’s blog, and an old post I just read on Anne’s blog.

Selecting a platform to write for and worrying about how easy it will be to port to another platform is a sign of unintelligent design. It’s a sign you have no idea who your target market is. It’s a sign you, or your developers, have no grasp of reality when it comes to developing, shipping, and supporting a project.

You shouldn’t worry about portability, but that doesn’t mean you shouldn’t take it into consideration. You should worry about the core pieces of your project to ensure that they follow widely accepted industry standards. Those standards are there for a reason. Use them wherever possible.

Both Flash/Flex and WPF/e represent vendor lock-in. Tough. That’s the way the free market works. You are most definitely empowered to build your own toolkit, push it to the point where it has a huge developer-base, and user-base, and bring it up to the same level as Flash/Flex and/or WPF/e (or .Net 1.*, Java, etc.) Go ahead. You’ll probably get some help, but the vast majority of us will be picking a side and actually writing the coolest software applications ever possible.

Let Microsoft and Adobe duke things out, spend their enormous sums of money to build up their nuclear arsenals. Ajax-based toolkits have their hands in all of this too, but they’re playing with much lower yield weapons when compared to Microsoft and Adobe. In the end, we, developers and users alike, win.


Outlining is the core of CoffeeTalk. The internal structure of data is based on OPML. There are some example OPML files on

The OPML format has become a favorite amongst RSS readers like Google’s Reader, NewsGator. and many others. I see OPML files commonly referred to as ‘reading lists.’

A nice definition of what an outline is the following (from one of Purdue’s websites)

* A logical, general description
* A schematic summary
* An organizational pattern
* A visual and conceptual design of your writing

An outline reflects logical thinking and clear classification.

Replace ‘writing’ with ‘programming’, add some networking code, a sprinkle of object-oriented coding and you get CoffeeTalk.