BASYS nostalgia fest

By Jacek Rużyczka - Self-photographed, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=6762692

BASYS was a newsroom computer system used very widely in the 1980s and 90s by many radio and TV broadcasters: the BBC and ITN in the UK, CNN and NBC in the USA, the ABC in Australia and probably many more. It’s been said that it was the invention of BASYS that made pioneering rolling news channel CNN possible.

It ran on central mini-computers connected to ‘dumb’ terminals in newsrooms like the DEC VT420, a beautiful device that could only display text but did so in gorgeous glowing green, orange or white phosphorescent characters on a cathode ray tube display. Many of those terminals ended up in skips, but to buy one on eBay now will cost you several hundred pounds.

I knew BASYS from its special BBC World Service incarnation, EDiT in Bush House in the early 90s. EDiT had a kind of sandbox area called bush.graffiti to encourage reluctant journos to use this new-fangled technology. Odd threads would be started which people would sign with strange pseudonyms. I still have a stack of printouts from bush.graffiti and I wrote about some of them here: http://www.suppertime.co.uk/blogmywiki/2021/07/the-tower-of-babel/

Another killer feature of BASYS was top-line messaging. This was before anyone had broadband internet at home, the World Wide Web was only just being invented and cell phones were certainly not smart, so the ability to send a quick, instant message to your colleagues was intoxicating. I even met my wife in bush.graffiti.

A while ago I asked for help finding info about BASYS as there’s precious little online, certainly no website devoted to it that I could find. Silence. I tried again recently and, maybe because Twitter’s algorithms have changed, I was positively inundated with info.

I’m still looking for any training manuals, preferably ones used to train journalists how to use it. I’d kind of love to make my MUD look like BASYS when you telnet into it…

Here’s a summary of what I’ve learned so far:

Origins

Destiny

  • When the original BASYS company got into trouble, ITN in London bought the company to protect its investment.
    But I didn’t know that…
  • ITN then sold BASYS to DEC. Yes, the computer company that made the mini-computers and terminals the system ran on.
  • DEC then sold it to Avid.
  • BASYS then was ported to Red Hat Linux and lived on for many years as Avid iNews. I checked out some technical manuals on iNews, and it’s really very similar to BASYS indeed, albeit running on Linux servers and at the client end on a Windows app with a GUI featuring buttons.

Hardware

  • @IsItBroke says BASYS at BBC TV new ran on ‘PDP11/54s with IBM ATs each with several serial port cards with VT100 terminals hanging off them (or could be printers or AutoScript promoters which behaves like printers) – these “Terminal Servers” connected to the PDPs over 10Base2 Ethernet.’
  • Originally the BBC’s Basys ran on a pair of Onyx computers but by the time it was being implemented at BBC TVC it was on DEC VAX superminicomputers – possibly 6100s. EDiT at Bush ran on three Vax 6200s. (via @kingsp10)

User interface

  • @mattjones0111 reminded me that although BASYS’s UI was text-only, it was quick to use with its keystrokes and keyboard shortcuts. It allowed horizontal split screens, copy-paste, top-line messaging. Great example of a highly focused UI.

Remote access

  • If you had a modem and maybe an acoustic coupler, you could dial into Basys systems when you were on the road to file your copy and access programme running orders. NBC journalists used Tandy / Radio Shack Model 100 portable computers, and one of my Twitter correspondents @Stephen_Neal used his Psion 5 to dial into Basys at BBC East in 1996.
  • Stephen also writes ‘I used BASYS at the BBC in Norwich and Cambridge 1995-1997. In Norwich it was based around serial terminals, but the new Cambridge newsroom had IP-connected PCs running terminal software. You could connect to the London BASYS system to look at Network running orders.’
  • @mattjones0111 wrote ‘I was a traffic reporter and based at a police motorway control room near Redhill. I had an ISDN line; one channel would connect to BASYS, the other would connect my mic to the studio in Guildford. I also had PSTN dial-up access which I could use from home.’

