Explore, Expand, Exploit, Exterminate

So I’ve been binging 4X space games lately. I’ve had a couple of games of Stellaris going upstairs and downstairs, but I was doing some research on others in the genre to see what I had been missing. Then I stumbled across this trailer or Master of Orion and was like hell yeah.

The game is actually more polished and simplified that I expected. It seems like it’s targeting a less sophisticated gameplay loop than Stellaris or Endless Space. Seems like it plays faster as well. I thought I’d be able to rush through one last night and wound up staying up past my bedtime as a result.

These games all seem to have various components that are the same between the two: galaxy map exploration, solar system management, and planetary production. In MOO, the battles spawn these arena instances where it takes on an RTS feel. The rest of the game is turn based. Stellaris is real-time through and through, although you can pause it in the single player version.

It’ll be interesting to see which ways we go with Star Atlas. I’m not actually on any of the gameplay projects right now, and haven’t been following what’s been going on with the crafting and ship mission work. Today is the last day of the sprint though, so we’ll be getting updates on the various projects later today.

The dao is making progress. We’re digging into the architecture for the rewarder system, but it’s all mostly planning and figuring out what our parameters are going to be.

Quick note

I think yesterday made two times this week that I’ve broken routine. At least I can say that I’ve been getting plenty of sleep. Who knew all it took me to go to bed on time was a strap on my wrist. I’ve been working out as well. Nothing as strong as my times when I had Daily Burn and would spend 45 minutes every day doing a weight lifting or yoga video. Now I barely find time to get twenty minutes in.

To be fair meditation is taking a good chunk of my morning, but I’m going to have to start getting up even earlier if I’m going to get things done before the girls wake up. That means going to bed even earlier, might even be before the girls do. Wouldn’t that be something.

I’ve done a couple Exercisms over the past couple days. Just a couple of easy Rust ones to get me going. I wish someone had designed a Solana course. Of course, that’s a brilliant idea.

I could write more but life calls.

Rubber meets the road

I’m slowly unwinding certain… nonessential aspects of my life. Cutting off certain relationships, or winding them down rather. I’m still managing IT infrastructure for some failed projects and started transferring domains today. Work was very productive, we actually have some guidance on a few key deliverables. I ran also. This evening has gone pretty good.

“A fool who continues in his folly will soon be wise.” I’ve been listening to more Alan Watts, and this kinda summed up my approach to things right now. One of the things that my freshman year religious studies professor tried to explain about Buddhism was that it was like trying to walk through a concrete wall by not walking through the wall. “The Tao that can be named is not the Tao” kind of stuff.

Basically what I’m saying is that we need to write a Solana program from scratch. I don’t think I’ve yet to do that in any respect, instead, I’ve been reading other people’s’ code and reading unit tests. I have no idea what I’m doing. It’s not even imposter syndrome at this point, we have to deliver.

I’m training my Whoop fitness band, or rather, it’s training me. It’s calibrated to my sleep schedule and has me going to bed an hour earlier than normal. I’m pretty well rested but the key will be to make sure that I stay that way. I ran about two and a half miles this afternoon with my new running shoes. I decided to make it a short run because I haven’t broken them in yet, and I think it was a good call. I’m not sure whether I’ll keep them, they seem too narrow for my wide-ass feet.

Tomorrow is going to be a challenge. Missus has to get up early tomorrow to get her mom to a medical appointment, so that’s going to screw our whole morning. I’ll have to take Elder in a bit later than normal, and she’s already dis-regulated. She had a field trip today and is upstairs whining about one injustice or another.

I should probably take it easy tonight.

Evening pages

It’s early evening, and all three girls are in the kitchen getting dinner ready. I had a pretty good day, even considering that I tried to sabotage it by staying up too late last night. It wasn’t too bad, but it was enough to throw off my regular schedule. The good news is that we finally incentivized Younger to staying in her bed all night.

