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

ZPE nightly was introduced so that when a change to any version of ZPE was made, the download would automatically be the latest version. Ultimately, nightly was supposed to be the latest, but it was not necessarily the most stable version of ZPE. Alas, the plan to deliver this didn't really work as it relied on my laptop being on. 

The good news is that now, ZPE nightly is the most up-to-date commit on my GitHub. Once I commit to GitHub, the nightly will always be the ZPE that's on there. This means you can try out the latest and greatest ZPE anytime. You can head to my Download Center to download the newest version right away.

My website's function information on ZPE isn't always up to date with the internal function information from ZPE.

Well, from now on, the function information string will be automatically updated to align with ZPE. This is a big update that should hopefully make it easier in the future for me to update ZPE.

The latest version of ZPE brings many changes that improve its performance while adding new and additional features to make the language even easier to work with. 

Let's start with that, then. ZPE introduces function tooltips that allow you to hover over a function within the code and read a quick overview of that function, its parameters, and its return type(s). 

The latest version also adds support for $-unbound parameters within function definitions, changes the way objects are passed across (they are always by reference, never copied), and changes the underlying ZPE class to the ZPEMain class and the ZPE class, separating logic from the startup features.

There's also a new internal object for Pairs and the function keyword that has been used for declaring a function type is now separate and is fn.

It's been a long time (nine years) since I posted my last YouTube video review, so I think it's time for me to return. This time, I will focus on software and web development tutorials. 

But I'm also going to livestream again. I'm aiming to rebuild my YouTube account, so if you're interested, you can follow my channel at balf.io/youtube

Since moving to my current house three and a half years ago, I have done many things to improve my home's technology.

I love my house; it's just perfect for me. It's close to work, in a place I always loved growing up, and somewhere I've known since I was a kid. That's why I've worked hard to improve my home more and more, and thanks to Colin coming round to assist me the other day, I've been able to tidy up the front cupboard finally (whilst I do know how to wire an RJ45 keystone and put cables through the wall, my good friend Colin is far more experienced).

But now, the next big thing I've been planning is upgrading the house to at least 2.5Gbe, as it makes no sense now that I have a fibre connection providing 1.6Gbps. After 1.6Gbps, the next upgrade is 2.2Gbps, so I'd need to consider this the last upgrade available on 2.5Gbe. The solution for computers is easy since most computers I own have a Thunderbolt port capable of up to 10Gbps at the minimum, though most are 40Gbps Thunderbolt 3 or Thunderbolt 4. I also have some computers that have 2.5Gbe on them. 

For me, this means ensuring that all cables are at least CAT6a around the house, updating the router (out of my hands at the moment) and ensuring all my switches are cable of 2.5Gbe.

I will continue to update my followers with what happens out of this.

When I first started blogging in 2009, I was asked if HDMI could accept input and output over the same connector (not precisely at the same time). Of course, a graphics card with an HDMI port on it is most likely only for video output and not video input. Of course, the answer, therefore, was no.

But why not? 

Well, the answer is that it's just not been implemented. That's because HDMI was never designed this way. Usually, when a connector (such as USB-C) is bidirectional, a handshake protocol is implemented that decides the connector's data flow. 

Some features of HDMI, like Audio Return Channel (ARC) and Consumer Electronics Control (CEC), are, of course, bidirectional; for CEC, for example, the device can control a TV, and the TV can also control the device, and for ARC, the audio can be sent back to the device.

When I chilled out today, I realised that building multiple return values into ZPE would be easier than I thought.

That's because the new tuple syntax already works with that. So, without further ado, the latest version of YASS, YASS 24.10, supports the new multiple return values syntax:

function multiReturn()
  return 1, 3, 5
end function
($x, $y, $z) = multiReturn()

YASS 24.10 may be one of the final updates to the YASS language for a while. That's because its syntax is pretty perfect now.

I'm excited by what multiple return values brings to the YASS language.

Last week, I came across a potential means to add AI support to ZPE. This AI support could lead to better error reporting, code generation in the editor, syntax checking, or perhaps even for use within code.

I wanted to use this post to state that this is potentially on the cards.

The title, "I'm happiest when I'm in my IDE", isn't entirely accurate, but my IDE means a lot to me. 

Thanks to a friend, my love was recently rekindled for IntelliJ IDEA again. I used it briefly while at university and loved it, but then I remembered that I had an edition that allowed me to use it as a student. Since I am no longer a student, I could not acquire that version and stuck with the Eclipse IDE for my Java programming, Visual Studio for C#, Visual Studio Code for Python and Atom/Pulsar for web development. 

Atom and Pulsar are lovely editors with many features that I love. Visual Studio is the editor I have been using for the longest since the first language I learned, which I still actively use, was C#. Visual Studio Code has always been one of my favourite IDEs, but it lacks many of what other editors offer. Eclipse, however, is very dated, and whilst it does the job, it lacks a lot.

JetBrains IDEs, on the other hand, offer the best of everything. This is where the title of the post makes sense. I genuinely am happiest with the JetBrains suite of IDEs because the IDE I'm working with affects how I feel when writing code. And I say that because there are so many great things in them.

Take IntelliJ, for example. I put ZPE's code into IntelliJ, which has reshaped it. IntelliJ has shown me areas in which I can improve my code, for example, by replacing length == 0 with isEmpty(), or removing unnecessary assignments or variable initialisation when the variable gets initialised immediately after declaration. 

My IDE means a lot to me, and I've heard the same from other programmers who also believe it affects your mental health whilst you are working. I decided just to do what I've been contemplating for a while and bought the JetBrains suite for the first time. 

ZPE 1.12.9 is one of the most significant updates to ZPE since it started. It completes the major project of making all internal data types as instances of ZPEType, rather than relying on lower-level and abstract data types. This update is so significant because it now means higher performance due to less casting, better safety and ensuring that non-ZPEType values can no longer be injected into the program. 

Further to this, new syntax features include the use of colon terminated conditions and for parameters:

while $x < 100:
print($x)
end while

Tuples are another feature of ZPE 1.12.9; they are different from class instances and objects entirely in that they are defined once but follow such a structure throughout their lifetime:

$x = (string, number, number)
$x = ("Hello world", 13, 7)

The new REQUIRE_EXPLICIT_VARIABLE_DECLARATION property and the requires_explicit_declaration directive both enforce that the user defines variables before they are used. This is a significant feature, which might become the default option in ZPE later on.

Finally, ZPE's editor has undergone a bit of overhaul. The icon is scaled down to look much smarter and suitable in internal windows and alert popups, whilst on macOS the logo used around the application is the logo found on the Dock. The scrollbars have been enhanced, too. And toggling dark mode now retains the position you were at when you toggled it. The final significant thing is that the console now runs in a separate process and can be stopped in between running a program, meaning if an infinite loop starts in the code, it will not affect the main editor. This will also come to my SQARL editor, which has also received a considerable number of improvements, including an icon at last.

ZPE 1.12.9 is now available to download from the usual place.

Powered by DASH 2.0