Jamie Balfour BSc

Welcome to my personal website!

Technology enthusiast

I am very interested in technology, particularly relating to computer science. I am most interested in web design and development.

My main hobby is programming. One of my most well known products from this is ZPE. I also am the sole creator of BalfBlog, BalfBar and BalfSlider.

A little bit about me

In 1997, when I was six years of age, I got my very first computer. I was always very interested in the ins and outs of it and dismantled it to see how it worked.

Years later, in 2016 I received my BSc (with honours) in Computer Science, obtaining a First class degree.

I'd like to welcome you to my website and hope you enjoy using it as much as I have enjoyed building it!

Google Plus
Jamie Balfour BSc
Full stack developer

Personal Blog

For a fairly long time (since I moved into my halls of residence in 2013) I've been obsessed with something more than computers. Phones.

I'm not talking about smartphones, I'm talking about IP phones. VoIP or voice over IP is something I've been interested in since about 2003 when I got to use Skype for the first time. I found it incredible that we could do these things and Skype just kept getting better and better. But Skype had and still has one problem - you need a PC or some other device running the software to use it. 

As I mentioned, in 2013 I got my own IP phone in my halls of residence. I had longed to be able to test one like this so it was really awesome to get to test it for the first time. I had a Cisco one if I remember. About early 2014 I spoke with my father about getting an IP phone for the house and moving away from the standard PSTN (Public Switched Telephone Network) and with both of us being in some part of the computing industry (we both work with networking regularly), it seemed only right that we now trial this technology at home. In both of my previous offices, I got the wonderful experience of using IP phones, in particular, my last job, where we used Grandstream phones which had all the bells and whistles. I looked the phone we had at work up and to my surprise, it was only £70 odd to buy one on Amazon.  

