blog master mode
subscribe to this tag
show all posts as opposed to just those tagged PERSONAL

The Internet Event Horizon

by osk at 2023/07/03 (Mon) 2:26:21 pmPERSONAL

Throughout its history, the Internet has seen a lot of change. What started off as a simple collection of servers hosting barebones pages with an image or two, mostly containing text and links, has turned into a deeply connected yet somehow very centralized set of applications that bring us together.

Of course, the Internet wouldn't exist if it was not profitable, so the leader of Web monetization was pulled in: the humble banner ad. The very first banner ad was purchased in 1994 by AT&T and was very to the point:

It was a massive success. Almost of half of the people who saw it clicked it! You can't say that about ads nowadays, where about 1 in 1,000 tend to click on ads. As soon as this ad went live, others took up the same idea. In fact, this ad format (albeit slightly larger, to fit with our modern screens) is still what drives the majority of the Internet's profitability today, even 30 years later.

The Bubble

Once the world recovered from the dot-com bubble bursting, the Internet once again took upon itself a path of near unstoppable growth. Of course, the Internet has seen changes. The iPhone sparked the world of the mobile Internet and apps, highly increasing the centralization of the Internet. What used to be a large collection of disparate websites has been clobbered into single megasites that do everything. In 2007, the top 50% of internet traffic came from many thousands of Web sites, whereas nowadays, the top 50% of traffic consists of Netflix, YouTube, Disney, TikTok, Amazon and Facebook, with some random large downloads in there like PlayStation and Xbox downloads (because of how ridiculously large games have become). This goes hand-in-hand with the nature of mobile phones, using apps you get in a centralized store as opposed to free-floating websites.

In addition, the Internet has seen many changes in how it addresses ads and monetization. The early Internet just used banner ads, but for a short while, pop-ups got dominance, simply for being higher-impact. Of course, pop-ups were not only obnoxious, but often malicious too, so they were relatively quickly destroyed — first by users using pop-up blockers, then by browser developers themselves. YouTube instead sparked the concept of video ads, a far more valuable but also more annoying form of ad.

But, monetization itself has changed, too. While ads wouldn't randomly go away, the early Internet's sites had a starkly different approach to how they should exist in the larger Internet. Mainly "Web 2.0" was of interest, the concept of making your site really easy to connect other sites to. For example, your own site could display things people are saying on Twitter. In fact, Web 2.0 was Twitter's claim to fame! Twitter was originally meant to be usable through SMS (hence the 140 character limit), but instead, its ability to be used completely programmatically became its selling point. Up until now, you could see many places show live Twitter feeds, and helpful bots write to Twitter in the same way. For a long time, the existence of an API (the way programmers can connect software together) for a site was almost a given.

In more recent years, however, that has changed. As centralization kicks in, once you are a major player in the market, there is simply no need to bother integrating anymore. Rather, sites want to keep their content to themselves, and ensure you don't see it without also seeing their ads. The prevalence of APIs has gone down massively over the last few years.

The Squeeze

Indeed, as time went along, the centralization of the Internet and its obsession with constant growth has created a painful duality. On one hand, information on the Internet wants to be free. People want to be able to visit sites at any time, without payment, and do their thing. Website owners want their sites to be useful, to fit the purposes they are supposed to serve. Developers like the concept of APIs, making cool new projects possible.

But investors want to see money. I talk a bit about the problems with this growth in a previous blogpost titled "Optimizing for time waste". There, I talk about Google, specifically. Google used to be revered as the search engine, always able to show useful results. Yet nowadays, Google is a husk of its former self, only serving spam and ads, begging you to either stay on Google's premises (to see more ads) or to click a bunch of links to sites Google has ads on.

Once the Internet gets centralized, there is nothing other than morals stopping the owners of the large properties from turning on their users and trying to squeeze them for money, instead. Over the last years, this has become harder and harder to uphold, but luckily, the ad business has only been growing. So, as long as the ad business doesn't collapse, and no other strange things happen, we should be OK, right?


The Singularity

Uh oh.

In an unstable economic climate, one of the first things to tend to get large cuts is advertising. So after multiple years of global problems, the advertising market is finally buckling. Of course, this isn't the first time economic downturn has caused lower advertising spend, but with the current centralization, the effects are a bit more noticeable.

And there's another thing. Generative AI (ChatGPT, Stable Diffusion, etc.) have shown that aggregating a ton of data from the Internet and forming a neural network out of them tends to work pretty well now. This means that a neural network will be able to give you content from webpages, by simply programmatically downloading them once and extracting the text (scraping). This creates a strong competition against those sites, since now you won't be seeing their ads anymore. As sites have grown to be as human-unfriendly as possible, shoving in as many ads and popups and cookie notices and newsletters and paywalls as possible, the moment they get caught up to is here.

