Echo changelog November 2024
- Configuration bug fixes and updates
- File write output fixed including correct output of subsections. Now writing will produce a re-loadable configuration. Only one level deep was working correctly previously.
- Added option to override the substitution pattern
- Inherited values from parents is handled explicitly now rather than relying on the FunctionBinder. This fixes an issue after copying sections that reference a parent's FunctionBinder, where function binder would attempt to call into the parent for substitution, which isn't valid if the parent is cleaned up.
- Added a Get overload to support splitting and assigning multiple variables from one line easier.
- Parsers
- VariableSubstitutor regular expression can be defined rather than hard coded
- FileSystem
- Added Open() overload to accept a relative file to attempt to open from. This is slightly more convenient than needing to call ResolveFullNameForFileWithParent()
- Added some template methods to make installing sources a little more convenient
- New FileSystemSourceStream
- Designed to read and write from io streams
- This is intended to be a read/write interface to memory and to create in-memory temporary files through the file system interfaces
- Supports opening stream:://name in write mode to output to a stringstream. The file can later be opened for reading.
- Switched to Qt as the default renderer on Linux
- This is due to the GTK implementation still being on 2.4. A task does exist to update GTK for those who wish to avoid Qt.
- Removed old stale echo/Chrono/Timer.h which is a relic from importing components from Echo 2. Using this could result in a memory corruption in the timer class that would cause the start time to be overwritten and report incorrect times. You should use echo/Chrono/CPUTimer.h instead. I'm surprised this didn't cause any noticable problems until recently.
Poor desktop frame rate using KDE Neon with Wayland on NVIDIA
Echo changelog August 2024
Build speeds
Significant build speed improvements from the following:
- Configuration forward declares parsers
- Parsers.h uses impl pattern to avoid including boost spirit in the header
Echo changelog July 2024
Despite my inconsistencies posting, Echo does get regular updates and is in active use.
Echo goes open source!
Tim and I have been discussing releasing Echo under an Open Source license for some time (years in fact). The main blockers were lack of documentation, and a number of tasks that we (mostly me) wanted to get done before release. Things like better platform support, a few known minor bugs, better defined interfaces etc.
Communicating between C++ and JavaScript
Recently I had to refactor some code that was starting to become a bit unmanageable. It was fairly boiler plate and most of it was just taking data structures in C++ then serialising the data to JSON. The state the the module in question can be attributed to it being created quickly in order to support communication between our system (C++) and our JavaScript web interface, with the JSON format never being designed in the first place, and our rapidly changing system.
Library and system updates
Support for Ubuntu 14.04 LTS ran out this month and as a result I have made the move to 18.04 LTS. I skipped 16 on my main machine, because I ran it on my laptop for a while and had numerous issues, and setting up a ZFS array from scratch is a little more time consuming than just installing from a USB. When I started my current job I found myself working on 16.04 for work, with which we've had ongoing problems as well. I'm hoping 18.04 proves to be much better (so far so good, but it has only has about 72 hours).
Adding swap to a ZFS root system
I'm running Ubuntu on ZFS which I set up using instructions found on the ZFS on Linux site.
Emblem Modules, Java and SSL
If you aren't aware, I publish a NetBeans plug-in module called Emblem Modules. The project can be found in the Echo 3 templates folder. The module includes a single Echo Templates wizard that uses the EchoApplication template (both also found in the same location).
Is your game crashing due to Audio on Android but not PC?
I recently came across a bug in OpenSLESAudio which is sometimes causing a crash. Since this audio implementation is only used on Android right now this only affects Android platforms. The crash appears to occur when MusicBox plays the same sound twice and they happen to end at the same time. {T551} has been created to address the crash but it is is also likely the Android implementation will end up using OpenALAudio as it will be one less implementation to manage.
Changes to the Android build environment
I've been working on the Android toolchain, mainly to try and get C++11 support working and since I was making changes to the toolchains I ended up modifying some things that will mean you need to update your environment.
Easier Bullet physics
Although it hasn't been super obvious as to how they are used unless, perhaps, you're not familiar with the Bullet Physics Engine, but Echo has classes that allow you to use Bullet with SceneEntity objects.
New Echo dependency and build environment changes
I've just pushed some changes that will require a few simple updates.
Android Devices
This page shows the split of different Android system versions out in the field.
ZFS and the mystery of the missing zed
I run ZFS arrays on multiple machines, including the server our Phabricator is hosted on. I usually keep an eye on the disk arrays from time to time but if a drive fails you really want to know about it as soon as possible. I read quite some time ago about the ZFS Event Daemon, or "zed" but have been disappointed that it hasn't been included with the ZFS package even after various updates.
Script to play a random sound at KDE login
While I was waiting for one of my servers to perform a test backup operation I was opened my music folder to find something to play. In the root of my music folder, usually ignored, was the a file named Win95-startup-sound.mp3, for a little bit of fun I decided to play it. The fun didn't end when the sound finished.
Beginnings...
I have an old project that I want to revive, called Meggit. Meggit is a simple cutesy 2D platformer with some educational and puzzle aspects to be woven in.
Initially implemented in 2006 as a prototype using Klik & Play, then remade in ~2010 using Python and PyGame, I tried to resurrect it for mobile platforms in 2012 by rewriting from scratch using Java and LibGDX. This probably would have been a decent approach but I got bogged down in changing its physics tick implementation, then my time was consumed elsewhere and I didn't pick it up again.
Open Source Development Suite
Every tool mentioned hereinafter is free and open source. Most are cross-platform (excusing, of course, the operating systems which are platforms).