tag:blogger.com,1999:blog-274882382024-03-17T07:53:08.425+01:00taw's blogThe best kittens, technology, and video games blog in the world.tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.comBlogger717125tag:blogger.com,1999:blog-27488238.post-9768305347185082023-02-23T18:50:00.004+01:002023-02-23T18:50:34.850+01:00Europa Universalis IV crownland and negative absolutism bug<p>This bug can really mess up a campaign, but it's pretty much unknown to the community, as it's hiding behind a few layers of obfuscation.</p>
<h3>Land shares</h3><p>The system is conceptually very simple. Every estate, as well as the crown, have some amount of land.</p><p>When new land is conquered, it's distributed to everyone proportionally to their influence. For each estate, its influence is displayed directly. For the crown, influence is 60% + absolutism.</p><p>So here's an example. You have 200 dev, distributed as:</p><p></p><ul style="text-align: left;"><li>crown 30% - 60dev</li><li>nobles 35% - 70dev</li><li>clergy 20% - 40dev</li><li>burghers 15% - 30dev</li></ul><p></p><p>Now you conquer 100dev worth of land, it's one of the first two eras, and let's say influence is 60% for clergy, 40% for nobles, and 40% for burghers. New numbers should be:</p><p></p><p></p><p></p><p></p><ul style="text-align: left;"><li>crown - 60dev + 30dev = 90dev = 30% (+0.0%)</li><li>nobles - 70dev + 20dev = 90dev = 30% (-5.0%)</li><li>clergy - 40dev + 30dev = 70dev = 23.3% (+3.3%)</li><li>burghers - 30dev + 20dev = 50dev = 16.6% (+1.6%)</li></ul><p>In theory, it's all very straightforward.</p><p>It means it's very difficult to have high crownland share before age of absolutism, and countries with more estates have worse crownland situation, but that's just how the system works.</p><p>Also in-game tooltip "Crownland can be gained when: Conquer Land when having less than 60% total influence of all Estates" is a complete lie. This isn't even remotely how it works. It is baffling why they put such completely false information in the tooltip, as the real system is very straightforward.</p>
<h3>The Bug</h3><div>Anyway, the bug. Crown influence is 60% + absolutism, so before age of absolutism it should be just 60%. However it is not. The game still keeps track of absolutism in earlier eras, and it can be negative.</div><div><br /></div><div>If you engage with the estate system, and give away a lot of privileges, you can spend the first two eras at massively negative absolutism, and all the crownland calculations will be broken.</div><div><br /></div><div>Let's start as Venice - just doing the bare minimum of 3 mana privileges, and Religious Diplomats.</div><div><br /></div><div>This brings your Max Absolutism to -56.12, so crown influence instead of 60% will be just 3.88%, and you'll get almost zero crownland from conquests.</div><div><br /></div><div><div>It gets a lot worse if you get your max absolutism below -60. Then your crown influence becomes negative, and not only the estates get all the newly conquered land, but also whenever you conquer any land, you give them some of your existing lands as well. This is extremely pathological, but for example Venice gets there with just one more privilege.</div><div></div></div><div><br /></div><div>There's one more complication, as the game recalculates absolutism only if you perform some absolutism affecting action (most commonly changing local autonomy), and the check (vs 0 or vs max absolutism) seems to depend on that action being absolutism increasing or decreasing.</div><div><br /></div><div>At least you can recover from that if you increase your Max Absolutism, and then do an appropriate absolutism-affecting action, but there's no easy way to see if it worked in the game (in the save game file, it's "absolutism=XXX" line).</div><div><br /></div><div>If you're at war, and choose peace terms that would gain you some land, you can see land share changes in the tooltip, and from it you can see if it's broken or not.</div><div><h3>Play workaround</h3></div><div>If you play a monarchy, and don't grant many privileges, you probably won't be affected, as your Max Absolutism should remain positive.</div><div><br /></div><div>If you play a republic (planning to go monarchy before age of absolutism), or grant a lot of privileges (planning to revoke them before age of absolutism), this will mess up your game due to the bug. If you do both, it will mess up your game even worse due to negative crownland influence.</div><div><br /></div><div>So the best way to play is by being extremely careful with Max Absolutism. You can view it in Government tab, in Country Modifiers. It's fine if it's just +0, as long as it never goes negative.</div><div><br /></div><div>The obvious strategy of "just give all privileges on game start, then conquer something to regain crownland" only works for monarchies. If you try it as a republic (or as a monarchy that granted a lot of privileges) you'll get nothing out of it. And if you get to negative crown influence, you won't be able to even recover by seizing land, as every conquest will mean crownland giveaway.</div><div><br /></div><div>If you go negative Max Absolutism for a while, but then recover (either to positive, or to less negative value), you'll need to do some kind of recovery by absolutism-affecting action. If you're at risk, verify in peace deal tooltip that land share changes are what they should be.</div>
<h3>Mod workaround</h3><div>Mods can work around this issue by giving all countries +1000% max absolutism in the first two ages with a triggered modifier. This was Max Absolutism will never be negative, until you get to the age where it matters. This way players can play the game normally as if the bug wasn't there, and it won't affect anything else.</div><div><br /></div><div>I didn't test if the bug is still there in the last two ages, but usually at that point you'd try to have high Max Absolutism anyway.</div><div><h3>What Paradox should do</h3><div>They should make negative absolutism impossible, and that would fix the whole issue.</div></div>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-11567940629565781892023-02-19T15:32:00.002+01:002023-02-19T15:32:20.251+01:00How to fix Europa Universalis IV late game problem<p>This is not a rant post, this is a solutions post. However before discussing the potential solutions, it is important to understand the problem well first.</p>
<h3 id="late-game-problem">Late Game Problem</h3>
<p>In theory, Europa Universalis IV covers the time period from 1444 to 1821. However, in practice, most players never reach 1821 or simply speed-5 through the late game for the achievement (which is easily attainable, but only 9.4% of players have earned it, due to tedium).</p>
<p>This raises two questions:</p>
<ul>
<li>Why don't players continue to play until the end date?</li>
<li>Why don't players simply start the game in a mid/late game bookmark?</li>
</ul>
<p>Neither of these is inevitable for a grand strategy game. For a contrast I'll be coming to a lot, Crusader Kings 2 has neither of these problems. It can be started at a variety of dates, with 4 official start dates (769, 867, 936, 1066), and a lot of later start dates that are all quite good, and full of different interesting characters.</p>
<p>And while "playing to win" would make a Crusader Kings 2 fairly easy in late game, the game nudges you to embrace "roleplaying". There's a lot of things to do other than expanding, and especially if you're a less experienced player, holding on to what you conquered is a very nontrivial matter, so your realm will ebb and flow naturally.</p>
<p>So let's first explore these two questions, and then look into some potential solutions.</p>
<h3 id="why-don-t-players-continue-to-play-until-the-end-date-">Why don't players continue to play until the end date?</h3>
<p>Europa Universalis IV is a game about a country expanding and becoming stronger. When a player's country is weak, expanding can be a challenge. But once a player conquers some land, it's done. There is no ongoing challenge in holding onto lands that have been incorporated into the player's realm and the resources they provide.</p>
<p>Expanding comes with many challenges, such as:</p>
<ul>
<li>getting better casus belli</li>
<li>improving your diplomatic position</li>
<li>declaring wars where your allies join while enemy's allies don't</li>
<li>winning wars</li>
<li>getting best peace deals</li>
<li>managing aggressive expansion</li>
<li>preventing coalitions</li>
<li>managing truce timers</li>
<li>managing overextension</li>
<li>getting the necessary mana for peace deals and coring</li>
<li>dealing with one or two waves of nationalist rebels</li>
<li>converting conquered lands</li>
<li>reducing autonomy in conquered lands</li>
<li>managing governing capacity</li>
<li>building necessary buildings in conquered lands (since the AI is awful at it, no matter how many times patch notes claim to have fixed it)</li>
</ul>
<p>Once the player conquers a province without triggering a coalition, cores it, reduces its autonomy, and either converts it or accepts its infidel ways, it's done. It will never cause any problems.</p>
<p>This isn't the only design option available. In Crusader Kings 2, each conquered province beyond your small domain is controlled by a vassal and then their heirs. These vassals could still cause trouble, even if their grandfathers were loyal to your grandfather. This is particularly true during succession. There are many tools available to help manage this issue (and it maybe got too easy in late CK2 patches, early-version CK2 and early-version CK3 are both harder for a less experienced player), but it remains a real concern. Just try it yourself - load up a saved game of your Restored Roman Empire in observe mode and you'll likely see that the empire won't survive two AI successions. In a similar scenario in EU4, however, the AI wouldn't lose a single province.</p>
<p>Returning to Europa Universalis IV, the main objective of the game is to increase your power, mainly through territorial expansion. This leads to a situation where the player becomes more and more dominant at a pace that is much faster than what the AI can match. As a result, the game's challenge level decreases over time. EU4 does offer a few alternative means of increasing strength, such as reducing autonomy, converting conquered territories, constructing buildings and monuments, boosting development, and increasing crown land. However, these methods also result in the player's rapid growth and superiority over the AI.</p>
<h3 id="how-eu4-attempts-to-address-the-issue-of-easiness">How EU4 Attempts to Address the Issue of Easiness</h3>
<p>The most straightforward approach to addressing the issue of a game being too easy is to increase its difficulty. Europa Universalis 4 has multiple systems in place to do this.</p>
<p>The main one is choosing a more or less difficult starting country, with some countries providing a lot more challenging start than others. Players can also set specific goals for their campaign, along with restrictions such as no restarting or no loans. Although the goals are mostly centered around expanding and becoming stronger, some paths to achieving these goals are more challenging than others. Now this isn't Crusader Kings 2 where goals like filling the entire College of Cardinals with horses or collecting every major religious artifact are legitimate campaign ideas. Pretty much all the potential goals in Europa Universalis 4 involve expanding and getting stronger, some routes are just more difficult than others.</p>
<p>And finally there's the very poorly implemented difficulty slider. Most people play on Normal, where the same rules apply to players and AI, except for a few small AI cheats and hardcoded bonuses for lucky nations. Hard difficulty gives AI nations minor bonuses, and Very Hard gives them much fairly big bonuses.</p>
<p>However, all these systems get it completely backwards. Choosing a difficult starting country or playing on Very Hard can indeed make the early game challenging, but as the campaign progresses, the difficulty drops significantly with each passing decade. For example, playing as a no-ally Hisn Kayfa on Very Hard might be challenging in the early game, but once the player has survived and won a few wars, there will be no more significant challenge left in the game, and a player skilled enough to do so might just as well quit by 1500.</p>
<p>Finally, the game also tries to address the issue by railroading certain AI countries to expand quickly, with a long list of bonuses, including the lucky nations bonus. This does have an impact, but it leads to repetitive and boring mid-games, such as the inevitable Otto-Blob end-game boss. After encountering the same predictable outcome repeatedly, most players learn standard counters, such as the "Ally Austria and Poland No-CB Byzantium" opening.</p>
<h3 id="could-holding-to-what-you-have-be-a-challenge-">Could holding to what you have be a challenge?</h3>
<p>I don't think there is any way to make holding onto what you already possess be a significant challenge.</p>
<p>I tried many such experiments. For example, I tried to massively increase unrest to see if rebels would achieve anything, only to discover that leads nowhere.</p>
<p>Using the formulas from the game's wiki, let's consider a country with 10 provinces of +1 unrest each. After 100 years, it can expect around 5 rebellions, which is a minor annoyance.</p>
<p>So what happens if we increase the unrest level to an unrealistic +50? The number of rebellions per 100 years only increases to 9, and individual rebellions wouldn't even be any stronger. This is mainly due to "Recent Uprising: −100 unrest for 10 years modifier", which trivializes the whole system by hard capping rebellion frequency regardless of unrest.</p>
<p>But it's not even the only factor. Without Recent Uprising modifier, rebellion counts would be 10 per century and 90 per century respectively, that is 50x unrest translating to 9x rebellions. The formulas themselves are still nonlinear, with rebellions needing 10 monthly ticks to happen, and tick chance is capped at 75% per month, so even nearly infinite unrest translates to less that one rebellion per year without Recent Uprisings, or to one rebellion per 11 years with Recent Uprisings.</p>
<p>The only other consequence of all that extra unrest is longer recruitment time. Somehow unrest in provinces doesn't carry any other penalties. You still get as much money, manpower, and everything else from a rebellious province as one where peasants fully love you.</p>
<p>That's not to say EU4 rebellions are never a problem. Most notably going over 100% overextension directly affects rebellion formulas, resulting in much stronger rebellions. Heavily scripted event chains like Ming Crisis or Dutch Revolt can also cause a lot of problems, at least for the AI or for a player not aware of easy ways out they usually have. And due to the way rebellion formulas scale, rebellions can be really deadly for tiny countries, especially for Japanese daimyos, as even a small rebellion can be bigger than their whole national army.</p>
<p>For most countries, as long as they stay under 100% overextension, rebellions are so insignificant they might just as well not be in the game.</p>
<h3 id="other-ways-to-delay-the-inevitable-late-game-easiness">Other ways to delay the inevitable late game easiness</h3>
<p>If you really wanted to make the late game difficult, there are a few more options available through mods.</p>
<p>You could slow down expansion. The game already throws so many obstacles to expanding, why not just tweak some numbers? Increase AE, increase coring costs and time, increase province warscore cost, and so on. Weirdly a lot of players do it to themselves already by taking terrible idea groups, but a mod could do a lot more.</p>
<p>This somewhat delays the point at which the game becomes trivial, but there's very little to do in EU4 other than expanding, so you won't actually play longer, you'll just play at higher speed while waiting for various timers. If these same nerfs fairly apply to the AI as well, it won't even be all that effective at making the game more challenging.</p>
<p>In older patches it was possible to make expansion a lot more challenging by increasing number of diplomatic relations. The easiest way to become stronger is by seizing land from a weak country with no or only weak allies. Giving everyone a few more diplomatic relations slots makes it far more likely that someone strong would come to defend your potential victim. However, in recent patches allies are so good offensively I don't think this is even helpful.</p>
<p>Another thing to try is allowing conquest but reducing rewards from conquest by nerfing blobs. Paradox recently tried that with governing capacity system and 90% minimum autonomy in territories, but for most countries governing capacity limit is very generous. With trade companies being nearly as good as states, and courthouses being so cheap to build everywhere, at least with default values it doesn't really work.</p>
<p>One fairly obvious approach I haven't seen attempted yet is to make anti-blob bonus simply increase with time. This could simply be a flat bonus to every country, so small ones would benefit the most. It might start at nothing in 1444, but by 1600 every independent OPM gets +10 force limit, +10000 minimum manpower, and so on. Blobs would get the same bonus, but it would proportionally matter a lot less. This should be very simple to implement, and Extended Timeline already has a kind of era-based bonus system, it's just not used for balancing there. The trigger could be either calendar year or a specific technology.</p>
<p>There are a few additional things to consider - subjects probably shouldn't get this bonus, or get a proportionally lower one, or it would benefit strong countries with subject swarms too much. But tributaries and colonial nations should still get it, as they should be able to fight independent enemies fairly. And perhaps native OPMs shouldn't get such a bonus, or they'd swarm a colonial nation. And so on.</p>
<p>An interesting idea from Crusader Kings 2 (I keep repeating myself, but that's a related game that does so many things right) is giving random tiny countries ridiculous temporary bonuses at random during the game, so you'd have a random regional threat punching far above their size for a while (like IRL Brandenburg). I tried to mod that for EU4, but it really didn't do much, at least for values I tested. I've heard Anbennar does something like that with Great Conquerors, going completely over the top. This probably does more to make the late game unpredictable than difficult as such.</p>
<p>And speaking of Crusader Kings solutions, why not make successions a big event? For how obvious it seems, I couldn't find a single mod that even tries it. You could make successions partly reset diplomacy, reset all rebel timers, and add some modifiers to destabilize the country for the first few years. Right now all you get is one time paper mana tax - I'm not even going to pretend you "lose stability". That was true in EU3 as it took time to recover it, but in EU4 you just press one button and don't spend a single day at lower stability. Depending on how it's implemented, this wouldn't even have to be a nerf. What if it reduced accumulated AE by 25%, removed truce timers etc. as well? It might be worth a hassle of having extra rebels and losing some of your allies. This is all just vague ideas, I haven't done any testing, and a lot of CK2-style effects would be difficult to script in EU4's more limited scripting system. If someone wants to try, I think this idea has great potential.</p>
<p>Anyway, while there some possibilities here, I think the other path is a lot more promising.</p>
<h3 id="why-don-t-players-simply-start-the-game-in-a-mid-late-game-bookmark-">Why don't players simply start the game in a mid/late game bookmark?</h3>
<p>First, there's lack of flavor. In a game like Crusader Kings 2, every start date has different characters, and many historical dynasties are only available some of the time. In Europa Universalis IV countries are mostly the same, even if their borders change. And if a player would like to play a country that didn't exist in 1444 like Prussia, Persia, Spain, or Commonwealth, it's usually possible to form it, and at least for historical countries, formation is usually very easy.</p>
<p>There are some rare exceptions which would be too difficult or take too long to form, like Qing, United States, or Revolutionary France, and occasionally a player might want to play a specific ruler, but it's a very small factor.</p>
<p>So most players would only play late game starts if gameplay was good. So is it?</p>
<h3 id="what-mostly-works">What mostly works</h3>
<p>There are several things in the game that work fairly well, such as province ownership and rulers. Diplomatic relations are also in good shape, although some countries have too many subjects, causing negative diplomatic power gain, but this is only a minor issue.</p>
<p>The cultures and religions are setup reasonably well. There are some questionable choices, but the same can be said about the game in 1444.</p>
<p>Technology and institutions work quite well. Europeans have a significant technology advantage over rest of the world. Arguably it works even better than in a regular game.</p>
<p>Previously, Europa Universalis IV had technology groups, which gave Europeans a historically accurate technology advantage over the rest of the world. However, when the system was replaced with institutions, the spread of institutions became too fast and easy, as did developing them. As a result, the technology gap has almost become nonexistent. <a href="https://www.youtube.com/watch?v=l7mE1JpjVlY">According to a video analysis by Reman's Paradox</a>, the gap peaks at around 2 technologies with the Printing Press and then quickly drops towards zero after Global Trade. This issue has not changed much since the analysis was made.</p>
<p>Paradox is unwilling to address this issue as there is a conflict of perspectives between players who prefer a historically accurate technology (with a significant gap persisting until the end) and players who want an easy game in the Rest of the World (with a minimal gap). There is no way to satisfy both groups.</p>
<p>In any case, starting late means starting with the technology gaps as they were before institutions were introduced, and this is fine.</p>
<p>Goods prices are correct for every start date. Events that happen at specific time to change goods prices are accounted for.</p>
<h3 id="what-doesn-t-work-but-it-doesn-t-matter-much">What doesn't work but it doesn't matter much</h3>
<p>Unfortunately that's where the good parts end. There's a lot of minor things that don't work, but to be fair they're not a huge deal.</p>
<p>There are some easily fixable bugs. Quite a few provinces are missing cores. Qing will reverse-form Manchu, as end game tag check does not apply for such starts. A mod that aims to make the late game playable should take the time to fix these issues.</p>
<p>There are also some undesirable, but understandable behaviors. For example, all Holy Roman Empire countries that historically had a ruler of one religion and population of another, flip their religion in the first month of any late start. It is not clear what the best fix would be.</p>
<p>There are other values that normally increase as game progresses - absolutism, mercantilism, and professionalism.</p>
<p>Absolutism is not adjusted by start date, but it's not too difficult to catch up quickly. It would probably be better if late game starts had some nonzero absolutism.</p>
<p>Mercantilism is not adjusted by start date. This means everyone's trade powers is lower than what it's supposed to be, but trade power only matters relative to other countries' trade power, so it doesn't really affect gameplay much.</p>
<p>Professionalism is adjusted by start date, and the adjustment is quite aggressive, 20% per age. Everyone starting at 60% professionalism is definitely not where it would get to naturally, but it will diverge pretty quickly as the game continues.</p>
<p>The game features monuments, many of which were built after 1444. This is completely unsupported. Every start has the same monuments at same level. For example even 1792 Ottomans start with tier-2 Hagia Sophia and tier-0 Sultan Mehmed Mosque in Constantinople. Interestingly the comments in monuments files imply that a feature to make them pre-built in later start was planned, just never implemented. Fortunately monuments are self-correcting. Mid/late game both money and manpower should be relatively abundant, so monument construction can definitely catch up, at least if the economy was setup properly.</p>
<p>HRE reforms and China reforms are not present in any late game start, and that's probably fine.</p>
<p>Some religions are seriously nerfed. Counter-Reformation isn't present in late game starts, and that hurts Catholicism. Orthodox countries start at 0% Patriarch Authority. However, most religions are fine, and Catholic and Orthodox are some of the strongest religions in game, so arguably this is not a big deal.</p>
<h3 id="what-doesn-t-work-and-messes-up-gameplay">What doesn't work and messes up gameplay</h3>
<p>And now the really awful parts.</p>
<p>Late game scenarios have zero buildings other than forts. This completely destroys any economic balance. In the latest 1792 bookmark, the highest income country is somehow Russia at very meager 150, number not much higher than Ming can get in 1400s. 1792 France spends 54 of its 100 income on fort maintenance alone.</p>
<p>There is almost no trade income. End nodes in 1792 earn 36, 28, and 17 gold respectively, numbers that look low even for 1400s.</p>
<p>But while incomes might look like it's 1444, the expenses do not. A lot of expenses including armies, navies, advisors, forts, and so on, scale with time. So you have worst of both worlds - early game income and late game expenses. With everyone suffering so much, nobody is going to invest in buildings with their very slow return-on-investment time, so the problem will not fix itself.</p>
<p>Lack of buildings affects not just economy, but everything else building provide, like manpower, force limit, governing capacity, and so on.</p>
<p>Government reforms are nonexistent. Even if you start in 1792, you have 0 reforms unlocked. This is quite bad, as there's no way to rush them, and you're normally expected to have a lot of reforms by this time, and quite a few late game features are locked behind government reforms.</p>
<p>There are no estate privileges and every country starts at the same 0% effective crownland as in 1444 - that is about 30% which you all lose by giving away the essentially mandatory mana privileges. This is also quite bad, as crownland is designed to increase slowly.</p>
<p>Countries in late game starts don't get to choose their idea groups - game selects them automatically, and the selections are truly dreadful, with ideas both weak and inappropriate for their countries. You can abandon idea group and pick a new one, but it will only refund 280 of 2800 points. This severely restricts player agency. It would be much better if player was offered a choice of already unlocked idea groups when starting a campaign, or if switching was possible, at least before unpausing.</p>
<h3 id="can-mods-fix-it-">Can mods fix it?</h3>
<p>The most impactful fix would be to add buildings. There is no "historically accurate" way to do this. The most obvious solution would be running a few AI observe games, and just collecting statistics like "by 1650 50% of provinces in Western Europe have Workshops", and adjusting history files accordingly. This wouldn't be anywhere close to what a good player can pull off, but it would at least un-break game economy.</p>
<p>Fixing monuments by events would be fine, but I don't think this is necessary.</p>
<p>For government reforms, there are two solutions. Either give everyone a lot of reform points to spend (in line with what they'd get normally at this point), or increase government reform progress depending on campaign's start date so certain amount of catch up is possible. The downside of this is that a lot of countries can change government type with final reform, so it might lead to a lot of awkward month one flips.</p>
<p>Crownland issue could be solved either by some crownland bonus dependent on start date, or at least by starting with mana privileges, so you start the game in neutral territory. I don't see any obvious way to accelerate crownland gain. For example reducing seize land timer in later starts would be an interesting way to offer catch up, but it seems to be hardcoded.</p>
<p>With idea groups it's obvious what we want - for the player to be able to choose idea groups they start with, and have them already unlocked. But I'm not sure how that would be implemented. We can't even just full refund, as it would go well over mana cap, and it wouldn't be possible to change to idea group from different type this way. There are some messy solutions, most involving making idea groups nearly free before unpausing.</p>
<h3 id="summary-of-fixes">Summary of fixes</h3>
<p>A mod to make late game bookmarks playable should attempt to do the following:</p>
<ul>
<li>fix obvious bugs like missing cores</li>
<li>add buildings to match what AI would typically build at given time in given location</li>
<li>add government reform progress, either upfront, or by faster growth</li>
<li>fix crownland, either by increased starting crownland, or by starting with mana privileges</li>
<li>figure out some ways to let player choose idea groups</li>
</ul>
<p>And with this, late game EU4 starts could be quite decent.</p>
<p>Of course someone would now need to make such a mod, and some of these can be quite challenging to do right.</p>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-58279021573006085452023-01-16T20:18:00.005+01:002023-04-05T11:07:45.517+02:00How to configure OSX 13.1 Ventura for software development<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzCNQZoB9VJ9T4Jv99OSbdjpc4HMzcV9qaSc0IqA29gZpiKPKxH2PRL-KQCFX_j2yAjjxkSrsSddyXMcguRcai34E16kYCAV2hIbm9M-GFm_Gaeq_-w37soyDwauKS1lCZeOi9nA/s3464/wilma_kitten4_by_julochka_from_flickr_cc-nc.jpg" style="margin-left: 1em; margin-right: 1em;" title="wilma kitten-4 by julochka from flickr (CC-NC)"><img alt="wilma kitten-4 by julochka from flickr (CC-NC)" border="0" data-original-height="2301" data-original-width="3464" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzCNQZoB9VJ9T4Jv99OSbdjpc4HMzcV9qaSc0IqA29gZpiKPKxH2PRL-KQCFX_j2yAjjxkSrsSddyXMcguRcai34E16kYCAV2hIbm9M-GFm_Gaeq_-w37soyDwauKS1lCZeOi9nA/w640-h426/wilma_kitten4_by_julochka_from_flickr_cc-nc.jpg" width="640" /></a></div><p>With every new Macbook, I'm updating the guide, <a href="https://t-a-w.blogspot.com/2021/05/how-to-configure-osx-114-big-sur-for.html">previous version is here</a>.</p><p>Things didn't change too much from the previous version. The main difference is that because new Macbooks use Apple Silicon and that causes endless issues, it's pretty much mandatory to install Docker.</p><div><h3>Basics</h3><ul><li>Go to Settings > Privacy & Security > FileVault, turn on FileVault. Do not use iCloud for recovery, just note your recovery key somewhere. This used to require computer restart, but it just works now.</li><li>Install some sensible browser like <a href="https://www.google.com/chrome/browser/">Chrome</a> or <a href="https://www.mozilla.org/firefox/">Firefox</a>.</li><li>Afterwards either sign up into your account on which you hopefully have your ad blocker setup, or install some. Most popular seems to be <a href="https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm?hl=en">uBlock Origin</a> these days, but pretty much any of them will do just fine.</li><li>Install <a href="http://iterm2.com/">iTerm2</a> for sensible terminal emulator. If you start it, it will also prompt you to install XCode Command Line Tools, which you'll definitely need, so do it now.</li><li>Install whichever cloud sync service you're using like <a href="https://www.blogger.com/install%20https://www.dropbox.com/">Dropbox</a> etc. And start syncing your stuff.</li><li>Clean up all crap from dock. Other than Launchpad and System Settings, everything else should be gone. Add iTerm2, your browser, and your text editor, and any application you wish to install there instead of stock Apple crap.</li></ul><div><h3>Editor</h3>Install some sensible text editor. These days most people use <a href="https://code.visualstudio.com/">Visual Studio Code</a>. If you do, go to Options, search "Telemetry" and disable it all.<br /><br />If that's your choice, run it, <a href="https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line">open Command Palette, and choose: "Shell Command: Install 'code' command in PATH"</a>.</div></div><div><h3>Settings</h3><span style="font-family: "times";">Like every other operating system, OSX has a lot of bad default settings. Here are some obvious fixes:</span><br /><ul></ul></div><div><ul style="text-align: left;"><li>If you have multiple monitor setup, go to Settings > Display > Arrangement and drag and drop them into correct arrangement so mouse can move between them correctly. To make Spaces work correctly, you'll also need to set your external monitor to be the main one by drag and dropping menu bar to it.</li><li>You might need to do it twice - with laptop screen open, and with laptop screen closed.</li><li>Also set up which will be your main monitor by dragging that white bar on top of the display icon to it. This looks like Menu placement, but it really mostly controls Dock placement.</li><li>Settings > Appearance > Dark. If you're setting up a new laptop, this will be asked during installation.</li><li>Settings > Keyboard > Key Repeat > Fast (max is correct)</li><li>Settings > Keyboard > Delay Until Repeat > Short (max is correct)</li><li>Settings > Keyboard > Disable keyboard brightness completely. Defaults (slow keyboard, highlight keys) are meant for people who are bad at typing. If this somehow applies to you, get some typing lessons, you can save huge amount of time by getting better at typing.</li><li>Settings > Keyboard > Text Input > Edit ... > Disable "Add full stop with double-space" - this one really messes up coding</li><li>Settings > Trackpad > Scroll & Zoom > Disable "Natural scrolling". This will also apply to the mouse, restoring correct direction.</li><li>Settings > Sound > Disable "Play sound on startup"</li><li>Settings > Sound > Disable "Play user interface sound effects"</li><li>Settings > Sound > Alert volume > 0% (for Terminal ping)</li><li>Settings > Desktop & Dock > enable "Automatically hide and show the Dock"</li><li>Settings > Desktop & Dock > disable "Automatically rearrange Spaces based on most recent use"</li><li>Settings > Displays > Max out brightness</li><li>Settings > Displays > Turn off "Automatically adjust brightness"</li><li>Settings > Displays > Turn off "True Tone"</li><li>Settings > Control Center > Battery > Enable "Show Percentage"</li><li>Settings > Control Center > Clock > Clock Options > Use a 24-hour clock. This might be already on based on your regional choices during installation.</li><li>Settings > Mouse > increase scrolling speed and tracking speed a bit</li><li>Settings > Lock Screen > Start Screen Saver when inactive > Never. You should generally be doing it yourself, and you often need to leave the laptop running upgrades or unit tests or such, and you want to be able to see the status without constantly poking it.</li><li>Settings > Lock Screen > Require password after screen saver begins or display is turned off > After 5 minutes. You can move it down to 1 minute if you use your laptop in public. I don't recommend Immediately, as that causes endless annoyance with connecting and disconnecting external monitors and just moving laptop around requiring new password.</li><li>Settings > Sharing > Remote Login > Turn on</li><li>Settings > Sharing > Remote Login > (i icon) > All Users</li><li>Settings > Sharing > Remote Login > (i icon) > Allow full disk access for remote users</li><li>iTerm > Preferences... > Profiles > Terminal > Unlimited Scrollback</li></ul><div>Press Ctrl-Up arrow, add a few desktops (or "spaces" as they were used to know), then go to Settings > Keyboard > Keyboard Shortcuts > Mission Control - and enable their keyboard shortcuts Ctrl-1 to Ctrl-6 or however many you have there. Sometimes I've seen shortcuts for extra desktops not being there, and in such case I just restarted, and the problem fixed itself.<br /></div></div><div><br /></div><div><div>Open Screenshot app, choose options, then:</div><div><ul style="text-align: left;"><li>disable "Show Floating Thumbnail"</li><li>Save to > Other Location... choose "Downloads" folder</li></ul><div><h3>Drivers</h3>OSX already includes drivers for laptop itself, but you might need some for peripheral hardware.<br /><br />In particular, external PC keyboard need a tweak to work properly, as left and left Windows keys are in reverse order from Mac keyboard.<br /><br />Go to Settings, Keyboard, Modifier Keys..., choose the right keyboard from the dropdown (strangely I had ordinary wireless mouse selected by default), and swap positions of Option and Command keys. Feel free to change functionality of Caps Lock key as well, it's a huge easily accessible key with no useful function people love to remap, usually to extra Control.</div><div><br /></div><div>New Macbooks now come with Fn/Globe key. You probably don't need i to change your keyboard layout so feel free to use it for emoji keyboard or something like that.<br /><br />If you need <a href="http://t-a-w.blogspot.com/2012/05/polish-dvorak-keyboard-layout-for-osx.html">any special keyboard layouts</a>, get them too.</div></div></div><div><br /></div><div>Another thing - when you plug in external keyboard, you'll get choose keyboard type dialog. It will likely choose the wrong type. Just pick ANSI, whatever it claims to detect. Otherwise the backtick key will be wrong.</div><div><br /></div><div>Home/End keys on OSX are also broken. <a href="https://damieng.com/blog/2015/04/24/make-home-end-keys-behave-like-windows-on-mac-os-x">Use this as a fix</a>. You'll need to log out and log back in for it to take effect.</div><div><div><h3>Development tools</h3></div><div>You'll need a package manager, and the only one anyone uses is <a href="http://brew.sh/">homebrew</a>, MacPorts and the rest died long time ago. You need to tell <tt>homebrew</tt> to not spy on you with <tt>brew analytics off</tt> command.<br /><br />You'll need <a href="https://itunes.apple.com/us/app/xcode/id497799835%3C/p%3E%3Cp%3E">Xcode</a>. Fortunately iTerm does it for you automatically, and if not homebrew will. If you need to do it manually for some reason, you can install Xcode manually by running <tt>xcode-select --install</tt> from command line.</div></div><h3>Deal with stupid access popups</h3><div>New in Big Sur, first time you access some folders from terminal, you get a stupid popup asking you to confirm that you're indeed fine with terminal accessing various folders. So run:</div><div><tt><br /></tt></div><div><tt> find .</tt></div><div><br /></div><div>and confirm all those stupid popups to be done with it once and for all. Well, except you'll still have them when accessing USB drives and such. </div><div><br /></div><div>And just to be extra sure, go to Settings > Privacy & Security > Full Disk Access, and add iTerm there.</div><div><h3>Create new SSH key pair</h3>Before you do that, name your computer something memorable with <tt>sudo scutil --set HostName your_host_name</tt> command. You probably go through a lot of laptops, so names like "Name's Macbook" are completely useless to you. Just pick a theme like cats or dinosaurs or whatnot, and give every computer a distinct nam<br /><br />Open Terminal and run <tt>ssh-keygen</tt> to create <tt>~/.ssh/id_rsa</tt>, then upload the generated key to any place that needs to know about it like <a href="https://github.com/settings/ssh">github</a>, <a href="https://bitbucket.org/account/user/t_a_w/ssh-keys/">bitbucket</a>, or whatever else you use.</div><div><br /></div><div>Alternatively you could copy your keys from your old laptop, but it's generally more secure to have separate fresh keys for each machine.</div><div><h3>Checkout your dotfiles</h3>Hopefully you're storing your dotfiles somewhere. If it's a git repository, or your Dropbox account, get them now and symlink them all properly.<br /><br />If there are <a href="https://github.com/taw/unix-utilities">any other repositories you might need</a>, checkout them too.</div><div><div><h3>Standard paths</h3>OSX renames a lot of directories. The most annoying of those is that instead of <code>/home</code> it has <code>/Users</code>. It used to be very easy to add a symlink, but this kept getting more and more complicated, so I stopped doing this.</div><div><h3>Install homebrew packages</h3>Your list might vary. Here's a few obvious suggestions:<br /><br /><code>brew install rbenv ruby-build mc wget p7zip trash git htop bash zsh youtube-dl jq imagemagick coreutils bash-completion zsh-completion nodeenv</code><br /><br />Then enable all services you installed, unless you want to start them manually:<br /><br /> <tt>ln -sfv /usr/local/opt/*/*.plist ~/Library/LaunchAgents/</tt><br /><br />And install non-system ruby, so you can install gems without sudo. Currently latest is:<br /><br /> <tt>rbenv install 3.1.3</tt><br /> <tt>rbenv global 3.1.3</tt><br /><br />To make that actually work, you need to make sure <tt>~/.rbenv/shims</tt> is in your <tt>$PATH</tt>. If you type <code>rbenv init</code>, it will tell you what to do.</div><div><br /></div><div>There's also asdf that offers this kind of service for all languages, if you want to use it instead of rubenv/nodenv/etc. I don't recommend rvm, I've seen it cause too many issues in the past.<br /><br />Due to OSX limitations you'll need to run <tt>sudo htop</tt> if you want to use <tt>htop</tt>.</div><div><h3>Install gems</h3>Again, your list my vary. These days most of the software will have its own <code>Gemfile</code> so long list of gems are generally unnecessary. But some global utilities are still useful:<br /><br /><tt>gem install bundler rak pry pry-rescue</tt></div><div><tt><h3 style="font-family: "Times New Roman";">Different Shell</h3><span style="font-family: "Times New Roman";">OSX switched from ridiculously outdated bash to up to date zsh, so it's no longer a mandatory step.</span></tt></div><div><tt><span style="font-family: "Times New Roman";"><br /></span></tt></div><div><tt><span style="font-family: "Times New Roman";">If you want to use system zsh, it's fine.</span></tt></div><div><tt><span style="font-family: "Times New Roman";"><br /></span></tt></div><div><tt><span style="font-family: "Times New Roman";">If you want to install something else, like proper bash (or brew version of zsh; or something else), first <code>brew install bash</code>.</span></tt></div><div><tt><br style="font-family: "Times New Roman";" /><span style="font-family: "Times New Roman";">You'll need to edit </span><span style="font-family: monospace;">/etc/shells </span><span style="font-family: "Times New Roman";">as admin and add the following lines at the end of it to enable your newly installed shell:</span><br style="font-family: "Times New Roman";" /><tt>/usr/local/bin/bash</tt><br style="font-family: "Times New Roman";" /><tt>/usr/local/bin/zsh</tt><br style="font-family: "Times New Roman";" /><br style="font-family: "Times New Roman";" /><span style="font-family: "Times New Roman";">Then set it as your shell, with whichever one you prefer:</span><br style="font-family: "Times New Roman";" /><tt><span style="font-family: "times";"> </span>chsh -s /usr/local/bin/bash $USER</tt><br style="font-family: "Times New Roman";" /><tt><span style="font-family: "times";"> </span>chsh -s /usr/local/bin/zsh $USER</tt><br style="font-family: "Times New Roman";" /></tt><h3 style="text-align: left;"><tt><span style="font-family: "Times New Roman";">Hushlogin</span></tt></h3></div><div><tt><span style="font-family: "Times New Roman";">For some reason OSX prints </span><span style="font-family: "Times New Roman";">worthless annoying messages on every open terminal tab. </span></tt>Run to <tt>touch ~/.hushlogin</tt> to prevent that.</div><div><h3>Coreutils</h3>This is optional step. OSX coreutils are generally a lot worse than GNU versions you might be used to from Linux. However switching means occasional minor incompatibilities, so it's up to you if you want to do it or not.<br /><br />If you want to do so, <code>brew install coreutils</code>, then add GNU coreutils to your <tt>PATH</tt>:<br /><br /> <tt>export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"</tt><br /> <tt>export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"</tt></div><div><br /></div><div>OSX coreutils are not as bad as they used to (for example <code>cp -a</code> now works), so this step can be skipped.</div><div><h3>Better window manager controls</h3><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";">Sadly OSX window manager is extremely dubious for keyboard use. Fortunately programs to make it usable exist. Unfortunately there's a lot of churn among those programs, and every couple of years the ones I use become unmaintained and need to be replaced by something else.</span></div></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";"><br /></span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";">Currently I recommend:</span></div><div><ul style="text-align: left;"><li><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";"><a href="https://github.com/rxhanson/Rectangle">Rectangle</a> - for moving windows around on big screens - I don't really like the default keybindings, so I change them to Cmd-Control-Option with 1,2,3,4 for corners, arrows for halves, and M for maximize and get rid of the rest. Also set Repeated commands to "cycle through displays".</span></li><li><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";"><a href="https://alt-tab-macos.netlify.app/">AltTab</a> - </span>for switching between windows - it's baffling that OSX completely lacks this function - and Cmd-Tab to switch between applications is absolutely inadequate for any application that has more than one window, which is most of them (browsers, editors, terminals etc.) if you're developing software.</li></ul></div><div style="text-align: left;">You'll need to give them necessary access. To do so:<br /><ul><li>Settings > Security & Privacy > Privacy > Allow the apps below to control your computer > enable AltTab and Rectangle</li></ul><div>Also open its preferences, and set it to run in the background, show in menu bar, and start at login.</div></div><div><h3 data-darkreader-inline-color="" style="-webkit-text-stroke-width: 0px; font-family: Times;">Open files limit</h3><div>For some insane reason OSX has default open file limit of only 256, and that breaks a lot of software like databases.</div><div><br /></div><div>You can do it for processes in terminal by putting <code>ulimit -n 100000</code> in your .zshrc, which might be adequate, but not every process runs from the terminal. </div><div><br /></div><div>Enabling it globally gets more and more complicated with every OSX version. <a href="https://apple.stackexchange.com/questions/453050/how-to-increase-global-maxfiles-ulimit-on-osx-13-1-ventura/453070">Instructions for Ventura are here</a>.</div><h3 style="text-align: left;">Lower security settings</h3><div>Unix used to have very simple model where root user could do anything, and that was great for development. OSX keeps adding more and more security restrictions. They are absolutely detrimental to developing software, and of questionable value to regular users - primarily they're Apple's way of slowly turning computer world into something more like iOS world where they can decide who can run what and take 30% tax on everything.</div><div><br /></div><div>You'll need to disable some of them. Most important such setting is this:</div><div><pre>sudo spctl --master-disable</pre></div><div>After you run it and reboot, a lot of software like Ghidra will work properly.</div><div><br /></div><div><a href="https://stackoverflow.com/questions/60908765/mac-osx-using-dtruss">If you want to use dtrace (OSX equivalent of strace), you'll need to follow these more complicated steps to disable SIP first</a>.</div><h3 data-darkreader-inline-color="" style="-webkit-text-stroke-width: 0px; font-family: Times;">Android File Transfer</h3><div>It's honestly embarrassing to both OSX and Android that there's no out-of-the-box way to move files between them either over WiFi or USB cable.</div><div><br /></div><div>There's official Android File Transfer program but it's just awful. <a href="https://openmtp.ganeshrvel.com/">OpenMTP</a> is somewhat less awful, but still not great. If you know of any program that's actually good, definitely let me know.</div><div><br /></div><div>On Linux and Windows <a href="https://github.com/hst125fan/mtpmount">it's possible to mount MTP devices</a>, which is very slow, but still beats OpenMTP. I don't know if it's possible on OSX.</div><h3 data-darkreader-inline-color="" style="-webkit-text-stroke-width: 0px; font-family: Times;">All other software</h3><div>There's a lot of other software you might want. The most obvious one is the <a href="http://www.videolan.org/vlc/index.html">VLC</a> media player.</div><div><br /></div><div>You might also want some kind of Git UI program, like <a href="https://gitup.co/">GitUp</a> (<code>brew install homebrew/cask/gitup</code>).</div><div><br /></div><div>If you want to use SSHFS, the one in homebrew (macfuse and sshfs packages) don't seem to work, so you might want to try <a href="https://osxfuse.github.io/">downloadable versions</a>. First time you try to use it, OSX will block it, so you'll need to go to Settings > Privacy & Security, allow it there, and restart (you'll get popup for that).</div><h3 style="text-align: left;">Docker</h3><div>There's a lot of software that just plain won't run on Apple Silicon, so you'll need Docker. You can either use <a href="https://www.docker.com/products/docker-desktop/">Docker Desktop</a>, or if you have licensing issues with that <a href="https://rancherdesktop.io/">Rancher Desktop</a>. If you use Rancher, set it to Docker compatibility mode.</div><h3>Enjoy</h3>Once you go through this list, and successfully get everything going, I'd recommend modifying it to your liking and reposting your version on your blog. Everybody's needs are different, so guide like this is just a starting point.</div>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-84968960629082220622022-12-20T21:12:00.003+01:002022-12-20T21:12:34.875+01:00Fun and Balance for Europa Universalis IV 1.34<p>Europa Universalis IV is a good game with a lot of minor issues, and the goal of Fun and Balance is to fix such small issues, to provide a "better vanilla" experience.</p>
<p>I created the mod long time ago, and I've been updating it every major patch. As the game changes, so does the mod, and it's been a while since I last documented the full list of what the mod is doing exactly.</p>
<p>I drop features from the mod a lot - usually problem areas are quite obvious to devs as much as to me, so they tend to get addressed eventually, and then my fixes aren't necessary. Occasionally a fix outlives its usefulness, but I've been trying to clean things up if they're not pulling their weight.</p>
<p>The mod doesn't try to affect game difficulty to a significant degree. It used to be somewhat harder than vanilla, but due to recent changes in favor systems, it's probably about even now.</p>
<p>So here's the full list of changes Fun and Balance makes, with their rationale. This is a fairly long list, with more important ones first.</p>
<h3 id="more-diplomatic-relations">More diplomatic relations</h3>
<p>There are +2 base relationships, from 4 to 6. This is probably the most impactful change, and it used to be +4 before base game started adding a lot of ways to increase your relationships like Strong Duchies estate priviledge, and various monuments.</p>
<p>This generally increases difficulty of expanding. AI is very reluctant to go over its limit, so this change dramatically increases density of AI alliances, and makes expansion harder. Not just because there are now 2 more countries to help your target, denser network of alliances makes it a lot harder to fully isolate multiple targets diplomatically, so expansion and coalition management are both considerably harder.</p>
<p>As allies are a lot more important defensively than offensively, this change is a lot less useful for the player, but it enables having long term small vassals, royal marriages, or guarantees without obsessing over diplomatic slot utilization. A lot of options from the base game were very rarely used because of overly low limit.</p>
<p>In recent patch, with curry favors being arguably overpowered, this is less true. 2 extra allies are worth a lot more offensively than they used to. I think it still makes the game harder overall, but less so than it used to.</p>
<h3 id="all-strait-bridges-removed">All strait bridges removed</h3>
<p>Now you'll need transport ships to cross even narrow straits. This makes navies far more important, not something you need just once a game to invade Great Britain.</p>
<p>This surprisingly makest the game a bit harder, as AI is a lot better at dealing with such local transport than with long range invasions. Many scenarios like getting landlocked allies like Austria or Poland to help you fight Ottomans or Denmark, it's not so easy anymore.</p>
<p>I had to leave one, or the game would crash.</p>
<h3 id="eurocentric-institutions">Eurocentric Institutions</h3>
<p>Institutions were an interesting system, but they completely broke the balance between Europe and Rest of the Old World. They spread far too fast, so tech gap between Europe and India, China, or East Africa is near zero, or even goes the wrong way. That means the whole Old World plays pretty much the same way, and there's no threat of European invasion.</p>
<p>So the following changes have been introduced to slow down institution spread:</p>
<ul>
<li>passive spread of institutions ("neighboing province has X", "friendly neighboring province has X", and "X embraced") between neighboring provinces slowed down by half - but all other spread just like before</li>
<li>spread of institutions only happens if previous institution is already present, notably you can't really get Colonialism without getting Renaissance first</li>
<li>Colonialism can only start in Europe, you can still get it as non-European from your CNs</li>
<li>dev pushing for institutions made 20% less effective - this isn't a huge change, but it prevents Korea or Ming from randomly dev pushing all institions. Realistically dev pushing as soon as possible is still optimal strategy for Rest of the Old World.</li>
<li>Harar Jugol tier 1 monument nerfed - it was giving East African every institution for free really early and breaking the system, tiers 2-3 work exactly like before</li>
</ul>
<p>This delays spread of early/mid game institutions and should increase mid-tier tech gap somewhat, from 1-2 to 3-4. Late game none of the institutions are region-locked, so the tech gap will go away eventually, just more slowly.</p>
<p>The mod also reduces ahead of tech penalty from 10%/year to 1%/year. But notably you'll still be paying penalty for not having relevant institution, even if that institution didn't spawn, so realistically you can get techs 1-2 tech ahead of time.</p>
<p>Between these two changes, Europeans can be scary again. But I've also seen AI Delhi exceed AI Commonwealth's tech levels even with institution penalties, so don't expect return to EU3 style tech gap here.</p>
<h3 id="religious-leagues-for-all-christian-denominations">Religious leagues for all Christian denominations</h3>
<p>In vanilla Catholic vs Protestant religious leagues can trigger. The mod adjusts the code so that all Christan denominations can do it. If 4/7 electors follow specific non-Catholic denomination, they can even happen very early, long before the usual time.</p>
<p>In a typical game, Protestant is still the most likely to trigger, with smaller chance of a Reformed league, and very remote chance of a Hussite one. But if you're playig with a custom non-Catholic nations, or specifically trying to spread some other religion like Hussite, Orthodox, Coptic, or Anglican, you can now do it.</p>
<h3 id="more-formable-countries">More formable countries</h3>
<p>Every culture has primary tag, and I made it possible to form most of them, changing your traditions, and missions. Some are not included if there are already obvious regional goals like Bharat, China, Russia etc. AI will also occasionally do this.</p>
<p>There aren't any obviously overpowered choices here, as end game tag formables usually get a lot better traditons and missions than regular countries. You can get a few decet ones, but it's mostly for more roleplaying options.</p>
<p>The "end game tag" check for formable tags is also disabled for the player, but AI playing as end game tag will still not form any other tags.</p>
<h3 id="disabled-anti-player-mechanics">Disabled anti-player mechanics</h3>
<p>EU4 is mostly fair between player and AI, but it has a few baffling mechanics where AI gets to cheat. These are removed.</p>
<p>Naval attrition form being at see, player-only in vanilla, is removed.</p>
<p>Call for Peace, also affecting only the player and never the AI, has no consequences now.</p>
<h3 id="all-coutries-with-capital-in-asia-can-get-mandate-of-heaven">All coutries with capital in Asia can get Mandate of Heaven</h3>
<p>This mostly gives additional options to Muslims and Hindus. Or you could go crazy, move Pope's capital to Jerusalem, and make the Pope be Emperor of China as well.</p>
<h3 id="restore-roman-empire-works-with-subjects">Restore Roman Empire works with subjects</h3>
<p>Restore Roman Empire has extremely long list of provinces it needs, and they needed to be held directly, so a random PU could block you from getting it. Changed the decision so you can use it if (non tributary) subject holds them.</p>
<h3 id="trade-map-changes">Trade map changes</h3>
<p>Vanilla trade map makes it impossible for Asian to benefit from New World trade, just to let Europeans get Philippines. While historically it makes some small sense, it almost never happens in real gameplay - Europeans who colonize Asia get trade through Cape or Alexandria not through Mexico. Reversing direction of Pacific trade lets Asians get trade from New World's West Coast.</p>
<h3 id="casus-belli-changes">Casus Belli changes</h3>
<p>CBs with locked out peace terms have been fixed to allow them. They're mostly useless or extremely niche, in base game. You'll still pay full cost for any such term, same you would without a CB. The biggest effect on the game is that you can declare war on your rival in December 1444 without waiting for fabricated claims and get some (undiscounted) land.</p>
<p>If both you and your subject have religious ideas, you can get CB on a country that your subject borders, but you don't. This doesn't significantly increase your ability to get CBs, as you could usually get one province to border your target, but it reduces bordergore slightly.</p>
<p>Coalition wargoal is defend capital (like it was in early patches), not win battles. Winning battles wargoal in EU4 has a lot of issues, and normally this is fine, but for coalition wars, you can get to situations where you're winning in every objective way, didn't lose a single battle, but your allies accumulated so many tiny battles lost that it would take you decades to convince the coalition to end war, while they can stab hit you every month. This isn't the most common, but it happened enough times that I decided to change it.</p>
<p>As defender in war you get 50% AE discount, instead of vanilla's 25%. EU4 makes being defender awful, as you don't get any CB discounts, so this brings some balance into it. It's still better to be the attacker generally, as you get your choice of CB, and most give decent discounts.</p>
<p>Maximum amount of gold you can get from a peace deal is doubled from 25% of warscore to 50%. This makes it slightly more worthwhile to get something from war when you don't want to take land. It's still far less than what EU3 or early EU4 allowed.</p>
<p>AI insistence on staying in war due to war being too short reduced by 1/3.</p>
<h3 id="power-projection-changes">Power projection changes</h3>
<p>I'd love to replace rival system completely, so that any Great Power can rival any other Great Power within range. Usually you get very limited choice of rivals beyond very early game. Sadly this is not possible, the rival system is nearly hardcoded.</p>
<p>The mod increases max distance for rival by 1/3, which seems to be the right number to give some flexibility without too many weird rivalries.</p>
<p>Power projection from rival related issues increased somewhat, and decaying more slowly, mostly to avoid nonsensical situations where you're too strong to get any power projection, as game won't let you pick rivals. I'd much rather fix rival selection, but that's not possible to mod.</p>
<h3 id="subject-and-opinion-changes">Subject and opinion changes</h3>
<p>Max hard cap of dev for diplovassalizing increased from 100 to 300. You'll still need a lot of factors to get anywhere close to that number.</p>
<p>Opinion penalty for annexing vassals capped at -100. In base game it could build up to ridiculous numbers if one of vassals was impossible to annex for some reason while others kept getting annexed over longer time. It was always possible to reset it to 0 by not annexing vassals for 20 years, but tracking exact date is just awkward as game does not show it anywhere. Capping it improves gameplay.</p>
<p>Supporting independence gives bigger relation boost, can be done from lower starting opinion, and AI doesn't care as much about having too many relations when it can support independence. All this modestly increases independence support.</p>
<p>Colonial Nations now consider their own power (as well as that of their supporters) for liberty desire, but to balance it out gets -25% base liberty desire. In base game supporting independence of a colonial nation does not increase liberty desire at all. This overall makes holding onto colonial nations as a very weak colonizer harder, most commonly Portugal might struggle with it, if it loses its army in war and its rivals support CN's independence. But it's still a modest factor.</p>
<p>Quite a few vastly excessive opinion penalties got reduced to sensible levels.</p>
<p>Unlawful HRE territory is capped at -50 to prevent spam. Violating treaty of Tordesillas is capped at -50.</p>
<p>Pirated us cap changed from -100 to -25. It really made no sense that countries would be more bothered by some minor piracy than by declaring war on them and occupying all their land, and it interfered with diplomacy as AI just loves spamming piracy. Converted our culture penalty cut from -30 to -5 and capped at -100.</p>
<h3 id="more-building-slots">More building slots</h3>
<p>Building limit increased by +1 base, and from +1 per 10dev to +1 per 5dev.</p>
<p>This was much more aggressive previously, but I toned it down once game made Courthouses not take building slots, effectively giving every province +1 slot.</p>
<p>Extra slots mostly allow a bit more flexibility with buildings, and they benefit smaller richer countries more. Especially AI as it's bad at using its slots well. Big poor countries which can't fill their slots benefit from it the least.</p>
<h3 id="unlock-regional-features">Unlock regional features</h3>
<p>The mod lets everyone claim whole areas, not just individual provinces. It was locked to Russia in base game. I originally wanted to make it available at empire tier only, but last time I checked that didn't work without making separate empire versions of every government reform. In any case, this mostly reduces border gore, and saves you a modest amount of diplomatic power early game.</p>
<p>Catholic Holy orders are unlocked so all Catholic can use them, not just Iberians.</p>
<h3 id="covert-actions-changes">Covert actions changes</h3>
<p>Covert actions are massively underpowered, so they're buffed across the board.</p>
<p>Stealing maps cost reduced 50 to 20. Infiltrate administration cost 40 to 20. Agitate for liberty cost 90 to 50. Slander merchants cost from 70 to 20.</p>
<p>Agitate for liberty and infiltrate administration unlocked without requiring any tech.</p>
<p>Supporting rebels made significantly cheaper and more effective.</p>
<p>Even with all this aggressive buffs, none of these are particularly strong.</p>
<h3 id="custom-nation-tweaks">Custom nation tweaks</h3>
<p>Max tier of ideas increased from 4 to 10, at costs following the curve, so you'll spend a lot of points on high tiers.</p>
<p>Penalty for max ideas from same group removed, as it's mostly for roleplaying.</p>
<p>Max distance between provinces increased from 400 to 1000, again for roleplaying.</p>
<p>Base monarch skill changed from 2/2/2 to 3/3/3, which is actual average.</p>
<h3 id="religious-rebels-changes">Religious rebels changes</h3>
<p>Religious rebels increased in priority, so a province with missionary is likely to spawn religious rebels, even if other kinds are also possible. They also always want to convert your country, even Pagan rebels, and province targetting weights changed to be more interested in going after provinces they can convert or provinces with a missionary.</p>
<h3 id="religious-shift-decision">Religious Shift Decision</h3>
<p>If your capital has a different religion, you can pay 3 stability to shift to that religion, similar to CK2. AI will not use this.</p>
<p>This is an alternative to the very frustrating experience of hoping that religious rebels will do what you want - but if you can use rebels, that's a way to get free conversions and not lose stability.</p>
<h3 id="balkan-changes">Balkan Changes</h3>
<p>Europa Universalis IV makes a lot of highly questionable decisions for Balkans, trying to railroad Ottomans as end game boss, at expense of making a lot of things nonsensical. Ottomans do not need any help, they'll be end game boss even if we fix things.</p>
<p>Ahistorical "Byzantium" renamed to "East Rome". It is also primary tag for Greek culture. Concept of "Greece" as a country is an invention from 1800s', Greek-speaking Romans saw themselves as Romans well into EU4's end game. It's also possible to form it as Romania, Ottomans, or HRE, if you're Greek Orthodox.</p>
<p>Turkish moved to its own culture group.</p>
<p>"Carpathian" culture group removed. Slovak moved to West Slavic, as it was really nonsensical that it was a different culture group from Czech. The rest merged with South Slavic into "Balkan" culture group. Notably Greek is still not in it, and I'm wondering if it should (together with two micro-cultures in its group).</p>
<p>Ottoman decision to move capital to Constantinople does not do free culture and religion conversion.</p>
<h3 id="you-can-declare-wars-in-regency">You can declare wars in regency</h3>
<p>This was a pointless restriction nobody needs.</p>
<h3 id="improved-bad-idea-groups">Improved bad idea groups</h3>
<p>Some idea groups - notably Naval and Maritime - are just awful, so I tried to improve them somewhat.</p>
<p>The mod used to give Naval extra leader slot so it can recruit some admirals, but game changed its mind and increased leader slots to such high numbers you'll never need more, especially not admirals.</p>
<p>It still gives Maritime +1 merchant and +50% light ship trade power. To be honest, it's still so low tier I'm not sure anyone would take it even with the buff.</p>
<h3 id="war-exhaustion-changes">War Exhaustion changes</h3>
<p>In vanilla War Exhaustion is largely just a tax on diplomatic power. The mod changes it so cost to reduce it is doubled if you're at war. Originally I disabled it completely, but sometimes you get stuck at long term fake war due to your allies, and I didn't want you to be stuck with big war exhaustion in such case.</p>
<p>War Exhastion gets reduced at peace twice as fast. It also convinces AI to peace out twice as much.</p>
<h3 id="other-changes">Other changes</h3>
<p>Tradition from battles doubled, so it's influenced somewhat more by actually fighting or not, and somewhat less by forts and idea choices.</p>
<p>Costs to change culture, move capital, or move main trade port halved, as they were all seriously excessive. In a typical game you'll not use any of these features.</p>
<p>Limit of idea groups from same category removed, but that's already an option when you start a new campaign.</p>
<h3 id="you-can-customize-it">You can customize it</h3>
<p>If you want to customize your experience, I tried to keep different changes separate, so you can adjust or delete any tweaks.</p>
<p>Overall the mod isn't trying to make it a completely different game, just a better version of what it could be.</p>
<p>I play about one campaign per major patch, plus run a lot of AI simulations to see if the changes work as intended. But it's definitely possible that some of the changes have serious side effects. If you play Fun and Balance, and have issues with either fun or balance, let me know.</p>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-69753498399873609922022-05-06T01:36:00.002+02:002022-05-06T01:36:28.459+02:00Chinese Lockdowns<p>A few weeks ago I wrote <a href="https://t-a-w.blogspot.com/2022/03/pandemic-retrospective.html">Pandemic Retrospective</a>. Events since then pretty much confirmed everything I wrote.</p><p>The West got over covid. It's still there, but old people are overwhelmingly vaccinated, so nobody cares.</p><p>Meanwhile, China is doing its best to implement Zero Covid policy. OK, so here's what I wrote back then:</p><p><i>There's also an interesting idea for stage 1, to totally close not just countries but each city and region, and wait for covid to disappear there, before reopening only borders between covid-free areas. But this would only work if external country borders were closed as well, and it would be extremely disruptive. China sort of did that initially, but nobody else really tried that at all.</i></p><p>And what China did <a href="https://en.wikipedia.org/wiki/2022_Shanghai_COVID-19_outbreak">5 days after I wrote that post</a>? Literally what I said, on a much larger scale than in 2020.</p><p>Chinese lockdown is based on setting up borders. Not just external borders, and just borders outside cities, but borders between districts inside cities. It's extreme borders more than extreme lockdowns.</p><p>Instead of closing factories, China converts them to a closed system, where workers live in their workplace, so they don't need to cross internal borders. That's something Europe never considered, travel was open for "essential workers" which were a huge chunk of the population, far too great for covid to be possible to contain.</p><p>It's unclear if this will be enough to achieve Zero Covid - so far the signs aren't too great, but let's imagine they do. Whichever way it goes, one thing it proves beyond any doubt is that European approach - late severe lockdowns without corresponding external or internal hard borders - didn't have the slightest chance of ever working. European style lockdowns were completely 100% counterproductive.</p><p>And since I'm in a prophetic mood, Ukraine will destroy Crimea Bridge.</p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com1tag:blogger.com,1999:blog-27488238.post-65022361960305458492022-03-29T17:17:00.000+02:002022-03-29T17:17:03.783+02:00Russia is Doomed<p><em>I drafted this post last year, with this exact title, but I ended up writing the 100 Programming Languages Speedrun instead, and didn't have time to finish it. I'm feeling a bit silly now. Anyway, nothing here is in any way related to the Russian invasion of Ukraine, so just imagine that this was posted before all that.</em></p>
<p>Russia is a regional power like Italy, Turkey, Brazil, or Saudi Arabia, LARPing as a superpower. It's baffling that people actually buy that, and think that Russia is some kind of a global superpower like US or China.</p>
<p>If you look at GDP or population, Russia is really unimportant. Projected population growth for Russia looks even more miserable than for the West, and their economic growth potential is very poor if you exclude two sectors.</p>
<p>Now Russia has two important things going for it, but here's why both will end soon.</p>
<h3 id="fossil-fuel-exports">Fossil fuel exports</h3>
<p>Russia's biggest strength is its fossil fuel exports. <a href="https://oec.world/en/profile/country/rus">If you look at export statistics</a>, they constitute about 50% of all of Russia's exports. Exact number varies year to year based on their prices. <a href="https://theweek.com/speedreads/456437/john-mccain-russia-gas-station-masquerading-country">Russia has been called "gas station masquerading as a country" for a good reason</a>.</p>
<p>This is not sustainable. I despise virtue signaling over climate, but regardless of that, renewables technology is ceaselessly advancing. We already reached the point where renewables, with reasonable subsidies, are almost competitive with fossil fuels for electricity generation during good parts of the day. The main problems are intermittency of renewables, use of fossil fuels for transportation, and cost of switching all the existing infrastructure.</p>
<p><a href="https://about.bnef.com/blog/battery-pack-prices-fall-to-an-average-of-132-kwh-but-rising-commodity-prices-start-to-bite/">The first two can be solved by cheap batteries, and battery cost fell about 90% over the last decade</a>, with little reason that this will stop. And given enough time and money, existing infrastructure will get replaced.</p>
<p>Full replacement of fossil fuels will take many decades, but this is not a growth sector. And Russia has nothing to replace it with. Other raw natural resources bring a small fraction of that money.</p>
<h3 id="green-useful-idiot">Green useful idiot</h3>
<p>One thing Russia succeeded in doing, <a href="https://www.theguardian.com/environment/2014/jun/19/russia-secretly-working-with-environmentalists-to-oppose-fracking">is funding "environmentalist" group that oppose European energy independence</a>. Europe could have been far closer to energy independence already if it proceeded with fracking, nuclear, clean coal, and other technologies, <a href="https://en.wikipedia.org/wiki/United_States_energy_independence">just as US have done</a>. <a href="https://en.wikipedia.org/wiki/United_States_energy_independence#/media/File:US_Net_Gas_Imports.svg">It took US twenty years from being in just as deep shit as Europe to being a net energy exporter</a>. All it took was political will.</p>
<p>However "environmentalist" groups, some receiving substantial Russian funding, <a href="https://en.wikipedia.org/wiki/Useful_idiot">others being Putin's useful idiots</a>, managed to prevent European energy independence, and made Europe more dependent on imports from Russia for the time being.</p>
<p><a href="https://en.wikipedia.org/wiki/Gerhard_Schr%C3%B6der">Also did I mention recently that this guy should hang from a lamp post for treason</a>, and it's a disgrace to his whole country <a href="https://en.wikipedia.org/wiki/Death_of_Benito_Mussolini">that nobody hanged him from a lamp post or other suitable object yet</a>?</p>
<p>Anyway, while this has been extremely successful Russian subversion of democratic countries, in the long term it won't matter, as it will be possible for just about any country to just buy enough batteries, solar panels, and EVs to gain energy independence.</p>
<h3 id="weapon-exports">Weapon exports</h3>
<p>The second thing Russia has going for them are their exports of military equipment.</p>
<p>Russia is targetting mid-tier market. Their equipment is much worse than top-tier exports from the US, but it's a lot cheaper, and still a lot better than low-tier weaponry poorer countries can manufacture locally.</p>
<p>This is going to unravel really quickly, much faster than energy exports. The reason is China. China has been trying to build weapon export industry, and there's nothing that could possibly stop them from succeeding.</p>
<p>Chinese industry outproduces Russian industry 20:1 and the gap is growing every year, China has amazing track record at going from low-tier to mid-tier in any key industry it wants. That's what happened to far more competitive low-tier and mid-tier smarphone market over just a few years. The high end is safe - be that Apple and Samsung or US and other NATO military equipment. And countries can do their own low-tier basic stuff like rifles if they really want to. But China is amazing at going after the whole global mid-tier market.</p>
<p>I don't know why nobody talks about this, but it's pretty much guaranteed that the same will happen with Russian weapons exports. China will dominate this. And other mid-tier competitors like Turkey are also trying to break into this market, all at Russia's expense.</p>
<h3 id="why-military-exports-matter-">Why military exports matter?</h3>
<p>Weapons exports are not a huge money maker for Russia. Overall global weapons trade is about $100bln a year, just 0.5% of $20,000bln a year global trade.</p>
<p>This is important to Russia for two reasons. First is that modern weapon development is horrendously expensive. Spending all that R&D money and your own military being the only buyer, translates to enormous unit cost. Even US can just barely get away with it, and <a href="https://en.wikipedia.org/wiki/Lockheed_Martin_F-22_Raptor">non-exportable F-22</a> was in retrospect a huge mistake, compared with <a href="https://en.wikipedia.org/wiki/Lockheed_Martin_F-35_Lightning_II#Operators">exportable F-35</a>.</p>
<p>Russia is just far too small a country to even attempt creating any modern non-exportable weapon systems.</p>
<p>The second reason is that weapon exports give Russia a lot of political influence among world's poorer countries. It's hard to criticize what Russia is doing, after your minister of defense took Russian bribes to get them to win the contracts, and now your air force is now made of Russian planes, and Russia is the only source of spare parts.</p>
<p>This is not going to last. Oven the next few years Chinese offers will be better, cheaper, and for most countries less politically toxic, than Russia's.</p>
<p>There will be some markets left, like India might be unwilling to buy from China, and too corrupt to buy from the West (which is far less willing to engage in outright corruption necessary to win military contracts), and too poor for high-end gear anyway, so they might still buy worse Russian jets over better Chinese ones. But overall, this part of Russian economy will collapse even faster than their energy exports.</p>
<h3 id="postscript">Postscript</h3>
<p>As it turns out, I was late with this post. Europe is now scrambling to reduce their exposure to Russian fossil fuels, and Russian weaponry turned out to be a lot worse than advertised, so both sectors might collapse a lot sooner than I thought.</p>
<p>By my original guesstimated times for these, Russian energy sector would go into serious decline in 2030-2040 kind of range, but their weapon exports likely as soon as 2025-2030, while Chinese weapon exports would skyrocket just like their smartphone exports did.</p>
<p>People are now willing to talk about Russian fossil fuels, so that take isn't all that hot anymore. However, I haven't heard a single other person even entertaining the second point of the inevitably coming Chinese (and surprisingly Turkish) competition crushing Russian weapons exports.</p>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com1tag:blogger.com,1999:blog-27488238.post-91252241438645724122022-03-23T14:49:00.001+01:002022-03-23T14:49:20.012+01:00Pandemic Retrospective<p>There won't be anything too controversial here, just a bit of big picture view.</p>
<h3 id="basics">Basics</h3>
<p>Covid-19 is not over, and there's no indication that it will ever be eradicated, there are just a lot more important things going on right now.</p>
<p>So far the only established human disease we managed to eradicate was <a href="https://en.wikipedia.org/wiki/History_of_smallpox">smallpox</a>. <a href="https://en.wikipedia.org/wiki/Polio_eradication">Polio eradication</a> efforts have largely stalled, with little progress since year 2000. I still have some hopes that we'll win over polio, but the chance of total elimination of covid-19 in any realistic timeframe is essentially zero.</p>
<p>The most outcome is that covid will be just another seasonal disease like the flu, with us for the long run. This is mostly fine, as going forward, most people will get exposed to mild infection when they're young, and by the time they're old and vulnerable, they'll have some degree of immunity, from some combination of previous infections and vaccines.</p>
<p>Age is the main risk factor, far greater than anything else. <a href="https://www.gov.uk/government/publications/covid-19-reported-sars-cov-2-deaths-in-england/covid-19-confirmed-deaths-in-england-report">Every extra 20 years means 10x higher death rate</a>, or in other words every additional year of your life is extra 12% risk of death if infected.</p>
<p>This is a good way to put things in perspective. For example according to the few RCTs we have, masking (with a real medical mask) may offer about 10%-20% reduction in infection chance, with no reduction in severity of symptoms in case of infection. So you're about as vulnerable masked in 2022 as you'd be unmasked in 2021, just because you aged enough to counter all that benefit. And "masking" with non-medical mask doesn't seem to do anything at all.</p>
<p>Vaccination with regular boosters may reduce risk of death by about 80%-ish, equivalent to being about 15 years younger. So a fully vaccinated and boosted 40 year old is at about as much a risk as completely unvaccinated 25 year old. There doesn't seem to be much reduction in chance of getting infection in the first place, mostly reduced severity.</p>
<p>It's often underestimated just how much covid is a single-risk-factor disease, that factor being age. <a href="https://nutrition.bmj.com/content/early/2022/01/18/bmjnph-2021-000375">For example obesity increases risk of covid death by 25%</a>. So 40 year old obese person is at as much risk as 42 year old healthy weight person.</p>
<p>I think it's a useful visualization tools to translate all relative risk factors into equivalent age differences.</p>
<p>Risk of hospitalization and other serious health outcomes roughly follows risk of death, with similar risk increase for every additional year of age.</p>
<h3 id="anti-covid-measures">Anti-Covid Measures</h3>
<p>There are three stages at which we could intervene to prevent covid deaths (and other severe outcomes):</p>
<ol>
<li>prevent pandemic from getting to your country in the first place</li>
<li>reduce spread of infection once there's already community spread</li>
<li>reduce chance of death for an infected person</li>
</ol>
<p>A lot of measures have been taken, but only two have been very highly effective:</p>
<ul>
<li>total border closures (step 1)</li>
<li>vaccinating old people (step 3)</li>
</ul>
<p>Everything else did either nothing, or had minor effect, or was outright counterproductive. These include such measures as:</p>
<ul>
<li>bank account closures</li>
<li>contract tracing</li>
<li>firing people for having different opinion</li>
<li>hand washing</li>
<li>ivermectin</li>
<li>lockdowns</li>
<li>mask mandates</li>
<li>masking</li>
<li>mass event closure</li>
<li>partial border closures</li>
<li>quarantines for travelers</li>
<li>riots</li>
<li>school closures</li>
<li>social media bans</li>
<li>stimulus checks</li>
<li>testing</li>
<li>vaccinating low risk people</li>
<li>vaccine mandates</li>
<li>voluntary masking</li>
<li>work from home</li>
<li>etc.</li>
</ul>
<p>In the end, none of them had a big impact on the death rate. Notably almost all the measures attempted to target stage 2 (reduce infection rate once it's already established), and for covid that was simply the least effective stage to target.</p>
<p>The most unexpected thing about covid is that stage 1 interventions (total border closures) were extremely effective even after covid already got established. The original Wuhan lab leak variant was just not all that infectious, so closing borders and preventing much more infectious subsequent variants from coming in was an extremely successful approach, even in absence of other interventions. Japan is a good example of this combination.</p>
<h3 id="cargo-culting">Cargo Culting</h3>
<p>A huge problem with global pandemic response is that countries threw away all established science, and mindlessly copied what other countries were doing, even if it was completely ineffective. So instead of 200 different policies we could meaningfully compare, it's largely same ineffective policies tried over and over.</p>
<p>Knowing just country age structure, border closures, and vaccination rates among old people, we can fairly accurately estimate pandemic severity, throwing away all other information.</p>
<p>Arguably the main problem with global pandemic response was that everyone was cargo culting part of Chinese response that was pointless (lockdowns), and in a half-assed way that couldn't have possibly worked anyway; and they did not copy the part of Chinese response that actually worked (total border closures).</p>
<h3 id="what-was-not-tried">What Was Not Tried</h3>
<p>In retrospect was can safely say that nothing targetting stage 2 would have worked. Any response strict enough to eradicate transmission after it was well established would just completely crash the economy, and with borders even partially open, covid would get back in anyway. And if you closed the borders, then you didn't need to be that strict in the first place (see Japan again).</p>
<p>At least none of such interventions would work if they targetted general population. We could have absolutely done <a href="https://covidtracking.com/nursing-homes-long-term-care-facilities">crazy strict lockdowns of nursing homes specifically</a>. About a third of all covid deaths in US was in long-term-care facilities, and these are not economically significant. We could have completely isolated them from the rest of the population (food delivery in full body ppe suit kind of isolation), and likely avoided 1/3 of all covid deaths. By moving more old and vulnerable people into similar protected environments, deaths could have been reduced even more.</p>
<p>Nobody really tried that, and there's been overwhelming lack of interest in any interventions that segregated people by risk level. If we did something more along the lines of:</p>
<ul>
<li>no restrictions of any kind on under-30s</li>
<li>some modest risk reduction recommendations for 30-60s (no mass events, work from home recommendations, masking on public transport recommendation etc.)</li>
<li>total lockdown for 60+s</li>
</ul>
<p>That would be far more effective and far less destructive than what actually happened. To repeat the basic fact, 20 years of age difference means 10x risk of death difference. There's no sane way to treat kids and elderly the same, and that's what all countries did.</p>
<p>More idiotically, students were often restricted far more than adults, just because schools have far too much power over students' personal lives. It was cruel, and it did nothing to help with the pandemic.</p>
<p>There's some stage 3 interventions that could have had a meaningful effect, but weren't attempted.</p>
<p>The most notable one that would be mass vitamin D supplementation, as <a href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0263069">pre-infection vitamin D levels correlate very strongly with risk of death</a>, and vitamin D insufficiency has been widespread in most modern populations. For people with most severe deficiency, effect size looks about as big as vaccines, based on observational studies. It would be much smaller averaged over entire population, as not everyone is as severely deficient. Unless you know that your vitamin D levels are adequate, you should absolutely get daily supplement, especially during winter, and not just for covid.</p>
<p>There's also some new antiviral drugs that could reduce risk of death. They happened late in the pandemic, but I guess if someone writes similar retrospective in 2025 they might get added to the list of interventions that made a big difference.</p>
<p>There's also an interesting idea for stage 1, to totally close not just countries but each city and region, and wait for covid to disappear there, before reopening only borders between covid-free areas. But this would only work if external country borders were closed as well, and it would be extremely disruptive. China sort of did that initially, but nobody else really tried that at all.</p>
<h3 id="who-predicted-it-correctly-">Who Predicted It Correctly?</h3>
<p>Nobody at all.</p>
<p>Pre-pandemic expert consensus was very strongly against lockdowns, border closures, masking, and most other measures that ended up happening. Pretty much none of that was followed.</p>
<p>Epidemiologists' models were all universally worthless, and <a href="https://en.wikipedia.org/wiki/Social_psychology#Replication_crisis">the whole field of epidemiology turned out to be about as reliable as social psychology</a>.</p>
<p>Governments were both extremely incompetent and openly lying. The media were even dumber than usual. Social media companies were banning people for saying true things.</p>
<p>I don't think even any individuals got it right. As far as I know, nobody predicted either of these:</p>
<ul>
<li>the initial Wuhan Lab variant was no big deal, the variants were a big deal, so total border closures would be super effective even after Wuhan lab leak variant was already there</li>
<li>vaccines would be developed very quickly, but they'd only offer big redution in severity and risk of death, and wouldn't meaningfully reduce infection rate, so mass vaccinating old people was really important, but any mass mandates are pointless</li>
</ul>
<p>I don't think anything useful came out of prediction markets either.</p>
<h3 id="who-did-well-">Who Did Well?</h3>
<p>The private sector did amazingly well. Rapid transformation of big parts of the economy from office-based to remote-first was amazing, and we should absolutely embrace the remote-first world, even if it made little difference for covid.</p>
<p>Similarly supermarkets, restaurants and so on switched very effectively from location-based services to delivery-based services. Restaurants have a lot more reason to exist than offices, but this shift is likely permanent, and a much bigger share of the economy will be online or delivery-based going forward.</p>
<p>Big Pharma did quite well. Multiple vaccines were developed in record time, of kind not used ever before, for kind of a virus that never had an effective vaccine before. Tests, antivirals, and so on were also developed very quickly.</p>
<h3 id="what-it-all-means-for-the-next-pandemic-">What It All Means For The Next Pandemic?</h3>
<p>Very little actually. Covid-19 had so many unusual features, there's no reason to expect the next one to be like that.</p>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-8707848532859672052022-03-09T16:50:00.007+01:002022-03-09T16:51:01.913+01:00crystal-z3<p>A small announcement. Mostly as a way to play with Crystal, I created <a href="https://github.com/taw/crystal-z3">Crystal bindings for Z3 library</a>, and I think it might be quite usable as a MVP.</p><p>Check included examples and specs for how to use it.</p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-49616525381634548992022-03-07T18:04:00.002+01:002022-03-07T18:04:10.135+01:00New series - Open Source Adventures<p>I started a new series last week, Open Source Adventures. It's not terribly focused, it will be some random unrelated Open Source things I wanted to do. The first mini-project is Z3 support for Crystal programming language, but I'll jump to some very different subjects.</p><p>Just like with previous two series, you can read it on <a href="https://dev.to/taw/series/17114">dev.to</a> or <a href="https://taw.hashnode.dev/series/open-source-adventures">hashnode</a>.</p><p>The code for the series, unless it has specific reason to go elsewhere, <a href="https://github.com/taw/open-source-adventures">will go to this repo</a>.</p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-62426404293316753802022-02-24T14:56:00.004+01:002022-02-24T14:56:45.892+01:00100 Languages Speedrun Finished!<p>About 100 days ago, I started the 100 Languages Speedrun series. It is now finished.</p><p>You can read <a href="https://dev.to/taw/series/15607">all 100 episodes</a>, as well as two bonus episodes - <a href="https://dev.to/taw/100-languages-speedrun-bonus-episode-101-programming-languages-tier-list-c4">Tier List</a>, and <a href="https://dev.to/taw/100-languages-speedrun-bonus-episode-102-series-retrospective-4ig5">Series Retrospective</a>.</p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com1tag:blogger.com,1999:blog-27488238.post-90425723070191662222021-11-28T21:05:00.001+01:002021-11-28T21:05:11.133+01:00100 Languages Speedrun<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEismQD6FM3hSNxjG1YpJ1F3AMU3O96MWu9_f1uAaG0rdBl-bzY_oeUF38tebGue9u_AUxWOudvVH7TgQKg7r8QFRgSut0oWsaKu58Y9ftzZduCNCZDGduoVBlpehI35XBamrmEh8w/s2048/luna_has_landed_by_hehaden_from_flickr_cc-nc.jpg" style="margin-left: 1em; margin-right: 1em;" title="Luna has landed! by hehaden from flickr (CC-NC)"><img alt="Luna has landed! by hehaden from flickr (CC-NC)" border="0" data-original-height="1364" data-original-width="2048" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEismQD6FM3hSNxjG1YpJ1F3AMU3O96MWu9_f1uAaG0rdBl-bzY_oeUF38tebGue9u_AUxWOudvVH7TgQKg7r8QFRgSut0oWsaKu58Y9ftzZduCNCZDGduoVBlpehI35XBamrmEh8w/w640-h426/luna_has_landed_by_hehaden_from_flickr_cc-nc.jpg" width="640" /></a></div><br /><p>I didn't take a long break after finishing the 100-episode daily Electron Adventures series. I already started another one - 100-episode daily "100 Languages Speedrun" series, where I'm trying out a new programming language every day.</p><p>It's been going for about a week now, and it's available:</p><p></p><ul style="text-align: left;"><li><a href="https://dev.to/taw/series/15607">on dev.to</a></li><li><a href="https://taw.hashnode.dev/series/100-languages-speedrun">on hashnode</a></li></ul><div>I already explained the goals of the series in the first episode, so I'll just repost it below. Enjoy the series!</div><div><br /></div><div><div>Time to start a 100 programming languages speedrun. Every day or so, I'll be posting about a different programming language. Not just doing 100 fizzbuzzes, but trying out something that's interesting about each language.</div><div><br /></div><div>But that's not all, some of the programming languages I will create for purpose of this series. So if you follow along, you'll see not just a lot of different programming languages, but you might also learn a thing or two about how to create your own.</div><div><br /></div><div>I won't be shy about my opinions, and I might be even exaggerating a bit. Feel free to share your thoughts in the comments.</div><div><br /></div><div>Episodes will all be independent. Target audience is people who know programming, but don't know a 100 difference languages, so I'll often use some less idiomatic ways of doing things if I think it's clearer for such reader, or if it lets me showcase specific language feature better. For languages where it's not enforced, I'll mostly stick to best-practice cross-language code formatting (2 spaces indentation, double quoted strings, no semicolons etc.), even if that language generally uses something else.</div></div><p></p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com1tag:blogger.com,1999:blog-27488238.post-87720704789755331222021-11-17T00:42:00.003+01:002021-11-17T00:42:30.523+01:00Electron Adventures 100-post series is finished<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9sFdh2ldvm6SLdARMA2Rv4ezAMnS3vj7KOnnVmp657U7tNvcs-eMzbK8N7TcLGpyS883D2wBGRKyU3FRoccj9RULcCZ7eSD-GU-FhP-2WlB08Mct5drUBa8o80oRCqILBT3M3Cg/s4032/rena_with_her_black_and_white_whiskers_by_bennilover_from_flickr_cc-nd.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Rena, with her black and white whiskers by Bennilover from flickr (CC-ND)"><img border="0" data-original-height="3024" data-original-width="4032" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9sFdh2ldvm6SLdARMA2Rv4ezAMnS3vj7KOnnVmp657U7tNvcs-eMzbK8N7TcLGpyS883D2wBGRKyU3FRoccj9RULcCZ7eSD-GU-FhP-2WlB08Mct5drUBa8o80oRCqILBT3M3Cg/w640-h480/rena_with_her_black_and_white_whiskers_by_bennilover_from_flickr_cc-nd.jpg" width="640" alt="Rena, with her black and white whiskers by Bennilover from flickr (CC-ND)" /></a></div><br /><p>The Electron Adventures series I've been writing is now over.</p>
<p>The series is available on two platforms, with the same content:</p>
<ul>
<li><a href="https://dev.to/taw/series/14346">dev.to</a></li>
<li><a href="https://taw.hashnode.dev/series/electron-adventures">hashnode</a></li>
</ul>
<p>If you want to read the conclusions, episode 99 (<a href="https://dev.to/taw/electron-adventures-episode-99-should-you-use-electron-4cek">dev.to</a>, <a href="https://taw.hashnode.dev/electron-adventures-episode-99-should-you-use-electron">hashnode</a>) summarizes the technical aspects of the series, and episode 100 (<a href="https://dev.to/taw/electron-adventures-episode-100-series-retrospective-ee6">dev.to</a>, <a href="https://taw.hashnode.dev/electron-adventures-episode-100-series-retrospective">hashnode</a>) talks about what it was like to do daily blogging. As it's already all there, I won't be repeating it here.</p><p>Or start from the first, or just check whichever episodes look interesting. Some subjects continue over a bunch of episodes, but there's plenty of fresh starts on the way, so you definitely don't need to read it 1 to 100.</p>
<p>I plan to do some more similar series in the future, they'll definitely be announced here, and for now I plan to double-post any such content to dev.to and hashnode, so feel free to follow me on whichever one's more convenient.</p>
<p>It's also possible that I might do a few bonus episodes beyond the 100 someday, as there's a few subjects I couldn't cover for various reasons.</p>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-21255274580338854222021-09-12T19:12:00.005+02:002021-09-12T19:12:50.094+02:00Electron Adventures 50 episodes so far<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLROsuQypJ-TK_TPrzKtg74H5329SnpFHO9qKVmzktgbJ-DLLdXLxBhXi6o4IzQJA-bzNT_sDkIa0ldOaa0jC2o_kbY_YTWapuIj8hCs79w6i4srDVE8tZZihVS8Gqjznk5hs8fg/s612/shes_either_helping_me_code_or_waiting_to_steal_my_pencil_thelatter_by_amsloan_from_flickr_cc-nc-nd.jpg" style="margin-left: 1em; margin-right: 1em;" title="She's either helping me code or waiting to steal my pencil. #theLatter by AMsloan from flickr (CC-NC-ND)"><img alt="She's either helping me code or waiting to steal my pencil. #theLatter by AMsloan from flickr (CC-NC-ND)" border="0" data-original-height="612" data-original-width="612" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLROsuQypJ-TK_TPrzKtg74H5329SnpFHO9qKVmzktgbJ-DLLdXLxBhXi6o4IzQJA-bzNT_sDkIa0ldOaa0jC2o_kbY_YTWapuIj8hCs79w6i4srDVE8tZZihVS8Gqjznk5hs8fg/w640-h640/shes_either_helping_me_code_or_waiting_to_steal_my_pencil_thelatter_by_amsloan_from_flickr_cc-nc-nd.jpg" width="640" /></a></div><br /><p>Two months ago I got an idea of starting a small Electron coding project. And lacking any kind of moderation, I decided to just post daily coding episodes for like a 100 days. I'm halfway there.</p>
<p><a href="http://t-a-w.blogspot.com/2021/07/my-adventures-with-devto-and-hashnode.html">There were definitely some technical issues early on</a>, but I got that out of the way.</p>
<p>Since then I blogged at a rate of about 1 post a day - either creating or updating a small Electron program, and then doing a short writeup about it, with code samples and discussion of issues encountered along the way.</p>
<p>When I started, I had a vague idea of where I wanted to head:</p>
<ul>
<li>I wanted to try out new code blogging platforms.</li>
<li>I wanted to collaborate with people. It's something I used to do a lot before the pandemic, but had too few opportunities since.</li>
<li>I wanted to figure out how I can code Electron in something that's not Javascript - Ruby, Python, basically anything whatsoever. Either purely non-JS, or in some kind of hybrid mode (JS frontend, non-JS backend). All other languages desperately need a good UI system, and I thought this might be worth investigating.</li>
<li>I wanted to be able to create Windows UIs for my Total War modding tools (and potentially Paradox modding tools too). I did them before with JRuby + Java-based toolkits, but none of that works very well.</li>
<li><code>mc</code> more or less broke after software upgrade, and it freezes if I do anything funny, so I wanted to investigate how I can make my own Orthodox File Manager in Electron</li>
<li>and I might get some Electron and Svelte practice, as I don't use them too often</li>
</ul>
<p>So far the adventure led me mostly somewhere else:</p>
<ul>
<li>I did a few coding sessions with <a href="https://www.amandacavallaro.com/">Amanda Cavallaro</a>, but it's actually quite difficult to get someone to join such a big ongoing project for just an episode or two.</li>
<li>I started coding a file manager. Blogging about every tiny commit is fun, but it takes much longer to blog than to code, so I doubt I'll get even MVP this way.</li>
<li>I did some coding with Javascript frameworks I don't normally use like Vue or Marko; but zero with non-JS languages so far</li>
<li>I didn't even try to connect anything with my Total War modding tools</li>
<li>I definitely got that Electron and Svelte coding practice.</li>
</ul>
<p>This is fine.</p>
<p>The series is available on two platforms, with the same content:</p>
<ul>
<li><a href="https://dev.to/taw/series/14346">dev.to</a></li>
<li><a href="https://taw.hashnode.dev/series/electron-adventures">hashnode</a></li>
</ul>
<p>Each post has about 71 views total (60 views on dev.to and 11 views on hashnode).</p>
<p>Those numbers feel very low to me, as back in the good days a typical post on my blog would get thousands of views, occasionally tens of thousands. My most read post had 170k views.</p>
<p>I also don't know how many views new vs old posts get, so if people would read that for years and it would add up, or if they'd just fade away being barely searchable.</p>
<p>I'm also not sure how much value this series even has to the readers. A 100 post series is not something people really do, ever. Am I expecting people to read from start to finish? To pick it halfway? To just read random a post or two?</p>
<p>A number of the posts are reasonably self-contained, but especially the ones about building the file manager sort of assume some familiarity with existing code. I also didn't really make it obvious which episodes are self-contained and which aren't.</p>
<p>The <a href="https://github.com/taw/electron-adventures">codebase with each episode's code</a> also has very little interest so far, at 2 stars and zero-activity 3 forks.</p>
<p>I'd probably still be coding something like this anyway, but the main point of writing is having some readers, so if people aren't very interested in this kind of content, I guess I could stop, or do something different.</p>
<p>I'll continue for the rest of the 100 episodes and then write another post about the whole experience.</p>
<p>Oh and I was contacted by multiple different people, who wanted me to write various educational content. Unfortunately I don't really have time for that.</p>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-52391653315421211452021-08-23T22:36:00.004+02:002021-09-05T01:54:50.258+02:00Don't use codepen<p>Let's talk about websites you shouldn't use - specifically <a href="https://codepen.io/">codepen</a>.</p><p>Back in the pre-pandemic days when I was helping people learn frontend programming, I used it a lot for showing various things. So I have 177 such "pens" there, where project is basically three files (HTML+CSS+JS).</p><p>Anyway, the why you shouldn't use it part. Codepen deliberately decided to block any way to export your data. Even getting list of your pens is not really possible without logging to Chrome and doing some console script loop. All automated access is deliberately blocked.</p><p>The only way to export is to go to 177 pens and click on a lot of buttons to get each individual zip file, and they did their best to block any way to automate this process.</p><p>The only way you can get your data - which they don't advertise in any way - is to send them GDPR data export request.</p><p>It comes in a fairly annoying format of one big csv file. <a href="https://github.com/taw/codepen-exporter">I wrote a script to convert that data into a more usable form</a>.</p><p>Being able to export your data is basic human right on the Internet, and deliberately making it difficult is a reason why you should not use websites like codepen.</p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-67852132962926028082021-07-28T20:04:00.002+02:002021-07-28T20:04:47.379+02:00So what happens to government debts after the pandemic?<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCuOJ7tMpR2xylkmzHauXSNd0weZXrtOzlb-jhWxSlwu_S_O7FlOQ7riJ4jRJCSyyBWmiHLyYqDPpDQbJVkX9TCEs9tl_PgcyEAFdgSgJ4zXDDrMMYrjotbTfKYP4uGs5aEjBBkA/s2272/meow_money_or_meowney_by_travis_nicholson_from_flickr_cc-nc.jpg" style="margin-left: 1em; margin-right: 1em;" title="meow money (or meowney) by Travis Nicholson! from flickr (CC-NC)"><img alt="meow money (or meowney) by Travis Nicholson! from flickr (CC-NC)" border="0" data-original-height="1704" data-original-width="2272" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCuOJ7tMpR2xylkmzHauXSNd0weZXrtOzlb-jhWxSlwu_S_O7FlOQ7riJ4jRJCSyyBWmiHLyYqDPpDQbJVkX9TCEs9tl_PgcyEAFdgSgJ4zXDDrMMYrjotbTfKYP4uGs5aEjBBkA/w640-h480/meow_money_or_meowney_by_travis_nicholson_from_flickr_cc-nc.jpg" width="640" /></a></div><br /><p>In most of the developed world, governments' economic strategy for the pandemic was to lock down the economy, take on massive additional debts, and give all that money away to everyone who might be affected by the lockdowns to keep the people compliant.</p>
<p>This would be fine, <a href="https://www.youtube.com/watch?v=hvNwojDx3aE">if the lockdowns were "two weeks" as was originally promised</a>, but it's been already over a year, and depending on how new variants work against vaccines, it might take a few more years for the pandemic to end, and then another few for the economy to go back to normal.</p>
<p>It's common to look at GDP numbers, and claim it's not that bad, but GDP statistics are easily falsified by overwhelming short term cash injection.</p>
<h3 id="crime-wave">Crime wave</h3>
<p>A small side note, not terribly relevant to the main argument.</p>
<p>Many countries went through waves of riots (also known as "mostly peaceful protests" in propaganda media) and increased serious violent crime. <a href="https://www.fbi.gov/news/pressrel/press-releases/overview-of-preliminary-uniform-crime-report-january-june-2020">2020 in US had the highest homicide rate since late 90s</a>, and 2021 data looks even worse than 2020 data. It's not as bad as early 90s, but it definitely is bad.</p>
<p>Some people make excuses that many other categories of crime didn't increase - but it's harder to commit burglaries if people stay at home.</p>
<p>Especially adjusted to prime crime committing population (young men, about 15-30), serious crime rates might already be as bad as in the '90s, it's just marked by including much more elderly in the denominator, who cannot commit any serious crimes even if they wanted to.</p>
<p>It's unclear if this is mostly an US specific issue, or if other countries are just as affected.</p>
<p>It's quite likely that this crime wave will take decades to go down to pre-pandemic levels, and until then, it will interfere with economic recovery.</p>
<h3 id="debt-levels">Debt levels</h3>
<p>Western countries already had record high debt levels before, as they never properly recovered from the 2008 recession.</p>
<p><a href="https://www.visualcapitalist.com/government-debt-in-2021/">Here's some visualizations of how bad debt levels already are</a>. And it will keep increasing for as long as the pandemic is ongoing.</p>
<p>The quite recent orthodoxy that government debts should never exceed about 60% of GDP and shouldn't get even close to that except in most unusual circumstances, looks hilarious when the new normal is 100%+ debt for everyone, and 200%+ being nothing unusual.</p>
<p>Why is nobody even talking about it anymore?</p>
<h3 id="so-what-happens-next-">So what happens next?</h3>
<p>There really aren't that many things that can be done with such levels of debt. It would need to be some combination of.</p>
<p>Not paying the debt:</p>
<ul>
<li>government could repudiate all or part of the debt, just say it won't repay it, and get over it - the chance of this happening is basically zero for as long as politicians can kick the can down the road</li>
<li>government could negotiate with creditors to get the debt down to more sustainable levels - Third World countries do that occasionally, are we going to see more of it?</li>
<li>government could print more money and erode debt through sustained high inflation - if expected inflation is 2%, then 20 years of higher 5% inflation is about equivalent to reducing the debt burden by about 40%. This is the cleanest solution, but we live in heavily inflation-phobic era, and even hitting 2% consistently seems to be a problem for central banks. Even worse many developed countries are not monetarily independent, but enslaved to the ECB.</li>
</ul>
<p>Repaying the debt:</p>
<ul>
<li>fast economic growth could erase debt to GDP ratio by rapidly increased GDP. Except the now dominant green anti-growth ideology is virulently opposed to the very idea of growth. They're virulently opposed to even building the much needed infrastructure (like the <a href="https://www.heathrow.com/company/about-heathrow/expansion">Heathrow Third Runway</a>), and have been very effective at either preventing new infrastructure, or delaying it and increasing its cost so much it amount to basically the same thing. Even without the destructive green ideology, and NIMBYs, and all sort of special interests effectively using political process to block any potential competitors, it would be really difficult to achieve fast growth. Demographics of Western countries are all terrible - none except one have healthy demographic growth, and the one exception Israel only does it through <a href="https://en.idi.org.il/media/10441/statistical-report-on-ultra-orthodox-society-in-israel-2017.pdf">Haredi population which largely refuses to integrate with modern economy</a>, and is a huge burden on the rest of the society.</li>
<li>government could increase taxes to repay debt - taxes in most developed world are already very high, and the harder you squeeze, the more harmful it is to the economy; increasing taxes by much is also politically very difficult, so politicians are trying their best to pass sneaky anti-democratic pseudo-taxes - for example "taxing Amazon" (which obviously will be 100% paid by people who buy from Amazon). We'll definitely see more of that, but this doesn't come even close to addressing the enormity of the debt.</li>
<li>government could cut spending to repay debt - this works in theory, but it's a political suicide, and even if one party does it for the good of the country, very often opposition reverses the cuts as soon as they get the power</li>
<li>selling or long-term-renting government property - this could be done to reduce debt a bit - for example US federal government own obscene amount of lands it doesn't use, and doesn't plan to use, and which could be sold (or at least transferred to the individual states, which then can use or sell them).</li>
</ul>
<p>Living with the debt:</p>
<ul>
<li>paying interest, at rates compatible with historical rates - <a href="https://www.macrotrends.net/2016/10-year-treasury-bond-rate-yield-chart">back in the 90s</a> government interest rates in US were about 6%. At 200% debt to GDP ratio, this means 12% of GDP - or 1/3 of government revenue - goes to paying just interest, with no reduction in principal. This is ridiculously politically unsustainable.</li>
<li>paying interest, at very low rates - if on the other hand interest rates were more like 2%, then such payment can be sustained, but how can government ensure that the rates stay this low indefinitely? As Japan shows it is possible, but only by monetary policy so brutal that it makes economic growth impossible. Government pretty much has to either make it impossible for any private investment to offer better rates; or force banks to take government debt, and starve private sector of any credit.</li>
</ul>
<p>And that's the full list. There's no combination of these that looks good.</p>
<h3 id="mmt-is-nonsense">MMT is nonsense</h3>
<p>Yes, MMT is nonsense, no point wasting time on it. It's basically stupid motte of "if we accept very high inflation, we can money print ourselves out of any debt" with bailey of "inflation will magically not happen".</p>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com1tag:blogger.com,1999:blog-27488238.post-3058624564546141072021-07-28T18:41:00.002+02:002021-07-28T18:41:30.066+02:00My adventures with dev.to and hashnode so far<p>As <a href="http://t-a-w.blogspot.com/2021/07/looking-for-new-blog.html">I said in my previous post</a>, I was looking for a new blogging platform.</p><p>I created accounts on <a href="https://dev.to/taw">dev.to</a> and on <a href="https://hashnode.com/@taw">hashnode</a>, and started my new Electron Adventures series.</p><p>Here's hashnode version:</p><ul>
<li><a href="https://hashnode.com/post/electron-adventures-episode-1-creating-new-electron-app-ckrjfjswv0tnmnts1bac4epc7">Electron Adventures: Episode 1: Creating New Electron App
</a></li>
<li><a href="https://hashnode.com/post/electron-adventures-episode-2-frontend-code-and-backend-code-ckrkyfcua06ykh5s16du37jn3">Electron Adventures: Episode 2: Frontend Code and Backend Code
</a></li>
<li><a href="https://hashnode.com/post/electron-adventures-episode-3-what-can-backend-code-even-do-ckrmhr6uq047ifws1ckb3bo0q">Electron Adventures: Episode 3: What Can Backend Code Even Do?
</a></li>
<li><a href="https://hashnode.com/post/electron-adventures-episode-4-image-gallery-with-dynamic-html-ckrnlx2o20dugfws1a1bq3o5c">Electron Adventures: Episode 4: Image Gallery with Dynamic HTML
</a></li>
</ul>
<div>And here's dev.to:</div><ul>
<li><a href="https://dev.to/taw/electron-adventures-episode-1-creating-new-electron-app-5oh">Electron Adventures: Episode 1: Creating New Electron App</a></li>
<li><a href="https://dev.to/taw/electron-adventures-episode-2-frontend-code-and-backend-code-dde">Electron Adventures: Episode 2: Frontend Code and Backend Code</a></li>
<li><a href="https://dev.to/taw/electron-adventures-episode-3-what-can-backend-code-even-do-ge4">Electron Adventures: Episode 3: What Can Backend Code Even Do?</a></li>
</ul>
<h3 style="text-align: left;">What went wrong with dev.to</h3><div>dev.to was a huge disappointment. I tried to post episode 4, and it just outright refused to accept it, or even preview with "invalid markdown detected" error.</div><div><br /></div><div>It wouldn't even give me a hint where was that "invalid markdown", so I had to delete parts of the posts, until I got it down to a single line, then simplified a bit:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzPAM7DqEnifSe1tY296W8BC3Htztvu5ZocbIFAJgH0Fu0tjKt_S8EU_9CTYatVEyuFIx0s0bDWSJzwlEE_hMTrJUuCLJFauSU_CuO4_TklpDhE4BotLdMHDrLuQuUu_mRYguIyA/s832/Screenshot+2021-07-28+at+16.00.18.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="526" data-original-width="832" height="405" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzPAM7DqEnifSe1tY296W8BC3Htztvu5ZocbIFAJgH0Fu0tjKt_S8EU_9CTYatVEyuFIx0s0bDWSJzwlEE_hMTrJUuCLJFauSU_CuO4_TklpDhE4BotLdMHDrLuQuUu_mRYguIyA/w640-h405/Screenshot+2021-07-28+at+16.00.18.png" width="640" /></a></div><br /><div>Yeah, any code block with <code>date:</code> in it just crashes their engine. I tried to throw some backslashes in various places, but that didn't fix it.</div><div><br /></div><div>I could maybe change code to say "<code>da" + "te:"</code>, but that's really stupid for a code blogging platform.</div><div><br /></div><div>Unless this gets fixed, I really don't see myself using it, especially as I like doing much weirder things with code than printing some URLs.</div><div><br /></div><div>I'm not sure if there's any place where I can report the bugs where they'd actually read them and maybe fix that (for what it's worth, I tweeted at them).</div><h3 style="text-align: left;">What went wrong with hashnode</h3><div>Hashnode let me post everything all right, but there's another problem. There doesn't seem to be any place where people can see all my blog posts. If I'm not logged in, my profile page looks like this:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzyQRuRar5GOXST-GceTFqJNBbxbSZe641YBNqU205tSBMdyckptW7Q7tueUTCrykmMrtaC0S5ht7nJOeagxDoH1zhSLcQ14EQzQijG6Bj0LIE6QPFqWEXfaElF1xi4IJRBziHSg/s1800/Screenshot+2021-07-28+at+16.04.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1572" data-original-width="1800" height="558" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzyQRuRar5GOXST-GceTFqJNBbxbSZe641YBNqU205tSBMdyckptW7Q7tueUTCrykmMrtaC0S5ht7nJOeagxDoH1zhSLcQ14EQzQijG6Bj0LIE6QPFqWEXfaElF1xi4IJRBziHSg/w640-h558/Screenshot+2021-07-28+at+16.04.33.png" width="640" /></a></div><br /><div>Like, where the hell is my blog?</div><div><br /></div><div>I suspect that maybe I need to go through the whole "setup your blog" process to get such page, but this really wasn't clear when I started. I thought by posting blogposts I'd already have some kind of blog created, but maybe that's not how it works?</div><h3 style="text-align: left;">What's next</h3><div>I'll try to see if hashnode is fixable, and if dev.to actually responds to this bug.</div><div><br /></div><div>I still have an option of using external markdown converter and posting here, even though it's a messy process. I'm not sure which other blogging platforms I can try.</div><div><br /></div><div>I want to continue Electron Adventures, but I might take a short break to resolve these technical problems first.</div><p></p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com3tag:blogger.com,1999:blog-27488238.post-65705728186861962562021-07-25T16:24:00.001+02:002021-07-25T16:24:27.885+02:00Looking for a new blog<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXbNFWR0w4qDxjP9Y7pWzpHkAEEDzhyphenhyphenIjiEyhtpEJc9iBX7lFuDNWLjdRygk6ygVFdO4xkwsUxhsxMJEn3suMyYK79vc6CFDeX5Ok8wXQzOQgIKwHbvfC7DbjjfvcFfhm4Eh3ieQ/s3646/service_interruption_by_travel_oriented_from_flickr_cc-sa.jpg" style="margin-left: 1em; margin-right: 1em;" title="service interruption by travel oriented from flickr (CC-SA)"><img alt="service interruption by travel oriented from flickr (CC-SA)" border="0" data-original-height="2734" data-original-width="3646" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXbNFWR0w4qDxjP9Y7pWzpHkAEEDzhyphenhyphenIjiEyhtpEJc9iBX7lFuDNWLjdRygk6ygVFdO4xkwsUxhsxMJEn3suMyYK79vc6CFDeX5Ok8wXQzOQgIKwHbvfC7DbjjfvcFfhm4Eh3ieQ/w640-h480/service_interruption_by_travel_oriented_from_flickr_cc-sa.jpg" width="640" /></a></div><br /><div>I've had this blog here since 2006. I don't plan to delete it or anything, but it's not really a platform I'd recommend to anyone.</div><div><br /></div><div>It's especially bad for talking about any tech issues - there's no support for code at all.</div><div><br /></div><div>So I've been writing posts offline as Markdown offline, using Markdown to HTML converter, and just dumping the result here. The only extra step was manually finding a cat picture for the post. If I then notice any kind of corrections I'd like to do, they are quite awkward to make.</div><div><br /></div><div>I've been not very happy about it, but in the past, this blog used to have a lot of readers, and moving to another platform would lose most of that engagement.</div><div><br /></div><div>Well that's gone now - blogging is maybe a 10% as popular as it was in its Golden Age, and RSS is nearly dead - the few people who read blogs now either get there from Google, or from someone linking to specific post on social media. Either way, the cost of switching is much lower.</div><div><br /></div><div>And timing is really good now. I have an idea for a new post series, with tons of code.</div><div><br /></div><div>After checking a bunch of planforms, I created accounts on:</div><div><ul style="text-align: left;"><li><a href="https://hashnode.com/@taw">taw on hashnode</a></li><li><a href="https://dev.to/taw">taw on dev.to</a></li></ul><div>My plan right now is to post same content on both at least for a while to see which one I like better.</div></div><div><br /></div><div>I'll probably keep posting on-coding stuff, and various announcement posts (usually of the "look at this cool software I wrote" type) here.</div><div><br /></div><div>Some other content creation platforms I used, or still use:</div><div><ul style="text-align: left;"><li><a href="http://taw-gaming.blogspot.com/">gaming blog</a> - I mod most games I play, so I write down notes as go, so I got an idea of maybe turning those notes into some kind of AAR; these are probably not the most fascinating AARs unless you also mod stuff; unfortunately Google deleted most of old screenshots there when Google+ died, so most of old posts have text only</li><li><a href="https://www.youtube.com/channel/UCDlHQYTFt5yXxWXwJ8QlhlQ">youtube channel</a> - I was posting gaming content there for a few years, I haven't done that in 3 years, but I keep thinking about resuming that</li><li>Google+ - well, that died, still miss it</li><li><a href="https://twitter.com/t_a_w">twitter</a> - I keep posting there out of habit, but really twitter is a sad shadow of its former lively self, and I keep thinking about just dropping that</li><li><a href="https://www.twitch.tv/t_a_w">twitch</a> - I tried streaming there for a bit, but I never really got into this, as I don't watch live streams myself, I only watch gaming content on my own time, at 200% speed</li></ul></div>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com3tag:blogger.com,1999:blog-27488238.post-47201877137207813902021-07-13T17:11:00.002+02:002021-07-13T17:11:25.436+02:00Password hiding policy is insane<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm2QZ1NEcu_ah3U0mYecI_G6DRc9YWCYmFzA9MAZ_mwqxtB1-WZkL3eK_SecIXEoLEX8mmEBz9XGX-lJHAiatGb8G48b7wAX6z-MSFY2t1OR5m1a7xfTSBJf0RAeWKgDf_qHXrJQ/s3456/ysabel_by_daniel_panev_from_flickr_cc-sa.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Ysabel by Daniel Panev from flickr (CC-SA)"><img border="0" data-original-height="3456" data-original-width="2304" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm2QZ1NEcu_ah3U0mYecI_G6DRc9YWCYmFzA9MAZ_mwqxtB1-WZkL3eK_SecIXEoLEX8mmEBz9XGX-lJHAiatGb8G48b7wAX6z-MSFY2t1OR5m1a7xfTSBJf0RAeWKgDf_qHXrJQ/w426-h640/ysabel_by_daniel_panev_from_flickr_cc-sa.jpg" width="426" alt="Ysabel by Daniel Panev from flickr (CC-SA)" /></a></div><p>Imagine you find yourself in some part of the world where people can still go to cafes, so you get a coffee, take out your laptop, and begin working on your spreadsheets or fanfics or whatever people do these days.</p><p>Then you remember that you're low on cat food. Let's see how security of that works out.</p><p>First you need to type cafe's WiFi "password". This password - completely worthless secret - will be turned into a bunch of ****** by your computer - so none of the people in the same cafe can even dare to see this.</p><p>Not to mention WiFi "passwords" are a conspiracy by broadband companies to sell more broadband, and really all WiFi should be completely passwordless and only prioritize the paying user over passers-by. Most networks have very low utilization almost all the time, so it costs nobody anything. That's how we used to roll back in the '90s before big broadband successfully destroyed this social sharing model.</p><p>Anyway, once you get on the WiFi, you log into Instagram to check out some cat memes. Your social media password is of slightly more value than cafe's WiFi password, and your browser has decency of ******ing that too, so this part makes the most sense.</p><p>And then you remember, the cat food. You go to cat food website, enter your credit card number - all in plain sight of everyone in the cafe. Then secret three digit number on the other side of the card - all also in plain sight of everyone. Your name, address, and everything else one would need to literally steal your money - why, also all in plain sight of everyone who's in the same cafe. Also to every employee, as the cafe is fairly likely to have some cameras around, and it's really not hard to see what's on your screen with modern cameras.</p><p>How is this not utter insanity? Criminals don't care for your dinner photos, or your Instagram posts, or even really for your nudes or medical history (unless you're famous). For sure they don't care for WiFi passwords the tiniest bit.</p><p>The only thing they want is access to your money, and they can easily get it by just looking at your damn screen in a public place if you buy anything. And this is just one thing we in our utter madness decided to not hide, while we ****** every worthless WiFi password.</p><p>And it's not one online shop, or one browser doing this insanity. Everyone collectively decided to just be batshit insane about this for some reason. Did Russian mafia infiltrate Netscape back in the '90s and then we never fixed it, or are we all just so damn stupid?</p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-74689010413377641882021-07-13T16:46:00.005+02:002021-07-13T16:46:32.659+02:00Updates Hypocrisy<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidOnWiYqMfRPPnYY80fpL_R_3120jI6u0pMuyfsL0UyzVt_kJJ3fPM4HrsJnqDYN9wFzhBzV1WNO8tu9R3XIGzet_f9asWF7scKJ3nwAsOLkZXi1nnQScFXBnn7jOHdymF-0dQsQ/s5568/gaby_by_degust_from_flickr_cc-nc-nd.jpg" style="margin-left: 1em; margin-right: 1em;" title="Gaby by DeGust from flickr (CC-NC-ND)"><img alt="Gaby by DeGust from flickr (CC-NC-ND)" border="0" data-original-height="3712" data-original-width="5568" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidOnWiYqMfRPPnYY80fpL_R_3120jI6u0pMuyfsL0UyzVt_kJJ3fPM4HrsJnqDYN9wFzhBzV1WNO8tu9R3XIGzet_f9asWF7scKJ3nwAsOLkZXi1nnQScFXBnn7jOHdymF-0dQsQ/w640-h426/gaby_by_degust_from_flickr_cc-nc-nd.jpg" width="640" /></a></div><p>Tech companies just love forcing updates upon regular users. The idea that someone, somewhere, might be using a version of their software that's a few months old, stops them from sleeping well at night.</p><p>This goes all the way from <a href="https://www.extremetech.com/extreme/316460-how-to-stop-forced-windows-reboots">operating systems</a> through <a href="https://twitter.com/moyix/status/1388586550682861568">big applications</a> all the way down to the tiniest utilities. They will force that update down user's throat, and the most freedom they allow users is to press a 24h snooze button. Some like Microsoft will not even bother asking, and will just reboot user's computer in the middle of whatever they were doing.</p><p>And it's not like they make any guarantees about it - if updates break things - and they absolutely will do that - there's usually no way to roll back, and you must be living on a different planet if you imagine you'll get any tech support whatsoever.</p><p>So if updates are so important, you'd think at least tech companies would be updating things automatically themselves? Nothing could be further from the truth. They built entire systems like npm's package-lock.json and its equivalents for literally every other programming environment to prevent any updates forever.</p><p>Even the idea of operating system updating some shared library dependency is too much, and nowadays everyone bundles all dependency libraries with every application, <a href="https://en.wikipedia.org/wiki/Go_(programming_language)">builds fully static binary</a>, or just puts them in some sort of a fully no-update virtual machine like Docker container.</p><p>And it's not just minor packages - tech companies will happily run <a href="https://www.jetbrains.com/research/python-developers-survey-2017/">Python 2</a> or <a href="https://www.frameworktraining.co.uk/blog/why-is-java-8-more-popular-than-java-14/">Java 8</a> or Debian "stable" a decade after release of their official successors.</p><p>So for all that task about importance of updates, this only seems to apply when their costs are borne by someone else.</p><p>I believe what tech companies do, not what they say, and I therefore believe that forcing users to update their machines, either by automated updates, or by endless popups without a No button, should be literally illegal. We don't allow manufacturers of physical things to invade your home to "update" your microwave or a book, why should we allow software manufacturers to invade our computers?</p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0tag:blogger.com,1999:blog-27488238.post-28609093453786321632021-07-10T20:39:00.000+02:002021-07-10T20:39:25.493+02:00Total War UI layout to XML converter<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrXfJ11fm_VSttyyR3UVHsXDUAgyELyGZdDVP0hS0AB9oPHp4aVWGlPdl1C858e9YrIZHIZ8KPmdXspNgYy2QolalcME3EcvvOamwmmovp5RVP37yasLybEcdNaYx8irlO27jfzA/s5760/chatons_juin_2021_by_isabelle__stphane_gallay_from_flickr_cc-by.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Chatons, Juin 2021 by Isabelle + Stéphane Gallay from flickr (CC-BY)"><img border="0" data-original-height="3840" data-original-width="5760" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrXfJ11fm_VSttyyR3UVHsXDUAgyELyGZdDVP0hS0AB9oPHp4aVWGlPdl1C858e9YrIZHIZ8KPmdXspNgYy2QolalcME3EcvvOamwmmovp5RVP37yasLybEcdNaYx8irlO27jfzA/w640-h426/chatons_juin_2021_by_isabelle__stphane_gallay_from_flickr_cc-by.jpg" width="640" alt="Chatons, Juin 2021 by Isabelle + Stéphane Gallay from flickr (CC-BY)" /></a></div><br /><p>My most recent coding project was decoding UI layout files for all 10 Total War games from Empire to Three Kingdoms and <a href="https://github.com/taw/etwng/tree/master/ui">writing converter that translates them to XML and back</a>.</p><p>Here's a quick writeup of what I did, and how that went.</p><h3 style="text-align: left;">UI Layout files</h3><p>Layout in the games are controlled by UI Layout files. They all helpfully start with a version number header - currently from <i>Version025</i> to <i>Version129</i>. After that follows top level UI element, and within are nested children UI elements and many other things like UI states, transitions, events, and so on.</p><h3 style="text-align: left;">Basic building blocks</h3><p>Basic building blocks of the format were fairly easy to understand, mainly:</p><p></p><ul style="text-align: left;"><li>booleans as 00 or 01</li><li>integers as int32</li><li>floats as float32</li><li>colors as BGRA32 (that is - one byte per component, in this order)</li><li>ASCII strings as int16 character count, followed by that many characters</li><li>Unicode strings as int16 character count, followed by that many UTF16 characters</li><li>various data structures had their fields in specific order, without any headers, or delimiters</li><li>for arrays of data structures there was generally int32 element count, then followed by each element in succession, without any headers or delimiters</li></ul><div>There were also a few other patterns used less often, like:</div><div><ul style="text-align: left;"><li>optional fields - either 01 followed by some data structure, or just a 00</li><li>128-bit uuids (weirdly no specific version, but still market as a uuid in variant bits)</li><li>occasional int8s and int16s</li><li>arrays of elements repeating until some special value like <i>events_end</i></li><li>2D arrays of elements prefixed by xsize and ysize</li><li>and so on</li></ul></div><h3 style="text-align: left;">Manual decoding with hex editor</h3><div>Most formats are quite easy to decode with a hex editor. This one wasn't - there were far too many versions, no data structure headers, no separators between data structures, and as pretty much everything was optional, so there were huge blocks of zeroes.</div><div><br /></div><div>For example a block of 20 zero bytes could be any of:</div><div><ul style="text-align: left;"><li>20 booleans false</li><li>5 floats 0.0</li><li>5 ints 0</li><li>10 empty ASCII strings</li><li>10 empty Unicode strings</li><li>5 empty nested arrays of some child elements</li><li>or most likely some combinations of all of them</li></ul><div>And there were such huge blocks of zeroes everywhere.</div></div><div><br /></div><div>Decoding it without tool assist would be just too difficult, especially doing it over and over for every single version.</div><h3 style="text-align: left;">Original converter</h3><p>Once upon a time alpaca wrote a Python converter for Napoleon Total War (second game on the engine). I inherited that, and extended it to backwards to Empire and forwards Shogun 2.</p><p>Even with all the fixes it had only maybe 90% support for those three games.</p><p>The most obvious approach would be fixing remaining issues and extending it further.</p><p>Unfortunately that would be very difficult approach.</p><h3 style="text-align: left;">Internal Representation Pattern</h3><p>The converter was based on principle of <i>Internal Representation</i>. Every structure has a class. That class basically has five methods:</p><p></p><ul style="text-align: left;"><li>initialize empty data structure with default values</li><li>read from binary file</li><li>write to XML</li><li>read from XML</li><li>write to binary file</li></ul><div>This works well enough when there's one version of every structure, and it's fully understood. Unfortunately we have 62 different versions (some numbers between 25 and 129 were skipped), and we have very limited idea how things are represented.</div><div><br /></div><div>Old converter tried to ignore many of those issues. For example writing to XML was just one hardcoded template string per data structure, so if layout file's version lacked some fields, it would just write default values anyway. Then on converting back it would read them and throw them away. This specific issue was partly limitation of Python, which is bad at DSLs, and this XML output really wanted a DSL.</div><div><br /></div><div>A bigger problem was that if it didn't work for any reason, I got nothing. I'd get some "reading past end of file" error without any context whatsoever, and actual point where parsing derailed was located long before that crash.</div><h3 style="text-align: left;">Data gathering</h3><div>Before I even started, I took latest versions of all 10 Total War games using current engine, extracted all UI layout files and put them as test set.</div><h3 style="text-align: left;">Analysis tool</h3><div>Then I wrote analysis tool. The formats were really complicated, but there were some obvious things in them. Especially strings. Basically the analysis tool went over the file and identified every ASCII or Unicode string. Then it printed any undecoded data in nice ASCII + hex format.</div><div><br /></div><div>That was a good starting point, but there was something I could do next. Not only I could see the strings, it was really easy to guess which string meant what. A string with font name was always followed by some ints controlling text display. A string with shader names by shader variables. Strings with image names were used in a few ways, but some simple heuristics could guess which were they.</div><div><br /></div><div>So I soon had listings along these lines:</div><div><pre><code>000129-000147 FontNameBlock "Ingame 12, Normal"
000148-000151 LineHeightBlock 2
000152-000155 FontLeadingBlock 1
000156-000159 FontTrailingBlock 255
000160-000174 DataBlock
............... 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00
000175-000185 ShaderNameBlock "normal_t0"
000186-000189 ShaderVariableBlock 0.0 (0)
000190-000193 ShaderVariableBlock 0.0 (0)
000194-000197 ShaderVariableBlock 0.0 (0)
000198-000201 ShaderVariableBlock 0.0 (0)
000202-000270 DataBlock
........0....... 00 00 00 00 01 00 00 00 30 12 00 09 00 00 00 00
................ 00 00 00 00 00 05 00 00 00 04 00 00 bb ff be ff
................ 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00
................ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
..... 00 00 00 00 00
000271-000282 EventListBlock []
000283-000294 DataBlock
........ .<. 00 00 00 00 01 00 00 00 20 b3 3c 0b
000295-000314 StringBlock "government_screens"
000315-000346 DataBlock
H............... 48 01 00 00 8e 00 00 00 01 01 00 01 00 00 00 00
................ 00 ff ff ff ff 00 00 00 00 05 00 00 00 00 00 00
000347-000421 ImageListBlock 1 elements:
000351-000421 ImageBlockGen1 id=163829448 xsize=256 ysize=256 path="data\\UI\\Campaign UI\\Skins\\fill 2 leather 256 tile.tga" unknown=4294967295
000422-000433 DataBlock
............ 00 00 00 00 00 00 00 00 01 00 00 00
000434-000437 StateIDBlock 162986096
000438-000447 StateNameBlock "NewState"
000448-000451 XSizeBlock 624
000452-000455 YSizeBlock 720
000456-000484 DataBlock
................ 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00
............. 01 00 00 00 01 00 00 00 00 00 00 00 00
000485-000503 FontNameBlock "Ingame 12, Normal"
000504-000507 LineHeightBlock 2
000508-000511 FontLeadingBlock 1
000512-000515 FontTrailingBlock -16777216
000516-000530 DataBlock
............... 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00
000531-000541 ShaderNameBlock "normal_t0"
000542-000545 ShaderVariableBlock 0.0 (0)
000546-000549 ShaderVariableBlock 0.0 (0)
000550-000553 ShaderVariableBlock 0.0 (0)
000554-000557 ShaderVariableBlock 0.0 (0)
000558-000565 DataBlock
........ 00 00 00 00 01 00 00 00
000566-000589 ImageUseBlock id=163829448 xofs=0 yofs=0 xsize=624 ysize=720 bgra=bgra(255,255,255,255)
000590-000626 DataBlock
................ 01 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00
................ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
..... 00 00 00 00 00
000627-000693 EventListBlock ["OnUpdatePulse", "OnUpdatePulse", "OnDock", "DockHudRelative"]
000694-000705 DataBlock
............ 0a 00 00 00 0e 00 00 00 e8 db b8 09</code></pre></div><div><br /></div><div>And you can probably already notice huge blocks of zeros I mentioned before - even after some zeros are not shown as decoded from context.</div><h3 style="text-align: left;">Direct Conversion Pattern</h3><div>Now that I wasn't going completely blindly, I started writing a converter. In Ruby, as there was a lot of DSLing to do. But mostly it was based on a completely different principle - <i>Direct Conversion</i>.</div><div><br /></div><div>Direct Conversion doesn't bother with any classes, or internal representations. It has methods such as (not actual code, just the general idea):</div><div><pre><code>def convert_int
value = get(4).unpack1("V")
puts "<i>#{ value }</i>"
end
def convert_string
size = get(2).unpack1("v")
str = get(size)
puts "<s>#{ str.xml_escape }</s>"
end
def convert_color
b, g, r, a = get(4).unpack("CCCC")
puts "<color>"
puts " <byte>#{b}</byte><!-- blue -->"
puts " <byte>#{g}</byte><!-- green -->"
puts " <byte>#{r}</byte><!-- red -->"
puts " <byte>#{a}</byte><!-- alpha -->"
puts "</color>"
end</code></pre></div>
<div>But bigger methods can be composed from smaller ones (also not actual code):</div>
<div><pre><code>def output(str, comment=nil)
print " " * indent
print str
print "<!-- #{comment} -->" if comment
print "\n"
end
def convert_int(comment=nil)
output "<i>#{ get_int }</i>", comment
end
def convert_color
tag "color" do
convert_byte "blue"
convert_byte "green"
convert_byte "red"
convert_byte "alpha"
end
end</code></pre></div><h3 style="text-align: left;">Advantages of Direct Conversion</h3><div>Nice thing about this is that conversion back doesn't need to have any idea whatsoever what tags like <i>color</i> even are - other that most basic data types like strings, ints, floats, and booleans, the converter from XML back to binary needs nearly zero awareness of what those formats are.</div><div><br /></div><div>So instead of describing every data structure 5 times, we do it just once. And any version specific logic can be handled by a single <i>if @version >= 74</i> or such.</div><div><br /></div><div>But there's more. Since we never need to construct any internal representation, if conversion crashes, the converter will give us full context of the error!</div><pre><code> <model>
<s>composite_scene/porthole/troy_advisor_test.csc</s><!-- mesh path? -->
<s>standard_advisor</s><!-- mesh name? -->
<!-- some model data or anim header or sth -->
<data size="1">
01
</data>
<i>0</i><!-- 00:00:00:00 --><!-- anim count or something? -->
<s></s><!-- anim name? -->
<s></s><!-- anim path? -->
<!-- rest of anim stuff or sth -->
<data size="4">
00 80 3f 00
</data>
<!-- 2900 - end of model data -->
</model>
</models>
<no /><!-- end of uientry flag 5B? -->
<no /><!-- end of uientry flag 6B? -->
<error msg="Invalid boolean value: got 63" version="121">
Data before fail:
ne/porthole/troy 6e 65 2f 70 6f 72 74 68 6f 6c 65 2f 74 72 6f 79
_advisor_test.cs 5f 61 64 76 69 73 6f 72 5f 74 65 73 74 2e 63 73
c..standard_advi 63 10 00 73 74 61 6e 64 61 72 64 5f 61 64 76 69
sor...........?. 73 6f 72 01 00 00 00 00 00 00 00 00 00 80 3f 00
Data from fail 2900:
..?...?.....9..p 00 00 3f 00 00 00 3f 00 00 98 d1 bd 39 10 00 70
ortrait_minspec. 6f 72 74 72 61 69 74 5f 6d 69 6e 73 70 65 63 00
................ 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00
................ 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
</code></pre>Then all I need to do is look back from point of the crash to the last definitely correctly decoded part (in this case those two strings look perfectly fine). Then find where is the first definitely incorrectly decoded part (in this case 00 80 3f is clearly last 3 bytes of a float, so it was off by one at this point already).<div><br /></div><div>Then I can adjust that specific data structure's method. I don't even need to guess what that extra data is. If I see five zeroes I don't have decoding for, I just tell the converter to expect five zero bytes.</div><div><br /></div><div>Then if some other file has non-zeros at that position, I'll get nice exception like "Zero data expected, got 05 00 00 00 00", then I can pretty clearly see that first four bytes are an int32 - and the last remaining one is likely a boolean (but I'd still leave is as undecoded zero for now).</div><h3 style="text-align: left;">Debug mode</h3><div>At some point I implemented a small modification to direct conversion process. There's debug flag to control printing of various extra information like structure offsets, hex values of ints and floats and so on.</div><div><br /></div><div>Converter first converts binary to XML with debug flag off. If that process crashes - it turns debug flag on, and starts all over. This way normal XML isn't polluted by too much extra information useful only for debugging the converter, but in case of crash I get tons of extra information.</div><h3 style="text-align: left;">First three games</h3><div>The first three games were easy enough. I already had a mostly working decoder, so I used it as a starting point, and used procedure described here to fix any issues.</div><div><br /></div><div>Initially I thought about backporting fixes to the old converter, but I quickly gave up on this idea when I discovered just how extensive the changes would need to be.</div><div><br /></div><div>In any case I got converter working far better than the old one without any major difficulty.</div><h3 style="text-align: left;">Next seven games</h3><div>This is where my plan run into first problems. Starting from a working converter for version X and adding support for version X+1 is easy:</div><div><ul style="text-align: left;"><li>run conversion anyway, ignoring that version is wrong</li><li>identify where exactly it crashes (based on <i><error></i> tags and my analysis tool)</li><li>try to fix those crashes, gated by some if <i>@version >= x+1</i> checks</li></ul><div>Unfortunately first three games used versions 25 to 54, then next seven games used version 74 to 129. So I had a 20 version gap with nothing in between, and really I looked like I'd need to decode from pretty much from scratch.</div></div><h3 style="text-align: left;">Cpecific's decoder</h3><div>I'm sure I'd be able to figure out the decoding, but I found unexpected help. It turns out <a href="https://github.com/Cpecific/twwh2_ctm">Cpecific wrote a PHP-based UI layout decoder</a>. It doesn't actually convert anything - just prints JSON-style output describing contents of various UI layout files.</div><div><br /></div><div>I tried to run it on a bunch of files, and it seemed to have 80%-ish support for newer 7 games, similar to how well old decoder supported the older 3 games.</div><div><br /></div><div>The main weakness of Cpecific's decoder is that it doesn't actually convert anything - so you're expected to do hex editing, and then check in the decoder that results are what you expected. Not exactly an ideal workflow, but it super beats hex editing blind.</div><div><br /></div><div>I also couldn't fully trust its decoding, and it crashed on many files, but it was definitely a huge help at crossing the gap between <i>Version054</i> and <i>Version074</i>, and once I crossed it, it was easy going to do one version at a time.</div><div><br /></div><div>I also used it to annotate some fields with comments on what they could likely be.</div><div><br /></div><div>I don't plan to do any further development of old converter, but in case Cpecific wants to continue with his, at some point I should write down a list of issues I found and their fixes.</div><h3 style="text-align: left;">Warhammer III</h3><div>A new Total War game is coming out soon, so the converter will likely need an update. I don't expect this to be difficult - Rome 2 was the last time they did major format update.</div><div><br /></div>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com1tag:blogger.com,1999:blog-27488238.post-56745517628169690912021-06-12T04:32:00.008+02:002021-06-12T04:32:57.729+02:00Is stealth even possible?<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQjwazsM5FD9H3nuorztc6W9XNJy1Gdcu350eNoeI21D6fOWdDPWjwf9yD2Uq7RMidIKLJtFr76RnC_SWfVx-_sHPKpU1XrjPKHYYFn1HsYIyiqR2tiHMooQQU0z-amQGy_joNzw/s3258/omg_big_bird_by_stratman__busy_taking_care_of_joey__from_flickr_cc-nc-nd.jpg" style="margin-left: 1em; margin-right: 1em;" title=""OMG! BIG BIRD!" by Stratman² - (busy taking care of Joey ) from flickr (CC-NC-ND)"><img border="0" data-original-height="3258" data-original-width="2592" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQjwazsM5FD9H3nuorztc6W9XNJy1Gdcu350eNoeI21D6fOWdDPWjwf9yD2Uq7RMidIKLJtFr76RnC_SWfVx-_sHPKpU1XrjPKHYYFn1HsYIyiqR2tiHMooQQU0z-amQGy_joNzw/w510-h640/omg_big_bird_by_stratman__busy_taking_care_of_joey__from_flickr_cc-nc-nd.jpg" width="510" /></a></div><p><a alt=""OMG! BIG BIRD!" by Stratman² - (busy taking care of Joey ) from flickr (CC-NC-ND)" href="http://t-a-w.blogspot.com/2020/11/mechs-vs-tanks.html">Previously I solved the Mechs vs Tanks question</a>. Now let's move on to the next one - is stealth even possible, specifically on military aircraft?</p><p>Aircraft is usually detected at long distances by radar. <a href="https://en.wikipedia.org/wiki/Stealth_aircraft">Stealth aircraft</a> has been a thing since 1980s - it uses various tricks to make it harder to detect over long distance by typically used kinds of radar, and that's effective enough.</p><p>There's been many attempts to use different kinds of radar systems to detect stealth aircraft. They're probably at least somewhat effective, but this information is not really available to anyone. Not even in the sense of being some military secret - how well Chinese detection technology can deal with US aircraft is unknown to both China and US, and likely won't be until China invades Taiwan and needs to test in it practice.</p><h3 style="text-align: left;">Phone cameras</h3><p>However, why limit ourselves to radar? Let's do some back of an envelope calculations.</p><p>Military aircraft is about 10-15m long and wide, and moves through open space at very high speed. That's not like any natural object. Let's approximate that to 10mx10m square.</p><p>Modern consumer phones have cameras of about 100MP, or 10000x10000. If we imagine that it covers 90 FOV, then if it points at a 10km by 10km area, 10km up, each pixel covers about 1m x 1m - so aircraft will cover about 100 pixels and will be trivially detectable by even dumbest Python image recognition script, at least in daytime.</p><p>Let's assume we want to defend a big country like Iran from people fed up with its terrorism. Iran has area of 1.65 million km². As our phones each look at area 100km², spreading them so every point in the sky is seen by 10 phones at the same time - for huge redundancy, it would take just 165k phones, or at $500 each just $82m, less than one jet.</p><p>If we require lower coverage multiples, phones get better or cheaper, or we can detect enemy aircraft from less than 100 pixels, that drastically reduces the cost.</p><p>One might think that horizon would be a problem, but phones in this example are looking up, and horizon is 5km away at 2m tall pole, and 10km away at 8m tall pole.</p><p>Various terrain features like mountains are a problem for radar system - as radars are big and expensive and therefore very few. But we can cheaply install so many damn phones this problem is absolutely trivial.</p><h3 style="text-align: left;">Image Processing</h3><div>Someone not familiar with modern image processing might imagine that detecting aircraft from a picture would be hard. Nowadays this is honestly a ridiculous idea. You can create <a href="https://en.wikipedia.org/wiki/Dummy_tank">fake tanks</a> to fool the AI, but there are zero big fast moving objects in the air other than aircraft, and once you know aircraft is there, it really doesn't take much to figure out if it's a friendly, neutral, or enemy kind.</div><div><br /></div><div>I can also think of no reason why similar image processing algorithms could be used to integrate various radar signals, even if each of them separately couldn't really detect stealth aircraft.</div><h3 style="text-align: left;">Drones</h3><div>There's no reason why the cameras can't be even better, with some optics added to get performance we need, and put on drones staying in air long time. Sure, drones could be shot down, but drones are extremely cheap and only getting cheaper.</div><div><br /></div><div>The main problem with cheap consumer drones is that they typically have flight time of only about 20-30mins, so constantly recharging and relaunching them would use a lot of manpower.</div><div><br /></div><div>So while phone cameras and image processing technology is ready for this today, it might take another decade or two before drone technology catches up.</div><h3 style="text-align: left;">Limitations</h3><p>This approach works far better in daylight than during the night. Night isn't completely dark, so detection might be possible, but it would likely be far more expensive.</p><p>It only applies to stealth aircraft, as it flies through open and featureless skies, and it wouldn't work at all with stealth submarines, or even to ground based vehicles since ground is covered with interesting features which could obstruct view or make detection difficult.</p><p>Another obvious limitation is that this technology only covers your own country - at least with ground based phones. It won't help you at all if enemy plan is to just show up at your borders, fire some missiles, and head back home.</p><p>The whole idea is to have a lot of really cheap short range detectors to defeat stealth, but stealth can still deal with long range detection by radar.</p><p>This limitation can be somewhat overcome by deploying camera drones. Drone flying 1km up has horizon at 110km, so it could monitor aircraft approaching your airspace, but that's just a 3 minutes warning, so not exactly amazing.</p><p>Another use of this technology could be detecting enemy navy. You'd need to use long flight time drones for that due to distances required, but ships are really big and much slower than aircraft. Then again, <a href="https://en.wikipedia.org/wiki/Stealth_ship">surface stealth ships are an extremely marginal thing</a>.</p><p>Obviously everything here is back of an envelope calculation. But people's widespread belief that stealth technology is some kind of magic really looks ridiculous to me.</p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com2tag:blogger.com,1999:blog-27488238.post-31095130221091960452021-05-28T04:55:00.010+02:002021-07-29T23:02:58.235+02:00How to configure OSX 11.4 Big Sur for software development<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzCNQZoB9VJ9T4Jv99OSbdjpc4HMzcV9qaSc0IqA29gZpiKPKxH2PRL-KQCFX_j2yAjjxkSrsSddyXMcguRcai34E16kYCAV2hIbm9M-GFm_Gaeq_-w37soyDwauKS1lCZeOi9nA/s3464/wilma_kitten4_by_julochka_from_flickr_cc-nc.jpg" style="margin-left: 1em; margin-right: 1em;" title="wilma kitten-4 by julochka from flickr (CC-NC)"><img alt="wilma kitten-4 by julochka from flickr (CC-NC)" border="0" data-original-height="2301" data-original-width="3464" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzCNQZoB9VJ9T4Jv99OSbdjpc4HMzcV9qaSc0IqA29gZpiKPKxH2PRL-KQCFX_j2yAjjxkSrsSddyXMcguRcai34E16kYCAV2hIbm9M-GFm_Gaeq_-w37soyDwauKS1lCZeOi9nA/w640-h426/wilma_kitten4_by_julochka_from_flickr_cc-nc.jpg" width="640" /></a></div><p>With every new Macbook, I'm updating the guide, <a href="http://t-a-w.blogspot.com/2019/10/how-to-configure-osx-1014-mojave-for.html">previous version is here</a>.</p><div><h3>Basics</h3><ul><li>Go to Settings > Security > FireVault, turn on FireVault. This will restart your computer.</li><li>Install some sensible browser like <a href="https://www.google.com/chrome/browser/">Chrome</a> or <a href="https://www.mozilla.org/firefox/">Firefox</a>.</li><li>Afterwards either sign up into your account on which you hopefully have your ad blocker setup, or install some. Most popular seems to be <a href="https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm?hl=en">uBlock Origin</a> these days, but pretty much any of them will do just fine.</li><li>Install whichever cloud sync service you're using like <a href="https://www.blogger.com/install%20https://www.dropbox.com/">Dropbox</a> etc. And start syncing your stuff.</li><li>Install <a href="http://iterm2.com/">iTerm2</a> for sensible terminal emulator.</li><li>Clean up all crap from dock. Other than Launchpad and System Settings, everything else should be gone. Add iTerm2, your browser, and your text editor, and any application you wish to install there instead of stock Apple crap.</li></ul><div><h3>Editor</h3>Install some sensible text editor. These days most people use <a href="https://code.visualstudio.com/">Visual Studio Code</a>. If you do, go to Options, search "Telemetry" and disable it all.<br /><br />If that's your choice, run it, <a href="https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line">open Command Palette, and choose: "Shell Command: Install 'code' command in PATH"</a>.</div></div><div><h3>Settings</h3><span style="font-family: "times";">Like every other operating system, OSX has a lot of bad default settings. Here are some obvious fixes:</span><br /><ul></ul></div><div><ul style="text-align: left;"><li>If you have multiple monitor setup, go to Settings > Display > Arrangement and drag and drop them into correct arrangement so mouse can move between them correctly.</li><li>You might need to do it twice - with laptop screen open, and with laptop screen closed.</li><li>Also set up which will be your main monitor by dragging that white bar on top of the display icon to it. This looks like Menu placement, but it really mostly controls Dock placement.</li><li>Settings > General > Appearance > Dark</li><li>Settings > Mouse > Untick "Scroll direction: Natural" to get rid of stupid backward scrolling</li><li>Settings > Mouse > increase scrolling speed and tracking speed a bit</li><li>Settings > Keyboard > Key Repeat > Fast (max is correct)</li><li>Settings > Keyboard > Delay Until Repeat > Short (max is correct)</li><li>Settings > Sound > Disable "Play sound on startup"</li><li>Settings > Sound > Disable "Play user interface sound effects"</li><li>Settings > Sound > Alert volume > 0% (for Terminal ping)</li><li>Settings > Trackpad > Scroll & Zoom > Disable "Scroll direction: natural" (this should be done if you do it for mouse)</li><li>Settings > Displays > Max out brightness</li><li>Settings > Displays > Turn off "Automatically adjust brightness"</li><li>Settings > Dock & Menu bar > enable "Automatically hide and show the Dock"</li><li>Settings > Dock & Menu bar > Battery > Enable "Show Percentage"</li><li>Settings > Dock & Menu bar > Clock > Use a 24 hour clock</li><li>iTerm > Preferences... > Profiles > Terminal > Unlimited Scrollback</li><li>Settings > Desktop & Screen Saver > Screen Saver > Disable</li><li>Settings > Security & Privacy > Require password after sleep > 1 minute</li></ul><div>Press Ctrl-Up arrow, add a few desktops (or "spaces" as they were used to know), then go to Settings > Keyboard > Shortcuts > Mission Control - and enable their keyboard shortcuts Ctrl-1 to Ctrl-6 or however many you have there.<br /></div></div><div><br /></div><div><div>Open Screenshot app, choose options, then:</div><div><ul style="text-align: left;"><li>disable "Show Floating Thumbnail"</li><li>Save to > Other Location... choose "Downloads" folder</li></ul><div><h3>Drivers</h3>OSX already includes drivers for laptop itself, but you might need some for peripheral hardware.<br /><br />In particular, external PC keyboard need a tweak to work properly, as left and left Windows keys are in reverse order from Mac keyboard.<br /><br />Go to Settings, Keyboard, Modifier Keys..., choose the right keyboard from the dropdown (strangely I had ordinary wireless mouse selected by default), and swap positions of Option and Command keys. Feel free to change functionality of Caps Lock key as well, it's a huge easily accessible key with no useful function people love to remap, usually to extra Control.<br /><br />If you need <a href="http://t-a-w.blogspot.com/2012/05/polish-dvorak-keyboard-layout-for-osx.html">any special keyboard layouts</a>, get them too.</div></div></div><div><br /></div><div>Another thing - when you plug in external keyboard, you'll get choose keyboard type dialog. It will likely choose the wrong type. Just pick ANSI, whatever it claims to detect. Otherwise the backtick key will be wrong.</div><div><br /></div><div>Home/End keys on OSX are also broken. <a href="https://damieng.com/blog/2015/04/24/make-home-end-keys-behave-like-windows-on-mac-os-x">Use this as a fix</a>. You'll need to log out and log back in for it to take effect.</div><div><div><h3>Development tools</h3></div><div>You'll need a package manager, and the only one anyone uses is <a href="http://brew.sh/">homebrew</a>, MacPorts and the rest being basically dead. You need to tell <tt>homebrew</tt> to not spy on you with <tt>brew analytics off</tt> command.<br /><br />You'll need <a href="https://itunes.apple.com/us/app/xcode/id497799835%3C/p%3E%3Cp%3E">Xcode</a>. Fortunately homebrew installer does it for you automatically. If you don't use homebrew for some reason, you can install Xcode manually by running <tt>xcode-select --install</tt> from command line.</div></div><h3>Deal with stupid access popups</h3><div>New in Big Sur, first time you access some folders from terminal, you get a stupid popup asking you to confirm that you're indeed fine with terminal accessing various folders. So run:</div><div><tt><br /></tt></div><div><tt> find .</tt></div><div><br /></div><div>and confirm all those stupid popups to be done with it once and for all. Well, except you'll still have them when accessing USB drives and such. I'm not sure if there's any way to completely disable this nonsense.</div><div><h3>Create new SSH key pair</h3>Before you do that, name your computer something memorable with <tt>sudo scutil --set HostName your_host_name</tt> command.<br /><br />Open Terminal and run <tt>ssh-keygen</tt> to create <tt>~/.ssh/id_rsa</tt>, then upload the generated key to any place that needs to know about it like <a href="https://github.com/settings/ssh">github</a>, <a href="https://bitbucket.org/account/user/t_a_w/ssh-keys/">bitbucket</a>, or whatever else you use.</div><div><br /></div><div>Alternatively you could copy your keys from your old laptop, but it's generally more secure to have separate fresh keys for each machine.</div><div><h3>Checkout your dotfiles</h3>Hopefully you're storing your dotfiles somewhere. If it's a git repository, or your Dropbox account, get them now and symlink them all properly.<br /><br />If there are <a href="https://github.com/taw/unix-utilities">any other repositories you might need</a>, checkout them too.</div><div><div><h3>Standard paths</h3>OSX renames a lot of directories. The most annoying of those is that instead of <code>/home</code> it has <code>/Users</code>. It used to be very easy to add a symlink, but this kept getting more and more complicated, so I stopped doing this.</div><div><h3>Install homebrew packages</h3>Your list might vary. Here's a few obvious suggestions:<br /><br /><code>brew install rbenv ruby-build mc wget p7zip trash git htop bash zsh youtube-dl jq imagemagick coreutils bash-completion zsh-completion nodeenv</code><br /><br />Then enable all services you installed, unless you want to start them manually:<br /><br /> <tt>ln -sfv /usr/local/opt/*/*.plist ~/Library/LaunchAgents/</tt><br /><br />And install non-system ruby, so you can install gems without sudo. Currently latest is:<br /><br /> <tt>rbenv install 3.0.1</tt><br /> <tt>rbenv global 3.0.1</tt><br /><br />To make that actually work, you need to make sure <tt>~/.rbenv/shims</tt> is in your <tt>$PATH</tt>. If you type <code>rbenv init</code>, it will tell you what to do.<br /><br />Due to OSX limitations you'll need to run <tt>sudo htop</tt> if you want to use <tt>htop</tt>.</div><div><h3>Install gems</h3>Again, your list my vary. These days most of the software will have its own <code>Gemfile</code> so long list of gems are generally unnecessary. But some global utilities are still useful:<br /><br /><tt>gem install bundler rak pry pry-rescue</tt></div><div><tt><h3 style="font-family: "Times New Roman";">Different Shell</h3><span style="font-family: "Times New Roman";">OSX switched from ridiculously outdated bash to up to date zsh, so it's no longer a mandatory step</span></tt></div><div><tt><span style="font-family: "Times New Roman";"><br /></span></tt></div><div><tt><span style="font-family: "Times New Roman";">If you want to use system zsh, it's fine.</span></tt></div><div><tt><span style="font-family: "Times New Roman";"><br /></span></tt></div><div><tt><span style="font-family: "Times New Roman";">If you want to install something else, like proper bash (or brew version of zsh; or something else), first <code>brew install bash</code>.</span></tt></div><div><tt><br style="font-family: "Times New Roman";" /><span style="font-family: "Times New Roman";">You'll need to edit </span><span style="font-family: monospace;">/etc/shells </span><span style="font-family: "Times New Roman";">as admin and add the following lines at the end of it to enable your newly installed shell:</span><br style="font-family: "Times New Roman";" /><tt>/usr/local/bin/bash</tt><br style="font-family: "Times New Roman";" /><tt>/usr/local/bin/zsh</tt><br style="font-family: "Times New Roman";" /><br style="font-family: "Times New Roman";" /><span style="font-family: "Times New Roman";">Then set it as your shell, with whichever one you prefer:</span><br style="font-family: "Times New Roman";" /><tt><span style="font-family: "times";"> </span>chsh -s /usr/local/bin/bash $USER</tt><br style="font-family: "Times New Roman";" /><tt><span style="font-family: "times";"> </span>chsh -s /usr/local/bin/zsh $USER</tt><br style="font-family: "Times New Roman";" /></tt><h3 style="text-align: left;"><tt><span style="font-family: "Times New Roman";">Hushlogin</span></tt></h3></div><div><tt><span style="font-family: "Times New Roman";">For some reason OSX prints </span><span style="font-family: "Times New Roman";">worthless annoying messages on every open terminal tab. </span></tt>Run to <tt>touch ~/.hushlogin</tt> to prevent that.</div><div><h3>Coreutils</h3>This is optional step. OSX coreutils are generally a lot worse than GNU versions you might be used to from Linux. Switching unfortunately means occasional minor incompatibilities, but I never ran into anything serious.<br /><br />If you want to do so, <code>brew install coreutils</code>, then add GNU coreutils to your <tt>PATH</tt>:<br /><br /> <tt>export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"</tt><br /> <tt>export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"</tt></div><div><br /></div><div>OSX coreutils are not as bad as they used to (for example <code>cp -a</code> now work), so this step can be skipped.</div><div><h3>Better window manager controls</h3><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";">Sadly OSX window manager is extremely dubious for keyboard use. Fortunately programs to make it usable exist. Unfortunately there's a lot of churn among those programs, and every couple of years the ones I use become unmaintained and need to be replaced by something else.</span></div></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";"><br /></span></div><div><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";">Currently I recommend:</span></div><div><ul style="text-align: left;"><li><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";"><a href="https://github.com/rxhanson/Rectangle">Rectangle</a> - for moving windows around on big screens - I don't really like the default keybindings, so I change them to Cmd-Control-Option with 1,2,3,4 for corners, arrows for halves, and M for maximize and get rid of the rest</span></li><li><span data-darkreader-inline-color="" style="--darkreader-inline-color: #e8e6e3; color: black; font-family: "times";"><a href="https://alt-tab-macos.netlify.app/">AltTab</a> - </span>for switching between windows - it's baffling that OSX completely lacks this function - and Cmd-Tab to switch between applications is absolutely inadequate for any application that has more than one window, which is most of them (browsers, editors, terminals etc.) if you're developing software. My previous recommendation HyperSwitch no longer works.</li></ul></div><div style="text-align: left;"><span style="font-family: times;">Due to Apple's increasing levels of hostility towards Open Source software, you'll now need to open Security & Privacy > General, and then allow HyperSwitch to run.</span></div><div style="text-align: left;"><br /></div><div style="text-align: left;">You'll need to give them necessary access. To do so:<br /><ul><li>Settings > Security & Privacy > Privacy > Allow the apps below to control your computer > enable HyperSwitch and Rectangle</li></ul><div>Also open its preferences, and set it to run in the background, show in menu bar, and start at login.</div></div><div><h3 data-darkreader-inline-color="" style="-webkit-text-stroke-width: 0px; font-family: Times;">Open files limit</h3><div>For some insane reason OSX has default open file limit of only 256, and that breaks a lot of software like databases. And every new OSX version breaks </div><div><br /></div><div>You will need to fix this (<a href="https://superuser.com/questions/1634286/how-do-i-increase-the-max-open-files-in-macos-big-sur">current instructions</a>), restart computer, and put <code>ulimit -n 100000</code> in your .zshrc for good measure.</div><h3 style="text-align: left;">Lower security settings</h3><div>Unix used to have very simple model where root user could do anything, and that was great for development. OSX keeps adding more and more security restrictions. They are absolutely detrimental to developing software, and of questionable value to regular users - primarily they're Apple's way of slowly turning computer world into something more like iOS world where they can decide who can run what and take 30% tax on everything.</div><div><br /></div><div>You'll need to disable some of them. Most important such setting is this:</div><div><pre>sudo spctl --master-disable</pre></div><div>After you run it and reboot, a lot of software like Ghidra will work properly.</div><div><br /></div><div><a href="https://stackoverflow.com/questions/60908765/mac-osx-using-dtruss">If you want to use dtrace (OSX equivalent of strace), you'll need to follow these more complicated steps to disable SIP first</a>.</div><h3 data-darkreader-inline-color="" style="-webkit-text-stroke-width: 0px; font-family: Times;">Enable ssh access</h3><div><div>You need to tick both:</div><ul style="text-align: left;"><li>Settings > Sharing > Remote Login > Turn on</li><li>Settings > Sharing > Remote Login > Allow full disk access for remote users</li></ul></div><h3 data-darkreader-inline-color="" style="-webkit-text-stroke-width: 0px; font-family: Times;">Android File Transfer</h3><div>It's honestly embarrassing to both OSX and Android that there's no out-of-the-box way to move files between them either over WiFi or USB cable.</div><div><br /></div><div>There's official Android File Transfer program but it's just awful. <a href="https://openmtp.ganeshrvel.com/">OpenMTP</a> is somewhat less awful, but still not great. If you know of any program that's actually good, definitely let me know.</div><h3 data-darkreader-inline-color="" style="-webkit-text-stroke-width: 0px; font-family: Times;">All other software</h3><div>There's a lot of other software you might want. The most obvious one is the <a href="http://www.videolan.org/vlc/index.html">VLC</a> media player.</div><div><br /></div><div>You might also want some kind of Git UI program, like <a href="https://gitup.co/">GitUp</a> (<code>brew install homebrew/cask/gitup</code>).</div><div><br /></div><div>If you want to use SSHFS, the one in homebrew (macfuse and sshfs packages) don't seem to work, so you might want to try <a href="https://osxfuse.github.io/">downloadable versions</a>. First time you try to use it, OSX will block it, so you'll need to go to Settings > Security & Privacy, allow it there, and restart (you'll get popup for that).</div><h3>Enjoy</h3>Once you go through this list, and successfully get everything going, I'd recommend modifying it to your liking and reposting your version on your blog. Everybody's needs are different, so guide like this is just a starting point.</div>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com2tag:blogger.com,1999:blog-27488238.post-67755507547191522502021-04-30T19:01:00.000+02:002021-04-30T19:01:28.921+02:00Ranking of all EU4 religions for 1.31.1<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk6_M_CU4I76XhqOSPqndAjVq44soA-KST2ROxvEDsh5lM7MFPF_uGY6ocgHRU3O1xYxMHX33l_vROfpIMOnqnPDOlF5jCMk_okf-cicZ_zhBh5ppM8VM_0BzKWsQ8q8COwXJWhA/s3600/sad_cat_diary_by_greyloch_from_flickr_cc-sa.jpg" style="margin-left: 1em; margin-right: 1em;" title="sad cat diary by greyloch from flickr (CC-SA)"><img alt="sad cat diary by greyloch from flickr (CC-SA)" border="0" data-original-height="2400" data-original-width="3600" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk6_M_CU4I76XhqOSPqndAjVq44soA-KST2ROxvEDsh5lM7MFPF_uGY6ocgHRU3O1xYxMHX33l_vROfpIMOnqnPDOlF5jCMk_okf-cicZ_zhBh5ppM8VM_0BzKWsQ8q8COwXJWhA/w640-h426/sad_cat_diary_by_greyloch_from_flickr_cc-sa.jpg" width="640" /></a></div><br /><p><a href="http://t-a-w.blogspot.com/2020/12/ranking-of-all-eu4-religions.html">I recently posted EU4 1.30 religion ranking</a>, and 1.31 completely flipped it around.</p>
<p>There are minor religion specific changes:</p>
<ul>
<li>whole new religion Alcheringa for Australian natives, similar to Fetishist - it has really good Rainbow Serpent cult (+1 a month to every monarch power!), but it's locked behind completing 10 missions, and you won't even get any of those missions if you flip to Alcheringa somehow</li>
<li>Zoroastrians have Coptic style holy site system. Of these +5% trade goods bonus is currently broken in 1.31.1 as they accidentally coded local not global modifier, but there's no province it applies to, but I'm treating it as if it was working correctly.</li>
<li>Totemists got ancestor worship system, that's potentially very powerful, but it's very RNG driven who you get into your ancestor pool, and very slow to get all 10</li>
<li>Sikhs getting new system, but it doesn't seem to work correctly, so I didn't include it in this analysis, and treating Sikhs as if you didn't have the latest DLC. So actual Sikhs should be ranked higher once it works properly.</li>
</ul>
<p>But by far the most important is monument system. Monuments are either universally accessible, or locked to specific religions, and having access to best monuments makes certain religions far stronger. In this analysis I assume you got every single monument allowed by your religion, at max tier. This isn't even that many - no religion has more than 7 monuments, usually they're conveniently located, and really most of the power is in top few like Alhambra and Petra.</p>
<p>Some monuments are also culture locked, but all it does is requiring you to accept local culture, and accepted culture slots are generous enough that this can be ignored. The only exception is Pyramids which require you to be either Pagan religion or Egyptian culture. I'm treating them as requiring Pagan religion, but Mamluks specifically can use them (but not really anybody else non-Pagan unless you culture flip).</p>
<p>Monuments were broken beyond belief at release, already got nerfed between 1.30.0 and 1.31.1, losing about 1/4 of their original value, but strongest ones got nerfed the hardest. But monuments still completely dominate this system, so we can expect further nerfs.</p>
<h3 id="summary-of-results">Summary of results</h3>
<ul>
<li>SS Tier - maxed out Orthodox (takes time), maxed out Coptic (takes time), Catholic + Curia Controller (very hard to do reliably)</li>
<li>S Tier - Sunni (easiest to max out early), more realistic Orthodox, Hussite, Buddhist + neutral karma (basically impossible), Totemist + 10 best ancestors (basically impossible in any reasonable time)</li>
<li>A Tier - Hussite, Protestant, Reformed</li>
<li>B Tier - Shia, Ibadi, Fully Reformed New World religions (hilariously fell from S tier here, and your subjects will not have full reforms!), Buddhist + high karma (basically impossible), Sikh, Catholic (without curia), Hindu</li>
<li>C Tier - Alcheringa with best cult (takes very long time), Totemint + realistic ancestors, Anglican</li>
<li>D Tier - Alcheringa with early cults, Tengri, Shinto, Buddhist + low karma (what you'll most likely see), unreformed New World religions, Norse, Animist, Confucian (once it finishen harmonizing everyone)</li>
<li>F Tier - Jewish (bonuses barely worth anything, and zero monuments)</li>
<li>FF Tier - Confucian</li>
</ul>
<p>So basically religions not able to get Alhambra, even in its nerfed state, are bad. Non-Sunni Muslims cannot benefit from Alhambda so the winner among Muslims is absolutely clear now. Christians, Muslims, Indians, and Buddhists got decent number of monuments. Rest of the world, not so much.</p>
<p>Orthodox, Coptic, and Sunni, already strongest religions, got even stronger.</p>
<p>The biggest losers are Jewish, Shinto, and Confucian. Confucian at least got consolation prize in a bit extra harmony from monuments, and ability to culture convert, so it can complete its suffering a bit earlier.</p>
<p>The Jews got nothing. In addition to balance issues, I find it baffling what got and what didn't get a monument. The most ridiculous case is how the hell there's no buildable Third Temple is Jerusalem for the Jews? Like, how could they have missed that? How can one possibly have a satisfying Jewish campaign, that doesn't include rebuilding the Third Temple? CK2 has it for sure.</p>
<p>Shinto also got basically nothing.</p>
<p>There's also some other things I expected to get monument, like <a href="https://en.wikipedia.org/wiki/Malbork_Castle">world's largest castle in Malbork, and administrative center of Teutonic Order</a>.</p>
<h3 id="all-scores">All scores</h3>
<ul>
<li>11.744400 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 100% Patriarchy + Icon of Eleusa</li>
<li>11.647900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 100% Patriarchy + Icon of St. Michael</li>
<li>11.207900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 100% Patriarchy + Icon of St. Nicholas</li>
<li>10.629800 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 100% Patriarchy + Icon of Christ Pantocrator</li>
<li>10.539400 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 50% Patriarchy + Icon of Eleusa</li>
<li>10.460100 - Coptic + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral, Hagia Sophia) + Promote Territorial Rights + Send Monks to Establish Monasteries + Will of the Martyrs + Legitimize Government + Encourage Warriors of the Faith</li>
<li>10.452900 - Catholic + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral, Saint Peter's Basilica) + Curia Controller</li>
<li>10.442900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 50% Patriarchy + Icon of St. Michael</li>
<li>10.327900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 100% Patriarchy + Icon of St. John Climacus</li>
<li>10.207900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 100% Patriarchy + No Icon</li>
<li>10.100100 - Coptic + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral, Hagia Sophia) + Promote Territorial Rights + Send Monks to Establish Monasteries + Will of the Martyrs + Legitimize Government</li>
<li>10.002900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 50% Patriarchy + Icon of St. Nicholas</li>
<li>9.701400 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Shafi'i + Legalism</li>
<li>9.650100 - Coptic + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral, Hagia Sophia) + Promote Territorial Rights + Send Monks to Establish Monasteries + Will of the Martyrs</li>
<li>9.424800 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 50% Patriarchy + Icon of Christ Pantocrator</li>
<li>9.365400 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Shafi'i + Mysticism</li>
<li>9.334400 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 0% Patriarchy + Icon of Eleusa</li>
<li>9.276600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just + Charismatic Negotiator + Industrious + Silver Tongue + Entrepreneur</li>
<li>9.237900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 0% Patriarchy + Icon of St. Michael</li>
<li>9.201400 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Hanbali + Legalism</li>
<li>9.186700 - Mahayana + Monuments (Bagan Temples, Buddha Statues, Angkor Wat, Jokhang Temple, Shwedagon Pagoda) + Neutral Karma</li>
<li>9.181700 - Vajrayana + Monuments (Bagan Temples, Buddha Statues, Angkor Wat, Jokhang Temple, Shwedagon Pagoda) + Neutral Karma</li>
<li>9.176700 - Theravada + Monuments (Bagan Temples, Buddha Statues, Angkor Wat, Jokhang Temple, Shwedagon Pagoda, Mount Fuji) + Neutral Karma</li>
<li>9.122900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 50% Patriarchy + Icon of St. John Climacus</li>
<li>9.110100 - Coptic + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral, Hagia Sophia) + Promote Territorial Rights + Send Monks to Establish Monasteries</li>
<li>9.078700 - Hussite + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral) + Taborite Resurgence + Sola Scriptura + Bread and Wine</li>
<li>9.002900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 50% Patriarchy + No Icon</li>
<li>8.961400 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Hanafi + Legalism</li>
<li>8.956600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just + Charismatic Negotiator + Industrious + Silver Tongue</li>
<li>8.895300 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Maliki + Legalism</li>
<li>8.865400 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Hanbali + Mysticism</li>
<li>8.828700 - Protestant + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral) + Holy Sacraments + Translated Bibles + Adult Baptism</li>
<li>8.797900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 0% Patriarchy + Icon of St. Nicholas</li>
<li>8.625400 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Hanafi + Mysticism</li>
<li>8.559300 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Maliki + Mysticism</li>
<li>8.556600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just + Charismatic Negotiator + Industrious</li>
<li>8.476500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Amar Das</li>
<li>8.360100 - Coptic + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral, Hagia Sophia) + Promote Territorial Rights</li>
<li>8.300700 - Reformed + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral) + Fervent focus on stability</li>
<li>8.219800 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 0% Patriarchy + Icon of Christ Pantocrator</li>
<li>8.140600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just + Charismatic Negotiator</li>
<li>8.083300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Shafi'i + Legalism</li>
<li>7.917900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 0% Patriarchy + Icon of St. John Climacus</li>
<li>7.806100 - Mayan + Monuments (City of Khami, Pyramid of Cheops) + Tribal Expansion + Reform the Bureaucracy + Central Arbitration + Central Armories + A Unified Army</li>
<li>7.797900 - Orthodox + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Kiev Pechersk Lavra, Cologne Cathedral, Hagia Sophia) + 0% Patriarchy + No Icon</li>
<li>7.783300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Ismaili + Legalism</li>
<li>7.747300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Shafi'i + Mysticism</li>
<li>7.653800 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 0% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions + Legal Reform</li>
<li>7.646700 - Mahayana + Monuments (Bagan Temples, Buddha Statues, Angkor Wat, Jokhang Temple, Shwedagon Pagoda) + Low Karma</li>
<li>7.641700 - Vajrayana + Monuments (Bagan Temples, Buddha Statues, Angkor Wat, Jokhang Temple, Shwedagon Pagoda) + Low Karma</li>
<li>7.640600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just</li>
<li>7.637300 - Shia + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Ismaili + Legalism</li>
<li>7.636700 - Theravada + Monuments (Bagan Temples, Buddha Statues, Angkor Wat, Jokhang Temple, Shwedagon Pagoda, Mount Fuji) + Low Karma</li>
<li>7.623300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Zaidi + Legalism</li>
<li>7.623300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Jafari + Legalism</li>
<li>7.606700 - Mahayana + Monuments (Bagan Temples, Buddha Statues, Angkor Wat, Jokhang Temple, Shwedagon Pagoda) + High Karma</li>
<li>7.601700 - Vajrayana + Monuments (Bagan Temples, Buddha Statues, Angkor Wat, Jokhang Temple, Shwedagon Pagoda) + High Karma</li>
<li>7.596700 - Theravada + Monuments (Bagan Temples, Buddha Statues, Angkor Wat, Jokhang Temple, Shwedagon Pagoda, Mount Fuji) + High Karma</li>
<li>7.584300 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Gobind Singh</li>
<li>7.583300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Hanbali + Legalism</li>
<li>7.566500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Granth Sahib</li>
<li>7.556500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Hargobind</li>
<li>7.536100 - Mayan + Monuments (City of Khami, Pyramid of Cheops) + Tribal Expansion + Reform the Bureaucracy + Central Arbitration + Central Armories</li>
<li>7.509400 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 0% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions</li>
<li>7.477300 - Shia + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Zaidi + Legalism</li>
<li>7.477300 - Shia + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Jafari + Legalism</li>
<li>7.447300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Ismaili + Mysticism</li>
<li>7.427200 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 100% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment + Reform the Cult of Inti</li>
<li>7.400700 - Reformed + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral) + Fervent focus on war</li>
<li>7.376500 - Hindu + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Shakti</li>
<li>7.343300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Hanafi + Legalism</li>
<li>7.330900 - Hindu + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Shiva</li>
<li>7.325700 - Coptic + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral, Hagia Sophia)</li>
<li>7.301300 - Shia + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Ismaili + Mysticism</li>
<li>7.287300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Zaidi + Mysticism</li>
<li>7.287300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Jafari + Mysticism</li>
<li>7.280700 - Reformed + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral) + Fervent focus on trade</li>
<li>7.277200 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Maliki + Legalism</li>
<li>7.247300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Hanbali + Mysticism</li>
<li>7.246500 - Hindu + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Vishnu</li>
<li>7.177200 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 100% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment</li>
<li>7.141300 - Shia + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Zaidi + Mysticism</li>
<li>7.141300 - Shia + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Jafari + Mysticism</li>
<li>7.140600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict + Scholar + Bold Fighter + Zealot + Righteous</li>
<li>7.125400 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Shafi'i + Neutral Piety</li>
<li>7.120800 - Anglican + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral)</li>
<li>7.076500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Angad</li>
<li>7.040600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 0% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations</li>
<li>7.039300 - Mayan + Monuments (City of Khami, Pyramid of Cheops) + Tribal Expansion + Reform the Bureaucracy + Central Arbitration</li>
<li>7.007300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Hanafi + Mysticism</li>
<li>6.976500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Har Rai</li>
<li>6.946500 - Hindu + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Ganesha</li>
<li>6.941200 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Maliki + Mysticism</li>
<li>6.925700 - Catholic + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral, Saint Peter's Basilica)</li>
<li>6.891100 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 50% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment + Reform the Cult of Inti</li>
<li>6.817200 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 100% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords</li>
<li>6.800700 - Reformed + Monuments (Alhambra, Petra, Heddal Stave Church, Notre-Dame Cathedral, Cologne Cathedral) + No Fervor</li>
<li>6.676500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Arjan</li>
<li>6.654500 - Hindu + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Surya</li>
<li>6.653800 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 50% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions + Legal Reform</li>
<li>6.641100 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 50% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment</li>
<li>6.640600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict + Scholar + Bold Fighter + Zealot</li>
<li>6.625400 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Hanbali + Neutral Piety</li>
<li>6.576500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Tegh Bahadur</li>
<li>6.566500 - Hindu + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Buddha</li>
<li>6.548700 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Ram Das</li>
<li>6.509400 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 50% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions</li>
<li>6.476500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + No Guru</li>
<li>6.476500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Har Krishan</li>
<li>6.476500 - Sikh + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Guru Granth Sahib</li>
<li>6.385400 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Hanafi + Neutral Piety</li>
<li>6.355000 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 0% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment + Reform the Cult of Inti</li>
<li>6.335500 - Mayan + Tribal Expansion + Reform the Bureaucracy + Central Arbitration + Central Armories + A Unified Army</li>
<li>6.319300 - Sunni + Monuments (Alhambra, Petra, Registan Square, Hagia Sophia, Taj Mahal) + Maliki + Neutral Piety</li>
<li>6.290600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 0% Doom + Tribal Expansion + Warrior Ranks</li>
<li>6.289500 - Hindu + Monuments (Prambanan Temple, Angkor Wat, Harmandir Sahib, Pura Besakih) + Ganga</li>
<li>6.281100 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 50% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords</li>
<li>6.277200 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 100% Authority + Expanded Mitma Policy + Reform the Bureaucracy</li>
<li>6.183200 - Nahuatl + 0% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions + Legal Reform</li>
<li>6.140600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict + Scholar + Bold Fighter</li>
<li>6.106000 - Totemist + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just + Charismatic Negotiator + Industrious + Silver Tongue + Entrepreneur</li>
<li>6.105000 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 0% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment</li>
<li>6.065500 - Mayan + Tribal Expansion + Reform the Bureaucracy + Central Arbitration + Central Armories</li>
<li>6.040600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 50% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations</li>
<li>6.039300 - Mayan + Monuments (City of Khami, Pyramid of Cheops) + Tribal Expansion + Reform the Bureaucracy</li>
<li>6.038800 - Nahuatl + 0% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions</li>
<li>5.956600 - Inti + 100% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment + Reform the Cult of Inti</li>
<li>5.786000 - Totemist + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just + Charismatic Negotiator + Industrious + Silver Tongue</li>
<li>5.745000 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 0% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords</li>
<li>5.741100 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 50% Authority + Expanded Mitma Policy + Reform the Bureaucracy</li>
<li>5.706600 - Inti + 100% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment</li>
<li>5.653800 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 100% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions + Legal Reform</li>
<li>5.600600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict + Scholar</li>
<li>5.570000 - Nahuatl + 0% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations</li>
<li>5.568700 - Mayan + Tribal Expansion + Reform the Bureaucracy + Central Arbitration</li>
<li>5.509400 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 100% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions</li>
<li>5.507300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Shafi'i + Neutral Piety</li>
<li>5.420500 - Inti + 50% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment + Reform the Cult of Inti</li>
<li>5.386000 - Totemist + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just + Charismatic Negotiator + Industrious</li>
<li>5.346600 - Inti + 100% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords</li>
<li>5.290600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 50% Doom + Tribal Expansion + Warrior Ranks</li>
<li>5.242800 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 100% Authority + Expanded Mitma Policy</li>
<li>5.240600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + The Rainbow Serpent</li>
<li>5.210600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 0% Doom + Tribal Expansion</li>
<li>5.207300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Ismaili + Neutral Piety</li>
<li>5.205000 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 0% Authority + Expanded Mitma Policy + Reform the Bureaucracy</li>
<li>5.183200 - Nahuatl + 50% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions + Legal Reform</li>
<li>5.170500 - Inti + 50% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment</li>
<li>5.061300 - Shia + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Ismaili + Neutral Piety</li>
<li>5.047300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Zaidi + Neutral Piety</li>
<li>5.047300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Jafari + Neutral Piety</li>
<li>5.040600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 100% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations</li>
<li>5.038800 - Nahuatl + 50% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions</li>
<li>5.007300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Hanbali + Neutral Piety</li>
<li>5.000600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops) + Strict</li>
<li>4.977000 - Zoroastrian + Monuments (Baku Ateshgah) + Navjote + Manthras + Haoma + Dakhma + Yasna</li>
<li>4.970000 - Totemist + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just + Charismatic Negotiator</li>
<li>4.932000 - Zoroastrian + Monuments (Baku Ateshgah) + Navjote + Manthras + Haoma + Dakhma</li>
<li>4.901300 - Shia + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Zaidi + Neutral Piety</li>
<li>4.901300 - Shia + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Jafari + Neutral Piety</li>
<li>4.884400 - Inti + 0% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment + Reform the Cult of Inti</li>
<li>4.820000 - Nahuatl + 0% Doom + Tribal Expansion + Warrior Ranks</li>
<li>4.818000 - Zoroastrian + Monuments (Baku Ateshgah) + Navjote + Manthras + Haoma</li>
<li>4.810500 - Inti + 50% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords</li>
<li>4.806600 - Inti + 100% Authority + Expanded Mitma Policy + Reform the Bureaucracy</li>
<li>4.767300 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Hanafi + Neutral Piety</li>
<li>4.706700 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 50% Authority + Expanded Mitma Policy</li>
<li>4.701200 - Ibadi + Monuments (Alhambra, Registan Square, Hagia Sophia, Taj Mahal) + Maliki + Neutral Piety</li>
<li>4.634400 - Inti + 0% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords + Organized Recruitment</li>
<li>4.610000 - Zoroastrian + Monuments (Baku Ateshgah) + Navjote + Manthras</li>
<li>4.570000 - Nahuatl + 50% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations</li>
<li>4.568700 - Mayan + Tribal Expansion + Reform the Bureaucracy</li>
<li>4.470000 - Totemist + Strict + Scholar + Bold Fighter + Zealot + Righteous + Just</li>
<li>4.440600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Baiame</li>
<li>4.290600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 100% Doom + Tribal Expansion + Warrior Ranks</li>
<li>4.274400 - Inti + 0% Authority + Expanded Mitma Policy + Reform the Bureaucracy + Yana Lords</li>
<li>4.270500 - Inti + 50% Authority + Expanded Mitma Policy + Reform the Bureaucracy</li>
<li>4.268700 - Orthodox + 100% Patriarchy + Icon of Eleusa</li>
<li>4.250600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Mazdayasna</li>
<li>4.210600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 50% Doom + Tribal Expansion</li>
<li>4.183200 - Nahuatl + 100% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions + Legal Reform</li>
<li>4.172200 - Orthodox + 100% Patriarchy + Icon of St. Michael</li>
<li>4.170600 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 0% Authority + Expanded Mitma Policy</li>
<li>4.038800 - Nahuatl + 100% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations + Open up Sumptuary Restrictions</li>
<li>3.992000 - Ibadi + Shafi'i + Legalism</li>
<li>3.970600 - Mayan + Monuments (City of Khami, Pyramid of Cheops) + Tribal Expansion</li>
<li>3.970000 - Totemist + Strict + Scholar + Bold Fighter + Zealot + Righteous</li>
<li>3.920600 - Totemist + Monuments (Mesa Verde, City of Khami, Pyramid of Cheops)</li>
<li>3.820000 - Nahuatl + 50% Doom + Tribal Expansion + Warrior Ranks</li>
<li>3.772200 - Inti + 100% Authority + Expanded Mitma Policy</li>
<li>3.770000 - Alcheringa + The Rainbow Serpent</li>
<li>3.752200 - Catholic + Curia Controller</li>
<li>3.740600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Wagyl</li>
<li>3.740600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + The Spirits</li>
<li>3.740000 - Nahuatl + 0% Doom + Tribal Expansion</li>
<li>3.734400 - Inti + 0% Authority + Expanded Mitma Policy + Reform the Bureaucracy</li>
<li>3.732200 - Orthodox + 100% Patriarchy + Icon of St. Nicholas</li>
<li>3.710000 - Zoroastrian + Monuments (Baku Ateshgah) + Navjote</li>
<li>3.692000 - Ibadi + Ismaili + Legalism</li>
<li>3.656000 - Ibadi + Shafi'i + Mysticism</li>
<li>3.576000 - Sunni + Shafi'i + Legalism</li>
<li>3.570000 - Nahuatl + 100% Doom + Tribal Expansion + Warrior Ranks + Extend Pochteca Obligations</li>
<li>3.546000 - Shia + Ismaili + Legalism</li>
<li>3.532000 - Ibadi + Zaidi + Legalism</li>
<li>3.532000 - Ibadi + Jafari + Legalism</li>
<li>3.507800 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Lumaluma</li>
<li>3.492000 - Ibadi + Hanbali + Legalism</li>
<li>3.484400 - Coptic + Promote Territorial Rights + Send Monks to Establish Monasteries + Will of the Martyrs + Legitimize Government + Encourage Warriors of the Faith</li>
<li>3.470000 - Totemist + Strict + Scholar + Bold Fighter + Zealot</li>
<li>3.386000 - Shia + Zaidi + Legalism</li>
<li>3.386000 - Shia + Jafari + Legalism</li>
<li>3.356000 - Ibadi + Ismaili + Mysticism</li>
<li>3.320600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Adnoartina</li>
<li>3.280600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Islamic Dreaming</li>
<li>3.252000 - Ibadi + Hanafi + Legalism</li>
<li>3.250600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Waaq</li>
<li>3.240600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + The Ancestors</li>
<li>3.240000 - Sunni + Shafi'i + Mysticism</li>
<li>3.236100 - Inti + 50% Authority + Expanded Mitma Policy</li>
<li>3.210600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 100% Doom + Tribal Expansion</li>
<li>3.210000 - Shia + Ismaili + Mysticism</li>
<li>3.196000 - Ibadi + Zaidi + Mysticism</li>
<li>3.196000 - Ibadi + Jafari + Mysticism</li>
<li>3.185900 - Ibadi + Maliki + Legalism</li>
<li>3.156000 - Ibadi + Hanbali + Mysticism</li>
<li>3.154100 - Orthodox + 100% Patriarchy + Icon of Christ Pantocrator</li>
<li>3.124400 - Coptic + Promote Territorial Rights + Send Monks to Establish Monasteries + Will of the Martyrs + Legitimize Government</li>
<li>3.087000 - Zoroastrian + Navjote + Manthras + Haoma + Dakhma + Yasna</li>
<li>3.076000 - Sunni + Hanbali + Legalism</li>
<li>3.063700 - Orthodox + 50% Patriarchy + Icon of Eleusa</li>
<li>3.050600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Shinto</li>
<li>3.050000 - Shia + Zaidi + Mysticism</li>
<li>3.050000 - Shia + Jafari + Mysticism</li>
<li>3.042800 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 100% Authority</li>
<li>3.042000 - Zoroastrian + Navjote + Manthras + Haoma + Dakhma</li>
<li>3.010600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 0% Doom</li>
<li>2.980600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Crow</li>
<li>2.970000 - Alcheringa + Baiame</li>
<li>2.970000 - Totemist + Strict + Scholar + Bold Fighter</li>
<li>2.967200 - Orthodox + 50% Patriarchy + Icon of St. Michael</li>
<li>2.928000 - Zoroastrian + Navjote + Manthras + Haoma</li>
<li>2.916000 - Ibadi + Hanafi + Mysticism</li>
<li>2.852200 - Orthodox + 100% Patriarchy + Icon of St. John Climacus</li>
<li>2.849900 - Ibadi + Maliki + Mysticism</li>
<li>2.840600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Moinee</li>
<li>2.836000 - Sunni + Hanafi + Legalism</li>
<li>2.820000 - Nahuatl + 100% Doom + Tribal Expansion + Warrior Ranks</li>
<li>2.820000 - Sikh + Guru Amar Das</li>
<li>2.790600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Mwari</li>
<li>2.790600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Enkai</li>
<li>2.780000 - Fetishist + Mazdayasna</li>
<li>2.769900 - Sunni + Maliki + Legalism</li>
<li>2.750600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Nyame</li>
<li>2.750600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Mlira</li>
<li>2.740000 - Nahuatl + 50% Doom + Tribal Expansion</li>
<li>2.740000 - Sunni + Hanbali + Mysticism</li>
<li>2.732200 - Orthodox + 100% Patriarchy + No Icon</li>
<li>2.720600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Zoroastrian</li>
<li>2.720000 - Zoroastrian + Navjote + Manthras</li>
<li>2.719400 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Zanahary</li>
<li>2.710600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Dharmic Dreaming</li>
<li>2.710000 - Zoroastrian + Monuments (Baku Ateshgah)</li>
<li>2.703900 - Confucian + Monuments (Temple of Confucius, The Forbidden City) + High Harmony + All Harmony Bonuses</li>
<li>2.700000 - Inti + 0% Authority + Expanded Mitma Policy</li>
<li>2.674400 - Coptic + Promote Territorial Rights + Send Monks to Establish Monasteries + Will of the Martyrs</li>
<li>2.666600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Sanatana Dharma</li>
<li>2.650600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Cwezi</li>
<li>2.634500 - Confucian + High Harmony + All Harmony Bonuses</li>
<li>2.627000 - Norse + Monuments (City of Khami, Pyramid of Cheops) + Odin</li>
<li>2.622600 - Norse + Monuments (City of Khami, Pyramid of Cheops) + Tyr</li>
<li>2.565600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Erathipa</li>
<li>2.530600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Freyja</li>
<li>2.527200 - Orthodox + 50% Patriarchy + Icon of St. Nicholas</li>
<li>2.520600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Teotl</li>
<li>2.506700 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 50% Authority</li>
<li>2.500000 - Mayan + Tribal Expansion</li>
<li>2.500000 - Sunni + Hanafi + Mysticism</li>
<li>2.490600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Haymanot</li>
<li>2.453900 - Confucian + Monuments (Temple of Confucius, The Forbidden City) + Neutral Harmony + All Harmony Bonuses</li>
<li>2.444500 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Buddhadharma</li>
<li>2.433900 - Sunni + Maliki + Mysticism</li>
<li>2.430000 - Totemist + Strict + Scholar</li>
<li>2.414500 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Theravada</li>
<li>2.384500 - Confucian + Neutral Harmony + All Harmony Bonuses</li>
<li>2.380000 - Mahayana + Neutral Karma</li>
<li>2.378000 - Hussite + Taborite Resurgence + Sola Scriptura + Bread and Wine</li>
<li>2.375000 - Vajrayana + Neutral Karma</li>
<li>2.370600 - Norse + Monuments (City of Khami, Pyramid of Cheops) + Snotra</li>
<li>2.370600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Roog</li>
<li>2.370000 - Theravada + Neutral Karma</li>
<li>2.350600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Christianity</li>
<li>2.313600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Yemoja</li>
<li>2.300600 - Alcheringa + Monuments (City of Khami, Pyramid of Cheops) + Djunkgao Sisters</li>
<li>2.278600 - Norse + Monuments (City of Khami, Pyramid of Cheops) + Njord</li>
<li>2.270000 - Alcheringa + Wagyl</li>
<li>2.270000 - Alcheringa + The Spirits</li>
<li>2.250600 - Fetishist + Monuments (City of Khami, Pyramid of Cheops) + Islam</li>
<li>2.240600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Sikh</li>
<li>2.230600 - Norse + Monuments (City of Khami, Pyramid of Cheops) + Freya</li>
<li>2.220600 - Animist + Monuments (City of Khami, Pyramid of Cheops)</li>
<li>2.210600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Reformed</li>
<li>2.210600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Alcheringa</li>
<li>2.182600 - Norse + Monuments (City of Khami, Pyramid of Cheops) + Tor</li>
<li>2.134400 - Coptic + Promote Territorial Rights + Send Monks to Establish Monasteries</li>
<li>2.128000 - Protestant + Holy Sacraments + Translated Bibles + Adult Baptism</li>
<li>2.070600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Coptic</li>
<li>2.062800 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Confucian</li>
<li>2.038600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Mahayana</li>
<li>2.037200 - Alcheringa + Lumaluma</li>
<li>2.020600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Catholic</li>
<li>2.010600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 50% Doom</li>
<li>2.000600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Totemist</li>
<li>2.000600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Fetishist</li>
<li>2.000600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Animist</li>
<li>1.980600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Shia</li>
<li>1.970600 - Inti + Monuments (City of Khami, Pyramid of Cheops) + 0% Authority</li>
<li>1.970600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Protestant</li>
<li>1.970600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Inti</li>
<li>1.970600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Anglican</li>
<li>1.949100 - Orthodox + 50% Patriarchy + Icon of Christ Pantocrator</li>
<li>1.927800 - Sikh + Guru Gobind Singh</li>
<li>1.920600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Orthodox</li>
<li>1.910000 - Sikh + Guru Granth Sahib</li>
<li>1.900000 - Sikh + Guru Hargobind</li>
<li>1.858700 - Orthodox + 0% Patriarchy + Icon of Eleusa</li>
<li>1.850000 - Alcheringa + Adnoartina</li>
<li>1.830000 - Totemist + Strict</li>
<li>1.820000 - Zoroastrian + Navjote</li>
<li>1.810000 - Alcheringa + Islamic Dreaming</li>
<li>1.790600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Sunni</li>
<li>1.780000 - Fetishist + Waaq</li>
<li>1.775600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Hindu</li>
<li>1.770600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Ibadi</li>
<li>1.770600 - Mayan + Monuments (City of Khami, Pyramid of Cheops)</li>
<li>1.770000 - Alcheringa + The Ancestors</li>
<li>1.762200 - Orthodox + 0% Patriarchy + Icon of St. Michael</li>
<li>1.760600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Jewish</li>
<li>1.740600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Nahuatl</li>
<li>1.740000 - Nahuatl + 100% Doom + Tribal Expansion</li>
<li>1.720600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Vajrayana</li>
<li>1.720000 - Hindu + Shakti</li>
<li>1.674400 - Hindu + Shiva</li>
<li>1.647200 - Orthodox + 50% Patriarchy + Icon of St. John Climacus</li>
<li>1.605600 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Hussite</li>
<li>1.600000 - Reformed + Fervent focus on stability</li>
<li>1.592800 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Mayan</li>
<li>1.590000 - Hindu + Vishnu</li>
<li>1.580000 - Tengri + Shinto</li>
<li>1.572200 - Inti + 100% Authority</li>
<li>1.540000 - Nahuatl + 0% Doom</li>
<li>1.540000 - Shinto + Monuments (Mount Fuji) + Isolationism (3)</li>
<li>1.540000 - Shinto + Isolationism (3)</li>
<li>1.527200 - Orthodox + 50% Patriarchy + No Icon</li>
<li>1.511900 - Tengri + Monuments (City of Khami, Pyramid of Cheops) + Norse</li>
<li>1.510000 - Alcheringa + Crow</li>
<li>1.420000 - Sikh + Guru Angad</li>
<li>1.416000 - Ibadi + Shafi'i + Neutral Piety</li>
<li>1.384400 - Coptic + Promote Territorial Rights</li>
<li>1.370000 - Alcheringa + Moinee</li>
<li>1.322200 - Orthodox + 0% Patriarchy + Icon of St. Nicholas</li>
<li>1.320000 - Fetishist + Mwari</li>
<li>1.320000 - Fetishist + Enkai</li>
<li>1.320000 - Sikh + Guru Har Rai</li>
<li>1.290000 - Hindu + Ganesha</li>
<li>1.280000 - Fetishist + Nyame</li>
<li>1.280000 - Fetishist + Mlira</li>
<li>1.268000 - Shinto + Selective Integration (2)</li>
<li>1.268000 - Shinto + Monuments (Mount Fuji) + Selective Integration (2)</li>
<li>1.250000 - Tengri + Zoroastrian</li>
<li>1.248800 - Fetishist + Zanahary</li>
<li>1.240000 - Alcheringa + Dharmic Dreaming</li>
<li>1.200000 - Shinto + Open Doors (0)</li>
<li>1.200000 - Shinto + Monuments (Mount Fuji) + Open Doors (0)</li>
<li>1.196000 - Fetishist + Sanatana Dharma</li>
<li>1.180000 - Fetishist + Cwezi</li>
<li>1.156400 - Norse + Odin</li>
<li>1.152000 - Norse + Tyr</li>
<li>1.116000 - Ibadi + Ismaili + Neutral Piety</li>
<li>1.095000 - Alcheringa + Erathipa</li>
<li>1.060000 - Fetishist + Freyja</li>
<li>1.050000 - Fetishist + Teotl</li>
<li>1.036100 - Inti + 50% Authority</li>
<li>1.020000 - Fetishist + Haymanot</li>
<li>1.020000 - Sikh + Guru Arjan</li>
<li>1.010600 - Nahuatl + Monuments (City of Khami, Pyramid of Cheops) + 100% Doom</li>
<li>1.000000 - Sunni + Shafi'i + Neutral Piety</li>
<li>0.998000 - Hindu + Surya</li>
<li>0.973900 - Fetishist + Buddhadharma</li>
<li>0.970000 - Shia + Ismaili + Neutral Piety</li>
<li>0.956000 - Ibadi + Zaidi + Neutral Piety</li>
<li>0.956000 - Ibadi + Jafari + Neutral Piety</li>
<li>0.943900 - Tengri + Theravada</li>
<li>0.929600 - Shinto + Monuments (Mount Fuji) + Closed Doors (4)</li>
<li>0.929600 - Shinto + Closed Doors (4)</li>
<li>0.920000 - Sikh + Guru Tegh Bahadur</li>
<li>0.916000 - Ibadi + Hanbali + Neutral Piety</li>
<li>0.910000 - Hindu + Buddha</li>
<li>0.900000 - Fetishist + Roog</li>
<li>0.900000 - Norse + Snotra</li>
<li>0.892200 - Sikh + Guru Ram Das</li>
<li>0.889400 - Confucian + Monuments (Temple of Confucius, The Forbidden City) + High Harmony</li>
<li>0.880000 - Fetishist + Christianity</li>
<li>0.843000 - Fetishist + Yemoja</li>
<li>0.840000 - Mahayana + Low Karma</li>
<li>0.835000 - Vajrayana + Low Karma</li>
<li>0.830000 - Theravada + Low Karma</li>
<li>0.830000 - Alcheringa + Djunkgao Sisters</li>
<li>0.820000 - Confucian + High Harmony</li>
<li>0.820000 - Zoroastrian</li>
<li>0.820000 - Sikh + No Guru</li>
<li>0.820000 - Sikh + Guru Har Krishan</li>
<li>0.820000 - Sikh + Guru Granth Sahib</li>
<li>0.810000 - Shia + Zaidi + Neutral Piety</li>
<li>0.810000 - Shia + Jafari + Neutral Piety</li>
<li>0.808000 - Norse + Njord</li>
<li>0.800000 - Mahayana + High Karma</li>
<li>0.795000 - Vajrayana + High Karma</li>
<li>0.790000 - Theravada + High Karma</li>
<li>0.780000 - Fetishist + Islam</li>
<li>0.770000 - Tengri + Sikh</li>
<li>0.760000 - Norse + Freya</li>
<li>0.750000 - Totemist</li>
<li>0.750000 - Animist</li>
<li>0.744100 - Orthodox + 0% Patriarchy + Icon of Christ Pantocrator</li>
<li>0.740000 - Tengri + Reformed</li>
<li>0.740000 - Tengri + Alcheringa</li>
<li>0.733900 - Shinto + Monuments (Mount Fuji) + Adaptive (1)</li>
<li>0.733900 - Shinto + Adaptive (1)</li>
<li>0.719100 - Confucian + Monuments (Temple of Confucius, The Forbidden City) + Low Harmony + All Harmony Bonuses</li>
<li>0.712000 - Norse + Tor</li>
<li>0.700000 - Reformed + Fervent focus on war</li>
<li>0.676000 - Ibadi + Hanafi + Neutral Piety</li>
<li>0.649700 - Confucian + Low Harmony + All Harmony Bonuses</li>
<li>0.639400 - Confucian + Monuments (Temple of Confucius, The Forbidden City) + Neutral Harmony</li>
<li>0.633000 - Hindu + Ganga</li>
<li>0.609900 - Ibadi + Maliki + Neutral Piety</li>
<li>0.600000 - Tengri + Coptic</li>
<li>0.592200 - Tengri + Confucian</li>
<li>0.580000 - Reformed + Fervent focus on trade</li>
<li>0.570000 - Confucian + Neutral Harmony</li>
<li>0.568000 - Tengri + Mahayana</li>
<li>0.550000 - Tengri + Catholic</li>
<li>0.550000 - Jewish</li>
<li>0.540000 - Nahuatl + 50% Doom</li>
<li>0.530000 - Tengri + Totemist</li>
<li>0.530000 - Tengri + Fetishist</li>
<li>0.530000 - Tengri + Animist</li>
<li>0.510000 - Tengri + Shia</li>
<li>0.500000 - Inti + 0% Authority</li>
<li>0.500000 - Tengri + Protestant</li>
<li>0.500000 - Tengri + Inti</li>
<li>0.500000 - Tengri + Anglican</li>
<li>0.500000 - Sunni + Hanbali + Neutral Piety</li>
<li>0.450000 - Tengri + Orthodox</li>
<li>0.442200 - Orthodox + 0% Patriarchy + Icon of St. John Climacus</li>
<li>0.420100 - Anglican</li>
<li>0.350000 - Coptic</li>
<li>0.322200 - Orthodox + 0% Patriarchy + No Icon</li>
<li>0.320000 - Tengri + Sunni</li>
<li>0.305000 - Tengri + Hindu</li>
<li>0.300000 - Tengri + Ibadi</li>
<li>0.300000 - Mayan</li>
<li>0.290000 - Tengri + Jewish</li>
<li>0.270000 - Tengri + Nahuatl</li>
<li>0.260000 - Sunni + Hanafi + Neutral Piety</li>
<li>0.250000 - Tengri + Vajrayana</li>
<li>0.225000 - Catholic</li>
<li>0.193900 - Sunni + Maliki + Neutral Piety</li>
<li>0.135000 - Tengri + Hussite</li>
<li>0.122200 - Tengri + Mayan</li>
<li>0.100000 - Reformed + No Fervor</li>
<li>0.041300 - Tengri + Norse</li>
<li>-0.460000 - Nahuatl + 100% Doom</li>
<li>-1.095400 - Confucian + Monuments (Temple of Confucius, The Forbidden City) + Low Harmony</li>
<li>-1.164800 - Confucian + Low Harmony</li>
</ul>
<h3>Monument scores</h3>
<div>The scores exclude any bonus that's too situational to matter for any country. That doesn't necessarily mean 0 score monuments (with bonuses like prestige decay, extra karma, curia costs etc.) are completely worthless for you - just that they'd be completely worthless for vast majority of countries.</div><div><br /></div><div>Only country-level bonuses are scored. Area/province bonuses are ignored, and honestly none of them matter anyway.</div><ul>
<li>3.00 Bagan Temples (Pagan; 3; Theravada/Vajrayana/Mahayana)</li>
<li>2.98 Kanbawzathadi Palace (Pegu; 3)</li>
<li>2.49 Alhambra (Granada; 3; Muslim/Christian)</li>
<li>2.19 Prambanan Temple (Kotagede; 3; Dharmic)</li>
<li>2.03 Petra (Maan; 3; (Sunni/Christian) and (Syrian/Bedouin))</li>
<li>1.91 Kanbawzathadi Palace (Pegu; 2)</li>
<li>1.89 Baku Ateshgah (Shirvan; 3; Zoroastrian)</li>
<li>1.88 The Grand Palace of Bangkok (Bangkok; 3)</li>
<li>1.70 Mesa Verde (Tachii'nii; 3; Totemist)</li>
<li>1.50 Bagan Temples (Pagan; 2; Theravada/Vajrayana/Mahayana)</li>
<li>1.50 Buddha Statues (Bamyan; 2; Theravada/Vajrayana/Mahayana)</li>
<li>1.50 Buddha Statues (Bamyan; 3; Theravada/Vajrayana/Mahayana)</li>
<li>1.20 Angkor Wat (Angkor; 2; Theravada/Vajrayana/Mahayana/Dharmic)</li>
<li>1.20 Angkor Wat (Angkor; 3; Theravada/Vajrayana/Mahayana/Dharmic)</li>
<li>1.19 Harmandir Sahib (Multan; 3; Dharmic)</li>
<li>1.12 Heddal Stave Church (Bratsberg; 3; Christian)</li>
<li>1.11 Jokhang Temple (Lhasa; 3; Theravada/Vajrayana/Mahayana)</li>
<li>1.08 Registan Square (Samarkand; 3; Muslim)</li>
<li>1.08 Baku Ateshgah (Shirvan; 2; Zoroastrian)</li>
<li>1.08 Pura Besakih (Bali; 3; Dharmic)</li>
<li>1.06 Heddal Stave Church (Bratsberg; 2; Christian)</li>
<li>1.06 Versailles (Paris; 3; French)</li>
<li>0.92 The Grand Palace of Bangkok (Bangkok; 2)</li>
<li>0.85 Machu Picchu (Abancay; 3; Quechua)</li>
<li>0.85 Mesa Verde (Tachii'nii; 2; Totemist)</li>
<li>0.85 Stonehenge (Hampshire; 3; Pagan/English)</li>
<li>0.81 Baku Ateshgah (Shirvan; 1; Zoroastrian)</li>
<li>0.80 Versailles (Paris; 2; French)</li>
<li>0.74 City of Khami (Zimbabwe; 3; Pagan)</li>
<li>0.73 Pyramid of Cheops (Cairo; 3; Pagan/Egyptian)</li>
<li>0.73 Chichen Itza (Sotuta; 3; Mayan)</li>
<li>0.71 Parthenon (Athens; 3; Greek)</li>
<li>0.71 Harmandir Sahib (Multan; 2; Dharmic)</li>
<li>0.69 Inukshuk (Ahiarmiut; 3)</li>
<li>0.69 Petra (Maan; 2; (Sunni/Christian) and (Syrian/Bedouin))</li>
<li>0.66 Mausoleum at Halicarnassus (Mentese; 3)</li>
<li>0.62 Notre-Dame Cathedral (Paris; 3; Christian)</li>
<li>0.60 Petra (Maan; 1; (Sunni/Christian) and (Syrian/Bedouin))</li>
<li>0.60 Alhambra (Granada; 2; Muslim/Christian)</li>
<li>0.60 Angkor Wat (Angkor; 1; Theravada/Vajrayana/Mahayana/Dharmic)</li>
<li>0.60 City of Khami (Zimbabwe; 2; Pagan)</li>
<li>0.60 Machu Picchu (Abancay; 2; Quechua)</li>
<li>0.60 Mesa Verde (Tachii'nii; 1; Totemist)</li>
<li>0.60 Prambanan Temple (Kotagede; 2; Dharmic)</li>
<li>0.58 Kanbawzathadi Palace (Pegu; 1)</li>
<li>0.58 Tower of London (London; 3; Norman/English)</li>
<li>0.56 Jokhang Temple (Lhasa; 2; Theravada/Vajrayana/Mahayana)</li>
<li>0.54 Chichen Itza (Sotuta; 2; Mayan)</li>
<li>0.50 Bagan Temples (Pagan; 1; Theravada/Vajrayana/Mahayana)</li>
<li>0.50 Buddha Statues (Bamyan; 1; Theravada/Vajrayana/Mahayana)</li>
<li>0.50 Kiev Pechersk Lavra (Kiev; 3; Orthodox)</li>
<li>0.49 Pyramid of Cheops (Cairo; 2; Pagan/Egyptian)</li>
<li>0.49 Versailles (Paris; 1; French)</li>
<li>0.47 Aït Benhaddou (Demnate; 3)</li>
<li>0.45 The Grand Palace of Bangkok (Bangkok; 1)</li>
<li>0.44 Cologne Cathedral (Köln; 3; Christian)</li>
<li>0.39 Inukshuk (Ahiarmiut; 2)</li>
<li>0.37 Murud-Janjira Fort (Chaul; 3)</li>
<li>0.36 Chichen Itza (Sotuta; 1; Mayan)</li>
<li>0.31 Moai (Rapanui; 3; Polynesian)</li>
<li>0.30 Cologne Cathedral (Köln; 2; Christian)</li>
<li>0.30 Notre-Dame Cathedral (Paris; 2; Christian)</li>
<li>0.30 The Kremlin (Moskva; 3; East Slavic)</li>
<li>0.29 Parthenon (Athens; 2; Greek)</li>
<li>0.29 Prambanan Temple (Kotagede; 1; Dharmic)</li>
<li>0.29 Tower of London (London; 1; Norman/English)</li>
<li>0.29 Tower of London (London; 2; Norman/English)</li>
<li>0.28 Hagia Sophia (Constantinople; 3; Orthodox/Coptic/Muslim)</li>
<li>0.26 Moai (Rapanui; 2; Polynesian)</li>
<li>0.26 Pura Besakih (Bali; 2; Dharmic)</li>
<li>0.25 Kiev Pechersk Lavra (Kiev; 2; Orthodox)</li>
<li>0.25 Machu Picchu (Abancay; 1; Quechua)</li>
<li>0.25 Pena Palace (Lisboa; 3)</li>
<li>0.25 Taj Mahal (Central Doab; 3; Muslim)</li>
<li>0.24 Parthenon (Athens; 1; Greek)</li>
<li>0.21 Borobudur Temple (Kotagede; 3; Theravada/Vajrayana/Mahayana/Javanese)</li>
<li>0.21 Inukshuk (Ahiarmiut; 1)</li>
<li>0.21 Registan Square (Samarkand; 2; Muslim)</li>
<li>0.21 Murud-Janjira Fort (Chaul; 2)</li>
<li>0.20 Aït Benhaddou (Demnate; 2)</li>
<li>0.20 The Great Wall of China (Ningxia; 3; Chinese)</li>
<li>0.18 Sankin-kotai Palaces (Musashi; 3)</li>
<li>0.15 Stonehenge (Hampshire; 2; Pagan/English)</li>
<li>0.15 Notre-Dame Cathedral (Paris; 1; Christian)</li>
<li>0.14 Hagia Sophia (Constantinople; 2; Orthodox/Coptic/Muslim)</li>
<li>0.13 Moai (Rapanui; 1; Polynesian)</li>
<li>0.13 Cologne Cathedral (Köln; 1; Christian)</li>
<li>0.12 Harmandir Sahib (Multan; 1; Dharmic)</li>
<li>0.12 Pyramid of Cheops (Cairo; 1; Pagan/Egyptian)</li>
<li>0.10 Alhambra (Granada; 1; Muslim/Christian)</li>
<li>0.10 The Great Wall of China (Ningxia; 2; Chinese)</li>
<li>0.09 Sankin-kotai Palaces (Musashi; 2)</li>
<li>0.08 Stonehenge (Hampshire; 1; Pagan/English)</li>
<li>0.08 Kiel canal (Holstein; 3)</li>
<li>0.08 Panama canal (Panama; 3)</li>
<li>0.08 Suez canal (Sharqiya; 3)</li>
<li>0.07 Registan Square (Samarkand; 1; Muslim)</li>
<li>0.07 Temple of Confucius (Yanzhou; 3; Confucian)</li>
<li>0.07 Hagia Sophia (Constantinople; 1; Orthodox/Coptic/Muslim)</li>
<li>0.06 Himeji Castle (Harima; 3; Japanese)</li>
<li>0.05 Murud-Janjira Fort (Chaul; 1)</li>
<li>0.05 Kiel canal (Holstein; 2)</li>
<li>0.05 Panama canal (Panama; 2)</li>
<li>0.05 Suez canal (Sharqiya; 2)</li>
<li>0.04 Himeji Castle (Harima; 2; Japanese)</li>
<li>0.04 Pura Besakih (Bali; 1; Dharmic)</li>
<li>0.03 Temple of Confucius (Yanzhou; 2; Confucian)</li>
<li>0.03 Kiel canal (Holstein; 1)</li>
<li>0.03 Panama canal (Panama; 1)</li>
<li>0.03 Suez canal (Sharqiya; 1)</li>
<li>0.03 Jokhang Temple (Lhasa; 1; Theravada/Vajrayana/Mahayana)</li>
<li>0.03 Mausoleum at Halicarnassus (Mentese; 2)</li>
<li>0.02 Aït Benhaddou (Demnate; 1)</li>
<li>0.02 Heddal Stave Church (Bratsberg; 1; Christian)</li>
<li>0.02 Kiel canal (Holstein; 0)</li>
<li>0.02 Panama canal (Panama; 0)</li>
<li>0.02 Suez canal (Sharqiya; 0)</li>
<li>0.00 Ambras Castle (Etschtal; 3)</li>
<li>0.00 Ambras Castle (Etschtal; 2)</li>
<li>0.00 Ambras Castle (Etschtal; 1)</li>
<li>0.00 Borobudur Temple (Kotagede; 2; Theravada/Vajrayana/Mahayana/Javanese)</li>
<li>0.00 Himeji Castle (Harima; 1; Japanese)</li>
<li>0.00 Kiev Pechersk Lavra (Kiev; 1; Orthodox)</li>
<li>0.00 Mausoleum at Halicarnassus (Mentese; 1)</li>
<li>0.00 Mount Fuji (Kai; 3; Shinto/Theravada)</li>
<li>0.00 Saint Peter's Basilica (Roma; 3; Catholic)</li>
<li>0.00 Saint Peter's Basilica (Roma; 2; Catholic)</li>
<li>0.00 Saint Peter's Basilica (Roma; 1; Catholic)</li>
<li>0.00 Sankin-kotai Palaces (Musashi; 1)</li>
<li>0.00 Shwedagon Pagoda (Dagon; 3; Theravada/Vajrayana/Mahayana)</li>
<li>0.00 Shwedagon Pagoda (Dagon; 2; Theravada/Vajrayana/Mahayana)</li>
<li>0.00 Shwedagon Pagoda (Dagon; 1; Theravada/Vajrayana/Mahayana)</li>
<li>0.00 Taj Mahal (Central Doab; 2; Muslim)</li>
<li>0.00 Taj Mahal (Central Doab; 1; Muslim)</li>
<li>0.00 Temple of Confucius (Yanzhou; 1; Confucian)</li>
<li>0.00 The Forbidden City (Beijing; 3; Confucian)</li>
<li>0.00 The Forbidden City (Beijing; 2; Confucian)</li>
<li>0.00 The Forbidden City (Beijing; 1; Confucian)</li>
</ul>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com1tag:blogger.com,1999:blog-27488238.post-23666246124449301492021-04-19T13:44:00.002+02:002021-04-19T14:55:02.464+02:00European Super League<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0_FhvI0HQGcRIpqRlQyBWZtLclTaYXU4cx4I6mdchF0mBsVXbLLIdnFQcXB6TlmTNxh34IUxmeGBmVE7Sy8WWhO5utBDknBiMzuafbobdwsYFnr0loyIa-2Mszm6J3ziYcpTgPQ/s1766/yoda_by_elycefeliz_from_flickr_cc-nc-nd.jpg" style="margin-left: 1em; margin-right: 1em;" title="Yoda by elycefeliz from flickr (CC-NC-ND)"><img alt="Yoda by elycefeliz from flickr (CC-NC-ND)" border="0" data-original-height="1654" data-original-width="1766" height="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0_FhvI0HQGcRIpqRlQyBWZtLclTaYXU4cx4I6mdchF0mBsVXbLLIdnFQcXB6TlmTNxh34IUxmeGBmVE7Sy8WWhO5utBDknBiMzuafbobdwsYFnr0loyIa-2Mszm6J3ziYcpTgPQ/w640-h600/yoda_by_elycefeliz_from_flickr_cc-nc-nd.jpg" width="640" /></a></div><p>There's been a lull in politics recently, fortunately there's new entertainment from the football world. Not the matches, I never watch those, that's 90 minute snoozefest, but these's fun drama involving creation of European Super League.</p><p>It look like 15 clubs (12 publicly known, 3 weirdly still secret) announced that they're dumping existing UEFA league, <a href="https://www.youtube.com/watch?v=e35AQK014tI">and creating their own league</a>.</p><p>As far as I can tell, the main motivations seems to be that:</p><p></p><ul style="text-align: left;"><li>it's under control of the big clubs, not the greedy and corrupt UEFA and FIFA and (somehow) Qatar</li><li>it will provide more predictable income streams to the big clubs, without risk of losing tens of millions due to a bad match or two and failing to qualify</li><li>it will just make a lot more money, as big clubs won't have to waste time playing weak clubs few people care to watch</li></ul><div>Now the most interesting thing is predicting who's going to win, Super League or UEFA.</div><div><br /></div><div>For this I checked <a href="https://www.uefa.com/memberassociations/uefarankings/club/#/yr/2021">UEFA's club rankings</a>. Members of the new league are rated 2, 3, 4, 5, 6, 8, 9, 11, 12, 14, 26, and 53. So 10 out of top 15 clubs, plus two baffling additions.</div><div><br /></div><div>To make sure this isn't some artifact of weird storing, I also checked <a href="https://projects.fivethirtyeight.com/global-club-soccer-rankings/">538's global rankings</a>, and clubs in the Super League are ranked 1, 2, 4, 5, 6, 7, 9, 10, 12, 14, 28, 36. So again 10 of top 15, plus two baffling additions.</div><div><br /></div><div>The low ranked outliers are not even the same - it's AC Milan and Tottenham by 538's ranking; and AC Milan and Inter Milan by UEFA's.</div><div><br /></div><div>Interestingly 538's global ranking shows total dominance of European teams. The only non-European club in top 50 is a Brazilian one at 41.</div><div><br /></div><div>So it looks like if Super League plans go ahead, it will likely completely dominate European and global football.</div><div><br /></div><div>Greedy and corrupt UEFA and FIFA threatened every club and every player involved in the Super League with a ban from participating in everything else including the World Cup, <a href="https://www.si.com/soccer/liverpool/news/perez-prepared-to-create-new-world-cup">to which the Super League responded in hilariously ballsy way that if that's so, they'll just create their own World Cup</a>.</div><div><br /></div><div>And according to rankings, Super League's World Cup will be far higher level event than one by what's left of UEFA and FIFA.</div><div><br /></div><div>Of course supporters of smaller teams, as well as supporters of greedy and corrupt UEFA and FIFA, are really hating on this development, and trying to use all their corrupt politician friends like Boris Johnson to stop it. But right now I'd bet on the Super League winning.</div><div><br /></div><div>And as a final aside, the very fact that Boris Johnson is on UEFA's side clearly shows that the Super League are the good guys here.</div><p></p>tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com1tag:blogger.com,1999:blog-27488238.post-83192397383300056342021-04-05T20:37:00.001+02:002021-04-05T20:37:19.223+02:00Review of Vanilla Beyond mod for Medieval 2 Total War<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZPENbLBNABvZxEm7gvOuJM05QREtsp3TfNbBsEkkGXOaSagif0bXKuOsH991NrNUkgm03ICZ87BfAz2Qd2obwnka4fBfVndREiHIvwdzsAYzNQH6RWviHkpE14FBgXGiJW5taLQ/s3132/sweet_baby_by_neticola_from_flickr_cc-nd.jpg" style="margin-left: 1em; margin-right: 1em;" title="sweet baby by Neticola from flickr (CC-ND)"><img alt="sweet baby by Neticola from flickr (CC-ND)" border="0" data-original-height="2088" data-original-width="3132" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZPENbLBNABvZxEm7gvOuJM05QREtsp3TfNbBsEkkGXOaSagif0bXKuOsH991NrNUkgm03ICZ87BfAz2Qd2obwnka4fBfVndREiHIvwdzsAYzNQH6RWviHkpE14FBgXGiJW5taLQ/w640-h426/sweet_baby_by_neticola_from_flickr_cc-nd.jpg" width="640" /></a></div><p>Vanilla Beyond is my favorite kind of mod, one that tries to improve the base game without turning it into a kitchen sink of every cool feature modders possible.</p>
<p>The mod changes world map - extending the map a bit to the East, squeezing the Atlantic (probably to avoid game engine limitations on max campaign size), adding a bunch of extra factions (some from Kingdoms campaigns).</p>
<p>The new map is definitely a great improvement.</p>
<p>The mod changes how New World and Mongols are implemented. New World colonization is open from day one, and you'll see Norwegians, Portuguese and so on colonize right away, which feels a bit off, but the way it works in vanilla where they might as well not be in the game is also a bit off. Maybe it would be best to actually remove them from the game completely instead?</p>
<p>Mongols start on-map, and instead of a lot of free doom stack they get a bit of gold, troops, and king's purse every time they conquer new settlement, with the idea of creating a huge snowball. I didn't play long enough to see if it works properly or not. They seem to have long range missiles (including horse archers), which feels a bit bs in terms of both gameplay and historical accuracy, but game gives long range missiles and effective against armor effect quite generously to everyone.</p>
<p>These seem like sensible changes.</p>
<p>I played a quick game as Armenia on normal, as that faction wasn't available in any previous campaign. I got from 1 to 8 regions by turn 13, defeating Emirate of Damascus and getting some rebel lands.</p>
<p>AI was extremely passive, and nobody declared any wars against anyone else. In vanilla there's a 10 turn timer for AI, maybe it's much longer here? It felt like I can do a lot before AI wakes up. I guess I could have been more aggressive, in Empire I usually get 3 declaration of war on me turn one, and I got used to that a bit.</p>
<p>The biggest change in the came is in recruitment buildings. Basic city/castle tier has no recruitment slots at all - that means city or castle cannot recruit any units at all just by existing. That's an especially huge nerf to castles (which in vanilla can already recruit Mailed Knights or equivalent even at low level). You need to build a bunch of recruitment buildings to do any recruiting, so early game you'll be mostly relying on mercenaries and your starting army.</p>
<p>The related change is that higher tier buildings can only recruit higher tier units, and cannot recruit anything low tier. This is annoying for garrison logic, and sometimes you just don't have any units at all in the pool to recruit because of this. I suspect after a while (like 20-50 turns), it all starts working properly, but very early game is extremely awkward due to these changes.</p>
<p>There's a bit less difference between cities and castles - castles get some trade buildings, some low tier units overlap between both instead of having completely separate chains, and some castle garrison is upkeep free.</p>
<p>There's also a bunch of unique buildings in various settlements, which make sense I guess.</p>
<p>Merchant income got deservedly increased, as it was just way too low in vanilla.</p>
<p>Overall the mod has very awkward early game, so I don't think it's suitable for quick campaigns, but it could work better for something longer.</p>
tawhttp://www.blogger.com/profile/16972845140253292628noreply@blogger.com0