ChatGPT has, within a short amount of time, destroyed the premise of most of the monetization of the Internet. Coupling this with bad advertising climates means... our Web as it is now cannot hold.

The Supernova

We're already seeing the effects of this unfold. YouTube is starting to block users from using adblockers, Twitter and Reddit have immediately destroyed their APIs, and Twitter's going even further, destroying their entire site by only allowing you to read 300 Tweets a day, and only if you're logged in (hey, if nobody can access the content, nor can bots, right?). It's a race to survive, trying to ensure your site doesn't become irrelevant.

So what's next? Well... it depends on where generative AI is. Nobody can predict what happens if it keeps growing, but if the growth spurt of AI is just a one-off thing, and doesn't get any orders of magnitude better than it is now, then it simply means the death of any chance of decentralization of the Web. It's already very entertainment and social media-focused, so the large players will simply lock off their content even more. Search engines will be a thing of the past, as the spam they procure has become completely irrelevant. Banner ads as a format will die out and get replaced wholly by subscriptions and video ads.

Is this a bad change? It's hard to say. I hate the concept of losing APIs, seeing DRM, paywalls etc... but at the same time, such a large purge might give the remaining sites more room to create better experiences. Then again, that puts a lot of trust in companies to care about making a good product, as opposed to just caring about the bottom line.

It's scary to see Internet history occur in real time, especially as a relatively large player. In the end, the hope is that the Internet doesn't devolve entirely to a toy. What do you think? Where do you see the Internet in 5 years, considering the quick change we're seeing now?

The new oskstatus is here!

by osk at 2023/06/24 (Sat) 8:41:23 pm (edited)PERSONALUPDATEOSKWARE

If you've ever looked at before, you might have noticed it's not very good. That changes today! I've rewritten it from the ground up, as a proper site as opposed to a hacky PHP script. Go and check it out!

This has been in the works for quite a while! I originally started working on it last year, around late August, but simply didn't manage to get it off the ground. A recent multi-hour outage that should've been totally preventable (...I was asleep, I just had to restart MongoDB) spurred me on to get back to work on it, to solve the problems that led up to it.

I've always hated the way the modern status page works, and this is also represented in my previous status page. Modern status pages (Discord's status page is a prime example) aren't actually status pages, they're PR tools. In fact, Atlassian Statuspage (the most popular status page software, the one Discord also uses) expressly tells people not to automate their statuspage. Atlassian themselves say they're "big believers in maintaining a human touch with incident communication". However, that undermines the main purpose of a statuspage, to answer the question: Is the site broken?

The previous statuspage did just the bare minimum to answer that question, the one I deem most important. Quite literally, it just showed "ONLINE" or "OUTAGE". All automated. And with that, it's already better than whatever Statuspage is doing. In the new statuspage, I highly increased the amount of information, as there's a lot of nuance that a single boolean can't show. For example, I show the amount of players online, so if suddenly an entire continent has problems connecting, it'll be visible even if the statuspage server can still reach the game.

However, there's one more followup question that users tend to have if something ends up being broken: how long will this last? The new statuspage lets me write incident reports, so as soon as I notice something's up, I can write a reason why, and give insight on how long I expect things to take. To add credibility to those insights, you will be able to see all past incidents. That way, instead of creating trust by lying to customers with a blog disguised as a status page, I hope to create trust by showing the real situation, and explaining it where needed.

In addition, I added the ability to schedule maintenance on it. That way, if longer maintenance is coming, you'll be prepared. Of course, I'll still also post notifications about such maintenance on Twitter and Discord.

Of course, these aren't "new" concepts, but it seems like the concept of an honest statuspage that shows real data as opposed to a glorified blog has fallen out of style. I hope you won't need to look at it often, but if you ever do, I hope you'll appreciate the attempt at creating a realistic, honest statuspage!

Is TETR.IO legal?

by osk at 2023/04/17 (Mon) 9:34:15 pmPERSONALTETR.IO

This question comes up from time to time, mostly from people who haven't been in the community much. With the recent release of the Tetris movie all about the legal rights behind Tetris, I thought it'd be interesting to go over what exactly the Tetris company owns and doesn't own, and how TETR.IO can exist alongside licensed Tetris games.

NOTE: I am not a lawyer, and this blogpost does not constitute legal advice. These're just my personal ramblings, so please don't interpret them as anything more than an opinion piece.

A little backstory