The trick was getting her to go to bed on her own. Normally she calls for her ‘five minutes’ with Missus, which usually turns into half an hour or more. I’ve been trying to stress to Missus to get her to stop laying in the bed until Younger falls asleep, but she hasn’t been doing that. So Younger is still so used to relying on Missus physical closeness to calm herself, and it leads to her waking up in the middle of the night and coming into our bedroom. Not last night. Younger went to sleep on her own, and we didn’t see her until about fifteen minutes before our alarms were to go off. She was bright and shiny.

We’ve been having some interesting special time lately, doing a lot of lifts, where I lay on my back and let the kids stand on my hands while I press them up like a bench press. It’s good for their balance, and my muscle control. Today we expanded it a bit and I finally got Younger to stand up on my shoulders. It’s actually quite a lot of pressure on my shoulders. I can’t imagine Elder standing up there. I’d like to keep practicing, to see if I could get Younger to climb up my torso, stand on my shoulders and onto my hands so I could press her up in the air, cheerleader style.

I finally got a copy of It Takes Two, a game about a divorcing couple who get turned into a couple of dolls by their young daughter and have to work together to get back to her. It’s a split screen game that requires that both players work together to solve various puzzles and challenges. It’s quite fun, although the cartoonish artwork is a bit at odds with some of the language in the game. We’re about a quarter of the way through it, and we’re enjoying it.

Work was ok today. Got some things done and started reading a PhD dissertation from one of the founders of Machinations. It’s about three hundred pages on emergent gameplay. I’ll have to add it to my texts on data-oriented design that I’m working through. Who knew that I’d be doing academic research as part of my job?

Skip day

Friday was another night of largess, and I paid for it Saturday with a general feeling of tiredness that lasted throughout the day. My mom and stepfather came down to celebrate Christmas, so it was still a good day, but I was so beat that I went to bed early and was asleep by ten.

The kids enjoyed themselves. Nana brought sugar cookies and some decorative markers for them to use to decorate, and they went to town with it. They enjoyed their presents. I cooked sirloin, sous vide with some creamy mushroom sauce that I made with Missus’s grow your own mushroom kit. I baked some diced potatoes as a side along with a store-bought green bean casserole. We drank a couple of bottles of wine and had various cheese and crackers for an afternoon snack. Then we wrapped up the evening with Encanto, which most of us hadn’t seen yet. Then they left and we put the kids to bed and I read twenty minutes of Rainbows End and promptly passed out. I didn’t even care that I hadn’t journaled or meditated.

I’ve got a busy morning. I’ve got SAIAdao business to attend to this morning, then I really need to turn my attention to the house budget, not to mention all the other stuff that needs to be done around here. I’ve got computer monitors everywhere, and more computers than I know what to do with. And I need to workout.

I got my Whoop fitness tracker in a couple days ago. It’s still initializing my data, but it’s already telling me that I need to go to bed earlier than I’ve been doing. About an hour, actually. My mom got me new running shoes, so I need to break those in before I got for a run, but for now I just want to do twenty or forty minutes of weight lifting before I hop on a call.

Much to do

Here’s to the week ending better than it began. My mood is much improved. My morning meditation was full of mind wandering, but I’ve been going to bed earlier than usual and so I’m well rested this morning. I actually had dreams last night, full of sex and drugs and strangeness. I ran almost five miles last evening, after the cold weather melted away and I decided I’d been sitting still for too long.

I got a new Macbook Pro yesterday, a gift from someone who helped me with SAIAdao and who I brought with me to Star Atlas. Higher companions, indeed. It arrived just in time, as well, I think I squealed on the Zoom call when I saw the UPS truck pull up outside the door. It seems neither of my two Dell/Alienware Ubuntu laptops were able to handle the secondary monitors. Chrome would cause the CPU sensors to go haywire, signaling an overheat, sending the fans into overdrive and throttling the CPU. It had gotten to the point where I was unable to participate in a meeting without them crashing. Anyways, it’s a bit difficult to adjust, what with all the differences between command/option and CTRL/ALT/WIN keys.

