All Updates

Finished Heavensward last night.

That was a good expansion. I might have to NewGame+ it at some point to get the story a little more coherently (and not spread out over several months).

I was extremely disappointed in the final trial, though. I'm not sure what it was like originally, but now it's been nerfed to the point that it's barely a game.

It looked pretty and was great to watch but that just goes to show: it should have been a cut scene. Indeed, a cut scene would have been better because they could have had anime moves and things!

As the final climax of the entire expansion, it really undercut the experience. That said, I'm trying not to let it spoil everything that came before because the rest of it was really quite good.

I wanted to link to that big entry down below but to do that, I needed to add permalinks for microblogs.

That exists now. See?

That last "micro"blog was a doozy. Maybe I don't need to add a "real" blog engine after all.

Since this is my site, the character counter is just a suggestion, after all. Hmm.

One issue that I've had since the beginning was "How do I represent the different item types (book, game, project) in a strongly typed way while also reducing the amount of boilerplate I need?"

In C#, I'd just make some interfaces and an object hierarchy and call it a day. And while one can do that in F#, it's against the spirit of what I'm trying to learn.

I went down a few paths (including some pretty gnarly heroic reflection code, immortalized in this "delete all the old code" commit) but nothing ever really felt right. I ultimately just ended up copy-pasting a bunch of the same code into Book.fs, Game.fs, and Project.fs and moved on.

I've slowly been solving this, starting a couple weeks ago when I added some discriminated unions to represent each type (in this commit). That ended up with a lot of similar code in pattern matching blocks, but I felt okay about it because the compiler was going to help me out by noticing missed patterns.

Then, last weekend, I watched a talk from Mads Torgersen on "The functional journey of C#". He made a point that a big difference between OO and functional programming is that OO lets you put new behaviors in one place (encapsulated in the base class, perhaps) while functional programming makes you spread it out all over the place and duplicate things in each function. But the functional approach is more extensible since all the behavior is out in the open.

He said it better. Go watch the talk.

Anyway, I've taken that to heart and done a great big refactor today.

Before, I really wanted to be able to have a list of, like, FormField<'t> to support things like FormField<string> and FormField<DateTimeOffset> and FormField<string option>.

This is fine as far as it goes but:

  1. You can't put those in the same list because they're all different types
  2. You can't pattern match over the generic type so it's hard to do things with them

This wouldn't have been so bad in C#. I'd just have a non-generic FormField interface or something. I don't know. But in F#, it's kind of a drag.

So I embraced what Mads was saying about duplicating behaviors as needed. I now have a new "FormField" concept where each FormField is a discriminated union of everything that a form field could ever be.

I wrapped up a bunch of pattern matched functions to do things with these and it's kind of annoying but really not that bad. The compiler and tooling helps a lot here.

I'm pretty pleased with it.

I know this is far from perfect and not what an F# master would write.

But I think this is a solid improvement and shows how much I'm growing into this new-to-me language and paradigm.

I can only imagine six months from now when all of this seems really gross to me and I have much better ways to accomplish all of it.

I can't wait.

The infinite boss rush combined with "we'll go into an animation any time you're doing well to make sure that you lose your ATB charges and limit breaks as often as possible" as a hell of a way to design an endgame.

"We like the end of the game to be completely different from the 40 hours that came before so the player is dramatically unprepared. It's like two games in one!" -- Nomura, probably

I might have to put this one down for a few weeks.

The end of chapter 17 and the beginning of chapter 18 is just a non-stop thrill ride with no chance to catch your breath!

Or to save and go do something else.

Which is to say, I've played this for a bit longer than I wanted to play it.

But the end is in sight. My Intergrade experience is almost here.

Finished the Vath quest line.

Still got a fair bit to do for the Vanu Vanu and Moogles. They're never satisfied.

I was very amused that the final Vath quest was "Go talk to the leader" who told me what a great guy I am. Quest complete.

Decided to play a bit on my Steam Deck while we watched TV. I forgot that my gearsets don't sync over and didn't notice when I switched jobs that I no longer had the assigned gear.

The screen is so small that I also didn't notice that I spent about 40 minutes running around naked.

It's Eorzea so I'm sure the other players didn't even notice. But it certainly explains why I was suddenly so bad at crafting!

I really applied myself and spent several hours doing all of the GC crafter turn-ins and Zhloe Aliapoh's collectable turn-ins.

This is called "productivity". At least as far as Sunday is concerned.

Made it to the Shinra HQ lobby. I'd completely forgotten about the "break into the main reception desk" subplot.

But I think I'll save that for another day.

Anyone who's looked at the GitHub for this site can see that I need a lot of help...this one comes highly recommended so I have high expectations!

Today's the day.

I've spent the week polishing all the rough edges I could find.

I've got a commit ready to go to change the index route from "Under Construction" to...well...this.

I still want to write up something to put on social media to tell people about it (I am kind of proud of how this has turned out!) and then I can push that commit.

It's time.

I decided to mark this one as “Did Not Finish”.

It’s not a bad game at all, but I find that I just don’t care about it. Given the length of the games I play, I need to get better at abandoning them when I’m not super-engaged.

Might as well start that practice here.

After a solid day of downloading, I did manage to get the game running on my Steam Deck. It's very cool, although I continue to find that the PS4 controller is really just perfectly balanced for this game.

As heavy as it is, the Steam Deck is not perfectly balanced for anything.

Still, it is a nice novelty if nothing else. Looking forward to leveling some crafters while watching TV.

Just saw this recommended by Jerry Holkins.