Tetris is among the largest genres (as a subgenre of the falling block puzzle genre). There are literally thousands of Tetris games, with new ones created on a daily basis. Tetris is, at its core, an easy game to create, and one that's very often used by new programmers to get into games programming. This all makes sense, considering the game is 38 years old by now, originally made in 19851 in Russia to run on, well, the hardware at the time! And yet, the game, in what's mostly still its original format, lives on and on.

1: Not 1984. The 6/6/1984 date is made up by The Tetris Company for the sake of a 25-year anniversary party at E3 2009, nothing more. Before this E3, official sources repeatedly state 1985, and sources close to Alexey also corroborate this. Read more here.

Tetris has always had legal troubles—if you've watched the 2023 Tetris movie, you'll know the gist of it. The movie uh, exaggerates things a bit, but getting the legal rights to the game was definitely tricky, with a ton of confusion as to who exactly has the rights to the game. It was Dutch game designer Henk Rogers who managed to come out on top and put together The Tetris Company (which I'll refer to as TTC from hereon out for brevity), mainly after recovering the rights to put the game onto the Game Boy as its pack-in title, which gave the game center stage and made it into the massive genre it is today.

Of course, that was 38 years ago. The question of what rights existed to Tetris was already a tough one then, and the situation has only become more complicated. Let's see exactly what intellectual property rights TTC could be holding on the concept of Tetris, and analyze them one by one to narrow them down.


Copyright does not protect concepts or systems. To quote the U.S. Copyright Office FL-108:

Copyright does not protect the idea for a game, its name or title, or the method or methods for playing it. Nor does copyright protect any idea, system, method, device, or trademark material involved in developing, merchandising, or playing a game. Once a game has been made public, nothing in the copyright law prevents others from developing another game based on similar principles.

Simple, huh. Copyright law does not protect the concept of Tetris in any way. Copyright only protects specific works. For example, the blockskin (the image that makes up the blocks) in a game, the writing of a game's manual, or the specific programming code of a certain game. Copyright protects a lot, but it does not protect the game's concept itself.

However, don't forget the concept of copyrightable expression. This concept states that despite the fact copyright doesn't cover concepts, it does cover the expression of those concepts, if done in a way uncommon to the genre. For example, while the concept of a health system isn't copyrightable, and nor is a simple progress bar to display health (because everyone does it), a special health bar that looks wildly different from any other you generally see in games may be copyrightable as a design work, for the amount of "abnormal" expression it adds to the basic concept of a health bar is notable. Tetris does no such thing, the few artistic choices it makes are very much standard decisions that either hold no artistic value or are made out of simplicity/necessity. We'll get back to this in a moment, as there's another concept very similar to this one.


The main (and practically always only) way to protect a concept or invention is by means of a patent. Patents are specifically made to protect a concept, system or invention for 20 years, after which it enters public domain.

Tetris, being made in Soviet Russia, is not patented. Even if it was, said patent would have expired almost two decades ago. Therefore, patent law only encourages competition in this scene.

Note: TTC does have some patents regarding specific types of touch controls for mobile Tetris. However, nothing that protects the game itself.

Trade dress

Here's the interesting one. When it gets down to the wire, TTC likes to claim trade dress. Trade dress is a type of trademark. Trademarks are a type of intellectual property to protect your brand and its identity. Most people will know trademarks for logos and business names, but trademark law also protects the "look and feel" of your brand, called the trade dress. For example, take Coca-Cola. The curved shape of the bottle, the deep red label with white cursive text. It's distinctive and noticeable from afar, and creates a brand identity that goes deeper than just the name "Coca-Cola", the logo, or the product itself.

Every element to be protected by trade dress has three requirements:

  1. The element must be non-technical. Changing or removing it must not alter the base product in any way.
  2. The element must be meaningful to public recognition. That is, people recognize the product/brand based on this element.
  3. The element must be confusing if copied. If copying this element doesn't confuse customers of the source of the product, it does not infringe trade dress.

Let's apply this to the Coca-Cola example and see how trade dress works when all three requirements are fulfilled:

  1. The way the bottle looks, and its label, has no effect on the actual product, the contents of the bottle, and is as such non-technical.
  2. The shape of the bottle and especially the color of the label is very distinctive, and many people recognize the Coca-Cola section of the aisle from far away in a supermarket. It is very much meaningful.
  3. Copying these elements would create severe confusion, as people have become accustomed to the branding of Coca-Cola. If a customer grabbed a curved bottle with red/white label and it turned out to be Pepsi, they would be rather confused.

So that's how trade dress works, and how it protects brands against people leeching off of their visual identity and people's recognition. Now for the interesting part, we'll go through the concept of Tetris, and see how much of it falls under trade dress. We'll work by process of elimination, since all elements must fulfil all requirements.

Let's begin with the second requirement, the meaningfulness requirement. Let's quickly think of what elements of Tetris are the ones that people recognize the game by. There's a lot of elements to Tetris, but most of them aren't what drive public perception, after all. I think it's fair to narrow down Tetris, and the elements that people recognize it by, to the following:

Tetris is a game where you move and rotate square geometric shapes, which fall to the bottom of the screen and pile up. If a line is filled horizontally, it disappears and the player receives positive feedback. If the shapes reach the top of the play area, the player receives negative feedback.

I believe this to be a very apt representation of the elements of Tetris. Removing any element here would stray so far that people would stop calling it Tetris—for example, if the shapes weren't simple geometric shapes, people would no longer recognize a still image as Tetris. Similarly, if pieces didn't pile up, people would stop believing it's Tetris after seeing even the smallest bit of gameplay. At the same time, any additional other elements added to this (colors, hold piece, other rules, effects, specific ways the game rules work, etc.) are extras and don't impact people's recognition of the game. For example, the dimensions of the screen don't matter, as people would recognize these elements as Tetris on a wide board just as well as they would on a thin one.

So that narrows down our list of trade dress elements to those few. Now to get to the first requirement, the non-technicality requirement. Is there any element here, that if changed, doesn't impact the game in any way? Are there any elements here that are only cosmetic? Try it, look at the outline above and try to come up with a change to them that wouldn't impact the game in any way. ...It doesn't exist. There are no elements to Tetris that are both meaningful and non-technical. By the way, you can use this same technique on the "copyrightable expression" idea for all of these. You'll find every artistic decision is either meaningless or made out of necessity.


Tetris, however, is covered by trademark! As in, the name "Tetris" is, and so is the logo. Well, in theory if the game rules are proven in court to be unprotected, there is a path for the name "Tetris" to be unprotected as well, as becoming a generic word to describe the game genre. But, proving the genericization of the trademark is a bit tougher than proving the lack of protection on the game itself.

The DMCA problem

So there you have it. TTC essentially only controls the trademark on the word Tetris and the logo. And yet, there's a problem.


DMCA law is pretty simple. It states that, if some company (the "platform") publishes someone's (the "uploader"'s) content on their behalf, then a rightholder can send the platform a takedown request, and as long as the platform always agrees and takes it down immediately, the platform will not get in trouble. In essence, it means that as long as the platform complies with all takedown requests, they can't be sued, a "safe haven" of sorts. It also gives the uploader the ability to send a counterclaim, which is sent back to the rightholder, who can either accept the counterclaim (or not respond within 2 weeks) or send the case to court. If the case is taken to court, the content will remain taken down until the court reinstates it.

