<rss version="2.0">
  <channel>
    <title>Bluesky on rMdes - a place to write and think freely</title>
    <link>https://blog.rmendes.net/categories/bluesky/</link>
    <description></description>
    
    <language>en</language>
    
    <lastBuildDate>Mon, 25 Aug 2025 20:56:25 +0100</lastBuildDate>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2025/08/25/have-to-check-this-out.html</link>
      <pubDate>Mon, 25 Aug 2025 20:56:25 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2025/08/25/have-to-check-this-out.html</guid>
      <description>&lt;p&gt;have to check this out later 😲 #wafrn #fedi #atproto
&lt;a href=&#34;https://app.wafrn.net/dashboard/exploreLocal&#34;&gt;app.wafrn.net/dashboard&amp;hellip;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Why Resistance Lives in the Living Room — And What Comes Next</title>
      <link>https://blog.rmendes.net/2025/07/27/why-resistance-lives-in-the.html</link>
      <pubDate>Sun, 27 Jul 2025 09:23:57 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2025/07/27/why-resistance-lives-in-the.html</guid>
      <description>&lt;p&gt;In 2025, the strongest front against the Trump administration isn’t in city squares or union halls — it’s late‑night satire, &lt;em&gt;South Park&lt;/em&gt;, Bluesky threads, YouTube monologues and shared memes.&lt;/p&gt;
