The gap between Europe's self-image and reality has grown into a chasm of delulu. One that's threatening to swallow the continent's future whole, as dangerous dependencies on others for energy, security, software, and manufacturing stack up to strangle Europe's sovereignty. But its current political class continues to double down on everything that hasn't worked for the past forty years.
But you can see why many politicians in Europe are eager to punish X for giving Europeans a social media that doesn't cooperate with its crackdown on wrongthink. The German chancellor, Friedrich Merz, is personally responsible for 5,000(!!) cases pursuing his subjects for insults online, which has led to house raids for utterances as banal as calling him a "filthy drunk".
It's against this backdrop — thousands of yearly arrests for banal insults or crass opposition to government policies — that some Europeans still try to convince themselves they're the true champions of free speech and freedom of the press. Delulu indeed.
That's primarily because Europe basically stopped creating new, large companies more than half a century ago. So as the likes of Nokia died off, there was nobody new to replace them. In the last fifty years, the number and size of new European companies worth $10 billion or more is alarmingly small:
So cue the talk about security. European leaders are incensed by getting excluded from the discussion about ending the war in Ukraine, which is currently just happening between America and Russia directly. But they only have themselves to thank for a seat on the sidelines. Here's a breakdown of the NATO spending by country:
This used to be a joke to Europeans. That America would spend so much on its military might. Since the invasion of Ukraine, there's been a lot less laughing, and now the new official NATO target for member states is to spend 5% of GDP on defense.
But even this target fails to acknowledge the fact that even if European countries should meet their new obligations (and currently only Poland among the larger EU countries is even close), they'd still lag far behind America, simply because the EU is comparatively a much smaller and shrinking economic zone.
In 2025, the combined GDP for the European Union was $20 trillion. America was fifty percent larger with a GDP of $30 trillion. And the gap continues to widen, as EU growth is pegged at around 1% in 2024 compared to almost 3% for the US.
Now this is usually when the euro cope begins to screech the loudest. Trying every which way to explain that actually Europe is a better place to live than America, despite having a GDP per capita that's almost half.
And on a subjective level, that might well be true! There are plenty of reasons to prefer living in Europe, but that doesn't offset the fact that America is simply a vastly richer country, and that matters when it comes to everything from commercial dominance to military power.
But it's the trajectory that's most damning. In 2008, Europe was on near-parity in GDP with America! But if the 1% vs 3% growth-rate disparity continues for another decade, America will grow its economy by another third to $40 trillion, while Europe will grow just 10% to $22 trillion. Making the American economy nearly twice as large as the European one. Yikes.
These should all be sobering numbers to any European. Whether it's the 10,000 yearly arrests in the UK for social media posts or the risk of an economy that's half the size of the American one in a decade.
But Europe isn't doomed to fulfill this tragic destiny. It's full of some of the most creative, capable, and ambitious people in the world (like the fifth of US startup unicorns with European founders!). But they need much better reasons to stay than what the EU (and now a separate UK) is currently giving them.
Like drastically lower energy costs to for a competitive industrial base and to power the AI revolution, so best we quickly revive European nuclear ambitions. Like an immigration policy designed to rival America's cherry-picking of the world's best, rather than mass immigration from low-average-IQ regions of net-negative contributors to the economy (and society). Like dropping the censorship ambitions and bureaucratic boondoggles like the DSA. Like actually offering a European internal market for remote labor and a unified stock exchange for listings.
There are plenty of paths to take that do not end in a low-growth, censorious regime that continues to export many of its best brains to America and elsewhere. So: make haste, the shadows lengthen.
The Minimalists speak with Judah Smith about how other people’s perception of us can be upsetting, the biggest things that send people into a mental spiral, advice for minimizing when you’re stressed out, and much more.
structeditorConfig {
intcx, cy; /* Cursor x and y position in characters */introwoff; /* Offset of row displayed. */intcoloff; /* Offset of column displayed. */intscreenrows; /* Number of rows that we can show */intscreencols; /* Number of cols that we can show */intnumrows; /* Number of rows */intrawmode; /* Is terminal raw mode enabled? */erow*row; /* Rows */intdirty; /* File modified but not saved. */char*filename; /* Currently open filename */charstatusmsg[80];
time_tstatusmsg_time;
structeditorSyntax*syntax; /* Current syntax highlight, or NULL. */};
typedefstructerow {
intidx; /* Row index in the file, zero-based. */intsize; /* Size of the row, excluding the null term. */intrsize; /* Size of the rendered row. */char*chars; /* Row content. */char*render; /* Row content "rendered" for screen (for TABs). */unsignedchar*hl; /* Syntax highlight type for each character in render.*/inthl_oc; /* Row had open comment at end in last syntax highlight
check. */} erow;
这里面有一个render字段,在editorUpdateRow()中,有这样的代码:
unsignedinttabs=0, nonprint=0;
intj, idx;
/* Create a version of the row we can directly print on the screen,
* respecting tabs, substituting non printable characters with '?'. */free(row->render);
for (j=0; j<row->size; j++)
if (row->chars[j] ==TAB)
tabs++;
unsignedlonglongallocsize= (unsignedlonglong)row->size+tabs*8+nonprint*9+1;
if (allocsize>UINT32_MAX) {
printf("Some line of the edited file is too long for kilo\n");
exit(1);
}
将反引号替换为双引号,使其与 PostgreSQL 兼容, 如果 macOS 执行有问题,在 Linux 搞下。操作前可以备份一下,避免搞坏了
sed -i 's/`/"/g' umami.sql
macOS
sed -i '' 's/`//g' umami.sql
sed -i '' 's/\\"/"/g' umami.sql
sed -i '' "s/\\\\'/'/g" umami.sql
sed -i '' "s/Xi'an/Xi''an/g" umami.sql
sed -i '' "s/Lu'an/Lu''an/g" umami.sql
sed -i '' "s/Ma'anshan/Ma''anshan/g" umami.sql
sed -i '' "s/Rui'an/Rui''an/g" umami.sql
sed -i '' "s/Yu'an/Yu''an/g" umami.sql
sed -i '' "s/Bo'an/Bo''an/g" umami.sql
sed -i '' "s/Tai'an/Tai''an/g" umami.sql
sed -i '' "s/Cao'an/Cao''an/g" umami.sql
sed -i '' "s/Chang'an/Chang''an/g" umami.sql
sed -i '' 's/ENGINE=[^ ]*//g' umami.sql
sed -i '' 's/AUTO_INCREMENT/[generated always as identity]/g' umami.sql
sed -i '' 's/unsigned//g' umami.sql
sed -i '' '/_prisma_migrations/d' umami.sql
可以手搓如下,我这里直接使用 DataGrip
psql -U username -d mydb < umami.sql
由于 MySQL → PostgreSQL 差异巨大,需要执行大量替换操作。报错太多,决定放弃升级改成使用 v3 版本, 还是重装方便
v3 版本镜像
由于兼容性问题太多,我最终选择放弃 v2 的 MySQL → PostgreSQL 迁移,转而直接部署 全新的 Umami v3。
Webmention is a simple way to notify any URL when you link to it from your site.
It is an open web standard (W3C Recommendation) for conversations and interactions across the web, a powerful building block used for a growing distributed network of peer-to-peer comments, likes, reposts, and other responses across the web.