This page shows the source for this entry, with WebCore formatting language tags and attributes highlighted.
Title
Links and Notes for December 6th, 2024
Description
<n>Below are links to articles, highlighted passages<fn>, and occasional annotations<fn> for the week ending on the date in the title, <a href="{app}/view_article.php?id=4085">enriching the raw data</a> from <a href="http://www.instapaper.com/starred/rss/1890855/5c1g08eoy9skhOr3tCGqTQbZes">Instapaper Likes</a> and <a href="https://twitter.com/mvonballmo">Twitter</a>. They are intentionally succinct, else they'd be <i>articles</i> and probably end up in the gigantic backlog of unpublished drafts. YMMV.</n>
<ft><b>Emphases</b> are added, unless otherwise noted.</ft>
<ft>Annotations are only lightly edited and are largely <i>contemporaneous</i>.</ft>
<h>Table of Contents</h>
<ul>
<a href="#politics">Public Policy & Politics</a>
<a href="#labor">Labor</a>
<a href="#economy">Economy & Finance</a>
<a href="#science">Science & Nature</a>
<a href="#art">Art & Literature</a>
<a href="#philosophy">Philosophy, Sociology, & Culture</a>
<a href="#technology">Technology</a>
<a href="#llms">LLMs & AI</a>
<a href="#programming">Programming</a>
<a href="#fun">Fun</a>
</ul>
<h id="politics">Public Policy & Politics</h>
<a href="https://www.nachdenkseiten.de/?p=125796" source="NachDenkSeiten" author="Jens Berger">Greenpeace-Studie – Aufrüstung nicht nötig</a>
<bq>Heute geben die NATO-Staaten zusammen etwa zehnmal so viel Geld für ihre Streitkräfte aus wie Russland. Natürlich kann man diese Zahlen nicht 1:1 vergleichen – ein deutscher Berufssoldat kostet schließlich deutlich mehr als ein russischer Berufssoldat und auch der Anschaffungspreis für einen deutschen Panzer ist um einiges höher. Doch <b>selbst wenn man die Ausgaben nach Preisparität gewichtet und die horrenden Militärausgaben der USA herausnimmt, kommt man immer noch auf ein deutliches Übergewicht von 50% zugunsten der europäischen NATO-Staaten.</b></bq>
<bq>Und hierbei muss man noch berücksichtigen, dass Russland sich im Krieg befindet und die mittelfristige Budgetplanung ein Drittel niedriger ist. Ganz anders sieht es bei der NATO aus. In den letzten zehn Jahren steigen die NATO-Militärausgaben um ein Drittel. <b>Allein im laufenden Jahr haben die NATO-Staaten ihre Militärausgaben um 18% gesteigert – ein historischer Höchstwert.</b></bq>
<bq>die Waffensysteme der NATO in nahezu allen Bereichen moderner sind als die Russlands. So <b>verfügen die NATO-Staaten beispielsweise über 900 Kampfflugzeuge der modernsten, fünften Generation, Russland aber nur über zwölf.</b></bq>
<bq>Die NATO ist – auch ohne die USA – in Europa extrem hoch gerüstet und Russland in nahezu allen Belangen numerisch deutlich überlegen. <b>Eine wie auch immer geartete Notwendigkeit, aufzurüsten, um sicher vor einem Angriff Russlands zu sein, besteht nicht.</b></bq>
<bq>Bei der gesamten Rüstungsdebatte geht es nicht darum, sich gegen einen angeblich numerisch überlegenen Gegner zu verteidigen. <b>Es geht darum, Milliarden und Abermilliarden in die Rüstung zu stecken; Geld, dass der Staat an anderer Stelle dringend benötigen würde.</b></bq>
<hr>
<a href="https://www.wsws.org/en/articles/2024/12/05/ucra-d05.html" source="WSWS" author="Patrick Martin">Trump names more and more billionaires to top posts</a>
<bq>the billionaire father-in-law of his other daughter, Tiffany, would be his senior adviser on Arab and Middle Eastern affairs. Massad Boulos is the father of Michael Boulos, who married Tiffany Trump in 2022. <b>The senior Boulos, born to a prominent Greek Orthodox family in Lebanon, made his fortune as the CEO of SCOA, which controls much of the auto distribution business in West Africa from its base in Nigeria.</b></bq>
Wow. The connections are so convoluted and rich in texture.
<bq><b>Trump announced he was appointing former Senator Kelly Loeffler of Georgia to head the Small Business Administration (SBA). Loeffler is a billionaire by marriage, as her husband, Jeffrey Sprecher, is the CEO of the Intercontinental Exchange, which owns the New York Stock Exchange.</b> That this Wall Streeter, briefly the richest US senator, is in charge of the SBA only demonstrates the utter cynicism of Trump’s claims to be promoting the interests of small and struggling businesses. In his first term, Trump’s Small Business Administration was also run by a billionaire, Linda McMahon, now to be his Secretary of Education.</bq>
<hr>
<a href="https://scheerpost.com/2024/12/04/chris-hedges-the-killing-of-brian-thompson/" source="Scheer Post" author="Chris Hedges">The Killing of Brian Thompson</a>
<bq><b>The revenue of six largest insurers — Anthem, Centene, Cigna, AVS/Aetna, Humana and UnitedHealth — have more than quadrupled from 2010 to $1.1 trillion.</b> Combined revenues of the 3 biggest — United, CVS/Aetna and Cigna — have quintupled.</bq>
Thanks, Obama. Like, literally.
<hr>
<a href="https://jacobin.com/2024/12/france-government-barnier-macron-nfp/" source="Jacobin" author="David Broder">Macronism Is Dying</a>
<bq>Even if recent left-wing electoral alliances largely took up France Insoumise’s program, <b>little remains of this movement’s once-systematic critique of the institutional architecture of the European Union, its undemocratic means of shaping national governments’ policies, and its enforcement (however inconsistent) of “pro-market” diktats.</b> There was good reason for these issues to retreat from focus as the hard austerity of the mid-2010s eased and EU authorities loosened their fiscal straitjacket in the pandemic period. Yet, these fundamental questions are rearing their head once more, and it may well be that a heavily indebted, crisis-riddled France is the epicenter of the bloc’s troubles in coming years.</bq>
<hr>
<a href="https://www.nachdenkseiten.de/?p=125680" source="NachDenkSeiten" author="Jens Berger">Wir dulden keinen Rassismus … und sind dabei selbst rassistisch</a>
<bq><b>Dafür haben wir aber ein großes Herz für jeden getöteten Ukrainer. Aber die sind ja auch weiß und christlich und zählen daher offenbar mehr als die Muslime in Gaza oder gar die Afrikaner in Ländern, die wir noch nicht einmal auf der Landkarte finden würden.</b> Gute Opfer, schlechte Opfer. Das ist Rassismus in Reinkultur und er ist auch und vor allem in den Kreisen ganz und gäbe, die sich selbst ansonsten als aufrechte Antirassisten feiern</bq>
<bq>Wenn man es aber mal objektiv betrachtet, <b>ist das krasse Missverhältnis der öffentlichen Wahrnehmung der getöteten Ukrainer und der getöteten Kongolesen doch zumindest bemerkenswert.</b> Subjektiv müsste man da schon andere Worte wählen.</bq>
<bq>Auch Ignoranz kann Rassismus sein. <b>Während uns Medien wie der SPIEGEL schon mal gerne über Verkehrsunfälle in den USA informieren, findet Afrika in den Medien keinen Platz.</b></bq>
<bq>Aber warum sollte man auch um Kongolesen trauern? <b>Der Kongo ist weit weg und hätte Gott gewollt, dass dort Frieden herrscht, hätte er doch die wertvollen Bodenschätze, die wir für unsere Smartphones, Elektroautos und Computer brauchen, woanders verteilt.</b></bq>
<bq><b>Wir trinken keinen Lumumba und essen keinen Mohrenkopf mehr und bezeichnen das als Antirassismus. Da können wir die Afrikaner ruhig vergessen, die für unsere iPhones und Teslas sterben.</b> Wir sind schließlich die Guten und zum „Gutsein“ gehört auch das Vergessen. Bei all diesem Unfug, der heute unter dem Label „Kampf gegen den Rassismus“ zelebriert wird, geht es nicht darum, Rassismus zu bekämpfen, sondern darum, dass <b>wir uns in unserem Rassismus gemütlich einrichten, ohne von den allzu großen kognitiven Dissonanzen Kopfschmerzen zu bekommen.</b></bq>
<hr>
<a href="https://exileinhappyvalley.blogspot.com/2024/12/the-isolationist-shuffle-how-gop-became.html" source="Exile in Happy Valley" author="Nicky Reid">The Isolationist Shuffle: How the GOP Became the New Fake Antiwar Party</a>
<bq><b>Kamala lost for a lot of reasons. Having the vibrant personality of a power-hungry high school principal in a cheesy 80s</b> movie and playing second banana to a poorly reanimated racist come to mind. Cackling like an animatronic banshee <b>flunking the Turing Test every time she was asked a question harder than 'what's your favorite color?'</b> probably didn't help either.
A little humility might actually come in handy in a situation like this but since the Democrats don't do that dance anymore they've chosen a bit of a different direction, <b>calling everyone who didn't vote Harris a swastika licking white supremacist while they shamelessly gaslight young Black men reluctant to vote for a crooked cop who spent the better part of three decades feeding them to the prison industrial complex.</b></bq>
<bq>Even after over 100,000 registered Democrats voted uncommitted over Joe Biden in protest of his genocidal policies in Gaza, <b>the DNC still insisted on running a candidate with virtually zero foreign policy skeletons in her closet as a neocon with gay friends.</b> During the final weeks of the campaign, while Trump was wisely ramping up his antiwar rhetoric at every stop, Kamala was busy barnstorming Michigan hand-in-hand with the Cheney's and <b>sending Bill Clinton to Benton Harbor so he could shout Zionist propaganda at disloyal Arab activists.</b></bq>
<bq><b>I know for a fact that the people I know who voted for Trump in the first place back in 2016 voted to chuck a screaming orange brick into the stained glass window of the Clinton Dynasty that sold everything they had to NAFTA and then sent their sons to die in Iraq.</b></bq>
Damn, Nicky. That's some really great revolutionary writing.
<bq><b>Jimmy Carter</b>, the one term dove that even Democrats use as a scarecrow against military restraint, actually armed the Mujahedeen so they could suck the Soviets into their own Vietnam in Afghanistan and <b>OK'd the use of American tanks to crush pro-democracy protestors in South Korea during the Kwangju Uprising.</b></bq>
<bq>This is also a woman who supports torture, drone strikes, and "very limited" counter-terrorism campaigns which basically makes her <b>about as antiwar as Jimmy Carter and that is exactly as antiwar as any Democrat or Republican is allowed to get in this country without being excommunicated.</b></bq>
<bq>The fact is that <b>Manifest Destiny is completely illogical to any sentient creature who doesn't make a living selling missiles</b>, so, somebody has to sing "Give Peace a Chance" just so long as all they're doing is singing. But when it's all said and done, both parties in this country are owned by the same military industrial complex.</bq>
<hr>
<a href="https://www.counterpunch.org/2024/12/02/bhopal-gas-tragedy-forty-years-of-struggle-for-justice-part-one/" source="CounterPunch" author="N.D. Jayaprakash">Bhopal Gas Tragedy: Forty Years of Struggle for Justice—Part One</a>
<bq>These highly callous and criminally irresponsible steps were taken in deliberate violation of all prescribed safety norms for handling MIC. Although the under-designed safety systems— even if they were in working order— could not have prevented a disaster if the stored MIC had got highly contaminated, <b>the refrigeration system— if it was in operation— would have considerably slowed down the reaction process, thereby providing ample time to the residents near the plant to escape to safety.</b></bq>
<hr>
<a href="https://znetwork.org/znetarticle/democrats-should-stop-mocking-trumps-ground-game-and-start-learning-from-it/" source="Z Network" author="Astra Taylor">Democrats Should Stop Mocking Trump’s Ground Game and Start Learning From It</a>
<bq>“Trump or someone around him is quite bright about the definitional difference between mobilization and organization,” Tory Gavito, founder of Way to Win, told me. <b>Mobilizing people to turn out and cast a ballot is not nearly as powerful as organizing people to adopt an identity, commit to a cause, and join a collective effort to push for change.</b> That’s why Way to Win, a progressive donor network, directs funds to groups that do year-round organizing, rather than <b>helicoptering in days or weeks before an election or relying on high-profile celebrity endorsements.</b></bq>
<bq>Now <b>the group’s non-immigrant members understand what it means for someone to be facing deportation. And immigrant members feel less alone as they understand they are not the only people struggling with healthcare or rent.</b> “Our organizing approach held and affirmed everyone’s suffering and helped people see how their experiences were tied together,” Janssen explained. This “dignity-based solidarity”, as Janssen calls it, isn’t about asking people to check their privilege. It’s rooted in the <b>recognition that we all suffer and deserve better: making ends meet shouldn’t be this hard for me or for you.</b></bq>
<bq>“If liberals really care about winning elections,” Baena continued, “they need to reach these people. We need year-round organizing to really bring people in and to show them that they and their families can benefit from public investment and services. And <b>we have to organize in a way that allows the base to feel they’ve helped win the election, not that the campaign won.</b>”</bq>
<bq>Voter outreach needs to be people- and place-centered, not data- and advertiser-driven. It needs to be issue-focused and year-round, not scaled in eight weeks and gone overnight. And it <b>must offer more than an awkward conversation at the door and an alienating avalanche of texts treating recipients like little more than ATMs.</b> People need a sense of belonging and a compelling and credible vision of a future worth fighting for.</bq>
<hr>
<a href="https://www.caitlinjohnst.one/p/assad-is-out-woke-al-qaeda-is-in" author="Caitlin Johnstone" source="Substack">Assad Is Out, Woke Al-Qaeda Is In</a>
<bq>One of the many perks of being the world’s dominant superpower is that it gives you the luxury of time. <b>If one regime change operation fails, don’t worry, you can just move some chess pieces around and take another shot at it.</b> If a coup attempt fails in Latin America, relax, there will be other coup attempts. If your efforts to grab Syria fail, you can just smash it with sanctions and occupy its oil fields to impoverish it while overextending its military allies in proxy conflicts elsewhere and grab it later.</bq>
<hr>
<a href="https://scheerpost.com/2024/12/07/juan-cole-why-iran-cant-stand-up-for-the-al-assad-government-and-russia-isnt-offering-air-support/" author="Juan Cole" source="Scheer Post">Why Iran can’t Stand up for the al-Assad Government and Russia isn’t Offering Air Support</a>
<bq>I suggest that Tehran has no choice but to leave Syria. <b>Without Russian air support, the couple thousand Revolutionary Guards and the remnants of the Hezbollah forces in the country, along with the tattered Syrian Arab Army, cannot hope to defeat the rebels now any more than they could in 2015.</b> The situation is even worse than in in the summer of 2015, since Hezbollah’s forces have been devastated by the recent war with Israel, which saw their commanders blinded or crippled by Israeli booby traps and many of their tactical personnel killed or wounded in battle. Moreover, <b>if Hezbollah attempted to deploy in a big way in Syria now, without Russian air support, Israel would hit them.</b> Russia had offered them their only air defense umbrella, and then only as long as they were doing Russian bidding in targeting the Sunni fundamentalists.
<b>Russian air power made the difference then. Without it, the Syrian government and its few allies are doomed.</b></bq>
Syria was not doing well before, by any stretch of the imagination. It will be doing much, much worse soon. Looks like Biden got his very own Libya in, just under the wire. So much suffering and destruction to control oil fields that no-one should want anymore. The empire is winning, but it's fighting for the old world. China is depending less and less on the regions that the empire covets for itself. China depends on the U.S. for a very small percentage of its GDP. The thing is, though, that China can't just ignore the western empire as it continues to burn through the remaining fossil fuels, unchecked. That affects everyone.
<hr>
<a href="https://www.counterpunch.org/2024/12/07/the-gravest-international-crimes/" author="Jeffrey St. Clair" source="CounterPunch">The Gravest of International Crimes</a>
<bq>Ussama Makdisi: “Incredible how often Israel has brazenly violated the “ceasefire” only then to blame Hizbullah for daring to retaliate to Israel’s serial violations, each of which is deliberate, designed to provoke, to push boundaries, and <b>to accomplish during a “ceasefire” what its genocidal army failed to do in its relentless US-enabled aerial bombardment of a tiny country with absolutely no air defense system.</b>”</bq>
Achieve their goals any way they can, without a drop of regret to stain their conscience. After all, you're just lying to animals.
<bq>[...] any senior officer who orders the killing of Palestinians simply because of their identity will not face the consequences,” Har-Zahav wrote. “A human life in the Gaza Strip is worth less than the lives of the thousands of stray dogs that roam the area looking for food. While there is a clear order prohibiting shooting dogs unless a soldier is in real danger when the dog’s jaws are locked on him, humans are permitted to be shot without any real restrictions.”</bq>
Ah, OK, alles klar. <i>Lower</i> than animals.
<hr>
<a href="https://www.caitlinjohnst.one/p/another-nation-absorbed-into-the" author="Caitlin Johnstone" source="Substack">Another Nation Absorbed Into The Blob Of The Empire</a>
<bq>We’re all meant to pretend this was a 100 percent organic uprising driven solely and exclusively by the people of Syria despite years and years of evidence to the contrary. We are meant to pretend this is the case even after <b>we just watched the US power alliance crush Syria using proxy warfare, starvation sanctions, constant bombing operations, and a military occupation explicitly designed to cut Syria off from oil and wheat in order to prevent its reconstruction after the western-backed civil war.</b>
People get mad if you say this, but it’s true. It’s just a fact that <b>major world events do not occur independently of the actions of the major world powers who have a vested interest in their outcomes.</b> If my saying this makes you feel uncomfortable, <b>that discomfort is called cognitive dissonance. It’s what being wrong feels like.</b></bq>
<bq>The western liberal lives in an imaginary alternate universe where western powers pretty much mind their own business and western leaders passively watch violence and destruction unfold around the world whilst pleading for peace and diplomacy from their podiums. <b>They pretend the empire does not exist, and that it is only by pure coincidence that conflicts, coups and uprisings keep occurring in ways which favor the strategic interests of Washington.</b></bq>
<bq>The few countries who have successfully resisted being absorbed into this imperial blob are <b>the Official Bad Guys we westerners are all trained to hate: China, Russia, Iran, North Korea, and a few socialist states in Latin America.</b> I used to include Syria in this list, but that’s over now. Syria has been absorbed into the blob of the empire.</bq>
<hr>
<media href="https://www.youtube.com/watch?v=SA0oIWao5TU" src="https://www.youtube.com/v/SA0oIWao5TU" source="YouTube" width="560px" author="Media Education Foundation" caption="Peter Beinart on protest, Zionism & Gaza @ UMass-Amherst 11/19/24">
This was a very good discussion---mostly a talk by Beinart---that starts off a bit slowly, and seems like it might teeter in a mediocre direction, but stick with it. He starts off by explaining that he couldn't find empathy until he really saw the suffering for himself, that in the abstract, he wasn't able to understand. I suppose it's brave for him to admit to that, because it is a negative admission.
He was blissfully unaware that his privilege was built on a hill of skulls. In that, he is very like most of us, so he's a good messenger. Beinart (now) has his head on straight and I fervently hope that he, as a very prominent American Jew who used to think quite differently, can show people the way that he used to get himself on the right side of history. He is very well-read and very eloquent and expresses the necessary ideas well.
<hr>
<media href="https://www.youtube.com/watch?v=xhXIYns7ZeM" src="https://www.youtube.com/v/xhXIYns7ZeM" source="YouTube" width="560px" author="Al Jazeera" caption="25 years of resisting Israeli settler violence in the occupied West Bank | Witness Documentary">
This ~45-minute documentary about people living in the West Bank is sad and touching. Palestinians are constantly portrayed as ravening revolutionaries but they are so resigned to their fate and willing to make nearly any compromise---except not existing at all. This is, however, the only solution that their settler enemies are willing to accept. There are scenes of settlers surrounding a farmer's house and taunting them that their house will be destroyed soon. It's ghoulish.
In some segments, we see the IDF show up and defend the settlers, throwing Palestinians off of their land. It's pure plunder. Dress it up however you like, it's plunder. It's taking that which is not your and that which you have not earned as a shortcut to your own personal success. There is nothing to be supported in this. It's absolutely ghoulish, watching the children grinning and smiling as they watch their fathers torment poor farmers.
<bq>98% of the permits that the Palestinians apply for is turned down.</bq>
Much of the video is in Arabic and Hebrew, but it's subtitled in what I am forced to assume is a faithful manner.
In this documentary, I heard very few (no?) NYC accents. Often, the Israeli soldiers and other interviewees speak in a broad Brooklyn accent and you have to wonder what the hell they're all doing there and where their fervor for occupation and destruction of another people comes from? I guess it comes from being U.S.-American?
<hr>
<a href="https://www.ralphnaderradiohour.com/p/israels-wall-of-impunity" author="Ralph Nader et al." source="Ralph Nader's Radio Hour">Israel's Wall of Impunity</a>
Excellent show overall, thank you so much. Craig Mokhiber is eloquent, precise and nearly poetic in his description of the world.
I wanted to note that I very much liked "In Case You Haven't Heard," by Francesco DeSantis, which was not only a concise, no-nonsense, and information-rich reportage, but was wonderfully presented, with masterful elocution and nearly unheard-of pronunciation of foreign names. Kudos!
<hr>
<a href="https://www.wsws.org/en/articles/2024/12/11/vhre-d11.html" author="Alex Lantier" source="WSWS">US, Israel launch mass bombing campaign against Syria after fall of Assad</a>
<bq>While US and European media claim that Assad’s handover of power to HTS is bringing Syria a new democratic dawn, reports on the ground paint a different picture. <b>The Sunni Islamist militia backed by the NATO powers and Israel are terrorizing the population—particularly among the Christian, Druze and Shia Alawite communities.</b>
Cardinal Mario Zenari, the Catholic Church’s envoy to Syria, reported to Vatican News the situation in Aleppo after its capture by HTS: “In certain zones, it’s fairly calm, but that is suspect. <b>There is a lot of fear, government offices have shut down, as has the army, which has disappeared. Armed groups are circulating and are promising not to attack the civilian population.</b> Until now, it appears they have respected this promise, but still people are terrified and are shutting themselves in at home. … Fear, terror and uncertainty rule.”</bq>
<bq>US officials are exultant that their support for Israel against Gaza and Hezbollah, and for Ukraine’s war with Russia, weakened Russia and Iran, letting Washington crush Syria.</bq>
<hr>
What's the difference between Russia's invasion of Ukraine and Israel's invasion of Lebanon and Syria? In both cases, a country has taken action to establish a "buffer zone" in a neighboring country that it finds threatening, out of what are legitimate "security concerns". One difference that I can think of, is that Israel is the one responsible for the instability that makes them think they need a security buffer, while, in Russia's case, it is NATO that is responsible for the instability that makes Russia think it needs a security buffer. Israel's insecurity is a fevered imagining that they bring into being by provoking their neighbors. In the case of Russia/Ukraine, it is Russia which was and continues to be provoked. There is every reason to believe that there would have been no invasion without NATO and, in particular, the U.S. constantly fomenting unrest in bordering countries.
<h id="labor">Labor</h>
<a href="https://thebaffler.com/latest/trick-clock-perlmutter" source="The Baffler" author="Lillian Perlmutter">Trick Clock</a>
<bq>The year before that, gas was never installed in his cottage, so the men could not cook, and when the weather turned, there was no heating. <b>“We almost slept in each other’s arms. None of us bathed for three days because the water was biting cold. . . . For two, three months we ate nothing but sandwiches.”</b></bq>
<bq>This year, to his surprise, he is making $17.40 an hour, nearly 40 percent higher than the minimum wage for agricultural workers in New Jersey. He sends almost all of it to his family. <b>Jaime describes his financial situation as “broken in three”: between saving for the house, providing for his household’s expenses, and feeding himself. In his cottage this year, eight men sleep in the bedroom, and four in the living room.</b></bq>
<bq>The H-2A program does not offer pathways to long term immigration, and <b>most workers are focused on building better lives in their home countries, where they have family and community.</b></bq>
<bq>He feels at home with the land in New Jersey now, at home in his routine, unpleasant though it might be. <b>His supervisor is one of the kind ones, and the farm owner’s teenage kids clean plants and prepare soil with the Mexican and Central American crews and are learning Spanish.</b> Next year, Jaime says, he plans to return.</bq>
<hr>
<a href="https://www.hamiltonnolan.com/p/democracy-and-power" source="How Things Work" author="Hamilton Nolan">Democracy and Power</a>
<bq>The fair distribution of power throughout society is a necessary ingredient to the preservation of democracy. Otherwise, what’s the point? <b>If democracy subjects the majority of people to the long term control of political power by a small minority, why would the majority of people ever agree that democracy is doing its job?</b> They would eventually lose faith in the system. Then—whether through sudden overthrow, or slow nihilistic abandonment—the democracy would wither.</bq>
<bq>What about a nation where the <b>top tenth of people control most of the wealth</b> and the bottom half of people control only six percent of the wealth <b>would make that bottom half of the distribution believe that democracy “works?”</b></bq>
<bq><b>Either you sever the connection between money and politics, insulating elections from the influence of wealth; or, you distribute the wealth in your society more equally. Both would be nice.</b> Both are worth working towards. In reality, achieving the first is an idealistic project that will take many lifetimes. The second, however, is something that we know how to do.</bq>
<bq>The decline of organized labor’s power in America since the 1950s has robbed the working class majority of its ability to protect its wealth and protect its political power and it has enabled the sharp post-Reagan rise in inequality that <b>has led us to the point when a billionaire president is prepared to loot the government for his friends with the help of the world’s richest man.</b></bq>
<bq>The broken power of organized labor has unleashed the ability of the rich to capture an insane portion of the nation’s wealth which has allowed them to purchase the electoral political system for their own benefit which has <b>sapped public faith in our democracy which is producing increasingly demented and dangerous electoral outcomes.</b></bq>
<h id="economy">Economy & Finance</h>
<a href="https://reason.com/2024/12/05/its-time-to-end-double-taxation-for-americans-living-abroad/" source="Reason" author="Veronique de Rugy">It's time to end double taxation for Americans living abroad</a>
<bq>To recap, Americans abroad must pay taxes in their country of residence, file and potentially pay additional U.S. taxes on the same income, and can't always expect adequate financial services, all <b>despite typically receiving very few U.S. government services.</b> Some who face these burdens maintain minimal ties to the United States. The penalties for noncompliance are wildly disproportionate. <b>Simple filing mistakes can result in tens of thousands of dollars in fines, even when no tax was owed. Complexity makes such mistakes easy to commit, even with professional help.</b></bq>
<bq>As for the underlying problem of worldwide taxation, <b>the U.S. should join the rest of the developed world and adopt a residence-based tax and reporting system.</b> This would address all the aforementioned problems and stop treating solid citizens like criminals—all while maintaining the ability to tax U.S. residents on their worldwide income and combat actual tax evasion.</bq>
<hr>
<a href="https://wallstreetonparade.com/2024/12/the-fed-rings-a-warning-bell-hedge-funds-and-life-insurers-are-reporting-historic-leverage/" source="Wall Street on Parade" author="Pam and Russ Martens">The Fed Rings a Warning Bell: Hedge Funds and Life Insurers Are Reporting Historic Leverage</a>
<bq><b>The Fed seems to be a serial protector of the illusion that U.S. megabanks are doing just swell.</b> It says this in its current report: “The banking system remained sound and resilient, with regulatory capital ratios approaching or exceeding historical highs.” That statement on capital levels would be much more convincing from the Federal Reserve Board of Governors if researchers at one of their 12 regional Fed banks, the New York Fed, had not just told the public in October that 27 percent of bank capital is “extend and pretend” commercial real estate loans .</bq>
<hr>
<a href="https://www.wsws.org/en/articles/2024/12/11/bijs-d11.html" author="Nick Beams" source="WSWS">The speculative Bitcoin frenzy</a>
<bq>The spectacular rise of Bitcoin is not an indication that it and other cryptocurrencies represent a new form of finance or an alternative to the present system. Rather, it is the <b>expression of the increasingly diseased character of the present financial order, a growing malignancy centered at its heart in the US.</b></bq>
<bq>No matter how steep its rise, and it may have further to go, the basic facts remain. <b>Bitcoin is a financial asset that has no intrinsic value and does not generate an income stream.</b> Other financial assets, such as holdings of commercial property and corporate debt, do, and, in the final analysis, rest on a real asset that generates a profit.
<b>Profit from Bitcoin trading is generated solely by its price rise and nothing else. And its rise in price continues as long as money keeps flowing into the crypto market.</b></bq>
<bq>[...] <b>the crypto market is, by any definition, a Ponzi scheme</b> and, like all such schemes, considerable amounts of money can be acquired while they continue to operate.</bq>
<bq>As Martin Walker, a research fellow at Warwick Business School, commented to the FT: “One thing that history teaches us about financial crises is that risk always builds up and then explodes in areas the regulators never seem to expect. <b>Fault lines in the financial system are not always obvious… Crypto finance is so large now there are sure to be macro risks… that are both dangerous and little understood.</b>”</bq>
<hr>
<a href="https://www.wsws.org/en/articles/2024/12/11/wnod-d11.html" author="Jacob Crosse" source="WSWS">In his twilight, President Biden boasts of economic success and decades of servitude to corporate America</a>
<bq>Free from any obligation to society at large, the billionaires are given carte blanche to use their profits to enrich themselves. A recent analysis by Forbes found that <b>the 12 richest men in America, which includes Tesla CEO Elon Musk, Washington Post owner Jeff Bezos, and Facebook’s Mark Zuckerberg, now have a collective wealth of $2 trillion</b>—more than double the collective wealth the same individuals had in March 2020, just prior to the passage of the CARES Act.</bq>
<h id="science">Science & Nature</h>
<a href="https://en.wikipedia.org/wiki/Hilbert_space" source="Wikipedia">Hilbert space</a>
<bq>In mathematics, Hilbert spaces (named after David Hilbert) allow the methods of linear algebra and calculus to be generalized from (finite-dimensional) Euclidean vector spaces to spaces that may be infinite-dimensional. Hilbert spaces arise naturally and frequently in mathematics and physics, typically as function spaces. Formally, <b>a Hilbert space is a vector space equipped with an inner product that induces a distance function for which the space is a complete metric space. A Hilbert space is a special case of a Banach space</b>.</bq>
Another in a series of topics I've stumbled across where I've back away slowly, in order to avoid completely destroying my carefully vetted list of other priorities.
And Banach spaces, which I've absolutely never heard of, are a <i>superset</i> of Hilbert spaces. Don't click on Banach spaces...
<h id="art">Art & Literature</h>
<a href="https://en.wikipedia.org/wiki/Chengyu#Chinese_examples" source="Wikipedia">Chengyu</a>
<bq>Chengyu (traditional Chinese: 成語; simplified Chinese: 成语; pinyin: chéngyǔ; trans. "set phrase") are <b>a type of traditional Chinese idiomatic expressions, most of which consist of four Chinese characters.</b> Chengyu were widely used in Literary Chinese and are still common in written vernacular Chinese writing and in the spoken language today. According to the most stringent definition, there are about 5,000 chengyu in the Chinese language, though some dictionaries list over 20,000. Chengyu are considered the collected wisdom of the Chinese culture, and contain the experiences, moral concepts, and admonishments from previous generations of Chinese speakers.</bq>
<ul>
井底之蛙 (jǐng dǐ zhī wā): a frog in the bottom of the well / a person with limited outlook
三人成虎 (sān rén chéng hǔ): Three men make a tiger / repeated rumor becomes a fact
紙上談兵 (zhǐ shàng tán bīng): talk about military tactics on paper / theoretical discussion useless in practice (I like our "armchair generals" or "armchair quarterbacks" idiom better.)
畫蛇添足 (huà shé tiān zú): to add feet when drawing a snake / to improve something unnecessarily
易如反掌 (yì rú fǎn zhǎng): as easy as turning over one's hand / for something to be very easy (This one's the same in German: <a href="https://dict.leo.org/german-english/Handumdrehen">Handumdrehen</a>)
</ul>
I like some of these because they're more intuitive than something like <a href="https://kau.sh/blog/yak-shaving-bike-shedding/">bikeshedding</a> (performing a seemingly endless series of small tasks to avoid more complex steps that would actually move the project forward) or <a href="https://kau.sh/blog/yak-shaving-bike-shedding/">yak-shaving</a> (spending most of your time discussing the simple but trivial issues rather than focusing your time on discussions around the bigger but harder tasks at hand) because you honestly don't have to explain it to anyone who knows what a snake is.
"Putting lipstick on a pig"
Now there's an English idiom I can get behind.
<hr>
<a href="https://www.henrikkarlsson.xyz/p/art-gallery" source="" author="Henrik Karlsson">6 lessons I learned working at an art gallery</a>
<bq>One day I hope to be a good enough writer to put words to how thankful I am to the many people who have helped me reach this point. For now, let me just say that I feel the weight of your care, and I will do my best to honor it.</bq>
If you ever catch me writing something like this---and you can't tell whether I'm kidding---please recognize it for the ransom note it would most definitely be.
<bq>[...] this was a good lesson for someone who is used to being self-employed: at an institution, you can’t just do what is best, <b>you also have to build trust and coordinate with others so you are on the same page.</b> This, however, doesn’t mean that you should abdicate your judgment and get in line.</bq>
Jesus, what a f@&king ego. Got it. You're the smartest at everything and need to herd the masses into realizing it. Thanks for the life lesson, Tony Stark.
<h id="philosophy">Philosophy, Sociology, & Culture</h>
<a href="https://lwlies.com/articles/werner-herzog-penguin-encounters-at-the-end-of-the-world/" source="Little White Lies" author="Tim Cooke">What does Werner Herzog’s nihilist penguin teach us about life?</a>
<bq><b>These shots of the solitary birds marching to their demise, mere black dots against the white expanse, are perfect in their portrayal of loneliness and desolation.</b></bq>
<bq><b>In his 1999 Minnesota Declaration, Herzog queried the validity of the “documentary” label. He drew distinctions between the superficial “truth of accountants” and the “deeper strata of truth in cinema”, which is “mysterious and elusive, and can be reached only through fabrication and imagination and stylisation”.</b> Let’s not forget that he once called Fitzcarraldo his greatest documentary. Essentially, <i>Encounters at the End of the World</i> is a film about us, not penguins. The truth is in our response to the subject matter – what it tells us about ourselves and about cinema. It’s certainly a sequence worth pondering.</bq>
<hr>
<a href="https://freddiedeboer.substack.com/p/not-the-right-kind-of-provocation" source="Substack" author="Freddie deBoer">Not the Right Kind of Provocation</a>
<bq>If all students received phonics instruction, the absolute learning gains might (might) be higher for everyone, but <b>the more talented kids would still learn to read with ease and the less talented kids would still struggle</b>; there would be a real, measurable, consequence-laden difference in reading ability between students from different talent bands</bq>
<bq>If the less talented students received phonics instruction and the more talented received whole language, the perceptible performance gap between them would perhaps be artificially compressed, though by less than I think some people might assume; more to the point, there’s no way to actually do such a thing, <b>hoarding the good pedagogy for only the worse students, and it would be educational malpractice anyway; the parents of the talented kids would revolt, and they would be right to do so.</b></bq>
<bq>[...] the core claims of the education reform movement are that a) their preferred policies will result in better educational outcomes for students and b) this improvement will result in better job market and economic outcomes. The moral and political exigency of the movement depends on the idea that reforms would somehow reduce poverty, socioeconomic inequality generally, and racial inequality specifically. I’ve argued that the whole thing is based on incoherent premises, particularly <b>given the fact that achieving those socioeconomic effects requires that the students at the bottom not just improve but improve far more than the kids at the top.</b></bq>
<bq>[...] both the disadvantages of race and class and the advantages of individual talent continue to dominate. I’m not unwilling to consider the possibility that teaching phonics might really have real and durable advantages over other methods. But <b>when the phonics debate went national, it got pulled up into the same dynamic of overpromising and underdelivering. The odds that phonics will “fix” American education are exactly zero.</b></bq>
<bq>The nice thing, for me, is that <b>I don’t need miscellaneous pedagogical advances to be part of some quixotic effort to “fix” education and in that way end racial inequality and similar ills.</b> The trouble for the reformers is that they do.</bq>
It's really the same place that many discussions end. Some people will produce more value for society, no matter what we choose to value. Our job is to make sure that those who contribute less aren't disadvantaged and don't suffer, that they can live fulfilled, happy lives. Our other job is to make sure that society values things that are actually useful, that the distribution of favor is just and sensible. We are utterly failing at both jobs, denying value and comfort to useful members while allowing parasites to steal unearned value.
<bq>[...] <b>some kids are going to thrive no matter what. And some kids are going to struggle no matter what. Because talent is real.</b> Surely that reality is as worthy of discussion.</bq>
<bq>If you ask people directly if every student has the same aptitude for reading and if we should expect all kids to score exactly the same on reading assessments, they’ll say no; if you say that the existence of students who perform two sigma below the mean on reading assessments is simply what we should expect thanks to ordinary variability, that <b>there’s always going to be kids who are simply on the wrong side of the talent curve and there always will be, those same people get offended.</b> But those are, of course, just different ways of saying the same thing.</bq>
<bq><b>The question that confronts us is whether we’ll build a society that serves the needs of both kind of students</b> - but that’s a question everyone in media prefers to avoid.</bq>
<bq><b>I’m left to tell people what they already know but don’t want to believe.</b></bq>
<bq>Once we realize how minimal school-side influence is on individual student performance, we can recognize that <b>teacher quality</b> (as defined by improving quantitative metrics ) <b>might be real but of little practical value; school quality</b> (again as defined by improving quantitative metrics ) <b>does not exist.</b></bq>
<bq>If you want to improve the lives of struggling students, <b>work to establish a social democratic state that ensures the material best interest of everyone.</b></bq>
<bq>it is relative academic performance which is rewarded in the labor market, and thus it is relative academic performance which has social justice valence. <b>If the worst-performing improve but stay just as far behind because their peers are also improving, there is no financial advantage.</b></bq>
<hr>
<a href="https://scheerpost.com/2024/12/02/patrick-lawrence-shall-we-celebrate-the-world-being-as-it-is/" source="Scheer Post" author="Patrick Lawrence">Shall We Celebrate, the World Being as It Is?</a>
<bq><b>A lot of people</b>, to put a very obvious point as mildly as I can, <b>do not want to lose their illusions.</b> They are, indeed, highly dependent on them. And in this they are incessantly encouraged, mauled daily with illusions, by those who pose as our leaders and by the clerks and secretaries in the media who serve these poseurs. These kinds of people, illusioned people, are pretty good at celebrating. But <b>there is no honoring or respecting them. There is no pretending their souls are still alive.</b></bq>
<hr>
<a href="https://www.the-hinternet.com/p/the-great-subduction" source="Hinternet" author="Hinternet Staff (Justin Smith Ruiu)">The Great Subduction</a>
<bq>[...] we cannot help but suspect that technofeudalism is in fact better described as posthuman capitalism. In industrial capitalism human beings created profit by working the machines. <b>In posthuman capitalism the machines create profit by farming the human beings.</b></bq>
<bq>The epistemic crisis that currently has so many millions of anti-MAGA Americans in such a deep funk is really entirely their fault: <b>they just can’t make any sense of why a different group of people has taken to mongering a different set of apparent facts, when the truth of their own preferred set seems to them to be as plain as day.</b></bq>
<bq>We really don’t know how to slow down or mitigate the destructive forces our new digital technologies have unleashed on us, and a considerable part of us is inclined simply to lean into this destruction, and to find out what humanity looks like, if anything at all, when we come out the other side. As we have already said <b>we do not believe much good could come from nationalization of the internet, and we fear the considerable harm that might come of it. We do not, in fact, believe there should be anything “national” about our internets at all.</b> No matter how destructive the tech monopolies now are, the internet nonetheless represented, at its inception, the single greatest hope in modern history for finding a way out of the insanely inadequate and perpetually dangerous Westphalian order, and <b><i>coûte que coûte</i> we refuse to advocate any policy that would amount to backsliding from this hope.</b></bq>
<bq>In the case of the internet, we cannot help but think that <b>some regulation is simply necessary</b>, not to restore our world to the way it was prior to the revolution, with its books and movies and so on, but <b>simply to forestall total epistemic collapse</b>. We believe however that such regulation, to be successful, must begin in an effort that is both global and popular , that is, that circumvents the authority of states and that takes on, through the force of popular will, the tech companies themselves, everywhere in the world they may operate.</bq>
<bq>[...] sudden and total rupture can leave a society profoundly disoriented, and grasping desperately at new alternatives, not all of which will have been very well thought out. <b>We might understand our present condition something like that of a Turkish citizen in the mid-20th century, unable, in the wake of that country’s comprehensive language reform, to make any sense of what his Ottoman ancestors in the not-so-distant 19th century had written.</b> Except that this inability is vastly more comprehensive for us, almost to the extent that it seems self-evident to your average adolescent today that the world came into existence ex nihilo circa 2008.</bq>
<bq>[...] <b>online search functions must be made to prioritize “legacy meanings” . For example, if I Google “Vikings”, I have a right to see, at the top of the list, entries concerning the medieval Norse pillagers and river-traders, not the football team.</b> If I Google “Amazon”, I have a very urgent right to see entries about the South American rainforest and about the mythological matriarchal clan of ancient warrior-women, before I get to anything as late-arriving as Jeff Bezos’s corporate empire. <b>You simply cannot orient yourself in this world if you do not have the opportunity to learn, in the broadest sense, what came first, and what is derived from what.</b></bq>
<bq>It is a dismal situation, in which <b>a privileged class of people have access through their institutional affiliations to all the scholarly articles ever published</b> about the Albigensian Crusades or Robert Boyle’s experiments touching upon cold, while the common <b>unaffiliated riff-raff are channeled into “free” online spaces</b> where they can watch people fighting about whether seed oils are “good” or not, and perhaps join the fight themselves. <b>The internet should, in principle, be making everyone smarter, yet it is making the great majority of people dumber.</b> It is making us smarter, here at The Hinternet, but this is only because <b>we got our bearings mostly in the pre-internet era</b>, and once the internet arrived we also managed to get institutional passwords that enable us to read everything one could possibly want to learn about, say, Aristotle’s contributions to malacology. <b>There is no justice at all, and considerable risk of stoking civil disorder, in this two-tiered system.</b></bq>
<bq><b>The epistemic preterites will resent being shut out</b> — even if they don’t care about Ancient Greek studies of mollusks, they will still care that there is a means of accruing social advantages to which they have no access. <b>They will care that there are peer-reviewed articles in epidemiology that the elite experts cite to justify lockdowns and so on, but that they themselves would have to pay $29.99 to read over the course of a 24-hour “article rental”.</b> May the two-tiered system fall.</bq>
<bq>The tech companies must take real measures to ensure that <b>we not pass into an era of post-literacy too precipitously.</b> It is not that literacy is an unqualified good for human life — again, only about 5% of our species’ existence has involved literacy, and it is increasingly easy to see literacy as a technology suited to a certain historical era, rather than as part of the human essence as such. Nonetheless, again, <b>the shock of a too-sudden rupture is what worries us, not the eventual loss of something we happened, by circumstance of birth, to value over the course of our own lives.</b></bq>
<bq><b>Every time autocorrect fails to recognize a word is an occasion for a would-be writer to think: this thing I wanted to write about is not valued. There’s no place for it.</b> Not even my machine recognizes it, why would my peers? And this, peers, could turn out to be a major force in stoking our epistemic collapse.</bq>
<bq>We are, some of us, getting old, yes, old, and sometimes we do wonder whether our horror at the thought of such a rupture does not boil down to simple nostalgia: we want our children to know how we used to rewind videocassettes, and so on, and <b>they irk us when they dismiss such reminiscences as irrelevant to their lived experience.</b> But much like it is a mistake to dismiss concerns about social media’s impact on adolescent mental health on the grounds that “they used to worry about the deleterious effects of rock and roll too”, so is it a mistake to reduce our fears of rupture to merely personal nostalgia. <b>You do not exactly have to be a Burkean to appreciate that the past can sometimes cast a life-saving light into the present, and that a present without any past at all is at best precariously poised for its inevitable plunge into the future.</b></bq>
<hr>
<a href="https://www.caitlinjohnst.one/p/taliban-in-afghanistan-bad-al-qaeda" author="Caitlin Johnstone" source="Notes From The Edge Of The Narrative Matrix">Taliban In Afghanistan Bad, Al-Qaeda In Syria Good</a>
<bq>If your worldview doesn’t acknowledge that <b>violence isn’t limited to the physical act of shooting someone</b>, and that force isn’t limited to the physical act of locking someone in a prison cell, then you’re not going to see <b>the violence and force in the way the capitalist class leverages inequality, human need, and the law to force the masses to live their lives in ways that make them miserable and unhealthy.</b> You’re just going to see a bunch of successful businessmen peacefully going about their business, who are loathed by evil leftists for no legitimate reason. The abusiveness of the means by which those businessmen become wealthy is invisible to you.</bq>
<h id="technology">Technology</h>
<a href="https://pluralistic.net/2024/12/06/shoenabombers/" source="Pluralistic" author="Cory Doctorow">Battery rationality</a>
<bq>[...] note what hasn't happened in the wake of an extremely successful, nearly impossible to defeat explosives attack that used small electronics of the same genus as the pocket rectangles virtually every air traveler boards a plane with. <b>We've had no new security protocols instituted since September 17, likely because no one can think of anything that would work.</b></bq>
<bq>But today, we're keeping calm and carrying on. The fact that something awful exists is, well, awful , but if we don't know what to do about it, there's no sense in just doing something , irrespective of whether that will help. <b>We could order everyone to leave their phones at home when they fly, but then no one would fly anymore, and obviously, no one seriously thinks "no price is too high" for safety. Some prices are just too high.</b></bq>
<hr>
<a href="https://www.theringer.com/2024/12/03/tech/headlight-brightness-cars-accidents" source="The Ringer" author="Nate Rogers">Asleep at the Wheel in the Headlight Brightness Wars</a>
<bq>Gatto’s motivation comes from the experience of watching his partner, Liz, struggle to recover from being hit by a cab while walking across the street. He <b>sees headlights as “a realistic and tangible attack surface on the current trend toward antihuman design in our world, primarily guided by the auto industry.”</b></bq>
<bq>As headlights went from circular to rectangular and from sealed beams to replaceable bulbs, the rules and accommodations changed with them. <b>“Well, when LED headlights came out,” Baker said, “they skipped all that. They just started selling cars with the LED headlights.”</b></bq>
<bq>I’ve had now two car companies’ engineers, when I played stupid and said, ‘What’s the dark spot?’ … And the lighting engineers are all fucking proud of themselves: ‘That’s where they measure the fucking thing!’ And I’m like, <b>‘You assholes, you’re the reason that every fucking new car is blinding the shit out of everyone.’”</b></bq>
<bq>Vehicle size is another issue that comes up regularly, since <b>NHTSA regulations for headlights don’t include a standardized mounting height, even as cars have ballooned in size in recent years.</b> This means a perfectly aligned headlight in a larger car can still wreak havoc on a smaller car: “Where the [midsize] Civic might not give you glare,” Trechter, the former lighting engineer, said, “that F-350 [truck], if you’re sitting in a [sport-size] Miata, is gonna absolutely wreck your eyeballs.”</bq>
<bq>Alignment, he noted, is extra important with lights like these, and he abhors the aftermarket LEDs and light bars that people attach to their cars in case “they’re going to encounter a moose or something.” But more than anything else, what bothers Magliozzi about the state of headlights is <b>the increasing number of people who drive with high beams on all the time at night. “I think it’s selfishness to a large degree,” Magliozzi said.</b></bq>
<bq>[...] the possibility that the power of LEDs, supposed to be a bastion of safety, was actually contributing to an “I’ve got mine” mentality on the roads, which has become largely identifiable across the driving realm.</bq>
<hr>
<a href="https://znetwork.org/znetarticle/nothing-like-before-china-is-out-competing-the-west-on-evs/" author="Paweł Wargan" source="Z Network">“Nothing Like Before” — China Is Out-Competing The West On EVs</a>
<bq>“In 2023, new EV penetration was 31.6% across China. In major cities like Shanghai, Beijing, and Guanzhou, the number is closer to 50% — and it took them just 10 years to get there,” Haidong Chen, Director of Marketing at the National Innovation Center of Intelligent and Connected Vehicles, told me in Beijing. <b>“In the first quarter of 2024, the share of new EVs sold was 31.3%, but jumped to 50.39% in April.”</b></bq>
<bq>While China has limited domestic lithium reserves, it has developed cutting-edge <b>technologies that allow it to recycle nearly 100% of the lithium from used batteries.</b> By 2021, China had more existing or planned lithium-ion battery recycling capacity than all of Europe and North America combined. The CEO of CATL, one the world’s largest battery companies, now predicts that <b>China will need no new minerals for battery production by 2042.</b></bq>
<bq>In 2013 and 2014, when attacks against Chinese technology companies like Huawei accelerated, China began to move quickly towards technological sovereignty in all areas, from chips and artificial intelligence to cars and batteries. “Today,” Haidong said, “China’s industry is guided by a single principle: self-sufficiency.” This has allowed for the kind of <b>integration — of batteries and software, or roads and cars and cloud technology — that is currently beyond the realm of imagination in the West.</b></bq>
<bq>China has leveraged its socialist market economy to develop new technologies urgently needed to address the climate crisis. Over the past decade, this strategy has seen <b>the costs of solar and wind power fall by 90% — and batteries by more than 90%.</b> With China now building two-thirds of the world’s wind and solar projects, these sources of energy are set to make up 39% of China’s total energy mix by the end of 2024. <b>China is now on track to meet its climate goals six years ahead of schedule.</b></bq>
<bq>“We don’t particularly care about the tariffs,” Haidong said. “If I’m the only producer globally, the tariffs mean that US consumers will pay more. <b>It’s a bit like leaving your wife for your mistress. At one point, you’ll want to win her back, but now the cost has gone up.”</b></bq>
<hr>
<a href="https://kottke.org/24/12/the-invention-that-accidentally-made-mcmansions" author="Jason Kottke" source="">The Invention That Accidentally Made McMansions</a>
<bq>The story of gang-nail plate illustrates an inescapable reality of capitalist economics: companies tend not to pass cost savings from efficiency gains onto consumers…they just sell people more of it. And people mostly go along with it because <b>who doesn’t want a bigger house for the same price as a smaller one 10 years ago or a 75” TV for far less than a 36” TV would have cost 8 years ago or a 1/4-lb burger for the same price as a regular burger a decade ago?</b></bq>
Me. I don't want any of that. Bigger, better, faster, more is a mental illness.
<h id="llms">LLMs & AI</h>
<a href="https://aeon.co/essays/when-ai-summaries-replace-hyperlinks-thought-itself-is-flattened" source="Aeon" author="Collin Jennings">A linkless internet</a>
<bq>If Pope’s poem floods the reader with voices – from the dunces in the verse to the competing commenters in the footnotes, AI chatbots tend toward the opposite effect. Whether ChatGPT or Google’s Gemini, <b>AI synthesises numerous voices into a flat monotone.</b> The platforms present an opening answer, bulleted lists and concluding summaries. If you ask ChatGPT to describe its voice, it says that it has been trained to answer in a neutral and clear tone. <b>The point of the platform is to sound like no one.</b></bq>
<bq>Commentators have noted the irony that Google’s AI model, Gemini (like all LLMs), relies on outside websites for training data so that it can return accurate responses, but <b>the chatbot interface would seem to jeopardise its primary data source as users are discouraged from visiting those sites.</b></bq>
<hr>
<media href="https://www.youtube.com/watch?v=LPZh9BOjkQs" src="https://www.youtube.com/v/LPZh9BOjkQs" source="YouTube" width="560px" author="3Blue1Brown" caption="Large Language Models explained briefly">
<bq>A Large Language Model is a sophisticated mathematical function that predicts what word comes next for any piece of text.</bq>
The video covers initial training data, RLHF (Reinforcement learning from human feedback, which is basically correcting incorrect or inutile associations), a bit about attention and transformers, and ... that's it. It's a very good explainer.
<hr>
<a href="https://www.oneusefulthing.org/p/15-times-to-use-ai-and-5-not-to" author="Ethan Mollick" source="One Useful Thing">15 Times to use AI, and 5 Not to</a>
<bq>Knowing when to use AI turns out to be a form of wisdom, not just technical knowledge. Like most wisdom, it's somewhat paradoxical: <b>AI is often most useful where we're already expert enough to spot its mistakes, yet least helpful in the deep work that made us experts in the first place.</b> It works best for tasks we could do ourselves but shouldn't waste time on, yet can actively harm our learning when we use it to skip necessary struggles.</bq>
I can help experts but it can't make experts. It endangers the expert-creation pipeline by its very existence.
<hr>
<a href="https://addyo.substack.com/p/the-70-problem-hard-truths-about" author="Addy Osmani" source="Elevate your Effectiveness">The 70% problem: Hard truths about AI-assisted coding</a>
This is a good article on the state-of-the-art in AI-assisted programming at the end of 2024. It's a good mix of realistic, pragmatic, optimistic, and hopeful.
<bq>What typically happens next follows a predictable pattern:<ol>
You try to fix a small bug
The AI suggests a change that seems reasonable
This fix breaks something else
You ask AI to fix the new issue
This creates two more problems
Rinse and repeat</ol>This cycle is particularly painful for non-engineers because they lack the mental models to understand what's actually going wrong. When an experienced developer encounters a bug, they can reason about potential causes and solutions based on years of pattern recognition. <b>Without this background, you're essentially playing whack-a-mole with code you don't fully understand.</b></bq>
This cycle is as old as time. It's what happens when you don't really know what you're doing and you don't have a process that carries you forward anyway. The process that software-engineering uses to address this is <i>regression testing</i>, which we try to automate as much as possible. The process above assumes at least partial regression-testing, as otherwise you wouldn't have been able to detect that a <iq>fix breaks something else</iq>.
If you know what you're doing, then you can get away with testing <i>less</i> because your instinct for which changes are going to have knock-on effects elsewhere is generally much more accurate. This won't save you from all problems but it carries you <i>farther</i> than a junior engineer or a non-engineer.
All engineers are on a spectrum. The workflow proposed for using AIs in coding are just a pipe dream that we've seen before. Remember RAD programming? With all of your logic in the UI? That's about where they are now. They'll re-learn all of the lessons that we've already learned about building maintainable software.
AIs are good for helping reasonably skilled and knowledgeable developers build prototypes. They can even help unskilled programmers and non-engineers build <i>some</i> prototypes, taken from a subset of very specific already-known ideas. It can build a web site that takes a few bits of information and calls an API with those bits of information, for example.
<bq>The very thing that makes AI coding tools accessible to non-engineers - their ability to handle complexity on your behalf - can actually impede learning. <b>When code just "appears" without you understanding the underlying principles</b>:<ul>You don't develop debugging skills
You miss learning fundamental patterns
You can't reason about architectural decisions
You struggle to maintain and evolve the code</ul>This creates a dependency where you need to keep going back to AI to fix issues, rather than developing the expertise to handle them yourself.</bq>
This is well-stated and was well-known a year ago. It doesn't look like anything has changed in the meantime. A year ago, as I was preparing for an internal AI training I was leading, I posited that we have to be open to the idea that perhaps all of the tools techniques we've developed and learned over the years were no longer necessary to coding. Why write maintainable code when the AI will just regenerate your code you? Why learn underlying principles when the machine can build what you want without seemingly anyone understanding or even knowing them?
This proposition has turned out not to be the panacea that people had hoped it would be. They probably fundamentally misunderstood how software-engineering works. It turns out that you can't just regenerate everything efficiently. You keep getting a slightly or wildly different product. As you move to market, productivity, stability, and maintainability become more important. We've seen how these tools are incapable of iterating on existing work very well. They've gotten better! But they're still very limited in this regard and, often, seem to be much slower than just writing the damned thing yourself with analysis-based tools.
<bq>This "70% problem" suggests that current AI coding tools are best viewed as:<ul>Prototyping accelerators for experienced developers
Learning aids for those committed to understanding development
MVP generators for validating ideas quickly</ul>But they're not yet the coding democratization solution many hoped for. The final 30% - the part that makes software production-ready, maintainable, and robust - still requires real engineering knowledge.</bq>
<bq>This is a fundamental shift in how we'll interact with development tools. <b>The ability to think clearly and communicate precisely in natural language is becoming as important as traditional coding skills.</b>
This shift towards agentic development will require us to evolve our skills:<ul>Stronger system design and architectural thinking
Better requirement specification and communication
More focus on quality assurance and validation</ul></bq>
<bq>AI tools might actually enable this renaissance. By handling the routine coding tasks, they free up developers to focus on what matters most - creating software that truly serves and delights users.</bq>
<bq>AI isn't making our software dramatically better because software quality was (perhaps) never primarily limited by coding speed. The <b>hard parts of software development</b> – understanding requirements, designing maintainable systems, handling edge cases, ensuring security and performance – <b>still require human judgment</b>.
What AI does do is let us iterate and experiment faster, potentially leading to better solutions through more rapid exploration. But only if we <b>maintain our engineering discipline and use AI as a tool, not a replacement for good software practices.</b> Remember: The goal isn't to write more code faster. It's to build better software. Used wisely, AI can help us do that. But <b>it's still up to us to know what "better" means and how to achieve it.</b></bq>
I very honestly couldn't have put it better myself.
<hr>
<a href="https://arstechnica.com/information-technology/2024/12/twirling-body-horror-in-gymnastics-video-exposes-ais-flaws/" author="Benj Edwards" source="Ars Technica">Twirling body horror in gymnastics video exposes AI’s flaws</a>
The 20-second video attached shows what dozens of billions of dollars invested, as well an entire generation of engineers, have wrought. All of them just chasing material comfort instead of trying to provide actual value. It's a shame. They could be designing ways of making society better rather than pouring all of their efforts into generating 20-second videos of bullshit nobody would want to see, even if it were real.
<h id="programming">Programming</h>
<a href="https://martinfowler.com/articles/designing-data-products.html" source="" author="Martin Fowler">Designing data products</a>
<bq>Working backwards from the end goal is a core principle of software development, and we’ve found it to be highly effective in modelling data products as well. <b>This approach forces us to focus on end users and systems, considering how they prefer to consume data products</b> (through natively accessible output ports). It provides the data product team with a clear objective to work towards, while also introducing constraints that prevent over-design and minimise wasted time and effort. It may seem like a minor detail, but we can’t stress this enough: <b>there's a common tendency to start with the data sources and define data products. Without the constraints of a tangible use case, you won’t know when your design is good enough to move forward with implementation</b>, which often leads to analysis paralysis and lots of wasted effort.</bq>
<bq>A useful test is to define a job description for each data product. <b>If you find it difficult to describe a data product in one or two simple sentences, it’s likely not well-defined.</b></bq>
<hr>
<a href="https://v5.chriskrycho.com/essays/jj-init/" source="" author="Chris Krycho"><c>jj init</c> — Sympolymathesy</a>
<bq>Jujutsu is two things: It is a new front-end to Git. This is by far the less interesting of the two things, but in practice it is a substantial part of the experience of using the tool today. In this regard, it sits in the same notional space as something like gitoxide. Jujutsu’s <c>jj</c> is far more usable for day to day work than gitoxide’s <c>gix</c> and <c>ein</c> so far, though, and it also has very different aims. That takes us to: <b>It is a new design for distributed version control.</b> This is by far the more interesting part. In particular, Jujutsu brings to the table a few key concepts — none of which are themselves novel, but the combination of which is really nice to use in practice: <b>Changes are distinct from revisions: an idea borrowed from Mercurial, but quite different from Git’s model. Conflicts are first-class items: an idea borrowed from Pijul and Darcs.</b> The user interface is not only reasonable but actually really good: an idea borrowed from… literally every VCS other than Git.</bq>
Also not true. Perforce changelists are anything but intuitive for new users. TFS and Subversion branches were a horror to deal with. Everything in VSS. It's not just Git with difficulties in UX. Don't be such a dick, taking easy swipes that you know no-one will question.
<bq>[...] given it is <b>being actively developed at and by Google</b> for use as a replacement for its current custom VCS setup, it <b>seems like it has a good future ahead of it.</b></bq>
That is such a naive thing to say.
<bq>Jujutsu has two discrete operations: <c>describe</c> and <c>new</c>. <c>jj describe</c> lets you provide a descriptive message for any change. <c>jj new</c> starts a new change. You can think of <c>git commit --message "something I did"</c> as being equivalent to <c>jj describe --message "some I did" && jj new</c>. This falls out of the fact that <b><c>jj describe</c> and <c>jj new</c> are orthogonal, and much more capable than <c>git commit</c> as a result.</b></bq>
<bq>[...] a given change logically the child of four other changes, with identifiers <c>a</c>, <c>b</c>, <c>c</c>, and <c>d</c>? <c>jj new a b c d</c>. That’s it. One neat consequence that falls out of this: a merge in Jujutsu is just <c>jj new</c> with the requirement that it have at least two parents. (“At least two parents” because having multiple parents for a merge is not a special case as with Git’s “octopus” merges.)</bq>
When would you need this? Am I missing a use case? I've never felt particularly like I needed to merge four branches together but I'm just a simple guy with simple needs. I'm sure I'm missing something by not wrangling four simultaneous branches instead of programming.
<bq>you can describe the change you are working on and then keep working on it . The act of describing the change is distinct from the act of “committing” and thus starting a new change. This falls out naturally from the fact that the working copy state is something you can operate on directly: <b>akin to Git’s index, but without its many pitfalls.</b></bq>
What pitfalls? At the end of the article, he actually backs off on this and admits that Git's index is kinda necessary for staging parts of the workspace. Also, this whole feature isn't as revelatory as he's making it out to be.
<bq>With <c>jj new -A <some></c>, <b>you just insert the change directly into the history.</b> Jujutsu will rebase every child in the history, including any merges if necessary; it “just works”. <b>That does not guarantee you will not have conflicts, of course,</b></bq>
Um. Ok. I mean, how could it? It's not magic. Conflicts are the nasty part, though, and are always more difficult to deal with when doing operations on multiple commits at once.
<bq>Jujutsu can incorporate both the merge and its resolution (whether manual or automatic) directly into commit history. Just having the conflicts in history does not seem that weird. “Okay, you committed the text conflict markers from git, neat.” But: <b>having the conflict and its resolution in history, especially when Jujutsu figured out how to do that resolution for you, as part of a rebase operation?</b> That is just plain wild .</bq>
That's a good idea. It lets you revisit the merge by preserving the inputs.
<bq>Jujutsu will add conflict markers to a file, not unlike those Git adds in merge conflicts. However, unlike Git, those are not just markers in a file. They are <b>part of a system which understands what conflicts are semantically, and therefore also what resolving a conflict is semantically.</b> This not only produces nice automatic outcomes like the one I described with my library above; it also means that you have more options for how to accomplish a resolution, and for how to treat a conflict. Git trains you to see a conflict between two branches as a problem. <b>It requires you to solve that problem before moving on. Jujutsu allows you to treat a conflict as a problem which [must eventually] be resolved,</b></bq>
<bq><b>Jujutsu allows you to create a merge, leave the conflict in place, and then introduce a resolution in the next commit</b>, telling the whole story with your change history.</bq>
<bq>Conflicts are inevitable when you have enough people working on a repository. Honestly: conflicts happen when I am working alone in a repository, as suggested by my anecdote above. <b>Having this ability to keep working with the repository even in a conflicted state, as well as to resolve the conflicts in a more interactive and iterative way is something I now find difficult to live without.</b></bq>
<bq>[...] this ability to move part of one change into a different change is a really useful thing to be able to do in general. I find it particularly handy when building up a set of changes where I want each one to be coherent — say, <b>for the sake of having a commit history which is easy for others to review.</b></bq>
<bq>The default log template shows me the current set of branches, and their <b>commit messages are usually sufficiently informative that I do not need anything else.</b></bq>
Sure, ok. No branch label required. That's definitely not a recipe for disaster for most developers. It never struck me as too burdensome, really.
<bq><b>GUI tools could make all of those much easier. Any number of the Git GUI s have tried, but Git’s underlying model simply makes it clunky.</b> That does not have to be the case with Jujutsu. Likewise, surfacing things like Jujutsu’s operation and change evolution logs should be much easier than surfacing the Git reflog, and provide easier ways to recover lost work or simply to change one’s mind.</bq>
First of all, I don't think there's that strong a point to make here. A GUI like SmartGit manages to elide a lot of the complexity. I wonder if Syntevo is working on anything for <c>jj</c>?
<hr>
<media href="https://www.youtube.com/watch?v=83UVWrfYreU" src="https://www.youtube.com/v/83UVWrfYreU" source="YouTube" width="560px" author="dotnet / Sergio Pedri & XAML Llama" caption="MVVM Building Blocks for WinUI and WPF Development">
I learned that the latest preview version of the MVVM Community toolkit is already using partial properties---which are new to C# 12 in .NET 9---to help you write even less code for your view models. Also, you can use <c>x:Bind</c> instead of <c>x:Binding</c> to have a <i>compile-time</i>, reflection-free binding, which has much better support for code-completion, inspections, etc.
<hr>
<media href="https://www.youtube.com/watch?v=w8BKS1a8MnU" src="https://www.youtube.com/v/w8BKS1a8MnU" source="YouTube" width="560px" author="dotnet / Vincent Baaij & Denis Voituron" caption="Exploring the New Fluent UI Blazor Library: Next-Gen Web Components and Architectural Innovations">
This library is quite nice and seems to offer a good basis on which to start projects. It's interesting, though, how people just <i>say</i> things that they've heard. Denis said at one point that Playwright will be integrated soon in order to improve "code quality", which is absolutely not what tests do. Tests do the second thing he mentioned: "avoid regression." If you have tests, your code can be any old quality. The tests don't care, as long as they're green.
<hr>
<media href="https://www.youtube.com/watch?v=kn-nmFsaMHc" src="https://www.youtube.com/v/kn-nmFsaMHc" source="YouTube" width="560px" author="dotnet / David Ortinau, Matthew Faust, & Kevin Bieri" caption="How Fidelity uses .NET MAUI for Cross-platform desktop">
This is a pretty impressive demo of what is now possible with Maui. They're using Telerik controls. The neat thing about this Maui app is that it runs on MacOS as well. They talk about WebViews a lot---and painting to the canvas---so it also runs in a browser. He does discuss how using SkiaSharp is a valuable place to seek performance but that you are almost certainly going to make usability or accessibility concessions. Use source generators, not reflection. Interestingly, they mention how you can speed things up with Windows Defender by signing assemblies with "HSM methodology", which is something to look into, I think.
I just can't help but think that it isn't any faster or better-looking than the trading app that I was lucky enough to be able to build for Peak6 back in 2010--2013. That one was a multi-threaded Winforms app that connected to a data hose that shoveled tons of data toward the app, in dozens of open windows and portals. Each of the grids showed data in grouped, tiered, aggregated, and heat-mapped views. When it really got going, you had 40+ open windows on eight screens, all updating in real-time. Close the app and re-open it and it came right back where it was. Very, very colorful.
<hr>
<media href="https://www.youtube.com/watch?v=v2YnWgiNqL0" src="https://www.youtube.com/v/v2YnWgiNqL0" source="YouTube" width="560px" author="dotnet / Mike James" caption="Cross-Platform Magic: Transforming WPF Apps with Avalonia XPF">
This is also an interesting look at Avalonia, which is a very interesting migration path from WPF, which is Windows-only, to a multi-platform approach that doesn't involve rewriting everything in Maui or Blazor.
With Avalonia, you can either port from WPF, primarily changing the styles to use the more CSS-style styling of Avalonia. Because of this feature, though, an Avalonia app can relatively easily be deployed to a web application. He discusses a community project <a href="https://github.com/BAndysc/AvaloniaVisualBasic6" author="BAndysc" source="GitHub">Avalonia Visual Basic 6</a>, which you can <a href="https://bandysc.github.io/AvaloniaVisualBasic6/">browse in a demo</a>.
It runs in a browser, it runs on all desktop platforms---including Linux, which Maui doesn't support.
On top of that, it also supports something called Avalonia XPS, which is a complete replacement for the WPF rendering engine, so you can "port" and app just by changing the SDK uses in the project files. That's it. He demonstrates it live and it works extremely quickly and seamlessly. Of course, if you have P/Invokes or a lot of custom rendering---or external components that aren't compatible---then you'll have to do more work. But it's a huge step forward to getting WPF apps running on other platforms.
For charts, he mentions that <a href="https://www.scichart.com/" author="" source="">SciChart</a> is the "best" charting library for WPF and that it is compatible with Avalonia. They use the XPS layer to <a href="https://www.scichart.com/blog/running-scichart-wpf-on-linux-its-possible-heres-how/">provide support for Linux platforms</a>.
His final demo shows a WPF app (the calculator) running with XPS but <i>targeting a web browser</i>. This is wild. I had completely underestimated Avalonia.
<hr>
<media href="https://www.youtube.com/watch?v=zw-ZtB1BNl8" src="https://www.youtube.com/v/zw-ZtB1BNl8" source="YouTube" width="560px" author="dotnet / Steve Smith (ardalis)" caption="Clean Architecture with ASP.NET Core 9">
I follow this guy's blog and find many of his articles to be a bit basic. It feels like he's writing just enough articles to keep his Microsoft MVP badge. In this video, though, he is <i>en fuego</i>, absolutely <i>ripping</i> through a whirlwind introduction to clean architecture, with some demos and some code. You can find the sample projects in <a source="GitHub" href="https://github.com/NimblePros/eShopOnWeb">NimblePros / eShopOnWeb</a> and <a href="https://github.com/ardalis/CleanArchitecture" author="" source="GitHub">ardalis / CleanArchitecture</a>.
He also very quickly demonstrates how to use the new API window to submit requests to the running server; this replaces external tools like Postman, keeping you within Visual Studio (or Rider, which has supported for even longer).
In his full-tilt presentation, he also mentions using <a href="https://www.papercut-smtp.com/">Papercut-SMTP</a>, which is <iq>a 2-in-1 quick email viewer AND built-in SMTP server (designed to receive messages only).</iq> This is ideal for local devs to test emailing code and can be easily integrated and started with .NET Aspire.
After having generated a solution using his clean-architecture template, he says that <iq>this is the slowest part ... opening the new solution in Visual Studio,</iq> but this is really unfair because the solution is restoring and doing everything in the background, while he's clicking around in the solution explorer. Previous versions of Visual Studio would never have allowed this. He even launches the product and is browsing around in the Aspire Dashboard and the web server's OpenAPI front-end within seconds. It's an impressive demo.
<hr>
<media href="https://www.youtube.com/watch?v=7Qm-6tFSd4Y" src="https://www.youtube.com/v/7Qm-6tFSd4Y" source="YouTube" width="560px" author="dotnet / Goh Chun Lin" caption="Modernising Legacy .NET Codebases with NDepend">
I really like the too NDepend and I was quite interested to see how Lin used it to upgrade a codebase from .NET Standard 2.1 to target .NET 8, and then .NET 9. He's from Singapore so he was not easy for me to understand---but he definitely knows what he's doing. It reminded me of a time about 9-10 years ago when I was really heavily using the tool to modernize the Quino code-base, which had grown quite organically and was proving difficult to use for only web servers, especially those running on Linux. We made our own journey from .NET Framework 4.7.2 to .NET Standard 1.0 (didn't work at all), then to .NET Standard 2.0 (success!). I continued to use the tool for the next five years.
Here is a list of related articles, which I argue go into more depth on how to use NDepend than the video. It hasn't changed a significant amount in 10 years---it was an incredibly powerful tool, and it still is. I haven't used it much at my new job at Uster but time will tell.
<ul>
<a href="{app}/view_article.php?id=3058" author="" source="">2014: The Road to Quino 2.0: Maintaining architecture with NDepend (part I)</a>
<a href="{app}/view_article.php?id=3064" author="" source="">2014: The Road to Quino 2.0: Maintaining architecture with NDepend (part II)</a>
<a href="{app}/view_article.php?id=3167" author="" source="">2015: Splitting up assemblies in Quino using NDepend (Part I)</a>
<a href="{app}/view_article.php?id=3169" author="" source="">2015: Iterating with NDepend to remove cyclic dependencies (Part II)</a>
<a href="{app}/view_article.php?id=3546" author="" source="">2018: The Road to Quino 2.0: Maintaining architecture with NDepend (part I)</a>
<a href="{app}/view_article.php?id=3670" author="" source="">2019: Finding deep assembly dependencies</a></ul>
<hr>
<media href="https://www.youtube.com/watch?v=uKm1ho881gk" src="https://www.youtube.com/v/uKm1ho881gk" source="YouTube" width="560px" author="dotnet / Sayed Ibrahim Hashimi" caption="New tools in Visual Studio for Web API developers">
He starts off with a good overview of the basics of "HTTP files", which showed up with .NET 8 and allow you to keep sets of API calls for testing, much in the way that people have been using Postman or Insomnia. The new feature is that HTTP files can now store values in variables for transferring results from one call to others. He uses Visual Studio but, I've noted elsewhere, Rider has supported them for even longer than Visual Studio.
He also shows a not-quite-ready-for-primetime-but-coming-soon feature of Visual Studio called the <i>Endpoints Explorer</i>, which is a sort of Swagger/OpenAPI browser available as a Visual Studio panel.
<hr>
<media href="https://www.youtube.com/watch?v=MPHzwVWKruk" src="https://www.youtube.com/v/MPHzwVWKruk" source="YouTube" width="560px" author="dotnet | Petr & Tomáš Grošup" caption="F# - Nullable Reference Types">
This is by far the nerdiest video in the entire series. It's chock-full of interesting information about F#, with a focus on the new support for <c>null</c>, which it has in order to better interoperate with modules built in .NET built in other languages that <i>do</i> support <c>null</c>. F# is a functional language and uses <i>options</i>. However, Tomáš demonstrates how this is not sufficient when working with data coming in from outside of the F# system. The feature piggybacks on the <c>|</c>-operator to allow <c>| null</c> in any type definition.
Most of the rest of the presentation shows how the new feature integrates with options, pattern-matching, generic types, etc. There are analyzers in the compiler that help your code shed "nullness" as soon as possible, leaving most of your F# code without nulls, <i>as God intended.</i>
Tomáš calls "shadowing" a feature, which is being a bit generous. It's a nice trick to declare a "new" version of the incoming argument that has a type narrowed by a null-check function call. Languages like TypeScript and C# actually have a "feature" in which the type is narrowed without variable-shadowing. It amounts to the same thing, though. I suppose F#'s version is less gimmicky and implicit, but shadowing is frowned up in so many other places, because it's super-confusing when done inadvertently. Using it to narrow a type is a clear use case but it will also prevent analysis from being able to preclude accidental shadowing.
This video is mostly just an F# tutorial, though. At the end, a guy named Kinfey pops in to tell Tomáš that he better wrap things up. It's quite unprofessional but also quite funny.
<hr>
<media href="https://www.youtube.com/watch?v=Dk-MPeSxv18" src="https://www.youtube.com/v/Dk-MPeSxv18" source="YouTube" width="560px" author="dotnet | Anthony Shaw & Aaron Powell" caption="Embedding Python libraries in .NET services and applications">
This isn't the most organized demo, and they don't really show how to set things up but it does show how integration of Python into .NET is much simplified by source generators that generate bindings for marshaling data to and from Python. Not only that but .NET Aspire is indispensable for configuring a system like this, not only for tying together the moving parts---PostgreSql, Python API, web front-end---but also for monitoring not only the startup but also API executions, which you can track in a nice process-graph for each request. It even shows how the chart is rendered in Python, returned as bytes to C# and then rendered into the body of the response directly (basically sending back an image rendered in Python without conversion).
Unlike previous attempts like IronPython, this approach uses .NET Aspire to simplify integration of Python projects and code without changing it. It just integrates it, like taking care of setting up the PostgreSql database and then passing the connection string to the Python code.
<img src="{att_link}dotnet_aspire_for_csnakes_python.jpg" href="{att_link}dotnet_aspire_for_csnakes_python.jpg" align="none" caption=".NET Aspire for CSnakes / Python" scale="35%">
Anthony discusses at the end how the common data types used in Python ML processing (tensors, etc.) are all supported in an efficient manner, allowing you to pass buffers back and forth from Python to .NET and offloading code like web servers and GUIs to .NET development while benefitting from existing Python code.
<hr>
<media href="https://www.youtube.com/watch?v=LFQ0qCiKL_Y" src="https://www.youtube.com/v/LFQ0qCiKL_Y" source="YouTube" width="560px" author="dotnet | Scott Hunter & Paul Yuknewicz" caption="Building and scaling cloud-native, intelligent applications on Azure and .NET">
This is a longer presentation---almost an hour---that goes in-depth on converting an ASP.Net Web application first to an <i>Azure Function</i>, and then adding a .NET Aspire Host project to not only coordinate communication between the front-end client and the Function project, but also to facilitate deployment directly to a <i>Cloud Container</i>.
Hunter explains the different between <c>WithReference()</c>, which indicates that a service depends on another service being started and <c>WaitFor()</c>, which indicates that a service should <i>wait</i> until a health-check indicates success before declaring itself available. If you think about it, almost all references are important in his way, but .NET Aspire still makes the distinction to give your app flexibility in starting up. If you have two service that depend on each other, they can't each wait for each other, or you might be a deadlock (unless the health-check can return success before the service itself is ready).
On top of that, there is a method called <c>WithExternalHttpEndpoints()</c>, which they describe as "doing the right thing" and setting up a virtual private network in the cloud container so that only the web client has access to the Azure Function endpoint. <iq>It's network-isolated by default, which is one of the features of container apps, which is the default way of publishing in an Aspire application.</iq> This is very cool and seems a lot easier than writing a bunch of custom Bicep code.
The web client can now access the Azure Function at the alias that it assigned in the .NET Aspire host project's configuration. That configuration is all written in C#, with a nice fluent API. I'm a little disappointed that they don't use a shared C# constant to define this, but nobody in any of the .NET Aspire demos seems to do that, preferring to ride the ragged edge of disaster with copy/pasted identifiers.
Getting back to the demo: He shows how it's published to Azure, using <i>Managed Identity</i>. The .NET Aspire dashboard shows the remote resources with full logging available, also available and published to Azure. It's the same dashboard as you would use locally.
Everything they demonstrated is available in several solutions, all listed in <a href="https://gist.github.com/paulyuk/316cf37d31c08ddb6df38e905c0b3d76" source="GitHub Gist" author="Paul Yuknewicz">Samples for Building and Deploying Cloud Native Intelligent Apps</a>.
They say, <iq>All you do is clone the repo, and then you do <c>azd init</c> and <c>azd up</c> and they're super-easy to get in the cloud and try yourself.</iq> It will deploy the resources into your subscription and region of choice. There are <i>detailed</i> instructions for each example, e.g., <a href="https://github.com/Azure-Samples/azure-functions-openai-aisearch-dotnet">azure-functions-openai-aisearch-dotnet</a> (RAG example).
Paul goes into this example in more detail, examining the Bicep scripts (which I'm not sure whether they're hand-written or generated by .NET Aspire). They cover how to build an embedding for RAG and how much support there is in .NET now for making this kind of thing easy. They use a standard HTTP body as input but discuss many other potential input streams (queues, etc.), all of which are just as easily supported by default.
I learned that "agenting" is just the cool new term for allowing an LLM to use "tools". It's also called "skilling" (adding "skills"). The most approachable epithet is the least-cool-sounding one: "function-calling", which at least explains what it does. So "agenting" is empowering an LLM to execute tools in order to enhance results.
Like many of the other videos, they use the HTTP Files feature to store recipes of calls to make against an HTTP server.
When it doesn't work, you see (A) how Microsoft also has a locked-down network that they have to work around. They very smoothly transitioned to Scott discussing security initiatives that Microsoft has taken and is taking to lock things down by default for new applications, including those generated by customers. Secure by default. They then smoothly transition back to the demo, for which Paul has reset his network to a working state. Nice job.
The funny thing about some of these demos, though, is that they used an LLM to find out what time it is in New York City...and everyone held their breath to see if it would get it right. It took about 10 seconds to figure it it. That's laughable on its face, but the point is that it's now quite easy to set up a powerful tool to round-trip to an LLM running securely in Azure, built with access to custom functions (agenting) and custom data (RAG). Subsequent demos are more impressive.
At <b>40:00</b>, Paul addresses why it's interesting to solve problems in this way: you can scale up quickly to much higher data volumes without changing the architecture or implementation at all. This is great but you want to remember the aphorisms, "you're not Google" and "you don't have big data." In this case, though, an argument can be made that these technologies are the right way to build it when its small <i>and</i> when its large. The support and abstractions are good enough that you don't have to choose a a non-scalable solution early in the process to save money.
On the subject of ignoring warnings in code, though, Paul had a typo in the word "cacluated" that Visual Studio showed him and he <i>still</i> hadn't bothered to quick-fix it, even though the entire world would be seeing it.
The final example is showing how to use a "blog trigger", which is a function that reacts when new data is added to an Azure blob container. When you drop a PDF into it, it uses standard, available recognition tools to analyze the document and then funnel that content to the LLM (which is not great at "cracking" PDFs on its own, when provided as context). These dependent tasks are captured as "activites", which are composed as part of a "durable function", which is essentially a high-level abstraction on top of potentially distributed calls.
This is the part that Paul called "orchestration" at the beginning of this section. It's not orchestration like Kubernetes (although possibly related, way down at the low level), it's orchestration of high-level activities and representing them as a single function call that takes an indeterminate amount of time. Paul demonstrates how much tooling and web-based observability there is available for debugging and monitoring solutions.
<bq>Again, this is Functions, so you can do this at scale. You can send <i>million</i> of documents.</bq>
It just costs money, but you're not otherwise limited by the architecture if you build it with these concepts, this architecture, and these building blocks.
<hr>
<media href="https://www.youtube.com/watch?v=2uLGXe95kTo" src="https://www.youtube.com/v/2uLGXe95kTo" source="YouTube" author="Nick Chapsas & Daniel Roth" caption="I Confronted Microsoft About Blazor's Future" width="560px">
I mean, honestly, can you just write "interviewed" instead of "confronted"? Do we really have to write everything as if it were a title in a Fleet Street broadsheet? It's a friendly interview.
<ul>Talk about the difference between .NET LTS and non-LTS versions. There is no difference in quality.
Why wasn't there so much Blazor news this year? The .NET 8 release was so huge that they spent a lot of time in the first half of the year after the release simply stabilizing that release, and then focused on quality improvements in .NET 9. There is a big feature that consolidates the different ways of using Blazor into a more uniform concept.
Who's using Blazor? How big is it? Year-over-year growth is high but the overall usage numbers are still kind of low, relative to other frameworks, like WebForms, ASP.Net MVC, ASP.Net Core, etc.
Is Blazor going to go the way of Silverlight? No, it's the recommended way to develop web sites on .NET. Nick gave a good intro here, talking about how good WebForms actually was---taking asided <c>ViewState</c>---but that frameworks like Next.JS are still re-inventing what WebForms had already offered and pawning it off as a revelation. It's kind of how most of the server-side frameworks now just look like PHP.
.NET Aspire has a super-short support cycle; it goes obsolete with the first point release. You have to upgrade it rather aggressively to stay in-support. It's not part of the .NET release. It's out-of-band. It's super-useful but it's a bunch of tools and wiring without much of its own API. It makes sense to keep support cycles short because, while it's been released for others because it's so damned useful, it's also acknowledged that the surface will potentially change quite a bit as more and more real-world use cases appear.
Why do we even need Blazor? Microsoft isn't using it anywhere, is it? The problem that Blazor solves is trying to build a web site with a team that doesn't know any of the languages, tooling, or paradigms of front-end development. For the vast majority of web sites, you really don't need full-fledged React or Angular or Svelte. While there are developers who can legitimately live in both worlds, Blazor is for those for whom a good web site is good enough. You can make anything in Blazor, of course, but it really helps you get to a standard, good-enough view (especially with Blazor Fluent UI) that covers so much of the software being built. Roth describes how the client-side world is such a different beast and that spinning developers up to be productive and happy in that world takes a lot of time, money, and resources. It's a fair point. Many people just can't wrap their heads around that style of development. It's too alien to them. I would venture to say that most web developers aren't very good at software-development, don't really understand the environment or their tools, and are just cargo-culting their way to freedom and happiness. It's why we've had so many RAD dev environments, it's why we have so many frameworks, even after a good 20 years of development churn, it's still churning. There is almost no consensus on how to address the plethora of non-functional requirements in clients: accessibility, compatibility, graceful degradation, progressive enhancement, etc. The best philosophy seems to be PWA and probably an MPA not an SPA for <i>apps</i>, which is not most web sites. Most web sites are mostly static. So the common web frameworks are ill-suited to those kinds of pages. Etc. Etc. <iq>Blazor lets me get more with less. I can't afford to hire a full-time front-end developer.</iq>
Why is .NET trying to do everything? Isn't that a recipe for being mediocre in most things? <iq>I think it's fair to say that there are parts of the .NET stack that have ... more strengths than other parts.</iq> I think that there's a real need at Microsoft for doing a lot of things in all areas. MS needs to develop web sites, needs to develop mobile apps, needs to develop cloud-based apps, etc. They're going to develop at this scale anyway. We can be happy that this workman's version of these tools are available, and cross-platform. Apple makes some amazing technology that only works on their hardware and on their systems and they don't have a cloud. .NET runs on AWS, GCP, Azure, etc. .NET runs on ARM, x86, Linux, Windows, MacOS, etc. The base library is incredibly well-designed.
How big is the Blazor team? There are six full-time devs. It sits atop other parts, like SignalR, which has two full-time devs. The actual framework is six engineers. He mentions that the community does some heavy-lifting here as well.
Who's using Blazor? Roth mentions some customers, and then talks about how it's used in a lot of places internally at Microsoft. They don't use Blazor for Teams, Office365, large customer-facing products. Those use React. A lot of that is historical, because Blazor has only been around for 5 years. They used to use Script#, which was a transpiler for C# to JavaScript, but then they moved to React. A ton of the recent, internal LOB-style products use Blazor. That's what it's for. Smaller teams use Blazor and there are thousands of devs who use Blazor at Microsoft.
Is there anything public-facing that uses Blazor? Very little. The Aspire Dashboard is one of the only things. Part of that reason is <iq>technology fit</iq>. Blazor is very good for internal LOB that runs on a known set of devices and capabilities. Think Office, though: they need to be able to run on anything. That's a completely different proposition because it constrains you more. You need more control of the stack. A high-level solution like Blazor doesn't save you time there; it costs you time. For products that need to be optimized in terms of download-size and speed, etc., then you probably should use JavaScript directly. We recommend Blazor, if it fits your scenarios. Otherwise, use ASP.Net Core with a JS front-end. He made the comparison to using Node on the server. It's not the optimal thing for performance, but it might match your team best. But you can scale the server-side with money. You can't scale the client-side. Roth agrees: if you have millisecond-initial-download constraints, then Blazor isn't for you. He does say that you'd be surprised how many apps <i>aren't</i> like that. I'm not surprised. He says that even the heavyweight Blazor server model, which is basically PHP-style, if we're honest, then you can support dozens of thousands of concurrent users on a single, modestly sized VM. Most apps have expectations of hundreds of concurrent users. Being server-based will restrict your interactivity if you rely on it too much with server-based stuff. For forms and LOB, though? It's <i>fine</i>. You're not Facebook. Relax.
How many people use the web-assembly stuff instead? The server-side Blazor is slightly more popular, though. They're both growing at about the same speed. .NET 10 plans to invest more in the server-side version. They need to solve some problems about server-side state: hydration strategies for longer-lived processes and workflows.
What if you had to make an app for millions of users? If it's B2B or LOB, then consider Blazor. Start with Server-side, then move to interactive server-rendering on the client, move to WASM-based to push individual islands to the client where necessary. If it's customer-facing, then it's going to be .NET on the backend and a JavaScript front-end (he doesn't say "React", notably). I think MS engineers are also seeing the value in writing to the web platform, using JavaScript. He doesn't even say TypeScript, because they're so close these days. It would be amazing if browsers allowed the syntax directly so we didn't have to transpile anymore. There's a <a href="https://github.com/tc39/proposal-type-annotations">proposal</a> for this.
Yeah, but which platform would you use if you couldn't use Blazor? TypeScript because static typing is awesome. He mentioned that the Angular 18 release was <iq>pretty compelling</iq>.
Daniel asked about server-side rendering? Would you look at Next.JS? SSR? Server-side components? Nick says Next.JS but I don't agree. I think their solutions, just like Remix, about which I've also read quite a bit. Their solutions get ... complicated at scale, with their attempts to paper over the difference between client and server parts without being forced to know where anything is running tending to be quite leaky abstractions. I've read quite a bit about Remix and Next.JS and, in both of those, I've seen where cracks show that people deeply familiar with the technology think "aren't so bad" but that's only because they know that it <i>used to be so much worse.</i> Daniel says <iq>Look around at what is going to be around for a while. Everybody has to plan for the longevity of their career.</iq> This is so sad, though. We don't get anything great from people "planning for the longevity of their career." We get cool things from people who just can't help but try to make something better, to make something cool, to make something to help themselves, that interests them. Dude, React is a hype. Most people are using it poorly. You get to leaky abstractions in the first two days of teaching, where you have to tell people how to avoid horrible performance with <c>useMemo()</c> and <c>useCallback()</c>. They're working on a compiled version of React, which is just where <i>Svelte</i> has always been.
What's next for Blazor? Roth talks about SSR a lot. Interaction between SSR and client-side, etc. Performance and caching. I think Blazor will be a better, more well-thought-out and much less ad-hoc approach to SSR than Next.JS and Remix have gotten. Why? Because the people that Microsoft has and the culture that they have tend to produce really good APIs. That's just a fact. Multi-threading feature is on the radar again. They're going to try again, but it's not committed yet. Security is the #1 push right now, though. So if Blazor has work to do there, then that takes priority. This will result in a more secure stack for users of Blazor as well.
If you had to work with a different back-end language, what would you use? Daniel responded <iq>Python</iq>. Nick said <iq>Kotlin</iq>, which he says is how JetBrains fixed Java by making it C#. I would take another look at Swift, which I haven't used for anything real since version 5. Or maybe finally do something in Rust, just to see where the tooling is at.
</ul>
<hr>
<a href="https://drewdevault.com/2024/12/10/2024-12-10-Daily-driving-jujutsu.html" author="Drew Devault" source="">I'm daily driving Jujutsu, and maybe you should too</a>
<bq>As a git power user, I rely heavily on git rebase to edit my git history as I work, frequently squashing and splitting and editing commits as I work, and I used “stacked diffs” without branches before it was cool.</bq>
Same. I've just never done it on the command-line, so I've never felt the pain of doing of this git-fu there. SmartGit makes most of my history-editing seamless, easy, and foolproof. I know all of you console-jockeys hate it but give me drag-and-drop operations any day.
<bq>When I edited this earlier commit, I was in the middle of working on something else and I hadn’t committed or even staged it. I did not run git stash, nor git commit -m"WIP", nor git add, nor git checkout, nor git rebase, at any point. The only command I ran was jj squash.2 When it was done, I was returned immediately to where I left off, with a half-written, uncommitted change in my workdir. It took all of two seconds to complete this operation and pick up where I left off.
The “wow” moment came when I realized that I had done this several times that day without finding it particularly remarkable. Jujutsu makes editing history absolutely effortless.</bq>
This is, I think, the killer feature of jujutsu: <i>you can edit history that you don't currently have checked out.</i>
The other article I've read about it (linked above) also talked about retaining conflicts in commits as first-class, semantically valuable artifacts that the conflict resolver can either resolve immediately or even later when another commit comes along to make the conflict go away. This is very interesting for multi-commit rebases where git currently makes you resolve the conflicts <i>every step of the way</i>, even when you know that the conflict will definitely go away further up the chain.
Often, you don't even remember how you actually want to resolve the conflict in the "old" commits---and you don't care. This only happens with rebase, which I use much, much, much more than merge. When you merge, git considers the sum of all changes in all commits that you're merging, so you get the behavior you want: the sum of the commits eliminate irrelevant conflicts. Rebase in git doesn't benefit from this behavior. In jujutsu, it does.
For what it's worth, while these things are attractive, the more in-depth article above suggests that even were I to use the command-line more, the drawbacks still outweigh the benefits for me.
<h id="fun">Fun</h>
<img src="{att_link}wrath_of_khan.jpeg" href="{att_link}wrath_of_khan.jpeg" align="none" caption="Wrath of Khan" scale="50%">
<bq>Celebrate Christmas with
an ornament about a
man who died to save others,
then rose from the dead
to the great ioy of many.</bq>
According to <a href="https://www.geekalerts.com/star-trek-ii-the-wrath-of-khan-mr-spock-and-captain-kirk-the-needs-of-the-many-ornament/" author="" source="Geek Alerts">Star Trek II: The Wrath of Khan Mr. Spock and Captain Kirk Ornament</a>,
<bq>[...] you can press a button to hear, <iq>The needs of the many outweigh the needs of the few… or the one.</iq></bq>
Unfortunately, the link to the Hallmark store is no longer working---the article is from 2015.
It's been 10 years, so they're not making it anymore. You can find some on EBay and Etsy by searching "buy star Trek II: The Wrath of Khan Mr. Spock and Captain Kirk The Needs of the Many Ornament" ... but the one on EBay is $125, while there are apparently five on Etsy, but they're CHF220.
<hr>
<media href="https://www.youtube.com/watch?v=og9DV0Si8bs" src="https://www.youtube.com/v/og9DV0Si8bs" source="YouTube" author="George Carlin" date="1988" width="560px" caption="The Law & Order Gang | George Carlin | What Am I Doing in New Jersey (1988)">
<bq>Edwin Meese alone has been investigated by three special prosecutors. And there's a fourth one waiting for him in Washington right now. Three separate special prosecutors have had to look into the activities of the Attorney General---and the Attorney General is the nation's leading law enforcement officer.
See, that's what you got to remember: this is the Ronald Reagan administration we're talking about. These are the law-and-order people. These are the people who are against street crime. <b>They want to put street criminals in jail to make life safer for the business criminals. They're against street crime. Yeah, yeah. They're against street crime providing that street isn't Wall Street.</b>
And the Supreme Court decided, about a year ago, that it's all right to put people in jail now, if we just think they're going to commit a crime. It's called preventive detention. <b>All you got to do now is just think they're going to commit a crime. Well if we'd known this shit seven or eight years ago, we could have put a bunch of these Republican motherfuckers directly into prison.</b></bq>
That's only the second minute. This whole 6:44-minute clip is a tour-de-force.
It's so tragic how a comedy routine from almost 40 years ago is still so current. <i>40 years</i> ago and we're still bitching about corrupt politicians, Wall Street crime, abortion, censorship---the evergreen topics apparently.