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
Me
Jamie Balfour BSc
Full stack developer

Personal Blog

ZPE for the last few months has been in the back-burner a bit, something I absolutely hate to have to admit, but it's been like this because of the fact that it's really such a complete language. This makes it hard to add new innovations to the compiler design and features to the interpreter. 

For a long time, Typo has been under development and unfortunately has yet to be released. During the days of BRS, Typo was an easy system to implement but because of the fact that ZPE focuses on speed of compilation Typo has been difficult to implement. 

The future of ZPE is not going to be about updating each version with new interpreter functionalities but focusing on tightly integrating the design so that it supports 'plugins' - but not plugins to add features but to add more built in functions. The standard library (stdLib) did this in a way that expanded ZPE using only the ZenLang code and in turn only used features that already existed to build a set of very useful tools.

ZPE's plugin system is powerful and efficient, so development of smaller functionalties is a good idea - it will also keep the size of the main executable file down to a minimum thus making it more portable for users who do not need all of the functionalities. I recently added a new function for testing if a built-in function exists so that applications can be independent of versions.

I hope you have enjoyed using ZPE to date and I'm looking for feedback. Version 1.4.4.3 includes the feedback command, so all you do is type into your code to leave feedback:

feedback();

Posted by jamiebalfour04 in Software

A couple of months back I was the victim to a website (not to be named) that was hacked and ultimately gave the information of it's users away that ultimately included my information. The reason behind this was that passwords were not stored in a effective manner. This meant that the minute you have access to the database you have access to all of these passwords.

What this now meant for me was that they had my email address and my actual address and began to subscribe me to many things I would never sign up to whilst also sharing my user name and password details on the web. It's a cold and horrible thing for someone to contemplate doing because I had done nothing to them in the first place for them to launch an attack at me. And to be honest the website who was a website who's sole duty was to help others - so it's pretty cruel to do that. Anyway, storing details about people in a secure manner is an important factor of online security.

What an unsecure database may look like

In a world where security is not a thing, algorithms such as the SHA (secure hash algorithm) would not exist in the field of security. In fact, the field of security would not need to exist. But unfortunately, because there are people who want to either steal something or just for the sake of it damage something, we have to compensate for this by developing secure ways of storing information.

In the world without security however, passwords could be stored as plain text - simply as they were typed in to the text input. This means that anyone who has access to the database can then scroll down to the appropriate field and read their password. Unfortunately however, if a hacker gains access to this information, they have access to the raw password - that's the password they can use to login to the system. This is not good. So database designers and web developers and so on go a step further and use some kind of algorithm to conceal the password.

How to store sensitive data effectively

When data like a password is put into the database it should be encoded using some kind of algorithm.

The first way of storing passwords is to create or use an encryption algorithm to encode the password and a decryption algorithm to re-obtain the password from the cipher text. This method is uncommon because it means that there is at least one method to decrypt the password in the database, and therefore leaves open a security vulnerability (if someone obtains this decryption algorithm and the key needed to decrypt the passwords, they can simply decrypt every password and it's easy enough to figure the key out if you have a password and it's cipher text). 

The most common algorithm is the SHA because it's been guaranteed to have a one-to-one mapping from the plain text to the cipher text - meaning that no two passwords generate the same cipher text. When this algorithm is applied it is designed to be irreversible, that is it is impossible (or at least near impossible) to figure out what the original text was (at least without going through each combination of characters and testing it against the cipher text). This method is more secure than the former since it does not offer a quick way to take a cipher text and turn it to a plain text. 

These are just two ways of storing passwords but you can probably find other ways. I use a combination of both on my website (my own hashing algorithm and my own encryption algorithm on top).

Apple's 2016 event was hyped to be about the new iPhone 7 and Apple will not disappoint. Other things expected included the wireless EarPods and the removal of the 3.5mm jack on the iPhone. 

I'm hoping for a change in the stupid design of the Apple Magic Mouse and having the Lightning connector moved to the top of the mouse so you can use it whilst it charges but that's likely not going to happen.

Anyway, the presentation begins soon so I'll need to begin writing since this post is now live.

Apple + Nintendo

This might sound too good to be true, but I'm happy that Nintendo chose Apple to release their new Mario Run game. Firstly, seeing Miyamoto at the Apple Event was absolutely awesome. The game looks good fun for a mobile game (I'm not a huge fan of Mario games on my Wii U).

Hopefully this move will lead to more collaboration and more games from Nintendo on our Apple devices.

iWork update