Last Friday we officially began moving to IP phones across the house (and it's all been down to me to do it, but hey, I guess I've managed, even though it's been completely a new concept). SIP, or session initiated protocol, is the backbone of our new network. Our network is powered by a Raspberry Pi which handles all outgoing calls currently and will soon deal with incoming calls. Our original DECT analogue phones will be slowly moving to SIP, with one set of them moving this week and one will remain on the analogue line until we transfer entirely to SIP. My bedroom will use my new Grandstream GXP2170 (which was only £100 so only £30 more than I was going to pay and I got a much better phone). I'll also be finally getting my own private number in the house. 

As it happens, BT wants to switch the whole country from the basic PSTN to an IP based network to make it more competitive and it's a good move too. There's more about this change that BT wants to bring to us here.

I've finished setting up my SIP network. We've got a trunk for both inbound and outbound numbers. Asterisk on my Raspberry Pi deals with all calls and forwards them to all of three extensions (though we have more so we will need to fix that) in a ring group. If the call is a business call, i.e. one for Jambour Development, only two phones ring. If it's for the house, all phones ring. We also have voicemail and out of hours setup. 

Another new contract and another new technology. 

This month has been pretty good for me obtaining contracts; just finishing one at the start of the month, getting a new one at the start of the month and a week ago and a potential fourth one this following week. I aim to provide my clients with the best possible service I can, and if I say so myself, I think they are pretty happy with what I offer them at present.

For my latest contract, I've been working with Stripe, which in case you haven't heard, is a fantastic way to build in a payment method into a website. I have used PayPal's API in the past and found it to be very easy to handle, however, some websites demand more than just PayPal due to users not having access to PayPal or whatever.

With the latest contract, I am working on, reviewing the requirements specification document we formed, it's completely necessary to have a seamless, transparent payment system that allows users to quickly input their details including payment details. For this, I turned back to Stripe, which I have used briefly in an experimental website I was developing a few years back. Stripe is secure and easy to use. It also looks very professional. 

Let's talk API stuff now. Stripe provides an exemplary API, however, I decided to use the PHP wrapper found on GitHub to make this lightweight. I then made my own wrapper that transforms it into a reusable script across all of the sites I host.

The great thing about the API is there is no redirect or required way in which you process data, and you choose what you want to do with the finalised output of the form. In fact, you don't even need to take payment (that's a bit silly but it's true). You need to write a simple script that will process it after. 

The main benefit of this is that you can do all sorts of things prior or after the form submission such as sending an email of receipt or a notification of a purchase on the website. You can also add this to a database that stores what a user has purchased. 

But the main thing about Stripe is its ease of deployment. It only took me about 2 hours to get the whole site up and running with a test version of Stripe.

In the last few months since I setup my own server I've been experiencing something I didn't even know might have happened before now.

I'm talking about brute force attacks on each of the websites I host. None of them are at all clever and I've been mitigating these problems recently anyway. 

But before I had root access to my server I had no idea that these attacks happened so often. The last few days I have been blocking several IP addresses from SSH and website visits on the sites I host, but I'm starting to notice a trend.

In fact, this trend relates to a post I made when I first moved to WordPress. I haven't used WordPress for years and I'm happy to say that, because I wasn't a huge fan of WordPress. I ended my WordPress part of my website at the end of 2013 and I haven't looked back. However, my websites are still getting constant requests to access one certain file that doesn't exist. I'm talking about these errors in my Apache error logs:

  • /var/log/apache2/access.log.1:IP_ADDRESS - - [07/Nov/2017:12:38:28 +0000] "GET /wp-login.php HTTP/1.1" 404 28038 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
  • /var/log/apache2/error.log.1:[Tue Nov 07 05:37:02.133215 2017] [:error] [pid 30560] [client IP_ADDRESS] script 'wp-login.php' not found or unable to stat

There are hundreds of them! As a result, I've decided since none of my customers or myself use or will use WordPress, I'm going to block all wp-login requests.

If there's one thing you should take from this post, check your logs for the same issue!

Now that ZPE 2.0 is really progressing, I thought I'd let you know about how it is doing in this post. Note by the way, that ZPE 2.0 is my C++ implementation of ZPE.

To be honest, I haven't worked as hard as I could have on ZPE 2.0 as other things still take precedence such as websites I have been working on. However, ZPE 2.0 got a bit of work last night that adds several features:

  1. If statements (no conditions yet, but if, else and end if)
  2. Tree generator view (one of the first modes added to ZPE 1.2 because it makes it easy to debug the code)
  3. Memory management tools

What will need to come next is a bit of interpreter stuff. To be honest this is where things get more complicated and I will likely need to take a bit longer than before to build it.

It's been a while since I last worked on BalfBar but the latest improvement is a huge one! The latest update is version 1.2.

The newest BalfBar release brings a bunch of changes. Most important changes are removals which now includes the floating logo (BalfBar shouldn't manage this) and the Dark Mode (later named Alternate Mode). 

Let's start with why the floating logo / logo base idea was removed. In fact, let's start with why it came to BalfBar in the first place. Many of you will remember that I used the floating logo on my own website. This was removed in about 2015 when I changed to simply have my name. No body who used BalfBar that I know of was using this feature and more importantly, BalfBar shouldn't need to deal with minor things like this. It's removal was obvious and it makes the SCSS file much easier to understand.

Next, Dark Mode. One of the oldest features of the menu was Dark Mode, originally inspired by Mac OS X when it offered us a dark menu bar etc. I became a fan and decided to upgrade my own menu (powered by jQuery Smart Menus) to have this feature. When I developed BalfBar to replace it on my website I had to include the feature. Now I realise that even I don't use this feature. The main reason for it's removal is that firstly it complicates the SCSS file, secondly it will increase the CSS output file considerably and thirdly it can easily be added if needed by just compiling two SCSS files with the different themes anyway.

The SCSS file is now completely cleaned up and ready to use again. I'm also working on adding some new menu types to it including a large menu like I used to have. This will be sometime before it is ready though since my other projects are now taking precedence again.

I have now updated the JS file to work much more fluidly. However, no longer does BalfBar add a fixed_menu class to the HTML but only to the menu. This came from the idea that it's possible that two menus maybe on the same document at the same time, causing both to go to 'fixed mode'. It also allow it to remain more clean and succinct.

One more thing about the new change is that there is now both a desktop and mobile fixed height option. This also means the removal of the permanent mobile created in the CSS. To make a BalfBar instance always mobile, use -1 as normal.

The Zenith Parsing Engine 2.0 and a lot of the interpreting and compiling features are coming soon. 

ZPE 2.0 differs hugely from ZPE 1.x because it is being rewritten in C++. As you can imagine this is a huge job for me but I've already begun rewriting the amazing parser and will soon begin work on a compiler and later interpreter. 

It's easy work for me and I love it so there's nothing to worry about. I will also likely open source the project too :). We can work together to develop the best programming language ever! Let's make it powerful, fast and efficient with memory (I'll need to write some GC tool at some point for it, if you've got experience in this, please please get in touch and we can work on bringing it to ZPE).

ZPE 1.x will continue to evolve alongside ZPE 2.x and will continue to recieve updates until I officially declare that ZPE 2.x is powerful enough to do what ZPE 1.x can. 

Next topic, Dash. Dash is now on hold for the foreseeable future. No reason other than a lack of motivation for it for now. And again, the lack of motivation is not because of anything but since it's in a really good position I want to leave it for a while before I work on it again. 

I'm working on website hosting and websites at the present time, so both of these projects are taking a backseat for the current time.

Also, I will rewrite the SCSS for BalfBar in the next few weeks because it was getting a bit messy.

Also, my Halloween theme on my website is here for 2017! 

First off, I have been developing websites since early 2010, and then I officially became a web developer in late 2012. When I say that I became a web developer, it's because that was when I saw the change from being a standard desktop software developer (look at my previous projects such as Painter Pro and Wonderword) to a web developer and got my first contract in January 2013. Since then I've come a long way.

When I first learned web development in 2010, I did everything with tables - because I didn't know much about CSS and found it a scary concept. As I learned Java and PHP in my own spare time I eventually picked up CSS as well. This was when I started to actually think maybe web development was the right place for me. People started to notice my website and my works such as BalfBar and BalfBlog and so on. Now, years later my website development has become a bigger part of my life - I take on jobs again.

I left my job at the start of October with the intention of doing freelance work for a while, at least until I get in to teacher training because I know it's where my skills lie (and because I couldn't cope with the working hours plus travel to my previous job amongst other reasons). 

