Sunday 27 October 2024

Awesome AI Art

Musing

AI in art is a contentious subject.

Does art require human inspiration or can AI reasonably be expected to produce quality pieces to rival human artists?
Certainly AI can produce some art which is indistinguishable from human efforts.  AI art isn't inspired.

Do we need to understand the artists motivation, thoughts or inspiration to appreciate art?
Often the answer is yes, artworks are considered good because of the message they are designed to communicate: highlighting injustice, portraying emotions, recording history, showcasing beauty etc.
AI can only do this incidently.

What about art which doesn't have a higher purpose, a flower, a landscape, a portrait?
AI can do this very well.

If you cannot tell if an artist is human or AI, is there any difference?
Probably not.  You don't need a back story to like art.

AI animates art

I think AI bringing art works to life is wonderful.
Various tools which create videos from a users specification providing amazing results are already available.  Sora and invideo allow you to create videos based on ideas you specify, there are some stunning videos produced by them.

Invideo in particular seems to be able to "bring artworks to life".
However, as I look there don't actually seem to be many examples out there.  I expect it is actually very difficult to get them to produce something good with a "wow" factor to be worth sharing widely.

Examples

Examples are generally shared on TikTok, Insta, Facebook or Youtube.  There are often many different copies floating around in different media.   I have included some from Youtube, as it is easiest for me to provide links.
























Tuesday 22 October 2024

My (Computer) History 4

1979

During university summer "long vacation" I worked at BAC in Stevenage.  One summer I spent working on a computer ground system for Rapier ground-to-air missiles.



I found that the first system control programs were stored in patterns of little magnets stored in grids - perhaps the most primitive storage imaginable.

We were writing an Operating System for a more advanced version of a ground station which the company had built.  I believe I wrote some parts of the disk operating system, for instance a command to copy files.  I dont remember if it was written in assembler but I expect so as a compiler or cross-compiler was probably not available.

1980

IBM System/370 : APL : PERT

When I returned to work full-time at BAe in Stevenage after Univeristy, the project I spent most time on was a project scheduling package.
At the time project scheduling was traditionally a manual procedure.  An approach called PERT (Project Evaluation and Review Technique) allowed you to specify projects as a connected network of tasks and allowed you to identify the "critical path" and work out scheduled dates for project tasks.


A talented Electronics Engineer called Geoff Hoyle, had developed (or acquired) a program to do this analysis for his team and the company wanted to expand it for other departments and link the projects together into a company program.  It was a very forward-thinking but hopelessly over-ambitious scheme as most departments didn't have anyone who could use a computer, but I was unlucky enough to be allocated to it.

A big technical drawback was the program was written in an esoteric language called APL (A Programming Language!).  APL is a wonderful but completely incomprehensible very high level language which works on vectors and matrices. Here is an example program which works out the determinant of a matrix.

It uses a lot of pwerful single character opoerators and a special typewriter keyboard is required to write programs. It was available to use from terminals on an IBM mainframe.


I was able to make the system functionality work technically.  As network analysis was already working I had to add a user interface, suitable for non-computer people to use, allowing them to enter tasks, carry out critical path analysis and provide a report suite.
We had "donors" and "receivers" to link tasks to other projects and these needed careful maintenance.
The system actually needed a Program Office to manage the overall picture but the expectation was that the computer could manage the big picture and the users would just see what effect other projects had on them.
The system was rolled out to one engineering group but failed to make a major improvement to overall scheduling.

IBM 5100 : APL : Laplace Transform

The benefit of working for the defense industry was the amount of leading edge technology available.  One such device was the original IBM 5100 PC.



The 5100 could be programmed in Basic or APL.  I believe I actually used a 5110 which was released a couple of years later and could have floppy disk drives attached.  In fact it was a portable computer, with a self-contained screen, keyboard and tape drive.  It weighed about 25Kg so one strong person could carry it around.  Our model had a dual floppy disk unit which was the size of a cupboard and took two people to carry.  It could store a massive total of 4.8MB.  I had this all to myself for a number of months, as no-one else knew how to work it or what to do with it.
My task was to write a program to calculate Laplace transforms, which are a version of Fourier transforms.  APL was ideally suited to this work and my programs were very useful.  I could tell the PC how accurate I wanted the results to be and set it off to calculate the answers.  If I wanted very accurate results, I could let it run for hours, doing more detailed calculations.