&lt;p&gt;Street protests have surged, but for many immigrants and communities of color, public resistance carries dangerous risks: ICE raids, mass arrests, and legal persecution make community organizing particularly harrowing.&lt;/p&gt;
&lt;p&gt;Yet from the safety of home screens emerges a cultural resistance: a digital solidarity that folds in late‑night routines, political comedy, and online bonding. The rebels of the internet have become reluctant guardians of dissent, because institutions that once offered &lt;strong&gt;some&lt;/strong&gt; protection—courts, legislatures, press—are too fragile or compromised.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-why-activism-isnt-leading-at-the-institutional-level&#34;&gt;🛠 Why activism isn’t leading at the institutional level&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Institutions are people&lt;/strong&gt;, and many branches of power now seem paralyzed. Courts—even SCOTUS—have repeatedly allowed Trump’s sweeping immigration and executive actions to stand, eroding guardrails and restoring executive dominance (&lt;a href=&#34;https://www.emptywheel.net/2025/07/09/expecting-legislators-to-lead-the-resistance-is-a-category-error/?utm_source=rmendes.net&#34;&gt;Emptywheel&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Grassroots movements like &lt;em&gt;No Kings&lt;/em&gt; and the &lt;strong&gt;50501&lt;/strong&gt; campaign have filled the gap. Protests on June 14 alone drew over five million participants across 2,100 cities globally (&lt;a href=&#34;https://en.wikipedia.org/wiki/No_Kings_protests?utm_source=rmendes.net&#34;&gt;Wikipedia&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;But their visibility online far outpaces coverage or consequences in halls of power.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-the-epstein-scandal-as-a-symptom-of-institutional-collapse&#34;&gt;🧱 The Epstein scandal as a symptom of institutional collapse&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The Epstein gate—which Trump once appeared ready to weaponize—is now exposing institutional rot. Despite promises of a damning client list, DOJ has concluded no such list exists. Congressional leaders have adjourned instead of forcing transparency (&lt;a href=&#34;https://www.theverge.com/politics/714144/epstein-files-maga-trump-influencers-congress?utm_source=rmendes.net&#34;&gt;The Verge&lt;/a&gt;, &lt;a href=&#34;https://www.theaustralian.com.au/world/epstein-backlash-reveals-trump-as-a-hostage-of-the-maga-movement/news-story/8161239434fa6eea6a0e16081bade1de&#34;&gt;The Australian&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Trump’s allies at the DOJ blurred political and criminal investigations, fueling distrust (&lt;a href=&#34;https://www.washingtonpost.com/national-security/2025/07/23/trump-doj-epstein-files-political-fallout/?utm_source=rmendes.net&#34;&gt;Washington Post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Even staunch conservatives and MAGA influencers are frustrated—some calling for Ghislaine Maxwell’s pardon in exchange for cooperation, others accusing the DOJ of betrayal (&lt;a href=&#34;https://www.washingtonpost.com/politics/2025/07/26/ghislaine-maxwell-trump-maga-epstein/?utm_source=rmendes.net&#34;&gt;Washington Post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Trump’s usual distractions—attacking reporters, shifting focus to other crises—carry less weight than before (&lt;a href=&#34;https://www.reuters.com/world/us/trumps-distraction-methods-fall-flat-against-epstein-uproar-2025-07-26/?utm_source=rmendes.net&#34;&gt;Reuters&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The King is Naked and it&amp;rsquo;s now on full blown exposure creating cracks on the wall of the MAGA cult&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-the-cultural-circuit-vs-wornout-institutions&#34;&gt;🎭 The cultural circuit vs. worn‑out institutions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Satire, comedy, streaming platforms and memes have taken up the baton. They offer resistance without physical risk, providing spaces for collective outrage and critique.&lt;/li&gt;
&lt;li&gt;But the absence of institutional checks slows down accountability: the “Epstein Files Watergate” moment fizzles, while political and legal power remain entangled, entrenched—or cowed.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-a-note-of-cautious-hope&#34;&gt;✳️ A note of cautious hope&lt;/h2&gt;
&lt;p&gt;This resistance may seem fractured, scattered, virtual—and it is. But digital connection and cultural critique are also powerful grounds for organizing what cannot yet happen in streets or legislatures. Institutions may crumble, but they can rebuild—with pressure.&lt;/p&gt;
&lt;p&gt;Millions participated in protests like &lt;em&gt;No Kings&lt;/em&gt; and &lt;em&gt;Good Trouble Lives On&lt;/em&gt;—demonstrating that mass civic will exists. Activist networks (e.g. 50501, Indivisible, Black Voters Matter) continue to build coalitional power (&lt;a href=&#34;https://www.washingtonpost.com/national-security/2025/07/23/trump-doj-epstein-files-political-fallout/?utm_source=rmendes.net&#34;&gt;Washington Post&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/50501_movement?utm_source=rmendes.net&#34;&gt;Wikipedia&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;At its heart, resistance isn’t about where it happens, but what it builds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memory of solidarity—not fear.&lt;/li&gt;
&lt;li&gt;Networks that can mobilize offline when conditions shift.&lt;/li&gt;
&lt;li&gt;Cultural languages and frames potent enough to shape public pressure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If institutions are people, then people can rebuild institutions—and the deep pressure being built online and offline today could be the spark for rebuilding stronger guardrails from within.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-call-to-action&#34;&gt;📢 Call to Action&lt;/h2&gt;
&lt;p&gt;But Americans have a long way to go even just before the midterms&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Keep engaging culturally: satire, streams, shared humor connect dispersed resistance.&lt;/li&gt;
&lt;li&gt;Join and support coordinated civil groups behind the scenes (e.g. 50501, Good Trouble).&lt;/li&gt;
&lt;li&gt;Hold media and Congress to account; demand real transparency on Epstein, court abuses, and executive overreach.&lt;/li&gt;
&lt;li&gt;Build toward safe in-person civic action, especially in communities targeted by repression.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;From living rooms comes connection.&lt;br&gt;
From connection comes strategy.&lt;br&gt;
And from strategy comes the possibility of stronger democratic institutions—with shared civic responsibility and accountability. That’s the hope.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2025/06/23/fascinating-read-on-bluesky-app.html</link>
      <pubDate>Mon, 23 Jun 2025 22:12:08 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2025/06/23/fascinating-read-on-bluesky-app.html</guid>
      <description>&lt;p&gt;Fascinating &lt;a href=&#34;https://whtwnd.com/futur.blue/3ls7sbvpsqc2w&#34;&gt;read&lt;/a&gt; on #Bluesky app view retro engineering&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2025/06/12/a-bouge-bien-ct-bluesky.html</link>
      <pubDate>Thu, 12 Jun 2025 20:52:33 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2025/06/12/a-bouge-bien-ct-bluesky.html</guid>
      <description>&lt;p&gt;Ça bouge bien côté Bluesky pour faire vivre le AT Protocol en dehors du contrôle de Bluesky !&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://fediversereport.com/atmosphere-report-120/&#34;&gt;ATmosphere Report 120&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2025/04/26/bluesky-say-its-not-down.html</link>
      <pubDate>Sat, 26 Apr 2025 18:56:37 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2025/04/26/bluesky-say-its-not-down.html</guid>
      <description>&lt;p&gt;Bluesky say it&amp;rsquo;s not &lt;a href=&#34;https://bluesky.statuspage.io/&#34;&gt;down&lt;/a&gt; but it&amp;rsquo;s down here on mobile.&lt;/p&gt;
&lt;p&gt;Going for web version &lt;a href=&#34;https://bsky.app/&#34;&gt;bsky.app&lt;/a&gt; or &lt;a href=&#34;https://deer.social/&#34;&gt;deer.social&lt;/a&gt; works but kinda slow, something is definitely not normal, anyone having the same?&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>An elected regime, how to track the Trump Administration </title>
      <link>https://blog.rmendes.net/2025/02/19/an-elected-regime-how-to.html</link>
      <pubDate>Wed, 19 Feb 2025 20:04:48 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2025/02/19/an-elected-regime-how-to.html</guid>
      <description>&lt;h1 id=&#34;how-to-track-the-trump-administration&#34;&gt;How to Track the Trump Administration&lt;/h1&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;apportionment&#34;&gt;Apportionment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://openomb.org/&#34;&gt;OpenOMB&lt;/a&gt;&lt;/strong&gt; (via Protect Democracy)&lt;br&gt;
Tracks how the president, through the Office of Management and Budget, implements Congress’s spending laws.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;cabinet--appointees&#34;&gt;Cabinet / Appointees&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://apnews.com/projects/trump-cabinet-confirmation-tracker/&#34;&gt;Trump Cabinet confirmation status: Which nominees have been confirmed?&lt;/a&gt;&lt;/strong&gt; (via AP)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.citizen.org/article/tracker-trump-appointees-in-the-pocket-of-big-corporations/&#34;&gt;Trump Appointees’ Corporate Conflicts of Interest&lt;/a&gt;&lt;/strong&gt; (via Public Citizen)&lt;br&gt;
These trackers monitor confirmation status, prior employment, and corporate ties of administration appointees.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;campaign-promises&#34;&gt;Campaign Promises&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.politifact.com/truth-o-meter/promises/maga-meter-tracking-donald-trumps-2024-promises/&#34;&gt;MAGA-Meter: Trump&amp;rsquo;s Second Term&lt;/a&gt;&lt;/strong&gt; (via Politifact)&lt;br&gt;
Follow and rate Trump’s campaign promises to see if they’re being fulfilled.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;climate--environment&#34;&gt;Climate / Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.actonclimate.com/trumptracker/&#34;&gt;Climate &amp;amp; Clean Energy Rollback Tracker&lt;/a&gt;&lt;/strong&gt; (via Climate Action Campaign)&lt;br&gt;
Tracks actions aimed at rolling back or weakening key climate policies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://climate.law.columbia.edu/content/climate-backtracker&#34;&gt;Climate Backtracker&lt;/a&gt;&lt;/strong&gt; (via Sabin Center)&lt;br&gt;
Identifies steps taken to scale back or eliminate federal climate mitigation measures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://eelp.law.harvard.edu/tracker-type/environmental-justice-tracker/&#34;&gt;Federal Environmental Justice Tracker&lt;/a&gt;&lt;/strong&gt; (via Harvard Law School)&lt;br&gt;
Monitors policies and regulations that affect communities’ exposure to environmental pollution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://iratracker.org/&#34;&gt;Inflation Reduction Act Tracker&lt;/a&gt;&lt;/strong&gt; (via Sabin Center &amp;amp; Environmental Defense Fund)&lt;br&gt;
Tracks changes in the status of climate programs established under the Inflation Reduction Act.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://climate.law.columbia.edu/Silencing-Science-Tracker&#34;&gt;Silencing Science Tracker&lt;/a&gt;&lt;/strong&gt; (via Sabin Center &amp;amp; Climate Science Legal Defense Fund)&lt;br&gt;
Monitors anti-science actions and efforts to undermine environmental policy.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;congressional-response&#34;&gt;Congressional Response&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://docs.google.com/spreadsheets/d/1mvpWMnivH8B4yP6fyr58DBs6Zhte1V-7ZNOBMkGYfUM/edit?gid=0#gid=0&#34;&gt;U.S. House votes 2025: Is Your Rep Standing Up to Trump?&lt;/a&gt;&lt;/strong&gt; (via Jonathan Cohn)&lt;br&gt;
Tracks every vote in the US House and highlights how often representatives align with Trump’s agenda.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;data-rescue-projects&#34;&gt;Data Rescue Projects&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.datarescueproject.org/data-rescue-tracker/&#34;&gt;Data Rescue Tracker&lt;/a&gt;&lt;/strong&gt; (via Data Rescue Project)&lt;br&gt;
Also see the &lt;a href=&#34;https://bsky.app/profile/did:plc:ml3lrff3l2oszuv2r6amaw5j&#34;&gt;Bluesky version&lt;/a&gt; and the original crowd-sourced &lt;a href=&#34;https://docs.google.com/document/d/15ZRxHqbhGDHCXo7Hqi_Vcy4Q50ZItLblIFaY3s7LBLw/edit?tab=t.0#heading=h.dn2mw4skk3ho&#34;&gt;Google document&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;executive-orders&#34;&gt;Executive Orders&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.cnn.com/politics/tracking-trump-executive-orders-actions-dg/index.html&#34;&gt;Tracking Trump’s executive actions&lt;/a&gt;&lt;/strong&gt; (via CNN)&lt;br&gt;
Monitors executive orders, proclamations, and memos issued by the administration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.usnews.com/news/national-news/articles/tracking-the-legal-challenges-to-trumps-executive-orders&#34;&gt;Tracking the Legal Showdown Over Trump’s Executive Orders&lt;/a&gt;&lt;/strong&gt; (via US News &amp;amp; World Report)&lt;br&gt;
Follows lawsuits challenging some of Trump&amp;rsquo;s most significant executive orders.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;federal-policy&#34;&gt;Federal Policy&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.epi.org/policywatch/&#34;&gt;Federal Policy Watch&lt;/a&gt;&lt;/strong&gt; (via Economic Policy Institute)&lt;br&gt;
Tracks how the Trump administration, Congress, and the courts are affecting workers&#39; quality of life.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;health-care&#34;&gt;Health Care&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.protectourcare.org/sabotage-tracker/&#34;&gt;Health Care Sabotage Tracker&lt;/a&gt;&lt;/strong&gt; (via Protect Our Care)&lt;br&gt;
Monitors all of the ways Trump’s policies target health care services.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;immigration&#34;&gt;Immigration&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://immpolicytracking.org/&#34;&gt;Immigration Policy Tracking Project&lt;/a&gt;&lt;/strong&gt; (via Professor Lucas Guttentag with teams of Stanford/Yale law students &amp;amp; national immigration experts)&lt;br&gt;
Catalogues known Trump administration immigration policies, complete with source documents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.aila.org/library/tracking-notable-executive-branch-action-during-the-second-trump-administration&#34;&gt;Tracking Notable Executive Branch Action during the Second Trump Administration&lt;/a&gt;&lt;/strong&gt; (via American Immigration Lawyers Association)&lt;br&gt;
Tracks select changes to immigration-related regulations and policies.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;lgbtq&#34;&gt;LGBTQ+&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://glaad.org/trump-accountability-tracker/&#34;&gt;Trump Accountability Tracker&lt;/a&gt;&lt;/strong&gt; (via GLAAD)&lt;br&gt;
Monitors Trump’s LGBTQ record, including executive orders, legislative support, nominations, and statements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.hrc.org/resources/accountability-tracker-timeline&#34;&gt;HRC&amp;rsquo;s Accountability Tracker&lt;/a&gt;&lt;/strong&gt; (via Human Rights Campaign)&lt;br&gt;
Tracks legal and policy threats impacting LGBTQ+ rights from all three federal branches.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;litigation&#34;&gt;Litigation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://clearinghouse.net/post/1175/&#34;&gt;Civil Rights Litigation Clearinghouse&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Tracks actions related to immigration, civil service, anti-discrimination law, challenges to presidential authority, and more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.justsecurity.org/107087/tracker-litigation-legal-challenges-trump-administration/&#34;&gt;Litigation Tracker: Legal Challenges to Trump Administration Actions&lt;/a&gt;&lt;/strong&gt; (via Just Security)&lt;br&gt;
Summarizes legal challenges to the Trump administration’s actions with detailed case information.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;major-actions--statements&#34;&gt;Major Actions &amp;amp; Statements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.nytimes.com/interactive/2025/us/trump-agenda-2025.html&#34;&gt;All of the Trump Administration’s Major Moves in the First __ Days&lt;/a&gt;&lt;/strong&gt; (via New York Times)&lt;br&gt;
Tracks major actions and significant statements during the first 100 days of the term.&lt;br&gt;
(Filter by category and type of action/announcement.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.theguardian.com/us-news/2025/jan/27/trump-first-100-days-guide&#34;&gt;Tracking Trump – updates on the presidency’s first 100 days&lt;/a&gt;&lt;/strong&gt; (via The Guardian)&lt;br&gt;
Provides a guide to the major developments of the first 100 days, updated every Monday.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;project-2025&#34;&gt;Project 2025&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://progressivereform.org/tracking-trump-2/project-2025-executive-action-tracker/&#34;&gt;Project 2025 Executive Action Tracker&lt;/a&gt;&lt;/strong&gt; (via Center for Progressive Reform)&lt;br&gt;
Direct link to the &lt;a href=&#34;https://docs.google.com/spreadsheets/d/1n0xtOFS-7vRfUU-sr4ZNURrSNJO-fNlG/edit?gid=232350695#gid=232350695&#34;&gt;tracker document&lt;/a&gt;&lt;br&gt;
Tracks the implementation of Project 2025 across 20 federal agencies.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;regulatory-changes&#34;&gt;Regulatory Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://eelp.law.harvard.edu/tracker-type/regulatory-tracker/&#34;&gt;Regulatory Tracker&lt;/a&gt;&lt;/strong&gt; (via Harvard Law School)&lt;br&gt;
Monitors regulatory and litigation actions related to clean energy deployment and environmental protection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.brookings.edu/articles/tracking-regulatory-changes-in-the-second-trump-administration/&#34;&gt;Tracking regulatory changes in the second Trump administration&lt;/a&gt;&lt;/strong&gt; (via Brookings)&lt;br&gt;
Follow new, delayed, or repealed rules, key guidance, and policy revocations across several policy areas.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Spread the word and build upon these tools to defend democracy!&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Un compteur pour déterminer quand Trump va être dégagé (ou pas)</title>
      <link>https://blog.rmendes.net/2025/01/26/un-compteur-pour-dterminer-quand.html</link>
      <pubDate>Sun, 26 Jan 2025 15:38:06 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2025/01/26/un-compteur-pour-dterminer-quand.html</guid>
      <description>&lt;h1 id=&#34;documentation-du-script-n8n&#34;&gt;Documentation du Script N8N&lt;/h1&gt;
&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;
&lt;p&gt;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 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les &lt;strong&gt;Midterms&lt;/strong&gt; (élections de mi-mandat).&lt;/li&gt;
&lt;li&gt;L&#39;&lt;strong&gt;élection présidentielle&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;jour de l&amp;rsquo;investiture&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il génère également une barre de progression graphique pour chaque événement sous forme de texte.&lt;/p&gt;
&lt;h2 id=&#34;fonctionnalités&#34;&gt;Fonctionnalités&lt;/h2&gt;
&lt;h3 id=&#34;1-définition-des-dates-clés&#34;&gt;1. Définition des dates clés&lt;/h3&gt;
&lt;p&gt;Le script définit les dates des événements cibles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Midterms&lt;/strong&gt; : 3 novembre 2026.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Élection présidentielle&lt;/strong&gt; : 7 novembre 2028.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jour de l&amp;rsquo;investiture&lt;/strong&gt; : 20 janvier 2029.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-calcul-des-jours-restants&#34;&gt;2. Calcul des jours restants&lt;/h3&gt;
&lt;p&gt;Le script calcule :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le nombre total de jours entre aujourd&amp;rsquo;hui et chaque événement.&lt;/li&gt;
&lt;li&gt;Le pourcentage de progression en fonction des jours écoulés.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-génération-de-barres-de-progression&#34;&gt;3. Génération de barres de progression&lt;/h3&gt;
&lt;p&gt;Une fonction génère une barre de progression graphique, composée de blocs pleins (&lt;code&gt;█&lt;/code&gt;) et de blocs vides (&lt;code&gt;▒&lt;/code&gt;), représentant visuellement l&amp;rsquo;avancée jusqu&amp;rsquo;à l&amp;rsquo;événement.&lt;/p&gt;
&lt;h3 id=&#34;4-génération-et-publication-du-message&#34;&gt;4. Génération et publication du message&lt;/h3&gt;
&lt;p&gt;Le script produit un message comprenant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le décompte des jours restants pour chaque événement.&lt;/li&gt;
&lt;li&gt;Les barres de progression associées.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;exemple-de-résultat&#34;&gt;Exemple de Résultat&lt;/h2&gt;
&lt;p&gt;Voici un exemple du message généré :&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;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%
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;code&#34;&gt;Code&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// JavaScript code for N8N to calculate and post daily countdowns with a graphical loading bar

// Define the reference start date (Trump&#39;s 2025 inauguration)
const startOfMandate = new Date(&#39;2025-01-20T00:00:00Z&#39;);

// Define the target dates
const midtermsDate = new Date(&#39;2026-11-03T00:00:00Z&#39;); // Next USA Midterms
const presidentialElectionDate = new Date(&#39;2028-11-07T00:00:00Z&#39;); // Next Presidential Election
const inaugurationDate = new Date(&#39;2029-01-20T00:00:00Z&#39;); // 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 `${&#39;█&#39;.repeat(filledBars)}${&#39;▒&#39;.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,
  },
}];

&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;où-il-publie&#34;&gt;Où il publie&lt;/h2&gt;
&lt;p&gt;Le script retourne le message sous forme d&amp;rsquo;un objet JSON, prêt à être utilisé dans un flux N8N pour une publication quotidienne via un nœud horaire configuré.&lt;/p&gt;
&lt;h2 id=&#34;configuration-recommandée&#34;&gt;Configuration Recommandée&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fuseau horaire du serveur&lt;/strong&gt; : CET (heure allemande).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heure de publication&lt;/strong&gt; : 14h00 CET, correspondant à 8h00 ET (heure de la côte Est des États-Unis).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;utilisation&#34;&gt;Utilisation&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Intégrez le script dans un nœud de fonction JavaScript dans N8N.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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.).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;résultat&#34;&gt;Résultat&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/trumpwatch.skyfleet.blue/post/3lkqzr6bg5n27&#34;&gt;Trumpwatch&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2025/01/12/setting-up-a-bluesky-pdsdetails.html</link>
      <pubDate>Sun, 12 Jan 2025 09:54:20 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2025/01/12/setting-up-a-bluesky-pdsdetails.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://jaredallard.dev/setting-up-a-bluesky-pds/&#34;&gt;Setting up&lt;/a&gt; a Bluesky PDS
Details on setting up a Bluesky PDS with S3 for blob storage, Mailgun for SMTP, and a Ubuntu VM. By &lt;a href=&#34;https://bsky.app/profile/jaredallard.dev&#34;&gt;@jaredallard.dev&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2025/01/03/bluesky-wont-save-uslike-radiation.html</link>
      <pubDate>Fri, 03 Jan 2025 21:40:30 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2025/01/03/bluesky-wont-save-uslike-radiation.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.liberalcurrents.com/bluesky-wont-save-us/&#34;&gt;Bluesky Won&amp;rsquo;t Save Us&lt;/a&gt;
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&lt;/p&gt;
&lt;p&gt;#bluesky #moderation #mastodon&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/12/29/bluesky-et-laffaire-singal-by.html</link>
      <pubDate>Sun, 29 Dec 2024 22:35:12 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/12/29/bluesky-et-laffaire-singal-by.html</guid>
      <description>&lt;p&gt;#Bluesky et &lt;a href=&#34;https://little-flying-robots.ghost.io/bluesky-gets-enormous-butternut-squash-soup-and-vietnam-2/&#34;&gt;L&amp;rsquo;affaire Singal&lt;/a&gt; by &lt;a href=&#34;https://bsky.app/profile/faineg.bsky.social&#34;&gt;@FaineG&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How to Bulk Delete Bluesky Posts With Rate Limit Management</title>
      <link>https://blog.rmendes.net/2024/12/15/how-to-bulk.html</link>
      <pubDate>Sun, 15 Dec 2024 15:09:13 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/12/15/how-to-bulk.html</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;This script leverages the official &lt;code&gt;@atproto/api&lt;/code&gt; package to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log into your Bluesky account.&lt;/li&gt;
&lt;li&gt;Fetch all posts that match certain criteria (e.g., containing a specific domain in their facets, embeds, or entities).&lt;/li&gt;
&lt;li&gt;Delete them in batches while respecting and reacting to rate limits.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;key-features&#34;&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Domain-based Filtering:&lt;/strong&gt;&lt;br&gt;
The script identifies posts containing a specific domain by checking:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Facets with &lt;code&gt;app.bsky.richtext.facet#link&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;External embeds with &lt;code&gt;app.bsky.embed.external&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Legacy entities with &lt;code&gt;type: link&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rate Limit Management (Proactive):&lt;/strong&gt;&lt;br&gt;
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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rate Limit Management (Fallback):&lt;/strong&gt;&lt;br&gt;
If the script ever hits a &lt;code&gt;429 Rate Limit Exceeded&lt;/code&gt; error, it will parse the &lt;code&gt;ratelimit-reset&lt;/code&gt; 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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Batch Operations and Delays:&lt;/strong&gt;&lt;br&gt;
To avoid rapid-fire requests, the script:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Performs deletions in configurable batch sizes (default: 200 per batch).&lt;/li&gt;
&lt;li&gt;Waits a short delay between batches to spread requests out over time.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Node.js and npm:&lt;/strong&gt;&lt;br&gt;
Ensure you have a recent version of Node.js installed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install Dependencies:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;npm install @atproto/api p-ratelimit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;credentials&#34;&gt;Credentials&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2 id=&#34;running-the-script&#34;&gt;Running the Script&lt;/h2&gt;
&lt;p&gt;Save the script below as bluesky-sweep.ts.&lt;/p&gt;
&lt;p&gt;Run it using:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;npx ts-node bluesky-sweep.ts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configuration-parameters&#34;&gt;Configuration Parameters&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TARGET_DOMAIN: Set this to the domain you want to search for in your posts.&lt;/li&gt;
&lt;li&gt;DELETES_PER_BATCH: Number of posts per deletion batch.&lt;/li&gt;
&lt;li&gt;MAX_DELETES_PER_HOUR: Maximum deletions allowed per hour (5000 is the current default from Bluesky).&lt;/li&gt;
&lt;li&gt;SAFE_MARGIN: A buffer to start waiting before hitting the exact limit.&lt;/li&gt;
&lt;li&gt;DELAY_BETWEEN_BATCHES_MS: Milliseconds to wait between each batch.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * Bulk Delete Bluesky Posts with Domain Filtering and Rate Limit Management
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; *
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * This script:
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * - Logs in to a Bluesky account.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * - Fetches posts containing a specified domain via facets, embeds, or entities.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * - Deletes them in batches, respecting and reacting to rate limits.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; *
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * Adjust the constants below to fit your needs before running.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;


&lt;span style=&#34;color:#66d9ef&#34;&gt;import&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;BskyAgent&lt;/span&gt; } &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;@atproto/api&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;import&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;pRateLimit&lt;/span&gt; } &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;p-ratelimit&amp;#39;&lt;/span&gt;;


&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;VERBOSE&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TARGET_DOMAIN&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;futura-sciences.com&amp;#39;&lt;/span&gt;;


&lt;span style=&#34;color:#75715e&#34;&gt;// Known limit and configurations
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MAX_DELETES_PER_HOUR&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DELETES_PER_BATCH&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DELAY_BETWEEN_BATCHES_MS&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// 5 seconds between batches
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SAFE_MARGIN&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Start waiting before we hit exactly 5000
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;

(&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; () &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; {
  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;agent&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BskyAgent&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://bsky.social&amp;#39;&lt;/span&gt; });
  &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;agent&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;login&lt;/span&gt;({
    &lt;span style=&#34;color:#a6e22e&#34;&gt;identifier&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;your-handle&amp;#39;&lt;/span&gt;,
    &lt;span style=&#34;color:#a6e22e&#34;&gt;password&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;your-password&amp;#39;&lt;/span&gt;,
  });


  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Logged in as &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;agent&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;session&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;handle&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; (&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;agent&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;session&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;did&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;)`&lt;/span&gt;);


  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;limit&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pRateLimit&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;concurrency&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;interval&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;1000&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rate&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;5&lt;/span&gt; });


  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getRecordId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; {
    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;lastIndexOf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;);
    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;slice&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
  };


  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunked&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;T&lt;/span&gt;&amp;gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;T&lt;/span&gt;[], &lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;number&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt;[][] &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; {
    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunks&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;T&lt;/span&gt;[][] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];
    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;) {
      &lt;span style=&#34;color:#a6e22e&#34;&gt;chunks&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;slice&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;));
    }
    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunks&lt;/span&gt;;
  };


  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ms&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;number&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Promise&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ms&lt;/span&gt;));


  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deletes&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;[] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];
  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cursor&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;undefined&lt;/span&gt;;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;batchCount&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;


  &lt;span style=&#34;color:#75715e&#34;&gt;// Fetch posts
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; {
    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Fetching records (cursor: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;cursor&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;none&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;)...`&lt;/span&gt;);
    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;limit&lt;/span&gt;(() &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt;
      &lt;span style=&#34;color:#a6e22e&#34;&gt;agent&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;api&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;atproto&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;listRecords&lt;/span&gt;({
        &lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;agent.session&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;did&lt;/span&gt;,
        &lt;span style=&#34;color:#a6e22e&#34;&gt;collection&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app.bsky.feed.post&amp;#39;&lt;/span&gt;,
        &lt;span style=&#34;color:#a6e22e&#34;&gt;limit&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;100&lt;/span&gt;,
        &lt;span style=&#34;color:#a6e22e&#34;&gt;cursor&lt;/span&gt;,
        &lt;span style=&#34;color:#a6e22e&#34;&gt;reverse&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
      })
    );


    &lt;span style=&#34;color:#a6e22e&#34;&gt;cursor&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cursor&lt;/span&gt;;
    &lt;span style=&#34;color:#a6e22e&#34;&gt;batchCount&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;;
    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Processing batch #&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;batchCount&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;, &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;records&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; records fetched`&lt;/span&gt;);


    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;record&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;records&lt;/span&gt;) {
      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;VERBOSE&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;\&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;nChecking record URI: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;record&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;record&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;;


      &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;


      &lt;span style=&#34;color:#75715e&#34;&gt;// Check facets for links
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;facets&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;val&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;facets&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; [];
      &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;facet&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;facets&lt;/span&gt;) {
        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;features&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;facet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;features&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; [];
        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;feature&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;features&lt;/span&gt;) {
          &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;feature&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;$type&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app.bsky.richtext.facet#link&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;feature&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;TARGET_DOMAIN&lt;/span&gt;)) {
            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;VERBOSE&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Found target domain in facet link: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;feature&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
            &lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
            &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
          }
        }
        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
      }


      &lt;span style=&#34;color:#75715e&#34;&gt;// Check embed if not found yet
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;val&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;embed&lt;/span&gt;) {
        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;embed&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;val&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;embed&lt;/span&gt;;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;embed&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;$type&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app.bsky.embed.external&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;embed&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;external&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;TARGET_DOMAIN&lt;/span&gt;)) {
          &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;VERBOSE&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Found target domain in embed: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;embed&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;external&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
          &lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
        }
      }


      &lt;span style=&#34;color:#75715e&#34;&gt;// Check entities (legacy) if not found yet
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;val&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;entities&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;isArray&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;val&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;entities&lt;/span&gt;)) {
        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;entity&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;val&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;entities&lt;/span&gt;) {
          &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;entity&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;entity&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;TARGET_DOMAIN&lt;/span&gt;)) {
            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;VERBOSE&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Found target domain in entities link: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;entity&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
            &lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
            &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
          }
        }
      }


      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt;) {
        &lt;span style=&#34;color:#a6e22e&#34;&gt;deletes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;({
          &lt;span style=&#34;color:#a6e22e&#34;&gt;$type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;com.atproto.repo.applyWrites#delete&amp;#39;&lt;/span&gt;,
          &lt;span style=&#34;color:#a6e22e&#34;&gt;collection&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app.bsky.feed.post&amp;#39;&lt;/span&gt;,
          &lt;span style=&#34;color:#a6e22e&#34;&gt;rkey&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;getRecordId&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;record&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;),
        });
      }
    }
  } &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;cursor&lt;/span&gt;);


  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;\&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;nFound &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;deletes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; posts containing &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;TARGET_DOMAIN&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;`&lt;/span&gt;);


  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;deletes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;No posts to delete.&amp;#39;&lt;/span&gt;);
    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
  }


  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunkedDeletes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunked&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;deletes&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;DELETES_PER_BATCH&lt;/span&gt;);
  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Deletion can be done in &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;chunkedDeletes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; batched operations`&lt;/span&gt;);


  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hourWindowStart&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Date.&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;();
  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deletesThisHour&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;


  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunkedDeletes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {
    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunk&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunkedDeletes&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;];


    &lt;span style=&#34;color:#75715e&#34;&gt;// Check if we&amp;#39;re near the hourly limit
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;deletesThisHour&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunk&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;MAX_DELETES_PER_HOUR&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SAFE_MARGIN&lt;/span&gt;)) {
      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Date.&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;();
      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;elapsed&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hourWindowStart&lt;/span&gt;;
      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;oneHourMs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3600000&lt;/span&gt;;


      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;elapsed&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;oneHourMs&lt;/span&gt;) {
        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;waitTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;oneHourMs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;elapsed&lt;/span&gt;;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Approaching hourly limit. Waiting &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;ceil&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;waitTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;60000&lt;/span&gt;)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; minutes to reset.`&lt;/span&gt;);
        &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;waitTime&lt;/span&gt;);
      }


      &lt;span style=&#34;color:#a6e22e&#34;&gt;hourWindowStart&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Date.&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;();
      &lt;span style=&#34;color:#a6e22e&#34;&gt;deletesThisHour&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
    }


    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Deleting batch #&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; with &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;chunk&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; posts...`&lt;/span&gt;);


    &lt;span style=&#34;color:#75715e&#34;&gt;// Retry loop in case of rate limit errors
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;) {
      &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; {
        &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;limit&lt;/span&gt;(() &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt;
          &lt;span style=&#34;color:#a6e22e&#34;&gt;agent&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;api&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;atproto&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;applyWrites&lt;/span&gt;({
            &lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;agent.session&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;did&lt;/span&gt;,
            &lt;span style=&#34;color:#a6e22e&#34;&gt;writes&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;chunk&lt;/span&gt;,
          })
        );
        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Batch operation #&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; completed`&lt;/span&gt;);
        &lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
      } &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;) {
        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;429&lt;/span&gt;) {
          &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;warn&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Rate limit exceeded, checking headers to wait until reset...&amp;#39;&lt;/span&gt;);
          &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resetTimeStr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ratelimit-reset&amp;#39;&lt;/span&gt;];
          &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;waitSeconds&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// default wait
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;

          &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;resetTimeStr&lt;/span&gt;) {
            &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resetTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; parseInt(&lt;span style=&#34;color:#a6e22e&#34;&gt;resetTimeStr&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;);
            &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt;(Date.&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;);
            &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;diff&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resetTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;;
            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;diff&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
              &lt;span style=&#34;color:#a6e22e&#34;&gt;waitSeconds&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;diff&lt;/span&gt;;
            }
          }


          &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Waiting &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;waitSeconds&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; seconds before retrying...`&lt;/span&gt;);
          &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;waitSeconds&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;);
          &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Retrying this batch...&amp;#39;&lt;/span&gt;);
        } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {
          &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Error performing batch #&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;:`&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;);
          &lt;span style=&#34;color:#75715e&#34;&gt;// If it&amp;#39;s a non-rate-limit error, stop the process
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
        }
      }
    }


    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt;) {
      &lt;span style=&#34;color:#a6e22e&#34;&gt;deletesThisHour&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunk&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;;
      &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;DELAY_BETWEEN_BATCHES_MS&lt;/span&gt;);
    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {
      &lt;span style=&#34;color:#75715e&#34;&gt;// If we failed without rate limit handling, break out
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
    }
  }


  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Done&amp;#39;&lt;/span&gt;);
})();