Trivia

  • It was hilariously easy to send a top-line message the wrong person by getting their username wrong. eg ‘[myeditor] is an idiot, sent to [myeditor]‘ (via @terrystiastny and others).
  • In Bush House, home of the BBC World Service, you could connect to the training system by typing ‘connect train’. The sysadmins changed someone’s password to ‘hacker’ for doing this too often.
  • The BBC World Service Bush House version of Basys was called EDiT.
  • Bush House usernames had 3 letters of surname, a number & 3 letter department code. My own was boo1opr (operations). Amusing ones were rub1pub (publicity) and pis1por (Portuguese for Africa).
  • The Basys console command “msgclean” which could be used to print off every top-line message sent on the Basys system (via @kingsp10)
  • @resourcefulco wrote ‘I was graphic designer on Breakfast Time at BBC Lime Grove, using a Quantel Paintbox. Bored, we tried to link it up to the main PDP-11, and one of the amazing BBC technicians came up with a tiny box that let us do primitive 3-D wire graphics (and slowed down the news autocue)…’
  • Up to v13 of Basys if you took a story which had just been saved in 2 column mode and typed CMD get old, then it would kill all 10 sessions on the CCU to which you were connected. Bug found in v3 and finally fixed in v14 (via @kingsp10)
  • @IsItBroke reported: ‘You could a trick routing a serial port from one Terminal Server to another; it was referred to as a “Permanent Virtual Connection” which we used for router control panels and the like; over the BASYS IP network.’

 

Posted in BBC, computers, media, nostalgia, radio, TV | Tagged , , , | 4 Comments

Bangle.js 2 hackable smartwatch – first impressions

The new version of the Bangle.js watch caught my eye on Kickstarter as the price seemed very reasonable. It’s a hackable smartwatch with lots of features: accelerometer, magnetometer, barometer, thermometer, colour LCD display, Bluetooth, heart rate sensor and GPS plus a pretty long battery life.

bangle.js 2 unboxing

It arrived yesterday, and I’ve been having a play.

First impressions were good, the packaging is lovely and the set-up card had enough to get me going. I found the UI a bit confusing but it makes sense as soon as you’ve actually read the instructions. You scroll up and down menus by moving your finger up and down the screen, then select with a button press. It also took me a while to figure out that the same length button press unlocks the phone and also then takes you to the main menu when you press it again.

It’s no Apple Watch, but it’s a fraction of the price – and readily hackable! The display looks amazing in direct light or sunlight. In dimmer lighting conditions, the backlight is slightly uneven with a faint shadow across the lower third of the screen, but it’s only noticeable in ‘light’ mode with black text on a white background. Put the display into ‘dark mode’ (which I prefer) or view in direct light and it’s not a problem at all.

Everything is loaded onto the phone via Bluetooth from a compliant web-browser like Chrome. There are already a few apps available here https://banglejs.com/apps/ and of course you can open the source code for each app in GitHub and tinker with it.

What really impressed me straight away was how quickly you can put code on the watch and test run it. The card in the box has a demo altitude program. I typed it into the IDE, clicked the ‘Send to Espruino’ icon, paired the watch via Bluetooth, selected RAM to flash it to, and my demo code was running on the real watch in seconds. Very cool.

Here’s a quick demo I knocked up to show the temperature in a different font:

Bangle.setBarometerPower(1, "app");
require("FontTeletext10x18Ascii").add(Graphics);
Bangle.on('pressure',data => {
  g.reset().clearRect(Bangle.appRect);
  g.setFont("Teletext10x18Ascii").setFontAlign(0,0);
  g.drawString("Temp (c)", 88, 70);
  g.setFont("Teletext10x18Ascii",3).setFontAlign(0,0);
  g.drawString(data.temperature.toFixed(1), 88, 105);
});
Bangle.loadWidgets();
Bangle.drawWidgets();

montage of watch apps

The watch charges with a magnetic USB cable, but that’s all USB is used for – charging. There’s a sensible warning not to leave the USB cable plugged in but unattached to the watch, as it’s liable to attract a metal object and short!

A few niggles or wrinkles:

  • The altimeter needs calibrating in code, I really don’t think my lounge is 70m below sea level!
  • There’s no audible alarm, only a vibrate motor which is way too subtle to wake me up. I’ll still be using my phone to make sure I wake up in time for work!
  • The GPS receiver takes a very, very long time to get any data, at least on first use. In fact I’ve not managed to get it to work at all yet. 15 mins on a windowsill and a 40 minute outdoors walk were not enough. I think I’d have traded the GPS feature for a piezo speaker, but future firmware updates might improve this.

Overall I’m pleased with my purchase. The developer is very responsive on the forum and I look forward to modding existing apps, adding new ones as they appear as well as writing my own. Now, I really must get my classic Mac Chicago font working on this…

Chicago font on Bangle.JS watch

Posted in computers | Tagged , , , , | Leave a comment