Tektronix 4014 Graphics

One of the expensive toys our department had available was a Tektronix 4010 series graphics terminal.  I believe the one we used was a 4014 model which had a beautiful 19" screen.




Steve Cussens, who was a friend / colleague, had a friend in the movie business (perhaps an intern).  Steve wrote a program which simulated a space craft (well a simple cuboid shape) coming in to land, approaching the viewer.  I think I helped write the program, which required matrix manipulation for 3D graphics calculations.  This was soon after Star Wars came out and we were using a computer rather than models to draw the space ship.

1982

Computer Networking

The last project I worked on was to design and build a local area network, linking heterogeneous British Aerospace engineering systems.  There were a large number of different computers from a variety of manufacturers in use on site and obvious benefits in linking them together.  I believe DECnet would have been available for PDP-11 and Vax machines, but we wanted others to be linked in.  We were working with Logica VTS on the project and I remember a trip to their office by Oxford Street to look at at a "grey" market IBM PC.  The IBM PC was on sale in America from August 1981 but not introduced in the UK until January 1983.
My recollection of my objective was a little vague.  I think I came up with a potential set of user commands for operating over the network, largely based  on my knowledge of DEC Digital command language but I am not sure that networking  hardware had been agreed so I could only do some superficial programming.

Footnote

I moved on from BAe in August 1982 having worked for them for a total of about four years between 1976 and 1982, whilst studying for my degree.  In retrospect I was fortunate to work in a wide variety of environments on some innovative and forward looking systems, which I can look back on fondly.  The Undergraduate Apprenticeship was a great programme, it was a shame that recogition and remuneration did not keep pace with our value to the company and marketability.


Tuesday 15 October 2024

My (Computer) History 3

1977

PDP11/34 : Coral66 : Edge Tracker

One of my favorite projects.
A new anti-tank missile was planned, which would use image processing to home in on its target.  The hardware circuit design included am2900 bit slice microprocessor chips and some expensive specialist chips.  Our teams job was to provide a software emulator for the missile guidance system so that another team could test their guidance algorithms and code by running it on our emulator.

I wrote the code for the ALU and some other system components.  It was vital that the emulator behaved exactly like the proposed hardware and I provided an exhaustive test suite to make sure results match the circuit specification.  We wrote our programs on a DEC PDP-11/34.  The PDP had an Operating System RSX and display terminals.  This provided an incredibly productive environment, allowing us to write our programs quickly directly in the computer, compile them in a few seconds and then test them immediately.
Coral66 was a good "sceintific" language to use, like Algol60 but slanted towards the defence industry somehow.






The project was a great success and allowed the guidance team to test their software on real digital video data, provided by the army, of tanks moving in various scenarios.  By analysing the edges of objects in a the image they were usually able to pinpoint the tank from the heat signature of its exhaust fumes.
I recall that one dataset proved troublesome; it contained a tank in a field of cows, and the missile guidance usually aimed at a cow's "exhaust" instead of the tank!

As a follow-up we started to build an emulator for guidance system based on 6502 processors for an air-to-surface missile.  I wrote most of the code before the project was cancelled.  It may have been because the actual hardware board became available to use for testing and an emulator was no longer required.

1978

Siemens 330 : Assembler : ATE

I spent some time in the Automated Test Equipment lab.  The idea was to use computer programs to test whether equipment / weapons were working properly; at the time it was quite an advanced concept.  For some reason, probably political, we were using Siemens 3003 computers which we had to program in German assembly language.


  Not being able to understand German this slowed me, and others. down considerably.  I dont remember what equipment we were supposed to test.  I do recall that the programs and data shared the same address space so we could try out dynamic programming.  For example, if you wanted a loop to execute 50 times you would write the integer value 50 into the appropriate place in the program.  It was all a bit of a come down from sexy PDP-11s.

Pixette SlideShow + Webdav

 Aim

My Art Gallery picture slideshow web application works very well, allowing me to look at pictures together with their descriptions and my comments.  Occasionally, I would prefer to see an iPad slideshow of the pictures full screen, with the minimum of borders / distractions.

The pictures are held on an RPI Samba shared folder and it would be easy enough to copy them across to my iPad and view them in Apple Photo or LiveFrame which I currently use.  However it doesn't seem right to do this when I already have the photos available, both on a shared folder and available as web URLs.

