Perhaps it's somewhat arrogant to assume that any of the ideas for side projects I'm going to come up with now are good enough to make a lasting impact outside of my own life. I shouldn't try to force it, or let it prevent me from working on practically useless things.
Today I read and discussed this article on cultural appropriation with a friend, which TL;DR:
The tension isn’t stemming from the surface act of borrowing from another culture; it’s coming from the inequality surrounding it.
Nowadays a national conversation really means that everyone is participating and syndicating their views and opinions about a topic — only the most compelling sound bites bubble up and get amplified. And what that means for the CA dialogue is that it ends up getting whittled down to “black people are saying white people can’t wear cornrows” or “white people can’t wear hoop earrings” or white people just have to — as Katy Perry so eloquently put it — “stick to baseball and hot dogs.” But that’s not the end goal of calling out appropriation. The goal is to make things more fair both on a cultural and economic level.
The reality is when I’m asked ”Can white women wear box braids?“ the answer is ”Yes, of course. People can do whatever they want.“ But until things are made equal, they’ll be doing it in a context where the people being “appreciated” will always express the pain of living in a world that’s not fair.
I find myself reflecting on this article, and on how my views have changed on a wide array of topics over the years. There's a lot more to unpack here, but I won't.
The ideas behind pretty much everything I'm learning or want to learn were pioneered decades ago. I don't know if I want to be putting in the work to actually implement those ideas or if I want to be innovating on something new. It just depends on what I value.
I never did end up making that game. I didn't have the passion to make time for it in my day. There's a lot of tech that, similar to games, I feel an initial impulse to learn, but they're just too much work. This isn't a comprehensive list, but off the top of my head
Low level programming
- Better understanding how linux/windows work at a low level and how to develop for them as platforms.
- Network protocol implementations e.g. how HTTP/2 works.
Devops / infra / architecture
- Terraform, docker, kubernetes, envoy / linkerd, vault, consul, etcd, and so much more.
- So many tools and buzzwords. How do people actually build things that scale. How to architect and manage SQL DBs. Authorization. Monolith vs SOA. What's the point of Kafka lol.
- OpenGL / Vulkan / whatever
- Physically based rendering
- Actually writing some grammar and then a recursive descent parser for it
- Learning more about macro systems in programming languages
- Babel macros for JS
- OCaml PPXs
- Hygenic macros for Rust
and not worth another category, but I'd like to learn more about CRDTs.
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.