The next big thing to be mentioned was the update for iWork. This update adds real time collaboration with colleagues or the like using iWork applications. This is very similar to the way that Google Docs works or whatever.

Apple Watch

Pokémon Go for Apple Watch

Niantic, developers of Pokémon Go, are now bringing Pokémon Go to the Apple Watch. It's more convenient than checking (or staring) at the phone screen and I think although the audience didn't look too interested, I think it looks great.

Apple Watch Series 2

Whilst it was predictable that Apple would make the next iteration of the Apple Watch more waterproof, the way it has been designed is phenomenal. The speaker that is used to expel water after a swim is well thought out that only Apple would do. The screen has been revamped too, now with a brightness of 1000 nits. It also now includes built in GPS. It now also features a dual-core processor.

Obviously, Apple have also released some new designs too. Nike came on to talk about their new Nike Plus Apple Watch which attempts to motivate you to run - to me perhaps the most useful reason for me to get an Apple Watch since I cannot ever motivate myself to get out and run!

Apple have priced the Apple Watch Series 2 at $369 and renamed the original watch as the Series 1 and priced it at $269 and added the same dual-core processor found in the Series 2.

Pictures of the Apple Watch 2

The new Apple Watch Series 2

iPhone

Apple has now sold over a billion iPhones - making it:

The best selling product of it's kind in the history of the world.

iOS 10

You can now raise your iPhone to activate it. Machine learning has been added to the auto correct in the keyboard. HomeKit has had a major improvement, adding it the Control Center and adds hundreds of support. Tim Cook believes that HomeKit is going to be a big deal.

Messages is getting many new features including stickers and the ability to send payments using the messages app.

iPhone 7

iPhone doesn't always excite me - I'm more in to the Macs, but I'm excited this year because it's the tock in the Apple tick-tock cycle.

A 'gorgeous new design' according to Cook. The new iPhone 7 actually is beautiful and it's high gloss back looks absolutely amazing. It's made using as few parts as possible, making it more solid than previous versions. The antennas have been far better hidden and don't look as ugly as before. Here's a picture of the new iPhone 7 in gloss black. 

Pictures of the iPhone 7

The gloss black iPhone 7

As expected, the iPhone's home button is getting taptic feedback and the iPhone is being made water and dust resistant. It's classified as IP67. 

The camera is still a 12MP but has a better flash LED. Phil Schiller also explains that the images are much better and showed some examples that shows how good it is when the object is moving. The iPhone 7 also features a new 7MP front facing camera. 

The iPhone 7 Plus now features a 2x optical zoom. A nice addition but not enough yet and I will stick with the simple iPhone 7 if I get it.

However, the addition of the portrait feature might sway me, since this allows you to take a depth of field photo - and they do look amazing. Here's the picture shown in the event:

Depth of field photo

A depth of field photo taken on the iPhone 7

It's about time but Apple has finally added stereo speakers to the iPhone 7. Another expected change was the move from the 3.5mm audio jack to the Lightning connector - something that is nice but will take time for people to change to. Apple has kindly included an adapter from Lightning to the 3.5mm jack. My main concern now is how this will work with my next MacBook Pro (not considering one at the moment).

Next: Wireless EarPods, known as Apple AirPods. I must admit, I really dislike the looks of them and really wouldn't go around with wireless waves going through my head like that but they may appeal to some! 

Apple has added their latest quad-core CPU to the iPhone 7 called the A10 Fusion - 120x faster than the original iPhone, 40x faster the iPhone 5 and 2x faster than the iPhone 6. It's design is unique in the sense that it runs two cores on low performance mode which are designed for processes that require less power and this should make it more power efficient. In terms of graphics, the new graphics processor is 240x more powerful than the original iPhone's graphics processor. A sample of this was shown where we get to see 400 flying monkeys. Phil then tells us that:

Nothing quite shows the performance like 400 flying monkeys

Apple claims that they have improved the battery life over the iPhone 6. We'll see about that.

As always, I'm happy to hear that Apple manufactures using the most environmentally friendly materials available. 

The end

As always the event finished with a song and I must admit the song was a dreadful choice in my opinion, but that's just me. I was also disappointed that no new Macs or a new iPad were announced today. Overall the keynote was good and the iPhone 7, which dominated the keynote, looks beautiful.

I was a bit disappointed to find out Apple is not offering the 32GB model (which is now the base model) in the Jet Black model, but as I have a 64GB version as it is I may choose the 128GB anyway. I still believe this will be an off putting factor for many.

