WEBVTT

00:00.000 --> 00:28.800
All right. Let's get started. My name is Hans. I'm a programmer, a hotber tanker, if you will,

00:28.800 --> 00:38.400
and the retro computing enthusiast. And recently, someone gave me this beautiful 1980s

00:38.400 --> 00:45.200
Rafi terminal, which is a lithium-text terminal. It didn't have a keyboard, but the alternative

00:45.200 --> 00:52.960
would have been scrappy art, so I kind of saved it from that. And motivated by having that,

00:52.960 --> 01:01.760
I came up with a plan on the idea to recreate the whole built-in text experience using the

01:01.760 --> 01:09.760
web browser, if you will. So what is built-in text? Many of you will not know. It is kind of a public

01:09.760 --> 01:17.440
data system, a predecessor of the internet, which was launched in Germany in 1983. It was run by the

01:17.440 --> 01:24.080
German, or the predecessor of German telecom called Dr. Bundespost. And back then, everything was totally

01:24.080 --> 01:36.160
regulated. So of course, you had to have a permission to connect your software to the public network.

01:37.440 --> 01:44.080
So everything was very tightly controlled. He also didn't really own the decoder, the modem hardware

01:44.160 --> 01:51.040
that you used to enter the system. It was rented by the state to you. The modem even included the

01:51.040 --> 02:00.000
user ID that you would use in the video text system. It was meant for like normal people,

02:01.120 --> 02:10.080
sitting on their couches, browsing information, booking, travel, maybe buying stuff online,

02:11.040 --> 02:18.640
and also sending messages. So it was kind of a end-user system. And just to set the stage where we

02:18.640 --> 02:25.120
are in history, I mean, we are like at the beginning of the home computer illusion. So there was

02:25.120 --> 02:35.760
Apple II IBM, C64 that was kind of what we had at that point in time. So I mean, it wasn't without

02:36.160 --> 02:41.280
predecessor. So some of you may know plateau, but there was also computer in the U.S. which was

02:41.280 --> 02:52.880
kind of a similar system, not state run, but similar. And Richard text directly is directly related

02:52.880 --> 03:01.840
to Prestler, which is a UK system, a similar kind of technical nature. So your terminal, as I said,

03:01.840 --> 03:09.920
was the TV, that time the TV was the only screen in your home typically. So you wouldn't have

03:10.720 --> 03:16.160
normally have a computer, and then we have a telephone, of course, the symbolizing the phone line

03:16.160 --> 03:26.400
and the remote control would be your input. And then you would rent this beautiful little modem

03:26.400 --> 03:34.160
from the Deutsche Bundespost, which could do 1200 to 75 pods. So it would receive at 1200

03:34.160 --> 03:40.720
and send at 75, the idea being that you would really just be a consumer and not a producer of

03:40.720 --> 03:48.640
content. So you didn't need a big upstream 1200 was pretty slow. 75 really was just for typing

03:48.640 --> 03:56.800
and stuff. And then the server side of things was based on mainframe technology. It is

03:56.800 --> 04:02.160
difficult at this point in time to figure out what exactly constituted the the built-in text

04:02.160 --> 04:10.480
system. So this is a similar vintage, Z-Men's mainframe. Some say the software was written

04:11.280 --> 04:17.360
in the UK and then ported to to Z-Men's machines, others say, well, it was all home-grown.

04:18.640 --> 04:26.640
Actually, we don't really know. So my plan is to reproduce all of that. So instead of this,

04:26.640 --> 04:34.640
of course we have a web browser, we have a web socket for this, and we have some software written

04:34.640 --> 04:41.040
in common list for that. So my first step, and I mentioned it briefly, was I needed to recreate

04:41.040 --> 04:49.120
the keyboard. And this was really, I didn't have a keyboard at first, so I found someone who could

04:49.120 --> 04:56.160
borrow me one. And what you see here is a creator's keyboard, which is for people who create