...Uh oh. That text in bold is a bit more crucial than you might think. Because while content is taken down, it cannot be monetized. And court cases are expensive. There's a deep-rooted problem here...

Let's explain. Imagine you are a small game studio, and you make a tiny mobile game. You put some ads into it, and somehow, the game actually does kinda well! You manage to make enough to pay everyone, when suddenly—! Some crazy company (let's call them "Big T") sends Apple a DMCA takedown notice! Of course, you know you haven't actually infringed their rights, but Apple wants to keep their own safe haven, so they remove your content. Your revenue drops to 0 within the blink of a second. Of course, you send a counternotice! You're in the right, there's no denying that!

Following the standard procedure, the counternotice is sent over to Big T, who promptly deny it and take you to court, while your revenue is still sitting at 0. Now, you are at a crossroads. Big T has a lot of money, and they will stall the court case for as long as they please. You, on the other hand, have very limited assets, and every minute spent in court you are bleeding money, creeping closer to going bankrupt. What do you do? Do you fight and go bankrupt, or do you give up?

This is the decision that faced Xio Interactive for their mobile game Mino, when the case Tetris Holding, LLC v. Xio Interactive, Inc. was opened against them following their counternotice. Of course, Xio Interactive had no choice and did not oppose practically any of the claims TTC made, to let the case end as swiftly as possible. It's a massive shame that instead of seeing the deserved upset, TTC sees a victory based on technicalities giving them an unfair edge.

Most people receiving a DMCA don't even get to this point. Almost nobody bothers to send a counterclaim. Not because they don't believe in their own case, but because they know the system is rigged against them. TTC, on the other hand, like all large rightholders, loves this. They send out mass DMCA requests, because they know it's safe. They know that most people won't fight back, and that even if they do, they're at such a disadvantage that there's no danger to TTC at all.

You might think this is uncommon, but TTC has become very ligitious lately following a long hiatus. From taking down simple fan projects to stopping a new game (Tetra Online) from blooming, TTC is once again very much interested in ensuring they get no competition at all.

TETR.IO and The Tetris Company