For some reason I found it difficult to find an iPad app that would access pictures on a shared folder and allow me to look at them in a slideshow.

Lighttpd web server

After searching Pixette appeared to be popular app, which might allow me to view shared folders collections on "NAS".  I thought that my RPI with shared folders qualified as NAS but apparently proper NAS devices have their own system software (e.g. Synology) - to allow proper file-sharing, multiple users etc.
However Pixette does support Webdav devices and I found that my web server lighttpd can be configured for webdav. I followed a guide fom Haven200 which explains how to setup lighttpd for webdav.
Unsurprisingly you need to install a couple of lighttpd modules and configure lighttpd.conf details.
You also need to make sure you have a password file available (I used htpasswd for simplicity)


After completing these steps it is possible to see my art directory structure

Configure Pixette

It took me a little time to get webdav working but once I had a URL I simply entered the details into Pixette, indexed files and sat back to watch my slideshow



Verdict



Pixette is an excellent tool which gives a proper full-screen slide show experience.  Of course the iPad has a high quality screen so the pictures themselves look great.  Pixette is intended as a digital picture frame and it shows pictures in a random order but that isn't much of an issue.

webdav is actually intended to allow you to make updateable pages, so I could probably experiment with that idea separately.  I recall that when Tim Berners-Lee initially setup his web server he intended web pages to be writeable so webdav is truer to the original idea than most.








Saturday 12 October 2024

My (computer) history 2

1977

Intro

Having being accepted to study Mathematics at St Catharine's College, Cambridge I started an Undergraduate Apprenticeship with British Aircraft Corporation at their Guided Weapons Division in Stevenage.  The first three months was a mandatory workshop training course, mainly learning metalwork, with the traditional apprentices.  It disabused me of any notion that I had any practical abilities and I admired the skills of the younger, traditional apprentices.

After this difficult period I was sent to work in various departments around the site.  The other undergraduate apprentices were due to study Electronics and were easy to find placements.  They didn't really know what to do with a Maths student and it was natural to send me to work in departments with computers.  As a research and development site, there was a significant investment in computers but very little existing expertise in controlling and programming them.

IBM : Fortran : Statistical Analysis

My first placement was with the Precision Products group working alongside experienced traditional mechanical engineers who were computer illiterate.  BAC made extremely accurate gyroscopic compasses for the military.  Repeated readings gave slight variations and the designers hoped to improve accuracy by looking at a statistical analysis of compass readings.

I taught myself the Fortran IV language and wrote programs to analyse readings, using a 80 character coding sheet to write down the program. 


 I then went to a punched card machine where I typed each line of code onto a Hollerith punched card.  Column 1 was blank unless it was a comment.  Columns 2-7 were used for a line number for goto statements. Fortran commands were entered into columns 8-72.  Columns 73-80 were blank.  At the top of each card in each column, the character was printed, and beneath a sequence of holes indicated what the character was in binary. 

 Compass readings were also typed on cards which were appended to the end of the program.

After checking the cards, they were handed to an Operator who used a Remote Job Entry (RJE) terminal to read in the cards and run them in a batch partition on the mainframe.


I believe the computer was an IBM 360 running OS/VS Operating System.  The operator would add a couple of Job control language (JCL) card at the front of my program deck to tell the mainframe which partition to run and which printer should be used for results.

The engineers and myself could look at the printed results.  I also had access to a Calcomp plotter which was attached to the remote mainframe.  This was a very exotic and expensive device which enabled me to show results on a printed graph.



Analog Computing : Missile Guidance

In the 1950s 1960s and early 1970s analog computers were a useful tool.  Signal sources (Input voltages) would pass  through various components to give results in the form of output voltages. They were particularly useful in modelling systems whose behaviour was based on differential equations.

As shown below there were a variety of operations which could be carried out.  BAC used them to test missile guidance systems.  A missile nose cone would be mounted on gimbals in a test rig allowing it to turn and rotate.  A moving Radio Frequency target would be placed at the other end of a long room.   The nose cone then needed to track the target.  Instead of signals send to control rocket motors, the analog computer interpreted them and adjusted nose cone direction appropriately.