04:56.160 --> 05:02.960
pigeon text pages. So it has a special keys, for example, for selecting a color of selecting a

05:02.960 --> 05:09.920
character set. It also has this neat little cheat sheet that tells you what graphic characters

05:10.000 --> 05:16.800
are on what letters here, and so on and forth. So a typical and user terminal would be much smaller,

05:16.800 --> 05:27.120
but this is really the full thing. So what I did is I wrote an XML description of this keyboard.

05:28.960 --> 05:34.720
I mean, you know, Jason, so XML is pretty similar, if you don't know it. And then,

05:35.280 --> 05:47.760
and then I went full XML. So XSLT is my favorite programming language, I would say.

05:51.040 --> 05:57.600
I mean, it's really good. It's really good, not just because it serves this purpose well,

05:58.480 --> 06:04.320
but also because it is really homo-economic, which is something that the list guys always tell you

06:04.320 --> 06:10.800
well, it's homo-economic, but it's not true, because they don't use this as the surface syntax

06:10.800 --> 06:18.240
and XSLT does. So we can, and this is why this program, this is a part of an XSLT program,

06:18.240 --> 06:26.880
is XML, because it follows all the rules of XML. And, well, this is really just the header,

06:26.880 --> 06:34.720
and a new feature in XSLT is accumulators that allow you to stream without really relating to

06:34.720 --> 06:40.960
using mutation for that. So what I did is I met from this description file that I showed in the

06:40.960 --> 06:46.960
beginning, which has a key entry for like the lock on the top left and the key codes and something

06:46.960 --> 06:54.320
like spaces here to rules that match these elements. Like here, we have a space with a

06:54.320 --> 07:01.280
has built busy let attribute this one, and that would create this piece of SVG. And likewise,

07:01.280 --> 07:11.120
we have a key with an LED. I would create that, that piece of SVG code. And, well, of course,

07:11.120 --> 07:17.360
you can, you can access variables or attributes from your input elements and the accumulators

07:17.360 --> 07:22.720
that are defined here. So it's a very good mapping language, and I can recommend it to everybody.

07:24.480 --> 07:31.280
And that's how it looks like. So this is the SVG that at this piece of art creates.

07:33.760 --> 07:41.920
The next thing that I needed to do was to extract the font from the terminal, because, of course,

07:41.920 --> 07:50.960
they have fancy special characters, and I wanted the emulation of that to be as faithful as possible.

07:51.920 --> 07:59.040
I pondered whether I wanted to look at the ROMs and then try to decode how the characters

07:59.040 --> 08:07.120
are represented in the ROM, but then went for this very straightforward scan converter, HMI,

08:07.120 --> 08:15.280
USB solution so that I have an image of my character set like this, and then write a bit of,

08:15.360 --> 08:22.000
well, this is actually the code that generates these pages. And then, well, then what?

08:22.000 --> 08:29.200
So I kind of thought it shouldn't be too hard to make this into individual images for each

08:29.200 --> 08:34.000
character for each glyph, but I didn't really know how, so I asked chatchipiti.

08:34.960 --> 08:44.640
You know, I asked it, and it's suggested I need to do this, yes, okay,

08:45.840 --> 08:53.360
but how can I somehow avoid dealing with the details of that, and it's suggested this

08:54.160 --> 09:03.680
kind of specialized font creating programs. I said, well, there was gimp on the bottom, so I tried

09:03.680 --> 09:11.440
gimp, I cannot use it, I don't know why, I just don't manage to, and then I asked it to,

09:12.480 --> 09:19.440
to write me a script, to help me do that. And it was really, I mean, all of you know,

09:19.440 --> 09:25.360
that is kind of scary, and fascinating to work with LLMs. This was scary, and fascinating,

09:25.920 --> 09:31.520
because I told it, well, what me through the script, and then there was a dialogue of how,

