Jamie Balfour

Welcome to my personal website.

Find out more about me, my personal projects, reviews, courses and much more here.

Jamie Balfour'sPersonal blog

We all know that responsive designs are the way to go. For a long time now my website has been fully responsive, but one of the features I used that was developed by someone else was the responsive table. For as long as I have had it in use on my website I have disliked it.

I dislike it because it shifts the first column of the table to the left, essentially floating it above the rest of the table, whilst letting the user scroll the rest of the table. It created an ugly, ugly mess of things being thrown all over the place. Alas, finding the best solution for a responsive table could be much easier.

What about using an overflow:auto and display:block on it? Good idea, but the problem is that now the tables will not stretch the full width of the container.

The solution I am now using is a combination of JavaScript and CSS. The solution involves using jQuery's wrap function like so: jQuery("table.responsive").wrap("<div style="overflow: auto;"></div>");which will wrap each table with the class responsive in a scrollable div (see, very little CSS and JavaScript). Also, by giving the table inside a minimum width of 100%, they will always stretch the width of their container (which is the wrapper div), ensuring that they are always 100% of the content.

The problem though is with the interaction design side of things - how are users supposed to know when they can scroll some table in the middle of the content?

After reading a few articles, I found a comment in one of the websites with a link to this page. This allows you to make scrollbars always visible - something that should not need to be hacked together but should be a CSS feature, but Apple and Google don't agree with this so we do need to hack it together.

Although this does not guarantee that users will notice the scrollbars, it does leave some possibility that they might notice them.

Tables are a difficult thing to work with and making them responsive is one of the most difficult things to do in terms of usability. Let me know if you have any solutions to these problems.

Here is an example table, resize your browser or use a smartphone to test it.

Name Platform Year Sales Revenue
Warcraft: Orcs and Humans MS-DOS and Mac OS 1994 1,100,000 $45,000,000
Warcraft II: Tides of Darkness MS-DOS, Windows, Macintosh, Saturn, PlayStation 1996 1,000,000 $50,000,000
Warcraft III: Reign of Chaos Windows and Mac OS 2002 3,000,000 $175,000,000
Warcraft III: The Frozen Throne Windows and Mac OS 2004 5,000,000 $95,000,000
Posted in Web Design
responsive
table
tables
design
css
javascript
js
style

Tonight I am happy to announce the next version of ZPE, version 1.4.4. This is next stable release of ZPE that can be used for production and it brings a variety of new changes including:

  • The revamped LAMP parser introduced in the update versions of 1.4.3 (i.e. 1.4.3.10 and 1.4.3.40)
  • A better LAMP interpreter
  • The new Try-Catch statements
  • New increment and decrement operators (+= and -=)
  • Added string concatenation through the concatenate operator
  • Better error handling and better internal error messages
  • The hashing algorithms (SHA and MD5)
  • The associative array now uses the => instead of = to make an association
  • Objects and structures have merged into one
  • Added scopes (public, private and friendly) to variables
  • Made the interpreter more efficient with memory and less likely to crash