Electronic Associates (EAI) were the principal manufacturers of analog computers.  I learnt on one similar to EAI-180 at TNMOC which is shown below. It is programmed by plugging patch cables from inputs, through a sequence of components leading eventually to outputs. Although plugging the cables was easy it was difficult to design/test a working system.  I recall that the production system had a spaghetti-like mass of cables.  Patch boards could be interchanged on the front of the computer to run different "programs".



Saturday 5 October 2024

My (computer) history

1971

My first recollection of an interest in computers was probably 1971 when I was 14.  The CEGB (Central Electricity Generating Board, now National Grid) had an open day at Roseneath, their local office in Bramhall Park which was about a mile from my home.  A little site called bygone days has gathered together some information and recollections on CEGB.  A recollection from Len Simpson mentions that there were a couple of open days after the new control room was opened.


As an aside my sister was at school with Isobel Plevin, whose father Don was a manager at Roseneath, and Annettes father, Roy, who also worked at the CEGB in the National Control Centre used to go up to visit Don Plevin.  In addition the bygone-days website has articles by Roy Lewis and his colleague Tony Malins.


I remember that we walked around the Control room, which was very impressive.  I don't know whether we saw a computer but there was a board describing  a computer (memory) as having a lot of pigeon holes for information, which sounded strange.

I came away from the visit with a freebie, which was a totally incomprehensible book of flowcharts relating to the computers application.  I used to look at them to try to understand how it might work.

Following the visit I must have expressed an interest in computers.  My fathers company used to receive Computing and Computer Weekly newspapers but I think no-one read them.  My father used to bring them home for me and I regularly read through them and saved old copies even though they didn't mean much.  I read a lot about the mainframe manufacturers of the day, IBM. ICL, Sperry Univac, Burroughs.  I recall lots of discussions on ICL 1906 computers being installed by councils and government bodies.

1974


My first interaction with computers came at school, in 1974 I think.  I attended Kings School, Macclesfield and studied Maths and Physics  in the sixth form.  The local Technical College had a teletype terminal with a remote telephone link to a mainframe at Manchester University.  One afternoon a week, for a term, we went to the college to learn Basic programming and to use the teletype.
I enjoyed the sessions immensely and wrote a few programs.  I recall a program which generated simple poems was great fun and impressed the teachers.



We "wrote" programs at an "offline" teletype terminal and saved them on the attached paper tape machine.  We then  went to the "online" teletype and inserted the tape so that it could be read in.  This loaded the program to the computer in Manchester.  Running the program caused the results, or an error message, to be printed on the teletype.  You would then tear of the paper and handover the terminal to the next person.  If there was an error, you amended your paper tape and waited in the queue to re-run your program.  It seemed wonderful.
 

1975

The school was offered a place on a residential computer course in the 1974/5 Christmas holidays.  As I was interested in computers I was lucky enough to be selected to attend.  The course was held at Eton College which was lucky enough to have its own computer, an Elliot 903
I am not sure what programming language we used, it may have been Algol or Fortran.  It was a small computer with no long-term storage.  Again we wrote programs using a teletype and saved them on paper type.  As the computer didn't have permanent storage or much memory it was necessary to load the compiler into the computer on a tape, then load your program tape and compile.  The output was another paper tape which you loaded into the computer (overwriting the compiler) and ran the program.  Program output was printed on a teletype.
Unfortunately I dont recall details of programs I produced.



Lyrics

Reading lyrics whilst listening to music improves the experience, particularly because I am not very good at decoding unclear words and tend not to listen to songs closely.
Putting a song title and artist into google usually provides lyrics or links to lyrics.  Very occasionally, I make the effort to do this, but it would be really helpful if I could create a Google search within my music application to display song lyrics.

In my music page I already display the title, artist and album so the information so it is a simple matter to work out what needs to go into a Google search. In the example below a google search for "Lyrics Fleetwood Mac - Second Hand News" quickly comes up with the appropriate lyrics.

All I have to do is setup a simple javascript function which takes the available track and artist information and create a suitable google search string.  This is then inserted into the page in a button tag as shown below.


It is a very simple way to add a useful function to the page.  In addition to starting the query with lyrics, I have buttons to start the query with "Images" and "info" which also yield potentially interesting Google search responses.

Google doesn't always come up with the goods, the genius.com lyric site can potentialy give better results but it seems it would entail processing lyrics using their API which would be more work.  I will take the win with a 80% result for 20% of the effort.