Ceefax from an old Raspberry Pi

Got an old Raspberry Pi? Nostalgic for the golden age of teletext? Why not make your own in-house teletext server?

For those who may be unaware, teletext was a service common in European (PAL TV standard) countries that transmitted news and other information on analogue TV by sending digital signals in unused lines at the top of the TV screen that were normally unseen. The BBC’s teletext service was called Ceefax, the ITV had Oracle. Pre-smartphones and household broadband, both were hugely popular as a source of breaking news, sports results, booking holidays and watching programmes with subtitles (closed captions). Most teletext services are long-gone, but enthusiasts are doing digital archaeology to recover old pages from off-air S-VHS recordings, as well as creating new teletext services you access over the internet.

Here’s what you need:

  • Any old Pi, I used a model B, I’d recommend a ‘lite’ version of Raspberry Pi OS with no desktop and I added a USB wifi dongle – not needed on newer models
  • A phono/RCA lead for video out
  • Optional mini jack to phono lead for audio
  • A TV with a teletext decoder and a composite video AV input
  • Some internet

The TV I used is a cheap flat-screen one I bought in a supermarket just a few years ago, so I was surprised to discover it had a teletext decoder. The decoder has never been used, obviously, as analogue TV transmissions ended in the UK before I bought it and no Freeview DTV services broadcast old-fashioned steam teletext.

Ceefax page 100

The software you need to install is called vbit2 – head on over to https://github.com/peterkvt80/vbit2/wiki where you’ll find some instructions. I followed the first video guide linked from there.

I had problems getting analogue composite PAL video out because I forgot to unplug the HDMI cable to force it. Note that some models of Pi have the composite video on the same jack as the analogue audio out, so if your Pi doesn’t have that phono/RCA socket for video, you’ll need a lead that breaks out one of those extra long 2.5mm 4 pole jack plugs into something you can plug into your TV.

I installed Ceefax in the configuration settings in vbit2. It’s a good idea to set it to run at boot and update – note that to tick the relevant boxes you have to press the space bar. Took me ages to figure that out!

The TV I used has a USB socket for a basic media player mode and I found that gave enough juice to power my Pi, which saves another mains socket and takes the Raspberry Pi power supply out of the equation.

When the teletext service starts you should see the text on the screen jump up a bit. I think this is because it’s using the top line of the video to output the teletext lines and it needs to move it to the top lines that are normally unseen on a composite video out.

I fancied some music while browsing teletext, so I also installed mpc / mpd
sudo apt-get install mpc mpd

and added a radio station
mpc add http://icecast.radiofrance.fr/fip-midfi.mp3

and made it play – this seems to stick and play when rebooted which is nice.
mpc play 1

Connect the audio and composite video to your TV, select the appropriate AV input – and press the teletext button!

Ceefax weather map

The Ceefax pages are created by volunteer-coded software from a mixture of sources, including BBC News web pages and the Met Office for the weather. It’s great fun being able to browse up-to-date news stories by pressing numbers on a remote control like in the old days, and makes a welcome change from Twitter doomscrolling. If anything it’s slightly too fast, but even so it could make a useful history project showing students how we used to get up-to-date news and sports results before smartphones and widespread broadband internet.

Raspberry Pi generating teletext

You can view the new Ceefax pages in your browser on Nathan Dane’s pages here https://www.nathanmediaservices.co.uk/teletext-viewer/ and find out a bit more about how they work. Kudos also to Peter Kwan, designer of the first vbit hardware and software.

Posted in computers, nostalgia, Raspberry Pi | Tagged , , | 2 Comments

micro:bit pulse oximeter

Around the same time I bought a cheap eCO2 sensor, I bought a MAX30100 pulse oximeter board for a few quid. I never got it working, partly because the protocol for making it work is very complex (way more complex than an air quality sensor), partly because I didn’t know what I was doing, but also (I now discover) because I was using a faulty breakout board.

Flushed with the success of getting the eCO2 sensor working, I decided I’d have a crack at getting the pulse oximeter working in Python on a BBC micro:bit. And I failed. For now, at least. I even found a MicroPython library for the MAX30100 but it doesn’t work on a micro:bit, and the protocol is too complex for me to figure out just now. I may return to it one day.

first version of the pulse oximeter

first version of my micro:bit pulse oximeter without an OLED display

