Kartones Blog

Be the change you want to see in this world

This isn't worth a post

"This isn't worth a post" is lately a common answer I give to myself when thinking about writing or not.

To me, it's becoming harder and harder to strike a balance between posting at least minimally interesting stuff and not keeping to myself tiny bits that might be of use to others.

The best example is a recent scenario: My Linux laptop and the current house's internet router don't get along 100%, after some inactivity the wi-fi connection would go down and take a while to reconnect. Some network troubleshooting later, disabling wi-fi power saving seems to have solved the problem.

Should I have posted about it to help others? Searching at DuckDuckGo at least, you need to either include iwconfig in the search terms, or dig in the first page of results and read them to find a clear & concise & up to date answer. But on the other hand askubuntu.com has 99% of answers to any issues I've ever had, and I think it is good to learn about finding things around the net and finding decent sources of information, even if it takes a few attempts. You will learn how to use the site and be a little less dependant on search engine ranking algorithms.

At least in some cases it's quite clear: My reviews, my experiments, my pet projects and the like are a clear "yes"; I'm learning some modern Javascript, NodeJS and related topics, but as there are so many good tutorials, courses and articles out there I won't post anything general related with the language as it is hard to add any value.

But often, I feel the contents won't add enough substance, so I discard them. Anyway, the "genuine" posts will still be written so I guess this is more of a rant than a real problem to solve 😃.

Book Review: Sid Meier's Memoir!


Sid Meier's Memoir! book cover

Title: Sid Meier's Memoir! A Life in Computer Games

Author(s): Sid Meier

Sid Meier and Will Wright are, alongside John Carmack, probably the most influential Game Development-related people regarding my favourite titles. I've already read a few books about id Software, so this title looked very appealing to me.

It covers four decades of videogame design and development by the author, an amazing feat by itself, but considering he created Railroad Tycoon, Pirates, Civilization, Alpha Centauri and other jewels of the computer gaming market... becomes clear that Sid is a clever guy that knows and loves what he does.

We'll learn from the beginnings of MicroProse, focusing at first just in flight simulators, and how initially side projects, less ambitious titles in which not many believed slowly became the main focus of the company. With ups and downs, with good and bad decisions, challenges and problems derived of growing and being acquired, but in the end with happy endings almost every time.

The book is not only very enjoyable, easy to read and often fun, but also, at least for an uninitiated in game development like me, full of interesting design advices, stories of initially bad decisions (thankfully) corrected and how they became pivotal points in simulation games history. As an example, Sid initially opposed to Civilization II being moddable, but a colleague slipped the data files in plain text, and it proved critical, as users created countless mods and "total conversions" for the game:

I knew that modding was a great way to ensure that Civilization never saw a third installment. I was so wrong, on all counts.

It's great to read how small inspirations like "The Princess Bride” could spawn combat systems for Pirates! (and Monkey Island, but that's another story), how they cheat the battle outcomes in favour of the player, or the process behind each iteration of the Civilization series:

Civ designers traditionally follow a rule of thirds. One-third of the previous version stays in place, one-third is updated, and one-third is completely new. These days, "updated” is a synonym for "scaled back to make room for the new things,” because we don’t want the game to become too complicated for someone who’s never played.

A comment from The Digital Antiquarian serves as a good complement of the initial issues with Avalon Hill, as the book's version claims to have the boardgames at the office but not have actually played them:

Put very crudely, then, Railroad Tycoon can be seen as 1830 with a SimCity-like railroad simulation grafted on in place of the board game’s pure abstractions. Bill Stealey claims that Eric Dott, the president of Avalon Hill, actually called him after Railroad Tycoon‘s release to complain that "you’re doing my board game as a computer game.” Stealey managed to smooth the issue over; "well, don’t let it happen again” were Dott’s parting words. (This would become a problem when Meier and Shelley promptly did do it again, creating a computer game called Civilization that shared a name as well as other marked similarities with the Avalon Hill board game Civilization.)

Regarding this particular point, things would get uglier years later:

[Avalon Hill and Activision] jointly sued MicroProse for copyright infringement. Avalon Hill couldn’t have afforded the suit on their own, and Activision had no legal standing without Avalon Hill, but together they hoped to gain control of one of the most successful names in gaming history. The executives at MicroProse responded with an equally winner-take-all attitude. Instead of countersuing, they went overseas to Hartland Trefoil, the original owner of the British board game, and bought the company out entirely. MicroProse now owned the ongoing licensing deal that had been granted to Avalon Hill in the first place, and judiciously rescinded it—along with every other Avalon Hill contract.

Ironically, Sid left MicroProse and the company he founded, Firaxis Games, would handle all future Civilization games (plus Alpha Centauri, and even the X-Com series!) after MicroProse disappeared.

