That's it...just random somethings
05.29.2023 - Annoying Things That Ableton Does
To disable Auto Warp of long samples: Go to Options -> Record Warp Launch -> click off "Auto-Warp Long Samples"
03.25.2023 - Rust Serde XML Deserializing data when missing values
I've been working a side project over at https://forgottenworld.com which contains many years of code and evolution. Some of these efforts have created somewhat inconsistent structuring of game data. In particular the game relies heavily on XML data structures that are read in at compile time to create the data objects. Its an interesting byte translate of the XML data, however this has created inconsistent structuring of the data objects when making additions to the game. My answer to this is, lets convert it all to JSON so we have an inclusive framework for all of our data objects.
The project is written in C# which I have minimal experience in. I can hack around and add small features, however I am no where near the level of the lead developer, nor do I have the current cycles to be hot and heavy into the code to approach his level. I do know Rust very well though! Considering a translation of XML to JSON is something that can be done outside of the core code, as well as eventually creating an API to expose manipulating the end result JSON, I figure Rust is what I'll do this in. Side note: Yes I could easily do this in python but I detest python for code that requires sustainability and longevity.
So now onto my problem and resolution:
Serde XML Deserialize does an amazing job of taking XML and converting to JSON. However I struggled when values were missing. The answer to how to resolve this is in the Serde docs, I just was reading it incorrectly. I would find in the XML below values missing, like <Camp AOE="">. I could modify the XML, I suspected though this wouldn't be the last time I see missing values, especially since XML "allows" this to happen. I say allows because its not XML's fault, its all on developers.
Serde gives us the ability to fix this at import. The docs talk about it here: https://serde.rs/attr-default.html. In particular, the code I attempted to write was this:
My "camp_default" code looked like this:
Here is where I screwed up, and this is important for complex XML objects being converted to JSON with Serde. You cannot overthink the translation, however it needs to be complete. In the above example I tried to initliaze a simple value with another function. Serde did not like this, instead the below code works perfectly, where I instead just say "Yeah, camp_area_of_effect is just a String::new() if there is no found value."
I go down this rabbit hole of explenattion because this is something I've been going round and round with for the past couple of weekends in my spare time and have been trying to find out why, what I wanted to do wasn't working. Additionally, this became critical later in the code, in particular when I was translating items out of the XML. I was finding there was large chunks of information missing for items that didn't need it, example: A ring doesn't need combat damage values pertaning to all sorts of environment variables, so XML was excluded. To resolve this, I went through the same process as above but built out the default value to completion like so below. The code below builds an XmlItemType if it is missing from parts of the code. You can see that I have to assume that all parts under a missing node are gone and tell Serde what they need to be in completion.
12.18.2022 - Forgotten World, Neverwinter Nights from AOL
Forgotten World has opened registration to the public at https://forgottenworld.com
The game is constantly evolving the code to blend current day elements but keep the nostalgia. There are plans for expansions, guilds, specialized quests, etc. This is a passion project by the lead dev with a small core of support.
There is a a discord channel here https://discord.gg/U3YdEdXt where we discuss and have content with rules, the original manual and for posting bugs/tips.1
If you're curious to what rabbit hole you'll be going down, I did this video a few months ago as kind of promo: https://youtu.be/m2DFhyLm6Fk
12.04.2022 - Development in Microsoft anything sucks AKA the struggles of code signing
I spent the better part of four hours today trying to do a simple task which is sign code using Visual Studio. If you've ever had the joy of building an application and releasing it, at some point you'll have the pain of getting a certificate to authenticate the signed code. With more and more of the world focusing on authenticate and validation, code signing is becoming quite the racket!
After acquiring certificates through a vendor, we attempted to sign our releases we're pushing out to our userbase. Now in all fairness, I may have downloaded things incorrectly. I don't remember any other option though beyond downloading a certificate and a private key. That's OK though, I just figured I'd use OpenSSL and covert the certificate and private key to a PFX to import into Visual Studio. This ended in utter failure!
The generated PFX using git cmd and Windows Subsystem (Ubuntu) both imported into the ClickOnce but would not function properly with the "Sign the assembly" feature. I tried "sn -d", no password on the pfx, and all sorts of other work arounds. They all ended up giving me a build error that the PFX could not be imported because it has a password on it...no shit!
In the end I had to take the certificate plaintext file and the private key plaintext file, copy them into one plaintext file (cert first, key second) and then run certutil "new file" "output PFX" which then asks for a password. This file successfully creates a PFX that ClickOnce AND assembly signing worked with.
11.11.2022 - Neverwinter Nights (AOL) Lives On Through Forgotten World
One of the earliest, if not the earliest, Massively Multiplayer Online Games was through America Online. Neverwinter Nights was based on the Advanced Dungeons and Dragons (AD&D) rules set and designed around the TSR Gold Box tile/pixel series that was popular at the time.
Neverwinter Nights (Forgotten World) holds a very nostalgic feeling with me because of the simplicity of the game but, in a very unique way, difficulty. Right away you are faced with the choice of class as well as stats. These stats are random though and your ability to be a viable end game player relies not on just your stats but your luck as you level through the game. One could have great stats to start and horrible luck each level and end up a lesser character than someone else.
Working towards a greater character meant something though. It meant that it wasn't just your equipment that defined you but the challenge of getting your character to the end and feeling accomplished with that character.
08.29.2022 - Roland AIRA J6 Thoughts
I love the creativity and the ease of use of the AIRA J6 but I am starting to find subtle frustrations with the system. A prime example of what seems like a feature that would be easy to implement, because it exists in the T8, is being able to adjust the volume of an individual note. The sounds and sequences I can create seem limitless, but they're all at "max volume" and hard to adjust individual key/note volumes to provide some subtlety to the mix.
08.22.2022 - Roland AIRA J6 and T8
I've been messing around with Roland's AIRA J6 and T8 for the past few months and have been having a blast! Thanks to Ryan Fowler's Guitar Experience for hooking me up quick with the J6! I started with the Roland AIRA T8 and enjoyed the midi aspect of changing drum sounds and around as well as coming up with good tracks. Throwing the Roland AIRA J6 into the configuration cranked my fun up to 11 with the sheer amount of flexibility and melody options. Below are my latest mixes and more can be found on the channel. Price per dollar for people who want to mess around as a hobby, these little devices are amazing!
06.19.2022 - Treasury Direct I Series Bonds
Ahh, irony...a state of affairs or an event that seems deliberately contrary to what one expects and is often amusing as a result.
I wished to roll my children's savings accounts over to I Series Bonds because of the chance to earn considerable interest as a way to help save for college. You can only purchase these bonds electronically from Treasury Direct's website. I went through the registration process which, mind you, asks for some very personal and identifiable information. They generated my account number and then informed me I needed to mail them...yes mail, through the United States Postal Service, a signed and notarized letter that I am who I am...I mean seriously...WTF?!
I provide you my information and its quite detailed yet now you want me to find a notary, have them watch me sign a piece of paper with less information than what I already provided, stamp it and then wait...what, probably 6 to 8 weeks if I'm lucky, for you to approve my account?
The greatest tool our government has is creating inefficiency.
03.12.2022 - Manjaro Day 157
The transition has been painless except for gaming. All of my apps, various office needs, and general usage are easily provided by the normal web ecosystem. Google Chrome's office apps replace Microsoft's Office apps easily. Applications for editing sound and audio are readily available in the Manjaro/Arch market place. I was able to easily install drivers for my HP Laserjet 1300 which is running on an old JetDirect on our network.
The things that were tricky were the edge cases. When trying to run VCV Rack while streaming in Discord and also using my headset to communicate, I would be only able to stream my VCV rack but not my audio. The sound drivers the Intel chipset on my motherboard would not play well with sharing audio streams. There are some work-arounds for this but that was on the more complicated side of what I wanted to deal with.
The other big challenge is NVidia drivers. Whether I was using Steam's Proton game overlay or Wine, applications worked. The problematic piece was NVidia and how the drivers operated. Often times I could easily run the application but the graphics were so glitchy that it was ultimately not worth continuing.
My hope is that with the release of the Steam Deck that there will be pressure amongst the gaming community and developers towards NVidia, whether through seeing AMD doing well, or by sheer desire to get into future releases, that we get better driver support.
02.08.2022 - Wordle The Odds
I wrote a Rust/WASM/JavaScipt app to calculate the odds of guessing the correct wordle puzzle answer. I was curious as I got discovered more letters what the odds of getting the right word were.
The source is published here: https://github.com/n0manarmy/wordle_the_odds
The app is accessible here: https://wordle-the-odds.web.app/
12.14.2021 - Non-Fungible Tokens
I laugh off the idea of Non-Fungible Tokens, or NFTs. The idea that there is a digital item that is recorded in a persistent and ever living digital ledger shared by millions or billions seems incalculable. That is unless you consider the Internet such a mechanism. There is a saying that if its on the Internet you can never be rid of it. I'm sure the music and movie industry can agree that this was and is very much the case still.
So why do NFT's seem so appealing? Is it that NFTs are a technology that actually leverages all the blockchain technologies that we aren't really utilizing? Maybe its a way to guarantee ownership. But what is ownership on the Internet? I can download a picture and safe it to my desktop and use it as my background. I can do this the same way I can download a song and play it on my computer. What does the originator make from that?
Maybe NFTs are a form of honesty. It's a way for people to pay for something digitally that someone created and ensure that entity is properly funded, without all the overhead that comes with legacy systems. I remember reading once that a band makes about $0.11 per track on an album and that's up to 12 songs, anything beyond they don't get. This was in the day and age of $18 CDs. So if a band makes $1.32 a CD that was sold at $18 a CD, that's quite a hefty difference.
This post was ultimately driven by my desire to have a medium to advertise my first NFT though. I needed a discussion point to converse about NFTs and then how I'm going to share the link to the NFT that I am selling. Why? Well, curiosity. I wanted to see how easy it was to sell an NFT. I wanted to see what was involved with creating a wallet, connecting it, and posting my image to the blockchain that will forever track the owner of the NFT I am selling.
What is this NFT that I am selling though? Reddit has had a recap of users activity over the years. The recap this year provides a baseball card like representation of my Reddit user. I thought, well, a reddit baseball card is fitting. It's unique to me, it has my "season stats" and I'm sure at some point people will want to collect them. As I have too much I am already collecting, I will let someone else collect my card instead.
11.12.2021 - Manjaro Update
I've been running Manjaro for little over a month now and have had no major complaints. The only concerning issue I ran into was a distro upgrade knocked out my NVidia drivers which in turn left me with a blinking cursor. This was resolved with a shift+F2 and dropped into console.
After some googling I learned some of the more nuanced features of Arch Linux such as "mhwd-tui" which was a nice way to manage some of the core drivers and system information in a console. "mhwd-kernel" and "mhwd" also helped figure out what's going on, as well as a few searches.
In the end my problem was a conflict between the "video-nvidia" driver and the "video-nvidia-470xx" driver. I had to jump over to video-linux using "mhwd-tui" and then remove "video-nvidia". Once I did this I was able to then re-install "video-nvidia-470xx" using "mhwd -a pci nonfree 0300". This essentially says "mhwd, use auto mode for slot pci, nonfree drivers are OK, look for device 0300 which is the graphics card and install the drivers." Rebooted and back up and running!
11.06.2021 - Hands-on Rust by Herbert Wolverson Part 1
I've been chasing the Rust programming language for well over 4 years now. The language, to me, feels complex but in a fun and rewarding way. Previous languages that I've worked with have done their jobs respectfully but have never felt they are special. The easiest way I can equate it is:
I have a hammer and I use it for hammering nails. I use that hammer and I put it away, done. Most languages I've used have felt like a hammer.
Rust feels like using I'm using my workbench and all the tools on it. I'm not just mundanely pounding with a hammer or drilling with a drill. I am giving thought to what I'm creating, using different tools in their proper manner, and finally have created something that works as intended.
Less about my general rust adventures though and more about "Hands-on Rust, Effective Learning through 2D Game Development and Play" by Herbert Wolverson. I had worked on Wovlerson's previous RLTK tutorial way back in my earlier stages of playing with Rust and trying game development. Games have always been a passion of mine, but I never realized how hard it actually was to build a game. I've written dozens of enterprise applications for business class services but have yet to create a single game...I've come close!
Hands-On Rust takes similar concepts from the RLTK tutorials but cleans it up and polishes it in book form. Additionally, the RLTK tutorials focus on his libraries and roguelike game development, where as Hands-On Rust instead tries to bring you along with general Rust language concepts as well. This is both rewarding and mildly taxing depending on your skill level. A few times I've had to force myself to go back and focus on what he was explaining because I chose to skim and transcribe the tutorial pieces. I did this because I had the Rust knowledge that was being explained, however I was losing out on the game concept knowledge he was also conveying.
The chapters are very well organized and work you through many concepts of programming. A few times he has you do mild refactoring which is good. This is a concept that is always necessary in development but not necessarily developed.
ECS (Entity Component System)
The biggest reason I bought this book was because of two main concepts he conveys to you through the chapters. ECS and minimalist game development. ECS is a new(er) style of game engine development meant for decoupling Entities (things that have components), Components (the attributes that entities posses) and the Systems that dictate what Entities and resources do. The ECS engine that Wolverson uses in this book is Legion ECS, which is part of the Amethyst project. There are various comparisons out on the web of different ECS's. The reason I lean towards Legion is its ease of use. I played with Legion prior to learning about this book and was able to do some really cool things incorrectly. After reading through about half of the book I have a much more solid foundation to use to go back and rework my little simulator I was creating.
The joy of ECS is that you can expand your game without major refactoring efforts. Object oriented game engines require frameworks for inheritance which can potentially translate to unintended consequences if you add new features. ECS assumes that all things are considered individually and that you act upon only the things you care about. This means that if I add features to a player Entity, say I care about their height and weight now, the Systems act on the player character will not care about the height and weight until I specifically tell the Systems about it. Adding height and weight in object oriented approaches means that these values could unintentionally be accessed because they are now made available to all things that inherit the "Player" object.
Another joy of this book is that Wolverson introduces how to use his libraries to build out games in a way that modeling and testing ideas is not a major endeavor. Prototyping ideas and expanding on them are easy when you have the basic building blocks to model with. Wolverson's Bracket-lib Rust library leverages all sorts of different ASCII, 2D, 3D toolings, however you're not required to dig deep into the graphics and design requirements to get started. To me this is very important. I have notebooks full of game ideas but I struggle with the larger engines and the need to be a "completionist" with my ideas. This happened with Godot, which is an engine I also enjoy thoroughly. I struggled with Godot though because of the indirect ability to use Rust which seemed more complicated than jumping to Godot's native language or C#. Not that I couldn't use those languages, I just don't want to.
Bracket-lib fills a perfect niche where an idea can be born and developed, shared, tested, and eventually grown into something larger. Using ECS and Bracket-lib, along with the guidance from Wolverson's book, enables basic and advanced developers to create as individuals without the need for a larger production effort.
The one thing I would wish more from Wolverson is more accessibility to a side-by-side of the book and online code. This may be a timing or work/effort issue. An example is that the RLTK code and examples are extensive and very thorough, in a sense I don't even need a book there. This does not necessarily translate financially for Wolverson and we all need to be rewarded for our labors, especially labors of love. Wolverson's RLTK/Specs documentation is especially complete. His documentation for Bracket-lib and Legion is somewhat sparse. I am taking for granted that I am not the one that has to maintain either of these efforts and he is only one man. Maybe my take away from this should be expanding his Bracket-lib/legion examples with what I've learned from his book and pushing that to him to review.
Thank you Herbert Wolverson!
This will be a multipart post as I want to revisit the topic when I finish the book. I'm about half way through it now.
10.28.2021 - A Super Market Store Does an Awesome Thing
We generally shop at Giant Foods because we like the selection. Ever since the pandemic we started ordering our groceries online through the Giant Foods app. This process has stuck with us because it saves us so much time. Normally a grocery shopping trip for a family of four takes us roughly 2 hours from start to finish. This includes driving, shopping, paying, loading, and finally unloading. Using the app it takes us minutes and then time to unload when the delivery arrives. The time we save we put, financially, towards the tip for the driver.
We could never tell if we were doing worse or better with the plastic bag situation. In some cases we ended up getting more bags which was frustrating. The online delivery would give us a single bag for an onion, as an example. Recently though the deliveries started showing up with compost-able bags! At first I assumed them to be the "industrial compost" only bags which means they go into our recycling and probably get thrown out. However these bags were different, they had stated they were compost friendly for home composts!
I have taken these bags and mixed them with my compost pile and will continue to track the efforts here to see how well they do.
10.10.2021 - Manjaro Day 4
I've been really excited about using Arch Linux's Manjaro and things have been going well. No Man's Sky installed easier and runs better with Steam's tool set.
The challenge now that I'm trying to resolve is the mouse. My mouse is a Logitech G300s and it just feels...off. I can't place what exactly is happening but I find that its harder to actually click on small or exact locations. It feels like the mouse is over-sensitive which may be the case with the default interface loaded with Manjaro. I have not found another form of drivers or even logitech specific drivers for my corded mouse.
My hunt will continue into the xinput library and see if there's a way to treat the read bit rate and lower it so the mouse is not as sensitive.
10.06.2021 - First Night With Manjaro
I intended to try installing a Steam game sooner but was interrupted by a snake sneaking into our house. Fortunately for us a sticky trap caught before it could get to where it wanted to go. After some olive oil and patience, its unstuck, inside a plastic bin, where it will hang out until I release it far from our house tomorrow.
Tonight I wanted to test No Man's Sky on Steam in Manjaro. I had to enable the Steam Play feature in Steam before it would allow me to install the game. This is found under the Steam menu button at the top -> Settings -> Steam Play and "enabling Steam Play for all other titles." After a quick restart of steam, I was able to then install No Man's Sky.
The installation is proceeding like it would in a Windows environment, I'm typing this up as it downloads all the necessary files....Maybe I'll go check on the snake while I wait.
The installation went off without a single issue. I didn't even have to deal with those annoying additional dot.net installation requirements! The game loaded with the same speed as my Windows installation and runs just as well, if not a tad bit better frame rate.
10.05.2021 - Tonight it starts
I played around with Arch Linux and I liked it enough that I'm going to go with Manjaro Linux. There's just a snappiness and crispness to Arch based distros that I really appreciate. There is solid NVidia driver support as well as straight forward ways to install Steam. I'm backing up my data now to prepare for full flat wipe and re-install. I am installing the Gnome 21.1.4 release because I know Gnome the best.
It's been fun but, you're just not who you used to be though! We've both changed but I feel I've changed for the better and you're just, well, still the same with regards to lack of concern for user experience and security.
09.27.2021 - #MeatRetreat and Distro Selection
Just spent the past four days with my buddies out in West Virginia. We all met at a cabin and essentially disconnected from cell service and the Internet in order to play video games and board games! The cabin was amazing and the event was awesome.
What started out as a joke in our Discord server soon became reality. Because of the pandemic my friends and I found ourselves expanding our network of friends using Discord. Because of this I thought it would be fun to suggest maybe a retreat of some sort. This ended in laughs and fun ribbing but in the end it proved to be an awesome idea.
We played games like Dice Throne, Captain Sonar, Villagers, Magic the Gathering, Chess, Texas Hold'm. Everyone brought what they wanted to play and we gave tons of games a shot.
However, that gave me little time for doing more research on distro selection. I did give it some thought on the way home and my course of action is going to be this:
My main PC will be Pop!_OS and my laptop that I hack around on (where this post is coming from) will be Arch Linux. I really feel that Arch is a good intermediary step to better understand the nuances with the linux environment. If the Steam Deck is really going to be all that it is sounding like it is, knowing the Arch structure and ecosystem will be important to taking full advantage of the hardware to do more than just playing Steam games!
09.22.2021 - Steam Deck
One of the intriguing thoughts about using Arch Linux as my primary distro is that it would prepare me for my Steam Deck when its released. This device is going to be more than just a way to play Steam games. I believe Valve is really stepping up to make a major evolution in the gaming industry and open up a new market for developers.
Since the Steam Deck uses Arch Linux as its underlying system, knowing the inner workings of the setup can potentially unlock more advanced features or use cases for the console.
09.20.2021 - Application Considerations
I was notified by Google today on my Windows machine about an update to Google Drive and how they are changing over to a new version. This got me thinking about all the secondary applications I use that I didn't think about. So I've compiled a non-complete list below:
Hmm, now that I look at the list, its a lot smaller than I thought. I have purposefully not added applications that I know will be available such as Visual Studio Code, various programming language SDKs such as Python, Rust, Java. Video editing and image editing are native to Linux.
Office applications are through Google. I left the Microsoft office product eco system years ago when I was no longer a student and then had to pay the fees to write word documents.
09.19.2021 - Pop!_OS and NVidia
It should be noted that Pop!_OS offers 2 downloads, one standard and one with NVidia drivers packaged. Windows users may not care much of this but this is significant. One of the largest frustrations with transitioning to Linux or even operating Linux is a graphics driver failure. For those not accustomed to the command line, doing a driver upgrade/installation and having it go wrong could end a user up in the console with no immediate recourse for a fix.
Ubuntu does provide NVidia drivers, however they need to be enabled in the settings as a 3rd party driver.
It's still a three way mental gymnastics between Ubuntu, Pop!_OS, and Arch Linux. Right now Pop!_OS and Arch are the front runners with a heavy lean towards Pop!_OS. The ease of access to software, drivers, and enabling games from Windows makes Pop!_OS more intriguing. However the sheer snappiness and responsiveness in Arch Linux still makes it very appealing. Sometimes its also good to just know that there isn't a whole bunch of crap installed along with your operating system. Arch gives you this very minimalist setup that helps reduce software bloat.
09.18.2021 - Linux Versions
In Criteria, below, I alluded to determining whether Ubuntu or Arch would be the ideal distribution of Linux to use. In the fast few days, as I dig further into the benefits of both, I've come to realize, there is a third distro I should consider. Pop_OS is a version of Debian maintained and curated by System76. I've used this distro in the past with some work laptops and enjoyed it, however because they were work laptops, I really could not take full advantage of the OS and its market space.
Of all the distros I am most familiar with, Ubuntu is the most. I've used this distro since before release 10 and have seen it grow and mature. The primary focus of this effort for me is to be able to continue my gaming on my PC though, and the more I read, the more Pop_OS sounds positioned to support it the most "out of the box."
Some of the games I'll be evaluating in this experiment will be No Man's Sky, Magic the Gathering: Arena, and Battletech. Two of the three are available directly through Steam so we will see how they are handled with Steam's Proton overlay. Magic the Gathering: Arena or MTG Arena will be a bit more of a challenge. MTG Arena is distributed directly and will require some sort of secondary support like Wine and/or Lutris.
09.15.2021 - Criteria
My majority personal use of Microsoft Windows is for gaming. Through the years the gaming services have become advanced, consider Steam for example. They've developed consoles leveraging Linux and tools like Wine. This leads me to believe that, if anything, I can get the core games that I enjoy working within a Linux environment, hopefully with minimal effort.
The graphics card in my computer is an NVidia card (but who's isn't amirite?) so managing the graphics card also needs to be easy. I can't have the GUI I chose suddenly bonk out on me cause of a driver update.
Finally there needs to be easy access to install software, whether from a market place or directly from a vendor. Essentially this limits me to Debian or Redhat package manager (RPM) distributions. I lean more towards Debian as its the OS I know better, the question is do I go with raw Debian or Ubuntu? Ubuntu has to be, by far, the most supported and well rounded distro I can think of. If I were to suggest to someone to try Linux, I would suggest Ubuntu. I work with Redhat at work and I've tried Arch Linux (which impressed me with its sheer speed and responsiveness on my older systems.)
Redhat is not an option for home though considering there's a fee for service with the solution. Arch Linux is a strong possibility but there's much to take into account if I'm going to use this as my distribution. There is more work in Arch to get things up and running compared to a Debian distro, but I am going to ponder it over the next couple of days. As I said before, I was very impressed by the speed and responsiveness of Arch Linux.
09.14.2021 - An Acceptable Challenge
I've thrown the gauntlet down, more so to myself than at others. After administering and using Microsoft operating systems for many years, I've never truly cut myself away from the operating system. See there's a very strong hold on Microsoft's ability to provide a gaming platform, AKA Windows. Steam has recently changed this playing field as well as the explosion of indie developers that do not want be held to AAA game engine standards and publisher requirements.
Windows 11 is released Oct 5, 2021. At that time I will wipe my hard drive and install Linux. I'll cut myself from Microsoft completely and see how it goes, documenting it all here.
I will provide information about potential distros and build details as I start to figure them out.
The purpose of this effort is not to malign Microsoft or Windows. The recent discussions about Windows 11 though have made this effort all the more viable as I look to leave that ecosystem to something more freeing.