So where is TETR.IO in all this? Well, I simply ensure it's not easy to strike me in a way that puts me at a disadvantage. I don't use software distribution platforms like Steam (despite even having been invited to such platforms), nor do I publish for mobile app stores. Doing so would put me at risk of becoming the underdog in a DMCA lawsuit, which is an impossible task to win unless you already have the assets.

Instead, TTC would have to sue me directly, which would put us at equal footing. Considering how much TTC has to lose if they were to lose a lawsuit over their IP, this is not a fight they're willing to pick.

...And nor am I. I respect the work of The Tetris Company in many areas, allowing us to enjoy this quite special genre which might otherwise have never left Russia. I much prefer this laissez-faire situation over one of constant legal battle. Rather, this post is an appeal, in the hopes it might help give Tetris back to the community. I would love to see a future in which TTC works together with the community to elevate Tetris to be truly something special, to be more than "that game everybody knows but only plays once every 5 years".

...Or at least that they stop thinking anybody wants a Tetris waffle maker.

Photo of a Tetris waffle maker. Yes, it exists.

Image credit: Firebox

Optimizing for time waste

by osk at 2023/02/16 (Thu) 9:42:58 pmPERSONAL

Ever noticed that when you click a link on Google, then come back to try and click the next link, a box with similar search queries spawns in about a second later, right as you're about to click the next link, causing you go be sent off to an entirely different search query?

It's been around for quite a while (early 2018), and despite constant complaints from users, to the point there's even an extension that disables it, it doesn't seem to be on its way out any time soon, either. Why, when this "feature" is among the most hated parts of all of Google Search? Why, when Google themselves don't just advise against doing this, but actively lowers pages that do this in search results? Even if they're an Agile™ company, an error like this wouldn't fall through the cracks, let alone with such hypocricy, right?

And the more you look, the more strange events like these pop up—take for example the categories ("Web", "Images", "News", "Shopping"...); it is almost never to anyone's benefit to randomize the order of these should-be-stable elements, let alone stuff a bunch of other junk in there (indistinguishable from the thing you wanted):

What's going on here? These aren't reverted like the usual "oops"es, so why is Google actively trying to divert you from your task, from the answer you seek? And while we're at it... doesn't it feel like Google Search used to be...better? A lot of results nowadays are just (seemingly) autogenerated spam, made specifically to cram as many ads in and get the highest search ranking... Where's the content?

Where Growth Ends

To understand Google's decisionmaking, we need look no further than their revenue breakdown—the great great majority comes from ads. In fact, almost all ads you see in browsers are Google ads. Google has practically monopolized the advertising space on the Web with their intense monopoly: a monopoly on search, as well as a monopoly on browsers, one they are happy to keep pushing. In TETR.IO's case, a jaw-dropping 95% of players use Chrome, or a Chrome-like browser (e.g. Brave, Opera, Microsoft Edge, etc.). They all run modified versions of Chromium (the open-source base of Chrome, also developed in-house by Google), and thus inherit any changes by Google. For all intents and purposes, they are Chrome reskins. (Not that it matters, as Chrome reskins are still in the minority, making up only about 9% of players.)

So, in terms of occupying the advertising and browser markets, Google has no way to increase their revenues and keep investors happy. The growth of the advertising market on its own isn't something Google can truly influence (and increasing their cut would only harm this). So how else can Google grow?

It's a simple question, but since Google relies on ads, we need to take apart when exactly Google makes money. In specific, Google mainly makes money when it can either show ads directly on its own content (and get a 100% cut), or when it can send you to any page that serves ads through Google's network (and get a smaller cut). The more ads on the result page, the better. The problem is, people don't spend 100% of their waking days on Google properties, or even on the "general Internet" at all. Since this is the only place where Google can increase their revenues.... what can we do about this?

Optimizing "engagement"