However, a few years ago I spoke to someone who had been developing websites (whilst transferring some sites to me) for some time and took some important advice. We discussed hosting sites ourselves and he told me that clients who host with you will be easier to manage than those who host with someone else, and they can get a much better tailored service. He claimed that he had been developing websites for about 7 years and manages them all himself. 

This bit of advice stuck with me for about 5 years but I didn't really act on it. Now after all those years of using different accounts for each website I built, I'm now managing all of my clients' websites. This makes both of our lives easier.

Be a good developer and host

I want to be a good web developer and host to my clients and I do this by offering them everything for so little compared with competition. My hosting and services are considerably cheaper than the competition but I currently only offer them as a single package - you can get a website created by me and I'll host it, the two are not mutually exclusive so you can no longer get a site by me and not have it hosted by me.

I offer a range of services, and maintain sites to keep them up to date with the times. I recently refurbished two of my oldest developed sites at no cost to the owner. You see, I actually enjoy this kind of thing, so doing this is a favour to me too.

To be a good host, I have a range of new things. For instance I moved everyone on my server from PHP 5.5 to 5.6 and now to PHP 7.0 and have enabled the OP cache and so on. I have developed a bunch of reusable tools for users and I'm prepared to install other tools that users need. I've spent a lot of my personal time learning about web server maintenance and I've become really knowledgeable about it so that my clients can experience the best.

Future updates

My brother and I have been discussing a business venture that would have a significant performance improvement for all of the hosted websites at no extra cost. To be able to achieve this however, we will need to get enough websites to host so that we don't end up paying for something that we make a loss on.

Today I'm very happy to announce immediate availability of ZPE 1.5.4. This long awaited update brings a ton of performance improvements and new features including:

  • Switch statements - a new feature to ZPE is the alternate way of writing a when-is statement is the standard switch statement (or case statement). This has been developed to be something of an aliase for the when-is statement, so it will compile to the same op code and will operate the same way etc.
  • Server based ZPE improvements - the server based ZPE will now create thread children that will handle requests. This is a very powerful and useful feature that will allow ZPE to operate much more efficiently on multiple requests at once.
  • Constant tracking - the compiler will now no longer permit constant duplication or reassignment and will halt when it finds this, saving on interpreter time.
  • New object declaration (finally) - in a move towards a more JavaScript syntax for object definition, objects are now declarable within braces as { name : "Jamie Balfour", color : "Orange" }. This new move makes it faster to declare objects, as well as making it tidier.

I'm sure that a lot of you will remember a lot of revolutions in technology, but perhaps the biggest one was when we moved away from parallel ports, slow serial ports and eventually even PS/2 and moved to USB. Eventually, the competition started to appear such as FireWire and eSATA, whose focus was mostly on storage as opposed to general (or universal) use. Both have pretty much vanished. eSATA attempted to side with USB by forming a combo port, but unfortunately did not last, partly due to the lack of robustness in SATA and eSATA cables and partly due to the fact that SATA as a standard has all but been replaced by PCI Express.