&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;notes&#34;&gt;Notes&lt;/h2&gt;
&lt;h3 id=&#34;rate-limits&#34;&gt;Rate Limits&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.bsky.app/docs/advanced-guides/rate-limits&#34;&gt;https://docs.bsky.app/docs/advanced-guides/rate-limits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;post-structure&#34;&gt;Post Structure&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/feed/post.json&#34;&gt;https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/feed/post.json&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;gist&#34;&gt;Gist&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gist.github.com/rmdes/4e3e7b85d8bd58b419240def8dd21252&#34;&gt;https://gist.github.com/rmdes/4e3e7b85d8bd58b419240def8dd21252&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;code&#34;&gt;Code&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rmdes/bluesky-deleter&#34;&gt;https://github.com/rmdes/bluesky-deleter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/12/07/httpsgithubcomitarublueskyselfhostenv.html</link>
      <pubDate>Sat, 07 Dec 2024 22:40:38 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/12/07/httpsgithubcomitarublueskyselfhostenv.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/itaru2622/bluesky-selfhost-env&#34;&gt;self-host Bluesky the Docker Compose way&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/12/04/take-and-or.html</link>
      <pubDate>Wed, 04 Dec 2024 07:47:16 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/12/04/take-and-or.html</guid>
      <description>&lt;p&gt;Take and or delete your data and Leave X&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cyd.social&#34;&gt;cyd.social&lt;/a&gt; is now available! #Xodus&lt;/p&gt;