Friday 20 September 2024

Improve iPad music

Intro

During the summer I am away more, often without access to wifi or internet.
It is convenient and enjoyable to listen to local music on iPad using the Apple Music app.
However it is inconvenient to update my iPad music by connecting to my PC and using iTunes to add/remove music.
The consequence is that my iPad music is often outdated; it contains albums I don't really listen to and doesn't include current favourites.

Ideas

Apple Music
Apple Photos works well with iCloud, allowing you to look at shared pictures on a range of devices.  I hoped Apple Music might provide similar functionality but it will only sync music if you have an Apple Music subscription (£11 pcm).

iCloud
iCloud looked like it could be part of the solution.  Files can be moved to and from iCloud using iCloud Drive on Windows, Apple Files on iPad or a browser to access iCloud.com.  Free storage is limited to 5GB but 50GB can be added for £1 pcm.
When  you access an iCloud folder your view is synced so all users see the same set of files.  Unfortunately this feature does not include the capability to physically synchronise copies of file onto the local device.  You still need an internet connection to access the files.

Files
Apple Files can access music on the local drive, iCloud or a network share.
Double-clicking on a music file causes it to play within the Files app.
This is interesting but not a practical solution, unless playlists can also be started within Files (I didn't investigate).

VLC
VLC is able to play music directly from iCloud but it would still require an internet connection.

Doppler

A reddit post I saw mentioned that a music player app called Doppler may help with my requirement.  After trying out its features I invested £9 in purchasing it.

Like many music player apps Doppler has a music library.  You can import music to this library from a variety of sources.  I particularly liked the help text Doppler provided explaining various download methods.  Music can be imported from, for example:

1)    local hard drive
2)    iCloud
3)    network share
4)    Apple 
Music storage

This functionality provides a solution to my requirements.
I started off by importing all the albums from my Apple Music
I then select any new albums I want from my PIP Music database.
As albums are easy to download I can remove ones I don't listen to much and re-add them later if my mood / tastes change.
Once albums are imported I can listen to them without wifi or internet access.
I don't need to use iTunes or even iCloud to make this work

The screen shot below shows the Apple files app which is accessing the pipmusic folders on my PIP NAS.  I can select an album the "share" it with Doppler to add it in.

As I can access PIP if my iPad is connected to  wireguardVPN, I dont even need to be at home to add music to the iPad.

Xcode

 Intro

I have been thinking about potential approaches to, and uses for, executing programs on the iPad.  I previously investigated, briefly, the idea of running a webserver on my iPad. Although the idea seems good, I wasn't convinced a webserver provides a good environment.

The preferred Apple route for iPad programming is actually to develop a cross-platform app using the Apple Xcode IDE running on my macBook and to deploy the completed application to the iPad. Apple are restrictive regarding installing iPad apps and this approach avoids such issues.

Installation

Xcode is a large, free application (6GB or more) which provides a range of languages to write programs for different Apple devices.  It can be installed to a macbook from the app store. I included the IOS components as my target environment is an iPad.

macBook PoC

My preferred programming language is C and I found a simple tutorial to get started with C in Xcode. I created a command line project within Xcode and it gave me a skeleton "Hello World" program as a template.  It is easy to build and run this within the IDE, giving output at the bottom of the screen.

You can then run the C executable generated on a macBook terminal session.


IOS PoC

Next I want an app which will run on the iPad.

I found a couple of youtube tutorials to guide me through the process.  The first one, from CodewithChris , provides a detailed intro to the IDE.

The second from IOS Academy goes into less detail and provides a nice simple emoji display app - I followed this tutorial mainly.

Both the tutorials use the SWIFT interface and the SWIFT programming language, which is very powerful and is preferred for Apple development.
An alternative is to use the older Storyboard interface and SWIFT or Objective-C programming language.

Selecting IOS app in the new Project dialog and choosing the SWIFT interface I was presented with a draft hello world app.  I could build and run this app in the built-in simulator to get an idea of how the app will look on an iPhone/iPad.



I followed the IOS Academy tutorial to create a simple app "EmojiLover".  It allows you to choose from a selection of icons and display on the screen.

The code is explained very well to give some understanding of programming using the Swift language.  SWIFT is a powerful Object Orientated language, and it would take a concerted effort to become fluent in it.

