Login with username and password
about scfd
Welcome to my Website.
This is where I showcase my work, provide solutions for other, give my opinion on matters which dont concern me and generally try to get people to give me money to fix their problems.
About Me
I am a 52 Year Old Software Developer living in the Bellshill Area of North Lanarkshire in Scotland. I have been an avid computer enthusiast since the age of 11, writing my first full fledged computer programs, games, in 1993. I have written in numerous languages over the years from 6502 and 8086 Machine Code to Pascal, C/C++, Java, ASP, PHP, Javascript and of course alot of other languages like SQL, HTML, CSS and Wavefront Object files etc.
I have written so many three quarter mostly functional applications over the years that I have lost count. These include a variety of network communication tools such as a miniature web server, an ftp like file transfer program, and various telnet like interfaces, including a netcat.
I have remained focused on 3D rendering and physics software since the early days of games like DOOM enticed everyone to make their own attempt at a 3D game using their own software renderer from dos mode. My pascal implementation had no textures but a C++ version did, just at the same time OpenGL became a fairly common feature on almost all modern computers. I ditched the DOS code and opted to have OpenGL v1.0 do the texture rendering for me. This meant a C++ Application written in Borland C++ 4.32 and even Dev C++ which could compile the exact same code.
I also used this version of C++ to attempt my own early version of what might be called AI today. My version of "AI" was what I called The Natural Language System or NLS for short. Instead of neural networking techniques employed by the latest modern AI, my NLS employed discreet logic to analyse prompts and convert them into machine understandable open questions, closed questions, statements, commands or interjections, then respond to such a sentence in an appropriate manner. The goal was to make a huge database of facts and question those facts and make deductions from those facts.
The code for the Natural Language System was destroyed in the total loss of a hard disk many many moons ago. There are few things I have from my C++ era although around the same time I was writing in 8086 assembly language, mostly through the Borland C++ "asm" directive but also in the MS-DOS program "debug" and who can forget TASM and MASM? Well there was also a shareware assembler called A86. I used that shareware assembler and alot of work in the debug program in order to write and assemble my own 8086 assembler which would eventually be able to assemble its own source code. This significant effort in 8086 machine code was written around the same time I was writing OpenGl apps in C++ and telnet like applications in the same. My 8086 assembler is the only thing I can find which survived the hard disk crash of about 2010.
Showcased PHP/Javascript Software
Most recently I have been working with Javascript and PHP together with the associated skills of BASH, SQL, CSS, HTML and various APIs associated with the particular task in hand.
Flat Earth
In the Flat Earth, the satelite photography data available from a variety of public domain sources is used to create a global map of the earth in a way which is not dissimilar to how google earth or its keyhole predecessor does things, except in my version, the model earth is a planet in a solar system, which to be fair contains only one other one body, the moon. It's more of a space flight simulator with a photorealistic earth than a maps application, albeit the mapping is every bit as accurate. I needed to know the WebGL API, which fortunately I knew due to a previous WebGL engine I wrote previously and show below.
Web GL
In WebGL I do my best to restore my C++/OpenGL engine from what I recall in memory but instead of rewriting it all in C++ and now very obsolete OpenGL 1.0, I discover that WebGL is almost the same as OpenGL 4.0 and opt to learn shader languages to use the latest OpenGL for Javascript and choose to see how well a decent looking engine would work in interpreted language. Thanks to J.I.T. compiling, its actually very efficient and this WebGL application is a proof of concept I wrote over 3 months. There is a version of this which has collission detect but its now the one currently published which showcases animation instead.
Small Minded
Version 7 of the web application you are reading this on had a specially designed audio forum where users spoke back and forth to one another using audio rather than text. It can be found as an archived but still live web site at the link. Note that the audio forum functionality needed knowledge about the media recording api as well as audio contexts and audio elements in html dom structures. Version 13 of this web application you are using now does not support an audio forums module.
Journal 28
Journal 28 was a sci-fi themed website and uses another version of the web application software. It features audio chatrooms amongst other things. At the time of writing, there is no support for an audio chatrooms module for this 13th version of the application.
How I got into Computing
8-Bit Games Computers
It all started when I was around 11. Computers, until 1984, were in the domain of forward thinking wealthy businesses. Around 1984, the general public could now find digital computers within their reach. There were business computers for sale in the shops which purveyed televisions and other electrical goods. These machines were affordable only to some and often in connection with business but a new range of computers was filling the shelves at the local Curries and Dixons. This new range were nothing more than childrens toys. 8-bit consumer digital computers for children and range of childrens computer games to go with them.
Games consoles like the Atari 2600 and the various versions of pong which were out there were about to meet the first digital garbage dump as programmable computers, complete with keyboard AND joysticks were hitting the mainstream alongside business computers.
So what is an 8-Bit Gaming Computer?
The 8-bit games computer computer in the UK in 1984 was either of the following machines.
| Make | Model | RAM | Colour | Notes |
| Commodore | VIC 20 | 32k | monochrome | Commodore PET Business Machine for Family Consumer Market |
| Sinclair | ZX81 | 1k | monochrome | Black case with plastic spill proof surface keyboard. |
| Sinclair | ZX80 | 1k | monochrome | White Build Kit to make your own ZX81. |
| Commodore | 64 | 64k | color | Beige case with brown plastic full size keys. |
| Sinclair | Spectrum | 48k | color | Clive Sinclair sells a UK colour micro. |
| Dragon | 32 | 32k | color | Very rarely found in the UK during peek time/ |
| Acorn | BBC Micro | 64k | color | Acorn in amalgamation with the BBC produced the BBC Micro |
| Amstrad | CPC464 | 64k | color | Andrew Michael Stephen the Entrepreuner, makes an entrance. |
| Commodore | 16 | 16k | color | Commodore reduce price by reducing features. |
I started out with a ZX81 around the age of 11. Other people had their Sinclair Spectrums and Commodore 64s. There was even some people who had the Amstrad CPC 464 which had its own itenral tape cassette drive. With the specturm you could just use any video cassette player to load games and save stuff but with the commodore 64, you had to have a speciaulised Commodore Dataset cassette recorder, however, the graphics of the commodore outstripped the spectrum and amstrad software was a little hard to come by so I soon got a commodore 64.
How I started programming
Well the ZX81 was the cheapest digital computer I could get which would guarantee the thing would work and it wasnt my fault if I didnt put a ZX80 computer together in the wrong way. Something that could be taken back to the shop if it didnt work. It worked ... but with only 1k, there were only very few hard to come by games which would work. There were plenty of ZX81 games available but all of the ones available to me needed a ZX81 with an additional 16k rampack to work. The rampack was almost as dear as a new computer. In the interim of getting a new computer in the form of a games playing Commodore 64, I first learned to program in the basic provided as the operating system for these 8-bit computers. Rather than the bios being a peripheral test and boot up to a disk operating system, rather than boot up from a disk or test any external peripherals, it just booted up from the rom with an instant CLI interface similar to BASH or PowerShell or DOS but using the interpreted language of BASIC.
These basic programs could be created and listed and edited in numbered lists which the inbuilt basic interpreter would run through using the RUN command or RUN from a particular line in the number list which was the program stored as a numbered list of instruction lines. I never ever completed anything serious on ZX81 Basic but I learned how to do it for the first time on that "platform" (as they are called today). Then came the C64.
**** Commodore 64 Basic V2. 38911 Basic Bytes Free ****
At last I had a computer I could play games on. Four games. Booty, Exodus, Kokotoni Wilf and Activision Decathlon. It was a tenner for big game like Kokotoni Wilf or Activision Decathlon but almost within reach to buy a cheaper game like Booty or Exodus once a week. Sometimes I would get bored with playing games and attempt to write my own games in Basic V2 for the Commodore 64. I got quite good at but had to realise the limits of memory and performance when targeting the Commodores Basic Interpreter rather than the machine itself. This latter type of programming was called machine code programming and it was this kind of programming which was in user by the software houses who were producing all the games on shelves of the increasing number of places you could find 8-bit games such as book shops and even lending libraries were willing to rent out 8-bit games for free.
I did get my hands on an assembler which would write the machine code for me but I did not come into my own until I upgraded to a Commodore 128 which came with its own machince code monitor. You could just write the mnemonics straight into memory then run the code. As the 8-bit computer market was being replaced by 16 bit commodore amigas and atari STs, I was learning to write consumer grade software for a machine which had just about seen its day. I never did succeed at writing a complete game but I got about three quarters done before life took over.
IBM PC XT Compatible with 16-bit Intel 8088 processor and 512k RAM
The hard beige plastic case of my first CGA Monitor looked out at me. It was better than a monochrome screen but it couldn't handle games that needed EGA or even VGA graphics. It was a colour monitor limited to only 4k colour, which is to say there were 16 colours to choose from and you couldn't use all 16 colours in high resolution modes. In half-res you got to choose either of two colour palettes (white, cyan, magenta, black) or (black,green,red,yellow) but not both at the same time and you will note from the colours available, at half res you couldn't get anywhere close to photorealism due to the lack of any greenness in the first pallette to the lack of blueness in the latter. At full hires, the picture turned to monochrome and was the screen mode of choice for many games such as the original Sim City (the first version before Sim City 2000).
There were games like Populous which worked on CGA and many text games and games which ran in textmodes with special graphics wielding character sets like Dig Dug. I figured I could do a game as good as one of these classic games but I realised I would have to have the game running in some form of machine code. I was learning high level language compilers would write the machine code for me. My first IBM PC language of choide was Borland Turbo Pascal because it was cheap and came with the computer I bought. Other contenders were GW Basic. I learned this but I never thought for a moment a game in Basic would ever sell. COBOL Was available to me but I opted for Pascal because probably the help system was more readily available.
My First Three Games
I was working various low pay jobs sometimes working two part time jobs just to stay in work. Waiter, Barman, Security Guard, Store Detective and a Shop Keeper. Moonlighting as an unemployed programmer I wrote various things which worked in Pascal. They worked for me but not neccessarily of a presentable finished nature. A kind of 3D engine written using the BGI library that comes with Borland Pascal and C/C++. Natural Language System which could take assertions written in English and answer questions in English about the asserted data. A kind of determistic approach in the 90s to achieve what Transformer Architecture Neural Networks achieve for us today. A fractal browser using the Mandelbrot Set. The kind of things that no one needs but were worth writing to gain an understanding for myself of both programming the subject area my programming was around.
I would find myself taking a break from computer programming to play a game which on my old PC-XT 512K with a CGA monitor, were not up to much. Wolfenstein 3D, the predecessor of the original 16 bit Doom and Doom2 were things for fancy PC Compatibles with 80286, 80386 and 80486 processors and the maximum 640KB of base memory as a bare minimum, not my machine with a processor whith was second rate to the now obsolete 8086. I had my own range of games and these included, amongst others, Galaxy, Missile Command and Addix.
Alot of the stuff I was writing based on my own designs functioned with perfection but were hardly full applications in their own right so I was then deciding to make my own implementation of someone elses designs and I came up with
- Kaboom, a missile command like game;
- Addix, I made my own version of the number/board game Addix;
- Galaxy, my own version of Bug Bytes Galaxy for up to 7 players. Mine included CPU players with three different levers of intelligence;
Having completed these in a matter of a fortnight each on average I began to consider a career as a "computer programmer". The industry terminology is a software engineer and this can include elements of what a hardwood engineer and a system analyst would know about and also some level of understanding of the subject matter a particular piece of software is about.
About My Software
Full List of Programming Languages Spoken
I have been writing in various computer languages for over three decades now. I started out with Sinclair Basic and switched to Commodore 64 Basic V2 when I was 12. I then began studying how to program the 6502 processor at the heart of a Commodore 64 and to communicate with the SID and VIC microcontrollers to produce sound and graphics. Having completed half a platform game in 6502, I then went to to GWBasic on my first IBM compatible PC. From here I learned both Pascal (writing three games) and 8086, writing a self-assembling assembler for the 8086 instruction set.
The 8086 Assembler can be see on sourceforge and github in various places where my name is on it but the password mechanisms for such sites have become so secure that even I do not know my own password and nor does anybody else. The assembler is unique in that it is written in assembly language taylored for that assembler, thus it can assemble its own source code and produce another version of itself, amongst other generic assembly tasks on an 8086 without any 8087 instructions albeit with some 32-bit instructions available by the use of the DB 67 instruction to extend 16 bit registers and complex instructions such as scasb and cmpsb to their 32 bit equivalents.
I have written a 3D Engine in Pascal targeting a dos operating system but my main 3D Engine now runs well on JIT compiling browsers such as Firefox, Chrome, Opera, Edge and Safari and it is the latest in a long line of 3D engines which were initially written in C++ with OpenGL1 but now comes to have its more recent versions targeted toward the program from anywhere philosophy given the widespread availabelity of computers that can run javascript on a browser. The WebGL module available on all major browsers provides a fourth generation OpenGL API together with the shader programming APIs which were not around in earlier versions of OpenGL 1.0.
As well as writing in Basic, C/C++, Pascal, Java, Javascript, 8086, 6502, SQL, HTML, CSS and PHP I have also written machine code programs which talk to microcontrollers such as the advanced programmable interupt controllers (APICs), VGA Graphics Controllers, Keyboard Controllers and UART Serial Port Controllers, OPL3 Midi Controllers. In addition to having learned all the above, I am also a student of various algorithms and computation techniques which I deploy in the various lanugages described.
For most of the past decade, my programming efforts have been tailored toward Web Applications, which is to say, I implement things with the various Javascript APIs such as Media Recorder or Web GL then provide a web page to host the functionality. This host is carried out between PHP and Javascript in combination. So my main server side language is PHP and my main client side language is Javascript. These often involve writing in SQL, WebGL, GLSL and of course CSS and HTML.
What Else I Have Written
I was very fond of chatrooms and began writing my own instant message application that could talk to one another if they knew the others IP address. This bizarre experiment was successful and I began to write a few diffent "telnet-like" applications such as a web server that could only respond to get and head commands and not in too much detail. I also wrote an email client using the old pop3/smtp "ehlo" mechanims. There were of course chatbots which were built to log in to yahoo chatrooms. All these Telnet-Like applications were lost along with a lot of other good stuff when I lost my only hard disk drive in the years before usb sticks when floppies took forever and were not suitable for backing up ones only hard disk.
A long time before Transormer Architecture Generative AI had come along AI meant something else and Mini-Eliza is maybe the kind of thing we might call what AI has become today. I myself wanted to write to a computer in a natural language and have it respond to me in a natural language. The goal was not to have some kind peronality but for the computer to respond appropriately when for example I were to say "give me a list of a files in this directory" at a prompt. An appropriate response could be "There are forty-eight files in this directory, forty four of them are jpeg images, three are wav audio files, and there is a txt text file called readme.txt. What would you like me to do with some or all of these files?"
I never thought of having the computer do my thinking for me but was convinced I would have to think in advance for a computer and that had the implication that I had to model the English language as best I could. The project was never completed but it did lead me into a sub-study of trying to make something which could pass the Turing Test. It didn't. Long story from a long time ago and neither did Mini-Eliza.
I wrote an educational tool for people in Glasgow who wanted to pass their Taxi Driver's knowledge test. I used it myself and even gave it away before losing my own copy on the aforementioned hard disk crash. Let's just say there were tonnes of Pascal, C/C++, OpenGL, 8086 programs which were lost and most of my available work today is mostly in PHP/Javascript.