Login Join
 

The Software of Stephen Duffy

Overview

This website was written from scratch over a weekend and it's not the first web application I've written or published to this website or other websites I've been involved in. While I have had installations of third party web applications such as MediaWiki, PhpBB, Wordpress and Moodle (to name but a few), I often find such software bloated, buggy or lacking a certain extension that I really really need, so I tend to write my own web applications, often cannibalising parts of previous web applications I have written.

Although this web application is still fairly barebones, previous applications I have written include integrations with facebook, twitter and paypal as well as meeting all the requirements to get index sublinking on google's search engine. I am not however a big fan of of third party integrations, recognising that for users, logging in through external authentication can be much easier but having a white hat background, I have a zero trust methodology to ensuring the privacy of website visitors and members. I feel uncomfortable letting third parties track and trace the various online activities of my visitors who I try to treat like customers who aren't neccessarily buying anything.

As well as being a full stack web programmer, I have also written software in C/C++, Pascal and Visual Basic and I have some unique adeptness when programming directy in the machine languge of 80x86 based processors such as the Intel and AMD processors. I wrote my own 8086 assembler in the 90s and it was written in machine code and was able to assemble its own source code. This might seem a bit of a redundant thing for an assembler to do but its purpose was to build the boot loader of my own operating system and I had to use the assembler to write a CLI and high level language compiler. I never got round to much beyond a very basic CLI.

Downloads

Alot of my work was lost on a failed hard disk in 2016. The main things I have in my portfolio at present are the virtual reality engine without its collision detect algorithms, a web application known as the Gartbeth Digital Services Web Application 6.0 and an 8086 machine code assembler. More will be added to this list as I find whatever bits and pieces I have rumaging around and as I produce new and exciting stuff. Most of it will likely be PHP/Java.

8086 Assembler
Virtual Reality Engine
GDS Web Application with SQL System
GDS Web Application with Flat System
Simple JS Code Obfuscator

History

I began computer programming when I was 12 and simply didn't have enough games for a Commodore 64 so I set about writing my own. Althoug I didn't finish any, I did brave the field of writing in assembly language which was essential art if you wanted to publish a successful game and become the next Andrew Braybrook.

The first Pentium computers ran at 90hz and were originally referred to in the standard nomenclature of 80586 PCs. They were the latest generation of IBM compatible PCs after the 486, the 386 the 286 and the XT. Just before Intel released the Pentium, I bought my first IBM compatible at the cheapest price I could lay my hands on one. It was an XT. That meant that it was one generation behind the 80286 and was simply referred to as an 8086. Technically my machine was so cheap it only had an 8088 processor in it which was indiscernable from an 8086 as far as the machine was concerned but had a few corners cut that made it a bit slower than alot of the other XTs which were release at the same time, which was over a decade before I purchased mine.

The XT was at least a 16-bit computer but my machine had little expansion capabilities for a graphics card and I was stuck with very few games and those that did work such as digdug, populous and simcity were so awful that I would sometimes switch on my old 8-bit machine, just to play some decent games. The purpose in buying and old XT was to learn how to program in way that would get me a job in business. The only business software I had tried to write was a stockmarket analasys application for the Commodore 64 but I didn't have much of a data set to go by so, like everything else on the Commodore 64, I never completed anything useful, but learned alot.

Pascal

My first successful programs were written in Borland Pascal 3. This was before Pascal was on Object Oriented language and was simply a parametric functional language. Rather than design my own games, I simply used other people's designs to write my own implementations of software that I already had. I completed three games in Pascal. The first one was called Galaxy and it was my own implementation of Bearbytes Galactic Conquest game. Their game was for multiple human players. My implementation added artificial intelligence having CPU players with three levels of intelligence.

Another game I was familiar with but didn't have a copy that would work on the old XT was Missile Command. I wrote my own version of this in Pascal and called the game Kaboom!. For the third game, I also adopted the strategy of copying someone elses idea and implementing it myself. I cant recall what the name of my game was, but it was an implementation of the game Addix, which was an arithmetic board game. My implementation again had aritificial players with three levels of intelligence. I also wrote a fractal viewer having bought the book Chaos, by James Gleik. I've worked on far more efficient fractal viewer algorithms using C++ but it was around this time that I began to switch from writing in Pascal to writing in C.

8086

At the time of switching, I had upgraded my old XT to and 80386. This was when Pentium Pros and Pentium MMXs were the latest standards for people who were not as poor as I was. I could now play the game DOOM and DOS was the operating system that Windows 95 ran on top of. In both Pascal and C++, I was learning the WinAPI but I always had a hankering to write in machine code since I knew this to be the way to get a machine to work at its most efficient. Microsoft DOS came with a program called Debug which you could use to write your own assembly language for the 8086. Using this I managed to contruct a table of instructions and discern the patterns of their meaningfulness. For example, OR,AND and XOR and five other instructions all had the same binary number configuration differing only by three bits. The other five bits of that byte of the instruction refer to whether the operation is being performed register to register, memory to register or vice versa. Using the Debug machine code monitor I built a set of tables so to finally produce my own assembler. The difference being that the assembler could take a source file and produce a binary file. The point was to write a whole operating system as an alternative to both Linux and DOS. I needed an assembler written in machine code so I could use it as part of a CLI once the boot loader of my operating system was running. I was not impressed when I learned at university that no one programmed in 8086 but only high level languages and the 100 lines of code I could do a day was a factor of ten times more than what would be expected of me when I went into industry... which I never did.