There are some interesting features, notably including Emojis as pictures in the code.  The rest of the code is pretty incomprehensible without understanding the objects making up the User Interface and Program.

The result is very good.  You can see a preview of the code whilst programming and can periodically run the simulator to see how it will look on the device.


IOS Download

The IOS Academy tutorial didn't cover testing the app on an iPad/iPhone so I looked at CodeWithChris.

The first step is to connect the iPad and macBook.  My usb-c  to lightning cable didn't appear to work (no device was seen by macBook) so I  purchased a new usb-c adapter cable which worked a treat.

There were a few compatibility / security issues to resolve before the iPad and macBook were working together:
1) My Xcode environment had to be set for IOS16 to match the iPad
2) I had to enable Developer mode on my iPad
3) In iCloud I had to setup a Personal Account and keychain for the macbook to access the iPad.
4) On the ipad I had to allow user j200@helliwell.org on macbook access to the iPad.

Once macBook and iPad were happily communicating I could tell Xcode to build the app for my iPad and after a slight delay the iPad shows my completed app 😀😀😀


At this stage you can disconnect the iPad from macBook.  An icon is created on the iPad home page which you can use to run the app again.

Unfortunately, unless you have an Apple Developer license ($100pa) Apple only allow you to use it for a week - then you have to reinstall.  This negates the purpose of using Xcode so I wont progress further.😭




Monday 5 August 2024

iPad Web Server

Concept

I wondered if it is possible or useful to have a web server on my iPad.

Generally speaking you can only run Apple approved apps on an iPad.  There are thousands of them, so the purpose of a server should not duplicate any of them.
There are only a few web server apps available on the App store and the only one which looks reasonable is "WorldWideWeb - Mobile"  

It is aimed at developers, possibly for when there is no internet access.

Trial

I installed the app.  I also installed a simple text editor so that I can create web pages.  I then setup a folder "www", created a simple index.html and started the server.  The app includes a browser so I could look at my page locally.  As www-m supports Bonjour it gave me a URL http://john-ipad5.local:8080 which allows me to access the page externally.
So the answer is yes! I can easily setup a functional website for my iPad.

Uses

I could set up a simple web page to determine which web sites are available.   If there is no wifi access this will be empty but it is better than a page not found error message.  At home or with VPN enabled my local sites will be seen.  On the internet my "official" web site will be available.

By default www-m is "sandboxed" and doesn't give you access to any local resources.  It should be possible to give myself access to my music folders.  I would like the ability to sync iPad music with (some of) those on my home music server.  This would give me a "mobile" music server.  It would be  also be possible to make this accessible to other people nearby using the web interface.

There seem to be more web servers for Android so it may be better to experiment with such an app on my phone, providing I dont have to edit files directly using the phone keyboard.  A suitable candidate is 
simple web server .  This would be excellent for the "car phone" - which is an old Samsung smartphone containing music for car listening, since the new car has no CD player.

Alternatives

It also occured to me that, if I want some sort of programming capability on the iPad, python would be a good candidate.  The principal Apple app is Pythonista.  It appears to have plenty of libraries allowing access to iPad hardware / features.  One downside is that it isn't straightforward to set up a home screen icon for python apps, but it probably is possible using PWA (Progressive Web Apps).  These run in a browser for you.  An excellent example is the Rubik cube which looks like an app but runs without installation.

Conclusion

I like these ideas, I don't have a strong enough urge to set it up now but maybe sometime ....



Thursday 1 August 2024

Space Desk : A Touch Screen for Windows

 It is very rarely that I find a computer gizmo which is truly amazing.  Spacedesk falls into this category.

1) Install the DRIVER app on your PC

2) Install the VIEWER app on your iPad

3) Connect the iPad to your PC

Five minutes after you started you have an extra screen on your PC and can drag some apps across to them.  Here is my windows explorer session.  Wow 😀


I still use a traditional PC with screen and mouse, I haven't moved forward/sideways to touch screens for Windows.  However, my iPAD is now a TOUCH SCREEN.  I can click on a file to open it etc.


😂Awesome 😂

Monday 22 July 2024

Message Board app

 Intro