There are, of course, Arduino drivers for the MAX30100, and perhaps a little known fact is that you can program the micro:bit using the Arduino IDE. It’s not, I warn you, very easy, and I’m not offering a step-by-step guide, but I’ll explain how you can build your own and offer a HEX file you should be able to flash direct on to a micro:bit (V2 only at the moment, though I think you could compile your own for a V1). You’ll need a micro:bit breakout board that exposes the i2c pins 19 and 20, some jumper wires, a breadboard, a MAX30100 pulse oximeter, and an optional 128×64 OLED display with an i2c interface.

Wiring could not be simpler as you connect the display and sensor the same way: GND pins to micro:bit GND, VCC to micro:bit 3v, SCLs to micro:bit SCL pin 19 and SDAs to micro:bit SDA pin 20. Flash this hex file (right-click and save link or target) to the micro:bit, you may need to press reset on the back of the micro:bit and the LED on the oximeter should light up. Put your thumb on it, and off you go. It also prints readings to the serial port, so you can do some data logging over USB on a computer as well, just open up a terminal app or web browser like the Google Chromelabs one or the micro:bit Python editor.

One note of caution: if you use my HEX file, the i2c addresses of the display and sensor are hard-coded, assuming the OLED display is 0x3C (decimal 60) and the sensor is 0×57 (decimal 87). If yours have different addresses, you’ll need to modify the source code and recompile it.

How did I make it?

Why am I asking myself questions? Because it’s a useful, if jaded, rhetorical device.

Urghh. I can’t quite face doing a tutorial on using the Arduino IDE to program a micro:bit just at the moment, maybe one day. Partly because I have it all set up and it works and I’m not entirely sure how I did it. I find that with the Arduino IDE. If it works, you don’t mess with it. I mean I still have a netbook with WindowsXP on it partly because for a long time it was the only machine I could reliably program Arduinos on.

So, in short… I added the Oxullo library for the MAX30100 sensor, and the Adafruit OLED libraries. I set the target machine to the V2 BBC micro:bit which may have involved installing something… urghh… can’t quite remember, I did it ages ago when I was building my micro:bit Arduboy clone.

I added some bits to the sample MAX30100 code to make the OLED display work, and amazingly, it all seems to work. You can read the source code here.

For amusement only

I wouldn’t use this for medical purposes, but it would be interesting to compare it with an inexpensive commercial pulse oximeter to see how it compares.

Posted in computers, microbit | Tagged , , , , , | 2 Comments

CCS811 indoor air quality sensor on a micro:bit

I was clearing out my toolbox of gubbins the other day and discovered an inexpensive CCS811 air quality sensor I’d bought ages ago and never done anything with. These are small sensors that measure Volatile Organic Compounds (VOCs) and can be used to give an approximation of CO2 levels in the air. They connect to microcontrollers using an I2C interface. You can read the data sheet here.

air quality sensor and BBC micro:bit

There are libraries to run them with Arduinos, of course, and here’s a port to MicroPython: https://github.com/Notthemarsian/CCS811. So should be easy to get it working with a BBC micro:bit, no? Well I had to do a bit of tweaking, but I think I have it working.

The micro:bit’s version of MicroPython lacks the readfrom_mem and writeto_mem instructions that this code relies on. Luckily I found this excellent blog post which explains some ways round this.

The other difference is that on the micro:bit, the I2C clock and data pins are fixed on pins 19 and 20, so there’s no need to pass the pins to the supporting module.

I’ve also assumed that the I2C address of the sensor is 90. I discovered this address by just running a program like this on the micro:bit with the sensor connected.

i2c.init()
print(i2c.scan())

I’ve probably committed some hideous crimes against Python, but by modifying the Notthemarsian code, I seem to have it working.

Here’s what I used:

  • a CCS811 sensor with some pins soldered on
  • a BBC micro:bit (V1 or V2) and a micro USB lead to connect to a computer
  • a breakout board that exposes the I2C pins – I used a Monk Makes one, but you could also use ones by Adafruit, Kitronik or Pimoroni, just make sure they have the I2C pins broken out as not all do.
  • jumper leads to attach the sensor to the breakout board – I used 4 female to female jumpers
  • a way of attaching the sensor’s WAK (wake) pin the GND on the micro:bit – I used a female to male jumper wire and a crocodile clip lead, but there will be far more elegant ways than this
  • A computer with the micro:bit Python editor in a Chrome or Edge browser window, like https://python.microbit.org/ or https://python.microbit.org/v/alpha

Air quality sensor connected to a BBC micro:bit