&lt;p&gt;Join #Bluesky or #Mastodon instead.&lt;/p&gt;
&lt;p&gt;We are the &amp;ldquo;social graph&amp;rdquo;, whereever we go.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/12/01/hmm-httpslibstcccqcultsp-doi.html</link>
      <pubDate>Sun, 01 Dec 2024 11:32:08 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/12/01/hmm-httpslibstcccqcultsp-doi.html</guid>
      <description>&lt;p&gt;Hmm &lt;a href=&#34;https://libstc.cc/#/?q=cults&amp;amp;p=1&#34;&gt;libstc.cc&lt;/a&gt; #doi #library&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/11/27/bluesky-ai-and.html</link>
      <pubDate>Wed, 27 Nov 2024 20:03:20 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/11/27/bluesky-ai-and.html</guid>
      <description>&lt;p&gt;Bluesky, AI, and the battle for consent on the open web&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://werd.io/2024/bluesky-ai-and-the-battle-for-consent-on-the-open&#34;&gt;werd.io/2024/blue&amp;hellip;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/11/24/au-fond-bluesky.html</link>
      <pubDate>Sun, 24 Nov 2024 18:58:20 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/11/24/au-fond-bluesky.html</guid>
      <description>&lt;p&gt;Au fond bluesky c&amp;rsquo;est &lt;a href=&#34;https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=did:plc:tk6bkjdozskzgb47umfelfpq&amp;amp;collection=app.bsky.feed.post&amp;amp;limit=100&#34;&gt;ça&lt;/a&gt; le reste c&amp;rsquo;est de la déco :))&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/11/24/lanne-passe-on.html</link>
      <pubDate>Sun, 24 Nov 2024 15:28:27 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/11/24/lanne-passe-on.html</guid>
      <description>&lt;p&gt;l&amp;rsquo;année passée on avait mis en place un annuaire de custom feed en Français, il est dispo &lt;a href=&#34;https://base.skyfleet.blue/public/grid/4W_lCTnwaL0S7wFwZ6zW3Yhf0byVeFD_3A8wh0Csf8g&#34;&gt;ici&lt;/a&gt;
pour rajouter vos feed à l&amp;rsquo;annuaire c&amp;rsquo;est par &lt;a href=&#34;https://base.skyfleet.blue/form/0Bmzxqsv19BNgzWuo9Ikh_zhxODTX5E8BnVKStpO2nk&#34;&gt;là&lt;/a&gt;&lt;/p&gt;
&lt;img src=&#34;https://blog.rmendes.net/uploads/2024/screenshot-24-nov-15-23-28-22514.png&#34; width=&#34;600&#34; height=&#34;339&#34; alt=&#34;l&#39;année passée on avait mis en place un annuaire de custom feed en Français, il est dispo [ici](​https://base.skyfleet.blue/public/grid/4W_lCTnwaL0S7wFwZ6zW3Yhf0byVeFD_3A8wh0Csf8g) pour rajouter vos feed à l&#39;annuaire c&#39;est par [là](https://base.skyfleet.blue/form/0Bmzxqsv19BNgzWuo9Ikh_zhxODTX5E8BnVKStpO2nk)&#34;&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/11/24/un-feed-pour.html</link>
      <pubDate>Sun, 24 Nov 2024 15:22:43 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/11/24/un-feed-pour.html</guid>
      <description>&lt;p&gt;un &lt;a href=&#34;https://bsky.app/profile/did:plc:gc7pqgc337bwj2n5mbnkixzk/feed/bskyteam&#34;&gt;Feed&lt;/a&gt; pour voir comment les utilisateurs de Bluesky interragissent avec les posts de la team Bluesky&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/11/11/fascinating-bluesky-graph.html</link>
      <pubDate>Mon, 11 Nov 2024 17:11:42 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/11/11/fascinating-bluesky-graph.html</guid>
      <description>&lt;p&gt;Fascinating #bluesky &lt;a href=&#34;https://aurora.ndimensional.xyz/&#34;&gt;graph &lt;/a&gt;
ps : you NEED to enabe &lt;a href=&#34;https://github.com/gpuweb/gpuweb/wiki/Implementation-Status#implementation-status&#34;&gt;WebGPU &lt;/a&gt;in your browser for this site to work !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/11/09/this-is-really.html</link>
      <pubDate>Sat, 09 Nov 2024 13:53:49 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/11/09/this-is-really.html</guid>
      <description>&lt;p&gt;This is really neat :&lt;/p&gt;
&lt;p&gt;How to self-host all of #Bluesky except the AppView (for now)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://alice.bsky.sh/post/3laega7icmi2q&#34;&gt;alice.bsky.sh/post/3lae&amp;hellip;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/09/01/the-future-is.html</link>
      <pubDate>Sun, 01 Sep 2024 16:18:29 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/09/01/the-future-is.html</guid>
      <description>&lt;p&gt;The future is fragmented, decentralized, so I&amp;rsquo;m publishing from my own blog and cross-posting to several platforms at once, this is a test for #Threads, having already connected #mastodon #bluesky #nostr #linkedin&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/08/28/new-safety-tools.html</link>
      <pubDate>Wed, 28 Aug 2024 18:34:39 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/08/28/new-safety-tools.html</guid>
      <description>&lt;p&gt;New safety tools in Bluesky&lt;/p&gt;
&lt;p&gt;Detach quote posts from your original post
Hide replies
Filter your notifications to only people you follow&lt;/p&gt;
&lt;p&gt;#bluesky #moderation #safety&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/07/09/the-way-i.html</link>
      <pubDate>Tue, 09 Jul 2024 14:49:41 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/07/09/the-way-i.html</guid>
      <description>&lt;p&gt;The way I see it evolve and broaden its usecases, the labels/moderation systems in Bluesky is light years ahead of what any other network is doing.&lt;/p&gt;
&lt;p&gt;It puts users in charge of what they want to see or not, it doesn&amp;rsquo;t solve the entire issue of moderation but it&amp;rsquo;s a step in the right direction.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/06/12/these-two-articles.html</link>
      <pubDate>Wed, 12 Jun 2024 21:10:37 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/06/12/these-two-articles.html</guid>
      <description>&lt;p&gt;These two articles, &lt;a href=&#34;https://jazco.dev/2024/04/15/in-memory-graphs&#34;&gt;part 1&lt;/a&gt; and &lt;a href=&#34;https://jazco.dev/2024/04/20/roaring-bitmaps/&#34;&gt;part 2&lt;/a&gt; are such fascinating read 🤩 by &lt;a href=&#34;https://bsky.app/profile/jaz.bsky.social&#34;&gt;@jaz.bsky.social&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t understand everything but I&amp;rsquo;m always in awe at this kind of implementation and anything related to graph databases and social networks.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/06/06/je-repassais-sur.html</link>
      <pubDate>Thu, 06 Jun 2024 17:58:05 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/06/06/je-repassais-sur.html</guid>
      <description>&lt;p&gt;Je repassais sur le &lt;a href=&#34;https://skyfleet.blue/fr/home&#34;&gt;wiki Bluesky&lt;/a&gt; en me disant, il y a tellement de chose à adapter dans les &lt;a href=&#34;https://skyfleet.blue/fr/tutoriels&#34;&gt;tutos&lt;/a&gt; sur les feed 😅&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/04/17/hmmm-thats-new.html</link>
      <pubDate>Wed, 17 Apr 2024 16:26:27 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/04/17/hmmm-thats-new.html</guid>
      <description>&lt;p&gt;hmmm that&amp;rsquo;s new right? I can see all my #mastodon and #bluesky notifications from within the #microblog android app 😊&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/02/24/deploy-your-selfhosted.html</link>
      <pubDate>Sat, 24 Feb 2024 17:10:00 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/02/24/deploy-your-selfhosted.html</guid>
      <description>&lt;p&gt;Deploy your self-hosted Bluesky PDS &lt;a href=&#34;https://github.com/bluesky-social/pds?tab=readme-ov-file#self-hosting-pds&#34;&gt;with&lt;/a&gt; or &lt;a href=&#34;https://benharri.org/bluesky-pds-without-docker/&#34;&gt;without&lt;/a&gt; Docker !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/02/06/bluesky-is-now.html</link>
      <pubDate>Tue, 06 Feb 2024 19:58:01 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/02/06/bluesky-is-now.html</guid>
      <description>&lt;p&gt;Bluesky is now open to &lt;a href=&#34;https://bsky.social/about/blog/02-06-2024-join-bluesky&#34;&gt;everyone&lt;/a&gt;!