ZPE production has currently stopped as I have decided to focus on my other projects a bit more at the moment. These projects currently include BalfBlog and my PhD. As a result ZPE production has currently been halted. This is a decision that has been made since ZPE is currently pretty stable and is already very impressive. 

ZPE was never meant to be just another programming language, simply a little project I've been working on, and one that's given me a great insight into building a compiler and a language, as well as given me a lot of fun and something I can actually use to do some tasks.

The primary focus for me now is on the improvement of BalfBlog which is currently pretty stable too. BalfBlog needs new features added to it to make it more powerful and useful, but as I say it's pretty much done now anyway. 

When I first released my website, there were occasional pages with expletives within them but as my website became more and more public and eventually used within my role as a teaching assistant I had to make the decision - remove them all or just hide them.

At first, the latter appealed to me more. I developed a JavaScript (using jQuery) script that would simply hide the words and show them when the user hovers over the word. I have since decided to remove this in favour of removing the words altogether but I thought I'd share my original code with you:

JavaScript
//Swear words
if (showSwearing) {
	jQuery(".swear").mouseenter(function() {
		var sword = jQuery(this).attr("data-sword");
		var nword = jQuery(this).html();
		jQuery(this).attr("data-nword", nword);
		jQuery(this).html(sword);
	})
	.mouseleave(function() {
		var m = jQuery(this).attr("data-nword");
		jQuery(this).html(m);
	});
}

This very simple script works on the basis that each word contains an nword (normal word) and sword (swear word) set in the data attributes on the span element that contains the word. As I say, it's a simple little implementation that works well enough for the job, but you could do it quite easily with CSS.

BalfBar has had a significant improvement to make it even easier to get your website the way you want it. You can now forget about setting the height when BalfBar becomes a fixed menu - it figures it out itself. Now all you need to do is tell it you want it to check for this and it will make the decision as to when to float the menu.

On top of this, a significant chunk of JavaScript has been removed from the core, making it much more streamlined and lighter. Suggestions for future versions can still be made on my website.

I'm very happy to say that I have kept my word on website changes in that I haven't made major changes to the structure of my website in the last year. Minor usability tweaks have been made but nothing major, and a lot of the stuff that I have changed has remained quite consistent with the 'new' flat interface.

General tweaks to make the site more efficient with bandwidth and processing time have been made and as a result, I feel that my website is much better, even better than it was a year ago when I made the change to remove a few hundred lines of JavaScript and CSS and made my website much flatter.

If you feel the same way, please leave feedback, I'm really interested to know. Also, my website achieved 1000 people each week this month - by a long shot the best result to date. It has also moved up 11,852,082 places in the Alexa ranking system as a result of this surge in the last month alone. 

Alexa Ranking

I think a lot of the improvement on my website comes from the fact that I have not been focusing on these changes and ensuring that there is good content on my website, as my blog is now one of the most viewed parts of my website and my reviews are not far behind. 

A lot of the time changes are now directly to improve the DragonScript concept for a more efficient server side website. I have also been removing bits and bobs from the accessibility menu, since I no longer feel the need for this.

However, as a suggestion was made to me to do this, I will be updating my website with a new cover picture-esque thing like Facebook pages have. This will likely be a picture of Perthshire or somewhere in Scotland.

Whilst I only suffer moderate depression compared to what I had at first, I do still suffer. Occasionally I get very 'down'. When you get like this the anger starts to build, you get very angry with myself over nothing, overreact to situations and you contemplate why you're in the situation you're in. All of these are pretty normal side effects of depression.

People blame you for your way of reacting - they never quite fully understanding what happens inside your head. This is because they don't understand what depression actually means. When I get down without knowing why and ask "why are you angry?" or "why are you sad?", the truth is, there's no reason. And more importantly, I cannot figure out how to stop or prevent it.

But I've figured out why this is. It's down to the fact that we are not trained on what depression is and how to deal with it. At no point in our lives are we ever told what depression is and how to cope and more crucially, deal with it. 

There's a lack of information available on depression1, and a lot of it is highly specific. When you go and see your GP for instance, they will give you a pill, or in my case send you to a professional (all that the professional did was diagnose me as clinically depressed and ran some tests on my congnition and so on) or send you to a counsellor who will talk with you. All of these are good in the short term, but knowing things for the long term is far more important - and even with the support I've had at home and so on, depression still manages to creep back in. 

Explaining the problems caused by being depressed to friends and family is difficult since in most cases they've never had a problem like depression themselves. I'm telling this from experience because I knew someone who was depressed before I was, and I did not understand or see what depression actually was at the time. There's a lack of information for them too.

