Kalling Kingdom Updates, New Courses, and Rust Coding
It is already mid-2021 and with it comes a reflection back on all that has been done since the conclusion of the 2020 retrospective blog post. The new Elega website was launched to run 12x faster using static site generation technology written in Rust. Kalling Kingdom has received a number of updates, including bug fixes, new features, and the first of new user interface updates.
Three new Pluralsight courses on Salesforce have been released this year. Apex Academy: Bulkification and Governor Limits, Salesforce: Executive Briefing, and Administering a Delivery Pipeline Ecosystem in Salesforce. The new courses are a great assortment of beginner and intermediate skills on the Salesforce platform, and expand the Elega Corp course catalogue to a total of 10 courses.
Perhaps most importantly for the future, I have been writing a lot of Rust code lately. I have written Rust for integrations and data processing, Rust for new projects like a 2D game engine, and Rust for the sake of learning more Rust. You can probably guess what I have to say if you have seen other people around the web talking about Rust: Rust is good. It provides blazing fast speed and, if you know what you are doing, allows for swift construction of quality code. My saying that by itself may be a bit controversial but that has been my experience.
A lot of my current influence on programming comes from that of Jonathan Blow and Casey Muratori. Jonathan Blow, of course, is the game developer behind Braid, and lead the team that made The Witness. He continues to work on a new programming language called Jai, and games, as head of Thekla, Inc. Casey Muratori is previously of RAD Game Tools, worked on The Witness, runs Handmade Hero, and has a course on the C programming language coming out called Star Code Galaxy.
Blow has given remarks on how Rust is problematic, particularly that it is high friction when programmers are trying to get things done and that the borrow checker has essentially locked developers in stockholm syndrome or otherwise made solutions convoluted (I am paraphrasing as my own interpretation of Blow's thoughts here, he may disagree) when it may have been better to just think carefully through the memory layout of a given program. Moreover, Blow has said that sometimes, you just want to experiment to determine what a certain design should be, and Rust seems not to be a friendly language for that.
Casey Muratori took the time at one of the beginning of his Handmade Hero streams back in June to point out the cultural problem of Rust programmers pestering him on social media, and did so with some delightful wit and sarcasm. Muratori's dripping sarcasm can also be found elsewhere on Rust.
The problems with avoiding Rust or going straight to C or C++ come from my background so far. In most of the current years of my career, I have written mostly business applications using higher level languages. On the one hand, I agree with Jonathan Blow's criticisms about C++: it is old, rickety, complicated, and is aging in ways that are readily apparent around how unfriendly it is to its users. As Blow has gone on with the development of his new language, Jai's compiler, even back in 2017 or prior, demonstrated how ineffective and awfully slow the C++ compiler is. Jai has been able to compile a dense 50,000+ line program in about half a second, with the majority of the time occupied by the linker. The linker is something Blow has pointed out is probably unnecessary in the long run and can eventually be done away with, with something else better replacing it.
Other things about C++ that are yucky: header files, no package management (even if I want it, really, it is stupidly complicated to get rolling with), make files, clunky bits in the standard library, and many other things. As someone who spent a great deal of time writing garbage collected languages, I got a little nervous thinking about the propsect of dealing with memory safety. The thought of writing 20, 30, 50, 70, 120+ thousand lines of C++ and then having an obscure and difficult to locate memory bug that could suck up days of my life sounded... not great.
By contrast, Rust gives me some guardrails where I feel less intimidated, and it is letting me know at compilation time, as I write the code, what is going on with memory. By looking at a tool like the Rust language, and then thinking through other things out there we probably do not spend enough time thinking about as programmers, there is a realization that there is a lot of progress to be made in the realm of programming and being productive. And no, I am not talking about stuff like Github Copilot in regard to things that help us code.
At the same time, I agree with some of Blow's criticism. He is right: I have spent a significant portion of time fighting with the borrow checker sometimes, or waiting on programs to compile. Rust isn't perfect, I have had some headaches. But by and large, programming Rust has been a very pleasant experience. I think you would have to take a very different approach to teaching programming in order for Rust to be a pleasant experience to a beginner... but having 8+ years of programming experience has helped me with that.
A New Engine...
Okay, so I mentioned up there in the intro paragraphs somewhere that I have been tinkering around with writing a new 2D game engine using Rust. Absolutely! For now, there is nothing to announce regarding that work. But it is worth noting that there is plenty of experimenting going on, and there have been some promising nights putting together some simulations for a game concept.
For now, I will leave it at that. I have discussed some projects here in the past, and some of those are still making headway in the background as well. One of the lessons I learned along the way, though, is that it is best to wait until something is ready before unveiling it for audiences. Just know: new things are being worked on for the future - it won't be courses plus Kalling Kingdom by themselves forever.
But Those New Courses Though...
All 10 courses that have been produced have to do with overing different areas within Salesforce. I would very strongly like this to change, and so, for the future: I am hoping to do some other kinds of content that target systems level programming (or at least, what people define as systems level programming). I may or may not get that opportunity. If I do not, then chances are the production of courses on Salesforce will slow down a bit for other projects that help better diversify the Elega Corp portfolio of digital assets.
Salesforce: Executive Briefing was the first course done with live video. With the small operation that Elega Corp has been, a decent amount of money was spent on new video equipment. The course was shot on a Blackmagic Pocket Cinema 4K camera and with a new studio lighting setup, and multiple microphones. The course was shot in 4K, which means that its original footage could be converted to that higher resolution if Pluralsight increases its common standard from 1080p, 30 frames per second for live video and increases to 4K. That said, its downscaled to 1080p resolution for the final video encoding.
The experience of working on the live video content was basically the first time I had done live video in a meaningful, production oriented sort of way (as opposed to kind of just a camera in my office for YouTube update videos) since working on gameFINITY. I learned a lot while doing it as this was the nicest video recording setup I have used so far. It lead to inspiration to begin writing a script, or perhaps two or more in the future. There are other possibilities now that I have this equipment in my positions.
Apex Academy: Bulkification and Governor Limits was perhaps the most ambitious course in certain ways. Over 1,200 lines of example code were written for the course and the writing of that code comprised a significant portion of the course's production outside of recording. The code is also much more aligned with my current practices, which at this point, the course on Asynchronous Apex does not do so well - it was produced much earlier in my code writing career.
So, the video courses have definitely upped their quality level in a number of important ways. There is a clear progression here on certain dimensions. The audio quality for the courses this year has also been pretty consistent and of a premium quality. In some previous courses, the acoustic profile of the room they were recording was not always the greatest. It would be nice to return to those one day to re-record the audio, if the opportunity presents itself.
Before the end of 2021, I am hoping to complete a number of feature updates to the game, including: savegames, completion of the UI overhaul, building art improvements, landscape art additions, expansion of the turn history tab, a trade deal system with other cities (besides just the opportunity for the Rosper trade deal in the early game), and the addition of people simulated attributes, including their own goals, personality attributes, and happiness ratings.
All of these updates will continue to be, as have the ones that came before, free to existing customers. In 2022, I am hoping to introduce a system to the game where items are exchanged or traded between different cities. And, a lot more information and charts, especially charts at end-of-game, that will inform the player on how they did on a number of different dimensions. Also next year: I have been saying it for a long time... yes, achievements are still coming.
By the end of 2022, Kalling Kingdom should be a much better, more well rounded experience for those who own the game. It is important that I be able to eventually move away from the project only after feeling that the game is truly a complete experience, with all of its natural ideas explored.
The Future Ahead and Conclusion
This year has strangely been as busy as ever, with only additional momentum emerging behind the company. The blog posts here have been fairly quiet but that is primarily because of how much time has been spent quietly toiling away! The number of hours logged so far this year, with no additional employee doing them, has been almost more than the entirety of all of 2020. By a comparison of 2019, almost half of the number of hours for that entire year have been logged this year.
This pattern of work, at least in raw quantity of hours, seems to indicate that activity is picking up for 2021 in a way where 2020 was at a low. I do not really think that the COVID driven economy had much to do with that... but it is possible that the broader shift in how work happens may have had a temporary effect on Elega Corp too, even though my impression is that it did not. Really, that is just speculation.
2021 is a bit different because this is the first time in about 2 years in which there are the inklings of new projects on the horizon. Most of the past few years has been holding steady on the same patterns. With the introduction of Rust, there is the emergence of faster, better software created by the company.
It is unclear which products will emerge as released within yet another 2 years: there could be things like new videos, new video courses, a new game, a programming book... a lot of that is up in the air. I imagine there will be sort of a series of prototypes and working on multiple things at once. Eventually, one thing will win out and dominate and that ends up being the next major thing that comes out.
If you have read this entire post, thank you! And thank you to all of our customers who have gotten us to this point. I hope we are on the right track with you for the future, and I look forward to showing you some new things.