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.
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.