I am not at all sure why I felt the need to create a message board, but I did.
The idea is to have a screen or window showing any "events" occuring on home IT systems.
I am not sure what systems will post events on the message board.
Anyway I went ahead on the basis that I might find it useful.

Design

It should be possible to see the board on a phone, iPad or PC so a web application is most sensible.  The display should update automatically as new events arrive.

Messages should be send from home IT systems but I will include the ability to add messages through a web front end.
  
As usual the web page will retrieve information from a server using JavaScript.  Previously I have used a python back-end or php to provide server functions but I have an urge to use a proper Javascript server for which I will install Node.JS.

Messages will be stored on the server in a file or MySQL database.

The concept and design are both somewhat vague so I expect the design to evolve.

Plan

1    Install node.js and establish communication from a URL.

2    Provide the ability to add simple messages and view them

3    Create a database for the messages and functions to add / view messages

4    Create message board web page to view appropriate information regarding events

5    Provide ability to add and delete events through the web page

6    Set the application to be always available.

Node.JS

Node.js runs on a server and provides the ability to run javascript.  It is used extensively to implement functions which communicate with browsers to display web pages.  As we want our messages to be held centrally they need to be stored on a server node will be responsible for adding messages and sending out message details.

Node is installed on an RPI.  Installation doesn't use the apt packet manager but is quite straightforward.
The server is started from a command line and runs on port 3000 (which is pretty standard).  A "hello world" app quickly demonstrates whether it is working.
A HTTP server object is created using the "http" module and then setup to listen for user input.
When a URL request is received the eponymous message is returned and displayed as a primitive web page - without headers or surrounding HTML.

Next we make sure we can transfer information in URL parameters to tell the server what we want.
The URL module is added making it very easy to retrieve URL parameters from the HTTP server into the script.  In the example below the "req" object has values req.year and req.month which contain values submitted from the "user".


We can now setup our first prototype message board. There are two operations "op=view" and "op=add".  For the "add" operation the second argument is "mess=<message text>".
JS to achieve this is simple and we can easily add and view records.
The fs module is used to append "add" messages to a file, then used to read the file and send "view" output to the browser.

MySQL database

Using files isn't going to be sensible for my message board, I need a simple database, with each record being the fields required for a message.  I create a simple database "messages" with a single table "mess" including fields for the message, system, severity, date, closed-flag.


Now we can use the mysql module to add or view records.

Initially a connection "con" is created to the messages database on the database server.
We then create a text string "sql" which is a SQL command to insert a record into the "mess" table and use the con.query method to submit the command to MySQL.  Providing there is no error ("err"=false) we return an empty page to the user.After a little tweaking of the database permissions I am able to add records to the database successfully


Similarly if we want to view the messages table we submit a "select" command which returns the appropriate rows/fields in an array ("result").  We can then select suitable rows / fields to display.
The first test simply shows the message "body" for the first two rows.  This information is encoded into a HTML page and returned to the browser for display.

Web Page

We now have the ability to use http requests with parameters, files and database tables.  We can instruct node.js to add records and to give us a list of records to display.
We are ready to set up a web page containing the message board.  Initially I considered that I would use node.js to provide messages and then format / display them in the browser.  However it makes much more sense to simply create a web page in node.js and send it to the browser.

The bare bones of the page are saved files header.html and footer.html (trivial) on the server and a list of messages is shown in between.  Usually node.js works asynchronously so you are not guaranteed to hae the template files available when you need them.  To me as a newbie this is confusing.  Kinsta provided an excellent explanation for me so that I could read in header and footer files ready for building the web page.



Next I need the ability to add and remove records from the message board.  Normally I expect the records to be provided from other home-based computer systems, but the capability to add records through the webpage is useful.
I can add a form to my header file and use it to submit an "op=add" http request to the server.


Finally I add a "close" link to each message so that I can remove a message from the board.  A new http request "op=close" causes a SQL DELETE command to be sent which removes the record from the database.


The example below shows the URL which is sent to node.js when the user clicks on the close link for message id=14


Conclusion


We now have a working webpage which allows us to look at the message board or add / remove messages.  It is still very much a prototype but we have the necessary components in place and working.  Node.js has prooved its worth and I have been able to create practical server app bringing together javascript, SQL, http and html.

As a second stage I want to set up a message screen using an old phone as a monitor start to notify the message board of suitable system events, for example: disk full, device down, low battery.