Difference between revisions of "Telstar Viewdata System"

From Telstar Wiki
Jump to navigation Jump to search
Line 6: Line 6:
TELSTAR is both a a videotex application and a videotex service. Details of the current videotex service can be found at https://glasstty.com.
TELSTAR is both a a videotex application and a videotex service. Details of the current videotex service can be found at https://glasstty.com.


The TELSTAR videotex system, is a modern application that provides a simple viewdata/videotext platform similar to those that were prevalent during the 1980s such as Prestel (https://en.wikipedia.org/wiki/Prestel). The aim of the system is to provide a viewdata/videotex experience for anyone who is interested in how things 'used to be'. Services in the past typically provided access via the public switched telephone network (PSTN), however, the Telstar application of today makes use of a simple internet connection for modern internet modems.  
The TELSTAR videotex system, provides a simple viewdata/videotext platform similar to those that were prevalent during the 1980s such as Prestel (https://en.wikipedia.org/wiki/Prestel).  


Content for the TELSTAR system is based on simple json files with support for the popular frame editor available at https://edit.tf. Frames can also be created programatically with Python.


The Docker image described here is a full implementation of TELSTAR application, and whilst the system is comprehensive, it is fairly simple to set up. The system can be extended using a very simple plugin architecture and this can be used to add and update content (frames) as required.


The TELSTAR videotex application described here can be accessed over the internet using modern *internet modems* in conjunction with historic Viewdata and videotex terminals and home computers of the 1980s. There are also some client applications that can be used with modern computers and mobile devices.
Content for the TELSTAR system is based on simple json files with support for the popular frame editor available at https://edit.tf. As prviously mentioned, frames can also be created programatically through the use of plug-ins.
 
The videotex implementation described here can be accessed over the internet using modern *internet modems* in conjunction with historic Viewdata and videotex terminals and home computers of the 1980s. In addition the Telstar Viewdata Client can be used with modern computers (MacOS, Linux, Windows).


The TELSTAR application can be installed into a Docker environment (see https://docker.com) with a few simple Docker commands or by using Docker Compose. Telstar can also be run under a Kubernetes environment.
TELSTAR is is designed to run in a Docker environment and is supplied as a Docker image (see https://hub.docker.com/repository/docker/johnnewcombe/telstar). The system can be installed with a few simple Docker commands or by using Docker Compose. Telstar can also be run under a Kubernetes environment.
 
The Docker image described here is a full implementation of TELSTAR application, and whilst the system is comprehensive, it is fairly simple to set up. The system can be extended using a very simple plugin architecture and this can be used to add and update content (frames) as required.


== Getting Started ==
== Getting Started ==


Telstar is implemented using Docker containers and, in addition to the Docker commands detailed below, TELSTAR can be managed using Portainer if desired, see [Managing Telstar with Portainer](portainer.md). Examples are also shown for orchestrating the services using both [Docker Compose](docker_compose.md) and [Kubernetes](kubernetes).
Telstar is implemented using Docker containers and, in addition to the Docker commands detailed below, TELSTAR can be managed using Portainer if desired, see [[Managing Telstar with Portainer]]. Examples are also shown for orchestrating the services using both Docker Compose (see [[Orchestrating Telstar with Docker Compose]]) and Kubernetes (see [[Orchestrating Telstar with Kubernetes]].


To run Telstar using Docker, a minimum of two Docker images are required.
To run Telstar using Docker, a minimum of two Docker images are required.


* The official Docker image **mongodb**
* The official Docker image '''mongodb'''
* The Docker image **telstar**
* The Docker image '''telstar'''


In addition, a Docker *network* will need to created to allow the images to communicate, and a Docker *volume* is desirable to allow for configuration changes and the addition of plugins.
In addition, a Docker ''network'' will need to created to allow the images to communicate, and a Docker ''volume'' is desirable to allow for configuration changes and the addition of plugins.


=== Create the Docker Network and Volumes ===
=== Create the Docker Network and Volumes ===


The Docker network is used to allow communication between the TELSTAR application and the *mongo* database. The volumes provide a means to persist configuration data, plugins to be added and the *mongo* databse itself.
The Docker network is used to allow communication between the TELSTAR application and the ''mongo'' database. The volumes provide a means to persist configuration data, plugins to be added and the ''mongo'' databse itself.


The following commands will create the resources required.
The following commands will create the resources required.
Line 44: Line 46:
     $ docker pull mongo
     $ docker pull mongo


*Please note that the tag used with the official mongo image may need to be set to the system architecture that is to be used. Please see https://hub.docker.com/_/mongo.*
''Please note that the tag used with the official mongo image may need to be set to the system architecture that is to be used. Please see https://hub.docker.com/_/mongo.//


There are several ways to run the TELSTAR application, this *Getting Started* example uses simple Docker commands. See the **Docker Comopose** and **Kubernetes** sections for other examples.  
There are several ways to run the TELSTAR application, this ''Getting Started'' example uses simple Docker commands. See [[Orchestrating Telstar with Docker Compose]] and [[Orchestrating Telstar with Kubernetes]] sections for other examples.  


Start the *mongodb* container and connect it to the previously created network using the command below.  
Start the ''mongodb'' container and connect it to the previously created network using the command below.  


*Please note that the '--name' parameter is important as it is used as part of the database connection string from the TELSTAR container.*
''Please note that the '--name' parameter is important as it is used as part of the database connection string from the TELSTAR container.''


     $ docker run --name telstar-mongo --network telstar-network -v mongo-volume:/data/db -d -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo
     $ docker run --name telstar-mongo --network telstar-network -v mongo-volume:/data/db -d -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo


The Docker *run* command can be used to start the Telstar container and connect it to the previously created network. Note that in the example below the internal port is specified as 6512 and that this is mapped to the same port on the host system. This is also specified at the end of the command to inform TELSTAR that this is the port to listen on.
The Docker ''run'' command can be used to start the Telstar container and connect it to the previously created network. Note that in the example below the internal port is specified as 6512 and that this is mapped to the same port on the host system. This is also specified at the end of the command to inform TELSTAR that this is the port to listen on.


     $ docker run --rm -d --name telstar-server --network telstar-network -p 6512:6512 -v telstar-volume:/opt/telstar/volume johnnewcombe/telstar server --port=6512
     $ docker run --rm -d --name telstar-server --network telstar-network -p 6512:6512 -v telstar-volume:/opt/telstar/volume johnnewcombe/telstar server --port=6512


In order to add some example content to the system, the *install* parameter can be used as in the example below.
In order to add some example content to the system, the ''init'' parameter can be used as in the example below.


     $ docker run --rm --name telstar-server-install --network telstar-network  johnnewcombe/telstar install-example
     $ docker run --rm --name telstar-server --network telstar-network  johnnewcombe/telstar --init


If the *--install* switch is used as in the example above, the service should be running with example content (see [[Example Content]]) and can be accessed using a suitable client.
If the ''--init'' switch is used as in the example above, the service will be running with some example content (see [[Example Content]]) and can be accessed using a suitable client.


The simplest way to test the system from a desktop machine is to use Telnet. TELSTAR is not a Telnet application but telnet can be used to provide a *sanity check* e.g.
The simplest way to test the system from a desktop machine is to use Telnet. TELSTAR is not a Telnet application but telnet can be used to provide a ''sanity check'' e.g.


     $ telnet <ip-of-docker-host> <port-used-for-telstar>
     $ telnet <ip-of-docker-host> <port-used-for-telstar>
Line 89: Line 91:
The screen looks a little garbled simply because TELSTAR is a videotex application not a Telnet application.
The screen looks a little garbled simply because TELSTAR is a videotex application not a Telnet application.


The Docker environmemnt can be managed using Portainer, see [Managing Telstar with Portainer](portainer.md).
The Docker environmemnt can be managed using Portainer, see [[Managing Telstar with Portainer]].


[[File:2827664245-portainer.png]]
[[File:2827664245-portainer.png]]
Line 95: Line 97:
== Pages and Frames ==
== Pages and Frames ==


As is typical with interactive videotex systems, pages are numbered from 0 to 999999999 and consist of one or more frames with the suffix a-z, for example the first frame for page 200 would be 200a, the second 200b and so on (see [Routing](routing.md) for more details). These frames are stored within TELSTARs database as *JSON* objects (see https://www.json.org/).
As is typical with interactive videotex systems, pages are numbered from 0 to 999999999 and consist of one or more frames with the suffix a-z, for example the first frame for page 200 would be 200a, the second 200b and so on (see [[Routing]]) for more details). These frames are stored within TELSTAR's database as ''JSON'' objects (see https://www.json.org/).


The simplest frame that can be viewed on TELSTAR would be defined as follows. This would create a simple information frame with some default content.
The simplest frame that can be viewed on TELSTAR would be defined as follows. This would create a simple information frame with some default content.
Line 107: Line 109:
     }
     }


Whilst frames can be created directly with *JSON*, it is often simpler to use the *frame_document* object as described in the example shown in the next section.


Shown below is a more comple example of a JSON defined frame. With this particular frame, the actual viewdata content has been created using the editor at http://edit.tf, this can be seen in the *content.data* and *content.type* keys. The example below is a simple information page with some simple routing (see [[Routing]). Pasting the *content.data* value into a browser will show the page and allow it to be edited.  
The [[The Telstar API]] can be used to add this and other frames to the system.
 
Shown below is a more comple example of a JSON defined frame. With this particular frame, the actual viewdata content has been created using the editor at http://edit.tf, this can be seen in the ''content.data'' and ''content.type'' keys. The example below is a simple information page with some simple routing (see [[Routing]). Pasting the ''content.data'' value into a browser will show the page and allow it to be edited.  


     {
     {
Line 130: Line 133:
     }
     }


TELSTAR supports many different types of frame, including *response frames* that can capture user data and *gateway frames* that provide connectivity to other systems.  
TELSTAR supports many different types of frame, including ''response frames'' that can capture user data and ''gateway frames'' that provide connectivity to other systems.  


It is not necessary to use the http://edit.tf editor, this is just one option.  
It is not necessary to use the http://edit.tf editor, this is just one option.  
Line 142: Line 145:
==== Telstar API ====
==== Telstar API ====


The Telstar API is probably the simplest method of creating and managing pages as the TELSTAR API can be used to retrieve and update frames and configuring routing etc.
The Telstar API, in conjunction with the cross platform Telstar Util software, is probably the simplest method of creating and managing pages as the TELSTAR API can be used to retrieve and update frames and configuring routing etc.


The API is a restful API that uses the GET, PUT, POST and DELETE HTTP methods. This makes it a simple process to add new frames and update existing frames.
The API is a restful API that uses the GET, PUT, POST and DELETE HTTP methods. This makes it a simple process to add new frames and update existing frames from any application.


Data is passed to and from the API in JSON format, making the system very simple to use in any programming language. The whole API could be used without any programming at all by using a command line utility such as CURL.
Data is passed to and from the API in JSON format, making the system very simple to use in any programming language. The whole API could be used without any programming at all by using a command line utility such as CURL.
Line 152: Line 155:
==== Telstar Plugins ====
==== Telstar Plugins ====


Plugins are more complex than using the API as they require knowledge of the Python programming language and some knowledge of the inner workings of Telstar. Plugins can be used to add and update content, however, the main benefit over using the Telstar API is that they can be hooked into some of the major events of the Telstar system. For example a plugin can be added to handle a response frame i.e. a frame where a user enters data such as a form. The Telstar system https://glasstty.com weather page is handled in this way.
Plugins can be used to add and update content, however, the main benefit over using the Telstar API is that plugins can be used to handle response frames i.e. a frame where a user enters data such as a form. The Telstar system https://glasstty.com weather page is handled in this way.


Plugins are reasonably simple to create and deploy within a Telstar container and, in addition to handling response events as described above, they can be utilised during initialisation of the system or as required using the base operating system's scheduler e.g. *cron*.
Plugins are simple to create and deploy within a Telstar container and can be written in any language supported by the platform.


''Further details of the Telstar Plugin framework and how to create them can be found [[telstar_plugins|here]].''
''Further details of the Telstar Plugin framework and how to create them can be found [[telstar_plugins|here]].''

Revision as of 08:35, 3 April 2022

987672554-Pages wide.png

Please note TELSTAR 2.0 Alpha is still under development and subject to change.

TELSTAR is both a a videotex application and a videotex service. Details of the current videotex service can be found at https://glasstty.com.

The TELSTAR videotex system, provides a simple viewdata/videotext platform similar to those that were prevalent during the 1980s such as Prestel (https://en.wikipedia.org/wiki/Prestel).


Content for the TELSTAR system is based on simple json files with support for the popular frame editor available at https://edit.tf. As prviously mentioned, frames can also be created programatically through the use of plug-ins.

The videotex implementation described here can be accessed over the internet using modern *internet modems* in conjunction with historic Viewdata and videotex terminals and home computers of the 1980s. In addition the Telstar Viewdata Client can be used with modern computers (MacOS, Linux, Windows).

TELSTAR is is designed to run in a Docker environment and is supplied as a Docker image (see https://hub.docker.com/repository/docker/johnnewcombe/telstar). The system can be installed with a few simple Docker commands or by using Docker Compose. Telstar can also be run under a Kubernetes environment.

The Docker image described here is a full implementation of TELSTAR application, and whilst the system is comprehensive, it is fairly simple to set up. The system can be extended using a very simple plugin architecture and this can be used to add and update content (frames) as required.

Getting Started

Telstar is implemented using Docker containers and, in addition to the Docker commands detailed below, TELSTAR can be managed using Portainer if desired, see Managing Telstar with Portainer. Examples are also shown for orchestrating the services using both Docker Compose (see Orchestrating Telstar with Docker Compose) and Kubernetes (see Orchestrating Telstar with Kubernetes.

To run Telstar using Docker, a minimum of two Docker images are required.

  • The official Docker image mongodb
  • The Docker image telstar

In addition, a Docker network will need to created to allow the images to communicate, and a Docker volume is desirable to allow for configuration changes and the addition of plugins.

Create the Docker Network and Volumes

The Docker network is used to allow communication between the TELSTAR application and the mongo database. The volumes provide a means to persist configuration data, plugins to be added and the mongo databse itself.

The following commands will create the resources required.

   $ docker network create telstar-network
   $ docker volume create telstar-volume
   $ docker volume create mongo-volume

Pull the Images and Run the Containers

Pull the required images as follows.

   $ docker pull johnnewcombe/telstar
   $ docker pull mongo

Please note that the tag used with the official mongo image may need to be set to the system architecture that is to be used. Please see https://hub.docker.com/_/mongo.//

There are several ways to run the TELSTAR application, this Getting Started example uses simple Docker commands. See Orchestrating Telstar with Docker Compose and Orchestrating Telstar with Kubernetes sections for other examples.

Start the mongodb container and connect it to the previously created network using the command below.

Please note that the '--name' parameter is important as it is used as part of the database connection string from the TELSTAR container.

   $ docker run --name telstar-mongo --network telstar-network -v mongo-volume:/data/db -d -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo

The Docker run command can be used to start the Telstar container and connect it to the previously created network. Note that in the example below the internal port is specified as 6512 and that this is mapped to the same port on the host system. This is also specified at the end of the command to inform TELSTAR that this is the port to listen on.

   $ docker run --rm -d --name telstar-server --network telstar-network -p 6512:6512 -v telstar-volume:/opt/telstar/volume johnnewcombe/telstar server --port=6512

In order to add some example content to the system, the init parameter can be used as in the example below.

   $ docker run --rm --name telstar-server --network telstar-network  johnnewcombe/telstar --init

If the --init switch is used as in the example above, the service will be running with some example content (see Example Content) and can be accessed using a suitable client.

The simplest way to test the system from a desktop machine is to use Telnet. TELSTAR is not a Telnet application but telnet can be used to provide a sanity check e.g.

   $ telnet <ip-of-docker-host> <port-used-for-telstar>

If the system is working, a display similar to the following would be shown.

   Connected to glasstty.com.
   Escape character is '^]'.


   20201128T1316Z
   L             TE
    ST
   Welcome     
   
   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
            Welcome to theTELSTAR
              videotex service.
        You are connected toELIOT.
   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
   ...	

The screen looks a little garbled simply because TELSTAR is a videotex application not a Telnet application.

The Docker environmemnt can be managed using Portainer, see Managing Telstar with Portainer.

2827664245-portainer.png

Pages and Frames

As is typical with interactive videotex systems, pages are numbered from 0 to 999999999 and consist of one or more frames with the suffix a-z, for example the first frame for page 200 would be 200a, the second 200b and so on (see Routing) for more details). These frames are stored within TELSTAR's database as JSON objects (see https://www.json.org/).

The simplest frame that can be viewed on TELSTAR would be defined as follows. This would create a simple information frame with some default content.

   {
     "pid": {
       "page-no": 101,
       "frame-id": "a"
     },
     "visible": true,
   }


The The Telstar API can be used to add this and other frames to the system.

Shown below is a more comple example of a JSON defined frame. With this particular frame, the actual viewdata content has been created using the editor at http://edit.tf, this can be seen in the content.data and content.type keys. The example below is a simple information page with some simple routing (see [[Routing]). Pasting the content.data value into a browser will show the page and allow it to be edited.

   {
     "pid": {
       "page-no": 0,
       "frame-id": "a"
     },
     "visible": true,
     "frame-type": "information",
     "content": {
       "data": "http://edit.tf/#0:QIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQMMKAbNw6dyCTuyZfCBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgKJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEiRAxQR4s6LSgzEEmdUi0otOogkzo0-lNg1JM-cCg8unNYgQIASBBj67OnXllWIMu7pl5dMOndty7uixBoy4dnTQsQIECBAgBIEHfLh2dNCDDuyINmnNl59POzKuQIECBAgQIECBAgQIECBAyQTotemggzoiCvFg1JEWkCnYemnfuw7EGHdkQIECBAgQIASBBp3dMvLdh6ad-7DsQbsvfmgw7siDvlw9NGXkuQIECBAgQM0EKrTkzotOmgkzo0-lNg1JM-cCh79vDDu8oMO7IgQIECAEgQYuvPTuy8-aDdl781wM6EjVKcVBMw9MvPogoctOPLzQIEDRBHn1otKdNizqiCTOjT6U2DUkz5wKlvw5OaxByw6dixAgBIEGHdkQUMPLZpw7cu7ouQIECBAgQIECBAgQIECBAgQIECBA2QR4NSLXg2UFOLSrSYcWmCnWKkWYsQVIsWNBsLEEOHMaIASBBh3ZEHTRlQQ9-zfz54diCHh7ZUGHJ2y7unXllXIECBAgQN0EifMkxINmmCqcsPbLsQYd2RBI37NOTD5QbsvfmuQIECBA4CHQc2TDpT50WogcMGCAScgoOnLTi69MqDpvQdNGnmgQIAaBBzy8u2nHlQd9PTQgqZdmXnvzdO-HllQYd2RBt38sq5AgQOQ0yfHQT40ZYgp2adSLNQSZ0aegTIKkWnUQUIMeLTQIECAokSJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEFeLBqSItJBGn0osODTqIBIM6EQIEFDDnyoFTJywvoECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECA",
       "type": "edit.tf"
     },
     "routing-table": [0,1,11,3,400,5,6,7,800,9,0],
     "cursor": false,
     "author-id": "editf-frame-generator",
     "navmsg-forecolour": "yellow",
     "navmsg-backcolour": "blue",
     "navmsg-highlight": "white"
   }

TELSTAR supports many different types of frame, including response frames that can capture user data and gateway frames that provide connectivity to other systems.

It is not necessary to use the http://edit.tf editor, this is just one option.

Full details of all of the frame types and how to create them is described in the section Frames.

Adding Frames to the System

Frmaes can be added to the system using either the Telstar API or by using a plug-in (see below)

Telstar API

The Telstar API, in conjunction with the cross platform Telstar Util software, is probably the simplest method of creating and managing pages as the TELSTAR API can be used to retrieve and update frames and configuring routing etc.

The API is a restful API that uses the GET, PUT, POST and DELETE HTTP methods. This makes it a simple process to add new frames and update existing frames from any application.

Data is passed to and from the API in JSON format, making the system very simple to use in any programming language. The whole API could be used without any programming at all by using a command line utility such as CURL.

Further details of the Telstar API can be found here.

Telstar Plugins

Plugins can be used to add and update content, however, the main benefit over using the Telstar API is that plugins can be used to handle response frames i.e. a frame where a user enters data such as a form. The Telstar system https://glasstty.com weather page is handled in this way.

Plugins are simple to create and deploy within a Telstar container and can be written in any language supported by the platform.

Further details of the Telstar Plugin framework and how to create them can be found here.

See Also

* Routing
* Frames
* Configuration Options
* Managing Telstar with Portainer
* Orchestrating Telstar with Docker Compose
* Orchestrating Telstar with Kubernetes
* The Telstar API
* Implementing Plugins

Attributions

The website icon is derived from work by Dan Farrimond. This original work and the icon is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported license (https://creativecommons.org/licenses/by-sa/3.0/deed.en).