I was just getting out of high school when this was published and I completely missed it. But it sounds rad so onto the infinite backlog it goes.

Utter failure today. My controller keeps glitching out, the game keeps crashing, and I don't have enough internal SSD space to even try to get it running on my Steam Deck.

It is definitely not an Eorzea day for me, for whatever reason.

Not sure if the first post-launch feature will need to be a no-context microblogging feature (possibly published to twitter) or a real blogging engine. Either way: do I actually have worth saying?

I've created a colophon. The site is feature complete! I'm not happy with the copy at all, though. So I need to spend a few days thinking about the writing. But I'll probably launch next weekend! Exciting stuff.

Added visible tags and individual item pages today. v1 of the site is nearly complete (indeed, I almost thought it was done until I remembered...) except for the colophon.

One more static page and then I'll just need to look at it very hard before making any small tweaks and going live.

I can't believe it's almost finished!

I got the "list" pages working under the "What am I...?" buttons in the sidebar. I am so excited about it. It looks so good.

Things are really coming together over here and I am starting to feel pretty proud of how it's turning out.

Is it just me or is Edge absolutely worthless? Almost at level 50, he has no evasion at all, and he is easily one-shot again and again. I finally just left him KO'd in the fight against Asura.

I am sort of surprised to learn this because I thought I was a purist but...I really hate random encounters. I thought I would never make it through the Sylph Cave.

So far, chapter 9 (practices for working on a team) seems the most valuable. Chapter 9 on its own might be a good book club topic one day.

I've been watching Mark's talks and reading his blog for a bit so I decided to buy his books. This one is a bit entry-level (sort of like Code Complete) and in some ways I'm reviewing it for if I'd recommend it to junior developers. But even then, it has some valuable insights. It's good to be reminded of the basics now and then.

I did a very small amount of refactoring cleanup. The code is really disorganized and it's not at all clear to me how to improve it.

More importantly, though: I did decide to add Markdown support. It was very easy thanks to the Markdig project.

Spent a little time with FF7R today while I still mostly remember how to play (to the extent that I ever did! I am...not good).

Cleared chapter 14. Moving ever closer to climbing a whole lot of stairs. (j/k, I'll probably take the elevator this time...)

The front page now has dynamic microblogs (like this one!) on it.

I'm still debating if I'm going to support markdown in these or not. The time to make that decision one way or another is fast approaching.

The project code is also really starting to get away from me: a lot of that is to be expected since I'm learning F# as I go, but it might be time for a major cleanup refactor soon. I just need to learn more about what that should look like.

I've completed the BTN and MIN quests for Heavensward. Gathering is so much more pleasant than crafting. (Except for fishing. I am just about completely over fishing.)

Starting to think about leveling my crafters again. Started trying to do some of the GC turn-ins and ended up spending an absolute fortune on Wind Crystals.

It's probably worth it, but funding issues will keep this at a pretty slow pace.

Half of my static is on vacation for a couple of weeks, our Heavensward journey is paused.

Instead, I've got SMN and SCH to 60 so I can heal in any content we'll come across before the next expansion. With my 60 PLD and RDM, I've now got all the roles covered.

I've now got all of the static content on the main "About" page laid out in a responsive fashion. Will start working on the dynamic stuff next time.

It's looking good! I'm almost tempted to disable links to pages that don't exist yet and put this up instead of my "under construction" banner.


First-World Hack: If you have two sets of Air Pods, pair one set with your phone and one set with your gaming PC. Put one bud from each set into your different ears. Then you can have podcasts in one ear and epic Soken music in the other.

Yes, this is obviously an extravagance.

Unlocked The Aetherochemical Research Facility yesterday; just about done with Heavensward. I wasn't going to play today, but actually ended up dipping my toe into the Moogle quests. That's inspired me to start leveling my crafters again so I did the GC delivery quests for all of them. Kind of a pain, but I got a level for each of them.

I started working on the user-facing site today! I've got the main layout built out and it's responsive and everything. One day, you may even see this very message in that layout! Exciting stuff.

Sunday was also for playing this game like it was my job. Did the level 60 job quest for PLD, got to the next job quest for SMN and SCH, and spent some time just working down the hunting logs for...well, everyone. I've neglected them, but you get achievements so I might as well. Also did all the quests to unlock the Moogle Beast Tribe quests. I knew they were crafting quests, but I still ended up disappointed about it.

Saturday was for playing this game like it was my job. I unlocked the next MSQ dungeon, did the next class quests for BTN and MIN, turned in my first collectables for scrip, unlocked the Vanu Vanu dailies, started to unlock the Moogle dailies but balked at needing to do 19 side quests to get there, did do all 7 side quests to unlock the Allied status for the beast tribe quests in ARR, and even sold some maps on the market. Time to do something else now.

Got to Matoya's Cave today. OMG: The music! The brooms! I just adored everything about it. What a delightful treat.

I've put some real data into the backend so I'll actually have something to look at when I start styling the frontend. Probably next weekend. We'll see.

According to my walkthrough, I'm barely 1/12th of the way through; and I've found myself with no desire to pick it back up.

At this point, I'm waiting for this to be my first "Did Not Finish" on this website.

Looking forward to finally unlocking Idyllshire so I can progress with my gatherers. They've been 60ish for so long now.

Waiting for my static to get ready to go fight a space whale, I've been leveling alt-jobs. Just about got my Paladin to 60.

Today, I am "feature complete" for the backend: which has allowed me to write this, the inaugural microblog in the production database.

Next up, it's all about presenting the data in a pleasant frontend!