Connect the pins like this:

sensor  micro:bit
-----------------
VCC     3v
GND     GND
SCL     SCL (pin 19)
SDA     SDA (pin 20)
WAK     GND
INT     not connected
RST     not connected
ADD     not connected

Then flash this hex file on to your micro:bit (right-click and save link or save target). If you want to examine the contents, you can just drag the HEX file into an online micro:bit Python editor. You’ll see two files, main.py and the module CCS811.py. You can also add those files separately, but it’s easier just to use the HEX which you can flash straight onto a micro:bit, or drop onto the online Python editors.

Live air quality data scrolling in the serial console in the alpha micro:bit Python editor

Then you need to open a serial console. Make sure you’re using Chrome or Edge. In the current regular Python editor, click on Connect and then Open Serial. In the Alpha editor, which has a serial console in the same screen as the code editor, click Connect and Show serial. You could actually use any serial console to read the data, such at the Chromelabs online one.

You should see data from the sensor scrolling in the screen, once per second. Huff and puff on it, and you’ll see the CO2 number rise. I waved a bottle of hand sanitiser at it, and it went crazy!

Let me know if you find this useful and get it to work. What would you use it for? How could you make use of the data?

Add an OLED display

microbit air quality monitor with OLED display

This version of the project adds an OLED display, which makes the micro:bit air quality sensor self-contained. I left it running all day and found the eCO2 levels rose from around 1400ppm at lunchtime to over 5000 by 6pm. Opening a door to the outside had an immediate effect, the levels dropping very rapidly back to around 1500ppm, which does suggest simple ventilation like opening a door or window to the outside has a dramatic effect on air quality.

In addition to the micro:bit, breakout board and CCS811 sensor, I used a standard cheap 128×64 I2C OLED display, a tiny breadboard and a few jumper wires. The display and sensor should be available for just a few pounds or dollars from the usual suppliers. I just daisy-chained the OLED onto the same I2C pins as the air quality sensor.

This version of the project also shows how it’s possible to attach more than one I2C peripheral to a micro:bit. The code assumes the OLED display has an I2C address of 60 (0x3C) which luckily doesn’t clash with my air quality sensor’s address of 90 (0x5A). If you make this and have problems, do check the I2C addresses of your devices and tweak the Python code accordingly.

You can download the HEX file from here (right click and save link or target). The HEX contains all the Python modules needed to make the OLED display and air quality sensor work. Plug your micro:bit into your computer and drag and drop the HEX direct on to the MICROBIT drive. You can also drag and drop the HEX file on to the regular or alpha Python editors so you can examine and edit the Python code.

Like the previous project, this one also prints data to a serial console over USB, so you can monitor it on a computer as well. It might be neat to make this also send data by radio to another micro:bit which can log data, work out averages over longer time periods, maximums and minimums etc.

Simple air quality data logging

If you want to log the data in a really easy way, you can be a bit sneaky and use this microPython program with the MakeCode data graphing tool. Flash either version of the program, with or without the OLED display, to your micro:bit and modify the serial print lines so they look like this:

            print('eCO2:%d' % (s.eCO2))
            print('TVOC:%d' % (s.tVOC))

You can then connect the micro:bit to a computer, open a new MakeCode project and click on ‘show console Device’ under the simulator when it appears. You can then view data in real time, and also download it as a CSV file you can import into a spreadsheet like Excel:

Logging data in MakeCode

CO2 readings in an Excel chart

Buy a ready made air quality sensor

If you don’t want to mess around with soldering, breadboards, jumper wires and fiddling with software, there are several ready-made micro:bit accessories that you can just attach to a micro:bit.

Monk Makes air quality kit for micro:bitThe Monk Makes Air Quality Kit has an eCO2 sensor and comes with everything you need to get going including a loudspeaker, and an excellent book of instructions and sample projects. This also lets you write code for it in MakeCode blocks as well as Python, making it accessible for younger students. This is a well-designed and tested product with great attention to detail in its packaging and documentation.

Kitronik air quality board for micro:bitThe Kitronik Air Quality and Environmental Board for micro:bit also includes a built-in OLED display and a real time clock for data logging. I’ve not tested this product but it can be programmed using an extension for MakeCode blocks and as well as eCO2 it measures temperature, pressure, and humidity. The MakeCode extension for their OLED display is excellent, so I have high hopes that the software that supports this very full-featured accessory is as good.

Posted in microbit | Tagged , , , , , | 5 Comments