I don't have much on my mind, but felt like putting out an update anyways.
I am close to reaching my goals!!!!!!
I was wrong. As annoying as the learning curve for Unity is, rust gamedev is not close to a place where I can make something I would be proud of. My goal is to learn about game development, and to make a game. I should not conflate that goal with wanting to learn a new programming language, or with wanting to avoid the Unity editor and only writing code.
For something sold as super beginner friendly, for me, Unity was anything but that. I was wrestling with the editor for a while without having written a single line of meaningful code, which made me feel more like I was learning something like photoshop rather than making a game.
I'm going to be switching to writing my game with a more barebones approach using rust and amethyst. I'm sure at some point I will wish I had the tooling in Unity that I'm abandoning, but I think this is mostly fine since I'm making a 2D game. Moreover, this will be a good opportunity to write low-level code and finally learn rust. My first impression of the language is that it's like C++11 and OCaml had a baby, and I like that a lot.
Programming is both an art form and a means to an end. I have always been obsessed with the former, and the latter has always been a byproduct. The existence of this site is a testament to that. The tradeoffs I have made in its design and creation were not made with my few visitors in mind, but rather were made just for myself. This form of decision-making is fine for recreation, but I feel that all programmers including myself are prone to it in more professional contexts.
Between the rust conf 2018 closing keynote, unity's new ECS system, Mike Acton's talk on data oriented design, just my own general interest in game programming, and comments on hacker news / reddit, ECS + DOD have become much more prominent in my life to the point where I feel compelled to try them. I think there's a lot of lessons I could learn from the concepts and apply outside of games, and it's an excuse to try and write a game. Right now Unity seems to be going all in on it (maybe because Acton works there now) and they have a huge ecosystem, so I'll use it as my game engine of choice and see what ends up happening.
I just optimized my snake game a bit, and I'm very happy with the results. Previously, since the graphics were done using roughjs, on every animation frame, I was computing the handrawn boxes for every single segment of the snake's body and the food. This was super expensive and caused frame drops when the snake grew to a reasonably large size. Now, before the game even starts, I render 50 handrawn boxes for the food and the snake's body, and then store the pixel data. When it's time to render the snake and food, I just generate a random index and pull the pixel data from the arrays. Thus, there's no need for any expensive computation, and as a result, the game runs much smoother; there's no frame drops even when the snake reaches lengths of over 100.
Growing up I was very heavy handedly taught to be humble and respectful, but I wasn't taught to balance it out with just the right amount of shameless self-marketing and priotization of myself over others. This went hand-in-hand with also learning to understand my own worth, and asserting it when it was called into question. I think these are important lessons to learn and teach in moderation.
I spent my entire weekend playing Red Dead Redemption 2, watching anime, and watching UFC. I enjoyed my time, but more and more I question the overall value of what I choose to do with my time. It's not just about how, instead, I could be learning something new or working out. It's more about the fact that I think I'm in a relatively good position to create some sort of positive impact in the world, and I'm not doing that. I don't think this decision makes me a bad or selfish person, but I still think about it a lot.
Mostly what's stopping me is the logistical overhead. I don't know where or how to get started. Moreover, there's this dissonance between expressing my desire to make a positive impact, but simultaneously not really feeling like doing the hard work necessary to achieve it. It's easier said than done essentially. I'll see if I figure something out eventually.
Every single time I write one of these, I manually type out
new Date().toISOString() in either the browser console or in the node REPL to grab the current date for the post lol.
A lot of times I don't share my opinions for fear of not having fleshed them out enough. I try to avoid making wrong assumptions, sounding pretentious, or whatever else. That's part of the reason this section exists. I reckon basically no one will read it so I'm free to be a bit more reckless with whatever's on my mind.
I feel like "get out of your comfort zone" doesn't convey its message directly enough. I'd rephrase it as "Do things you don't want to do or don't like doing if they have direct or indirect positive outcomes", but obviously that's way too wordy.
Consistency is the key to success in most endeavors. After repeatedly trying to get around that fact, I've found that there are no shortcuts, and thus only continuous effort can get you to your goals and keep you there.
It's hard though.
I've experimented a lot with compile-to-js languages, and I've come to the conclusion that, while they're very cool, they're not worth it if you're working on something solo; I think TypeScript is more than good enough. Ideally it makes sense to use one when you have a lot of people of varying skill levels collaborating on the same large code base. In that case, the time saved in developer productivity and bug prevention might be worth the trouble of learning a new language, writing bindings, and losing out on a lot of the ecosystem.
This site is built using my own static site generator using React + Typescript + CSS-in-JS, but that all compiles to regular HTML and the only JS that runs is analytics. I like the juxtaposition between relatively advanced tools and the minimalism of the website. I could have probably used something like Gatsby, but I liked making my own generator. Also I like how customizable my own solution is. For example
// syntax highlighting like this // is done at generation time on the // server and I get line numbers with // css counters targeting DOM like this <span class="line-number">code</span>
I think that's pretty cool.