University

I was at University, learning to write in the Java Development Kit 1.0.2 and the MIPS RISC assembly language. There was very little learning in C/C++ apart from one class which was dedicated toward SoC design rather than the free flow programming style I had adopted while doing a hundred lines of code a day in Pascal. I thought that moving toward C/C++ would prove to be useful as my career advanced, but at the time of writing, I'm a professional driver with no industry experience but lots of computing skills. Just into the second year of my course I became the victim of what is now called "gang stalking" but at the time it was going on, there wasn't even a name for it and I could hardly believe what was happening myself, let alone find anyone I could relate it to. I did my best to stay the course at University but by the time I had did three years I bailed out with personal problems that have frankly never dissolved, albeit that I manage them well.

Java

At the time when the JDK 1.0.2 was around, Java was an alternative means to write programs that would work in most web browsers. Internet Explorer shipped with every copy of Windows 95 and I was sure that what I wrote in Java would be useable by almost everyone. I wrote a few things in Java such as network chat clients and of course the various projects a student does while at university. The only really worthwhile Java "Applet" I wrote was a program which taught and gave mock tests for the Glasgow Taxi Drivers Knowledge Test. Sun eventually sued Microsoft for non-standard versions of Java and Microsoft had to remove Java support from its browser and operating system. You could still install support from Sun but that extra involvement meant that Java was no longer as cross platform as it once promissed to be. I did write a Galaxian clone in JavaEE later for use on mobile phones before PalmOS, iOS and Android came to be.

C/C++

For a long time my favourite language was C++. I orinally learned it using the Borland C for Windows. Despite slight compatabilty issues with the more popular Microsoft Visual C, it could do everything I needed it to, except easily compile the source code for Wolfenstein 3D when iD made it available. One of the projects I had been working on in DOS was a virtual reality engine not dissimilar to DOOM and I came across the IDE called Bloodshed C++ which had a template project which introduced me to OpenGL 1.0 rendering. I ended up writing two engines in C++/OpenGL. One gave the user the ability to walk around a virtual world while the other rendered animated models with vertex interpolation. The virtual world engine suffered from some collision glitches I could never make sense of until I had proper internet access and seen other peoples white papers on the subject and realised that I was bouncing myself behind walls sometimes when colliding at a corner.

As well as writing virtual reality engines in C++, I was also interested in what is now called discourse analasys. I had a project called the Natural Language System and the object was to write a program where you could program the computer in English, using natural language. The project became very complex with all kinds of offshoots which got so far but were never complete. For example, one offshoot was a C3P0 type machine that would talk back to the user like a Mini-Eliza, except it would delve deep into the structure of the language to formulate a response rather than just reply with catch anything responses. The various uses of auxiliary verbs with and the way indictative verbs such as "is" could be broken down to be stored as "does be" was a lot of analytical work and by the time I lost the hard disk, without a backup, the big problems were structuring a dictionary to enable easy recognition of meaning from verbs and participles and the myriad nouns which exist and finding some clever means of "add ons" to the English language to get around ambiguities but I realised that a computer could never deal with the various nuances and subtle writings between the lines and any C3P0 would never be a match for a human. Im sure these techniques could be used to identify fake humans on the internet but it would take a human to carry out the instructions rather than a machine.

Alot of my work on C involves AF_INET sockets which I have used to create telnet, ftp, http, POP3 and SMTP clients. Its unlikely these would work on the modern internet today due to the restrictions of NAT firewalls employed by mobile network providers. I also wrote chat clients for both my own proprietry chat servers as well as chat clients which interfaced using the Yahoo Messenger protocols. I haven't written much in C/C++ since 2010, now mainly being focussed on the production of internet client/server applications.

Javascript/PHP

If javascript will work on any device and cross platform compatability is desireable, then the only thing holding javascript back is that it is relatively slow being an interpreted language. However big browser manufacturers are now employing JIT compiling and as you can see if you start up my javascript virtual reality engine , it may not be as efficient as the latest version of Fallout taking advantage of the latest hardware advances but its fast enough to write a fully fledged and fairly detailed online game. Compare this to the original Runescape written in Java by Jagex and you can see the reasons why I think Javascript will come to monopolise the whole programming world.

I've been using javascript from its earliest days before it could support object oriented designs. If you look at the website title at the top of the page and hover over it if you have a mouse, you see the kind of thing javascript was once used for. It could make a webpage a little more appealling by adding a gimmick or two. Just as Javascript is my main means of programming the client that an end user is using, I mainly use PHP at the server side to deal with the clients requests. I have used ASP, Perl, Apache, CGI and static content at various times, but since so much of the server side needs to by done dynamically, PHP is my lanugage of choice because it is both versatile and takes little more than adding it as a package at on the server.