The book is such an amazing journey that made me want to play again all the great titles mentioned. Inspiring, enthusiastic and very interesting.

A few more interesting sentences to close up:

  • The primary job of a game designer is not to make something fun, but to find the fun
  • Rewriting history, not reliving it [...] simplified
  • One of my big rules [regarding features] has always been, "double it, or cut it in half”
  • "Simple plus simple equals complex"
  • People play games to feel good about themselves
  • Imagination never diminishes reality; it only heightens
  • If you present players with options A, B, and C, and 90 percent of them choose A, then it’s not a well-balanced set—an interesting decision has no clear right or wrong answers. [...] If players are evenly distributed among A, B, and C, but they all chose within three seconds, then it’s not a very meaningful decision. Any answer would have worked.
  • Good games teach us that there are tradeoffs to everything, actions lead to outcomes, and the chance to try again is almost always out there.
  • Ideas are cheap; execution is valuable.

Book Review: System Design Interview

In the past I failed one job interview because I didn't asked enough critical questions and designed a system wrongly, so I decided to strengthen my knowledge about the topic and recently read the following book.


System Design Interview book cover

Title: System Design Interview – An Insider's Guide

Author(s): Alex Xu

At more than 300 pages, it is not a small book but one that you can easily get absorbed by and read fast (even taking notes). It contains lots of scalability advices and tips, distributed among 15 (simplified) real-world scenarios. Each one is presented as a one-liner sentence with the exercise, like "Design a rate limiter", "Design a web crawler" or "Design Youtube". Then details the critical pillars to define, goes on details with each one, sometimes iterating adding complexity and features on each iteration (e.g. high availability, insane scalability, multiple devices, ...), and finally wrapping up with some closing details, extra points to maybe discuss if enough time, and the like.

There are many diagrams, the text is clear but direct to the point, most times not digging into unimportant details (and a few times leaving as homework checking them), and the structure and general discussion is great. The book also includes a handy back-of-the-envelope chapter to learn to do some calculations and estimations of storage, speed, capacity, scalability, bandwidth...

If I had to mention something to improve, it'd be the depth of some of the topics. While some scenarios get insane amounts of detail, others are very shallow, just mentioning pieces in my humble opinion way more important than others that are indeed extensively detailed. Doesn't happens often, and you can always go dig deeper by yourself.

Overall I'm really happy with the book, I summarized all scenarios and added additional details and a few new ones to practice, and now stands as a very valuable reference to me.

A new chapter awaits

Today was my last day at Worklytics. I'm really really grateful for the past 15 months. I could not only learn to write proper Java and get to know Google BigQuery, but also, after all the pandemic-originated not always good events, being able to have big blocks of deep focused work due to the remote nature of the job was very reinvigorating. I've also had quite some fun working with around a dozen different APIs while building new data connectors and improving existing ones.

There wasn't time to see my final creature/project, platform-wide pseudonymization, fully deployed in production, but most if not all of the remaining big parts are already at pull requests waiting to be merged, so at least I'm happy to leave with a feeling of having done my homework. Although we faced additional challenges due to asynchronous and potentially concurrent data ingestion jobs, our approach is similar to how Shopify recently did their PII tokenization project.

Now comes a very interesting new chapter... but first there's going to be a small break. We need to pack our things and clear some pending tasks, as in the following weeks we're moving outside of Spain. The destination and next gig will be known in time (sorry for the cliffhanger!), but both place & company are amazing and I couldn't be more excited about the upcoming future.

Zombie Infection Simulator mini-game

Over the last few days I've picked an hour here and there to build another entertaining small project. A zombie infection simular game.

Zombie Infection Simulator game screenshot

It is a port of a Java + Processing framework game with the same name by Kevan Davis to Javascript + HTML 5 <canvas> component for rendering.

I wanted to start practising some Javascript and play with canvas scaling so adapted the code and then made some small tweaks. There are a few changes and improvements that I would like to do, like more clear separation of entities and layers, or the fact the game doesn't runs at a fixed framerate (just enqueues another game loop iteration when current one finishes + optional delay), and probably many optimizations can be applied, but at least now I have a fully working version to use as the base. I'd like for example to try creating a version with graphics (also as an excuse to try Phaser.io), even if the amount of humans/zombies needs to shrink. But as I said, I now have the foundations and now can improve both the Javascript code itself and the game features whenever I can and want.

It is fun and relaxing to watch the little pixel humans panic from seeing zombies, and how the undead slowly but inexorably infect all the population (most times, the random city layout a few times creates isolated areas).

You can find the source code at my Github, or play it online from https://kartones.net/demos/026/.

Previous entries