I had a call with the Machinations team yesterday about project A.L.A.N. Mach actually sprang from the founder’s PhD thesis, so all my autonoma and Turing-complete state machine mumbo jumbo went over well, but I still couldn’t answer the question about what we’re trying to build, or rather what I’m actually trying to do. It’s still a pie-in-the-sky idea, mostly wrapped up in my head, and I need to spend some more time fleshing things out in my head.

But first I need to concentrate on the daos. We had a bit of miscommunication issue internally and so I need to do some cram research sessions to fill in the missing piece. But first, I need to focus on getting out the next series of airdrops for Rebirth holders. And I need to get my own transferred as well. Adding to the list of crap that I need to deal with, my FLEET script has been throwing errors, and I don’t have the logging setup properly so that I can tell what the hell is going on. I know that there were RPC errors with our node providers, so I need to figure out what to do about it. We definitely need some sort of queue system that can resend transactions. In short, there is much to do.

And it is Friday, which means happy hour and probably a late night of hanging out online with people. It’s been a couple weeks since we had a proper Star Atlas happy hour, and I’ve got ideas about that. Human radio ideas. Just add it to the stack of things that I want to do.

I’ve been listening to Alan Watts lately. The Waking Up app added hundreds of hours of his talks to their app, and it’s pure gold. It’s completely replaced my podcast feed. I needed some philosophy in my life, that’s for sure. It’s definitely calmed me a bit. I think it’s helping fill a certain gap. My Intro to World Religion course freshman year (1997) really blew my mind and freed me of a lot of family baggage that I had been carrying around with me, and listening to Watts talk about eastern philosophy and various subjects is helping me shed a lot more. Plus I’ve been reading The Mind Illuminated before going to bed. A lot of Watts rhetoric is repetitive, he had certain go-to phrases that he would bring up during these talks, maybe it’s the way the editors grouped them together, but hearing them repeated over and over really brings them home.

But the morning carries on, and I must end here for now.

Time to work

So yesterday ended on a much better note that it started. The kids came home and I made sure to give them all my attention as soon as they came in the house. If I use the words special time they immediately want to wrestle and do horsey rides, so I had to be a bit subtle with them.

I had found a couple sheet music sites that had version of the Bruno song from Encanto, so I played that for them a few times to see what kind of grasp they had on the words, then we spent an hour going over it and trying to figure out who was singing which parts. It was pretty fun.

I managed to have a talk with Elder about our fight that morning, and more importantly, why we had been fighting. She seemed to get the picture, and we managed to get through the rest of the evening without any arguing. And she did everything that I asked. There was one moment when I was putting her to bed and she did that thing she does where she tries to fight me, but I managed to de-escalate it. She had the nerve to tell me that I hadn’t given her any special time. The nerve.

I played some Stellaris last evening. It’s been a while since I played it and I’m struck at the number of things that have changed since I last played it. They really refined some of the first contact missions, and there are other, more subtle changes as well. The game is really massive, as far as the number of various game mechanic and systems that are in it. It’s quite the achievement. I can only imagine if we can get half the functionality into Star Atlas, not only from a multiplayer experience, but as a multi-faction system where individual decisions are made both at the player level and at the faction level as well. It’s going to be interesting.

I had a couple of meetings with the other PMs yesterday and unloaded some of my anxiety about the last week or so. It was good to get things off my chest. I feel much better. The crew was very supportive, and we got some good work done around process. Then we played some games. We tried to start up a guild in Ogame, we’ll see if it goes any further than before.

Younger is home today. She had a “sore throat” last night so Missus wanted to keep her home. I think she’s being gullible. So I’ve got my morning routine down this morning and everything is fine so far, save for my laptops which still perform like shit for some reason. I can’t determine whether it’s the dual monitors or some other thing going on that is causing the CPUs to reach their temperature limits and get throttled. Something to do with Chrome, it seems. I don’t know, my new Macbook is coming today so I won’t have to deal with it for much longer, hopefully.

Manic-depressive

I’ve been in a bit of a funk the last couple days. Not sure why. I guess I’ve acclimated to my new success and just in a bit of a down moon. Last week I was fairly manic and full of ideas, now it’s like a grey cloud has settled over and all my ideas are shit.