ZPE 1.4.4 which is the stable release of the beta updates of version 1.4.3 is the best version of ZPE to date and it is by far the best version I have released! I have finally finished the core of ZPE and no longer need to add any more constructs to the main language (although you can suggest some if you'd like). I cannot tell you what this feels like to finally have the language work like any other language out there but to have achieved all of its aims.

The future of ZPE

The future of ZPE is going to focus on conversion between languages and the standard library. I will leave ZPE at version 1.4.4 for the foreseeable future since the version numbers tend to come from the fact that an internal feature has been added to the compiler or interpreter. Of course, if bugs are found they will be fixed and ZPE updated. 

In the meantime, I will hopefully begin the construction of a formal language syntax for the language. This will take some time but it should be pretty good fun too. I will be focusing on improvements to the internal documentation of ZPE but I do intend to take a step back from the main development. 

My final remark

I really cannot believe that I have ticked all of the original boxes in ZPE as of today. Concatenation being added just today was the very last step into making the language perfect and now it is (or at least in my eyes)! I hope you enjoy using the latest and greatest ZPE I have ever made! 

Help me to make it to 2,000 downloads by next month by spreading it! (it has been downloaded just over 1,000 times and the ZPE pages is my most popular page on my website after my personal blog).

ZPE 1.4.4 has been released to my Download Center as a free download. Enjoy.
Posted in Software
zenith
parsing
engine
zenlang
zpe
1.4.4
1.4.3

I'm not really doing much on my website in terms of design but I am simplifying my website by removing things I no longer deem necessary. The first of those was the removal of Dark Mode (a feature of BalfBar and always will be, but not of my website any longer) since I was always in favour of the dark menu myself and will not be letting users choose the light menu any longer. I have also removed the invert colour feature of my website as of recently and will next be looking at removing the max page accessibility feature and the font size changing features. I will also look at removing other accessibility features and I'm not sure where it will end. 

Posted in Website news
website
update
customisation
removed

Whilst I'm posting this in August (wow, August already), the July update of ZPE, known as ZPE 1.4.3, is by far the biggest change to ZPE since 1.4.0. Although a lot of the changes described here were marked as being under version 1.4.2, they were only available as part of the experimental mode during that version.

This update is a huge update to the RMM parser and replaces it (largely) with the LAMP parser - a logic and mathematical parser. 

This update makes it more efficient as both logic and maths are processed together. ZPE 1.4.3 also reduces the size of compiled programs and improves the efficiency of the code when interpreted. Another major change that was brought in was the unification of logical symbols - the word "AND" is the exact same now as "&&". This will again improve the efficiency of the interpreter and reduces the number of checks done there. Logical and mathematical expressions are now also assessed (not evaluated) as to being a logical or mathematical expression at compile time thus reducing the time spent assessing at runtime. 

1.4.3.10 fixes structures as promised and unifies them with the object type with a bit more flexibility. Global variables and constants can now be assigned to be public, private and friendly within scripts, giving more power over their scope. 

1.4.3 also drops the XOR from the logic parsing, but adds the xor function to the built-in functionalities. 1.4.3.10 also made a change for associative arrays since they no longer use the = sign to represent an association but the => symbol. I had many people saying they liked this in PHP when I did my feedback request in June and I had been planning to implement this since version 1.3.4 but it was still in the backburner. At last, I can finally say this is done (whilst this will lead to larger programs since there is one extra character, compiled programs will still be the same in size).

I deem this to be the best and most complete version of ZPE: 1.4.3 officially brings an end to my monthly update system (which has largely been kept to, but has occasionally fallen behind). 

The next version of ZPE aims to bring in enumeration, although it is yet to be decided whether or not this is fully necessary. 

1.4.3.10
update
july

I'd like to remind everyone that tomorrow (July 29th 2016) is the final day you will be able to upgrade for absolutely nothing (yes for free!) to Windows 10. This is the last chance you will have to update to the latest version of Windows at absolutely no cost, no quibbles and it's not a trial version.

I certainly believe that Windows 10 is the best Windows to date, and believe that everyone should upgrade and give it a try since it's free and going back the way is easy enough. I also believe that not trying it is a big mistake and that not installing it at all would be silly! 

So give it a try!

Posted in Tech news
windows
10
free
upgrade
expire
end

Java is a great programming language and platform to work in but in it's best moods it is, at best, a pain.

Today I fixed a huge issue that I thought was just with Java, but discovered it was so much more than just Java's fault. An application I use on my Mac called Flexiglass was causing problems. 

When I open a menu item within a Java application (such as the basic GUI builder in my ZPE editor) I get the following error: 'component must be showing on the screen to determine its location'.

This comes from Flexiglass, since Flexiglass changes a few system properties and therefore interferes with Java's menu system in some way or another. Anyway, the fix is to turn off the two checkboxes as pictured below:

The fix

The simple fix is to switch off two checkboxes

Posted in Apple Corporation
os
x
flexiglass
window
problem
showing
java
component

Whilst I officially released version 1.4.3 last week, I have been updating it with new features and updating the download file as I do this. Since finding a small flaw, I have been working on fixing it leisurely since finding and solving the problem was not too difficult. I've not been updating the version number of these versions since I've released version 1.4.3 as a beta version so far. Nonetheless, version 1.4.3 is not finished. 

Anyway, the improvement I have added today is the long-awaited break() command. This function is void, meaning no return value, but it will quickly break you out of a loop you've entered - much faster than the return statement. So go on, give it a try; it's pretty good!

1.4.3 also removed the XOR statement from the logic parser. I want to remind you that there is now an xor function to do the same thing. 

1.4.3 is by far the cleanest version to date, and it tidies up a lot of the mess left from version 1.4.1 and 1.3.7, which were the hacked-together versions. 

Also, you are probably wondering about the name of this post since it talks about Isla de Muerta. Isla de Muerta is the name of the fictional island in the Pirates of the Caribbean films where the Black Pearl (aka the Wicked Wench) is anchored and is the name of version ZPE 1.4.3. The name was chosen because I'm a massive fan of films and Johnny Depp, mainly because I've been watching them all recently. I plan to name the following versions after things related to these films rather than after lochs of Scotland for now (I did name versions of my Data Project application after Scottish lochs for some time, too, but since I dropped support for it, I decided to continue the naming over to ZPE when it began).

Posted in Software
zpe
zenith
engine
zengin
1.4.3
isla
muerta
pirate
of caribbean
pirates

Whilst I do use technology on a regular basis and find using my Mac straightforward most of the time, there are things that Apple is doing that make macOS as it will soon be overly complicated.

I talk of things like deeper cloud integration and, in particular, security measures. As a result of Apple's move to making macOS a secure platform in a similar way to the closed iOS operating system they develop for mobile devices, macOS will be a very tight and secure system, making developers' lives much harder and making it much harder to tweak your system. Closing the operating system more and more, Apple has chosen to make it now so that you cannot download apps from the internet and run them unless they have been signed. This is very bad for me since I use things like NoSleep to keep my MacBook awake when I shut the lid amongst others. Apple's closing of the operating system is reminiscent of when they closed the hardware on all their machines - taking out the ability to remove your RAM and replace it with new stuff and making it more expensive to replace the SSD, a move that nearly put me off Apple altogether. 

As well as this, the deeper cloud integration that Apple has been implementing recently has become overly complicated. Keychain is one of my favourite tools of iCloud, but it's also devilishly annoying when it comes to a system reformat. iCloud Keychain can also be an absolute pain when it comes to changing one's password. All of this makes me wonder why I bother with Keychain, oh yeah, my passwords are all stored on it.

Tell me what you think then, do you find that Apple's attempts to become more closed than ever is a good thing? 

Version 1.4.2HA is the current alpha version of the next ZPE and it's the biggest change to ZPE in the history of ZPE, a lot of code written in version 1.3.x has been replaced with much more efficient code, particularly with the evaluation of conditions and maths.

Real Math Mode was added in version 1.3.5.60 but it was always up for evaluation. The compiler side of it was written in a way that allowed the compiler to 'peek' at several symbols ahead of the current symbol in the traversal. Brackets were considered mathematical, so if a mathematical symbol wasn't found, ZPE would assume since seeing brackets that it was a mathematical expression. That meant that logical expressions were never considered on this expression. 

Now in ZPE 1.4.3 (which I will hopefully release soon) mathematical and logical expressions are compiled to the singular "EXPRESSION" token and then, at runtime are evaluated to a mathematical expression or a logical expression based on the first token found. 

E.g. 

+

55          33

Would make the interpreter realise this is mathematical, not logical. With the following it would also realise that this is logical:

&&

true        false

And this is because it sees an AND token (&&). 

What about brackets though? Well, the interpreter will skip through brackets going right down to the base and do exactly the same with that. Easy.

This makes the compiler also more efficient and certainly more reliable.

I have just recently finished the compiler side and the interpreter side was easy enough to modify for the new system. 

Much of what made ZPE the way it was back in the day has been replaced with a fresh system that does less work, has lead to much fewer traversals and makes far more sense. Logic is evaluated in the exact same way as mathematical expressions. By doing this, the system follows the orders of precedence where AND will always be evaluated before OR. 

As a result of the change, the factorial problem as I know it as currently, has been fixed, so $z = (factorial($n + $r - 1)) / (factorial($r) * factorial($n - 1)) now works without the 0 + at the beginning of the first brackets.

This update also eliminated the need for the compiler to peek at the next bunch of symbols until it found a terminator or a mathematical or logical symbol. 

Update 1.4.3 has since been released and trialled. I'd like to thank Merlin for pointing out a few bugs within the new LAMP interpreter.

Version 1.4.3 changes what was described above and assess the expressions in the compiler to mathematical or logical, thus removing this from the interpreter. The system still works the same.

Version 1.4.3 drops support for XOR in a statement since it was far too complicated to parse correctly, but it does re-add the xor command. A lot of what was done in the interpreter has been shifted to the compiler, allowing the compiler to compile more efficient programs and to reduce execution time on the interpreter side of things, which as a result means that while loops and for loops will interpret faster. 

I'm hoping to make several more compiler-based improvements that will make small yet noticeable differences for the interpreter.

I genuinely believe that version 1.4.3 is the first version where the core is actually finished in both the interpreter and compiler.

Posted in Programming
zpe
1.4.3
latest
july
1.4.2HA

Blizzard's Warcraft III may be over 14 years old, but I still consider this to be the best game of all-time and I still put a lot of time into developing for it.

Many years ago, in the high time of Warcraft III's lifetime, a scenario (or a mod as some may know it) was released called Spellcraft. For years, new versions have been scarce and it's not possible to edit the map file with the World Editor since the original owners locked it. 

As a result of all of the lack of openness, modular design and modern features, I am bringing a new scenario known as Heroes of Dalaran. This scenario is in many ways similar to Spellcraft in that uses the same system to generate the spells. I have a working prototype of this map and it currently features Gladiator Mode from Spellcraft and a new Research Mode (users can investigate spell combinations here) and Strife Mode is well underway.

The core focus of Heroes of Dalaran is the modularity of the triggers - something that many maps out there do not consider. I am also trying to make it open to development, and while I know Warcraft III has fewer users than ever since Starcraft II's success took many of us away, I do believe that it could be a fantastic scenario that everyone can enjoy. 

There is a page dedicated to this now on my website here.

Posted in Gaming
heroes
of
dalaran
warcraft
iii
spellcraft
Powered by DASH 2.0