without Invites! #atproto #bluesky&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2024/01/22/interesting-on-why.html</link>
      <pubDate>Mon, 22 Jan 2024 19:09:00 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2024/01/22/interesting-on-why.html</guid>
      <description>&lt;p&gt;Interesting&amp;hellip; on why Bluesky isn&amp;rsquo;t p2p&lt;/p&gt;
&lt;p&gt;#p2p #dat #ipfs #ssb
&lt;a href=&#34;https://pfrazee.com/blog/why-not-p2p&#34;&gt;pfrazee.com/blog/why-&amp;hellip;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/12/23/un-outil-par.html</link>
      <pubDate>Sat, 23 Dec 2023 16:11:17 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/12/23/un-outil-par.html</guid>
      <description>&lt;p&gt;un &lt;a href=&#34;https://mary-ext.github.io/skeetgen/&#34;&gt;outil&lt;/a&gt; par &lt;a href=&#34;https://bsky.app/profile/mary.my.id/post/3kh7icrkefk2a&#34;&gt;mary.my.id&lt;/a&gt; qui vous permet d’archiver facilement vos publications Bluesky !&lt;/p&gt;
&lt;p&gt;Une fois généré, vous pouvez l’héberger en tant que site Web autonome que les gens peuvent voir ou garder l&amp;rsquo;archive en privé ! L’outil est conçu pour les deux cas de figure 📌&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/12/23/so-after-all.html</link>
      <pubDate>Sat, 23 Dec 2023 15:09:09 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/12/23/so-after-all.html</guid>
      <description>&lt;p&gt;So after all, it&amp;rsquo;s not a skeet, it&amp;rsquo;s not a post, it&amp;rsquo;s a butt😅 #blueskylogo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/12/17/neat-nice-release.html</link>
      <pubDate>Sun, 17 Dec 2023 19:08:34 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/12/17/neat-nice-release.html</guid>
      <description>&lt;p&gt;Neat, nice release for AT Proto &lt;a href=&#34;https://github.com/MarshalX/atproto/releases/tag/v0.0.34&#34;&gt;Python&lt;/a&gt; implementation, I think I&amp;rsquo;ll be able to automate post cleaning based on specific Url&amp;rsquo;s with this..&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/11/30/go-f-yourself.html</link>
      <pubDate>Thu, 30 Nov 2023 06:45:06 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/11/30/go-f-yourself.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://youtu.be/U_M_uvDChJQ?si=WfmPtBc7wT8KALUx&#34;&gt;Go F*** Yourself&lt;/a&gt; to Advertisers Boycotting X, I was looking for the next Xelon Mollusk meltdown, there we have it 😅&lt;/p&gt;
&lt;p&gt;more growth for the Fediverse, Bluesky, Threads, is a good thing for the future of the internet.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/11/21/pour-celleux-qui.html</link>
      <pubDate>Tue, 21 Nov 2023 20:17:24 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/11/21/pour-celleux-qui.html</guid>
      <description>&lt;p&gt;pour celleux qui ont comme moi, un pied sur #mastodon et #bluesky, un client vraiment super sympa pour masto : &lt;a href=&#34;https://phanpy.social/&#34;&gt;phanpy.social&lt;/a&gt; ça peut s&amp;rsquo;installer comme une app sur votre smartphone ou desktop et être accessible comme n&amp;rsquo;importe quel applications !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/11/19/cest-hyper-cool.html</link>
      <pubDate>Sun, 19 Nov 2023 09:52:22 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/11/19/cest-hyper-cool.html</guid>
      <description>&lt;p&gt;c&amp;rsquo;est hyper cool quand même ce que devient &lt;a href=&#34;https://micro.blog&#34;&gt;micro.blog&lt;/a&gt;, une façon de reinventer le Blog qui fait le pont avec Mastodon et Bluesky tout en étant lui même un réseau social autour de chaque Blog, c&amp;rsquo;est 2003 all over again mais en mieux !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Brid.gy Indieweb et Bluesky &#43; Mastodon 🤩</title>
      <link>https://blog.rmendes.net/2023/11/10/bridgy-indieweb-et.html</link>
      <pubDate>Fri, 10 Nov 2023 14:05:49 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/11/10/bridgy-indieweb-et.html</guid>
      <description>&lt;p&gt;Ça fait longtemps que je l&amp;rsquo;attendais pour refaire de mon Blog mon client principal pour poster sur les réseaux décentralisé !&lt;/p&gt;
&lt;p&gt;En principe si tu répond à ce Post sur #Bluesky ou #Mastodon ta réponse devrait s&amp;rsquo;afficher comme commentaires sur mon blog !&lt;/p&gt;
&lt;p&gt;Je remplis ce post depuis l&amp;rsquo;application mobile pour alimenter mon &lt;a href=&#34;https://blog.rmendes.net&#34;&gt;Blog&lt;/a&gt; et en principe ça devrait récupérer les commentaires sous ce Post !&lt;/p&gt;
&lt;p&gt;Avec la fédération qui arrive sur Bluesky, l&amp;rsquo;avenir des réseaux sociaux décentralisé va devenir une norme !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/10/22/hi-manton-i.html</link>
      <pubDate>Sun, 22 Oct 2023 18:25:10 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/22/hi-manton-i.html</guid>
      <description>&lt;p&gt;Hi &lt;a href=&#34;https://micro.blog/manton&#34;&gt;@manton&lt;/a&gt; I can&amp;rsquo;t post to bluesky again, my error tab log is full of : 
2023-10-22 19:10:08	Bluesky: Error refreshing token.
2023-10-22 19:10:08	Bluesky: Error sending post.&lt;/p&gt;
&lt;p&gt;So I went back to Accounts, and disconnected my bluesky account, reconnected it, tried to post again, same error.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/10/22/nouveau-sur-le.html</link>
      <pubDate>Sun, 22 Oct 2023 18:19:54 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/22/nouveau-sur-le.html</guid>
      <description>&lt;p&gt;Nouveau sur le wiki : Comment utiliser les &lt;a href=&#34;https://skyfleet.blue/fr/tips/markdown&#34;&gt;liens Markdown&lt;/a&gt; sur Bluesky?&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/10/21/comment-rentrersortir-du.html</link>
      <pubDate>Sat, 21 Oct 2023 16:54:53 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/21/comment-rentrersortir-du.html</guid>
      <description>&lt;p&gt;Comment rentrer/sortir du Custom Feed Journalistes FR ?&lt;/p&gt;
&lt;p&gt;Toutes les &lt;a href=&#34;https://skyfleet.blue/fr/custom-feeds/journalistesFR&#34;&gt;infos&lt;/a&gt; sur le wiki.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:gc7pqgc337bwj2n5mbnkixzk/feed/aaafckt74ab56&#34;&gt;Lien&lt;/a&gt; pour l&amp;rsquo;ajouter à son Home/#&lt;/p&gt;
&lt;p&gt;Lien vers la &lt;a href=&#34;https://bsky.app/profile/skyfleet.blue/lists/3kcamwfdufc2w&#34;&gt;liste&lt;/a&gt; en tant que telle.&lt;/p&gt;
&lt;p&gt;N&amp;rsquo;hésitez pas à Liker le feed pour le rendre visible sur Bluesky&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/10/18/test-empty-mention.html</link>
      <pubDate>Wed, 18 Oct 2023 12:29:53 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/18/test-empty-mention.html</guid>
      <description>&lt;p&gt;test empty mention &lt;a href=&#34;https://bsky.app/profile/mwyann.fr&#34;&gt;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/10/10/comment-changer-son.html</link>
      <pubDate>Tue, 10 Oct 2023 14:42:40 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/10/comment-changer-son.html</guid>
      <description>&lt;p&gt;Comment changer son nom d&amp;rsquo;utilisateur sur Bluesky en utilisant son propre nom de domaine ?&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtube.com/live/Bgjd_eqPeJk&#34;&gt;Video&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Mise à jour de Bluesky, voici ce qui change ! </title>
      <link>https://blog.rmendes.net/2023/10/10/mise-jour-de.html</link>
      <pubDate>Tue, 10 Oct 2023 08:48:01 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/10/mise-jour-de.html</guid>
      <description>&lt;p&gt;Vous pouvez maintenant changer votre email!&lt;/p&gt;
&lt;p&gt;• La vérification des e-mails est désormais disponible en tant que protection supplémentaire pour les comptes d’utilisateurs.&lt;/p&gt;
&lt;p&gt;• La visionneuse d’images devrait être plus naturelle à utiliser maintenant.&lt;/p&gt;
&lt;p&gt;• Les suggestions des utilisateurs dans la recherche et les mentions donnent désormais la priorité aux personnes que vous suivez.&lt;/p&gt;
&lt;p&gt;• Vous pouvez maintenant changer de compte rapidement en appuyant longuement sur votre photo de profil dans le pied de page.&lt;/p&gt;
&lt;p&gt;• Les liens externes potentiellement suspect reçoivent maintenant un avertissement avant l’ouverture.&lt;/p&gt;
&lt;p&gt;• Autres corrections de bugs.&lt;/p&gt;
&lt;p&gt;mettez votre app à jour dans les stores !&lt;/p&gt;
&lt;img src=&#34;https://blog.rmendes.net/uploads/2023/8847dbd5eb.jpg&#34; width=&#34;600&#34; height=&#34;600&#34; alt=&#34;Midjourney generated image using Magritte and Bluesky&amp;10;standing man with a hat in front of a frame window opening to a blue sky and two threes&#34;&gt;
</description>
    </item>
    
    <item>
      <title>todo list after-work </title>
      <link>https://blog.rmendes.net/2023/10/08/todo-list-afterwork.html</link>
      <pubDate>Sun, 08 Oct 2023 13:52:29 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/08/todo-list-afterwork.html</guid>
      <description>&lt;h2 id=&#34;geeky-stuff-bluesky&#34;&gt;Geeky stuff Bluesky&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;terminer ajustement de mon extension Bluesky pour Firefox&lt;/li&gt;