09:31.600 --> 09:39.520
what I wanted to do, I wanted a grid, so that I can select my glyphs, and then write that to files.

09:40.560 --> 09:47.280
And it created something for me, which I tuned a little bit, so like parameters here and there,

09:47.280 --> 09:54.240
and make this happen, but as you can see, I have these lines here, and then I can just close the

09:54.240 --> 10:00.400
window and it saves all the other things to individual files that was just a fun experience.

10:02.320 --> 10:11.440
So, Act 3, the emulator, the actual, like, display of the data stream on the channel screen.

10:12.240 --> 10:17.200
And that was, I mean, this specification, I wanted to carry it here, I couldn't because it's to heavy,

10:17.200 --> 10:27.680
it's a book that specifies how the encoding for this channel works, and most of you are many of

10:27.760 --> 10:33.040
you will know ANSI terminals or other terminals, so you have control codes, and you can position your

10:33.040 --> 10:43.280
cursor. This is on a different level of crazy. The craziness is not just that it is very,

10:43.280 --> 10:48.640
like, a detailed oriented, and you need to save all the bits, and you don't have a lot of bandwidth,

10:48.640 --> 10:54.800
so you need to be very, very efficient with you, and coding it is also from the perspective of

10:54.880 --> 11:01.120
the language that they use, it is really annoying, because with your standard computer knowledge,

11:01.120 --> 11:06.560
it is difficult to understand. The LSet is involved in two columns two to seven of the eight

11:06.560 --> 11:13.840
bit code, yes, well, everything is in pages and columns and rows, it's really, I think it's

11:13.840 --> 11:20.480
madness. So, yes, but it is, in the end, it is just straightforward, if then, if then, if then,

11:20.640 --> 11:27.920
case, case, case, case, case, case, and then a little bit of drawing, and a little bit of copying,

11:27.920 --> 11:34.080
and that was just, I mean, that was not difficult, and the kind of striking thing for me was,

11:34.480 --> 11:41.280
I didn't really need to optimize anything, the browser is, or the V8 engine, or the browser's

11:41.280 --> 11:46.880
JavaScript engine is so fast that I can just take my bits and put them there, color them, and it's

11:46.880 --> 11:57.840
done. So, actually, I have a good subset of the standard implemented, so this is really, of course,

11:57.840 --> 12:03.520
something that you need to implement the user-defined characters, where you can say, okay,

12:03.520 --> 12:10.480
this character has these bits and that, and this is, well, one of the pages that I have. Now,

12:11.040 --> 12:18.320
at four, the mainframe side of things, I happen to know one of the people that

12:19.360 --> 12:27.600
that author these pages, the CCC pages back in the 80s, so I had these Victor,

12:29.200 --> 12:36.560
serious disks, which are difficult to read, but I managed, and I found the form of specification

12:36.640 --> 12:45.280
for the files that are used to upload files to the central system. So, what I did is I took that

12:45.280 --> 12:54.960
specification, I copied and pasted those definitions into a text file, then wrote a little bit of

12:54.960 --> 13:06.000
communist code to parse that text file into field definition instances, and then this becomes a

13:06.000 --> 13:13.520
macro defined BTL class, BTL is this upload format that defines a class based on the file that we read here,

13:14.960 --> 13:23.200
and also an initializer that receives an input buffer with the data, and that sets all the fields

13:23.280 --> 13:33.440
to the respective data values, with the goal that, or, and so this is, of course, this, some of

13:33.440 --> 13:40.640
you know come in those who don't, here's some pattern matching and come in on the code level,

13:40.640 --> 13:48.800
so generic functions can specialize on any of the arguments, so I'm specializing on the second argument

13:49.440 --> 13:57.040
here, and if that is a, a symbol called bin, then this code is executed, if, if that second argument

13:57.040 --> 14:03.280
is the symbol bit, then this will be called, so bit manipulation and all kind of all kind of

