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

I’m selling a few things to try and get funds for my teacher training course (which I need to pay for) and sell some things I no longer use:

  • A Dell S2340T touchscreen monitor (Review)
  • An Asus PA238Q LCD IPS monitor (Review)
  • A Fujitsu Lifebook Convertible tablet T4410 (Review) and docking station
  • A Limited Edition Zelda A Link Between Worlds 3DS

To discuss some prices, get in touch with me

I have decided to deploy a blog for BalfBlog updates on my website. Since I have multiple (infinite) databases on my server and plenty of storage space, I thought I may as well create a more dedicated blog. This blog cannot be subscribed to and I currently intend to keep it that way. Major updates will likely still be repeated on my own personal blog. 

You can subscribe to the new RSS feed feature by just clicking the button on the front page.

For now the biggest update is the RSS which was added earlier this morning.

I will update the ClickIt and Zenlang websites with these updates.

BalfBlog 2.1 will be known as the social update. The reason for this is because the core focus of version 2.1 is on integrating social media much deeper. The plan is to allow you to post to the blog and automatically BalfBlog will post to social media. I will also bring RSS feeds into version 2.1.

I'm hoping version 2.1 will be released before the end of the summer.

Happy birthday to the most awesome tech company Apple! 

Today Apple becomes 40 years old! I remember quite a lot of Apple through my life, and I definitely remember my first personal Mac which I got in September 2011 and since then my love for Macs has defined the way I work. 

Tesla, who just so happen to be one of my favourite companies, are unveiling their latest electric car - the Model 3. I am very excited by this mainly from a technology perspective but also from an environmental point of view. 

Teslas current lineup of cars are absolutely stunning, and it may seem like a dream right now, but I am very interested in the range and some time in the future I would love to own one (it will likely have changed by the time I get around to looking at buying one).

Tesla are a fantastic company who build things to an outstanding degree as I noticed when I was in one of the Tesla Stores. They also innovate way more than other car manufacturers, so kudos to them. 

I am excited by the Model 3 however as it will have a lower price point than the other models and it could possibly be the next car my parents buy. The future is electric and I'm hoping the Model 3 proves this further. 

The latest version of BalfBlog is everything a perfect blog system should be - lightweight, compact and easy to update. I'm very happy to say that the latest version, which I will put up on my website later today, is all of these things. 

Equally as important, the new version of BalfBlog creates SEO friendly URLs. For instance, my latest post on my blog (prior to this one, of course) now has the following SEO friendly URL, automatically generated: http://www.jamiebalfour.com/blog/posts/one-weird-issue-with-older-html-based-bgcolor

SEO URLs-friendly URLs

Since the update was applied to my personal blog, my SEO rating has gone up. URLs are based on the title of the post so they become more easy to read and identify what the page at the end of the URL actually is. Google likes this.

Categories can also be accessed in a more friendly manner:


And finally, tags can be accessed through a much more elegant way too:


Updating to the latest update is easy enough at the moment, since you simply download the latest version and copy across the balfblog folder. However, future versions starting from next month will have their own installer. This installer will update the blog automatically by downloading a zip file from my web server and unzipping it to the appropriate destination. I still have not finished the initial installer either. These will come with time.

Also, BalfBlog now uses prepared statements for speed, security and ease of updating.

In the old days, before CSS, background colours were set using the bgcolor attribute as below:

<html bgcolor="rgb(255, 0, 0)">

But since this is quite an old way of doing things and not used often nowadays, you'll probably find it has a lack of support in some newer browsers like Google's Chrome. I came across this issue when I was trying to make the background red by using rgba(255, 0, 0) which would normally produce red and does in other browsers, but in Google's Chrome browser it produces a totally different colour. I believe this is because Google did not spend much time working on support for this older attribute that should be banished from HTML5 altogether. Below is a sample that may or may not do anything at all:

Hello world

Have you experienced this issue where the colour value represents different colours on different browsers? If so let me know by commenting below.

Five years after the last update to Diablo II, the fans get an update that makes this amazing game compatible with Windows 10 and Mac OS X 10.10 and 10.11. This came as a shock to me and hundreds of other fans across the world who adore this game as much as I do. 

The game which is 16 years old has long had problems with not working on modern operating systems, so this update is a hugely welcomed update. This really shows the commitment that Blizzard have to their fanbase more than anything, and what a commitment this is too.

I have been working quite a lot recently on my latest project, ClickIt. ClickIt is a web development tool using the new HTML5 drag and drop standards. It has been working fine with all browsers until very recently I discovered it had an issue with both Mozilla Firefox and Microsoft Edge. I have in the past stated my dislike for Firefox after it made my life much harder in one of my courseworks last semester and now my anger continues.

Chrome, Safari and Opera cover a reasonably large base of users but for full compatibability, I'm going out of my way to try and fix an issue which I don't even know what it is. The original problem occured when I used the W3 standard for drag and drop and did this:

function DragBlock(ev, mode) {
	setData(ev, "mode", mode);
	setData(ev, "text", ev.target.innerText);
	setData(ev, "style", ev.target.getAttribute("class"));
function setData(ev, x, v){
	ev.originalEvent.dataTransfer.setData(x, v);

The problem however is that when I then try to retrieve this information, none of it exists. It does in Chrome and Safari, but not in Firefox or Edge. If I find a solution I will post it here.

My good friend Merlin managed to discover the problem with my implementation, and it's hardly obvious nor expected! The problem actually occurs with the ev.target.innerText function. This function is not supported in Edge or Firefox, but is in Chrome and Safari. So there you have it. My problem is fixed.
Another update on the situation: I fixed the issue altogether after I learned that the first parameter to the setData function is actually not the name of the value but the type. For some reason, Chrome and Safari accept this as the name anyway and transform this to a map from the name to the value (or in this case x -> v). Instead of messing about with this, my solution, which is somewhat crude, is to use a global variable which in turn is a map from x -> v. Since I put these in functions, my functions were simply changed to modify this global variable upon request and retrieve information back from it. This solution is as I say crude since it relies on the fact there is only one object being transferred. I am most puzzled by the fact that the issue is totally different with Safari and Chrome and that they work this as if it were a map.

Whilst I was working on a university project, I started to add some extra functionalities to change the image in a canvas. A lot of this reminded me of my BBCL (Balfour's Business Class Library), which you will probably know was a collection of business made functions written in VB.NET a long time ago (started in 2008). It reminded me specifically of the Painter Pro extensions of this .NET library that I wrote that also contained functions similar to this.

Because of this, I've decided to make these available as a single package JavaScript file. You will soon be able to download this from my website. I plan to bring it all to JavaScript, including unique features such as the I Want It There tool. 

Site accessibility

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

This page was generated in 0.32 seconds using 6291456 bytes. Slow? Let me know.

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.