Some Thinky Thoughts for 2021

So, as promised, I've been thinking about things.

First up, I am having this deep well of regret that I fucked up by targeting Java as the platform. For one, companies like Cloudflare are investing deep in WebAssembly, and their offering around durable objects is exciting. It feels like the right infrastructure for my language to target. Now is it going to be perfect? Doubtful, but perfect is the enemy of good which is a common fight I enjoy because I’m stupid. Furthermore, dfinity is introducing WebAssembly canisters to run in a decentralized way. IF ONLY I had the fucking to wisdom target WebAssembly, then I could leverage other people’s infrastructure. However, WebAssembly feels way too low-level for my patience, and there are a swarm of problems in targetting that directly. What if I translated to Rust?

Second, I must decide on what kind of platform I want to build and offer. A motivating concept at play is that I could see starting a company called “The Board Game Infrastructure Company” which is an exceptionally precise name given my propensity to leverage codenames for new efforts. The problem with starting an infrastructure company is people, and people are the worst. Making the internet easier is not free from burden, and I do not want to enable the infrastructure for child porn, sex trafficking, and terrorists. I certainly do not want to build and pay for an organization to handle that shit either, so that’s a bag I don’t want to own. This feeds into the regret around WebAssembly. Either I convert things to WebAssembly with hope that some sucker is going to build the right infrastructure, or I must design and build a distributed system as open source that runs easily on AWS. Fundamentally, Adama is going to look like a strange database.

Third, maybe my task is much simpler and all I should focus on making the language and devkit great. If I can make it simple and find the right boundary for others to consume, then they will figure out how to make durability great and do all the platform building. Take litestream as an example; sqlite is an exceptionally well-defined product with a good boundary and Ben is building an awesome thing to make it durable-enough. This seems to speak that if I can find the courage to balance work on the language with making great products then people will believe and help me. I don’t know, it sounds crazy.

Fourth, I am stuck on the UI bits because once again I am stupid. I do not like what the modern web has become, and I am not alone. Every time I start writing JavaScript or TypeScript, I realize that this is not going to last for exceptionally long. I know that I am going to fuck up and need to refactor, and it is just painful. I do not enjoy the feeling that I am marching towards despair, and I find great comfort in good languages with good tools. I am old and want things to last. I have Java from a decade ago that still works, and I like that. Therefore, I have decided to learn and master Rust, and I am having a good time. Rust is great, and I recommend it. I still have a lot to learn, but I am playing with WebAssembly and I expect to have some results this year.

Fifth, with Rust being great. I am making slow and steady progress, and I am having fun building one of my architectural katas: Visio. For instance, I wrote world bootstrap five years ago exploring JavaFX, but I dropped it because work was getting crazy. Basically, making a drag and drop WYSIWYG editor is a thing that I do ever since my college days (again, I’m stupid). So, this is how I intend to master Rust, and I’m liking it. Not only am I making a drag and drop editor, but I’m going to make a mess and make a tiny UI framework in Rust against only canvas. Maybe then I can use Skia and have a portable UI framework between desktop, web, android, iOS, and Switch. It is time to misbehave.

Sixth, as a recap, I finished the back-end for Battlestar Galactica last year, and it gave a rough cost for the UI that I’m not willing to pay at this moment since I can’t release it (but I did hear from Fantasy Flight Games with their rules and they can't help me). Finishing that back-end was enough to give me confidence that I have something non-trivial to contend with. However, the ultimate success of this entire endeavor is to have proof of results. This means shipping games. The good news for me is that people are insatiable for content, and I doubt the community will ever throw their hands up and say something like “these are the games for all time”. I am reading The Art of Game Design by Jesse Schell, and guess what? I am game designer.

Seventh, as I master Rust, I will get a sense of the cost of having my language target Rust. This is probably going to take 18 months to understand since reactivity is exceptionally hard. Java is a much nicer language to target for being productive, but where I am at this migration is probably a bad idea. Since reactivity is hard, my time will be better spent in learning how to make Rust reactive in a similar enough way on the front-end.

Eighth, the next clear thing that I must do from a platform aspect is design the API and implement a Rust library. Basically, the pattern is precisely what I wanted from Lamancha. I am opening up the original design documents for Lamancha to provide context for what this meant. Two years ago, I had a vision on how to build a new type of browser, and I started to build it with SDL and then with C#. The documents are rough, incomplete, but now open. Here they are: why project lamanhcha, core idea, the amazing octoprotocol for making compute durable, and the ultimate design quip. I'm sharing these both to share ideas, but also to clean up my messy private quip.

Finally, this project is going to depend on me shipping games. This is a fact, but I also do not want to deal with licenses, so I am designing a game. I intend to take this slow as I will be building tools to help me analytically determine balance. I can already have AI players play poorly with random decisions, and I may reach out to a friend in AI to task some research students with automating play blindly. The core nature of the game is a deck builder designed to be co-op against a narrative structure, and my hope is to make a fun game for couples to play. I have the elements of the story figured out, and that is a great deal of fun. I have this epic vision of game that can be picked up and stopped in reasonable chunks of time, but the entire game mirrors a 50 hour legacy game. Also, with it being co-op, I want it to be a serious challenge such that people have to look up strategies and socialize about them. It should feel like a raid.

Anyway, thanks for reading my thoughts. I also enabled rss which is available here /blog/rss.xml.