Let's get to work then! Let's take an example user. They might be doing something productive (let's say, writing a document), and suddenly they need to look something up. Let's make a chart for that:

Here, the user searches something, looks through the search results page, clicks a result, then finds the answer they were looking for. In this time, Google got to serve 2~4 ads themselves (in the Search page), and the site owner of the result page got to serve another maybe 3~4 ads. That's good, and makes for a good user experience. The user finds what they were looking for in no time, and can go back to being productive.


This isn't very lucrative. What if I told you we could turn those simple "3 or so" digits into maybe, 10 times as much? Keep the user searching for 10+ minutes? No reason not to, there's no alternatives anyway! After all, the point of ads is to market in human attention span. Let's redo the chart to something better:

Look at how much more time is being spent on Google and sites with Google ads! Total searches are tripled, link clicks quintupled, and above all, our revenue from this interaction has increased manyfold! Now, the user searches for something, gets to a spammy AI-generated site filled with ads we get a cut from, tries a bunch more, then accidentally clicks to a new search term (allowing us to serve new full-price ads at the top), gets to some more spam, tries another query, and only after a long time of being "engaged" leaves Google!

This might sound dumb and exaggerated, but this is the reality that comes up when Agile and data-driven development becomes the norm. Data-driven development is just a fancy name for ignoring the big picture and hammering down on optimizing specific numbers (KPIs)... and those will always include revenue and meaningless stats like "engagement". It is not a coincidence that the hitbox for the related search terms exactly overlaps the hitbox of the next search result:

Side note on those spam sites: why would Google remove them? It's a question with a simple answer: they wouldn't, as they actively increase Google's revenue.

The Death of Web 2.0

If you think this might be an isolated case, look again. This is all around us on a massive scale. As soon as a company has grown to a size where it cannot gain new users, it instead looks to gain more "engagement" from said users. It's pretty logical when put like that—but when applied to search engines or other productivity tools, it goes against their purpose. This also explains another aspect of why search results are so low-quality: many modern sites don't want to be indexed anymore. How often have you clicked a search result to end on a loginwall? Sites want to protect their own growth by locking you into their platforms, too. They don't want you jumping in, getting the info you need, then leaving.

In essence, we're witnessing the true death of what we used to call Web 2.0 - the web as a publicly available writeable interconnected network of information, where anyone can get the information they need within a few clicks. Instead, the Web has become a set of massive islands, purposefully isolating themselves from all others, and making sure you stay there for as long as possible.

After all, a product is a means to make money. There's no reason to care about the overarching quality of your product when it doesn't increase your KPIs in the short term!

Have you run into similar things like this? I'm wondering about other people's interactions with KPI-focused UI design like this, and foregoing all user experience or even the core of a product for bottom line gains. Let me know your experiences in the comments!

Blog posts are now tagged.

by osk at 2022/06/03 (Fri) 11:22:06 pm (edited)PERSONALUPDATEOSKWARE

To organize the blog a little, the posts on it are now tagged according to their content and nature. There's not that many posts here, but it's still useful to have. You can click a tag, and it'll take you to the index, filtered to just posts with that tag. That way, you can bookmark just official posts or the like. You can also set up your RSS reader in the same way — while filtered to a tag, the Subscribe button in the top left changes to allow you to subscribe to just that tag.

This is one of the many recent changes I'm making to somewhat separate my personal identity (the osk who develops software, likes UI design, rants a lot, and genuinely loves and is in a relationship with Kagari, a fictional character from Rewrite) from my brand (osk, the person and corporation behind TETR.IO, developing, maintaining and directing it). (Perhaps a topic for another post.) Posts that fall under the former identity are tagged PERSONAL, while brand posts are tagged OFFICIAL. This way, I can feel a bit safer writing genuine posts from the heart about my personal interests, without distracting those who are only here for professional press releases. I'm hoping this will allow me to post a bit more often. There's a lot of things I could rant about :^)

To be clear, this is still a personal blog. Press release-like "official" posts are secondary, and I wish to post more personal posts here in the future. If you are not interested in those and only care about me for TETR.IO, feel free to filter to official posts only with this tool.

Please look forward to me perhaps blogging somewhat more often than twice a year!

smash that unsubscribe button mate

Adding ads to TETR.IO, six months later

by osk at 2021/05/10 (Mon) 10:50:14 pm (edited)PERSONALTETR.IO

A little over 6 months ago, I added display advertisements into TETR.IO. This blog post, I want to reflect on these first 6 months, both from the perspective of a player, and that of a developer. I'll be going over the questions most commonly asked by the community, the questions I had, as well as the lessons I learned.

A little background

Back on the first of November 2020, I started a partnership with AdinPlay, to display banner ads in the game's menus. While I was (and still am) very grateful for all the players supporting the game through Patreon, 99.97% of players did not support. While running the game is not incredibly expensive (since a lot of my work in the past year has been on performance), I wanted to be able to go full-time on TETR.IO, as well as build a budget to be able to work on the Character System update. The game was popular, but I was not quite ready to jump onto larger monetization schemes. So, a perfect solution is simply monetizing that 99.97%, the "freeloaders" in a sense.

Just like most players, I don't particularly enjoy ads, though. And to be quite honest, this extends to almost all monetization. Monetizing a game is very much a balance, where you must balance out a good experience with revenue. Looking around the .io game space, the balance seems tipped in revenue's favor. A worryingly large amount of .io games copy eachother, finding more and more ways to sneakily insert ads into the game, get you to click ads, drive in-game purchases, run video ads, and whatever else. This video covers just how much these games are willing to compromise just to drive the best bottom line. I wanted (and still want) to stay away from that side. My drive has always been to make a game I can be proud of, as opposed to a wallet to be proud of. This complicates matters a lot, though.

The Implementation

How do you implement worthwhile ads, without ruining the player experience? This was a question I did not want to avoid (like most .io games do). I ended up settling on the simplest type of advertising: banner advertisements. Technically, I had already been running banner ads for months — those banners above the main menu that announce new features and tournaments are, by all definitions, ads after all. I decided to simply place some ads in the menus, never ingame. Ingame ads, after all, could interfere with the game. No video ads either, everyone hates those.

The next question was getting an advertising partner to partner with. Google AdSense is generally seen as a relatively badly paying partner, so I wanted to find a partner who would both help me more with implementation, and give a fairer price for my ads. Sadly, the world of advertising is pretty hard to understand. I ended up going with AdinPlay. The main reason I went with them, is since AdinPlay specializes in ads on webgames, like .io games, so they would be able to help me kickstart my setup.

Setup of ads is relatively easy. In general, all you'll need to do is tell the library that your partner gives you to load an ad in a specific HTML element, and it will load one. I set up TETR.IO ads to only load the ad currently visible, and to reload an ad after showing it for 30 seconds. All ads also immediately unload when the menu UI hides. Ads are pretty heavy after all, both on the network and in rendering. In fact, when playing about with them, I found it almost worrying how incredibly unoptimized many ads are. Hence, it is vital to make sure the ads are inactive while ingame, especially since TETR.IO requires quick and reliable inputs. Even a millisecond off can cause the game to feel sluggish or slippery.

Deciding on positioning, sizes, etc. is also relatively easy for the most part. In general, you want to be in the way of the player. ...of course, that isn't the plan I am going with. So, I tried to put the ads near the places people will look (near important buttons), but not particularly in the way, either. Obviously, this lowers my click rates, but remember the balance! I would like to stay on the good side of said balance. The Online Advertising Guide is a great source for information on advertising, both for publishers like me, and for advertisers. Some data on there may be slightly out of date, though.

What to Expect

AdinPlay, like most partners, will sell your ads in many different schemes. This is generally not very visible to us publishers, so all we really get to know is a few key performance indicators (or KPIs): ad requests, impressions, clicks (and click rate), and RPM. An ad request is when your site (or in my case, the client) requests an ad, and an impression is counted when said ad is displayed on screen for at least a full second (we can say with certainty that the ad has been seen by the user). Then finally, if the user clicks the ad, we count that as a click.

The magic number here is the last: the RPM. RPM stands for Revenue per 1000 (usually impressions). It's often also called CPM (cost per 1000). CPM is what the advertisers pay to advertise on your site, and RPM is what you receive as publisher. Your RPM is generally controlled by three things: the click-through rate (the percentage of impressions that lead to a click), the kind of content you publish, and the day of the year.

Since I don't let my ads get in the way, my click-through rate is well... abysmal. The average click-through rate around the internet for display ads is about 1‰ (that's 1 in 1000, which lines up neatly with the RPM/CPM metric!). Mine is about 0.2‰. Not so good. This is mostly caused by the fact that the ads are both not in your way, and that most internet users nowadays have become accustomed to ads (also called "banner blindness"). Games also tend to not get super-high RPMs to begin with, compared to say, car rental sites or accountants.