14:03.280 --> 14:14.640
crazy stuff, so with the result that now in my code that parses the file, I can use these identifiers,

14:14.720 --> 14:18.960
which are directly from the documentation, and I, I happen to like that, so I can look at the

14:18.960 --> 14:25.360
documentation, okay, this field means that, and then kind of, kind of write some code to to do that,

14:25.360 --> 14:38.240
so a little bit of a demo, I hope this, the demo gods are in my favor, but it doesn't look too bad,

14:38.320 --> 14:50.320
so I'm, I'm going to reload the page, if I can, so I'm going to reload the page, and you will notice

14:50.320 --> 14:56.800
that there is a little bit of a time gap here, so this is displayed, and then the whole

14:56.800 --> 15:04.240
pages displayed, this is because the page is assembled from components, and one of the things that

15:04.240 --> 15:11.120
you had to do as a content creator is create these components, like pages that are referenced,

15:11.120 --> 15:16.240
so that the user defined characters would be loaded only once, and then you, then you loaded the page,

15:16.240 --> 15:25.040
and, and it would be faster, so now this is one of the, one of the, or this is the home page of

15:25.120 --> 15:35.120
the Chaos Computer Club in the, in 1987, and here's our keyboard, let's, let's go here, so this is

15:36.080 --> 15:44.000
a page with the local units of the Chaos Computer Club in the, in the 1980s, and that was my,

15:44.000 --> 15:51.040
my home base, across from my school back then, so there's a little bit of history for me in there,

15:51.040 --> 16:02.960
so yeah, thank you to my companies, bundling this, this talk, and thank you for listening.

16:21.360 --> 16:30.880
I don't know, yeah, so, so is this similar to Dutch teletix, I don't know, there,

16:30.880 --> 16:37.120
there also has been video text, which is a broadcast only way of sending, sending program information

16:37.120 --> 16:42.000
in the TV stream, but this is phone base, I don't know whether teletix is phone base, I don't know.

16:42.080 --> 16:48.320
Just as a supplement to that, teletix is the name main grid, as well, and it was a broadcast.

16:48.320 --> 16:54.480
It's the broadcast, so yeah, so yeah, yeah, you were first.

16:54.480 --> 17:02.160
Yeah, you said that you could make some orders on this system, so is it possible that you can

17:02.160 --> 17:08.320
harass applications on the main thing that you're seeing, that process the orders and do stuff like that?

17:08.320 --> 17:15.920
So is it, yeah, so the question is, could you, I said you could all

17:15.920 --> 17:22.160
stuff on there, so the question is, could you connect external systems to the, to the built-in text system?

17:22.160 --> 17:29.680
Yes, you could, so you could have what was called an external, external computer that was

17:29.680 --> 17:35.440
connected to the central system through dot xp, which is x25, and then there would be a hand over

17:35.440 --> 17:41.760
page where you basically your terminal, your user terminal would be given to that external machine,

17:41.760 --> 17:47.840
they would do the user interface processing and return back to the built-in text system as well.

17:48.880 --> 17:53.120
The one thing that I wanted to mention that I failed to mention is that there was also a payment

17:53.280 --> 17:58.720
system, so you could have paid pages, you could have a page that displayed some information,

17:58.720 --> 18:05.440
it attached a price to that, and that would be deduced from your phone bill, which was what then

18:06.240 --> 18:15.120
enabled the CME famous hack when the CCC called its own page for 10 marks

18:16.560 --> 18:20.080
13,000 times and had a creative big phone bill for a bank.

18:24.080 --> 18:34.320
Hmm? I believe they are pretty separate, but, so is built-in text related to many

18:34.320 --> 18:41.200
tell, I believe they are kind of the same vintage and prestal was very influential, the UK

18:41.200 --> 18:46.560
predecessor of these systems, but I think there was no direct connection between the two.

18:53.120 --> 18:58.160
Thank you very much.