I also find that depression drugs and treatment do not work, and more importantly leave you with more problems than you had at first (at least some of them). There is evidence also that describes what I am describing - the side effects of depression drugs can actually be pretty severe2. There are medications out there will do the job, and some of these are herbal, but a lot of these drugs are risky to say the least.

So what's next? For a start, more information on what depression means and what the patient may be suffering from. Knowing when someone is depressed is pretty important, and it can be preventive of something more serious. Also, there needs to more information on keeping people with depression safe, because when you go into these downward spirals it can be very difficult to get back out. If there was information on methods to prevent this that you could use yourself (I occasionally get these and choose to watch a film or go on a walk on my own) it could prevent the downward spiral from even really starting. Finally, and perhaps most crucially, there needs to be far more information on the effects of the drugs that can be taken for people with depression since so of these drugs may have adverse side effects such as becoming further depressed or anxious. I took on some of these drugs myself when I was really bad, and I found that although they helped with my depression they made me far more anxious.

As HTML, CSS and JavaScript keep advancing, the power that resides in your web browser grows. More can be done efficiently and interactively with JavaScript in the web browser, and with server side languages doing back-end processing. As a result of this, more and more software applications are being written in web languages instead of standard systems languages such as Java. 

This post has come to be because of something I noticed the other evening when out for dinner at one of my favourite restaurants - they were using Google Chrome to manage orders and so on, this was the first time I'd ever seen this kind of e-commerce application.

I'm a huge fan of web technologies and developing for the web, but I'm not entirely a fan of the use of the web to develop every bit of software required out there. For a start, none of the languages used on the front end are compiled before being sent (now this would be a good idea for JavaScript) so it's easy to manipulate them with some kind of other underlying program (such as a virus). This could indeed by a security problem that could be avoided by a compiled program written in a language such as C. Also, as JavaScript is an interpreted language, it is interpreted considerably slower than that of a compiled program.

But web based technologies do offer some major advantages that can be seen as the main reason for their use.

The first is that they are available on any computer with a web browser. This also makes them platform independent since the web is a single standard that must be implemented by all web browsers. It also means if they are on a server somewhere, they can be accessed from anywhere and indeed do not need to be installed.

The second reason is because of the kinds of tasks being performed in these applications are relatively simple and do not require the full power of a system. As a result, the JavaScript scripting language is sufficient for performing these tasks and therefore cheaper too.

The third reason relates to user-preference as web-based applications offer a much easier alternative to other applications when it comes to setting user preferences. First off, we have cookies and session storage. Both of these let us save information for later and quickly restore it, and there are plenty of APIs for using this kind of stuff. Secondly, CSS makes it really easy to style items on the screen and is far more favourable for most companies out there.

Processing performance is a big advantage here too since we can do major processing on a server that is connected to the application rather than doing it on the local machine. This is a huge advantage that can help with mission-critical situations, such as a traffic monitoring system. 

Another major argument is scalability. Whilst some desktop languages really suffer as applications grow, web applications are by nature sub-divided into smaller programs and can be seen as more scalable. Expanding an application written in web based technologies does not need a full redeployment of the application, simply that a user refreshes the page. 

Security is also a huge advantage now, at least in terms of keeping parts of the application safe. This is because the code that is stored on the server will never be transferred to the client, so you can keep all of the secure stuff away from the users of application. This all makes it less likely that the application will be misused by its users.

Finally, the main argument for many developers, including myself, is ease of development. HTML, CSS, JavaScript, PHP or JSP are easy to develop for. It is this argument that draws most developers to it.

As many of you know, I'm a huge fan of the Warcraft game series and since the very first game I ever played was a Warcraft game, I've always been not only entertained by the series but fascinated by it's lore. 

Once about 10 years ago, slightly after the release of World of Warcraft, I declared that I could not play the game because of two reasons. The first of those was the price of £8+/month and the second was that I believed it would ruin the Warcraft story lines. 

Well today, I tried out WoW for the first time (and I've been wanting to do this for a long time, but I really do not like the idea of playing it on my own). My opinion has changed. I learned so much about the mechanics of the game today (I thought at first that players battled each other constantly, it seems I was wrong!).

Today I even got the pleasure of experiencing a moment I remember from 14 years ago when I played Warcraft III (my favourite game of all time) for the first time when I saw King Terenas' throne room.

King Terenas' throne

An amazing sight - King Terenas' throne

All of this is enough to convince me that this game is for me. 

I obviously thank my good friend Calum for finally making me see sense and getting into WoW!

Site accessibility

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

This page was generated in 0.31 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.