&lt;li&gt;mise à jour du code python pour choper mes codes d&amp;rsquo;invites&lt;/li&gt;
&lt;li&gt;terminer mon code python pour choper notifications Bluesky multicomptes&lt;/li&gt;
&lt;li&gt;rediriger la page source sur blog.skyfleet.blue vers skyfleet.blue&lt;/li&gt;
&lt;li&gt;bouger une partie du contenu du Blog vers le Wiki&lt;/li&gt;
&lt;li&gt;Lancer bot juridique&lt;/li&gt;
&lt;li&gt;Lancer bot Moyen-Orient&lt;/li&gt;
&lt;li&gt;Lancer bot géopolitique/mil/sécurité&lt;/li&gt;
&lt;li&gt;Terminer place en place du Wiki skyfleet.blue&lt;/li&gt;
&lt;li&gt;Produire de nouveaux Tutoriels&lt;/li&gt;
&lt;li&gt;Convertir tutoriel texte en Video&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;geeky-stuff-mastodon&#34;&gt;Geeky stuff Mastodon&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;déployer une partie des bots skyfleet.blue sur Mastodon&lt;/li&gt;
&lt;li&gt;Ajouter un système de queue publi postage pour espacer les Posts sur code base actuelle&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;justice&#34;&gt;Justice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terminer lancement &lt;a href=&#34;http://chardonsbleus.org&#34;&gt;@chardonsbleus.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;relance avocats 🇫🇷&lt;/li&gt;
&lt;li&gt;faire le point situation juridique&lt;/li&gt;
&lt;li&gt;faire le point situation instruction&lt;/li&gt;
&lt;li&gt;Lancement levée de fond soutien juridique&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;bouddhistes&#34;&gt;Bouddhistes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;relance JKR&lt;/li&gt;
&lt;li&gt;relance Représentation DL retrait attestation&lt;/li&gt;
&lt;li&gt;lettre ouverte Bouddhistes de France et du Portugal&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Is the News Industry akin to a boiling frog in hot water? </title>
      <link>https://blog.rmendes.net/2023/10/06/are-the-news.html</link>
      <pubDate>Fri, 06 Oct 2023 18:03:35 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/06/are-the-news.html</guid>
      <description>&lt;p&gt;Honestly when I read Nieman Lab Jay Rosen &lt;a href=&#34;https://www.niemanlab.org/2023/10/news-story-or-meme-after-elon-musk-axes-headlines-its-hard-to-tell/&#34;&gt;post about X axing the headlines&lt;/a&gt; and then acknowledging the industry is too much hooked to move out, I ponder and wonder if &amp;ldquo;the industry&amp;rdquo; isn&amp;rsquo;t completely masochistic &amp;amp; openly blind to what X is becoming, to what Musk has allowed and the complacency towards different of extremism, neofascism becoming part of a new normal that even the ones that are supposed to openly denounce it and fight against it, prefer to sit in the mud rather than to teach a lesson to Musk and just, walkout, move out to greener pasture or bluer skyes.&lt;/p&gt;
&lt;p&gt;And fair enough, probably many of these journalists have given a try at Mastodon, Bluesky, Post, Threads and what not but the idea (to one I was myself convinced just a few months back, full disclosure) that Twitter is irreplaceable, that this is where things that happen, happen on Twitter or rather X is a falacy.&lt;/p&gt;
&lt;p&gt;What makes the beat goes on, is us, we the people, not some lunatic with too much power, bad taste and literally stupid ideas given a platform to reinstate his neofascist friends no, what makes Twitter work, is us, its what we build on it, it&amp;rsquo;s the countless services and systems that we have built on top to make it where the beat goes on and as the fediverse and Bluesky and others have shown is that we can rebuild elsewhere, we must rebuild elsewhere.&lt;/p&gt;
&lt;p&gt;Right now, there isn&amp;rsquo;t one single reason to stay on X.&lt;/p&gt;
&lt;p&gt;X future is a cesspit of disinformation, memes, bullying and outright orgy of degeneration that is orchestrated by a man and a handful of other yes men&amp;rsquo;s that don&amp;rsquo;t have the bollocks to say : Elon, this is a bad idea, it will have this or this impact, it won&amp;rsquo;t create confidence, it will ultimately impact the platform and everything that made Twitter works for 17 years. Musk is surrounded by a bunch of loosy yes man&amp;rsquo;s and a CEO that could very well be a flower pot that it would be just about the same.&lt;/p&gt;
&lt;p&gt;And I think, Journalits, News Organization, Political Parties, Businesses, everyone in the end, at least those with a functioning brain and empathy, we all have the responsibility to think about what we create and where we participate in the digital realm.&lt;/p&gt;
&lt;p&gt;And X has decided to go rogue, against developers, organizations, individuals and anything that doesn&amp;rsquo;t bow to the Musk beat and that my friends, for someone that was born inside a cult organization, where crimes enfolded is a red alert, it&amp;rsquo;s full on red alert trigger.&lt;/p&gt;
&lt;p&gt;it was already unforgivable when Musk took power, it is now a question of integrity, of ethics, of values and it&amp;rsquo;s a choice everyone, at its own pace will be confronted : how long can you sleep on a lane with literally nazis, far-right enablers, homophobes and Putin dogs in the same bed?&lt;/p&gt;
&lt;p&gt;I have made my choice, this post is written on my blog and cross-posted in one shot to Bluesky, Mastodon and Nostr and if other players such as Pebble, Threads, Posts and what not played the open web game instead of their version of a everything app, the Web in 2023 wouldn&amp;rsquo;t be in such mess and news organizations wouldn&amp;rsquo;t be at the mercy of a billionaire fanatic swinging the degeneration of democracies &amp;ldquo;just to see where it leads&amp;rdquo; even if it is straight to neofascism.&lt;/p&gt;
&lt;p&gt;Musk should have been kicked in the nuts much sooner, to even once in his life, be taught a lesson.&lt;/p&gt;
&lt;p&gt;he wasn&amp;rsquo;t and now the descent to hell will just accelerate, because that&amp;rsquo;s the only doctrine he knows about : fail fast.&lt;/p&gt;
&lt;p&gt;So, dear journalists, politicians, organizations, businesses, everyone still on X : what else do you need to understand and digest that you&amp;rsquo;re not on Twitter anymore?&lt;/p&gt;
&lt;p&gt;That you have been taken over, dumped into X and that if you want a real-time environment to work with, it&amp;rsquo;s up to you to move it elsewhere, Bluesky, Mastodon, Pebble, at the end of the day, the choice you make of staying there while ignoring what it has become and what it will become is a free pass for Elon Musk and his swarm to keep going and be legitimized.&lt;/p&gt;
&lt;p&gt;Twitter is dead, X is a dying meteor, you can eject and fly safely to another pod or you can choose to stay on a crashing meteor and document its death and be part of it.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Trois manières d&#39;utiliser une archive Twitter et se barrer sur Bluesky </title>
      <link>https://blog.rmendes.net/2023/10/05/trois-manire-dutiliser.html</link>
      <pubDate>Thu, 05 Oct 2023 18:43:34 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/05/trois-manire-dutiliser.html</guid>
      <description>&lt;p&gt;Déclencher votre Archive Twitter et attendre 24h et la télécharger avant qu&amp;rsquo;elle soit périmée.&lt;/p&gt;
&lt;p&gt;Ensuite&amp;hellip; plusieurs pistes :&lt;/p&gt;
&lt;h2 id=&#34;niveau-je-veux-pas-me-prendre-la-tête-&#34;&gt;Niveau je veux pas me prendre la tête 😅&lt;/h2&gt;
&lt;p&gt;Si tu veux pas te prendre la tête et rendre ton archive accessible vite fait bien fait, ceci est pour toi :&lt;/p&gt;
&lt;p&gt;tout uploader sur &lt;a href=&#34;https://micro.blog&#34;&gt;micro.blog&lt;/a&gt; installer le plugin Twitter archive et uploader votre archive, le résultat c&amp;rsquo;est par exemple comme &lt;a href=&#34;https://www.manton.org/tweets/&#34;&gt;ici&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;accessible-à-toustes-avec-un-peu-deffort-&#34;&gt;Accessible à tous/tes avec un peu d&amp;rsquo;effort 😉&lt;/h2&gt;
&lt;p&gt;hébergé toi même avec le &lt;a href=&#34;https://tinysubversions.com/twitter-archive/make-your-own/&#34;&gt;Twitter Archiver&lt;/a&gt; ça implique quelques manipulations mais si vous savez deziper un fichier et uploader un zip et enfin tout réassembler avec votre dossier média de l&amp;rsquo;archive d&amp;rsquo;origine, c&amp;rsquo;est pas sorcier !&lt;/p&gt;
&lt;p&gt;à la fin, vous vous retrouvez avec une archive avec tous vos Tweet, images, vidéos (que Twitter aura bien voulu Archiver) et ce fichier zip, il suffit de le televerser sur un serveur pour le rendre accessible ou vous pouvez aussi le garder en local et le consulter via votre navigateur sans nécessairement le mettre sur le net en public.&lt;/p&gt;
&lt;h2 id=&#34;geek-niveau-1-&#34;&gt;Geek niveau 1 🤖&lt;/h2&gt;
&lt;p&gt;Ensuite il y a une approche un peu plus compliquée mais avec un rendu superbe avec l&amp;rsquo;outil &lt;a href=&#34;https://github.com/tweetback/tweetback&#34;&gt;tweetback&lt;/a&gt; toutes les instructions sont sur le répertoire github, je pense faire un tutoriel à ce sujet prochainement.&lt;/p&gt;
&lt;h2 id=&#34;geek-niveau-2-&#34;&gt;Geek niveau 2 🤖🤖&lt;/h2&gt;
&lt;p&gt;si vous avez beaucoup de fichiers média dans votre archive que vous vous voulez être sûr de récupérer toutes les images, vidéos, gif et j&amp;rsquo;en passe, il y a un excellent &lt;a href=&#34;https://github.com/timhutton/twitter-archive-parser&#34;&gt;outil&lt;/a&gt; en python pour récupérer tous les médias et ensuite repackager son archive avant de voir comment la rendre accessible et chercheable.&lt;/p&gt;
&lt;p&gt;potentiellement l&amp;rsquo;occasion d&amp;rsquo;un autre tutoriel prochainement.&lt;/p&gt;
&lt;p&gt;Et pour Bluesky, bha faut une invite si t&amp;rsquo;es pas dessus et si t&amp;rsquo;y es pas, il y a suffisamment de trace sur ce Blog pour savoir comment obtenir une invite !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/10/04/bon-cest-parti.html</link>
      <pubDate>Wed, 04 Oct 2023 02:22:20 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/04/bon-cest-parti.html</guid>
      <description>&lt;p&gt;Bon c&amp;rsquo;est parti v2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://saskeets.bsky.social&#34;&gt;@saskeets.bsky.social&lt;/a&gt; est désormais &lt;a href=&#34;https://bsky.app/profile/sas.skyfleet.blue&#34;&gt;@sas.skyfleet.blue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;le &lt;a href=&#34;https://saskeets.micro.blog&#34;&gt;Blog&lt;/a&gt; bientôt disponible à l&amp;rsquo;adresse &lt;a href=&#34;https://blog.skyfleet.blue&#34;&gt;blog.skyfleet.blue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bientôt un nouveau Wiki tout propre avec tutoriels, astuces, listes d&amp;rsquo;outils Bluesky, liens vers des guides et des &lt;a href=&#34;https://bsky.app/profile/enfeetamine.bsky.social/post/3k64t2gki5i2v&#34;&gt;starters pack&lt;/a&gt; les plus cool du réseau !&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/10/03/tutoriels-bluesky-comment.html</link>
      <pubDate>Tue, 03 Oct 2023 20:35:03 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/10/03/tutoriels-bluesky-comment.html</guid>
      <description>&lt;h2 id=&#34;tutoriels-bluesky&#34;&gt;Tutoriels Bluesky&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.rmendes.net/2023/08/18/bluesky-comment-utiliser.html&#34;&gt;Comment utiliser les Custom Feeds avec des newsbot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.rmendes.net/2023/08/14/comment-dployer-un.html&#34;&gt;Comment déployer des newsbot sur Bluesky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Comment &lt;a href=&#34;https://blog.rmendes.net/2023/08/29/comment-segmenter-un.html&#34;&gt;segmenter les posts d&amp;rsquo;un compte Bluesky&lt;/a&gt; par langues ?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;la-flotte-de-compte-thématique-sas&#34;&gt;la flotte de compte thématique SAS&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://saskeets.micro.blog&#34;&gt;SASkeets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/09/15/the-reason-jack.html</link>
      <pubDate>Fri, 15 Sep 2023 13:22:00 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/09/15/the-reason-jack.html</guid>
      <description>&lt;p&gt;The reason @jack &lt;a href=&#34;https://plc-handle-tracker.kpherox.dev/handle/jack.bsky.social&#34;&gt;deleted&lt;/a&gt; his Bluesky account?&lt;/p&gt;
