To use this website fully, you first need to accept the use of cookies. By agreeing to the use of cookies you consent to the use of functional cookies. For more information read this page.

Jamie Balfour'sPersonal blog

It sounds like the start of a film title, Zigbee, NUCs and Wifi, but it's not. Simply put, this blog post is a short reminder to those who use the Zigbee protocol and Intel NUCs. The issue relates to the interference of signals which leads to not only a weaker and slower signal but also higher power consumption. 

I recently moved my NUC from my server cupboard to my office where it will remain. There were three reasons for this; on occasion, the server needs to be rebuilt or given a new SSD and as a result, I need the server to have a display. I usually route the HDMI connector through a TX cable back up to the office but this takes time to set up. I could use VNC or something like that to do this, but again, it takes time. So to make it simpler I have moved it up to my own office. The second reason is that it gets quite warm in my cupboard so I was hoping moving it away would keep it a bit cooler. The final reason is the simplistic approach of my cupboard now - it only houses the main network of the house (a small 8 port PoE switch that also powers devices near it such as the Ring hub and provides connections to my other networks around the house, this is my only 2.5GbE network at present), my router and my Ring hub. 

However, the purpose of this article is not to inform you of my new changes, but rather to inform you of the issues to which I experienced when moving my NUC. I have a NUC7PJYH as my home server - it's low power but isn't the most powerful little machine. It does, however, support Linux really well and it runs on a variant of Ubuntu. My home server has many containers running on it, a web server, a PBX, a HomeBridge instance and a Home Assistant instance. Generally, it does quite a lot so I like to ensure I have regular backups of it (I've set up a cron to do snapshots of this daily). However, it wasn't until recently I noticed that my Zigbee devices were taking a lot of time to respond when I pressed buttons around the house. This only occurred after I moved the server to my office. I quickly started to realise why. Moving it to my office there were far fewer WiFi devices (I don't have a lot of WiFi devices in the house, most things are on the Ethernet) so I assumed it would have been better. But I had put the Zigbee USB stick on the top of my NUC. It struck me why in my server cupboard I had placed the Zigbee antenna in the corner away from the NUC - interference. Interference from what though? I hadn't even realised this, but the NUC actually has built-in Bluetooth and WiFi.

Having these enabled can seriously impact the performance of the Zigbee hub. I seriously recommend switching these off. Did you know that USB 3.x can also interfere too? Yup, the electrical signals cause a small portion of electromagnetic interference that causes issues with Zigbee. 

Meet ClickIt Embed! The almost perfected feature takes advantage of my new LightningJS parser and compiler, codenamed Pietro, to make embedding ClickIt code easy!

It makes it easier to present ClickIt files than using the editor and offers a nice new alternative to presenting HTML. Take a look below:

I've been working even more on ClickIt than I imagined I would be over the last few days. Today's update is a big one (again).

The old system of dragging files onto the Open item on the ribbon has been replaced by a new dialog interface that allows users to browse their computer or use drag and drop. It's much easier to understand and I'm thrilled with it. 

Extending on this feature is the new paste feature which allows copying HTML code and pasting it straight into the editor which will be compiled into HTML blocks, taking advantage of LightningJS.

Another major update that's new is more of a fix. This fix is for code blocks with attributes longer than the width of the code area. Now instead of pushing itself to the following line, the line extends horizontally. It's much more intuitive and as I say it's what I always wanted.

Another major fix was the printing of code feature. Printing has at last been fixed to display code as it is with spaces and so on. 

Since TYPO was introduced and then upgraded to TYPO v2, typing has become a big thing for YASS. The standard library uses types on all built-in functions and all of my own programs are moving to be typed. One of the new features that is coming to ZPE in the near future is forcing typing and disallowing the execution of programs that don't use strong typing. But before that, ZPE is looking to bring union types.

Union types are crucially important for return types on functions which may need to return two separate data types. Rather than using the very abstract mixed type, these functions would use the union type. Assume the following function which returns an integer (the index of the found item) or a Boolean false if the item is not found. Using types with this function currently means specifying a mixed type to allow both integer or Boolean return types:

function linearSearch(string searchTerm, list items) : mixed

This same program could be written with union types as shown below:

function linearSearch(string searchTerm, list items) : integer | boolean

This is a much less abstract and more concrete solution to the problem, forcing the return type to be one or the other. This is the first step in union types, as union types will also come to variable declaration, but this isn't planned to come any time soon.

The next generation of ClickIt is live! ClickIt 3.0 is a huge improvement over previous versions.

With version 3 you can now import existing HTML pages and the new LightningJS parser and compiler will transform it to an AST. ClickIt can then transform this AST into ClickIt blocks, attributes and all. 

There is scope for further improvement which I will be looking to bring over the next few days or so as well.

With this update, ClickIt is back as a major project for me and it now gets a separate page on my website as well as a menu item! 

I am committed to improving ClickIt now that I have spent more time with it recently and I am looking to introduce cloud storage to it, as well as the ability to add project assets. I'm also ironing out issues as they happen for the first time. More HTML elements will continue to be added as I find the time to do so.

One of the features that I most wanted to bring to ZPE this year was inline iteration. This has been one of the top features on my board of features for ZPE. 

Inline incrementation will be the headline feature of the next version of ZPE and will be available from the OmegaY version of ZPE (version 1.11.2+) and it brings an easy way to create ZPELists with very minimal effort. Not only that, it's actually very fast, taking advantage of ZPE's performance in the loops that I spent tireless hours working on.

It's pretty lovely too:

print(from 0 to 1000 : function($x) { return $x * 2 })

I'm also seeking to improve file transfer performance as well as bring in remote SFTP-like features into the language too.

Since I stopped being a software and web developer working in another company for a living in August 2017 and moved to having my own business doing this and eventually to teaching, I've continued to be actively involved in the industry. 

I have presented a conference on running a small business in the ever changing technology industry, I've regularly been contacted by people in the industry for assistance and have had one or two interviews. I also actively follow jobs on Indeed and S1 Jobs to ensure that I know what's going on.

Anyway, as part of my own development I want to add to my 15 programming languages (not including HTML and CSS in that since they aren't programming languages) that I currently know well and so I have decided to re-pickup Rust. 

Rust is a very popular language in the industry and lots of jobs that I have seen advertised require the candidate to have knowledge of it. I'm going to say this isn't surprising because Rust was beginning to appear quite a lot back in 2017 when I was working in the industry and whilst I could write Rust back then it's one of the languages I haven't spent much time on.

Another is technology is React. Everyone wants React these days. Thankfully, I haven't lost my knowledge in the field of React, but haven't used it as much as I'd have liked. It's an awesome JavaScript library that makes it easy to update content on a page.

Laravel pops up quite a bit along with Symfony 2, which are both frameworks I have used before but would need to look at again before attempting to use them. 

The requirements in the industry have moved quite rapidly since 2017 and will likely continue to do so as languages like Rust and technologies such as React and vue.js continue to gain popularity. This has actually cropped up recently after a discussion with a friend who is considering a new job.

Let's be honest here, Microsoft has been trying to ditch Control Panel since Windows 8 back in 2012, and yet here, all the way in Windows 11, 10 years later, Control Panel still resides in the core of the operating system. It's uses may have slowly begun to disappear, yet still there are so thing you can only do within Control Panel. 

Windows 11 is still a mess with it's settings being spread across the whole system.

For example, to change the mouse double click speed, one must go to Control Panel and then the Mouse setting. There's other weird things in here such as the Work Folders feature, the Sync Centre (which should be a separate app in my opinion), AutoPlay, the Windows Mobility Centre (why does this still even exist?!), Windows Defender Firewall. But the worst of all, is the Programs and Features. Not knowing how to uninstall an app will confuse some people. The Mail feature is another weird one as well as Phone and Modem (that should have been removed from Control Panel a long time ago).

So why do these things still exist? Does Microsoft not care about making the OS perfect anymore?

Goodbye 2022, hello 2023.

Happy New Year 2023! Wishing you all the very best for this new year!

This year has been one of the best years of my life.


Let's start with January. January was a pretty bad month for me in terms of work. I got into a big argument with someone at my work that made me decide to hand in my notice, despite loving the place I was working at. I was in a bad place as I was still recovering from COVID from the year before and was struggling to get back into the swing of things. Despite this punch-up, deciding to move on ended up being one of the best decisions I've made (more later).


In February this year, I decided to start looking into developing my teaching skills to be more digital. I began to build my slideshow engine in February which is now a key part of my day-to-day teaching. I also began to build my embeddable tools, which are a major part of this. I also began developing an interactive worksheet system that uses HTML, CSS and JavaScript to power it.

March and April

In March I applied for a job in one of the two schools I had always wanted. I knew after the interview that I wouldn't get the job and indeed I was correct. I also sat my driving test for the first time since 2016 (things had at last begun to settle down again and I found the time to do it). Unfortunately, I got one major fault (although, once again, no minors) and failed as a result. This was upsetting news but I decided I would persevere and try it again. Two fails in one week. 

I also could not forget to mention the big change that came to ZPE and that was the inclusion of passing by value and reference. 


May was perhaps the best month of the year. First of all, I resat my driving test and passed it at last! A week later, the other school I had always wanted to work at posted a job and so I applied. I went through the interview process but didn't think my interview went too well, but later in the day was offered the job! Both of these were within one week of each other too (it was the reverse of March). 

ZPE also got another big update with strong typing now being available in parameters. This was another huge update. 

In terms of my house, I finally got my garden done.

June and July

In June I went to see my new school and it was exactly as I remembered it. I also met my line manager who is the most awesome guy ever, although I had known that he was a nice guy from when I did volunteer work at the school way back in 2016. Over the next few months, I began to work hard on improving my slideshow engine, creating webpages for my class worksheets and making more digital tools for use in education.

I went to York with my mum for the first time in 11 years and this was quite an enjoyable experience, especially compared with my usual Scottish getaways that I do year upon year (I'm just meaning it was a big change, not that it was better). 

I also turned 31 years old.

August, September and October

I started my new job at my new school at last. My first few weeks were awesome! The saying the grass isn't always greener on the other side applies whenever you are applying for a new job, but in this case, the grass was greener. I'm very happy in my new job. Further, in September I got an award for settling into the school quickly and well. I love where I work.

Once again, this was a big month for ZPE when it was compiled to a native binary for the first time, seeing huge performance gains over the JDK version.

At the end of the first half-term, I knew that I had made the right choice with my new school. 

November and December

Not sure what to say about these two months, but they have been really lovely. The first few weeks of December were pretty tough as I got a cold and bunged up thing that just refused to go away - it lasted a total of four weeks before it cleared up completely. 

I spent a lot of time with my family in December after having several months of not speaking to my dad, and then of course Christmas was a lovely day at my parent's house, despite me originally not planning on going. On the 30th of the month I decided to go and buy a car. At last. I put down the deposit to get my self an MG4 EV. What a nice end to the year.

Powered by DASH 2.0 (beta)
Code previewClose