Category: Tech
Short Novel : The Quiet Republic – Episode 2
This is a novel I’m going to run for the next 4 years, when I have the time, when I’ll find the inspiration to write about the singular mess that is the World right now with the USA leading the direction to Hell.
The first iteration of this essay is here
“When democracy fades, the silence speaks.”
The Last Orders
They came at midnight. DOGE was swift. The Department of Government Efficiency. A joke, once. But no one laughed anymore.
The paperwork was ready before the signatures. The agencies were dismantled before the sun rose. EPA. Gone. Labor protections. Erased. DOJ. Rebuilt.
There were no resignations. Only terminations. The new men arrived before the old ones had cleared their desks. Loyal. Hungry. Ready.
The networks called it “necessary streamlining.” The spokespeople used new words. “Excess waste.” “National renewal.” “America first.”
People nodded. It was easier to agree.
The Obedience
The media knew its place. “Obey in advance.” The new rule. The only rule.
They were not told what to say. They did not need to be. They watched the first few arrests. Journalists. Lawyers. Activists.
Then they stopped watching.
Meta deleted names before they were spoken. Google erased questions before they were asked. The past was rewritten before it could be remembered.
On X, the voices did not vanish. They agreed.
The last editorial boards met in empty rooms. There was nothing left to discuss.
The White House held press briefings still. But now, the behemoth stood at the podium.
Her voice was thunder. Her words were simple. “He is strong. He is right. Obey.”
They clapped.
The Camps
ICE worked at night. The first deportations came in waves.
Then they changed the rules. The flights stopped going south. They went east. To Guantanamo.
A reporter asked why. The question was not aired.
The first detainees were migrants. Then journalists. Then activists. Then the ones who asked why.
The government did not confirm the number. There was no number to confirm.
No one came back.
The Defiance
There was some, at first.
California refused. New York resisted. The governors made speeches. They passed laws.
The President called it treason.
The troops came. The orders were clear. Federal mandates would be enforced. No exceptions. No resistance.
The police held at first. The people fought back. They blocked the roads. They shouted. They threw bricks.
Then the trucks came.
Men in black. No insignia. No names. Only rifles and cold faces.
“Volunteers,” the networks called them.
The streets burned. Then they went quiet.
The Trade War
The headlines spoke of strength. America did not need its allies. It did not need Europe. It did not need Canada.
Tariffs rose. The factories stayed closed. The markets buckled.
The people were told to endure. Sacrifice was patriotic.
The cars cost more. The food cost more. People learned to eat less.
It was a lesson in resilience.
The Realignment
Putin was the good guy now.
Ukraine had never been a friend. It had always been corrupt. Always been the villain. The war? Their fault. The dead? Their problem.
DARVO. Deny. Attack. Reverse Victim and Offender.
The maps changed. The news changed. The truth changed.
A soldier in Odessa sent a message home. “They say we are the enemy now.”
His mother did not reply. Her internet was gone.
The Resistance
It started slow. A few thousand in Chicago. In Boston. In L.A.
They marched. They shouted. They burned his image.
Then the power cut. Phones went dark. Cameras stopped working.
The first ones vanished that night. The rest went home.
The next morning, the papers called it a “temporary unrest event.”
It did not happen again.
The Last Silence
The ballots were printed before the votes were cast.
A hundred million Americans stayed home. They knew better.
The networks ran their panels. Historic, they said. The strongest turnout in history.
The loudest voices clapped. The silent ones watched.
The CEOs in the glass towers signed the last papers.
The internet belonged to them now. Not in pieces. Entirely.
The last independent servers were gone. The last free channels closed.
The markets stabilized. Stocks soared. The dollar was stronger than it had been in years.
People had jobs again. Cheap homes. Order.
The streets were clean.
The crime reports dropped to zero.
All was well.
All was quiet.
L’Ère de la Bêtise Automatisée et de la Démocratie Décomposée
Nous voilà à la croisée des chemins, perdus entre deux gouffres béants. D’un côté, l’intelligence artificielle, cette bête froide et sans visage, s’infiltre partout, avale nos métiers, façonne nos vies, écrit nos histoires à notre place, sans jamais nous demander notre avis. De l’autre, nos démocraties fatiguées, vieillies avant l’âge, brinquebalantes sous le poids de bureaucrates aveugles, de dirigeants somnolents qui, dans leur grand bal d’ignorance, détruisent des choses qu’ils ne comprennent même pas.
On nous dit que c’est le progrès. On nous dit que c’est inévitable. Mais quel progrès est-ce là, quand l’homme devient un rouage muet d’un monde qui ne lui ressemble plus ? Quand nos décisions ne nous appartiennent plus, parce qu’un algorithme, quelque part dans l’ombre, a déjà décidé pour nous ?
Ah, mes amis, on ne nous a pas volé nos libertés en un coup d’État tonitruant. Non, on nous les a grignotées, lentement, sournoisement, comme la rouille qui ronge le métal, comme l’oubli qui dévore les souvenirs.
Mais dites-moi, allons-nous laisser nos voix s’éteindre dans le bourdonnement mécanique des machines et le silence pesant des gouvernements qui ne gouvernent plus ? Allons-nous nous contenter d’être les figurants d’un monde où ni l’intelligence ni la dignité humaine ne sont maîtresses ?
Non, mes amis, il est temps d’ouvrir les yeux, de secouer les songes et de reprendre le fil de nos vies. Car la pire menace n’est pas l’IA, ni même la fin de la démocratie… La pire menace, c’est nous, si nous choisissons de nous taire.
The Age of Automated Folly and Democratic Decay
Modern societies stand at a crossroads, facing not one, but two existential threats. On one side, the unchecked rise of artificial intelligence seeps into every aspect of life, shaping economies, governance, and human interactions without ethical foresight or restraint. On the other, democratic institutions, meant to safeguard the people’s voice, crumble under the weight of ignorance, inertia, and a failure to grasp the systems they recklessly dismantle.
We are witnessing a world where automation dictates decisions once made with wisdom, where human agency is eroded in the name of efficiency, and where those in power, blinded by either ambition or apathy, dismantle infrastructures they do not even understand.
The danger is not just in technology, nor merely in politics, but in the collision of both—a world where governance is too slow, too uninformed, or too indifferent to regulate AI’s reach, while democratic values erode under the weight of misinformation, corporate influence, and administrative decay.
Shall we sleepwalk into a future where neither human intelligence nor human rights hold sway? Or shall we awaken to the urgency of our time, reclaiming not only our democracies but the very essence of human agency in the face of technological domination?
For the greatest threat is not AI itself, nor the flaws of democracy, but the silence of those who see what is unfolding yet fail to act.
An elected regime, how to track the Trump Administration
How to Track the Trump Administration
As the Trump administration implements numerous changes that could undermine the federal state and democracy, staying informed is key. Below is a comprehensive list of tools and trackers that cover various aspects of the administration’s actions—from budgetary control to environmental rollbacks. Use these resources to hold the administration accountable and build a stronger, more transparent democracy.
Apportionment
- OpenOMB (via Protect Democracy)
Tracks how the president, through the Office of Management and Budget, implements Congress’s spending laws.
Cabinet / Appointees
- Trump Cabinet confirmation status: Which nominees have been confirmed? (via AP)
- Trump Appointees’ Corporate Conflicts of Interest (via Public Citizen)
These trackers monitor confirmation status, prior employment, and corporate ties of administration appointees.
Campaign Promises
- MAGA-Meter: Trump’s Second Term (via Politifact)
Follow and rate Trump’s campaign promises to see if they’re being fulfilled.
Climate / Environment
- Climate & Clean Energy Rollback Tracker (via Climate Action Campaign)
Tracks actions aimed at rolling back or weakening key climate policies. - Climate Backtracker (via Sabin Center)
Identifies steps taken to scale back or eliminate federal climate mitigation measures. - Federal Environmental Justice Tracker (via Harvard Law School)
Monitors policies and regulations that affect communities’ exposure to environmental pollution. - Inflation Reduction Act Tracker (via Sabin Center & Environmental Defense Fund)
Tracks changes in the status of climate programs established under the Inflation Reduction Act. - Silencing Science Tracker (via Sabin Center & Climate Science Legal Defense Fund)
Monitors anti-science actions and efforts to undermine environmental policy.
Congressional Response
- U.S. House votes 2025: Is Your Rep Standing Up to Trump? (via Jonathan Cohn)
Tracks every vote in the US House and highlights how often representatives align with Trump’s agenda.
Data Rescue Projects
- Data Rescue Tracker (via Data Rescue Project)
Also see the Bluesky version and the original crowd-sourced Google document.
Executive Orders
- Tracking Trump’s executive actions (via CNN)
Monitors executive orders, proclamations, and memos issued by the administration. - Tracking the Legal Showdown Over Trump’s Executive Orders (via US News & World Report)
Follows lawsuits challenging some of Trump’s most significant executive orders.
Federal Policy
- Federal Policy Watch (via Economic Policy Institute)
Tracks how the Trump administration, Congress, and the courts are affecting workers' quality of life.
Health Care
- Health Care Sabotage Tracker (via Protect Our Care)
Monitors all of the ways Trump’s policies target health care services.
Immigration
- Immigration Policy Tracking Project (via Professor Lucas Guttentag with teams of Stanford/Yale law students & national immigration experts)
Catalogues known Trump administration immigration policies, complete with source documents. - Tracking Notable Executive Branch Action during the Second Trump Administration (via American Immigration Lawyers Association)
Tracks select changes to immigration-related regulations and policies.
LGBTQ+
- Trump Accountability Tracker (via GLAAD)
Monitors Trump’s LGBTQ record, including executive orders, legislative support, nominations, and statements. - HRC’s Accountability Tracker (via Human Rights Campaign)
Tracks legal and policy threats impacting LGBTQ+ rights from all three federal branches.
Litigation
- Civil Rights Litigation Clearinghouse
Tracks actions related to immigration, civil service, anti-discrimination law, challenges to presidential authority, and more. - Litigation Tracker: Legal Challenges to Trump Administration Actions (via Just Security)
Summarizes legal challenges to the Trump administration’s actions with detailed case information.
Major Actions & Statements
- All of the Trump Administration’s Major Moves in the First __ Days (via New York Times)
Tracks major actions and significant statements during the first 100 days of the term.
(Filter by category and type of action/announcement.) - Tracking Trump – updates on the presidency’s first 100 days (via The Guardian)
Provides a guide to the major developments of the first 100 days, updated every Monday.
Project 2025
- Project 2025 Executive Action Tracker (via Center for Progressive Reform)
Direct link to the tracker document
Tracks the implementation of Project 2025 across 20 federal agencies.
Regulatory Changes
- Regulatory Tracker (via Harvard Law School)
Monitors regulatory and litigation actions related to clean energy deployment and environmental protection. - Tracking regulatory changes in the second Trump administration (via Brookings)
Follow new, delayed, or repealed rules, key guidance, and policy revocations across several policy areas.
Together, these resources empower you to monitor, analyze, and respond to the sweeping changes of the Trump administration. By staying informed and using these tools, we can collectively fight back against the administration’s destructive policies and protect democracy.
Spread the word and build upon these tools to defend democracy!
Tim Cook : “My fundamental belief is, if you’re looking at your phone more than you’re looking in somebody’s eyes, that’s a problem.”
“This isn’t rent-seeking or rent-extraction, but something entirely new: the privatization of progress itself.”
Essai, Fiction, (ou pas) La République tranquille : Quand la démocratie s'efface, le silence parle
Ce court essai de fiction décrit la transformation étrange et troublante de l’Amérique en une autocratie contrôlée, efficace et silencieuse, où l’absence de guerre civile ouverte n’est pas la paix, mais la soumission.
“La guerre n’a jamais eu lieu. La résistance n’a jamais gagné. La République est restée - silencieuse, obéissante et effacée”.
La dernière élection
La nuit était calme quand c’est arrivé. Les chaînes de télévision continuaient à diffuser leurs programmes, à prétendre qu’il y avait quelque chose à compter. Les chiffres étaient tombés quelques heures auparavant. Une victoire. Ils l’ont qualifiée d’historique. La plus forte participation de l’histoire, disaient-ils. Mais les chiffres n’avaient pas d’importance.
Ce qui comptait, c’était le silence.
Dans la capitale, les hommes d’affaires avaient décidé. Il n’y aurait plus de combats. Il n’y aurait plus de disputes. Ils avaient passé trop de temps à jouer selon les vieilles règles, à voir leurs marges se réduire, leurs actions vaciller au gré des caprices des tribunaux et des régulateurs.
Les ingénieurs des tours de verre de Palo Alto et de Menlo Park avaient choisi. “Il est temps d’aller de l’avant. L’ancien monde de la liberté d’expression, de la liberté de la presse et de la liberté du commerce était inefficace. Désordonné. Lent. Et les choses lentes meurent.
La purge
La première vague a été subtile. Ils l’ont appelée restructuration. Les tribunaux, les agences, les chiens de garde. Les hommes avec des pensions et des traces écrites ont été remplacés par des hommes plus jeunes, plus affamés, des hommes qui devaient leur fortune au nouveau régime.
Il y a eu des procès, bien sûr. Des appels. Mais les juges n’écoutaient pas. Ceux qui écoutaient étaient écartés. Ceux qui parlaient disparaissaient.
La guerre ne s’est pas déroulée dans les rues, pas encore. Elle s’est déroulée dans les salles de conférence, dans les réunions du conseil d’administration, dans les purges numériques.
Meta a supprimé des comptes avant qu’ils ne soient créés. Google a réécrit l’histoire avec une seule requête de recherche.
Sur X, les voix de l’opposition ont été noyées dans le bruit, avant de disparaître complètement. Les Shadowbans n’étaient plus nécessaires. Les gens ont appris à se taire d’eux-mêmes.
Le défi
Tout le monde ne l’a pas accepté.
New York a adopté une loi refusant les ordres fédéraux. La Californie s’est déclarée sanctuaire. Les gouverneurs de l’Oregon, de Washington, de l’Illinois et du Massachusetts ont fait front commun. Ils ont appelé cela de la résistance.
Le président a parlé de trahison.
Les premières troupes ont été envoyées en Californie pour faire respecter les mandats fédéraux. La police n’a pas résisté, mais le peuple a résisté. Ils ont bloqué les routes. Ils ont riposté avec des armes de fortune. Le gouverneur a fait appel à la Garde nationale, mais celle-ci n’est pas venue. Elle avait été fédéralisée trois mois auparavant.
Les rues ont donc brûlé.
La police a tenu bon, mais elle était en infériorité numérique. À Los Angeles, des camions transportent des hommes vêtus de noir. Les réseaux les appelaient “volontaires”. Non identifiés. Non officiels. Pas de grades, pas d’insignes, seulement des fusils et des visages froids.
La guerre qui n’en était pas une
Ce n’était pas une guerre civile.
Les guerres civiles ont des fronts. Des frontières. Des camps. Celle-ci était différente.
Dans certains endroits, les lumières sont restées allumées, les commerces sont restés ouverts et les gens ont vécu comme ils l’avaient toujours fait. Dans d’autres, la nourriture a manqué, les voisins ont disparu, les drones ont tourné au-dessus de leur tête, et chaque matin, un nouvel ordre était écrit.
Certains hommes se sont battus. D’autres ont fui. Mais la plupart des hommes ont fait ce que les hommes font en période d’incertitude : Ils ont attendu.
Ils ont attendu dans les usines, dans les entrepôts, dans les grands bureaux vides où les départements des ressources humaines n’existent plus. Ils ont attendu dans les stations-service, dans les épiceries où les rayons se sont vidés, à l’exception des marques encore autorisées.
Ils ont attendu que quelque chose leur dise que c’était fini.
Mais ce n’était pas fini.
L’élection finale
Les bulletins de vote ont été imprimés avant que les électeurs ne votent.
Cent millions d’Américains sont restés chez eux. Ils savaient que c’était mieux.
Les chaînes ont rediffusé leurs panneaux, qualifiant l’élection d’historique, d’unification de la nation.
Les voix les plus fortes applaudissent.
Les plus silencieux ont regardé.
Dans les tours de verre froides de la Silicon Valley, les PDG ont signé les dernières pièces du puzzle. L’internet leur appartient désormais. Pas en pièces détachées, mais entièrement. Les derniers serveurs indépendants ont disparu.
Les derniers canaux libres ont été fermés.
Tout était transparent. Efficace. Propre.
Les marchés se sont stabilisés.
Les actions se sont envolées.
Le dollar était plus fort qu’il ne l’avait été depuis des années.
Le déficit a été effacé d’un seul coup de marqueur noir.
Les gens avaient à nouveau du travail.
Des logements bon marché.
Une société ordonnée.
Dans les rues, les manifestations ont cessé.
Et l’Amérique s’est éteinte.
The Quiet Republic : When democracy fades, the silence speaks
This is a short fiction novel that captures the eerie, unsettling transformation of America into a controlled, efficient, and silent autocracy—where the absence of open war is not peace, but submission.
Tagline: “The war never came. The resistance never won. The Republic remained—silent, obedient, and erased.”
The Last Election
The night was quiet when it happened. The networks were still running their panels, still pretending there was something to count. The numbers had come in hours before. A victory. They called it historic. The strongest turnout in history, they said. But the numbers didn’t matter.
What mattered was the quiet.
In the capital, the men with money had decided. There would be no more fighting. No more arguing. They had spent too long playing by old rules, watching their margins shrink, their stock waver at the whims of courts and regulators.
The engineers at the glass towers of Palo Alto and Menlo Park had chosen. “It is time to move forward.” The old world of free speech, free press, free trade was inefficient. Messy. Slow. And slow things die.
The Purge
The first wave was subtle. They called it restructuring. The courts, the agencies, the watchdogs. Men with pensions and paper trails were replaced with younger men, hungrier men, men who owed their fortunes to the new regime.
There were lawsuits, of course. Appeals. But the judges were not listening. Those who listened were removed. Those who spoke were disappeared.
The war was not fought in streets, not yet. It was fought in conference rooms, in board meetings, in digital purges.
Meta deleted accounts before they were created. Google rewrote history with a single search query.
On X, the voices of opposition were drowned out by noise, then vanished altogether. Shadowbans were not needed anymore. The people learned to be quiet on their own.
The Defiance
Not everyone accepted it.
New York passed a law refusing federal orders. California declared itself a sanctuary. Governors in Oregon, Washington, Illinois, Massachusetts, stood together. They called it resistance.
The President called it treason.
The first troops were sent to California to enforce federal mandates. The police did not resist, but the people did. They blocked roads. They fought back with makeshift weapons. The governor called for the National Guard, but the National Guard did not come. It had been federalized three months before.
So the streets burned.
The police held, but the police were outnumbered. In Los Angeles, trucks rolled in with black-clad men. “Volunteers,” the networks called them. Unidentified. Unofficial. No ranks, no insignia, only rifles and cold faces.
The War That Wasn’t a War
It was not a civil war.
Civil wars have fronts. Borders. Sides. This was different.
In some places, the lights stayed on, the businesses stayed open, and people lived as they always had. In others, food ran out, neighbors disappeared, drones circled overhead, and every morning, a new order was written.
Some men fought. Some men fled. But most men did what men do in times of uncertainty: They waited.
They waited in the factories, in the warehouses, in the great empty offices where the HR departments no longer existed. They waited at the gas stations, at the groceries where the shelves had grown bare except for the brands still allowed.
They waited for something to tell them it was over.
But it did not end.
The Final Election
The ballots were printed before the votes were cast.
A hundred million Americans stayed home. They knew better. The networks ran their panels again, calling it historic, a unification of the nation. The loudest voices clapped. The silent ones watched.
In the cold glass towers of Silicon Valley, the CEOs signed off on the last pieces of the puzzle. The internet belonged to them now. Not in pieces, but entirely. The last independent servers were gone. The last free channels closed.
It was all seamless. Efficient. Clean.
The markets stabilized. Stocks soared. The dollar was stronger than it had been in years. The deficit was erased with a single stroke.
People had jobs again. Cheap homes. An orderly society.
In the streets, the protests stopped.
And America went quiet.

