The SocketServer documents

> Introduction: What is BlogPost?

BlogPost is a Konfabulator Widget. It should run on Konfabulator 1.0.2 or later, and it should run on OSX 10.2 or later (tested only on 10.2.5). It allows you to quickly and easily post to a Blog that you have. In order to do this, you must fully fill out your Blog preferences in the Widget preferences panel. The hardest part of this is knowing your BlogId. Your BlogId is the identifier that tells Blogger which Blog you mean. You can find this out by going into your Blog on, and looking at your browser's location. At the end of your location, you will see something like "?blogid=######". That number is the ID of the Blog you are looking at.

Why use BlogPost rather than going online to Blogger itself? There are two reasons. The first is just that BlogPost gets you there faster -- fewer clicks to post to your Blog, with a convenient desktop icon. The second is the kind of cool part: you don't have to be online to post to your Blog if you use BlogPost! BlogPost automatically queues any posts you make while offline, and next time you start the Widget, or change your preferences, or post another message and are online, all of the entries in your queue will be automatically submitted to Blogger in the background! So you can Blog from a plane, train, automobile, or wherever you want. I think that's pretty cool.

Also, if you're interested, you will find that there is a moderately clever binary SocketServer distributed with this Widget. I believe I have started along the path of a way to offer relatively sophisticated Internet/ sockets connectivity to Konfabulator via this server, and a JavaScript object wrapper. If you're curious, take a look at the code. My plan is to release more Widgets that also use the same SocketServer, with additions. I will keep adding new power to the SocketServer, and release updated versions independently of my Widgets, with upgrade instructions. The possibilities seem limitless. I have coded the SocketServer and its wrapper with size and performance in mind: the memory footprint of the SocketServer is very, very small, and its performance is impressive, I believe. It's also super-duper easy to extend: if you know any C, it's likely you can code up an extension to the SocketServer that will add value. Your comments are welcome.

> Download

The latest BlogPost can always be found here. The most important BlogPost changes will be found at the bottom of this file in the CHANGELOG.

BlogPost 1.2.0 is here (latest).
BlogPost 1.1 is here.
BlogPost 1.0 is here.

> Installation

Expand this using tar xzf, and put the resulting BlogPost.widget directory in your Widgets directory. Or, I think you can expand it using StuffIt, and again, put the resulting folder in your Widgets folder (if you don't have always view file extensions on, then the BlogPost.widget folder might look like a BlogPost application icon instead -- same thing).

> View Sources of Version 1 (for HTML or XML sources, do view source on the page)

> How Do I Contribute?

Simply for the interest of having a single, growing, managed codebase, I would best like it if anyone who wants to contribute could post patches or additions to me by email. I will be responsible for testing the changes, making sure they pass regression, and releasing them as I can.

> My Attitude Towards Collaboration

Help me! I welcome any and all comments and suggestions! Yes, even bug reports.

> Who Wrote This?

ZeroAltitude ( My contact info is near the bottom.

> Why Did I?

I saw Konfabulator, liked it, and wanted to contribute. I think the SocketServer is among the most sophisticated attempts yet to integrate underlying unix functionality simply and easily into Konfabulator. And the fact that it's an extensible server means others can contribute and keep adding power.

> Future Development

I hope to enable BlogPost to know about many Blogs at some point. Not sure how to do this, given how limited the preferences pane in Konfabulator currently is (wants a tabbed preferences pane).

> License

Have at. Just please include a copy of the original files in any derivative distribution. No warranties. If you lose a long Blog entry, that will be sad, but I can't really help you. Build up your trust gradually. I believe it's nearly impossible to lose a long post unless you have bad data in your Blog preferences (in which case, you *can* and probably *will* lose any data you post). So far the Widget seems very stable.

> The SocketServer, and some details

This server listens on TCP port 15432 for requests that are specially handled by its process requests routine. The server is multi-process/forking, and should perform very well under any reasonable load. Further, the process is minimally self-aware, and will know if it should not start because some other instance of it is already running. Therefore, this server can be distributed in a wide variety of widgets, with a wide variety of additional functions. However, if you think about this, it will quickly occur to you that if various authors all make their own changes to this server, then you will have disjoint sets of functionality floating around in the world. For this reason only I ask that you submit changes, additions, and modifications or improvements to me, to make in my code base. That way, I can release versions of the SocketServer independently of releases of Konfabulator Widgets, such that anyone with version X or higher of the SocketServer will be guaranteed to have a certain common level of functionality.

There is one muddy issue in my notion of Widget versions varying independently of SocketServer versions, and that is the notion that the Konfabulator interface to the SocketServer functionality is implemented (and I believe ought to remain implemented) in a single JavaScript object whose methods are exposed as a programmatic API for Widget developers. The clarity to make this mud mentally manageable is: the SocketServer.js versions in lock-step with the SocketServer understood as this C project.

NB: until Konfabulator supports JavaScript includes, the SocketServer.js code is found embedded in this Widget's onload handler: onload.js.

The SocketServer implements a limited, tiny subset of the HTTP/1.0 protocol in order that Konfabulator might interface with it via standard GET calls via its URL object. This has the intended side-benefit of allowing you to do clever things like use AppleScript or runCommand to launch a browser, pointed to an HTML file inside of your Widget resources, which displays a form whose GET target is... you guessed it... the SocketServer!

The blog-xmlrpc request processor included in this first version is somewhat overly restrictive. The request has to be a GET (POSTs are not understood). The get parameters have to come in a predefined order. An obvious, and very easy, project that would be good to get done would be to make SocketServer POST aware, and to make it have a parameter loop with the appropriate CASE-like statements that would make parameter order unimportant.

I always welcome help. Feel free to jump in. My contact information:

AIM: ZeroHesitation
yahoo: zerofluffy
ICQ: 1115256

Thanks, and I hope you have fun. Send me any bug reports, or whatnot.

/tmp/socketserver.stdout == any standard output from the socketserver, usually very quiet
/tmp/socketserver.stderr == any standard error output from the socketserver, usually very quiet
/tmp/socketserver.log == the logfile for the socket server, usually very quiet -- may one day make debug level a command line switch
/tmp/processqueue.stdout == any standard output from the processqueue daemon, usually very quiet
/tmp/processqueue.stderr == any standard error output from the processqueue daemon, usually very quiet
/tmp/processqueue.log == any log information from the processqueue daemon, usually very quiet
/tmp/konfab.log == any log information from the command, usually very quiet
~/.konfabblogqueue == the queue of blogs not sent because connection failed, or no connection to internet


V.1.1.0: Supports one blog still, but supports any Blogger API (e.g. Blogger, movableType) or any metaWeblog API (e.g. Manila) blog. New configuration wizards. New socketserver, version 1.1.0 with some improvements to API and to security. Autoupdate feature, if enabled, will automatically download new version of BlogPost and install them for you! Caveat: if you change the name of the BlogPost directory in your Widgets directory from BlogPost so that you can have more than one BlogPost running at a time with more than one blog preference-set, then autoupdate will fail to update that instance of BlogPost. A future version of BlogPost is planned that support multiple blogs simultaneously. Petitition Konfabulator for radio buttons and textareas!

V.1.0.0: Supports one weblog, supports offline blogging, supports with and without socketserver v.1.0.0.