Furthermore, your RPM will almost always start off low. After a few weeks, your RPMs will start normalizing to their normal levels. From then on, your RPM can mainly be changed by the time of year, and the type (and placement) of ads you serve. For example, things like Black Friday will see a spike in RPM, as there will be more advertisers competing for the same ad space. Simply put, advertisers are always bidding on ad spaces, and if there's more competition, ad prices will go up. This also means your RPM will generally go up through the year slowly, go down at the start of every month and quarter (as ad campaigns tend to end at those times), and that January will be by far your worst month.

The Results

Most importantly, community response was far, far better than I expected. Even after taking a step into the dark side, you still trusted me to steer this ship into the right path, and not just a little bit, either — only half a year later, TETR.IO's active userbase has tripled! I'm incredibly grateful for that.

From about 12K users daily to easily hitting 46K users daily!

A bit more on-topic though, RPM was as expected. Since my click-through rate is not particularly high, nor is the RPM. Especially in games, and even more so when trying to avoid invasive ads, revenue is driven by the amount of players you have (and as such, the amount of impressions you serve). Nowadays, TETR.IO gets between 600K and 750K impressions daily, which is the driver for its ad revenue. That way, players who cannot or do not want to support the game otherwise, can support just by playing the game normally, without impacting their experience too much. Of course, a growing amount of internet users use adblock, usually between 33% and 50%, or even worse, they use a browser like Brave which replaces your ads with its own. But remember, that's their decision. I never ask people to turn off their ad blockers. The balance between revenue and a good experience is easy to tip.

