James Wendel’s Ramblings

I’m a husband, dad, and software engineer. I’ve been a generalist at a few different companies over the years, currently working at Google. (Statements and opinions on this site are solely my own, and not those of my employer).

Things I Learned Building is.xivup.com

This is a WIP. Last update 2024-09-21. I wrote a fairly bland history of is.xivup.com, but I wanted to dive into some of the technical aspects of the site that are interesting (aka: this post). The code is not open-source right now due to “reasons”, so you get this blog post instead. Where it is now Running scc on the codebase yields the following: ─────────────────────────────────────────────────────────────────────────────── Language Files Lines Blanks Comments Code Complexity ─────────────────────────────────────────────────────────────────────────────── Go 35 5139 594 235 4310 721 Plain Text 22 22 0 0 22 0 Go Template 14 784 32 5 747 24 TypeScript 10 1662 194 157 1311 173 JSON 7 141 2 0 139 0 Sass 3 387 89 76 222 0 LESS 2 483 64 63 356 0 Markdown 2 181 21 0 160 0 YAML 2 583 22 27 534 0 HTML 1 68 2 0 66 0 JavaScript 1 2 0 1 1 16 Shell 1 24 8 3 13 1 Systemd 1 15 2 0 13 0 TypeScript Typings 1 68 10 0 58 0 ─────────────────────────────────────────────────────────────────────────────── Total 102 9559 1040 567 7952 935 ─────────────────────────────────────────────────────────────────────────────── The backend is entirely in Go, and the front is a mix of various tech....

September 21, 2024 · 5 min

Refresh of is.xivup.com (A History)

This is a brief history of the creation and maintenance of is.xivup.com. I have been running a server status website for FFXIV (Final Fantasy XIV, an MMO) since 2017 at is.xivup.com. The primary purpose of it is to have an auto-refreshing site that can tell people if the FFXIV servers are up. Because I suck at coming up with new ideas, this 2017 site was already a “v2”, as my original one was embedded on my FFXIV fansite I ran back before the game first came out....

August 21, 2024 · 4 min

As Things Pass

Note: this post is effectively just a journal entry for myself. Don’t expect much of interest here. 2022 was a turbulent year for my family. Early in the year my dog had major emergency surgery on the same day my father-in-law had open-heart surgery. That was a stressful, wondering if we would lose either or both of them on that day (spoiler, all went well for both! And the father-in-law is still going strong even today)....

June 24, 2024 · 2 min

My Firewall Made My Application 10x Slower

Intro Firewalls are great, until they get in your way. I run a simple website that occasionally gets really large traffic spikes, so I like to load test it to know its limits. I’ve been migrating it from GCP to Linode, and during the migration testing I ran into some performance bottlenecks. This has led me on a really long journey of writing my own nftable firewall rules. If you want to skip the firewall background, jump to the debugging section....

October 18, 2022 · 13 min

And Back to a Static Site Generator

I wrote about Picking Ghost a year ago, but I’m now going back to a static site generator. For personal writing, I previously published a few posts on another domain back in 2013. I used Hugo back then, but much of it was poorly done (and I wasn’t able to regenerate that site since ~2015, so it just languished). Last year I tried Wordpress and Ghost, but went with Ghost. And now in 2022, I’m back to Hugo....

September 17, 2022 · 2 min

Classical Enterprise Network Security vs Zero Trust

Opinions are my own and not those of my employer. While it’s been 6 years since I left Cisco to join Google, it’s interesting to realize that even back then, the 2 companies approached network security in very different ways. Snort and Enterprise Network Security I previously worked at SourceFire (which was acquired by Cisco) on their network security equipment. Their core software, Snort, is effectively a deep packet inspection tool with pattern matching (it’s a lot more, but that is the high-level)....

July 3, 2021 · 4 min

A Period and Two Spaces

Ghost subtly told me I am holding it wrong. As I’ve been writing posts with Ghost, I have seen that it will do odd things with paragraph layout if I put two spaces after a period. This aligns with Microsoft Word and most of the publishing industry, which says you should only have one space after a period. Per Wikipedia: The desired or correct sentence spacing is often debated but some sources now claim an additional space is not necessary....

June 5, 2021 · 2 min

Picking Ghost

One of the eternal questions for someone starting a blog is what platform to use. Let’s go through that thought process. Self Hosted or Not Hosting on a third-party platform would get me up and writing faster, but as someone who has previously run my own Wordpress instance, I like self hosting. My 3 main reasons: I enjoy the tinkering. Playing with Linux systems to get them working efficiently helps me to learn....

June 2, 2021 · 6 min

Final Fantasy XIV - Server Locations

This post was partially inspired by a FFXIV post from Reddit: How to check your NA server ping. My post below gives players real FFXIV servers to ping test against. With Final Fantasy XIV: A Realm Reborn releasing in two months, and with the beta servers now online with regional servers, I figured it was time to take a peek at where the servers were located. There was some guessing in the community that the North American servers would be located in Canada, and they are correct!...

June 16, 2013 · 6 min

Simcity - Launching the Launcher

Preamble When I first started looking at the Simcity 2013 traffic, I had hoped I could peak at all of the server communication they do. Sadly (for me), the team at Maxis was fairly smart when it came to securing their encrypted traffic and they were able to thwart my initial attempts to man-in-the-middle (MITM) the connection between the Simcity client and their servers. I plan on attempt that some more in the future, but for now I’m going to look at the traffic from a higher level....

April 1, 2013 · 4 min