Tue, September 04 2018
IntroductionSome could argue that Bulletin Boards were the gateway to the successful adoption of the Internet in the United States. If you look at how many other similar solutions were being offered in different countries as an evolution to the standard telephone. There were video phones, education networks, you would leave voice mail without the recipient having an answering machine. None of these solutions survived when BBS users started demanding local BBS systems provide access to features/services on the Internet. Many BBS operators (SysOps) were forced to evolve from "Internet Gateway" conduits, to actual dial-up SLIP/PPP Internet Service Providers (The path I took).
During the BBS era, a form of network existed using packet mail concepts... called Fidonet. With the invention of Fidonet and a decade later the growth of Fido and all of the sister networks - it was amazing to see how many people just wanted to run a BBS in their house. Fidonet itself peaked with around 39,000 BBS systems connected around the world and now, it struggles to keep systems going with about 1,400 world wide. I operate two different systems, one on Modem 56k Dial-Up, and the other in a Rack of Servers in Arizona. I have been running a script based BBS system so I can make changes on the fly while users are connected. However, in today's era where sockets allow thousands of users concurrently, the old BBS functionality does not fit. Then add in the fact Microsoft dropped NTVDM support, which is how windows could still run old DOS programs.
Since January 2017, I have been scratching my head - with the socket suite I built in 1995 that surpasses he performance of any other socket suite I have tried over the decades... I want to have more than a service running out in the Cloud. As a software developer, I tinker constantly - and while experiementing with a GUI component that is a "Document" manager - I accidently designed a 4 node BBS. I ported some of QuickBBS 2.8 source to run in this 4 node view - and I was amazed how much it felt like being a SysOp again.
Of course being able to see hundreds of users concurrently is impossible to render. However in the mid-90's there were many attempts to change the presentation aspects of a BBS - going graphical on the client end, while keeping the BBS software text based. NAPLPS, later RIPScript, then WIP; are some of the attempts to introduce a graphics client interface - then came along Hotline for the Mac and eventually Windows. It kept true to the BBS world, instead of going after the P2P file piracy systems like Napster, Gnutella, Limeware and Kazaa. Which brings us to my revised "Widget" oriented protocol.
* NOTE: I am not inventing anything here - this is actually how most RAD Development frameworks work. Instead, I am simply documenting how to implement this protocol in other solutions - like BBS or in my 1998 solution called DXMotherboard with DXChips ~ where we were serializing Widgets and Code to make true Client/Server applications. In this document, I have switched the design to use JSONRPC for its ease and small footprint.
Widgets?Instead of a vector based drawing protocol like NAPLPS, RIPScript and even SVG. Why not look at the individual components aka Widgets for the GUI grameworks. And keep the "Palette" of Widgets focused to (a) a common set available almost everywhere, (b) applicable to what a BBS is and does, and (c) even possible to port most if not all BBS games.
WindowIn our palette, we focus on Window (the form for which all screen painting is being done) as the base for each use interface - be it interactive of a notification. You can have one or more Window Widgets visible, however, in most operating systems and frameworks, only one Window can be 'focused' at a time. Of course, in the BBS days we had "screens" - and then there were those amazing ANSI screens the hacker/art groups made. To keep true to this capability, a Window can have a color background, tiled image background, or a full graphical rendering backage.
Lasly, a Windows is required for all other Widgets to display. You cannot add a widget without having a parent and the base parent is usually a Window.