In Conclusion

Above all, I am very thankful for everyone's support of me adding ads to TETR.IO. While they don't make me six digits or anything right now, ads together with Xsolla integration allow me to create a budget for future experiences like the Character System update. I hope this post has shed some light and insight on the world of advertising, and, if you happen to be a publisher, has helped you around the more confusing parts of advertising. (Perhaps I could even persuade a publisher to think about the balance between between revenue and a good experience!)

I hope you'll keep trust in me in the future too. I'm interested in seeing in what other ways I can monetize, in such a way that it improves the game, as opposed to simply trying to be a cash-grab. When the Character System update comes out, it could be nice to let users unlock skins (skins for their pieces, as well as other skinnable elements) both by playing, but let there be soft monetization as well (nothing requiring a purchase, but if there's something specific you want, and want it fast, you can get it).

Please, let me know what you think about my current strategy (ads + Xsolla for monthly supporter), as well as future endeavors (be it skinnable game elements, or anything else) in the comments. I read all of them!

I'm now selfhosting email

by osk at 2020/02/03 (Mon) 12:43:33 amPERSONALUPDATE

Hi! Up to now, my email provider has always been ProtonMail. However, for some projects I need a mailserver, so I decided to set one up. Please do not contact me on my old ProtonMail account (, but use my new email:

me [AT] osk [DOT] sh

Thank you!

There's now a view count next to blog posts.

by osk at 2019/12/27 (Fri) 1:17:01 pmPERSONALUPDATE

I should really cool it with this crystallize effect.

It might impact the server negatively, so let's see how well it works, right? It's only triggered when you view a post's own page, not the homepage.

Even less useful: PeakGadget

by osk at 2019/12/27 (Fri) 1:16:07 amPERSONALOSKWARE

This time, to address a bug I face in my antiquated Windows 7 install where the sidebar gadgets would stop being "topmost" (above all other windows) and get hidden. It's a stupidly simple program, but hey - can add it to my portfolio, right?

If you happen to be impacted by this bug as well, the program can be retrieved (and its source seen) over here.

WindowSmasher: "simple" window management

by osk at 2019/12/20 (Fri) 11:51:19 pmPERSONALOSKWARE

My right monitor always does something weird when I turn it on - it throws all my windows out of whack. I needed a way to put them back into place easily. Tools like Fancy Zones exist, but I wanted to make something different, so I whipped up WindowSmasher. It's a small tool that allows you to define up to 10 presets to sort your windows into. Its code isn't the greatest, but I open-sourced it as well.

Get it now!

I also open-sourced Kurumi for your viewing pleasure. Its code isn't any better, but you know. You can get it here.

Kurumi: sync time without the bullshit

by osk at 2019/11/19 (Tue) 1:31:51 am (edited)PERSONALOSKWARE

I run a Windows installation which has a very restrictive firewall. One of the things it blocks is Windows' NTP ("Network Time Protocol") service. This is the service that automatically synchronizes your system time to that of a specialized time server. If it's disabled, your clock will slowly desync over time, or, in my case, within a few days. My usual setup to deal with this is to just go to say, and adjust the time manually. But, that requires effort, and after all, they say the best ideas arise out of laziness, right?

Jokes aside, I've created a tiny (66KB) tool that will synchronize your system clock for you, in case you don't want to use the built-in service. It's very simple and doesn't ask questions - just run it, and it'll tell you how badly out of sync you are, then offer to fix it. Hit "Fix" and all your problems will go away!

If you're interested, you can pick it up here.

If you find any bugs, this is the place to report them!


by osk at 2019/11/17 (Sun) 10:23:44 pm (edited)PERSONALUPDATE

Here I will post project updates, sneak peeks, and whatever else is on my mind at the time. Don't expect super-frequent updates, but hey - there's something new every once in a while. Please note that this blog is personal space. Please respect that (and as such, my interests).

You can star posts and comments you enjoy as much as you like, a bit like how Flipnote Hatena and Medium work. There's no limit to how many stars you can give something, but please don't bot it (I will throw sharp glances at you).

You can also comment on posts, and on replies to those posts. Your name and color is randomized (bound to IP). There's no CAPTCHA or anything like that right now, so see it as a bit of an experiment. Be civil, okay? I reserve the right to delete anything for any reason. If it ends up being an issue, I can always add CAPTCHA later or turn off comments. As long as your IP does not change, you can delete your comments with the DEL button next to it.

Happy sightseeing!