&lt;p&gt;A feeling of déjà vu of a potential true replacement for Twitter and the need to confirm his bias by making sure all his eggs are on Nostr.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a cryptobro move of rage-quit.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/09/15/vous-avez-un.html</link>
      <pubDate>Fri, 15 Sep 2023 10:47:00 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/09/15/vous-avez-un.html</guid>
      <description>&lt;p&gt;vous avez un iPhone ?
des Gifs sur Bluesky via un client alternatif, c&amp;rsquo;est par &lt;a href=&#34;https://bsky.app/profile/seabass.bsky.social/post/3k7gbf5ebtt2t&#34;&gt;ici&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/09/13/des-statistiques-intressantes.html</link>
      <pubDate>Wed, 13 Sep 2023 09:46:37 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/09/13/des-statistiques-intressantes.html</guid>
      <description>&lt;p&gt;Des &lt;a href=&#34;https://www.namepepper.com/bluesky-statistics&#34;&gt;statistiques&lt;/a&gt; intéressantes sur Bluesky depuis le 1M d&amp;rsquo;utilisateurices, un truc qui tape à l&amp;rsquo;œil : trop d&amp;rsquo;hommes, il faut inviter des gens qui sont pas des mecs, faut urgement diversifier nos invites!!!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Petit Pied et la vallée des merveilles, souvenir d&#39;un monde intérieur</title>
      <link>https://blog.rmendes.net/2023/09/10/petit-pied-et.html</link>
      <pubDate>Sun, 10 Sep 2023 13:03:39 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/09/10/petit-pied-et.html</guid>
      <description>&lt;p&gt;Petite histoire, parce que la mémoire me revient d&amp;rsquo;un coup, prise de note pour mon futur bouquin&amp;hellip; un Thread, oui, c&amp;rsquo;est un peu triste, contexte : dérive sectaire OKC, on est en 1998, j&amp;rsquo;ai 8 ans et cette année, j&amp;rsquo;ai pu &amp;ldquo;aller à Bruxelles&amp;rdquo; c&amp;rsquo;était toute une affaire,&lt;/p&gt;
&lt;p&gt;une à deux fois par an, on voyait nos parents, pour ça on était trimbalé en camionnette du sud de la France, Alpes de Hautes Provence, du &amp;ldquo;domaine de la claire lumière&amp;rdquo; ou Nyima-Dzong comme il était appelé jusqu&amp;rsquo;à Bruxelles, ND est une propriété de 21 hectares dans laquelle on était en &amp;ldquo;internat&amp;rdquo; sauf qu&amp;rsquo;on était enfermé et qu&amp;rsquo;il n&amp;rsquo;y avait pas de visite du &amp;ldquo;monde extérieur&amp;rdquo;, pas de radio, tv, musique ou visite de qui que ce soit.&lt;/p&gt;
&lt;p&gt;Bref, chaque année donc c&amp;rsquo;est le choc avec &amp;ldquo;le monde extérieur&amp;rdquo;, tout d&amp;rsquo;un coup il y a des fruits, des chocolats, des yaourts à la fraise et autant de fromage que tu es capable d&amp;rsquo;en manger, des desseins animés, car oui, la secte OKC était très différente en fonction du fait que l&amp;rsquo;adepte était situé dans un monastère (ND) ou en ville &amp;ldquo;au centre&amp;rdquo; comme c&amp;rsquo;était appelé.&lt;/p&gt;
&lt;p&gt;Nos parents passent leurs journées à travailler dans les business de la secte et nous, on est glué devant la TV en train d&amp;rsquo;aspirer du contenu duquel on était radicalement coupé le reste de l&amp;rsquo;année.&lt;/p&gt;
&lt;p&gt;Ce n&amp;rsquo;était pas du tout recommandé, ni souhaité, mais une fois par an, une brèche se formait et il était compliqué pour la direction de la secte et son fondateur de surveiller tout le monde tout le temps, jusqu&amp;rsquo;à l&amp;rsquo;intérieur de leurs chambres, du coup, le Temple, la pratique était martelée, mais les parents et leurs enfants soufflait d&amp;rsquo;une rare brèche dans un espace temps qui le reste de l&amp;rsquo;année était comme une minidictature, avec, au sommet un Robert Spatz déguisé en Lama Kunzang, flottant au-dessus de ses adeptes, nuit et jour, contrôlant leurs vies, leurs couples, leurs psychés, leur travail.&lt;/p&gt;
&lt;p&gt;Bref voilà pour le contexte, on est donc en décembre de 1998 et ma mère me prend pour aller au cinéma, le truc de dingue, j&amp;rsquo;avais jamais vu un aussi grand écran et puis on pouvait prendre de sucreries et du popcorn et se goinfrer devant le film, fin les pubs qui occupaient une place conséquente à l&amp;rsquo;UGC  Toison d&amp;rsquo;Or, le film commence, c&amp;rsquo;est Petit Pied, le petit dinosaure et la vallée des merveilles&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Un petit brontosaure (un « Long Cou »), Petit-Pied, devient orphelin après que sa mère s&amp;rsquo;est battue contre un tyrannosaure afin de le défendre. Il se retrouve séparé du reste de sa famille à cause d&amp;rsquo;un tremblement de terre. La famine menace et il doit trouver le chemin de la Grande Vallée, un endroit merveilleux où l&amp;rsquo;eau et la verdure se trouvent encore en abondance. Il espère aussi y retrouver ses grands-parents, car c&amp;rsquo;est là que tous les troupeaux de dinosaures se dirigent.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Du haut de mes 8 ans, je n&amp;rsquo;ai aucune idée que je vais me taper un tsunami d&amp;rsquo;émotions refoulées, je n&amp;rsquo;avais pas vu ma mère depuis mes 5 ans, ce jour funeste où elle est simplement partie, parce que la séparation des parents et des enfants, des bébés en fait, était une norme, impossible à contourner et d&amp;rsquo;une certaine façon du haut de ses 21 ans, peut-être que ça l&amp;rsquo;arrange aussi, je ne suis pas enfant &amp;ldquo;facile&amp;rdquo; comme d&amp;rsquo;autres enfants neuraux divergeant à cette époque-là, je suis censé &amp;ldquo;man up&amp;rdquo; et faire comme les autres garçons, &amp;ldquo;être un homme&amp;rdquo;, avalé mes émotions, les contrôler, ne pas les montrer, ne rien afficher.&lt;/p&gt;
&lt;p&gt;Le film se déroule, petit pied perd ses parents, devient orphelin, fait son voyage, passe par toute une série d&amp;rsquo;épreuves tout au long du film jusqu&amp;rsquo;à arriver à la vallée des merveilles, aujourd&amp;rsquo;hui 35 ans plus tard, je sais plus quelle scène m&amp;rsquo;a tellement bouleversé que j&amp;rsquo;ai dû sortir de la salle.&lt;/p&gt;
&lt;p&gt;Ma mère était juste à côté de moi, il n&amp;rsquo;était pas question de la laisser voir que je pleurais, pas question qu&amp;rsquo;elle se rende compte de pourquoi je pleurais, j&amp;rsquo;étais moi-même incapable de vraiment mettre des mots dessus, c&amp;rsquo;était comme si le film et son histoire avait déclenché en moi une tempête d&amp;rsquo;émotions, de peurs, d&amp;rsquo;association à ce petit pied devenu orphelin, mais les faits de la vie, mais c&amp;rsquo;était impossible à contrôler, comme une vague, un magma de non-dit, qui tout d&amp;rsquo;un coup montait à la surface.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai prétexté devoir aller à la toilette, je me suis encouru dans les couloirs et les escaliers, jusqu&amp;rsquo;à les trouver, j&amp;rsquo;avais peur, ce lieu était inconnu, d&amp;rsquo;habitudes &amp;ldquo;en ville&amp;rdquo; ma mère était toujours là, où qu&amp;rsquo;on aille et là, je devais absolument trouver un endroit pour me mettre à l&amp;rsquo;abri, fermer une porte, accepter que j&amp;rsquo;allais devoir laisser le flot d&amp;rsquo;émotions monter, surfer cette vague étrange d&amp;rsquo;un petit corps qui ne se laissait jamais aller sous aucun prétexte et lui donner l&amp;rsquo;espace de pleurer, toutes les larmes de son corps.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai fini par les trouver ces toilettes, je me suis assis et j&amp;rsquo;ai tout vidé en silence, c&amp;rsquo;était comme une rivière en crue, impossible de la contrôler, il valait mieux se laisser porter par le courant, je ne sais pas combien de minutes sont passées, combien de temps est passé, j&amp;rsquo;ai fini par me calmer, me recomposer, me regarder dans le miroir, au loin, j&amp;rsquo;entendais une voix, ma mère se demandait où j&amp;rsquo;étais, il était l&amp;rsquo;heure de reprendre le cours des choses, après un dernier regard dans le miroir, je suis sorti comme si de rien n&amp;rsquo;était.&lt;/p&gt;
&lt;p&gt;Ma mère venait vers moi dans le couloir, inquiète, mais où étais-tu passé tout ce temps ?? tout va bien ? oui oui, tout va bien, elle ne me connaissait pas assez pour déceler derrière la façade le torrent d&amp;rsquo;émotions duquel je venais de sortir, encore moins de traverser avec l&amp;rsquo;intensité que pouvait avoir ses moments pour moi à l&amp;rsquo;époque (et parfois encore aujourd&amp;rsquo;hui) son regard scrutait mon visage quand même, il devait bien y avoir quelques traces, des yeux rougis, j&amp;rsquo;avais raté la fin du film, ce n&amp;rsquo;était pas grave, on louerait la K7 une autre fois pour voir la fin, on a marché toute l&amp;rsquo;Avenue Louise jusqu&amp;rsquo;à la Rue de Livourne ou la secte OKC avait ses quartiers, je me suis réfugié dans mon lit, quelle journée et ce film qui avait déclenché toutes ces émotions, j&amp;rsquo;étais fatigué.&lt;/p&gt;
&lt;p&gt;Mais je me disais que Petit Pied avait réussi, il avait retrouvé la vallée des merveilles et ses grands-parents, après tout &amp;ldquo;le monde extérieur&amp;rdquo; n&amp;rsquo;était pas si terrible. /fin&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/rmendes.net/post/3k6zzir7uwd2m&#34;&gt;Thread sur Bluesky&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.jazco.dev/thread/view?author_handle=rmendes.net&amp;amp;post=3k6zzir7uwd2m&#34;&gt;Thread Vis&lt;/a&gt;&lt;/p&gt;
&lt;img src=&#34;https://blog.rmendes.net/uploads/2023/rmdes-a-green-beautiful-wide-elrond-like-green-landscape-with-o-2db16143-d8.png&#34; width=&#34;600&#34; height=&#34;600&#34; alt=&#34;Petit Pied et la vallée des merveilles, souvenir d&#39;un monde intérieur&#34;&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/09/09/dear-team-i.html</link>
      <pubDate>Sat, 09 Sep 2023 20:49:05 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/09/09/dear-team-i.html</guid>
      <description>&lt;p&gt;Dear 🟦 Team, I created a 🟦 extension for &lt;a href=&#34;https://sources.rmendes.net/Bluesky-Poster.zip&#34;&gt;Chrome&lt;/a&gt; soon in store 💙 🙋🏽 &lt;a href=&#34;https://blog.rmendes.net/2023/09/09/comment-installer-bluesky.html&#34;&gt;How-to&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/jay.bsky.team&#34;&gt;@jay.bsky.team&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/pfrazee.com&#34;&gt;@pfrazee.com&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/divy.zone&#34;&gt;@divy.zone&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/dholms.xyz&#34;&gt;@dholms.xyz&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/ansh.bsky.team&#34;&gt;@ansh.bsky.team&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/bnewbold.bsky.team&#34;&gt;@bnewbold.bsky.team&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/rose.bsky.team&#34;&gt;@rose.bsky.team&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/why.bsky.team&#34;&gt;@why.bsky.team&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/jacob.gold&#34;&gt;@jacob.gold&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/emily.bsky.team&#34;&gt;@emily.bsky.team&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/jaz.bsky.social&#34;&gt;@jaz.bsky.social&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/esb.lol&#34;&gt;@esb.lol&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/foysal.codes&#34;&gt;@foysal.codes&lt;/a&gt;