The kids have been singing We Don’t Talk About Bruno from Encanto. LMM sure does know his songwriting, doesn’t he? They were dancing around the kitchen last night after dinner, it was super cute. But when it was time to put the girls to bed last night, Elder wanted to stay up and write the lyrics out for some of her friends. I swear I had to argue with her for five minutes before I finally got her off the computer and to her room. She was trying to negotiate with me, that she would do what I asked if I printed her the lyrics. I refused to agree. I told her that she had had all day to do that, but that she had had other priorities and now it was quiet time and she needed to go do her room.

I haven’t seen Encanto yet, so I spent some time pulling up sheet music and looking over it. I printed her up a copy of the lyrics and went to check on her twenty minutes later to tuck her in and turn off her light. She had her notebook out and was handwriting the lyrics. She had written out two whole pages of lyrics, and I was pretty impressed, it seemed like she had gotten 75% of the way through it and had gotten it completely right.

It must have been after nine. I tucked Elder in, then went to my bedroom to talk to Missus and I turned around and Elder was standing in my doorway. She had something to say, but I was livid that she had gotten out of bed, and grabbed her by the arm to put her back in bed.

I woke up this morning — Younger slept in her bed, thank gawd — and Elder was already up on her computer writing out lyrics longform again. Since she was up, I told her, she needed to get ready so that I could take her in when I left with her sister. I was tired of having to take Younger, come back to the house and wait ten minutes, leave with Elder, come back and get on with my day.

She kept arguing with me that she needed to get this done. I started helping her and she started criticizing what I was doing, or how I was doing it. I was DONE. I told her to get ready and that we were done. It went downhill from there. Each time I asked her to do something she responded with complaint, or negotiation, or anything other than compliance. I started to lose my shit. It devolved into a full-on argument with me threatening to beat her ass if she didn’t follow directions and get ready to go.

Then Missus got involved.

I had already printed out several copies of the lyrics for her and put it in her school bag, but I wasn’t about to tell her that I had done it until she had done what I asked. It didn’t go well. Missus had bought her some new winter socks, and while she was putting them on she started complaining that they were too itchy.

I swore, got any more complaints?

Things had calmed down by the time I dropped her off, save a short crying spell when I told her she needed to learn to follow my fucking directions. Yay me, dropping f-bombs at my kid again.

I got home, meditated, did a couple of sets with the weights, and here I am. Time to pull myself together and focus. I just don’t know what I’m doing.

Solana as entity component system engine

I don’t want to get too tied up in the usual diary-journaling and talk about how horrible I slept last night, instead I actually have the beginnings of a longer-form post about Solana and data-oriented programming. I’m not sure how much I can say quite yet as I’m just breaking the surface of things and am just forming my ideas.

The old joke about blockchains as really slow databases is funny because it’s true. Solana, however has always been focused on providing enterprise-level performance to the network. It’s got a long ways to go, from a stability and performance standpoint, but I think the core team and the community are doing a great job so far.

I’ve never been a programmer, per se, the best I can say for myself is that I’ve known enough about various programming languages over the years to be dangerous. My demonstrative knowledge is limited to various procedural scripts and smaller OOP type of programs written in Python, JS, bash, or dare I say, Powershell.

One of the benefits of being on the Star Atlas team, my first at an actual software/game development company, is that I’m surrounded by a ton of really smart people, and our tech leads are really solid. I recently asked them if they considered what we were doing as OOP, or if there was some other term that they would use to describe what we were doing. The phrase data-oriented design was bandied about by a couple people, and that sent me down my current path or research.

I’m currently reading Richard Fabian’s Data-Oriented Design book online, and while I’m only a couple chapters in right now I have also been reading up on various Entity Component System, which are basically data-oriented systems, somewhat popular in game development. If you want a primer on OOP vs. ECS, this 2018 RustConf keynote by Katherine West does a pretty good idea explaining it.