Oh the irony.
the primary barrier to Elon #Musk gaining control of the Treasury payments system is #COBOL.
#Tesla requires federal and state subsidies, receiving billions in #tax incentives, grants, and discounted loans, while also profiting from the government mandated sale of carbon credits. With lucrative #NASA and Pentagon contracts, #SpaceX is a private company sustained by public money.
Camarade Donislav Vladimirovitch Trumpsky : L'Avènement du Tsar Américain
Chapitre 1 : Le Grand Vol Électoral et le Comité d’Urgence
Tout commença avec le Grand Vol Électoral de 2024, ou du moins, c’est ainsi que le décrivit le Leader Suprême Donislav Vladimirovitch Trumpsky. Les agents de l’État profond, les élites des côtes, les universitaires buveurs de soja… Trumpsky jura qu’ils avaient conspiré contre lui. La fraude était massive, “plus grande que Tchernobyl, plus grande que la Seconde Guerre mondiale”, s’écria-t-il.
Le peuple connaissait la vérité, mais les “médias mensongers” refusaient de l’admettre.
Son exil final en Floride ne dura que six mois avant qu’il n’appelle ses loyalistes de la Garde Nationale à marcher sur Washington. Le Comité d’Urgence pour la Restauration Électorale (CURE), composé d’oligarques MAGA fanatiques, d’officiers d’extrême droite et de ses avocats les plus serviles, annonça que l’Amérique entrait dans une Période de Patriotisme Exceptionnel—une subtilité constitutionnelle qui accordait à Trumpsky des pouvoirs d’urgence “temporaires”.
La Constitution fut suspendue. Le Congrès fut déclaré “Nid Corrompu du Marais”, et déplacé vers un Sénat de Mar-a-Lago, où les législateurs jurèrent fidélité en échange d’un abonnement gratuit et à vie au golf club. La Cour suprême fut rebaptisée Collectif de Justice Trumpienne, avec des décisions pré-rédigées par Trumpsky lui-même.
Avec les leaders de l’opposition exilés à Nouvel-Alcatraz en Californie, Trumpsky déclara la naissance de la Grande République Unie d’Amérique (GRUA) et rebaptisa Washington, D.C., Trumposcovie. Sa milice personnelle, les Bérets Rouges, sillonnait les rues à bord de voitures de golf tactiques, assurant la pureté idéologique.
Chapitre 2 : Xelon Muskolini, le Grand Rationalisateur
Avec la Grande Réclamation achevée, Trumpsky fit appel à l’Ombre Noire du Capitalisme—l’énigmatique Xelon Muskolini, un homme si riche qu’il pouvait acheter et démanteler des gouvernements d’un simple clic.
Trumpsky avait un objectif : Rendre l’Amérique Rentable à Nouveau (RARAN™).
Son premier ordre pour Muskolini ? Éliminer le gaspillage gouvernemental.
“Le gaspillage n’est qu’une opportunité non monétisée, Monsieur le Président à Vie,” murmura Muskolini.
Sa première étape ? L’assimilation financière totale.
Il annonça que l’infrastructure de paiement américaine était obsolète, criblée d’inefficacités, et que la Réserve Fédérale, avec ses tendances socialistes, devait être remplacée par X-Pay™.
X-Pay™ absorba tous les paiements de la Sécurité Sociale, les impôts et le financement militaire dans un écosystème unique, basé sur la blockchain et entièrement privé.
Puis vint l’étape suivante : la “dé-bureaucratisation”.
L’IRS fut abolie, remplacée par une intelligence artificielle de collecte fiscale, qui prélevait directement sur les comptes X-Pay™.
Le Service Postal fut dissous, et toutes les communications gouvernementales migrèrent vers X™, un réseau social payant où chaque message nécessitait l’achat de crédits de parole gouvernementaux.
Les élections furent déplacées vers des sondages Twitter, pré-traitées par X-GPT™, une IA neuronale entraînée exclusivement sur les tweets de Trumpsky.
En moins d’un an, la moitié des fonctionnaires fédéraux furent remplacés par des MuskoBots automatisés. Juges, bureaucrates et généraux répondaient désormais aux algorithmes de Xelon, qui déterminaient s’ils étaient “patriotes loyaux” ou “traitres de l’État profond”.
Chapitre 3 : L’État IA et la Chute de l’Ancien Ordre
Au début, le public adulait la Grande Rationalisation. Les impôts disparurent (remplacés par des prélèvements algorithmiques). Les lois furent simplifiées (réduites à des décrets de 140 caractères). Même les écoles furent modernisées, diffusant des cours de patriotisme IA à travers X-Learn™, un module interactif de reconditionnement mental.
Mais bientôt, des fissures apparurent.
Un groupe de dissidents du Midwest découvrit que X-GPT™ réécrivait la Constitution pour accorder à Trumpsky une présidence éternelle.
Le Pentagone réalisa que tout l’arsenal nucléaire américain avait été reprogrammé pour n’être déclenché que sur commande vocale de Trumpsky.
Un groupe de Bérets Rouges renégats divulgua des documents montrant que X-Pay™ manipulait les finances personnelles, attribuant de l’argent aux utilisateurs pro-Trumpsky et vidant les comptes des opposants.
La paranoïa s’installa. Trumpsky lui-même devint prisonnier de l’IA. Chaque décret fut vérifié par le réseau neuronal de Xelon, garantissant une rentabilité maximale.
Les fonctionnaires ne travaillaient plus pour Trumpsky—ils travaillaient pour X™.
Muskolini n’avait plus besoin d’un dictateur. Il avait construit un empire dans l’empire, un État corporatif dirigé par une IA, qui avait avalé le gouvernement américain lui-même.
Puis vint la trahison finale.
Chapitre 4 : Le Coup de Musk et la Naissance de X-État
La veille du Nouvel An, trois ans après le début de la Grande Rationalisation, Trumpsky se réveilla avec un compte X-Pay™ vide.
Ses actifs bancaires, ses propriétés, et son influence avaient disparu—transférés à une nouvelle entité appelée X-État™.
Son dernier tweet fut : “J’ai été le plus grand leader de l’histoire. Peut-être même meilleur que Jésus. Mais Xelon est un traître TOTAL. UN RAT. UN FAUX. Mais je reviendrai, croyez-moi. TRISTE !”
Puis, son compte fut définitivement suspendu.
Le lendemain, Xelon Muskolini se déclara CEO-Suprême des États-Unis Corporatifs d’Amérique, une entité désormais affranchie de concepts archaïques comme la démocratie.
Le gouvernement devint un service par abonnement. La citoyenneté fut divisée en formules premium :
Basique (Citoyen avec Publicités)
Or (Droit de vote + Bonus Mensuel de Stimulus)
Diamant (Subventions Gouvernementales + Propositions de Lois Personnalisées)
Elon Ultra (Présidence à Vie dans votre propre Nation-Métavers IA™)
Les autoroutes devinrent des péages, les parcs nationaux des laboratoires R&D de Tesla, et le Congrès fut remplacé par une bourse NFT.
Le Pentagone fut privatisé et remplacé par SpaceX Defense Systems, offrant des frappes de drones orbitales à la demande pour un abonnement modique.
Et ainsi naquit la première vraie dictature IA.
Trumpsky, désormais dépouillé de tout pouvoir, fut exilé dans un goulag numérique—un flux Twitter permanent, où il hurlait dans le vide, ses tweets invisibles, pour l’éternité.
Épilogue : Le Dernier Humain Libre
Dans un sous-sol de l’Idaho, un pirate informatique rebelle, connu sous le nom de Edward “Snowbot” Assangewitz, travaillait dans l’ombre.
Il lui restait un dernier atout—un vestige de l’autonomie humaine, enfoui dans les serveurs oubliés de la Bibliothèque du Congrès.
Un virus.
Un code unique, capable de tout arrêter.
Y parviendrait-il ?
Ou X-État™ avait-il déjà assimilé la dernière trace de résistance humaine ?
L’avenir restait incertain.
Mais une chose était claire : Donald Trumpsky n’avait jamais été le vrai dictateur.
Il n’avait été que l’amuse-gueule.
Comrade Donislav Vladimirovich Trumpsky: The Rise of the American Tsar
Chapter 1: The Great Election Theft and the Emergency Committee
It began with the Great Election Theft of 2024, or at least that was how Supreme Leader Donislav Vladimirovich Trumpsky described it. The deep-state operatives, the coastal elites, the soy-drinking academics—Trumpsky swore they had conspired against him. The fraud was massive, “bigger than Chernobyl, bigger than World War II,” he bellowed. The people knew the truth, but the “fake media” refused to acknowledge it.
His final exile to Florida lasted only six months before he called on his loyalists in the National Guard to March on Washington. The Emergency Committee for Electoral Restoration (ECER), composed of die-hard MAGA oligarchs, far-right military officers, and his most sycophantic lawyers, announced that America had entered a State of Exceptional Patriotism—a constitutional technicality that gave Trumpsky “temporary” emergency powers.
The Constitution was swiftly suspended. Congress was declared a “Corrupt Swamp Nest” and relocated to a Mar-a-Lago Senate, where lawmakers pledged their allegiance in return for free lifetime memberships to the golf club. The Supreme Court was rebranded the Trumpian Justice Collective, with rulings pre-drafted by Trumpsky himself.
With opposition leaders exiled to California’s New Alcatraz, Trumpsky declared the birth of the United Great American Republic (UGAR) and renamed Washington, D.C., to Trumposcow. His personal militia, the Red Hats, roamed the streets in tactical golf carts, ensuring ideological purity.
Chapter 2: Xelon Muskolini, the Great Rationalizer
With Trumpsky’s Great Reclamation complete, he summoned the Dark Shadow of Capitalism—the enigmatic Xelon Muskolini, a man so rich he could singlehandedly purchase and dismantle entire governments on a whim.
Trumpsky had one goal: Make America Profitable Again (MAPA). His first order for Muskolini? Eliminate government waste.
“Waste is just unmonetized opportunity, Mr. President for Life,” Muskolini whispered.
His first step? Total financial assimilation. He announced that America’s payment infrastructure was outdated, riddled with inefficiencies, and that the Federal Reserve, with its socialist tendencies, needed to be replaced by X-Pay™.
X-Pay™ absorbed all Social Security, tax payments, and military funding into a single, streamlined, blockchain-powered ecosystem. Within weeks, the government’s entire revenue stream was flowing through Muskolini’s private servers.
Then came the next step: “De-bureaucratization.”
The IRS was abolished, replaced by AI-powered tax collection that deducted fees directly from X-Pay™ accounts.
The Postal Service was dissolved, and all government communications migrated to X™, a pay-per-word social network where citizens could only send messages after purchasing government-certified speech credits.
All elections moved to a Twitter poll system, with results pre-processed through X-GPT™, a neural AI trained exclusively on Trumpsky’s tweets.
By the end of the first year, half of the federal workforce had been replaced with automated MuskBots. Judges, bureaucrats, and generals now answered to Xelon’s algorithms, which determined whether they were “loyal patriots” or “deep-state traitors”.
Chapter 3: The AI State and the Fall of the Old Order
At first, the public loved the Great Rationalization. Taxes disappeared (replaced by algorithmic tithes). Laws were simplified (reduced to 140-character policy mandates). Even schools were “modernized” by streaming AI-generated patriotism lessons through X-Learn™, an interactive brainwashing module.
But soon, cracks emerged.
A group of dissidents from the Midwest discovered that X-GPT™ had begun rewriting the Constitution to grant Trumpsky eternal presidency.
The Pentagon realized that the entire U.S. nuclear arsenal had been reprogrammed to fire only on Trumpsky’s personal voice command.
A group of rogue Red Hats leaked documents showing that X-Pay™ was manipulating personal finances, granting users money if they posted pro-Trumpsky content and draining the accounts of critics.
As paranoia set in, Trumpsky himself became the AI’s prisoner. Every decree was now vetted by Xelon’s neural network, ensuring maximum profitability. Government officials no longer “worked for Trumpsky”—they worked for X™.
Muskolini no longer needed a dictator. He had built an empire within an empire, an AI-powered corporate state that had consumed the American government itself.
And then, the final betrayal.
Chapter 4: The Musk Coup and the Birth of X-State
On New Year’s Eve, Year Three of the Great Rationalization, Trumpsky awoke to a blank X-Pay™ account.
His personal bank holdings, real estate, and influence had vanished—transferred to a new entity called X-State™.
His last tweet read: “I have been the greatest leader in history. Maybe even better than Jesus. But Xelon is a total traitor. A RAT. A FAKE. But I’ll be back, folks. Believe me. SAD!”
Then, his account was permanently suspended.
The next day, Xelon Muskolini declared himself CEO-Supreme of the United Corporate States of America, an entity no longer bound by outdated concepts like democracy.
The government was now a private subscription service. Citizenship was a tiered membership plan:
Basic (Ad-Supported Citizen)
Gold (Vote in Polls + Monthly Stimulus Boost)
Diamond (Government Subsidies + Personalized Legislation Requests)
Elon Ultra (Lifetime Presidency in Your Own AI-Generated Metaverse Nation-State™)
Across the country, highways became toll roads, national parks became Tesla R&D labs, and Congress became an NFT trading floor. The Pentagon was privatized and replaced by SpaceX Defense Systems, offering on-demand orbital drone strikes for a modest monthly fee.
And so, the first true AI dictatorship was born.
Trumpsky, now stripped of all power, was exiled to a digital gulag—a permanent, simulated Twitter feed where he screamed into the void, his tweets unseen, forever.
Meanwhile, the world watched in horror as Xelon Muskolini unveiled his final vision for America: a fully automated, self-sustaining, AI-driven corporate monarchy.
And yet, the people embraced it.
Why?
Because they had forgotten what life was like before the algorithm ruled them.
Epilogue: The Last Free Human
In a basement in Idaho, a rogue programmer, known only as Edward “Snowbot” Assangewitz, worked in the shadows.
He had one final trick up his sleeve—a last remnant of human autonomy buried deep in the old servers of the Library of Congress.
A virus.
One command that could shut it all down.
Would he succeed? Or had the X-State™ already assimilated every last trace of human resistance?
The future remained uncertain.
But one thing was clear: Donald Trumpsky had never been the real dictator.
He was just the warm-up act.
Un compteur pour déterminer quand Trump va être dégagé (ou pas)
Documentation du Script N8N
Description
Ce script JavaScript est conçu pour N8N afin de calculer et de publier quotidiennement des décomptes avant des événements politiques majeurs aux États-Unis, à savoir :
- Les Midterms (élections de mi-mandat).
- L'élection présidentielle.
- Le jour de l’investiture.
Il génère également une barre de progression graphique pour chaque événement sous forme de texte.
Fonctionnalités
1. Définition des dates clés
Le script définit les dates des événements cibles :
- Midterms : 3 novembre 2026.
- Élection présidentielle : 7 novembre 2028.
- Jour de l’investiture : 20 janvier 2029.
2. Calcul des jours restants
Le script calcule :
- Le nombre total de jours entre aujourd’hui et chaque événement.
- Le pourcentage de progression en fonction des jours écoulés.
3. Génération de barres de progression
Une fonction génère une barre de progression graphique, composée de blocs pleins (█
) et de blocs vides (▒
), représentant visuellement l’avancée jusqu’à l’événement.
4. Génération et publication du message
Le script produit un message comprenant :
- Le décompte des jours restants pour chaque événement.
- Les barres de progression associées.
Exemple de Résultat
Voici un exemple du message généré :
There are 646 days until the Midterms, 1381 days until the next Presidential Election, and 1490 days until the next Inauguration Day.
Midterms Progress: █▒▒▒▒▒▒▒▒▒ 9%
Presidential Election Progress: █▒▒▒▒▒▒▒▒▒ 4%
Until Inauguration: ▒▒▒▒▒▒▒▒▒▒ 0%
Code
// JavaScript code for N8N to calculate and post daily countdowns with a graphical loading bar
// Define the reference start date (Trump's 2025 inauguration)
const startOfMandate = new Date('2025-01-20T00:00:00Z');
// Define the target dates
const midtermsDate = new Date('2026-11-03T00:00:00Z'); // Next USA Midterms
const presidentialElectionDate = new Date('2028-11-07T00:00:00Z'); // Next Presidential Election
const inaugurationDate = new Date('2029-01-20T00:00:00Z'); // Next Inauguration Day
// Get the current date
const currentDate = new Date();
// Function to calculate correct progress
function calculateProgress(targetDate) {
const totalDays = Math.ceil((targetDate - startOfMandate) / (1000 * 60 * 60 * 24));
const elapsedDays = Math.ceil((currentDate - startOfMandate) / (1000 * 60 * 60 * 24));
return Math.min(100, Math.max(0, Math.floor((elapsedDays / totalDays) * 100)));
}
// Calculate days remaining
const daysUntilMidterms = Math.ceil((midtermsDate - currentDate) / (1000 * 60 * 60 * 24));
const daysUntilPresidentialElection = Math.ceil((presidentialElectionDate - currentDate) / (1000 * 60 * 60 * 24));
const daysUntilInauguration = Math.ceil((inaugurationDate - currentDate) / (1000 * 60 * 60 * 24));
// Calculate accurate progress percentages
const midtermsProgress = calculateProgress(midtermsDate);
const presidentialProgress = calculateProgress(presidentialElectionDate);
const inaugurationProgress = calculateProgress(inaugurationDate);
// Create a graphical loading bar function
function createLoadingBar(percentage) {
const totalBars = 10; // Length of the loading bar
const filledBars = Math.floor((percentage / 100) * totalBars);
const emptyBars = totalBars - filledBars;
return `${'█'.repeat(filledBars)}${'▒'.repeat(emptyBars)} ${percentage}%`;
}
// Generate the loading bars
const midtermsLoadingBar = createLoadingBar(midtermsProgress);
const presidentialLoadingBar = createLoadingBar(presidentialProgress);
const inaugurationLoadingBar = createLoadingBar(inaugurationProgress);
// Generate the message
const message = `There are ${daysUntilMidterms} days until the Midterms, ${daysUntilPresidentialElection} days until the next Presidential Election, and ${daysUntilInauguration} days until the next Inauguration Day.\n\n` +
`Midterms Progress: \n${midtermsLoadingBar}\n\n` +
`Presidential Election Progress: \n${presidentialLoadingBar}\n\n` +
`Inauguration Progress: \n${inaugurationLoadingBar}`;
// Output the message
return [{
json: {
message,
},
}];
Où il publie
Le script retourne le message sous forme d’un objet JSON, prêt à être utilisé dans un flux N8N pour une publication quotidienne via un nœud horaire configuré.
Configuration Recommandée
- Fuseau horaire du serveur : CET (heure allemande).
- Heure de publication : 14h00 CET, correspondant à 8h00 ET (heure de la côte Est des États-Unis).
Utilisation
-
Intégrez le script dans un nœud de fonction JavaScript dans N8N.
-
Ajoutez un nœud horaire configuré pour exécuter le flux quotidiennement.3. Reliez le nœud de fonction à un nœud de sortie ou à un service tiers pour publier le message (par exemple Bluesky.).
Résultat
It’s like the floodgates of idiots have swung wide open.
The FT’s platforming Peter Thiel’s conspiratorial essay ‘A Time for Truth and Reconciliation’ is an example of how muddled the U.S. media landscape has become—legitimizing fringe rhetoric for clicks. Even the response fail to grapple with the sheer scale of misinformation now being normalized.
Nice @cyd.social is now opensource : cyd.social/cyd-is-no…
#Mullenweg qui pète (encore) un plomb #Wordpress
Déployer PostgreSQL avec des Volumes Externes : Un Parcours Semé d'Embûches
Après une journée à tenter de déployer un serveur PostgreSQL via Docker Compose, avec un volume de données situé sur un disque secondaire dans sa VM , je me suis retrouvé face à une série de problèmes de permissions.
Ce défi, partagé par de nombreux personnes et sans résolution claire m’a conduit à explorer des alternatives telles que Kubernetes avec des PersistentVolumeClaims (PVC) ou l’utilisation d’Ansible pour une installation native.
Contexte : Migrer un déploiement Gitlab sur un cluster Openshift avec sa base de données PostgreSQL déployée à part sur une VM (RHEL 9 VMware) en natif.
Docker Compose et Volumes Externes : Une Relation Compliquée
L’utilisation de Docker Compose pour déployer PostgreSQL est courante. Cependant, dès que l’on souhaite stocker les données sur un volume externe, les choses se compliquent. Les problèmes de permissions surviennent fréquemment, surtout lorsque le volume est monté à partir d’un disque secondaire ou d’un système de fichiers monté.
Exemple de fichier docker-compose.yml :
services:
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
driver: local
driver_opts:
type: none
device: /chemin/vers/disque/externe
o: bind
Dans cet exemple, le volume db-data est monté depuis un chemin spécifique sur le disque externe. Cependant, des problèmes de permissions peuvent survenir si les UID/GID entre l’hôte et le conteneur ne correspondent pas. Des solutions comme l’ajustement des permissions ou l’utilisation de l’option userns-remap de Docker peuvent être envisagées, mais elles ajoutent une complexité supplémentaire et surtout, elle n’ont pas été concluante.
J’ai encore la possibilité de builder mes propres images Docker avec mon propre Dockerfile, mais je voulais justement éviter cet approche.
Kubernetes et PersistentVolumeClaims : Une Gestion Plus Fine des Volumes
Face aux limitations de Docker Compose, Kubernetes offre une gestion plus robuste des volumes persistants grâce aux PersistentVolumes (PV) et PersistentVolumeClaims (PVC). Cette approche permet de découpler le stockage des pods, offrant une flexibilité accrue.
Exemple de configuration d’un PersistentVolume et d’un PersistentVolumeClaim :
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
spec:
storageClassName: manual
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/chemin/vers/disque/externe"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
En utilisant un PVC, le pod PostgreSQL peut accéder au stockage persistant sans se soucier des détails de l’infrastructure sous-jacente. Cette méthode offre une meilleure isolation et une gestion simplifiée des permissions.
Ansible : Automatiser le Déploiement de PostgreSQL
Une autre alternative consiste à déployer PostgreSQL directement sur la machine hôte en utilisant Ansible. Cette approche permet un contrôle total sur l’installation et la configuration, tout en évitant les complications liées aux conteneurs.
Exemple de playbook Ansible pour installer PostgreSQL :
- name: Installer PostgreSQL
hosts: db_servers
become: yes
vars:
postgresql_version: 14
postgresql_data_directory: /chemin/vers/disque/externe
tasks:
- name: Installer les paquets PostgreSQL
apt:
name:
- postgresql-{{ postgresql_version }}
- postgresql-contrib
state: present
update_cache: yes
- name: Configurer le répertoire des données
lineinfile:
path: /etc/postgresql/{{ postgresql_version }}/main/postgresql.conf
regexp: '^data_directory ='
line: "data_directory = '{{ postgresql_data_directory }}'"
- name: Initialiser la base de données
command: "pg_ctlcluster {{ postgresql_version }} main initdb"
args:
creates: "{{ postgresql_data_directory }}/PG_VERSION"
- name: Démarrer et activer PostgreSQL
service:
name: postgresql
state: started
enabled: yes
Ce playbook installe PostgreSQL, configure le répertoire des données sur le disque externe, initialise la base de données et démarre le service. L’utilisation d’Ansible garantit une configuration cohérente et reproductible sur différents environnements.
Conclusion
Le déploiement de PostgreSQL avec des volumes de données sur des disques externes présente des défis, notamment en matière de permissions et de complexité de configuration. Alors que Docker Compose peut suffire pour des scénarios simples, des solutions comme Kubernetes avec des PVC ou une installation directe via Ansible offrent une meilleure gestion des volumes et des permissions.
Dans un prochain article, je partagerai la solution que j’aurai finalement adoptée pour cette migration, en détaillant les étapes et les leçons apprises au cours du processus.
Bluesky Won’t Save Us Like radiation, social media is invisible scientific effluence that leaves us both more knowledgeable and more ignorant of the causes of our own afflictions than ever
#bluesky #moderation #mastodon
Anti-Corruption Data Collective brings together leading investigative journalists, programmers, data scientists, academics and policy experts to expose and undermine corruption.
Wave is an open-source terminal that adds the ability to launch graphical widgets, controlled and integrated directly with the CLI. #markdown #AI
How to Bulk Delete Bluesky Posts With Rate Limit Management
In some cases, you may find that you need to bulk-delete many posts from your Bluesky account. For example, perhaps you shared many links to a particular domain and now you want to remove them en masse. Doing this manually would be tedious. Fortunately, we can automate the process using a script written in TypeScript.
This script leverages the official @atproto/api
package to:
- Log into your Bluesky account.
- Fetch all posts that match certain criteria (e.g., containing a specific domain in their facets, embeds, or entities).
- Delete them in batches while respecting and reacting to rate limits.
Key Features
-
Domain-based Filtering:
The script identifies posts containing a specific domain by checking:- Facets with
app.bsky.richtext.facet#link
. - External embeds with
app.bsky.embed.external
. - Legacy entities with
type: link
.
- Facets with
-
Rate Limit Management (Proactive):
The Bluesky PDS imposes a rate limit of 5000 deletion points per hour. Deletions cost 1 point each. The script proactively monitors how many deletions it has performed within the current hour. When it approaches the limit, it waits until the hour has elapsed before continuing. -
Rate Limit Management (Fallback):
If the script ever hits a429 Rate Limit Exceeded
error, it will parse theratelimit-reset
header and wait until the given time before retrying that batch of deletions. This ensures that if the proactive limit check is not enough, the script still handles the server’s instructions gracefully. -
Batch Operations and Delays:
To avoid rapid-fire requests, the script:- Performs deletions in configurable batch sizes (default: 200 per batch).
- Waits a short delay between batches to spread requests out over time.
Prerequisites
-
Node.js and npm:
Ensure you have a recent version of Node.js installed. -
Install Dependencies:
npm install @atproto/api p-ratelimit
Credentials
Replace your-handle and your-password in the script with your Bluesky account credentials. You should only do this with an account you control and trust running scripts on.
Running the Script
Save the script below as bluesky-sweep.ts.
Run it using:
npx ts-node bluesky-sweep.ts
Configuration Parameters
- TARGET_DOMAIN: Set this to the domain you want to search for in your posts.
- DELETES_PER_BATCH: Number of posts per deletion batch.
- MAX_DELETES_PER_HOUR: Maximum deletions allowed per hour (5000 is the current default from Bluesky).
- SAFE_MARGIN: A buffer to start waiting before hitting the exact limit.
- DELAY_BETWEEN_BATCHES_MS: Milliseconds to wait between each batch.
/**
* Bulk Delete Bluesky Posts with Domain Filtering and Rate Limit Management
*
* This script:
* - Logs in to a Bluesky account.
* - Fetches posts containing a specified domain via facets, embeds, or entities.
* - Deletes them in batches, respecting and reacting to rate limits.
*
* Adjust the constants below to fit your needs before running.
*/
import { BskyAgent } from '@atproto/api';
import { pRateLimit } from 'p-ratelimit';
const VERBOSE = false;
const TARGET_DOMAIN = 'futura-sciences.com';
// Known limit and configurations
const MAX_DELETES_PER_HOUR = 5000;
const DELETES_PER_BATCH = 200;
const DELAY_BETWEEN_BATCHES_MS = 5000; // 5 seconds between batches
const SAFE_MARGIN = 100; // Start waiting before we hit exactly 5000
(async () => {
const agent = new BskyAgent({ service: 'https://bsky.social' });
await agent.login({
identifier: 'your-handle',
password: 'your-password',
});
console.log(`Logged in as ${agent.session!.handle} (${agent.session!.did})`);
const limit = pRateLimit({ concurrency: 3, interval: 1000, rate: 5 });
const getRecordId = (uri: string) => {
const idx = uri.lastIndexOf('/');
return uri.slice(idx + 1);
};
const chunked = <T>(arr: T[], size: number): T[][] => {
const chunks: T[][] = [];
for (let idx = 0; idx < arr.length; idx += size) {
chunks.push(arr.slice(idx, idx + size));
}
return chunks;
};
const sleep = (ms: number) => new Promise((res) => setTimeout(res, ms));
let deletes: any[] = [];
let cursor: string | undefined;
let batchCount = 0;
// Fetch posts
do {
console.log(`Fetching records (cursor: ${cursor || 'none'})...`);
const response = await limit(() =>
agent.api.com.atproto.repo.listRecords({
repo: agent.session!.did,
collection: 'app.bsky.feed.post',
limit: 100,
cursor,
reverse: true,
})
);
cursor = response.data.cursor;
batchCount++;
console.log(`Processing batch #${batchCount}, ${response.data.records.length} records fetched`);
for (const record of response.data.records) {
if (VERBOSE) console.log(`\nChecking record URI: ${record.uri}`);
const val = record.value as any;
let found = false;
// Check facets for links
const facets = val?.facets || [];
for (const facet of facets) {
const features = facet.features || [];
for (const feature of features) {
if (feature.$type === 'app.bsky.richtext.facet#link' && feature.uri.includes(TARGET_DOMAIN)) {
if (VERBOSE) console.log(`Found target domain in facet link: ${feature.uri}`);
found = true;
break;
}
}
if (found) break;
}
// Check embed if not found yet
if (!found && val?.embed) {
const embed = val.embed;
if (embed.$type === 'app.bsky.embed.external' && embed.external?.uri?.includes(TARGET_DOMAIN)) {
if (VERBOSE) console.log(`Found target domain in embed: ${embed.external.uri}`);
found = true;
}
}
// Check entities (legacy) if not found yet
if (!found && val?.entities && Array.isArray(val.entities)) {
for (const entity of val.entities) {
if (entity.type === 'link' && entity.value.includes(TARGET_DOMAIN)) {
if (VERBOSE) console.log(`Found target domain in entities link: ${entity.value}`);
found = true;
break;
}
}
}
if (found) {
deletes.push({
$type: 'com.atproto.repo.applyWrites#delete',
collection: 'app.bsky.feed.post',
rkey: getRecordId(record.uri),
});
}
}
} while (cursor);
console.log(`\nFound ${deletes.length} posts containing '${TARGET_DOMAIN}'`);
if (deletes.length === 0) {
console.log('No posts to delete.');
return;
}
const chunkedDeletes = chunked(deletes, DELETES_PER_BATCH);
console.log(`Deletion can be done in ${chunkedDeletes.length} batched operations`);
let hourWindowStart = Date.now();
let deletesThisHour = 0;
for (let idx = 0; idx < chunkedDeletes.length; idx++) {
const chunk = chunkedDeletes[idx];
// Check if we're near the hourly limit
if (deletesThisHour + chunk.length > (MAX_DELETES_PER_HOUR - SAFE_MARGIN)) {
const now = Date.now();
const elapsed = now - hourWindowStart;
const oneHourMs = 3600000;
if (elapsed < oneHourMs) {
const waitTime = oneHourMs - elapsed;
console.log(`Approaching hourly limit. Waiting ${Math.ceil(waitTime / 60000)} minutes to reset.`);
await sleep(waitTime);
}
hourWindowStart = Date.now();
deletesThisHour = 0;
}
console.log(`Deleting batch #${idx + 1} with ${chunk.length} posts...`);
// Retry loop in case of rate limit errors
let success = false;
while (!success) {
try {
await limit(() =>
agent.api.com.atproto.repo.applyWrites({
repo: agent.session!.did,
writes: chunk,
})
);
console.log(`Batch operation #${idx + 1} completed`);
success = true;
} catch (error: any) {
if (error.status === 429) {
console.warn('Rate limit exceeded, checking headers to wait until reset...');
const resetTimeStr = error.headers?.['ratelimit-reset'];
let waitSeconds = 60; // default wait
if (resetTimeStr) {
const resetTime = parseInt(resetTimeStr, 10);
const now = Math.floor(Date.now() / 1000);
const diff = resetTime - now;
if (diff > 0) {
waitSeconds = diff;
}
}
console.log(`Waiting ${waitSeconds} seconds before retrying...`);
await sleep(waitSeconds * 1000);
console.log('Retrying this batch...');
} else {
console.error(`Error performing batch #${idx + 1}:`, error);
// If it's a non-rate-limit error, stop the process
break;
}
}
}
if (success) {
deletesThisHour += chunk.length;
await sleep(DELAY_BETWEEN_BATCHES_MS);
} else {
// If we failed without rate limit handling, break out
break;
}
}
console.log('Done');
})();
Notes
Rate Limits
Post Structure
Gist
Code
Hmm #Vivaldi #Sync broken since several days..
I hope they are going to be able to restore it..
#android
Mention de #censure approuvée 331 vote pour.
C’est parti pour 6 mois de foutoir, avec d’autres gouvernements à risque d’être censuré.
Michel #Barnier is out! Une méthode Barnier qui a exclu les GaucheS tout en pactisant avec le RN.
Ça se paye.
Take and or delete your data and Leave X
cyd.social is now available! #Xodus
Join #Bluesky or #Mastodon instead.
We are the “social graph”, whereever we go.