We all knew that when PCI-X and AGP were superseded by PCI's younger sibling, PCI Express, that it had come back with a vengeance. Boasting 2.5Gbps across a single lane all the way back in 2004, PCI Express was bound for success.

A single lane PCI Express card

But it's not until now that one of the things I've dreamt of has become a reality. Back in 2011, I proposed on my blog an idea to expand PCI Express into external GPUs through the use of ExpressCard - an exceptionally clever use of both PCI Express and USB to make a single standard capable of multiple speeds (sounds familiar, right?). Of course, eGPUs did exist for ExpressCard, but they were slow and cumbersome - not something many people would want.

Behold, Thunderbolt! Thunderbolt was original only capable of 10Gbps, which is the speed of a single PCI-E version 3 lane - that's a 16th of a desktop graphics cards maximum bandwidth. So next came Thunderbolt 2, capable of twice the speed, we're now talking about 20Gbps, and eGPUs were now actually possible. The problem with Thunderbolt 2 is that there were very few eGPUs made. One possible reason for this is because the majority of computers featuring Thunderbolt 2 were Macs. Not many PCs were built with the capability to use Thunderbolt 2, and it makes little sense to make an eGPU for Mac users since the majority of us don't intend to play games on our Macs and use them more for productivity. 

Thunderbolt now uses the USB-C connector

Of course, the natural successor to Thunderbolt 2 was Thunderbolt 3. Prior to the announcement of Thunderbolt 3, Intel was working on improving the old USB standard to feature a more robust, smaller, yet more capable USB connection. Since USB Type A and USB Type B already existed, USB Type C was the name for this connection. USB Type C, or USB-C as it is often referred to, offered up to 10Gbps over the USB standard, aptly named USB 3.1. Within a few weeks of USB-C being announced, it was made clear that the new USB-C connector (remember, USB Type C is the name of the connector, not the standard) would also become the connector for Thunderbolt (Thunderbolt has always been lazy since originally it used the mini DisplayPort connector as the primary interconnect for Thunderbolt). 

USB-C as the primary Thunderbolt connector meant that this new connector offers USB 3.1 speeds of 10Gbps, DisplayPort speeds of 17Gbps, HDMI speeds of 18Gbps and Thunderbolt speeds of 40Gbps, all over the one connector. To me this is awesome. This means so much will get replaced by this connector. 

Let's take a look at what this connector is directly capable of:

  • Thunderbolt 3 - x4 PCI Express Generation 3
  • DisplayPort 1.2
  • HDMI 2.0
  • USB 3.1
  • VGA - through DisplayPort
  • DVI - through DisplayPort or HDMI
  • USB 3.0
  • Native PCI Express cards supporting so many connections such as FireWire, eSATA, RS232, LPT and much more
  • PCI through PCI Express converter
  • Thunderbolt 1 and 2 devices

Because of the ability to connect straight on to the system bus (PCI Express), the system can indeed use many different PCI Express cards directly. 

So, whilst I originally was concerned that Thunderbolt would destroy all other connectors, the Thunderbolt standard seems to have added better native connectivity to older standards than before, which is amazing. One connector for all seems to finally be true.

I will admit, the last few months have been very busy with Dash improvements and I've neglected my own website.

Not any longer! I'm working on improving a lot of stuff. Things like email that used to work before my change to a VPS package just worked, but not any longer. For this to work, I'm going to need some assistance from PHP Mailer (I may just use Dash Mail to do this - the wrapper around PHP Mailer) and I'm going to need a new email address for my domain.

After working on Dash day in day out, I've become really obsessed with clean and neat code. Refactoring Dash became a hobby, not a chore. But now I've got a lot of work to do with refactoring a lot of my own website (just the backend stuff, so you'll hardly notice anything happening).

Anyway, at the present time there are a few issues with glyphs not displaying correctly, so if you do find anything wrong, feel free to leave a comment below.

Site accessibility

A lot of the original functionalities that once existed here have been removed.

To use project mode, the window must be greater than 920 pixels in width.
Click here to disable Project Mode.
This site uses cookies to deliver its services, to personalise ads, to store preferences and to analyse traffic. Information about your use of this site is shared with other companies. By using this site, you agree to its use of cookies.
Contact me
Contact Jamie Balfour

Get in touch with me via this form.