novov blog2023-10-27T00:00:00+12:00https://novov.me/blogUnicode is Worth Ithttps://novov.me/blog/posts/unicodeisworthit2023-10-27T00:00:00+12:00My thoughts on a colourful cast of characters.
<p>In computing, one guideline has came to define how text is encoded: <a href="https://home.unicode.org">the Unicode Standard</a>. The vast majority of letters you see on the screen - on a website, Word document, or in the file system - uses the <a href="https://en.wikipedia.org/wiki/UTF-8">UTF-8</a> encoding of it. </p>
<p>Being a nearly universal standard, it receives plenty of criticism. In fact, I was being a little misleading with the title, since I am not above criticising it myself. Plenty of Chinese, Korean, and Japanese computing experts have sharply condemned <a href="https://en.wikipedia.org/wiki/Han_unification">Han unification</a>, and for the most part I agree with them. And as plenty of developers know, Unicode's complex historical context has lead to a design that is at times inelegant and inconsistent: Ω is not the same as Ω.<sup class="ref" id="ref1"><a href="#fn1">1</a></sup> Sometimes, people even advocate doing away with it entirely, and reverting back to multiple encodings. For instance, from an <a href="https://web.archive.org/web/20211226171536/http://www.gnu.org/software/moe/manual/moe_manual.html">old version</a> of the GNU <code>moe</code> manual:</p>
<blockquote>
<p>Replacing all the 8-bit character sets with Unicode is like trying to simplify transportation by standardizing on the same kind of (excessively) large vehicle. I.e., forcing everybody to use a vehicle as large as the largest vehicle anybody may need. Just like owning a normal car may be orders of magnitude cheaper than owning a four-engined airliner, text tools using an 8-bit character set may be orders of magnitude more efficient than those using Unicode. </p>
</blockquote>
<p>Or <a href="https://hn.algolia.com/?dateRange=all&page=0&prefix=true&query=author%3AWalterBright%20unicode&sort=byDate&type=comment">comments</a> by the creator of the D language, Walter Bright:</p>
<blockquote>
<p>The imposing is inflicted by the Unicode standard on everyone in the world who have no use for never ending new invented encodings for the same thing... What should give pause in advocacy for the tarpit of Unicode is its unimplementability. That's a giant red flag that something went horribly wrong.</p>
</blockquote>
<p>This is a position I strenuously disagree with - a universal character set and encodings that use it are good things.</p>
<hr />
<p>Core to many of these claims is the idea that <strong>different languages should use specialised encodings</strong>. Unicode, according to these critics, has accreted unfathomable complexity in service of an impossible goal. And indeed Unicode is complex - but replacing it with multiple encodings would just hand most of the complexity off to a different source. Most OSes handle strings at a fundamental level. Instead of string facilities in operating systems and programming languages having to handle the minutiae of Unicode, they'll have to handle the complexities of different encodings. Imagine that instead of one kind of string in UTF-16 (Windows)/UTF-8 (most Unix), there’s now around 10, all of which have to interact with core OS services. And all of them operate on their own standards, instead of the singular body of Unicode standards.</p>
<p>Even then, this is assuming that different developers even <em>bother</em> to implement it. In our current Unicode world, many still don't handle complex writing systems such as Arabic <a href="https://notarabic.com">very well</a> - a fact that is commonly pointed out by detractors of Unicode to admonish its complexity. Let's look at the below Arabic text:</p>
<p class='highlight'>
نيوزيلندا
</p>
<p>This is legible to your average Arabic speaker. Unfortunately, it isn't when incorrectly rendered as something like:</p>
<p class='highlight'>
ن ي و ز ي ل ن د ا
</p>
<p>It's easy to blame Unicode, but developers wouldn't have the impetus to handle different languages at all without it. Unicode at least forces compatibility with <em>some form</em> of text, and badly-rendered text is better than no text at all. Given the dynamics at play, the latter would be inevitable with the hypothetical Unicode-replacement.<sup class="ref" id="ref2"><a href="#fn2">2</a></sup> Currently, a person can transmit Arabic that was badly rendered by one system to another one that competently renders it. But if they can't enter their native language in the first place, then - to use a technical term - they are stuffed. </p>
<p>Unicode's rules also provide a guideline for correct implementation of rendering these languages: there are always inherent difficulties with rendering scripts that are more complex than simply letters side by side, and it makes more sense to account for that in a basal manner. Since developers have to build a non-zero implementation of Unicode features for many things English speakers use and expect, such as emoji, there's an incentive for developers to handle global languages properly. With many different encodings, many simply wouldn't bother.</p>
<p>There's also the issue of mixing different languages. Due to the Western world's preeminent position in the global cultural sphere, a lot of colloquial speech in different languages freely combines various writing systems. Anecdotally, I'm in communities with non-English speakers, and many of them casually mix English and their native language. Even if they don’t, a lot interact with multiple scripts for, say, speaking Czech at work but playing in English on Steam. And this mixing occurs in more formal contexts as well, such as official names, English translations, abbreviations, or technical terms. For instance, a good portion of corporate Chinese, Japanese, Cyrillic, or Arabic text is interspersed with English brand names:</p>
<p class='highlight'>
ニンテンドー3DSシリーズおよびWii Uの「ニンテンドーeショップ」
</p>
<p>Sure, one could switch between encodings for this - but it's a lot of rigmarole for a task that is far more common than the majority of English speakers would expect.</p>
<hr />
<p>People will also say that <strong>multi-byte characters are bad and should be avoided</strong>. This is a very tempting claim to make, as a lot of string handling in low-level programming languages would suddenly become a whole lot easier. Before Unicode became popular, the assumption was generally that a variant of <a href="https://en.wikipedia.org/wiki/ASCII">ASCII</a> would be used, where each character would neatly fit in a byte. Much of Unicode's complexity comes from the fact that to store many different characters, it has to encode most characters in two or more bytes.<sup class="ref" id="ref3"><a href="#fn3">3</a></sup> So if this was avoided, it would greatly simplify things... except, not really. Although this would work for English and the ASCII character set, languages such as Chinese and Japanese have heaps of characters - a conservative estimate would be <em>at least</em> 200,000 for the former, which is more than is able to fit in a byte, or even two bytes. Systems that maintain the ideal of one byte simply don't work in many places; this might have been easy to ignore in a pre-Unicode era, but in an increasingly globalised world, it's not.</p>
<p>Despite what some people say, supporting non-Latin scripts isn't a nice-to-have. It's very easy in an English-speaking world to dismiss the importance of other languages. But Mandarin Chinese is the second most popular language in the world, and has almost a million people who are native speakers. These people deserve to not only have basic operating system support for naming files, writing documents, and reading web content efficiently, but also be supported in applications that perform more specialised tasks. Even if you've building a tool for an obscure language or niche hobby, or cutting corners and trying to get your product ready to market ASAP, you'll never know who ends up using it. </p>
<p>In the early days of Unicode, multi-byte encoding was also criticised for being inefficient at storing text. Initially, most Unicode software used the <a href="https://en.wikipedia.org/wiki/UTF-16">UTF-16</a> encoding, which stores every character in either 16 or 32 bits. But most implementations nowadays use UTF-8, which preserves single-byte encoding for ASCII characters; this also has the advantage of some backwards capability with programs that assume that a byte is coterminous with a character. Only scripts used by other languages, such as the aforementioned Chinese and Japanese, are relegated to higher amounts of bytes. Some people still criticise this as prioritising Western languages, but the amount of these characters is so great that many would still take up multiple bytes even if they were given first priority. And I believe these languages being segregated into their own second-class encodings with limited support would be far more deleterious than the additional bytes.</p>
<hr />
<p>Another complaint is that <strong>Unicode has a whole bunch of useless characters</strong>. Typical examples given include:</p>
<ul>
<li><strong>Emoji</strong>: 😖😵💫😳😱</li>
<li><strong>Mathematical lettering</strong> <span alt="which is often used online for decoration">𝑤ℎ𝑖𝑐ℎ 𝑖𝑠 𝑜𝑓𝑡𝑒𝑛 𝑢𝑠𝑒𝑑 𝑜𝑛𝑙𝑖𝑛𝑒 𝑓𝑜𝑟 𝑑𝑒𝑐𝑜𝑟𝑎𝑡𝑖𝑜𝑛</span></li>
<li><strong>Enclosed characters</strong> <span alt="like this">🅻ⓘ⒦🅴 🅃⒣🄸Ⓢ</span></li>
</ul>
<p>Due to the vast amount of Unicode characters - mostly Chinese, but plenty exist from other languages as well - any encoding that stores them all must be able to have a maximum length of at least 32 bits. But while the amount of characters cannot comfortably fit into a smaller size, 32 bits still leaves heaps of empty space. So most of the extraneous symbols are, to be quite frank, harmless. If you don't like them, you could almost pretend that they don't exist.<sup class="ref" id="ref4"><a href="#fn4">4</a></sup> But in fact, they can often be helpful: while people often consider 𝕏 𝖃 and 𝐗 to be useless decoration and an inappropriate usage of Unicode, they often have very distinct uses in mathematical equations.<sup class="ref" id="ref5"><a href="#fn5">5</a></sup> If other characters deserve encodings due to their semantic meaning, these do as well, and their codepoints have plenty of practical applications, such as screen readers or contexts without rich text.</p>
<p>What <em>is</em> undeniably a negative is that Unicode has multiple encodings for the same symbol. But despite it causing issues now, it was initially a very useful feature. For Unicode to gain wide adoption, it needed to be a lossless conversion target; i.e. it needed to have everything that previous encodings had. While the result may not be optimal in the present, I think it goes without saying that the alternative of Unicode <em>and</em> several other individual encodings would be even worse.</p>
<p>Similarly, the vast amount of characters leads some to claim that <strong>nobody can possibly implement all of Unicode</strong>. But this is beside the point. Nobody could implement all of the internet cabling that spans the globe. Nobody could implement a lot of things as a single unit, but our collective force allows the world to work cohesively regardless. The same is true here: plenty of Unicode libraries exist, and just like other complex aspects of programming, people can build on the shoulders of the metaphorical giants. On the user-facing end, most modern applications allow fallback fonts. If the user needs certain characters, they simply obtain a font that includes them. If they don't, then it's no skin off their back. In many cases, the OS doesn't even need to know about these characters, so new glyphs can be added and used with minimal pain. Unicode may have a lot of complexities, but this in particular is elegant and simple. </p>
<hr />
<p>It's easy to forget with Unicode's predominance that there was once a time before it. We've tried living in a world without Unicode; but even in that time, humans still communicated in a vast arrays of characters and scripts. The multifarious encodings only made that more difficult; hence Unicode being created in the first place. Unicode is only making sense of the world that already existed, banishing encoding conversion errors to a relic of the past and making global communication easier. It is just a reification, an actualisation in a sense, of the hundreds of years of human history that already exists.</p>
<h3>Further reading</h3>
<ul>
<li>Niki Tonsky's <a href="https://tonsky.me/blog/unicode/">The Absolute Minimum Every Software Developer Must Know About Unicode</a></li>
<li>Commentary on <a href="https://baturin.org/blog/life-before-unicode/">life before Unicode</a> by Daniil Baturin</li>
<li>A <a href="https://hachyderm.io/@rygorous@mastodon.gamedev.place/110872853293266595">discussion</a> on Mastodon about some actual shortcomings of Unicode</li>
</ul>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>As another example, <a href="https://www.unicode.org/history/unicode88.pdf">the original Unicode specification</a> was based around the idea that every currently used character in the world could fit into a set of 65,536 different codepoints. Anyone who has sufficient experience with Chinese <em>hanzi</em> or Japanese <em>kanji</em> would know that this was hubristic. Although commonly used characters can fit under that amount, plenty of place names and surnames - and even some words - use rarer characters. The set of these is far too large to fit in that amount, so the Unicode Consortium eventually relented and developed <a href="https://en.wikipedia.org/wiki/UTF-16">surrogate pairs</a> to encode a much larger set of characters. The original set became the <a href="https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane">Basic Multilingual Plane</a>.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Purely hypothetical, since Unicode has already gained so much adoption that realistically it is incredibly unlikely to be replaced. Which makes this article kind of grandstandy and in a certain sense pointless, but I digress.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p>Except for ASCII characters in UTF-8, of course.</p>
</li>
<li id="fn4">
<a class="backref" href="#ref4">4</a>
<p>By doing this, you assume all responsibility for modifying system files to remove the fonts that display these characters. The unimaginative reader would state that this is not possible on closed-down platforms like iOS, but a true ideologue would chose their platforms based on whether this is possible, or at the very least wait for an opportune security vulnerability.</p>
</li>
<li id="fn5">
<a class="backref" href="#ref5">5</a>
<p>In fact, using them as decoration can be actively harmful as screen readers don't speak them properly. Apologies for being a spoilsport. And a hypocrite too, I guess.</p>
</li>
</ul>
novovanon185441@gmail.comReview: Cassette Beastshttps://novov.me/blog/posts/cassettebeastsreview2023-08-01T00:00:00+12:00A lot more than a ripoff.
<figure>
<img alt="" src="/images/blog/content/cassettebeasts.jpg" />
<figcaption>I didn't get the opportunity in this review to write about it, but the game also features a cool cassette-based battle UI.</figcaption>
</figure>
<p>For a long time, I've been following the open-source <a href="https://godotengine.org">Godot Engine</a> with keen interest. Although I've never released any games myself, I agree with their vision of an open software-based game creation toolkit and am keen to see it succeed. So when two-person indie team Bytten Studio released <em>Cassette Beasts</em> using it I decided to check it out.<sup class="ref" id="ref1"><a href="#fn1">1</a></sup> I had some experience with their previous game <em>Lenna's Inception</em> - which I liked, but ultimately couldn't finish due to bugs in its Java-based runtime and procedural generation system. Thankfully, they ditched both of those for <em>Cassette Beasts</em>, allowing me to play it to completion.</p>
<p>Most indie monster-catching games tend to be quite similar aesthetically to Pokémon - not that it's their fault. The billion-dollar franchise casts a long shadow over any potential competitors, and any customers will always have their nostalgia as a nigh-intractable benchmark. <em>Cassette Beasts</em> makes great pains judiciously distinguishing itself to alleviate this. Unlike many of its cohorts, its setting is pretty unique: adults (as opposed to children) are plucked out of multifarious timelines and universes and brought to the mysterious island of New Wirral. Although there are the requisite 128 different monsters to collect, they aesthetically take a rather different direction from <em>Pokémon</em>; many being a melding of man-made and biological artifices almost reminiscent of the fauna of <em>Mother 3</em>. Players are supposed to "record" these using cassettes, and transform into them in battle to do direct combat. This is a very cool thematic choice, albeit it is a bit weird at times; thankfully the game nicely handwaves it away rather than trying to make unsatisfying excuses. </p>
<p>Still, it leaves a lot of questions. What if a player character transforms outside of battle? How long is a transformation maintained? Can they get stuck? Do the Traffikrabs and Salamaguses (Salamagi?) in the wild ever encounter a transformed human and get confused? Perhaps I am overthinking this, but there is still a whole lot of story potential left unexplored.<sup class="ref" id="ref2"><a href="#fn2">2</a></sup> The same can't be said of New Wirral: the game gives a satisfying and interesting, if a bit clichéd on a certain level, response to the mysteries of the island's existence. And as a whole, it contains a whole lot of narrative meat and mature heft which doesn't exist in many monster-catching titles.</p>
<hr />
<p>The gameplay also contains a number of welcome innovations. Types are similar to the classic <em>Pokémon</em> formula, but different attacks apply status effects based on you and your opponent's types. This results in satisfying strategic ploys: if you choose the wrong combination, many available moves will end up giving your opponent a positive effect, so you'll either need to discard a turn switching to another monster, or factor the buff your enemy receives into your planning. Moves can also be swapped and changed, creating even more tactical variations, at the cost of making overpowered builds a tad too easy. Each member of your two-person team also has an AP meter: they accumulate a certain amount of AP per turn, and can either use it all immediately, or use a less expensive move and save the remaining AP for later moves. This creates immensely rewarding dynamics, and is honestly one of the best battle systems I've seen in an RPG; combined with the aforementioned type-based attacks, it lends a large amount of depth to the game. A really neat mechanic that also enhances this is the "fusion meter"; when filled, you can combine your monster with your partner's for the duration of the battle.<sup class="ref" id="ref3"><a href="#fn3">3</a></sup> This fills up your AP really fast, letting you use really powerful moves each turn, and doubles your statistics. However, it leaves you more vulnerable as well, as enemies can all focus on a singular target and you are limited to one move a turn to fight back. </p>
<p>Unfortunately, all these mechanics become more of a burden when traversing areas with under-levelled beasts, which is a frustrating experience: they still try to approach you, yet are very easily beatable, their battle animations are long and repetitive, but the only item that lets you avoid battles is a consumable (there is a level scaling option, but it affects the rest of the game as well). And while the game is harder than the unconfronting easiness of <em>Pokémon</em>, it still feels a bit unchallenging at times, and I ended up wishing I had chosen a more difficult AI setting from the get-go.</p>
<p>Your party is (usually) made up of a customisable player character and a partner. Different partners are encountered throughout the game, and each has a unique quest associated with them, in addition to a few independent quests that spawn in the overworld. Compared to some RPGs, the quantity of non-story quests can sometimes be a bit threadbare, but the game was made by a small team, so it's understandable. As you fight alongside your partner and rest at campfires with them, you increase a relationship meter,<sup class="ref" id="ref4"><a href="#fn4">4</a></sup> progressing the narrative and granting additional gameplay powers, eventually even having the option of forming a romantic relationship. </p>
<p>This adds a necessary element of narrative dimensionality that helps give purpose to the whole conceit of capturing hundreds of disparate creatures, and all the partners are well-written and distinct. My only qualm with them is that there could be a bit more late-game dialogue - again which is the side effect of an indie team. This all factors into the overarching plot, centered around the player attempting to leave New Wirral (albeit they still have the option of beating <s>Gym Leaders</s> Rangers as a side quest). Unsurprisingly, it doesn't end up being a cakewalk, and many diversions and entertaining scenarios play out along the way, as is requisite for a good RPG story. I don't want to spoil too much, but there are some really interesting and unique monsters and setpieces that you encounter. </p>
<hr />
<p>New Wirral is a rather small island; its meagre size is successfully compensated for by a tightly packed environment. There are no wide open expanses here: instead, every corner is packed with multiple chests, buildings, or points of interest, and the game's environments are punctuated with a large array of biomes to explore. Of course, these include monsters to capture, alongside "rogue fusions" of several different varieties for more challenging fights. The overworld also has full physics simulation, which is a rather odd decision by the developers. This choice has both upsides and downsides: it produces some neat puzzles and makes walking and jumping around that little bit more fun, but occasionally doing a task that would be straightforward in a more traditional RPG overworld environment requires a bit of finagling or guessing to arrive at the intended solution. </p>
<p>As the player makes their away across the island, they utilise their fancy physics by unlocking different abilities (e.g. swimming or electromagnetism), which allow them to reach previously inaccessible locales. Some are optional, while others are required to progress; unfortunately a few of the latter are difficult to obtain naturally until coming across the right rumour from a townsperson. Overall though, it grants a nice sense of progression usually only obtained in other titles by levelling up: flying halfway across the island in the late game with previously impossible obstacles beneath really reminds me of how far I've came.</p>
<p>The visuals of the overworld employ an interesting style - although the characters and monsters are two-dimensional, they inhabit a three-dimensional world. For the most part this works very well and is excellently done; however, the limited size of its pixel art means that its character sprites can often lack the instant appeal of those seen in more recent <em>Pokémon</em> games. For non-player characters, the game successfully compensates for this by featuring portraiture by <a href="https://samibriggs.carrd.co">Sami Briggs</a> which excellently fleshes out their vibe and personality. This is obviously not possible for the player character - I had a bit of trouble coming up with an appealing one at first, and it took me quite a few tries before I found something I liked. </p>
<p>Conversely, the ambient soundtrack, by Joel Baylis, the brother of one of the developers, hits all the right notes. It's further enhanced by vocals by singer Shelly Bailey, which play when you've in important fights or inside buildings. There's only one other title that I've played which uses this technique: magical school RPG <a href="https://en.wikipedia.org/wiki/Ikenfell"><em>Ikenfell</em></a>,<sup class="ref" id="ref5"><a href="#fn5">5</a></sup> but I find it to be immensely entertaining (and a welcome reprieve from the blandness of many video game soundtracks) and wish many more games would have it. It does result in minor fights being sonically repetitive; a few more in the mix would help liven things up, but it can always be disabled and it's still better than not having it. </p>
<hr />
<p>All these physics simulations and pretty visuals have an impact on the performance however, which can be a bit suboptimal at times, though it's never so bad that it impairs enjoying the game. As the player sees more of New Wirral, they experience a noticeable (yet again, hardly game-breaking) slowdown. And once they have explored all of the map,<sup class="ref" id="ref6"><a href="#fn6">6</a></sup> a journey across it will inevitably be obstructed by a short intermission in the form of a loading screen. Fortunately, this can be alleviated by turning down the graphical settings, but I feel a computer with my specs should be more than powerful enough to run a game of this intensity without doing so, so it's still a little disappointing. </p>
<p>Console players might be in for a more difficult time, though: the game had showstopping slowdowns, bugs, and glitches on Nintendo Switch on launch, and while this has been improved upon in the 1.2 patch, it still isn't perfect. Apparently, it runs on the 3.0 branch of Godot, and while this may initially seem like a bad omen for the engine's console potential, both general performance optimisations and console-specific improvements are supposed to be present in 4.0.<sup class="ref" id="ref7"><a href="#fn7">7</a></sup> </p>
<p>Inevitably, the Rangers have a variety of post-game busywork that needs doing, and much of it is doled out as quests that devolve into needless grinding. While some players have found this fun, needless to say I am not one of them. This is a rather disappointing design decision, since there are a number of bosses and encounters only accessible after doing a whole lot of it. Another post-game disappointment that I imagine many players will be put off by is the lack of player-vs-player combat, even if it's not something I personally care about. The developers have promised this will be added in an update though, and their track record has so far been great: a free patch has already added eight new monsters and a minor new location. In the meantime, I still recommend anyone interested in monster-catching games checks this out. It's a great showcase for Godot's capabilities, and although there's no chance it'll dethrone <em>Pokémon</em> in people's hearts and minds, the developers make no pretences of doing so - there's plenty of room for both in the world.</p>
<article id="rating">
<img class="icon" src="/images/icons/star.svg" />
4.6/5<span class="after"> Novov Affirmation Points</span>
<div class="best"><img src="/images/blog/crappystar.png" />Star Get! Novov really likes this!</div>
</article>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>Cassette Beasts is the first Godot game to release across multiple console platforms and PC, or so I am told.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Except, perhaps, in fanfic if that's your jam.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p>This is similar to some <em>Pokémon</em> fangames, though it's only possible in battle, which will disappoint many people. Given the game has quite a few mechanics already, perhaps that's for the best though.</p>
</li>
<li id="fn4">
<a class="backref" href="#ref4">4</a>
<p>There's a lot of meters in the game, isn't there?</p>
</li>
<li id="fn5">
<a class="backref" href="#ref5">5</a>
<p><em>Ikenfell</em> is also really good in other aspects - you should check it out as well.</p>
</li>
<li id="fn6">
<a class="backref" href="#ref6">6</a>
<p>Which nets the requisite achievement, of course.</p>
</li>
<li id="fn7">
<a class="backref" href="#ref7">7</a>
<p>Though it is unlikely that <em>Cassette Beasts</em> in particular will make the upgrade, as it is reputedly quite difficult, and there is already a veritable array of user mods based around the 3.0 version's API.</p>
</li>
</ul>
novovanon185441@gmail.comMixed Memorieshttps://novov.me/blog/posts/mixedmemories2023-07-09T00:00:00+12:00Why do macOS programs show different amounts of used memory?
<p>For most Mac users, determining the amount of memory used is pretty simple. You go into Activity Monitor and have a look at the Memory tab. </p>
<figure class="small">
<img alt="" src="/images/blog/content/activitymonitor.jpg" />
<figcaption>Activity Monitor even gives us different subcategories of memory usage, which is nice. But as we will see soon, very simplified.</figcaption>
</figure>
<p>The more technically inclined might go one step further, and use something like <a href="https://bjango.com/mac/istatmenus/">iStat Menus</a> or <a href="https://github.com/dylanaraps/neofetch"><code>neofetch</code></a>. I'm too cheap to buy a license for the former, so let's have a look at the latter.</p>
<figure class="small">
<img alt="" src="/images/blog/content/neofetch.png" />
<figcaption>Looks like memory to me.</figcaption>
</figure>
<p>But they'll quickly notice a small problem: the amount of used memory can sometimes be different.<sup class="ref" id="ref1"><a href="#fn1">1</a></sup> And while in this case, one is in mebibytes and the other in megabytes,<sup class="ref" id="ref2"><a href="#fn2">2</a></sup> the difference still doesn't line up when you do the conversion. So let's go one step lower and query the amount of memory by compiling a little executable in a trendy programming language such as <a href="https://www.rust-lang.org">Rust</a>.</p>
<pre><code class="highlighted rust"><span class="k">use</span><span class="w"> </span><span class="n">sysinfo</span>::<span class="p">{</span><span class="n">System</span><span class="p">,</span><span class="w"> </span><span class="n">SystemExt</span><span class="p">};</span>
<span class="k">fn</span> <span class="nf">main</span><span class="p">()</span><span class="w"> </span>-> <span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">sys</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">System</span>::<span class="n">new_all</span><span class="p">();</span>
<span class="w"> </span><span class="fm">print!</span><span class="p">(</span>
<span class="w"> </span><span class="s">"{mem_used} bytes / {mem} bytes"</span><span class="p">,</span>
<span class="w"> </span><span class="n">mem_used</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sys</span><span class="p">.</span><span class="n">used_memory</span><span class="p">(),</span>
<span class="w"> </span><span class="n">mem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sys</span><span class="p">.</span><span class="n">total_memory</span><span class="p">()</span>
<span class="w"> </span><span class="p">);</span>
<span class="p">}</span>
</code></pre>
<!---->
<pre><code class="highlighted text">Compiling test_crate v0.0.1 (file path redacted)
Finished dev [unoptimized + debuginfo] target(s) in 0.26s
Running `target/debug/test_crate`
15674580992 bytes / 17179869184 bytes
</code></pre>
<p>Well, that isn't helpful. Let's actually have a look at going on here. Unfortunately, Activity Monitor isn't open source,<sup class="ref" id="ref3"><a href="#fn3">3</a></sup> but we <em>can</em> have a look at the internals of the <code>neofetch</code> source code and the <code>sysinfo</code> crate I used. I'm going to start with the former.</p>
<p>At its core, Neofetch is a <a href="https://github.com/dylanaraps/neofetch/blob/60d07dee6b76769d8c487a40639fb7b5a1a7bc85/neofetch">one-file Bash script</a> that handles all its functionality for a variety of (largely Unix-like, but also Windows) operating systems. It is divided into different functions, each of which is used to obtain the appropriate statistics for the respective category. We want the <code>get_memory()</code> function. It's divided into cases for different operating systems, so we'll grab the section of code that gets the macOS info.</p>
<pre><code class="highlighted rust"><span class="s">"Mac OS X"</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="s">"macOS"</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="s">"iPhone OS"</span><span class="p">)</span>
<span class="w"> </span><span class="n">mem_total</span><span class="o">=</span><span class="s">"$(($(sysctl -n hw.memsize) / 1024 / 1024))"</span>
<span class="w"> </span><span class="n">mem_wired</span><span class="o">=</span><span class="s">"$(vm_stat | awk '/ wired/ { print $4 }')"</span>
<span class="w"> </span><span class="n">mem_active</span><span class="o">=</span><span class="s">"$(vm_stat | awk '/ active/ { printf $3 }')"</span>
<span class="w"> </span><span class="n">mem_compressed</span><span class="o">=</span><span class="s">"$(vm_stat | awk '/ occupied/ { printf $5 }')"</span>
<span class="w"> </span><span class="n">mem_compressed</span><span class="o">=</span><span class="s">"${mem_compressed:-0}"</span>
<span class="w"> </span><span class="n">mem_used</span><span class="o">=</span><span class="s">"$(((${mem_wired//.} + ${mem_active//.} + ${mem_compressed//.}) * 4 / 1024))"</span>
<span class="p">;;</span>
</code></pre>
<p>As one can see, in typical Unix fashion, it calls a number of small utilities to gather the amount of used memory and total memory. In this function, they are <code>sysctl</code>, which is a command-line tool that allows querying system statistics, and <code>vm_stat</code>, which lists off various Mach kernel<sup class="ref" id="ref4"><a href="#fn4">4</a></sup> memory statistics. </p>
<p>First, it grabs the grabs the total memory and divides it twice to convert it into mebibytes. It then pulls together <em>wired memory</em>, <em>active memory</em>, and <em>compressed memory</em> to compute the used memory. Since the figures it uses are in pages, it then uses the page size<sup class="ref" id="ref5"><a href="#fn5">5</a></sup> to convert these pages into bytes, and then divides it as it did with the total memory.</p>
<p>Now, let's look at the Rust <code>sysinfo</code> crate I used earlier:</p>
<p>Much of the library is composed of OS-specific code that lives in its respective folder. In our case, that's <code>src/apple</code>, for macOS and iOS code. In particular, we want the functions under <code>SystemExt</code>, so we'll grab <a href="https://github.com/GuillaumeGomez/sysinfo/blob/master/src/apple/system.rs"><code>src/apple/system.rs</code></a>.</p>
<pre><code class="highlighted rust"><span class="c1">// get ram info</span>
<span class="k">if</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">mem_total</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">get_sys_value</span><span class="p">(</span>
<span class="w"> </span><span class="n">libc</span>::<span class="n">CTL_HW</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">_</span><span class="p">,</span>
<span class="w"> </span><span class="n">libc</span>::<span class="n">HW_MEMSIZE</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">_</span><span class="p">,</span>
<span class="w"> </span><span class="n">mem</span>::<span class="n">size_of</span>::<span class="o"><</span><span class="kt">u64</span><span class="o">></span><span class="p">(),</span>
<span class="w"> </span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">mem_total</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="o">*</span><span class="k">mut</span><span class="w"> </span><span class="kt">u64</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="o">*</span><span class="k">mut</span><span class="w"> </span><span class="n">c_void</span><span class="p">,</span>
<span class="w"> </span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="n">mib</span><span class="p">,</span>
<span class="w"> </span><span class="p">);</span>
<span class="p">}</span>
<span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">count</span>: <span class="kt">u32</span> <span class="o">=</span><span class="w"> </span><span class="n">libc</span>::<span class="n">HOST_VM_INFO64_COUNT</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">_</span><span class="p">;</span>
<span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">stat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mem</span>::<span class="n">zeroed</span>::<span class="o"><</span><span class="n">vm_statistics64</span><span class="o">></span><span class="p">();</span>
<span class="k">if</span><span class="w"> </span><span class="n">host_statistics64</span><span class="p">(</span>
<span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">port</span><span class="p">,</span>
<span class="w"> </span><span class="n">libc</span>::<span class="n">HOST_VM_INFO64</span><span class="p">,</span>
<span class="w"> </span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="n">stat</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="o">*</span><span class="k">mut</span><span class="w"> </span><span class="n">vm_statistics64</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="o">*</span><span class="k">mut</span><span class="w"> </span><span class="n">_</span><span class="p">,</span>
<span class="w"> </span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="n">count</span><span class="p">,</span>
<span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">libc</span>::<span class="n">KERN_SUCCESS</span>
<span class="p">{</span>
<span class="w"> </span><span class="c1">// From the apple documentation:</span>
<span class="w"> </span><span class="c1">//</span>
<span class="w"> </span><span class="c1">// /*</span>
<span class="w"> </span><span class="c1">// * NB: speculative pages are already accounted for in "free_count",</span>
<span class="w"> </span><span class="c1">// * so "speculative_count" is the number of "free" pages that are</span>
<span class="w"> </span><span class="c1">// * used to hold data that was read speculatively from disk but</span>
<span class="w"> </span><span class="c1">// * haven't actually been used by anyone so far.</span>
<span class="w"> </span><span class="c1">// */</span>
<span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">mem_available</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">u64</span>::<span class="n">from</span><span class="p">(</span><span class="n">stat</span><span class="p">.</span><span class="n">free_count</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="n">saturating_add</span><span class="p">(</span><span class="kt">u64</span>::<span class="n">from</span><span class="p">(</span><span class="n">stat</span><span class="p">.</span><span class="n">inactive_count</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="n">saturating_mul</span><span class="p">(</span><span class="bp">self</span><span class="p">.</span><span class="n">page_size_kb</span><span class="p">);</span>
<span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">mem_free</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">u64</span>::<span class="n">from</span><span class="p">(</span><span class="n">stat</span><span class="p">.</span><span class="n">free_count</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="n">saturating_sub</span><span class="p">(</span><span class="kt">u64</span>::<span class="n">from</span><span class="p">(</span><span class="n">stat</span><span class="p">.</span><span class="n">speculative_count</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="n">saturating_mul</span><span class="p">(</span><span class="bp">self</span><span class="p">.</span><span class="n">page_size_kb</span><span class="p">);</span>
<span class="p">}</span>
</code></pre>
<p>Further down, the used memory is computed by subtracting <code>mem_free</code> from <code>mem_total</code>. Makes sense, I guess. As for the calculations themselves, they are obtained via macOS system calls, which is more efficient than launching a number of Unix command-line processes. The total memory is retreived using the same system call as Neofetch (<code>hw.memsize</code>), but it uses the system function <code>sysctlbyname</code> directly, rather than the intermediary <code>sysctl</code> terminal utility. Obtaining the free memory is done with the <code>host_statistics64</code> function, which is what <code>vm_stat</code> uses <a href="https://github.com/apple-oss-distributions/system_cmds/blob/system_cmds-951.60.2/vm_stat.tproj/vm_stat.c">underneath the hood</a> as well. However, what it does with those values is different than Neofetch: the crate obtains the system's internal count of free pages, and then (<a href="https://en.wikipedia.org/wiki/Saturation_arithmetic">saturatedly</a>) subtracts speculative pages from them. </p>
<p>Speculative pages hold data grabbed ahead of time that the kernel thinks currently running processes <em>might</em> need later. But as the comment in the code says, they aren't used by anyone yet, and they've also pretty easily evicted if the memory is needed for more important uses, so they aren't really "used" in a way that causes problems. In other words, the Rust <code>sysinfo</code> crate's quite a bit stricter in its definition of what counts as "free" memory: any page that is occupied so far, even if it's not actually used by a program yet, is considered "used". The line between free and used memory is blurrier and more subjective than it may initially appear. So let's clear few things up.</p>
<ul>
<li><strong>Memory size</strong>, as you probably know if you've reading this, is the amount of memory (to be specific, RAM, or short-term data, as opposed to files on disk) a computer can store. It can be obtained via <code>sysctl -n hw.memsize</code>.</li>
<li><strong>Page size</strong> is how big a page is in bytes. On Intel Macs, it's 4096 bytes (4 KiB); Apple silicon Macs are four times larger at 16 KiB. It can be obtained via <code>sysctl -n hw.pagesize</code> or the top line of <code>vm_stat</code>.</li>
</ul>
<!----->
<ul>
<li><strong>Free memory</strong> in technical terms is memory that is being used for absolutely nothing.<sup class="ref" id="ref6"><a href="#fn6">6</a></sup> It can be obtained by <code>vmstat</code>'s "Pages free"<sup class="ref" id="ref7"><a href="#fn7">7</a></sup> section or <code>sysctl -n vm.page_free_count</code> (like <code>sysinfo</code>, these counts exclude speculative memory).</li>
<li><strong>Speculative memory</strong> is, as stated above, memory that the kernel thinks currently obtained processes may need later, but can be easily evicted for more space. It can be obtained by <code>vmstat</code>'s "Pages speculative" section, or <code>sysctl -n vm.page_speculative_count</code>.</li>
<li><strong>Wired memory</strong> is memory that is used by the kernel to run essential system processes. It is essentially occupied by the kernel and cannot be freed. It can be obtained by <code>vmstat</code>'s "Pages wired down" section, or "Wired memory" under Activity Monitor's Memory tab.</li>
<li><strong>Active memory</strong> is memory that is being used right now. As in, right this moment, while you've reading this. It can be obtained by <code>vmstat</code>'s "Pages active" section.</li>
<li><strong>Inactive memory</strong> is memory that isn't used right now, but could be needed, and again can be evicted for more space if necessary. It can be obtained by <code>vmstat</code>'s "Pages inactive" section.<ul>
<li><strong>Compressed memory</strong> is inactive memory that is compressed to save RAM space. It can be obtained by <code>vmstat</code>'s "Pages occupied by compressor" section, or "Compressed" under Activity Monitor's Memory tab.</li>
</ul>
</li>
</ul>
<!----->
<ul>
<li><strong>Anonymous memory</strong> is memory that isn't connected to a file on the file system (i.e. is manually allocated by applications). It can be obtained using <code>vmstat</code>'s "Anonymous pages" section, and is roughly equivalent to <code>sysctl -n vm.page_pageable_internal_count</code>.</li>
<li><strong>File-backed memory</strong> is the opposite of anonymous memory: memory that <em>is</em> connected to a file. It can be obtained by <code>vmstat</code>'s "File-backed pages" section, or "Cached Files" under Activity Monitor's Memory tab.</li>
</ul>
<!----->
<ul>
<li><strong>Purgeable memory</strong> is memory that is designated by app developers as being safely freeable if the OS requires more space (and recreated again later when needed). It can be obtained via <code>vmstat</code>'s "Pages purgeable" section.</li>
<li><strong>Pageable memory</strong> is memory that can be paged to disk (swap) if the OS runs out of space and no other memory can be freed. In systems with sufficient memory, paging is very rare, but the classfication is still used internally. It can be obtained via <code>sysctl -n vm.page_pageable_internal_count</code> and <code>sysctl -n vm.page_pageable_external_count</code>. Swap is available as "Swap Used" under Activity Monitor.</li>
</ul>
<!----->
<ul>
<li><strong>Application memory</strong> is a high-level construct used by Activity Monitor that approximates core memory used by apps. Although the formula isn't publicly available, it appears to be anonymous memory that isn't purgeable.</li>
</ul>
<p>The issue is obvious: different sources calculate the memory different ways. Neofetch adds wired, active, and compressed memory. The Rust <code>sysinfo</code> crate gives everything that is not strictly free. And Activity Monitor, although its' method isn't publicly available, seems to add application memory, wired memory, and compressed memory. As for which one is the most accurate, it depends on what you mean really. Perhaps <code>sysinfo</code> is the most strictly accurate, but it's very unhelpful for day-to-day usage.</p>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>This has actually been <a href="https://github.com/dylanaraps/neofetch/pull/1752">rectified</a> in the Neofetch codebase, but a new version hasn't been released for quite a while.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Some people define storage sizes in terms of 1024-byte multiples, while others use a system based on 1000 bytes. Usually, this tends to depend on whether they have an incentive to show a higher number of KBs, GBs, MBs, and such. To stop confusion, standards bodies have redefined 1024-byte units as <em>mebibytes</em> (MiB), <em>kibibytes</em> (KiB), <em>gibibytes</em> (GiB), etc - though many manufacturers still don't adhere to such a distinction.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p>Shocker!</p>
</li>
<li id="fn4">
<a class="backref" href="#ref4">4</a>
<p><a href="https://en.wikipedia.org/wiki/Mach_%28kernel%29">Mach</a> is the name of the kernel that was eventually developed into the XNU kernel behind macOS. One of the key tasks behind a kernel like it is to allocate and manage memory.</p>
</li>
<li id="fn5">
<a class="backref" href="#ref5">5</a>
<p>Memory is divided up into units called <em>pages</em> internally by the operating system.</p>
</li>
<li id="fn6">
<a class="backref" href="#ref6">6</a>
<p><insert tumbleweed gif></p>
</li>
<li id="fn7">
<a class="backref" href="#ref7">7</a>
<p>The numbers in <code>vm_stat</code> are the amount of pages, while numbers obtained by <code>sysctl</code> are usually either bytes or pages.</p>
</li>
</ul>
novovanon185441@gmail.comReview: Omorihttps://novov.me/blog/posts/omorireview2021-06-14T00:00:00+12:00Extremely entertaining and a great exploration of mental health.
<figure>
<img alt="" src="/images/blog/content/omori.jpg" />
<figcaption>The battle system in <em>Omori</em> is heaps of fun.</figcaption>
</figure>
<p><span class="warning">This blog post deals with mental health issues.</span></p>
<p>When I was a little boy, I sometimes wondered: why do people get depressed? I was quite naïve sometimes.</p>
<p>Slowly, things changed though. As I grew older and (arguably) wiser, I slowly but surely succumbed murky depths of mental illness myself. It started off slowly, but soon right became wrong and left became right, Thoughts and reality started to blur together. Voices started echoing in my head, telling me everything I was doing was wrong - not just incorrect, but morally depraved. I'd never make anything of myself, and I'd be a failure for the rest of my life. I'd always be an awful person, and I'd never make anything of myself.</p>
<p>I tried to hold things in for as long as I could, to not disappoint both myself and my family. To tell everyone who doubted me that they were wrong. Eventually, though, the symptoms became too much for others as well, and I had to confine myself to my house...</p>
<hr />
<p>In 2014, <em>Omori</em> was launched on Kickstarter. It was initially planned for a release date in 2015, so plenty of eager backers forked over their cold, hard, cash. Soon, it became apparent that wouldn't happen. News of engine troubles and changes in creative direction spread over social media, and <a href="https://www.reddit.com/r/shittykickstarters/comments/aopi6i/">many people didn't think it would release at all.</a><sup class="ref" id="ref1"><a href="#fn1">1</a></sup> But to a lot of people's shock, it did eventually come out - in 2020, when many people were far more concerned with the minor issue of the coronavirus.<sup class="ref" id="ref2"><a href="#fn2">2</a></sup> Personally, I'd say the wait was well worth it.</p>
<p>It's a psychological horror role-playing game about the titular child Omori. Living in a rather miserable white room, he often takes a trip to the colourful dream-like world outside. There, he plays with his friends Aubrey, Kel, Hero, and Basil, going on adventures and doing things that kids do. But at the start of the game, Basil has just gone missing.</p>
<p>Actually, let's start again. <em>Omori</em> is a psychological horror role-playing game about... Never mind. You <em>could</em> spoil yourself by, say reading the game's <a href="https://en.wikipedia.org/wiki/Omori_(video_game)">Wikipedia article</a><sup class="ref" id="ref3"><a href="#fn3">3</a></sup>, but I would highly recommend you don't. Anyway, onto the game. While certain parts can be dark, this is balanced with a softer exterior; overall, the game takes plenty of cues from your <em>EarthBound</em>s and <em>Undertale</em>s. An aura of juvenile wonder permeates many of the environments, in a way that feels a little familiar from my childhood. But just like real life, we all grow up; one has to confront the darker recesses of the world eventually. It's just a question of how and when.</p>
<hr />
<p>Unlike the events depicted in <em>Omori</em>, I decided long ago that I wouldn't be stuck in my house for almost four years. Instead, I largely remained stuck in my house for a year. Big improvement. Though the game's plot differs from my experience in a lot of ways, many things in the game were familiar to me. Feeling like an outcast; a dreg of society. Having to hide fucked-up things that happened to me from other people.</p>
<hr />
<p>Regardless of what ends up happening to them, the cast of <em>Omori</em> are largely empathetic and well-written. Both the main gang and side characters deal with their own issues that often tie into the central narrative fulcrum in a unique way. A specific highlight is a certain cetacean who pops up just before one of the game's dramatic moments. His depiction - a concoction of hilarity and zaniness - just oozes creativity. </p>
<p>As a role-playing game, the battle system is a largely turn-based affair. I'm a huge fan of classic turn-based JRPGs, and disagree with them often being maligned by modern gamers. Although it doesn't have the strategic chops to compete with the best of them, the combat is fun and challenging enough. But the real draw is its unique mechanics: status effects involve dealing with a triadic system of emotions. You have <strong>Happy</strong>, which pulls your turn forward, but at the cost of accuracy. <strong>Angry</strong> raises your attack but makes you more vulnerable as well. And <strong>Sad</strong> raises defence but puts you at the back of the turn list. Both enemies and party members can have these emotions applied to them by choice or not, and each one has another that it's strong or weak against. It's a fun twist that shakes things up, although it can be underused in later parts of the game. Your party's damage also accumulates, allowing you to deal powerful "follow-ups" that interact with a friend. Often they've <em>too</em> powerful and make things a little too easy: I was able to complete the game under-leveled. Despite that, they can still be really fun to use against enemies. </p>
<p>Speaking of the enemies, they've depicted in a hand-illustrated style that exudes charm and creativity. In fact, the whole game's art is simply amazing - there's no other way to describe it. It's able to hone in on the requisite playfulness when required, and make things properly scary for the more spoilery parts of the game. A lot of neat artistic touches and narrative elements attain another layer of meaning as you progress, and things reveal themselves in hindsight. Unlike the <a href="/blog/cometruereview.html">film I reviewed in April</a>, it doesn't feel hackneyed in the moment either.</p>
<hr />
<p>Scary stories used to absolutely horrify me as a kid. When making my many requisite trips to the library as a kid, the <em>Goosebumps</em> books were a no-go; I always sticked to the safety of known entities. Growing older, the fear of the unknown became replaced by a fear of the known. These days, I can read and watch metric craploads of horror content and hardly break a sweat. I'm still not a <em>huge</em> horror fan, but I find what I've been through in real life much more scary. Going crazy is a lot more tangible and horrifying than your monster <em>du jour</em>.</p>
<hr />
<p>As a game that primarily deals with a fear of the known, <em>Omori</em> resonates with me a lot. Although it's a bit of an overused trope in indie circles, depicting this kind of stuff is no mean feat. Everyone deals with mental illness differently, and one person's "realistic" might be the next's "playing into harmful stereotypes in an exceedingly problematic way". While a certain knife initially made me turn my head, I found things were ultimately portrayed respectfully and realistically. The game juggles with heaps of issues in a way that is honestly pretty impressive for something made in RPG Maker.<sup class="ref" id="ref4"><a href="#fn4">4</a></sup> I actually forgot it was made in that engine sometimes; the level of thought and flair would be great for even a Unity title.</p>
<p>This amount of care is also invested into a veritable array of side-quests. Most of it is the usual fare, allowing the dedicated player to level up their party that much more and discover tidbits of hidden story content. For instance, you can find humorous quips on signs to put in a "Joke Book"; collecting them all provides an optional quest. But being the un-dedicated player I am, I mostly looked stuff up on the wiki afterwards. If there's one complaint I have, it's that the inscrutability and haphazardness sometimes also applies to the primary gameplay route, making it a bit frustrating to progress at times. If you've more easily scared than I and make a certain decision early on, you can even be locked into a certain narrative choice. But as someone who can be frustrated about getting the wrong ending, that moment is an exception to the rules. This isn't one of those games where you need to be watching every step so you get ending 45 instead of ending 46, and the important decisions are usually clear enough.</p>
<p>In <em>Omori</em>'s final act, the results of whatever decision you make come back to haunt you for great or ill. Its ending is a real shock, something that ties all the narrative points and thematic beats of the game into something spectacular. In fact, it's easily one of the best endings I've experienced in a video game. Again, I won't delve into the details, since you should really be <a href="https://store.steampowered.com/app/1150690/OMORI/">just playing the game</a>.<sup class="ref" id="ref5"><a href="#fn5">5</a></sup> Yes, I'm saying that again - there's some things you just can't hide from. Some people can learn to deal with their issues; some cannot. But they'll always be there.</p>
<article id="rating">
<img class="icon" src="/images/icons/star.svg" />
4.8/5<span class="after"> Novov Affirmation Points</span>
<div class="best"><img src="/images/blog/crappystar.png" />Star Get! Novov really likes this!</div>
</article>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>Kickstarter has gained a bit of a reputation as a grifters' paradise - a not undeserved one, given the profusion of blatant scams on the platform. But from my experience, video game failures on the platform tend to be less often scams and more often people who just don't understand the amount of work involved.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Or 5G, if you've an idiot.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p>Disclaimer: I wrote significant parts of said article.</p>
</li>
<li id="fn4">
<a class="backref" href="#ref4">4</a>
<p>As someone who's really into programming, I used to be of the attitude that people should just use <em>proper</em> game engines. However, such an attitude locks out a lot of creatives with imaginative and original ideas. In my opinion, it's really the result that matters; tools are ultimately incidental.</p>
</li>
<li id="fn5">
<a class="backref" href="#ref5">5</a>
<p>Don't get ahead of someone when crossing the river in the raft.</p>
</li>
</ul>
novovanon185441@gmail.comReview: Come Truehttps://novov.me/blog/posts/cometruereview2021-04-03T00:00:00+12:00For some reason, I'm now doing film reviews. This one is... a mixed bag.
<figure>
<img alt="" src="/images/blog/content/cometrue.jpg" />
<figcaption>Unfortunately, Sarah (Julia Sarah Stone) might be frustrated at some of this movie's inconsistent plot points.</figcaption>
</figure>
<p>When <a href="/blog/posts/thelandscapehaschanged">I started</a> this blog, I was envisioning some in-depth essays about computing and stuff.<sup class="ref" id="ref1"><a href="#fn1">1</a></sup> So far, this hasn't panned out, and unfortunately (or fortunately, depending on your tastes) I feel lazy enough to keep it that way, at least for now. Sorry.</p>
<p>Instead, I'm taking a sharp right turn and reviewing a horror movie. Well, horror with sci-fi elements. I've been a fan of director <a href="https://twitter.com/realpilotpriest">Anthony Scott Burns</a>' music and oeuvre of short films for a long time. Burns takes a lot of inspiration from the oft-vaunted horror greats - a fact that he makes sure to mention on social media - but also manages to put his own unique spin on things. His second entry into feature films<sup class="ref" id="ref2"><a href="#fn2">2</a></sup> is his take on one of the classic thematic staples: dreams. As Burns says...<sup class="ref" id="ref3"><a href="#fn3">3</a></sup></p>
<blockquote>
<p>Dreams are highly intriguing. It’s where we work out our issues, who we are, what we fear.</p>
</blockquote>
<p>We all have dreams, but <em>Come True</em>'s main character, 18-year-old Sarah (Julia Sarah Stone) has rather horrifying ones, constantly waking up in the middle of the night. This is exacerbated by an unspecified feud with her mother,<sup class="ref" id="ref4"><a href="#fn4">4</a></sup> forcing her to sleep in parks, classrooms, and playgrounds. When she sees the notice for a sleep study, it seems like it is just what she needs. She'll have somewhere to sleep, and all she'll have to do is ask a few questions. Well, that's what it seems like at least.</p>
<p>It's an enticing premise, and Burns knows how to make the opening acts of the film compelling. Although he is rather light on the plot detail - fair enough, given its unimportance - you still end up keenly sympathising with Sarah's situation. In a way, this choice is an ominous sign of things to come later in the film. In horror, there are always clues to problems lurking around the corner, and this is no exception. </p>
<p>Unfortunately, the nightmare sequences aren't very interesting. Although they can be legitimately frightening and suspenseful at times, too often they are overlong and of increasingly distant relevance to the film's plot - that is, until the very end, where they bounce back into relevance like a boomerang. Until then, they are some of the least interesting aspects of the film. The same can be said about some of the non-oneiric scenes: often you see Burns leave the camera rolling a little bit too long.</p>
<p>Nevertheless, Burns manages to set the film's tone with gusto. The dream-like atmosphere is complemented by long, partially-lit hallways, churning rows of cathode-ray monitors and control panels, and ominously lit scientists monitoring our protagonist. Apparently, Burns himself did the VFX in addition to the cinematography and direction, but were I not informed of that, I wouldn't have noticed a thing. Backing the score is the appropriately ethereal sound of synth-pop duo Electric Youth, working alongside solo artist Pilotpriest (aka Anthony Scott Burns as well). It's great stuff, and their reprise of "Modern Fears" stands out in particular. All these elements unite to comprise a somewhat disconnected and dreamy take on the 80s retro sci-fi vibe <i>du jour</i>, clearly inspired by films such as <i>Alien</i> and <i>Altered States</i>. However, Burns pulls it off exceedingly well - particularly impressive given his name is on the credits more times than in a Hideo Kojima game.</p>
<p>As the film progresses, things start to go a little more pear-shaped. The chief researcher is an appropriately wisened old guy, but a particular nerdy young scientist, Jeremy (Landon Liboiron) takes a perverse interest in Sarah, breaking rules and scientific ethics for her. Through him, we discover that the study is investigating the technology to peer into dreams, and appropriately unsettling things are starting to occur. At first, Jeremy's role is an excellent subversion of misogynistic writing, but a certain later scene feels voyeuristic and seems to reinforce those same tired old tropes. In the second half of the film, he shows up much more prominently. Again, this is a hint that Burns has left about what's coming, and I'm talking about the film's quality as well...</p>
<p>The last portion of the film - i.e. the final one or two acts,<sup class="ref" id="ref5"><a href="#fn5">5</a></sup> is easily the worst half, and I don't say that lightly. Progressively, the plot gets choppier and more thematically dissonant. The pacing gets a lot worse, and the story seems to lead nowhere. Certain details stretch plausibility, and characters vanish from the film. Some of this can be explained by a detail later in the film, but given the viewer doesn't know that yet, it just seems like bad writing. Although I'm not big on the cruciality of screenwriting, this quote<sup class="ref" id="ref3b"><a href="#fn3">3</a></sup> from Burns explains a lot:</p>
<blockquote>
<p>For me, making movies is more about resting on emotion than a perfect screenplay.</p>
</blockquote>
<p>This is all of in service of an ending which feels both unrewarding and cliché. It's very controversial online, and though I personally didn't like it, it's at least interesting. Ideally, I'd create something new from whole cloth, but I'd at least change the way which the final twist is revealed, which reads like an internet meme. I wouldn't be surprised if Burns was inspired by an insipid Reddit joke; if he was, props to him for at least making a good three-quarters of a film out of it.</p>
<p>Still, despite the disappointing conclusion, Burns shows a lot of potential, reminding me why I liked his previous work. His use of atmosphere and tone is marvellous, and given the mixed opinions online, you might even like the ending. It's a movie of highs and lows, one that's worth watching despite its flaws. No matter what happens, I'd like to see what he creates next.<sup class="ref" id="ref6"><a href="#fn6">6</a></sup></p>
<article id="rating">
<img class="icon" src="/images/icons/star.svg" />
3.83/5<span class="after"> Novov Affirmation Points</span></article>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>I still have a list of around 10 ideas for posts that I tell myself I'll get around to eventually... or so I tell myself.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Although Burns had previously directed <em>Our House</em>, he feels that the final result didn't comport with his creative vision. Again, this is something which he's not afraid to share.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p><span class="duprefs">and <a href="#ref3b">3b</a></span>
<a href="https://www.vulture.com/2021/03/come-true-sees-straight-into-your-nightmares.html"><em>Come True</em> Sees Straight Into Your Nightmares</a></p>
</li>
<li id="fn4">
<a class="backref" href="#ref4">4</a>
<p>Burns is somewhat light on the narrative, a detail which I'll touch on more later.</p>
</li>
<li id="fn5">
<a class="backref" href="#ref5">5</a>
<p>All of the acts are names after Jungian psychological concepts, which also feature heavily in the film. This feels a bit tired, and although most viewers wouldn't notice or care, outdated to me given the discrediting of much of Jung's ideas.</p>
</li>
<li id="fn6">
<a class="backref" href="#ref6">6</a>
<p>Hopefully he doesn't promote Joe Rogan again though.</p>
</li>
</ul>
novovanon185441@gmail.comConfessionshttps://novov.me/blog/posts/confessions2021-02-14T00:00:00+12:00Unfortunately, by that I don't mean the revealing kind... Well, kind of.
<p>In the later 1800s, the <a href="https://en.wikipedia.org/wiki/Confession_album"><em>confession album</em></a> was a popular fixture in British culture. The name had nothing to do with people's deepest, darkest secrets, though the "confessions" within were of a somewhat personal and revealing nature. It gained prominence for about fifty years, before falling (well, mostly) out of fashion.</p>
<p>Like so many cultural elements of years bygone, today the confession album has fallen out largely out of usage. It only really survives in two forms: the <a href="https://en.wikipedia.org/wiki/Proust_Questionnaire">Proust Questionnaire</a> used for interviews with the famous and distinguished, and in the Netherlands and Germany, books for little kids. </p>
<p>But I see no reason for it to stay that way - self-reflection is a quality just as valuable in adults as well, and celebrities are in the greater scheme of things no more important than the common man. Plus, it's a great way of discovering what kind of person someone is - or at least what kind of person the want to be or think they are.</p>
<hr />
<p>I've taken the liberty of assembling my own list of questions here, with my answers.<sup class="ref" id="ref1"><a href="#fn1">1</a></sup> Feel free to use it, so long as you provide attribution.</p>
<table>
<thead>
<tr>
<th>Question</th>
<th>Answer</th>
</tr>
</thead>
<tbody>
<tr>
<td>Favourite virtue</td>
<td>Selflessness, honesty</td>
</tr>
<tr>
<td>Chief purpose in life</td>
<td>To make the world a better place, to enjoy life, to create</td>
</tr>
<tr>
<td>Greatest challenge in life</td>
<td>To define oneself</td>
</tr>
<tr>
<td>Personal idea of happiness</td>
<td>A nice book next to a fireplace; lack of worries</td>
</tr>
<tr>
<td>Personal idea of misery</td>
<td>Losing your sense of self</td>
</tr>
<tr>
<td>Vice you excuse most</td>
<td>Pride</td>
</tr>
<tr>
<td>Vice you hate most</td>
<td>Selfishness, dishonesty</td>
</tr>
<tr>
<td>Principal personal vice</td>
<td>Pride</td>
</tr>
<tr>
<td>Principal aversion</td>
<td>Excess</td>
</tr>
<tr>
<td>Best test of character</td>
<td>How someone treats those in need, or that society looks down upon<sup class="ref" id="ref2"><a href="#fn2">2</a></sup></td>
</tr>
<tr>
<td>Favourite visual artist</td>
<td>Albrecht Durer</td>
</tr>
<tr>
<td>Favourite medium of art</td>
<td>Illustration, 2D animation, electronic music</td>
</tr>
<tr>
<td>Favourite hero<sup class="ref" id="ref3"><a href="#fn3">3</a></sup></td>
<td>Stanislav Petrov</td>
</tr>
<tr>
<td>Favourite colour</td>
<td>Green</td>
</tr>
<tr>
<td>Favourite food</td>
<td>Anything sweet, sausage rolls</td>
</tr>
<tr>
<td>Favourite flower</td>
<td><a href="https://en.wikipedia.org/wiki/Metrosideros_excelsa">Pohutukawa</a>, hibiscus</td>
</tr>
<tr>
<td>Favourite ice cream flavour</td>
<td>Cookies and cream</td>
</tr>
<tr>
<td>Favourite potato chip flavour</td>
<td>Chicken (reasonably common in New Zealand)</td>
</tr>
<tr>
<td>Favourite motto</td>
<td><a href="/heraldry.html"><em>Lucem porta in tenebris</em></a>, <a href="https://www.biblegateway.com/passage/?search=John+8%3A32">John 8:32</a><sup class="ref" id="ref4"><a href="#fn4">4</a></sup></td>
</tr>
<tr>
<td>Favourite academic discipline</td>
<td>Psychology, computer science, history</td>
</tr>
<tr>
<td>Favourite mammal</td>
<td>Cat</td>
</tr>
<tr>
<td>Dream home</td>
<td>A wooden hut in the woods, with nobody else around for miles</td>
</tr>
<tr>
<td>Trolley problem<sup class="ref" id="ref5"><a href="#fn5">5</a></sup></td>
<td>Pull the lever</td>
</tr>
<tr>
<td>Cat or dog person</td>
<td>Cat, but I like both</td>
</tr>
<tr>
<td>Weirdness or blandness</td>
<td>Weirdness</td>
</tr>
</tbody>
</table>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>Based partially on the Proust Questionnaire, partially on one <a href="https://www.marxists.org/archive/marx/works/1865/04/01.htm">Karl Marx</a> answered, and a few questions of my own.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Of course, excluding people who have done legitimately done horrible things, like serial killers. You could argue that morals are societal, but that's beyond the scope of this.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p>This can be either real or fictional - or both.</p>
</li>
<li id="fn4">
<a class="backref" href="#ref4">4</a>
<p>I'm not a Christian; I just like the quote</p>
</li>
<li id="fn5">
<a class="backref" href="#ref5">5</a>
<p><a href="https://en.wikipedia.org/wiki/Trolley_problem">https://en.wikipedia.org/wiki/Trolley_problem</a></p>
</li>
</ul>
novovanon185441@gmail.comSlava crnoj gorihttps://novov.me/blog/posts/slavacrnojgori2021-01-25T00:00:00+12:00I now have a custom domain!
<figure class="light">
<img alt="" src="/images/blog/content/montenegro.png" />
<figcaption>A map of Montenegro.</figcaption>
</figure>
<style>
blockquote.anthem {
font-size: 1.2em;
display: inline-block;
padding: 12px 15px 12px 15px;
line-height: 1.5em;
vertical-align: top;
}
blockquote.anthem:before, blockquote.anthem:after {
content: "\266B";
display: block;
font-size: 2em;
margin: 10px 0 0;
}
</style>
<p>I now have a custom domain! <a href="https://novov.neocities.org">novov.neocities.org</a> now redirects to the much terser <a href="https://novov.me">novov.me</a>. The <a href="https://en.wikipedia.org/wiki/.me">.me</a> TLD technically belongs to the small Slavic nation of Montenegro, bordering the Adriatic Sea. So now I have to bear alliegance to the Montenegrin government, I suppose...</p>
<!-- nvpr -->
<hr />
<p>I've been thinking of having a custom domain for a while. And by "a while", I mean ever since <a href="https://marijn.uk/thegarden/12021/01/domain/">other cool people started doing it</a>. Truly, I am a beacon of originality. As for the <em>why</em>, I had a few reasons:</p>
<ul>
<li>Easier to remember and more unique.</li>
<li>More resilient. I can switch to a new host if Neocities ever goes down or pulls one over on me.</li>
<li>Makes my website look more professional and is just generally cool to have.</li>
</ul>
<p>Initially, I wanted <code>novov.net</code>,<sup class="ref" id="ref1"><a href="#fn1">1</a></sup> but it turns out that is occupied by a Chinese online entertainment company. My next-best option was <code>novov.xyz</code>, but that doesn't really roll off the tongue, and is a bit too random for my taste. Therefore, I decided to go with the <code>.me</code> TLD. I have exactly zero Montenegrin ancestry<sup class="ref" id="ref2"><a href="#fn2">2</a></sup>, but according to Montenegro's <code>.me</code> <a href="https://domain.me">website</a>...</p>
<blockquote>
<p>You are one step away from getting the domain name of your dreams. Personalize your blog, business or website. Get creative!</p>
</blockquote>
<p>I just couldn't say no to the domain of my dreams, I guess. After all, I <em>definitely</em> want to get creative, especially since an <a href="/images/blog/content/naslovnaslika10.png">overexcited looking bearded dude</a> is pointing to the text for some reason.<sup class="ref" id="ref3"><a href="#fn3">3</a></sup> And I guess Montenegro seems like a decent enough place. At the very least, I can't say it <em>isn't</em> any more, or who knows what will happen to my precious domain?</p>
<hr />
<blockquote class="anthem">
Oh, bright dawn of May.<br>Our mother <b>Montenegro</b>.<br>We are sons of your rocks<br>And keepers of your honesty<br>We love you, the rocky hills<br>And your awesome gorges<br>That never came to know<br>The chains of shameful slavery.<sup><a class="footnote-ref" href="#fn:4">4</a></sup><br>Our mother <b>Montenegro</b>!
</blockquote>
<blockquote class="anthem">
Oh, bright dawn of May.<br>Our mother <b>Montenegro</b>.<br>While our unity gives wings<br>to our Lovchenian<sup><a class="footnote-ref" href="#fn:5">5</a></sup> cause,<br>Proud shall be, celebrated will be<br>Our dear homeland.<br>A river of our waves,<br>Jumping into two seas,<br>Will bear voice to the ocean,<br>May eternal be our <b>Montenegro</b>!<br>Will bear voice to the ocean,<br>May eternal be our <b>Montenegro</b>!
</blockquote>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>I didn't want to get a <code>.nz</code> TLD as that doesn't really offer the level of privacy that I desire.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Unless there's some family relation I don't know about.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p>He's probably not even Montenegrin. Who knows where they got that stock photo from?</p>
</li>
<li id="fn4">
<a class="backref" href="#ref4">4</a>
<p>Not really true. Montenegro was under Ottoman rule for some 400 years.</p>
</li>
<li id="fn5">
<a class="backref" href="#ref5">5</a>
<p>Referencing Montenegro's namesake, Mount <a href="https://en.wikipedia.org/wiki/Lovćen">Lovćen</a>.</p>
</li>
</ul>
novovanon185441@gmail.comTwenty Yearshttps://novov.me/blog/posts/twentyyears2021-01-15T00:00:00+12:00Wikipedia celebrates its twentieth anniversary.
<p><img alt="The Wikipedia article for "Anniversary", with a characteristic template notice about uncited words." src="/images/blog/content/anniversary.jpg" /></p>
<p>Twenty years ago, online encyclopedia Wikipedia was born with surprisingly little fanfare. Starting as an offshoot of the more conventional expert-contributor website <a href="https://en.wikipedia.org/wiki/Nupedia">Nupedia</a>, it was conceived as little more than a flash-in-the-pan experiment. Nobody would have predicted then that it would turn into one of the web's most essential reference works, a veritable repository of information both informative and interesting - but occasionally inaccurate. <sup>[<a href="https://en.wikipedia.org/wiki/Wikipedia:Citation_needed"><em>citation needed</em></a>]</sup></p>
<p>And although it has problems with power-tripping admins and over-zealous editors, I'm happy that it's there. The community is a testament to the power of the common man without the all too frequent handicap represented by the profit motive, and I hope it stays that way for many years to come. Here's to twenty more!</p>
<hr />
<p>I've been editing on Wikipedia for a much measlier six years, and have been an active editor for about three, first as User:Axisixa and now as <a href="https://en.wikipedia.org/wiki/User:Mir_Novov">User:Mir Novov</a>. Although most of my changes<sup class="ref" id="ref1"><a href="#fn1">1</a></sup> have been spelling corrections there and adding citations here - typical for an Wikipedia editor - I have got to create a few articles as well:<sup class="ref" id="ref2"><a href="#fn2">2</a></sup></p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/ToaruOS">ToaruOS</a> - an hobby operating system. Not bad, states the facts but little else, partially due to lack of sources.</li>
<li><a href="https://en.wikipedia.org/wiki/Simon_Stålenhag">Simon Stålenhag</a> - an illustrator focusing on retrofuturistic artwork. Appears in my <a href="/liked/art/">Art I like</a> page, so this is partially out of personal bias, though I've made sure to make it neutral, as is <a href="https://en.wikipedia.org/wiki/Wikipedia:Neutral_point_of_view">standard Wikipedia practice</a>. Melds together his personal life and artwork into one section, which is a bad decision.</li>
<li><a href="https://en.wikipedia.org/wiki/OneShot">OneShot</a> - an metafictional video game. My favourite out of all the articles I helped create; although it could be improved some more, this is largely due to improper sourcing and bad writing skills.</li>
<li><a href="https://en.wikipedia.org/wiki/IAmA">IAmA</a> - a content split from the Reddit article, in particular, the section on its <span class="nowrap">I Am A...</span>/Ask Me Anything subreddit. The content was largely written by others, and it needed to go since it was getting unwieldy. Could probably be transmuted into a more general "ask me anything" article, as the format is very popular outside of Reddit.</li>
</ul>
<hr />
<p>More than any donations,<sup class="ref" id="ref3"><a href="#fn3">3</a></sup> Wikipedia needs more editors. Maybe you could add information definitions to <a href="https://en.wiktionary.org/">Wiktionary</a> or free media to <a href="https://commons.wikimedia.org">Commons</a> or <a href="https://en.wikisource.org/">Wikisource</a> if that's more your jam, but unfortunately, they have a far smaller reach. Ignoring that, I found that the <a href="https://en.wikipedia.org/wiki/Help:Introduction"><strong>official introduction</strong></a> helped me quite a bit when I started.</p>
<p>Even though I started using the web from a young age, I'm still amazed by the stuff that Wikipedia offers - check out my <a href="/linkroll/">linkroll</a> for some cool things out there. If you decide to become an editor, you'd be contributing to an ever-growing mass of digital information accessible to anyone in the world (with internet). I know it sounds quite cheesy, but I find that quite powerful. Knowledge deserves to be free. </p>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>Around 1100 in total, which is actually pretty small for an active editor of my vintage.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Note that you don't "own" Wikipedia articles that you create. In accord with the wiki ethos, all articles are released into the ether as a public good free for anyone to modify.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p>Cup of coffee etc etc. The <a href="http://archive.org/web/">Internet Archive</a> needs your money more.</p>
</li>
</ul>
novovanon185441@gmail.comGone in a Flashhttps://novov.me/blog/posts/goneinaflash2021-01-02T00:00:00+12:00Adobe Flash is dead, and that's both a good and a bad thing.
<p><img alt="Thanks for using Adobe Flash Player." src="/images/blog/content/flash.jpg" /></p>
<p>On 1 January 2021, Adobe Flash was discontinued. In fact, Adobe went so far as to say that:</p>
<blockquote>
<p>Adobe strongly recommends all users immediately uninstall Flash Player to help protect their systems. </p>
</blockquote>
<p>If you've reading this, you should do the same - Flash has more holes than a block of Swiss cheese. I already uninstalled Flash with the advent of Safari 14 - which doesn't support it. This has been a long time coming. </p>
<p>Flash, although initially a simple tool for animations, soon had grown into a more complex one supplementing every facet of web design. This came with consequences: a bevy of security issues, high usage requirements, and frequent crashes for any system that dared run it. A crowd of naysayers quickly developed around the technology, especially as open standards like HTML, JavaScript, and CSS became more advanced. </p>
<hr />
<p>Chief among them was Apple's polarising and sometimes problematic CEO Steve Jobs, who decided to exclude Flash from the iPhone. In his manifesto <a href="https://web.archive.org/web/20200430094807/https://www.apple.com/hotnews/thoughts-on-flash/"><em>Thoughts on Flash</em></a>, he listed his problems with it. It wouldn't run quickly on the power-efficient iPhone OS (now iOS). It was proprietary. It was unreliable. And it was insecure.<sup class="ref" id="ref1"><a href="#fn1">1</a></sup></p>
<p>At the time, his piece received both <a href="https://news.ycombinator.com/item?id=1304310">support and strong criticism</a>. Many viewed the Flash-less iPhone as handicapped, and Apple as wanting to stifle innovation. But the fact that Flash never took hold on the rival Android operating system proved its critics right. And with the corporate mothership now behind the rising sentiment, Flash begun to fall.</p>
<p>According to the <a href="https://twitter.com/ratten_matthias/status/1341974889859665920">internet consensus</a>, Flash is a nostalgic part of the web that was mercilessly snuffed out. I too have plenty of nostalgia for the software: I grew up using it to play weird online games, interact with stuff, and... design kitchen layouts. Yes, the last one is true.<sup class="ref" id="ref2"><a href="#fn2">2</a></sup> I'm still convinced that the web is better off without it though. In addition to its many intractable problems, it's basically one company's toehold into the open web. Great emulation software like <a href="https://ruffle.rs">Ruffle</a> and <a href="https://github.com/swf2js/swf2js">swf2js</a> exists to carry its torch.</p>
<p>Nevertheless, I see where its supporters are coming from. Flash represents a time where the web was free for all. When everyone had their own site instead of being funnelled through mega-corporations. When netizens were more than commodities. When going online elicited wonder instead of frustration and alienation. But Flash just happened to die at an ominous time. And although my early web experience was more satisfying, in some ways it was never more than an ideal - remember AOL?</p>
<p>The Flash design tools were also great for quick content creation.<sup class="ref" id="ref3"><a href="#fn3">3</a></sup> The art of creating an early HTML page or spinning up an SWF has not been quite replicated - although there are projects out there trying to do it. Web design is now inaccessible to the beginner, an impenetrable stack composed of a million different technologies.</p>
<hr />
<p>And although Flash is gone, what replaced it isn't really a whole lot better. The HTML/CSS/JS stack has become what it sought to destroy. Although ostensibly free, it is proprietary in practice: Google has dominance over both Chrome and search to such a degree that a newcomer couldn't hope to compete.<sup class="ref" id="ref4"><a href="#fn4">4</a></sup> Pages are swamped with gobs of JavaScript, damaging load time and PC performance.<sup class="ref" id="ref5"><a href="#fn5">5</a></sup> Browsers themselves are also full of cruft: arcane payment and video decoding technology, file system manipulation, <a href="https://www.w3.org/TR/webmidi/">MIDI</a>, and more. The "open web" has became a colossus of intractable proportions encroaching on the once-open web. </p>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>To be fair, Jobs probably had additional ulterior motives in that Flash was competition to the App Store.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>As a kid, I used to spend hours on the websites of cabinet makers and car manufacturers designing the ideal versions of their products. They get you while you're young.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p>Or so I'm told.</p>
</li>
<li id="fn4">
<a class="backref" href="#ref4">4</a>
<p>Think of the last time there's been innovation in the web search arena. Google's monopoly means there's no incentive, and their control of search essentially means they gatekeep the web.</p>
</li>
<li id="fn5">
<a class="backref" href="#ref5">5</a>
<p>Hence why I don't have a Medium or Substack instead of this blog.</p>
</li>
</ul>
novovanon185441@gmail.comThe Land of The Long White Liehttps://novov.me/blog/posts/landofthelongwhitelie2020-12-03T00:00:00+12:00New Zealand isn't as progressive as you think.
<p><span class="warning">Note that this blog post is very political and somewhat negative. If that's not your thing, feel free to ignore it; I'll be posting more lighthearted stuff in the future.</p>
<p>Many people look to today's New Zealand, especially under Prime Minister Jacinda Ardern, as a beacon of progressiveness in an increasingly divided world. She stood with dignity as her country faced an earthquake, a white supremacist incursion, and a pandemic that nobody could have seen coming. A feminist icon, she carried a baby while continuing to serve as Prime Minster. She's an aspirational figure, a guidestone, for all New Zealanders, one that all young Kiwis look up to in awe. The country she leads is a veritable paradise: it provides free healthcare and great social services, and its idyllic landscape and environment shows how we can combat climate change.</p>
<p><em>Some</em> of what I said above is true. And plenty of people seem to agree with such depictions.</p>
<blockquote>
<p><strong><a href="https://www.vogue.co.uk/news/article/jacinda-ardern-leadership-style">7 Defining Characteristics Of Jacinda Ardern’s Leadership Style</a></strong><br>In recent days, New Zealand’s prime minister Jacinda Ardern secured a historic election victory. Ardern’s party won the highest percentage of the vote in more than five decades, claiming 64 seats in parliament. The feat will allow Labour to govern the country alone (should Ardern choose to do so). What is it that makes Ardern such an exceptional leader?</p>
</blockquote>
<!-- -->
<blockquote>
<p><strong><a href="https://www.nzherald.co.nz/nz/jacinda-ardern-tipped-to-win-nobel-peace-prize-despite-competition-from-thunberg-trump/BXT5L6UY7MYMVUABH5REVHEDJY/">Jacinda Ardern tipped to win Nobel Peace Prize despite competition from Thunberg, Trump</a></strong><br>According to Joe Short from gambling.com, Jacinda Ardern's handling of the Covid-19 pandemic and her inspirational leadership sees her a strong contender to take it out.</p>
</blockquote>
<!-- -->
<blockquote>
<p><strong><a href="https://www.theguardian.com/world/commentisfree/2019/jul/19/jacinda-ardern-prime-minister-of-australasia-if-only-it-was-that-simple">Jacinda Ardern prime minister of Australasia? If only it was that simple</a></strong><br>The good and the great of Melbourne packed in to the town hall on Thursday evening to hear the New Zealand prime minister, Jacinda Ardern, speak on the topic of why good government matters. Since the tragic Christchurch mosque massacre, Ardern has come to be seen not just as one of the world’s youngest leaders of a nation, but also as one of the world’s great leaders. </p>
</blockquote>
<p>Clearly, Jacinda Ardern Thought is very popular overseas. And though most New Zealanders like her as a person, many of us take a more nuanced view of things. There's a lot of problems with Jacinda, and a lot of problems with our country. We've far from the progressive paradise that some seem to think we are. To explain things, I'll have to go back in time a bit...</p>
<h3>Birth of a Nation</h3>
<p>On October 6, 1769, Captain James Cook became the first European to reach New Zealand soil. After two attempts at coming ashore, he got into an altercation with local Māori; leading to the naming of what's now known as Cape Kidnappers.<sup class="ref" id="ref1"><a href="#fn1">1</a></sup> Although many people celebrate this as the... <em>birth of a nation</em>,<sup class="ref" id="ref2"><a href="#fn2">2</a></sup> they are largely of the older, more pale-skinned demographic. New Zealand really started being a thing closer to 1841, after settlement by Europeans had already begun. Soon, these colonisers had a small problem, in that the native population... well, they refused to stop existing.</p>
<p>Around ~25% of Māori are estimated to have died in the first half of the 1800s. Conventional wisdom at the time was that the whole population would eventually disappear, but fortunately this prediction made using "superior" European science did not come to pass. Instead, those that did survive happened to get their land holdings stolen by white people for daring to rebel, or stolen by white people by de-communalising the land and giving it to the person most likely to sell. The effects of this are still visible: today, Māori are consistently treated worse in the criminal justice system,<sup class="ref" id="ref3"><a href="#fn3">3</a></sup> and only make up 16% of the national population. They are less likely to own a home, and more likely to fall below the poverty line.<sup class="ref" id="ref4"><a href="#fn4">4</a></sup></p>
<p>Meanwhile, things were going a bit better for the colonial class. New Zealand's progressive reputation comes largely from the welfare state established by avowed socialist Labour prime minister Michael Joseph Savage. Savage created the world's first social security program, nationalised the health system, improved living and working conditions, and introduced the forty-hour week. New Zealand under Savage's rule was transformed as a country, and to this day, he remains one of New Zealand's most popular prime ministers.</p>
<p>Nevertheless, the 1980s, the resulting economic order faced significant problems. It was perceived as many as over-regulated and inflexible, reliant on exclusive trade agreements with Britain, and heavily constrictive to the foreign exchange of goods and services. When Labour entered power in 1984,<sup class="ref" id="ref5"><a href="#fn5">5</a></sup> new finance minister Roger Douglas swiftly executed extreme reform, including sharp taxation cuts on high earners and implementation of a sales tax (GST). State-owned assets were sold to the highest bidder, and charges were added to university education and (to a minor extent) healthcare. Unions were damaged immensely and irreparably.</p>
<p>The results of these free-market<sup class="ref" id="ref6"><a href="#fn6">6</a></sup> policies were devastating:<sup class="ref" id="ref7"><a href="#fn7">7</a></sup> growth stagnated, foreign debt quadrupled, and the newly created money made its way into the hands of a few oligopolists. Poverty rates grew by a third, and child poverty by 100%. Living standards declined for the poor, and their health decreased. Youth suicide levels sharply rose, as systems were left unable to cope.<sup class="ref" id="ref8"><a href="#fn8">8</a></sup> Douglas was eventually fired after trying to install a flat tax rate; dismayed, he left Labour to found the libertarian ACT party. </p>
<h3>Waking from the Kiwi Dream</h3>
<p>Today, the legacy of "Rogernomics" continues to shape New Zealand. The country is ranked as having some of the most "economic freedom" by think tanks.<sup class="ref" id="ref9"><a href="#fn9">9</a></sup> This has had devastating effects - the income of the top 10% of Kiwis has grown by almost 50%, while the poorest have only gained around 10% more.<sup class="ref" id="ref10"><a href="#fn10">10</a></sup> In 2011, <strong>workers had a share of income lower than all in the OECD but Mexico, Slovakia, Luxembourg, and Turkey</strong>. According to one expert:</p>
<blockquote>
<p>New Zealand's income gaps have now widened to such an extent that they have created something of a crisis - not in the sense of a natural disaster that strikes in an instant, but a gradual shift that builds until it reaches a tipping point.</p>
</blockquote>
<p>Kiwis boast the <strong>highest youth suicide rate in the developed world</strong>,<sup class="ref" id="ref8b"><a href="#fn8">8</a></sup> and one of the highest family violence rates in the OECD.<sup class="ref" id="ref11"><a href="#fn11">11</a></sup> Business is still controlled by a select few. Some workers are denied public holidays and prohibited from striking.<sup class="ref" id="ref12"><a href="#fn12">12</a></sup> This dire situation has worsened the already dismal state of young Māori; causing "<strong>cultural devastation</strong>" according to an educationalist. According to the OECD, <strong>New Zealand is the worst country in the world regarding increasing inequality</strong>.<sup class="ref" id="ref13"><a href="#fn13">13</a></sup> Damningly, they state that more conscientious economic policy would have not only reduced inequality, but increased growth.</p>
<p>The deregulation has also affected quality of housing; 42,000 houses and over 50 schools suffer from leaks and poor air quality due to poor construction and materials,<sup class="ref" id="ref14"><a href="#fn14">14</a></sup> causing <strong>over one thousand Kiwis to die every winter</strong>.<sup class="ref" id="ref15"><a href="#fn15">15</a></sup> Those that manage to survive are plunged further into poverty even further due to additional heating and maintenance costs. According to a journalist:<sup class="ref" id="ref16"><a href="#fn16">16</a></sup></p>
<blockquote>
<p>The idea that if you turn the business of government and industry to the private sector and get government out of the way, we'll end up in a... paradise where everything will be better quality and less expensive. Of course that didn’t happen, especially not in the building industry. </p>
</blockquote>
<p>Although new standards have been introduced, they are still inadequate according to experts, and do not fix under-qualified construction practices. While a <strong>2019 bill finally introduced mandatory insulation</strong> and heatings standards for landlords,<sup class="ref" id="ref17"><a href="#fn17">17</a></sup> the former is only required in the ceiling and floors, despite many areas having high winds and cold temperatures.<sup class="ref" id="ref18"><a href="#fn18">18</a></sup> Most New Zealanders don't complain about this since they've lucky to live in a house at all.</p>
<p>In the beleaguered Northland region, some have resorted to building huts in local forests.<sup class="ref" id="ref19"><a href="#fn19">19</a></sup> Others live in their cars. Like many places in the world, New Zealand suffers from an immense housing crisis; but to a greater degree than most. Out of all OECD countries, New Zealand has had the <strong>largest housing price increase every year since 1990</strong>,<sup class="ref" id="ref20"><a href="#fn20">20</a></sup> and prices consistently grow faster than incomes.<sup class="ref" id="ref21"><a href="#fn21">21</a></sup> In 2020, housing prices have increased more in a year than people have earned,<sup class="ref" id="ref22"><a href="#fn22">22</a></sup> with the average rate of growth being over 18%.<sup class="ref" id="ref23"><a href="#fn23">23</a></sup> Despite the existence of over 30,000 empty houses in the country's largest city alone,<sup class="ref" id="ref24"><a href="#fn24">24</a></sup> the <strong>average house sells for over one million dollars</strong> there.<sup class="ref" id="ref25"><a href="#fn25">25</a></sup> Since the country has no land or capital gains tax, owners are encouraged to hold onto property until it appreciates in value, and they frequently do. Empty lots are not an uncommon sight. Little political impetus exists for real solutions to the crisis, as just 8% of MPs don't own a home, as compared to 63% on average.<sup class="ref" id="ref26"><a href="#fn26">26</a></sup> Some own more than 10.</p>
<p>Being a common destination for tourists, New Zealand likes to market itself as "100% Pure". This is far from the truth. <strong>60% of monitored rivers are unsafe to swim in</strong>, largely due to the country's dairy industry.<sup class="ref" id="ref27"><a href="#fn27">27</a></sup> According to the <em>New Zealand Geographic</em>:<sup class="ref" id="ref28"><a href="#fn28">28</a></sup></p>
<blockquote>
<p>We’re one of the world’s greatest pesticide sprayers, and the 13th most enthusiastic fertiliser. We have more endangered species (proportionally) than anyone else. We boast the fastest known extermination in the world of an order of large animals (nine species of moa). Ninety per cent of our wetlands are gone.</p>
</blockquote>
<p>And despite the <em>Lord of the Rings</em>‐esque vistas in every tourism brochure and poster, New Zealand is only 32% forested. According to a <em>PLoS One</em> study, it's the <strong>18th worst country in the world regarding protection of its natural environment</strong>.<sup class="ref" id="ref29"><a href="#fn29">29</a></sup> Large swathes of countryside have been transformed due to man's inexorable desire to bend the earth to his will: complex irrigation systems, rivers full of sludge, and cancerous groundwater deposits.<sup class="ref" id="ref30"><a href="#fn30">30</a></sup> Dissenters like scientist Dr. Mike Joy, who tried to bring the country's dairy industry to attention, are slammed by powerful farming interests and branded "un-Kiwi".</p>
<p>Unfortunately, this is a common response to anyone who tries to bring my country's problems to attention. <strong>Despite our progressive reputation, abortion was only legalised in 2019, and euthanasia in 2020.</strong> New Zealand's government suffers from a pervasive slothfulness, one no better exemplified by the local slang "she'll be right".</p>
<h3>Killing with Kindness</h3>
<p>It is only natural, then, that Jacinda Ardern became the leader of the country. She's definitely a popular leader - but a few voices dissent:</p>
<blockquote>
<p><strong><a href="https://www.newsroom.co.nz/ideasroom/the-cruel-violence-of-kindness-and-unity">The cruel violence of ‘kindness’ and ‘unity’</a></strong><br>The night of New Zealand’s general election was bittersweet. Like many others, I was happy to see the National Party’s ever-increasing incompetence and unapologetic racism met with the defeat they deserved.</p>
<p>But in watching the Prime Minister deliver her victory speech, I couldn’t help but feel my happiness quickly fade as she stated her new Government’s focus for the next three years, proclaiming: “We will not take your support for granted and I can promise you we will be a party which governs for every New Zealander.”</p>
<p>On the surface, there’s nothing wrong with these words - they are encouraging and warm, and expertly delivered with the Prime Minister’s signature calm and reassuring voice that we have become almost dependent on in a year defined by an ongoing global pandemic.</p>
<p>However, to those of us with the most vulnerable in Aotearoa on our minds, we knew that this message of promising governing for “every New Zealander” was a thinly veiled assurance to the former, recently swayed National Party voters that the new Government had their back. It felt almost like a nudge and a wink to let them know that our deeply unequal normal was to continue.</p>
</blockquote>
<p>I highly recommend checking out the remainder of Mr. Asofo's article. It succinctly illustrates exactly the problem with Jacinda. I'm not suggesting that she's some sort of incorrigible menace - I'm sure she's a nice enough <em>person</em>, as the countless stories about her suggest - just that she does not have the requisite courage to be a true <em>leader</em> in these troubling times. Being a leader is more than talking about kindness and delivering for the cameras - it's about abating the fears in the hearts of many Kiwis. They go home to not enough food. They go to work and don't receive enough pay. Their material conditions are getting demonstrably worse every waking hour.</p>
<p>When Ardern campaigned in 2017, she was chosen by many to deliver transformative change. These aren't my words - they've hers.<sup class="ref" id="ref31"><a href="#fn31">31</a></sup> But by all accounts, she hasn't. Although her coalition government with the populist New Zealand First party limited her options significantly, she and the party's leader Winston Peters still shared significant ground. Her "Year of Delivery" - already a warning sign when thinking about implications for the previous - didn't deliver.<sup class="ref" id="ref32"><a href="#fn32">32</a></sup> The KiwiBuild project was an abject failure: 1,000 houses were promised, but only 300 were built; and she refused to implement the policies that the public had voted her in on. Her climate change policies were less progressive than Boris Johnson's.</p>
<p>By 2020, voters had decided that they had enough, with National consistently polling higher than Labour.<sup class="ref" id="ref33"><a href="#fn33">33</a></sup> This trend only abated after National leader Simon Bridges criticised Ardern's (to be fair, quite good) COVID-19 response, eventually resulting in his ousting, and National changing leaders twice in an election year. Eventually, Ardern went up against Judith Collins.<sup class="ref" id="ref34"><a href="#fn34">34</a></sup> Disliked by many even within caucus for her brash and uncompromising attitude, she was fired by previous PM John Key for corruption. Collins presided over further polling losses, presumably not helped by quotes like these:</p>
<blockquote>
<p>Does that have anything to do with me? Am I the minister of wetlands? Go and find someone who actually cares about this, because I don't... I don't like wetlands – they're swamps.<sup class="ref" id="ref35"><a href="#fn35">35</a></sup></p>
</blockquote>
<!-- -->
<blockquote>
<p>I am a woman of colour - the colour white.<sup class="ref" id="ref36"><a href="#fn36">36</a></sup></p>
</blockquote>
<!-- -->
<blockquote>
<p>[On climate change] I'm personally not adding to it - I only had one [child]<sup class="ref" id="ref37"><a href="#fn37">37</a></sup></p>
</blockquote>
<p>Although many media outlets touted Ardern's eventual win as a success for progressive politics, it could just as accurately be attributed to National's failure to run a competent campaign.<sup class="ref" id="ref38"><a href="#fn38">38</a></sup> In fact, this conclusion arguably makes the most sense, given her polling before COVID-19. And although she comfortably sits in the Prime Minister's chair today, given the constantly rising inequalities in New Zealand, it is hopefully only a matter of time before the people tire of her "kindness politics".</p>
<p>New Zealand is oft seen as a paradise compared to the turmoil exemplified by other nations. But it's merely a false hope; a mirage. It's pointed to as an example of how our current systems can work at their best. But it actually proves how these systems have failed us. Humanity is facing growing inequality and a changing climate. And when you have a massive problem arise, you don't make a few fixes, you take drastic action. When a car comes towards you, you don't freeze like a deer in the headlights, you get the hell out of the way. When your neighbourhood faces a tsunami, you don't close the curtains, you run for the goddamn hills. </p>
<p>When our carpenter Samuel Parnell got the first eight-hour day in the world, he didn't get it at the ballot box or negotiate - he stood on his own two feet and demanded it.<sup class="ref" id="ref39"><a href="#fn39">39</a></sup> When your country faces injustice, you don't follow the cues of New Zealand or elect a Jacinda Ardern. You try to gain sweeping change with tools you can rely on. </p>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>Today, the location is mainly known for its gannet colonies.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Hence the name of this section; I'm definitely not trying to make a stupid allusion here.</p>
</li>
<li id="fn3">
<a class="backref" href="#ref3">3</a>
<p><a href="https://www.corrections.govt.nz/__data/assets/pdf_file/0014/10715/Over-representation-of-Maori-in-the-criminal-justice-system.pdf"><em>Over-representation of Māori in the criminal justice system: An exploratory report</em></a></p>
</li>
<li id="fn4">
<a class="backref" href="#ref4">4</a>
<p><a href="https://www.stuff.co.nz/national/politics/101231280/fact-check-disparities-between-mori-and-pkeh"><em>Fact check: Disparities between Māori and Pākehā</em></a></p>
</li>
<li id="fn5">
<a class="backref" href="#ref5">5</a>
<p>Although Labour is the major centre-left party in New Zealand, mismanagement by the oft-inebriated previous National PM led to a need for reform. However, it is important to note that said reform could have been accomplished in other ways.</p>
</li>
<li id="fn6">
<a class="backref" href="#ref6">6</a>
<p>Many countries conducted similar reforms at the same time.</p>
</li>
<li id="fn7">
<a class="backref" href="#ref7">7</a>
<p><a href="https://en.wikipedia.org/wiki/Rogernomics"><em>Rogernomics</em></a></p>
</li>
<li id="fn8">
<a class="backref" href="#ref8">8</a>
<p><span class="duprefs">and <a href="#ref8b">8b</a></span>
<a href="https://www.bbc.com/news/world-asia-40284130"><em>What's behind New Zealand's shocking youth suicide rate?</em></a></p>
</li>
<li id="fn9">
<a class="backref" href="#ref9">9</a>
<p><a href="https://www.nzherald.co.nz/business/new-zealand-ranked-third-freest-economy-in-the-world/TJRXHS67QFWHVA6JRJJGJVJQXM/"><em>New Zealand ranked third freest economy in the world</em></a></p>
</li>
<li id="fn10">
<a class="backref" href="#ref10">10</a>
<p><a href="https://www.nzherald.co.nz/lifestyle/paradise-for-a-few/SKPXOOSCO6AVP6KMAPOV2ZSUTA/"><em>Paradise for a few</em></a></p>
</li>
<li id="fn11">
<a class="backref" href="#ref11">11</a>
<p><a href="https://www.theguardian.com/world/2020/may/11/new-zealand-domestic-violence-services-to-get-200m-as-lockdown-takes-toll"><em>New Zealand domestic violence services to get $200m as lockdown takes toll</em></a></p>
</li>
<li id="fn12">
<a class="backref" href="#ref12">12</a>
<p><a href="https://thespinoff.co.nz/games/20-05-2020/there-and-back-again-the-bill-targeting-workers-right-in-the-screen-industry/"><em>There and back again: The bill targeting workers’ right in the screen industry?</em></a></p>
</li>
<li id="fn13">
<a class="backref" href="#ref13">13</a>
<p><a href="https://www.theguardian.com/commentisfree/2014/dec/12/how-new-zealands-rich-poor-divide-killed-its-egalitarian-paradise"><em>How New Zealand's rich-poor divide killed its egalitarian paradise</em></a></p>
</li>
<li id="fn14">
<a class="backref" href="#ref14">14</a>
<p><a href="https://en.wikipedia.org/wiki/Leaky_homes_crisis"><em>Leaky homes crisis</em></a></p>
</li>
<li id="fn15">
<a class="backref" href="#ref15">15</a>
<p><a href="https://thespinoff.co.nz/society/22-08-2018/mould-sweet-mould-inside-new-zealands-damp-housing-crisis/"><em>Mould, sweet mould: inside New Zealand’s damp housing crisis</em></a></p>
</li>
<li id="fn16">
<a class="backref" href="#ref16">16</a>
<p><a href="https://www.rnz.co.nz/programmes/the-detail/story/2018723459/our-leaky-buildings-saga-is-a-long-way-from-sorted"><em>Our leaky buildings saga is a long way from sorted</em></a></p>
</li>
<li id="fn17">
<a class="backref" href="#ref17">17</a>
<p><a href="https://en.wikipedia.org/wiki/Healthy_Homes_Guarantee_Act_2017"><em>Healthy Homes Guarantee Act 2017</em></a></p>
</li>
<li id="fn18">
<a class="backref" href="#ref18">18</a>
<p>The city of Invercargill's temperature averages 9 degrees Celsius.</p>
</li>
<li id="fn19">
<a class="backref" href="#ref19">19</a>
<p><a href="https://www.theguardian.com/world/2019/nov/29/families-living-in-tree-huts-as-new-zealand-housing-crisis-bites"><em>Families living in tree huts as New Zealand housing crisis bites</em></a></p>
</li>
<li id="fn20">
<a class="backref" href="#ref20">20</a>
<p><a href="https://thespinoff.co.nz/society/15-05-2017/why-does-new-zealand-keep-building-such-massive-houses/"><em>Why does New Zealand keep building such massive houses?</em></a></p>
</li>
<li id="fn21">
<a class="backref" href="#ref21">21</a>
<p><a href="https://www.imf.org/external/research/housing/"><em>Latest Global Housing Watch Data</em></a></p>
</li>
<li id="fn22">
<a class="backref" href="#ref22">22</a>
<p><a href="https://www.stuff.co.nz/life-style/homed/real-estate/300166514/your-home-probably-earns-more-than-you-do"><em>Your home probably earns more than you do</em></a></p>
</li>
<li id="fn23">
<a class="backref" href="#ref23">23</a>
<p><a href="https://www.nzherald.co.nz/nz/pm-jacinda-ardern-on-house-prices-it-just-cannot-keep-increasing-at-the-rate-that-it-is/CCIRZPUJIW3FXYPCTQK6A7JZNI/"><em>PM Jacinda Ardern on house prices: 'It just cannot keep increasing at the rate that it is'</em></a></p>
</li>
<li id="fn24">
<a class="backref" href="#ref24">24</a>
<p><a href="http://www.newshub.co.nz/home/money/2018/05/30-000-empty-homes-in-auckland-is-it-time-to-tax-the-owners.html"><em>30,000 empty homes in Auckland: Is it time to tax the owners?</em></a></p>
</li>
<li id="fn25">
<a class="backref" href="#ref25">25</a>
<p><a href="https://www.scoop.co.nz/stories/BU2011/S00237/auckland-median-house-price-hits-1m-mark-in-october-9-other-regions-28-districts-hit-record-median-prices.htm"><em>Auckland Median House Price Hits $1m Mark In October; 9 Other Regions & 28 Districts Hit Record Median Prices</em></a></p>
</li>
<li id="fn26">
<a class="backref" href="#ref26">26</a>
<p><a href="https://www.nzherald.co.nz/nz/mps-latest-home-ownership-interests-revealed/A4MGGXA3EW2KHDFFA4XWLRBNFY/"><em>MPs' latest home ownership, interests revealed</em></a></p>
</li>
<li id="fn27">
<a class="backref" href="#ref27">27</a>
<p><a href="https://www.nzherald.co.nz/nz/greenpeace-wins-advert-battle/7TQJHFDD2J4CMIXJYY56QAYQWU/"><em>Greenpeace wins advert battle</em></a></p>
</li>
<li id="fn28">
<a class="backref" href="#ref28">28</a>
<p><a href="https://www.nzgeo.com/stories/32-pure/"><em>32% Pure</em></a></p>
</li>
<li id="fn29">
<a class="backref" href="#ref29">29</a>
<p><a href="https://www.nytimes.com/2012/11/17/business/global/new-zealands-green-tourism-push-clashes-with-realities.html?_r=0"><em>New Zealand’s Green Tourism Push Clashes With Realities</em></a></p>
</li>
<li id="fn30">
<a class="backref" href="#ref30">30</a>
<p><a href="https://www.nytimes.com/2019/08/15/opinion/new-zealand-cows.html"><em>The Incontinent Cows of Middle-earth</em></a></p>
</li>
<li id="fn31">
<a class="backref" href="#ref31">31</a>
<p><a href="https://www.odt.co.nz/opinion/ardern-more-transitional-transformational"><em>Ardern more transitional than transformational</em></a></p>
</li>
<li id="fn32">
<a class="backref" href="#ref32">32</a>
<p><a href="https://www.theguardian.com/world/2019/dec/31/new-zealands-year-of-style-over-substance"><em>New Zealand's year of style over substance</em></a></p>
</li>
<li id="fn33">
<a class="backref" href="#ref33">33</a>
<p><a href="https://en.wikipedia.org/wiki/Opinion_polling_for_the_2020_New_Zealand_general_election"><em>Opinion polling for the 2020 New Zealand general election</em></a></p>
</li>
<li id="fn34">
<a class="backref" href="#ref34">34</a>
<p>Popularly nicknamed "Crusher" by her opponents, after she instituted a policy to crush boy racers' cars. As of 2017, only 3 ended up destroyed.</p>
</li>
<li id="fn35">
<a class="backref" href="#ref35">35</a>
<p><a href="https://www.newshub.co.nz/environmentsci/collins-wetlands-comments-outrage-environmentalists-2014050617"><em>Collins' wetlands comments outrage environmentalists</em></a></p>
</li>
<li id="fn36">
<a class="backref" href="#ref36">36</a>
<p><a href="https://www.newshub.co.nz/home/politics/2019/11/judith-collins-calls-herself-a-woman-of-colour-in-deleted-tweet.html"><em>Judith Collins calls herself a 'woman of colour' in deleted tweet</em></a></p>
</li>
<li id="fn37">
<a class="backref" href="#ref37">37</a>
<p><a href="https://www.newshub.co.nz/home/politics/2020/07/judith-collins-biggest-controversies-troublesome-tweets-resignations-and-dirty-politics.html"><em>Judith Collins' biggest controversies: Troublesome tweets, resignations and Dirty Politics</em></a></p>
</li>
<li id="fn38">
<a class="backref" href="#ref38">38</a>
<p><a href="https://www.stuff.co.nz/national/politics/300137917/election-2020-the-complete-disarray-of-nationals-campaign-that-led-to-electoral-slaughter"><em>Election 2020: The 'complete disarray' of National's campaign that led to electoral 'slaughter'</em></a>, <a href="https://www.newshub.co.nz/home/politics/2020/08/nz-election-2020-labour-and-national-failing-to-step-up-and-offer-solutions-expert.html"><em>NZ Election 2020: Labour and National failing to 'step up' and offer solutions - expert</em></a></p>
</li>
<li id="fn39">
<a class="backref" href="#ref39">39</a>
<p><a href="https://nzhistory.govt.nz/people/samuel-parnell"><em>Samuel Parnell</em></a></p>
</li>
</ul>
novovanon185441@gmail.comThe Landscape has Changedhttps://novov.me/blog/posts/thelandscapehaschanged2020-11-03T00:00:00+12:00I'm starting a blog. Hopefully it'll be decent.
<p>Ever since the creation of my site, I've wanted to have a blog. I finally have the time, and the result is what you see here. I'm aiming to post extremely occasionally - mostly long-form content about computing, design, and other fun stuff.</p>
<hr />
<p>My aim with the design - which takes clear inspiration from a variety of other sites online - is to be simple, but not overwhelmingly so. In my opinion, a lot of blogs nowadays chase after a trendy minimalistic aesthetic to the point of unusablity.<sup class="ref" id="ref1"><a href="#fn1">1</a></sup></p>
<p>If you've visited this site before, you might notice that some other stuff has also been changed. Being the perfectionist that I am, I wasn't really happy with the site's design from the moment I made it. In fact, I pretty much scrapped my initial design and started over again before uploading anything.<sup class="ref" id="ref2"><a href="#fn2">2</a></sup> I'm still not completely happy with novov.neocities.org 3.0, but it has to be finished sometime - right?</p>
<div class="gallery">
<figure>
<img class="light" alt="" src="/images/blog/content/yokai1x.png"/>
<figcaption>The first, never-before-seen version of my website.</figcaption>
</figure>
<figure>
<img alt="" src="/images/blog/content/yokai2x.png"/>
<figcaption>The second version, for future reference.</figcaption>
</figure>
</div>
<p>I had a few goals in mind with this endeavour:</p>
<ul>
<li><strong>Reduce the amount of unnecessary verbiage.</strong> I tended to waffle a bit and detract from the actual content on each page.</li>
<li><strong>Put my own content first, as opposed to stuff I like.</strong> My aim here is to make the site more "professional" (not to an unwelcoming degree, though), so I can comfortably host any future projects on it. </li>
<li><strong>Make the design more welcoming and easier to read.</strong> Some of the old pages, with their tiny high-contrast text and tight spacing, slowly became off-putting in my mind. I've changed from EB Garamond to Crimson - while the former is a great font, it is a bit distracting for long blocks of text, and I like the "sharper" look of the latter. Also, a clearer hierarchy in the page design has been instated, rather than having everything float in whitespace.</li>
</ul>
<p>I'd say I succeeded with most of them, but I'll probably disagree with myself come six months. Hopefully you find it better, or at least equivalent. I'm not sure how well a new blog will work out with my meagre social media presence, but I'd like to say I've tried. </p>
<p>I'm not a fan of the "2020 sucks!!!" cliche - partly because it was a much better year than 2019 for me, and partly because many of the struggles that it's known for have always been taking place for the underprivileged. But I can't deny that things aren't looking good. Inequality is rising, authoritarianism is looming, and the future generally looks uncertain. The landscape hasn't changed, but it <em>is</em> changing. So take care of yourself if you have the means.</p>
<ul id="footnotes">
<li id="fn1">
<a class="backref" href="#ref1">1</a>
<p>If you've wondering what the weird icons are, they've <a href="https://en.wikipedia.org/wiki/Alchemical_symbol">alchemical symbols</a>. I'm no alchemist, but I think they look neat. All of them have a meaning relating to their topic - see if you can figure it out.</p>
</li>
<li id="fn2">
<a class="backref" href="#ref2">2</a>
<p>Early visitors may recall an intermediate design for the homepage with a blue background - a 2.0 before the 2.1, if you will.</p>
</li>
</ul>
novovanon185441@gmail.com