&lt;a href=&#34;https://bsky.app/profile/danabra.mov&#34;&gt;@danabra.mov&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Comment installer oGraph Bluesky Poster en phase de test ?</title>
      <link>https://blog.rmendes.net/2023/09/09/comment-installer-bluesky.html</link>
      <pubDate>Sat, 09 Sep 2023 19:27:58 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/09/09/comment-installer-bluesky.html</guid>
      <description>&lt;h2 id=&#34;chrome-vivaldi-edge&#34;&gt;Chrome/ Vivaldi/ Edge&lt;/h2&gt;
&lt;p&gt;Tu veux tester mon extension avant qu&amp;rsquo;elle soit mise dans l&amp;rsquo;extension store ?&lt;/p&gt;
&lt;p&gt;Télécharge le fichier zip &lt;a href=&#34;https://sources.rmendes.net/Bluesky-Poster.zip&#34;&gt;Bluesky-Poster&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;va dans les extensions de ton navigateur :
tu peux taper ceci dans la barre d&amp;rsquo;adresse/url pour y arriver au choix en fonction de ton navigateur :
chrome://extensions
vivaldi://extensions
edge://extensions&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;image-1&#34;&gt;image 1&lt;/h1&gt;
&lt;p&gt;Va dans les extensions via le menu&lt;/p&gt;
&lt;img src=&#34;https://blog.rmendes.net/uploads/2023/f3103b7d63.png&#34; width=&#34;600&#34; height=&#34;566&#34; alt=&#34;capture d&#39;écran montrant comment aller dans le Menu des extensions sur Chrome&#34;&gt;
&lt;h1 id=&#34;image-12&#34;&gt;image 1.2&lt;/h1&gt;
&lt;p&gt;Active le mode développeur&lt;/p&gt;
&lt;img src=&#34;https://blog.rmendes.net/uploads/2023/2023-09-09-20-20.png&#34; width=&#34;600&#34; height=&#34;185&#34; alt=&#34;Capture d&#39;écran montrant comment activer le mode dev et charger un extension hors store&#34;&gt;
&lt;p&gt;Et charge l&amp;rsquo;extension préalablement dézippée dans tes Documents ou ailleurs sur ton ordinateur, met là à un endroit fixe qui ne bougera plus.&lt;/p&gt;
&lt;h1 id=&#34;image-13&#34;&gt;image 1.3&lt;/h1&gt;
&lt;p&gt;Épingle l&amp;rsquo;extension pour qu&amp;rsquo;elle soit à porter de main&lt;/p&gt;
&lt;img src=&#34;https://blog.rmendes.net/uploads/2023/4051954698.png&#34; width=&#34;600&#34; height=&#34;208&#34; alt=&#34;&#34;&gt;
&lt;h1 id=&#34;image-14&#34;&gt;image 1.4&lt;/h1&gt;
&lt;p&gt;l&amp;rsquo;extension est installée, il ne te reste plus qu&amp;rsquo;à te connecter !&lt;/p&gt;
&lt;img src=&#34;https://blog.rmendes.net/uploads/2023/e2f412f793.png&#34; width=&#34;600&#34; height=&#34;208&#34; alt=&#34;capture d&#39;écran montrant bluesky poster prêt à se connecter&#34;&gt;
&lt;h2 id=&#34;code-source&#34;&gt;Code source&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/rmdes/oGraph-Bluesky-Poster&#34;&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;firefox&#34;&gt;Firefox&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://sources.rmendes.net/firefox_extension.zip&#34;&gt;Lien&lt;/a&gt; vers le téléchargement pour Firefox&lt;/p&gt;
&lt;h2 id=&#34;instruction&#34;&gt;Instruction&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ouvrez Firefox et accédez à &lt;strong&gt;about:debugging&lt;/strong&gt; dans la bar d&amp;rsquo;adresse.&lt;/li&gt;
&lt;li&gt;Cliquez sur &amp;ldquo;This Firefox&amp;rdquo; dans la barre latérale gauche.&lt;/li&gt;
&lt;li&gt;Cliquez sur &amp;ldquo;Charger le module complémentaire temporaire&amp;rdquo; et sélectionnez le fichier ZIP nouvellement téléchargé.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;extension doit maintenant être installée pour les tests, et l&amp;rsquo;icône doit apparaître correctement dans l&amp;rsquo;interface utilisateur&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;bug&#34;&gt;bug&lt;/h2&gt;
&lt;p&gt;pas de bug recensé, autre que le site web sur lequel vous êtes, doit être en conformité avec les meta opengraph pour que la carte intégrée sur Bluesky s&amp;rsquo;affiche avec une image, à part cela, même si le site distant n&amp;rsquo;a pas cette balise meta ou n&amp;rsquo;a pas d&amp;rsquo;image définie, le post va fonctionner avec ou sans apport de texte de votre part, avec ou sans images.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Mon extension Chrome/Vivaldi/Edge pour poster sur Bluesky marche en mode basique !</title>
      <link>https://blog.rmendes.net/2023/09/05/mon-extension-chromevivaldiedge.html</link>
      <pubDate>Tue, 05 Sep 2023 19:06:44 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/09/05/mon-extension-chromevivaldiedge.html</guid>
      <description>&lt;p&gt;Mon extension Chrome/Vivaldi/Edge pour poster sur Bluesky depuis n&amp;rsquo;importe quel tab sur lequel on est dans le navigateur fonctionne, en mode décoffrage brut : le titre et le lien sont postés, mais pas de carte intégrée et le lien n&amp;rsquo;est pas clickable, mais pour 2 ou 3h de dev ça me va, next corriger les bugs!!&lt;/p&gt;
&lt;p&gt;c&amp;rsquo;est aussi la première fois de ma vie que je crée une extension pour chrome et c&amp;rsquo;est une chouette learning curve !&lt;/p&gt;
&lt;h2 id=&#34;ce-qui-marche&#34;&gt;ce qui marche&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;login&lt;/li&gt;
&lt;li&gt;click to share&lt;/li&gt;
&lt;li&gt;text posts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ce-qui-ne-marche-pas&#34;&gt;ce qui ne marche pas&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;URL avec carte intégrée&lt;/li&gt;
&lt;li&gt;se déconnecter via l&amp;rsquo;extension&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/09/01/le-spam-sur.html</link>
      <pubDate>Fri, 01 Sep 2023 15:26:16 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/09/01/le-spam-sur.html</guid>
      <description>&lt;p&gt;Le spam sur Bluesky, ça a déjà commencé et des chercheurs actifs sur feu Twitter ont déjà commencé à repérer leurs manigances : &lt;a href=&#34;https://conspirator0.substack.com/p/spamming-where-the-skies-are-blue&#34;&gt;conspirator0.substack.com/p/spammin&amp;hellip;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/08/30/signet-des-custom.html</link>
      <pubDate>Wed, 30 Aug 2023 17:51:06 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/08/30/signet-des-custom.html</guid>
      <description>&lt;p&gt;signet : des custom feed que j&amp;rsquo;aime bien fait par d&amp;rsquo;autres :&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:2rphjhzdtfztzxtylnb2tl2t/feed/aaaajwbiqyqyi&#34;&gt;Post en Français&lt;/a&gt; uniquement !&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:7q4nnnxawajbfaq7to5dpbsy/feed/bsky-news&#34;&gt;Bluesky News&lt;/a&gt; sur Bluesky&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:dvgliotey33vix3wlltybgkd/feed/ukrainian-view&#34;&gt;Posts par des Ukrainiens&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un feed de &lt;a href=&#34;https://bsky.app/profile/did:plc:q6gjnaw2blty4crticxkmujt/feed/my-followers&#34;&gt;gens qui te suivent&lt;/a&gt;, mais que tu ne suis pas&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:vnil23vx4slyilc7dr4v3bmx/feed/aaan6qpkth34o&#34;&gt;Top skeets FR&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:wzsilnxf24ehtmmc3gssy5bu/feed/allmentions&#34;&gt;Tous les posts sur lesquels on te répond, mentionne ou cite directement&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.rmendes.net/2023/08/30/quelquesuns-de-mes.html</link>
      <pubDate>Wed, 30 Aug 2023 17:22:22 +0100</pubDate>
      
      <guid>http://rmdes.micro.blog/2023/08/30/quelquesuns-de-mes.html</guid>
      <description>&lt;p&gt;Quelques-uns de mes custom feeds :&lt;/p&gt;
&lt;p&gt;mes &lt;a href=&#34;https://bsky.app/profile/did:plc:tk6bkjdozskzgb47umfelfpq/feed/aaaeobnrqiuco&#34;&gt;signets&lt;/a&gt; sur Bluesky&lt;/p&gt;
&lt;p&gt;mon &lt;a href=&#34;https://bsky.app/profile/did:plc:tk6bkjdozskzgb47umfelfpq/feed/aaae7x6v75yog&#34;&gt;feed&lt;/a&gt; d&amp;rsquo;info multicomptes&lt;/p&gt;
&lt;p&gt;Ce que les gens disent sur &lt;a href=&#34;https://bsky.app/profile/did:plc:tk6bkjdozskzgb47umfelfpq/feed/aaaps2xeuhj5o&#34;&gt;Trump&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:tk6bkjdozskzgb47umfelfpq/feed/aaao7t2rvdu62&#34;&gt;Qui a dit BXL ou Bruxelles&lt;/a&gt; sur Bluesky?&lt;/p&gt;
&lt;p&gt;mon Feed &lt;a href=&#34;https://bsky.app/profile/did:plc:tk6bkjdozskzgb47umfelfpq/feed/aaaol2lca5c6y&#34;&gt;Medias FR&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:tk6bkjdozskzgb47umfelfpq/feed/aaapp2aty6pmq&#34;&gt;Du sport&lt;/a&gt;, plein de sports sur bluesky&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:tk6bkjdozskzgb47umfelfpq/feed/aaao5tcpjngdi&#34;&gt;L&amp;rsquo;info à la Belge&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;info sur &lt;a href=&#34;https://bsky.app/profile/did:plc:tk6bkjdozskzgb47umfelfpq/feed/aaao63xz2swiy&#34;&gt;l&amp;rsquo;Ukraine&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>