Basically, OOP ties together data and behavior into classes, whereas ECS keeps them separate. Entities are basically little more than an ID, and these are linked to various data-only structs. Behavior is kept entirely separate in systems, which simply perform read and write operations on various numbers of these components. The simplest example I’ve seen is a physics engine that calculates velocity. There are components for position, heading, and speed, and the velocity system iterates through every entity that has these three components, reads heading and speed of each one, then calculates the new positions based on how much time has elapsed.

The advantages of this data-oriented approach are numerous from a design and implementation standpoint, and there are also many performance benefits that allow pipelining and tend to reduce cache misses. Since these systems are operating on homogenous data types, they can be packed together more efficiently and can be processed synchronously.

The parallels with Solana are numerous, and to me, it was not apparently obvious coming into this space why Solana’s programming paradigm felt so different and unusual. For the uninitiated, Solana programs are stateless, and operate on a number of behavior-less accounts, which contain state only. These accounts aren’t limited to holding just one data component, but usually hold all of the state data belonging to a user or other program.

Going back to the blockchain as database analogy, ECS systems operate using a query system, and Fabian spends a lot of time talking about data normalization and relational databases. Now, one interesting thing about Solana programs is that they have no knowledge or ability to find accounts elsewhere on the blockchain. In fact, all accounts needed to perform a computation, that is, all of the data, has to be passed in the program instruction from an offchain client. Basically, one must query or enumerate these accounts using an off-chain client via RPC calls to Solana validators. Then they can be bundled into various program instructions and sent as signed transactions to affect various state changes.

If one considers entities as primary keys in a database, then you might say that the primary keys in Solana are created from pubkeys, whether they belong to a user or another program. The analogy is a bit forced here, but one can combine user pubkey, program keys and a bump seed to generate unique account addresses. These addresses are deterministic, so it’s unnecessary to keep a registry of these addresses. The client simply rehashes the inputs and does a null check against the program derived account. My understanding is a bit weak here, as one can generate all of the accounts owned by a particular program, but this is relatively costly if you’re only dealing with one user.

I’m still fleshing out these ideas, but it’s obvious that Solana is a data-centric system, compared to the EVM in which data and behavior are more closely intertwined. Experienced Solana developers probably implicitly understand this, but for those coming from OOP and more traditional (e.g. university-taught) computer science backgrounds, this comparison between Solana and an ECS might need to be more explicitly stated.

For now, I will continue to explore, and learn, and do some experimentation around data storage, cross program calls, and RPC queries, to benchmark how well Solana holds up when programs are designed in strict single-field data accounts. Using an off-chain client to query and batch process large numbers of these components across user’s may allow us to develop a large-scale game engine that can support a large user base. Whether this is possible remains to be seen.

Unreal

The cold has really settled in, it was in the twenties this morning when I brought the kids to school. It’s going to hit mid-forties today, will probably melt off most of the snow that’s still on the lawn. I’ve been running the gas fireplace in the den pretty much non-stop for the past week or two, only turning it off during midday when the heat becomes a bit unbearable, or when we go to bed at night.

I got a quote for home repairs from my friend A., who is a bit of a real estate pro and has a contractor that he uses for his work. It’s about six grand altogether, to repair the storm and garage doors, and a bunch of interior and exterior painting. The biggest chunk of it is the crawlspace. We need insulation rehung, better moisture barrier and a dehumidifier installed. I’m about ready to pull the trigger but feel it might be a bit steep. I figure A. is taking his 10% or whatever, but I don’t really have a problem with that. I just don’t have a frame of reference for what these thing should cost. As far as my hourly rate goes, I suppose it’s not too bad.

Today is payday, so I’ll make the decision then. I’ve been trying to use YNAB, but it doesn’t really do a good job separating my concerns. I’ve got the house account in there with my personal ones, and I haven’t figured out how to keep things separate without a bunch of manual bullshit. And I need to add my LLC stuff in there as well.

I’ve got so much that needs doing, but I don’t have the energy for half of it. Taxes, and making sure I fund my IRA for 2021 is probably the biggest pain point, and I’m definitely procrastinating on that.

I just realized that I’m now paying more in taxes than I made at my last job. Crazy how life has changed.