1
0
mirror of https://github.com/osmarks/website synced 2025-01-09 17:00:29 +00:00

minor style fixes, update dead link, Minecraft blog post

This commit is contained in:
osmarks 2024-11-01 21:03:56 +00:00
parent 356f79ad02
commit 41b5af0d0b
24 changed files with 185 additions and 23 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 KiB

BIN
assets/images/bcpipes1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
assets/images/bcquarry.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
assets/images/word_dos.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
assets/images/word_o365.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

View File

@ -1,12 +0,0 @@
---
title: ComputerCraft is peak computing
description: It may be a janky Minecraft mod, but in some ways it's nicer than lots of modern software stacks.
slug: computercraft
created: 18/11/2023
draft: yes
---
I have been thinking about [ComputerCraft](https://tweaked.cc/) slightly recently[^1], because of moving [several years of archived code](https://github.com/osmarks/random-stuff/tree/master/computercraft) from Pastebin and some private internal repositories to public view (and writing some minor patches to [PotatOS](https://potatos.madefor.cc/)), and it increasingly seems like a model of what computers *should* be like which highlights the shortcomings of everything else.
Computers grow more powerful every year, as fabs wrangle ever more advanced machinery into printing ever better and smaller transistors and the handful of companies still at the cutting edge refine their architectures slightly, but, [as has been noted](https://danluu.com/input-lag/), this doesn't actually translate into better user experience.
[^1]: This introductory sentence was written several months ago.

View File

@ -0,0 +1,126 @@
---
title: Modded Minecraft power creep trends
description: Has Minecraft become easier?
created: 01/11/2024
slug: mcpower
---
Playing modded Minecraft, I have the vague impression that many things have been simplified over the years of development. Of course, vague impressions from memory aren't very reliable, so I've gathered slightly more robust information by looking at what general-purpose "kitchen sink" modpacks in various versions had available. The categories I will use are by nature somewhat arbitrary, but I think they're good enough to be useful. If you don't want to know about all the details, [skip to the conclusion](#conclusion).
## Logistics
In the ancient days of [Tekkit](https://www.technicpack.net/modpack/tekkit.552560/mods) (1.2.5), which is now old enough that I remember almost nothing about it and have had to trawl the Internet Archive and quaint wikis for information, predating even hoppers (1.5), the primary means of item transportation for automation was BuildCraft pipes. These were very unsophisticated: a special pipe with an engine attached was required to move items out of inventories, automatic filtering required a diamond pipe, and if the destination was full then items were simply dropped. There were also Pneumatic Tubes from [RedPower](https://web.archive.org/web/20120103012226/http://www.eloraam.com/), which actually checked whether their destinations had space and had somewhat smarter filtering options, though they still required some additional blocks to do anything - transposers needed redstone signals to submit items to the pipe network and sorters needed "blutricity" produced by other machines. For long distances, there were the options of Railcraft trains and Ender Storage item teleporter boxes.
::: captioned src="/assets/images/bcpipes1.jpg"
A very small BuildCraft pipe system.
:::
::: captioned src="/assets/images/seven_sorters_common_delivery_1.jpg"
Organizing items: previously a hard enough problem that [blog posts](https://gamegenus.blogspot.com/2012/01/minecraft-sorting-and-smelting-system.html) were written on optimizing it.
:::
Somewhat later, [Feed The Beast](https://www.feed-the-beast.com/modpacks/76-ftb-ultimate?tab=mods) (1.4.7) brought, among *many* other things, Applied Energistics. [Applied Energistics](https://web.archive.org/web/20130301012622/http://ae-mod.info/ME-Storage-and-Automation/) replaced the complexity of pipe-based sorting and storage systems with a trivially extensible cabled network which also handled storage and on-demand autocrafting. This means that rather than requiring buildout of dedicated automation systems for every item and making everything else by hand, a much smaller set of machines could be shared between many recipes and only be invoked when needed[^1].
Applied Energistics' developer seemingly considered this a mistake, because around the time of [1.7.10](https://www.feed-the-beast.com/modpacks/23-ftb-infinity-evolved-17?tab=mods), the mod was overhauled with "channels", which encourage more thoroughly planned and complex network designs, as well as moving away from from standard "have ores in the ground" world generation to include rare meteors containing "alien processor presses" necessary to start. The channel system also encouraged creative subnetwork design for certain problems and incentivized organizing storage in certain ways which nobody ever did[^2] to optimize space use. Slightly earlier, Thermal Expansion introduced its "itemducts", essentially a simplified version of the RedPower pneumatic tubes which didn't need external support equipment, and [Ender IO](https://www.curseforge.com/minecraft/mc-mods/ender-io) has roughly contemporaneous conduits which simplify routing even further by fitting multiple pipes into a single block.
::: captioned src="/assets/images/ae2_example_cn.png"
This mid-game system can store several thousand items and automatically craft a few types from its stocks.
:::
::: captioned src="/assets/images/itemducts_simple.jpg"
It was quite hard to find any pictures of the 1.6.4 version. This may or may not be it.
:::
A similar "stable modding version" to 1.7.10 was not really reached until 1.12.2, and by this time Applied Energistics 2 had a new competitor, Refined Storage, which brought AE1's simpler design to newer versions, with many modpacks including it, possibly along with AE2. I do not follow versions later than that in much detail, and there don't seem to be many genuinely new mods from them anyway, but my understanding is that the world has shifted back to AE2 for central storage, with various other mods adding short-distance pipes and [Create](https://www.curseforge.com/minecraft/mc-mods/create)'s conveyor belt systems favoured by some.
A few other less-widely-used logistics solutions have existed:
* [Logistics Pipes](https://ftb.fandom.com/wiki/Getting_Started_(Logistics_Pipes)) extended Buildcraft pipes with AE2-like capabilities while remaining tied to the physical virtual world more than AE2. It seems to have been introduced around 1.4.7 (its history is shrouded in dead links). Modern versions have [Pretty Pipes](https://www.curseforge.com/minecraft/mc-mods/pretty-pipes).
* [ComputerCraft](https://tweaked.cc/) can move items between inventories (with several addons, in older versions), so people built storage systems such as [Milo](https://forums.computercraft.cc/index.php?topic=87.0), [Artist](https://github.com/squidDev-CC/artist), ItemSystem (which appears to be lost now) and about [four](https://github.com/osmarks/dragon) [janky](https://github.com/osmarks/wyvern) [projects](https://docs.osmarks.net/hypha/spectral) I've made.
* [XNet](https://www.mcjty.eu/docs/mods/xnet) is essentailly a confusing domain-specific programming language for moving items, energy and fluids.
* [Botania's Corporea system](https://www.reddit.com/r/feedthebeast/comments/8hdl35/a_guide_to_botania_corporea_networks_what_are/) augments vanilla storage systems with some extra automation and IO capabilities.
* [Immersive Engineering](https://www.curseforge.com/minecraft/mc-mods/immersive-engineering) has conveyor belts with more or less the same restrictions as BuildCraft pipes.
* [PneumaticCraft](https://www.curseforge.com/minecraft/mc-mods/pneumaticcraft-repressurized) has its own logistics network based on drones, like Factorio's.
## Industry
As far as I know, "industrialization" in Minecraft in the sense of automation with heavily technology-themed equipment began with BuildCraft and IndustrialCraft. IndustrialCraft and BuildCraft had simple systems for power and some new machines, but BuildCraft focused on things like quarries and pumps whilst IndustrialCraft had electric furnaces, some personal equipment, and various machines which existed to produce parts of other machines. Notably, because of complaints about it using too much iron, it added the macerator, which turned one iron ore into two iron ingots, as many tech mods still do to this day. BuildCraft machines ran on Redstone Engines (free), Stirling Engines (coal) or Combustion Engines (oil, and they required cooling or they would violently explode), but IndustrialCraft had a more complicated system with different voltage tiers, more types of generator and the flagship nuclear reactor, with its own design minigame and also the possibility of violently exploding.
::: captioned src="/assets/images/bcquarry.png"
The iconic BuildCraft Quarry.
:::
::: captioned src="/assets/images/tekkit_nuclear_reactor.jpg"
A [computer-controlled](https://www.planetminecraft.com/project/fully-automatic-nuclear-power-plant-in-tekkit-minecraft/) Tekkit nuclear reactor.
:::
Around 1.3, Thermal Expansion was introduced, and with it a new style of machinery which has been adopted by almost every tech mod since. Thermal Expansion machines can automatically output and input items from each side, run even with insufficient power supplied (but slower), store energy rather than requiring it to be supplied exactly when needed, never explode, occupy exactly one block and perform many functions within that one block, and are coupled with generators which work in similar ways. Much of this design was [crystallized](https://www.reddit.com/r/feedthebeast/comments/4dbmll/how_the_default_effect_ensured_rf_power_would_be/) in the Redstone Flux API for cross-mod power compatibility, which has energy work more or less identically to a fluid rather than anything analogous to real electricity, and has remained broadly unchanged in mainstream tech mods since.
Mod intercompatibility in power generation meant that mods could differentiate or "balance" themselves by using bigger numbers. Most notably, [Big Reactors](https://www.curseforge.com/minecraft/mc-mods/big-reactors) was included in many 1.6/1.7 modpacks and trivialized power generation, with fairly cheap, simple, safe and high-output nuclear reactors[^8].
::: captioned src="/assets/images/big_reactor.jpg
One of these machines obsoletes a vast quantity of smaller generators and support infrastructure, so long as you can supply it with yellorium.
:::
As a reaction to perceived power creep, [Immersive Engineering](https://www.curseforge.com/minecraft/mc-mods/immersive-engineering) was released for 1.7.10 too; it has a slightly more complex RF-based power system and, to counter the "magic blocks" phenomenon, uses multiblocks instead. I don't consider this a good solution, as it really only alters the aesthetics and increases resource costs.
::: captioned src="/assets/images/immersive_engineering_biodiesel.webp
This biodiesel plant is bigger than other mods might make it, but it has about five distinct machines in it.
:::
While there have been numerous incremental changes since then - primarily in the direction of bigger numbers, utility mods adding more special-purpose machines to automate very specific tasks and fragmentation into smaller mods - the only big change I am aware of has been [Create](https://www.curseforge.com/minecraft/mc-mods/create), a very much ground-up tech mod in wide use since 1.14 which aims to make automation involve more world interaction and (literal) moving parts.
There are a few mods, generally not used outside modpacks centered on them, actively designed along different lines: [RotaryCraft](https://reikakalseki.github.io/minecraft/mods/rotarycraft.html) and addons are built for physical realism and progression mostly based on forcing players to solve increasingly intricate engineering challenges[^3]; [Modern Industrialization](https://www.curseforge.com/minecraft/mc-mods/modern-industrialization) has specific internal progression mechanisms and is meant to be centered on logistics puzzles; the notorious GregTech series just goes for incompatibility with everything and massive complexity everywhere.
## Resource acquisition
Tech mods also generally provide ways to avoid "manual labour" like mining and farming of mobs and plants[^4], beginning with, again, the BuildCraft quarry for automated mining. [MineFactory Reloaded](https://ftbwiki.org/MineFactory_Reloaded) also added simple-to-use machines for mob and plant automation, whereas [Forestry](https://www.curseforge.com/minecraft/mc-mods/forestry) added much more complex farms and farming in general, including the widely feared bee mechanics, which require players to selectively breed bees to produce a few handy things like ender pearls.
However, Minecraft isn't a well-optimized game. Interacting with the world and having entities is slow, and so mods were frequently designed to avoid these operations to reduce lag on busy servers. This has ultimately led to "functionally equivalent" replacements for farming and mining systems without actually doing the farming and mining, such as [Mystical Agriculture](https://www.curseforge.com/minecraft/mc-mods/mystical-agriculture) (and IndustrialCraft, but less so) resource crops, resource *bees*, several mods for "virtual" mob farms, and things like the [Lens of the Miner](https://ftb.fandom.com/wiki/Lens_of_the_Miner) and [Void Ore Miner](https://ftb.fandom.com/wiki/Void_Ore_Miner), which directly materialize ore from energy. This removes many of Minecraft's "physical" limits and thus permits much more horizontal and vertical scaling, which some mods and modpacks have adapted to with ideas like [singularities](https://www.curseforge.com/minecraft/mc-mods/singularities) crafted from unreasonably large quantities of a single item.
::: captioned src="/assets/images/mystical_agriculture.png"
I don't think you can reasonably consider this operationally interesting given that it is mostly dependent on one mechanic (farming), waiting and sheer numbers.
:::
On the other hand, aside from weird outliers like Mekanism's [5x ore processing](https://wiki.aidancbrady.com/wiki/Ore_Processing), which requires a moderately sized chemical processing line, ore processing - turning ores into ingots - has remained fairly close to the original benchmark IC2 set with ore doubling-and-a-bit-more remaining the standard.
## Magic
Magic mods[^5] are much more heterogeneous, and don't borrow as much from each others' designs as tech mods, plausibly because they don't feel the need to interoperate as much or to match reality at all. Tekkit, for all that it generally has less powerful mods than newer packs, contains [Equivalent Exchange](https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/minecraft-mods/1282288-1-2-5-equivalent-exchange-2-v1-4-6-7), which breaks everything by allowing anything to be converted into anything else for free (once you have one item as a template). Most magic mods do not interact with so much of the game: they have their own internal progression like Thaumcraft's [research](https://ftb.fandom.com/wiki/Research_(Thaumcraft_4)), to some extent Botania's runes, and [Astral Sorcery](https://www.curseforge.com/minecraft/mc-mods/astral-sorcery)'s attunement perk tree and only sometimes provide capabilities you can "bring out" of the mod. These are sometimes quite powerful - [Psi](https://www.curseforge.com/minecraft/mc-mods/psi) arguably obsoletes most early-to-mid-game tools - but they generally don't compound across mods or appear directly commensurable enough that developers react by increasing the capabilities of their own mods.
## Equipment
There have been many equipment mods. One of the most popular is [Tinkers' Construct](https://ftb.fandom.com/wiki/Tinkers%27_Construct), which makes tools out of swappable parts with distinct modifiers. However, in its original form, it had more or less a unique globally optimal tool set significantly better than vanilla's: Tinkers' Construct 2 adjusted everything and fixed this. Many mods with their own materials add their own slightly-better-than-vanilla armour and tool sets, but IC2, fairly early on, decided to add armour to make you [effectively immortal](https://ftbwiki.org/QuantumSuit). I suppose this reduced the efficacy of future power-creep. There are several other dimensions along which equipment can vary beyond raw power, like unique convenience features as in [Modular Powersuits](https://ftbwiki.org/Modular_Powersuits), and many magic or tech mods design tool sets along similar lines.
No mention of equipment power creep, however, is complete without mentioning Draconic Evolution. Draconic Evolution has a [boss](https://ftb.fandom.com/wiki/Chaos_Guardian) which deals damage which *cannot be blocked* - indeed, it can harm creative mode players - while simultaneously having its own armour which directly prevents death from any source as long as it is powered. The obvious consequence of this is that Draconic Evolution equipment is [almost](https://www.reddit.com/r/allthemods/comments/s12ho7/couldnt_beat_the_chaos_guardian_with_full/) a hard requirement for survival, and will trivially curbstomp almost anything else.
## Conclusion
"Power creep" is actually several closely related things:
* The existence of a [single optimal strategy](https://heav.apionet.net/blog#8) (or total ordering over strategies). This is probably a *realistic* way for a game to behave - in real life, there are many solutions to problems, ways to behave, traits and circumstances which are more or less "dominated options" - but, for whatever reason, often feels unpleasant[^6]. Unlike in most other domains, people usually want there to be tradeoffs, perhaps because they find different playstyles fun.
* "One-upmanship" leading to this narrowing of strategies - or perhaps just to increasingly large numbers, though this has the same ultimate effect - in which developers want to make their mod relevant in the current situation, make it slightly more powerful than others in some dimension, and "force" others to follow.
* Loss of complexity through "competition" on ease-of-use features, as has happened with logistics, machinery and resources.
You can reasonably argue that it's not an actual problem because multiplayer games usually aren't sufficiently competitive to force use of the optimal strategy, so players can pick their preferred option, and because [CraftTweaker](https://www.curseforge.com/minecraft/mc-mods/crafttweaker)-like tools allow customization to bring strategies' power into alignment. I don't think this is right, since defaults are very powerful: recipe tweaking is slow and annoying enough to be rarely done extensively except by specialized pack designers, people are likely still biased towards "better" options, and it affects the design of new mechanics in mods, as they will usually be built against the perceived defaults rather than people's idiosyncratic preferences.
Something interesting to note here is that we don't see a smooth monotonic progression towards more power. There generally instead seems to be convergence toward a "preferred" level of simplicity/abstraction/power within each domain, progressing rapidly at first as people discover-or-invent new mechanics and occasionally reversing (e.g. Create, AE2[^9]). There's also lots of sensitivity to the actions and design goals of individual developers, making jumps discontinuous and somewhat unpredictable. It also appears that power creep is avoidable by individual mod authors by deliberately reducing interconnectivity with other mods, such that users cannot pick-and-choose optimal solutions finely, and by having unusual features which can't clearly be compared in power[^7].
What can we learn from this outside of Minecraft mod balance? Probably not that much. While we see that the dynamics involved have been quite sensitive to individual developers, I think this is because there's not very strong selection pressure on mods and because "generations" are slow rather than this being a more general pattern. One interesting angle here is that the (apparent) nonexistence of a dominant strategy often comes from the advantages and disadvantages being merely hard to compare rather than actually equal. I think this holds up in other contexts, and growing ability to make end-to-end comparisons might remove illusions that many things are equally matched.
[^1]: In a way, this is similar to (the ideal of) cloud computing.
[^2]: You "pay for" item types as well as individual items, so in principle you can eke out greater storage efficiency by defragmenting storage carefully such that each storage cell contains a specific small set of item types and is correctly sized for them. In practice, storage cells are cheap enough and the problem frustrating enough to keep on top of that this was only ever done as a [fun curiosity](https://www.reddit.com/r/feedthebeast/comments/5qclhu/ae2_perfect_storage_cell_defragmentation/).
[^3]: The author goes to great lengths to keep everything working despite being functionally unable to move off 1.7.10. It is admirable and vaguely cursed.
[^4]: This is possible in vanilla, but most of the designs are somewhat annoying and expensive or require [technical Minecraft horrors](https://technical-minecraft.fandom.com/wiki/Quarry).
[^5]: As [mentioned](/magic/) in my other post, I mean specifically magic-aesthetic mods, similarly to [this](https://genetyx8.github.io/flat-square-torus/2021/07/09/magic-mods.html).
[^6]: Also, it wastes game design effort if you don't expect anyone to use the worse ones.
[^7]: This reminds me of [status illegibility](https://www.ribbonfarm.com/2010/10/14/the-gervais-principle-iv-wonderful-human-beings/).
[^8]: Ironically, we probably could have this in real life too.
[^9]: It's possible that these only worked because of timing - people were already used to and somewhat bored of their predecessors. I don't know.

View File

@ -273,6 +273,7 @@ The author, Zachary Mason, also wrote [The Lost Books of the Odyssey](https://ww
* [The Titanomachy](https://kishoto.wordpress.com/2015/09/09/the-titanomachy-rrational-challenge-defied-prophecy/).
* [Wizard, Cabalist, Ascendant](/stuff/wizard-cabalist-ascendant.xhtml).
* [Sekhmet Hunts The Dying: A Computation]9http://www.beneath-ceaseless-skies.com/stories/sekhmet-hunts-the-dying-gnosis-a-computation/.
* [The Finale of the Ultimate Meta Mega Crossover](https://m.fanfiction.net/s/5389450/1/).
* More to be added when I feel like it.
## Games

View File

@ -18,7 +18,7 @@ I think it's more plausible that teaching focuses on this surface knowledge beca
So why is programming education particularly bad? Shouldn't *every* field be harmed by tacit knowledge transmission problems? My speculative answer is that they generally are, but it's much less noticeable and plausibly also a smaller problem. The heuristics used in programming are strange and unnatural - I'll describe a few of the important ones later - but the overarching theme is that programming is highly reductionist: you have to model a system very different to your own mind, and every abstraction breaks down in some corner case you will eventually have to know about. The human mind very much likes pretending that other systems are more or less identical to it - [animism](https://en.wikipedia.org/wiki/Animism) is no longer a particularly popular explicitly-held belief system, but it's still common to ascribe intention to machinery, "fate" and "karma", animals without very sophisticated cognition, and a wide range of other phenomena. Computers are not at all human, in that they do exactly what someone has set them up to do, which is often [not what they thought they were doing](https://gwern.net/unseeing), while many beginners expect them to "understand what they meant" and act accordingly. Every simple-looking capability is burdened with detail[^1]: the computer "knows what time it is" (thanks to some [nontrivial engineering](https://en.wikipedia.org/wiki/Network_Time_Protocol) with some possible failure points); the out-of-order CPU "runs just like an abstract in-order machine, but very fast" (until security researchers [find a difference](https://en.wikipedia.org/wiki/Meltdown_(security_vulnerability))); DNS "resolves domain names to IPs" (but is frequently intercepted by networks, and can also serve as a covert backchannel); video codecs "make videos smaller" (but are also [complex domain-specific programming languages](https://wrv.github.io/h26forge.pdf)); text rendering "is just copying bitmaps into the right places" ([unless you care about Unicode or antialiasing or kerning](https://faultlore.com/blah/text-hates-you/)).
The other fields which I think suffer most are maths and physics. Maths education mostly [fails to convey what mathematicians actually care about](https://www.maa.org/external_archive/devlin/LockhartsLament.pdf) and, despite some attempts to vaguely gesture at it, does not teach "problem-solving" skills as much as sometimes set nontrivial multistep problems and see if some people manage to solve them. Years of physics instruction [fail to stop many students falling back to Aristotlean mechanics](https://www.researchgate.net/profile/Richard-Gunstone/publication/238983736_Student_understanding_in_mechanics_A_large_population_survey/links/02e7e52f8a2f984024000000/Student-understanding-in-mechanics-A-large-population-survey.pdf) on qualitative questions. This is apparently mostly ignored, perhaps because knowledge without deep understanding is sufficient for many uses and enough people generalize to the interesting parts to supply research, but programming makes the problems more obvious, since essentially any useful work will rapidly run into things like debugging.
The other fields which I think suffer most are maths and physics. Maths education mostly [fails to convey what mathematicians actually care about](/assets/misc/LockhartsLament.pdf) and, despite some attempts to vaguely gesture at it, does not teach "problem-solving" skills as much as sometimes set nontrivial multistep problems and see if some people manage to solve them. Years of physics instruction [fail to stop many students falling back to Aristotlean mechanics](https://www.researchgate.net/profile/Richard-Gunstone/publication/238983736_Student_understanding_in_mechanics_A_large_population_survey/links/02e7e52f8a2f984024000000/Student-understanding-in-mechanics-A-large-population-survey.pdf) on qualitative questions. This is apparently mostly ignored, perhaps because knowledge without deep understanding is sufficient for many uses and enough people generalize to the interesting parts to supply research, but programming makes the problems more obvious, since essentially any useful work will rapidly run into things like debugging.
So what can be done? I don't know. Formal education is likely a lost cause: incentives aren't aligned enough that a better way to teach would be adopted any time soon, even if I had one, and enough has been invested in existing methods that any change would be extremely challenging. I do, at least, have a rough idea of what good programmers have which isn't being taught well, but I don't know how you *would* teach these things effectively:
@ -37,4 +37,4 @@ You may contend that LLMs lack "general intelligence", and thus can't solve nove
[^1]: The particular examples here are not ones you're likely to run into for a while, but anyone who writes code for long enough is going to encounter *something* weird.
[^2]: Notably, people who have spent more time on Leetcode than me claim that it is actually just about memorizing a few algorithms which it then uses for a wide range of thinly disguised problems.
[^2]: Notably, people who have spent more time on Leetcode than me claim that it is actually just about memorizing a few algorithms which it then uses for a wide range of thinly disguised problems.

View File

@ -0,0 +1,45 @@
---
title: Computing is terrible and that's okay
description: Everything mostly works enough and you were never getting a clean-sheet redesign
slug: complexity
created: 18/04/2024
draft: yes
---
::: epigraph attribution="David Wheeler"
All problems in computer science can be solved by another level of indirection.
:::
Computer hardware grows more powerful every year, as fabs wrangle [ever more advanced machinery](https://www.anandtech.com/show/17415/asmls-highna-update-coming-to-fabs-in-2024-2025) into printing ever better and smaller transistors and the handful of companies still at the cutting edge [refine their architectures slightly](https://ieeexplore.ieee.org/document/10067540), but basic metrics of user experience [have stagnated or regressed](https://danluu.com/input-lag/) despite vast investment at every level: a modern device doesn't really feel snappier or like it's solving fundamentally harder problems than past systems. The cause of this is no longer in question: systems scaled far beyond what a person can fully understand, and without end-to-end design and oversight regressions in some places were inevitable. Many other articles would, at this point, decry this as a failure of modernity and perhaps talk about a new project aiming to fix everything; *this* blog was founded on principles of contrarianism[^1], and I'll instead be arguing why this is good, or at least necessary.
## The hidden complexity of modern problems
Intuitively, an early word processor feels like it's solving the same problem as a modern application, despite running nicely on computers perhaps four orders of magnitude slower[^2], but this isn't exactly true. While the older Word can substitute for the newer version in simple use cases, it would look more at home as a CLI editor for low-resourced systems: users now expect vastly more formatting options and editing capabilities, as well as Unicode, and most importantly a smooth interactable GUI which mirrors what the final printout will look like. This is far more complicated than a text-mode UI: variable-width text requires a complex [text rendering stack](https://faultlore.com/blah/text-hates-you/) to run on every keypress - with further dependencies on font rendering, itself [quite tricky](https://axleos.com/writing-a-truetype-font-renderer/); the editor has to solve for a new valid layout on every change even with complicated objects in use; and users expect smooth panning, scrolling and zooming.
::: captioned src=/assets/images/word_dos.png
Word for DOS.
:::
::: captioned src=/assets/images/word_o365.png
A more modern version (I don't know which specifically).
:::
Many things are like this! People are now used to high-definition video streaming - both watching other people's and creating their own - and graphical interfaces, requiring both dealing with vast volumes of data compared to an old text-mode UI[^3] and very rapidly (de)compresing it by three orders of magnitude for the world's slow internet connections using very complex codecs. Messaging systems are meant to deliver to every device someone owns, anywhere in the world, in seconds, while encrypting information in transit, allowing participation in many groups at once and exchanging large files. Every imaginable device is expected to plug-and-play with every plausible piece of software, even if a manufacturer ships subtly broken implementations. Users want to work on the same document with multiple people concurrently, requiring some hairy distributed systems engineering.
This doesn't, strictly, mean they have to run slowly.
## Systems which fit in your head
TODO legibility Seeing Like A State
https://en.wikipedia.org/wiki/Oberon_(operating_system)
ComputerCraft
https://drewdevault.com/2020/03/18/Reckless-limitless-scope.html
## Abstraction allows rapid development
## The hardware is still really fast
[^1]: This isn't actually true, but it's rhetorically convenient, which is just as good.
[^2]: Home computers in 1990 could achieve about 10 <span class="hoverdefn" title="Million Instructions Per Second">MIPS</span>, while modern computers can achieve perhaps 20000 per core, and of course have multiple cores and a GPU.
[^3]: Uncompressed, full HD/8-bit-per-channel/60Hz video, now the bare minimum for usability, occupies a minimum of 3Gbps, significantly more than consumer LANs. I use a modest 4K60 display, which requires 12Gbps. Every byte streaming into a display requires *something* to generate it.

14
package-lock.json generated
View File

@ -13,7 +13,7 @@
"@msgpack/msgpack": "^3.0.0-beta2",
"@vscode/markdown-it-katex": "^1.1.0",
"axios": "^1.5.0",
"better-sqlite3": "^11.0.0",
"better-sqlite3": "^11.5.0",
"binary-fuse-filter": "^1.0.0",
"chalk": "^4.1.0",
"css-select": "^5.1.0",
@ -660,9 +660,9 @@
}
},
"node_modules/better-sqlite3": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.0.0.tgz",
"integrity": "sha512-1NnNhmT3EZTsKtofJlMox1jkMxdedILury74PwUbQBjWgo4tL4kf7uTAjU55mgQwjdzqakSTjkf+E1imrFwjnA==",
"version": "11.5.0",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.5.0.tgz",
"integrity": "sha512-e/6eggfOutzoK0JWiU36jsisdWoHOfN9iWiW/SieKvb7SAa6aGNmBM/UKyp+/wWSXpLlWNN8tCPwoDNPhzUvuQ==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@ -2830,9 +2830,9 @@
"integrity": "sha512-Wjss+Bc674ZABPr+SCKWTqA4V1pyYFhzDTjNBJy4jdmgOv0oGIGXeKBRJyINwP5tIy+iIZD9SfgZpztduzQ5QA=="
},
"better-sqlite3": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.0.0.tgz",
"integrity": "sha512-1NnNhmT3EZTsKtofJlMox1jkMxdedILury74PwUbQBjWgo4tL4kf7uTAjU55mgQwjdzqakSTjkf+E1imrFwjnA==",
"version": "11.5.0",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.5.0.tgz",
"integrity": "sha512-e/6eggfOutzoK0JWiU36jsisdWoHOfN9iWiW/SieKvb7SAa6aGNmBM/UKyp+/wWSXpLlWNN8tCPwoDNPhzUvuQ==",
"requires": {
"bindings": "^1.5.0",
"prebuild-install": "^7.1.1"

View File

@ -8,7 +8,7 @@
"@msgpack/msgpack": "^3.0.0-beta2",
"@vscode/markdown-it-katex": "^1.1.0",
"axios": "^1.5.0",
"better-sqlite3": "^11.0.0",
"better-sqlite3": "^11.5.0",
"binary-fuse-filter": "^1.0.0",
"chalk": "^4.1.0",
"css-select": "^5.1.0",

View File

@ -100,5 +100,6 @@ export const build = () => {
}
console.log(`Total terms: ${totalTerms}`)
console.log(`Total bigrams: ${totalBigrams}`)
return msgpack.pack(records)
const packr = new msgpack.Packr()
return packr.pack(records)
}

View File

@ -93,6 +93,7 @@ h1, h2, h3, h4, h5, h6
margin: 0
font-weight: 600
font-family: $headers
text-align: left
a
color: inherit
text-decoration: none !important