Search
1000 results for “rails”
-
Hype for the Future 193A: City of Lincoln, Illinois
Overview The City of Lincoln is a small city that serves as the county seat of Logan County, Illinois, along Routes 10 and 121. Today, the community is most commonly associated with Lincoln College and Historic Route 66, with the Lincoln Heritage Museum, the Mill Museum on Route 66, and the World’s Largest Railsplitter Covered Wagon paying tribute to the Route 66 heritage of the community.https://novatopflex.wordpress.com/2026/05/12/hype-for-the-future-193a-city-of-lincoln-illinois/
-
Even grifters don't like getting duped in a Ponzi scheme! Grifter Boffin J. Sun rails against World Liberty Finance (WLFI) for:
1) secretly implementing a one-signature freeze function, used to blacklist his wallet
2) WFLI posted ~ $5B WLFI token on Dolomite as collateral to borrow $250 million in Stablecoins > classic circular financing move
Lawsuits are likely! https://www.cryptotimes.io/2026/04/13/justin-sun-claims-wlfi-has-a-one-signature-wallet-freeze-power/ #WLFI #Crypto #CryptoCurrencies #BlockChain #StableCoins #Tron #TRXTokens #Grift #Grifters #PonziScheme #Lawsuit #SEC #MemeCoins
-
OpenFX’s $94M raise is a signal of where fintech value is moving.
Stablecoins are increasingly becoming invisible settlement rails for enterprise FX, payroll and remittances. But faster throughput is not the same as durable economics.
Can infrastructure players preserve liquidity quality, compliance discipline and trust as they scale into fragmented corridors?
#fintech #USA #technology #funding #business #finance #stablecoins
-
#Writephant 2026.0504 — A2. Do you have a favorite work that is either set in space or a celestial body that isn’t Earth?
Plenty. Not only do I write SF, I read it. However, let's stick to media.
I love Firefly. From beginning to end, it was weirdly interesting and fun, with a pure demonstration of how to lampshade facts you really don't want to have to explain. I'm often offended when obvious science is gotten wrong, but the characters and plot lines had their own consistent logic and I went with the quirkiness.
I also loved the last series version of Battlestar Galactica, except for the very last episode. They made a think about FTL rules, and I felt they got the military milieu exceptionally well, with the robotics explained well enough to make it all consistent and believable—except for the very end where the story went so far off the rails, it launched the locomotive directly to high orbit. Otherwise, good SF, showing how technology affects humans.
I'll give a shout out to Babylon 5 for mixing idealism and multiculturalism in a way much better than most TV SF ever did.
#Firefly #Babylon5 #BattlestarGalactica #FTL
[Author retains copyright (c)2026 R.S.]
#gender #fiction #writer #author
#cozy #mystery #thriller #romance #fantasy #sf #sff #sciencefiction
#writing #writingcommunity #writersOfMastodon #writers
#RSdiscussion -
Hennessy Road, 銅鑼灣, Hong Kong
(Details In The AltText) - (A Repeat)
#AltText #NoAI #No2AI #Photography #Photo #POTD #PhotoOfTheDay #Travel #TravelPhotography #HongKong #Rail #Tracks #Rails #Landscape #Track #BNW #Abstract #LandscapePhotography #City #Asia #Cityscape #China #Tram #Trams #Street #StreetPhotography #StreetCar #StreetCars #銅鑼灣 #PublicTransport #Urban #Monochrome #UrbanPhotography #BlackAndWhite #BlackAndWhitePhotography #AbstractPhotography
-
Hennessy Road, 銅鑼灣, Hong Kong
(Details In The AltText) - (A Repeat)
#AltText #NoAI #No2AI #Photography #Photo #POTD #PhotoOfTheDay #Travel #TravelPhotography #HongKong #Rail #Tracks #Rails #Landscape #Track #BNW #Abstract #LandscapePhotography #City #Asia #Cityscape #China #Tram #Trams #Street #StreetPhotography #StreetCar #StreetCars #銅鑼灣 #PublicTransport #Urban #Monochrome #UrbanPhotography #BlackAndWhite #BlackAndWhitePhotography #AbstractPhotography
-
Hennessy Road, 銅鑼灣, Hong Kong
(Details In The AltText) - (A Repeat)
#AltText #NoAI #No2AI #Photography #Photo #POTD #PhotoOfTheDay #Travel #TravelPhotography #HongKong #Rail #Tracks #Rails #Landscape #Track #BNW #Abstract #LandscapePhotography #City #Asia #Cityscape #China #Tram #Trams #Street #StreetPhotography #StreetCar #StreetCars #銅鑼灣 #PublicTransport #Urban #Monochrome #UrbanPhotography #BlackAndWhite #BlackAndWhitePhotography #AbstractPhotography
-
Hennessy Road, 銅鑼灣, Hong Kong
(Details In The AltText) - (A Repeat)
#AltText #NoAI #No2AI #Photography #Photo #POTD #PhotoOfTheDay #Travel #TravelPhotography #HongKong #Rail #Tracks #Rails #Landscape #Track #BNW #Abstract #LandscapePhotography #City #Asia #Cityscape #China #Tram #Trams #Street #StreetPhotography #StreetCar #StreetCars #銅鑼灣 #PublicTransport #Urban #Monochrome #UrbanPhotography #BlackAndWhite #BlackAndWhitePhotography #AbstractPhotography
-
“And instead, the reporting is, they’re investigating #ReneeGood & her #widow for their associations, for who they’re dealing with, for, again, #FirstAmendment protected activity. And now we learn that they’re looking criminally at elected leaders engaging in core protected First Amendment speech. They’re just off the rails at this point.”
#law #Trump #RevengePolitics #WeaponizationOfGovernment #DOJ #LegalEthics #FreeSpeech #dissent #Dictatorship #Autocracy #Tyranny #MafiaState
-
“And instead, the reporting is, they’re investigating #ReneeGood & her #widow for their associations, for who they’re dealing with, for, again, #FirstAmendment protected activity. And now we learn that they’re looking criminally at elected leaders engaging in core protected First Amendment speech. They’re just off the rails at this point.”
#law #Trump #RevengePolitics #WeaponizationOfGovernment #DOJ #LegalEthics #FreeSpeech #dissent #Dictatorship #Autocracy #Tyranny #MafiaState
-
“And instead, the reporting is, they’re investigating #ReneeGood & her #widow for their associations, for who they’re dealing with, for, again, #FirstAmendment protected activity. And now we learn that they’re looking criminally at elected leaders engaging in core protected First Amendment speech. They’re just off the rails at this point.”
#law #Trump #RevengePolitics #WeaponizationOfGovernment #DOJ #LegalEthics #FreeSpeech #dissent #Dictatorship #Autocracy #Tyranny #MafiaState
-
“And instead, the reporting is, they’re investigating #ReneeGood & her #widow for their associations, for who they’re dealing with, for, again, #FirstAmendment protected activity. And now we learn that they’re looking criminally at elected leaders engaging in core protected First Amendment speech. They’re just off the rails at this point.”
#law #Trump #RevengePolitics #WeaponizationOfGovernment #DOJ #LegalEthics #FreeSpeech #dissent #Dictatorship #Autocracy #Tyranny #MafiaState
-
“And instead, the reporting is, they’re investigating #ReneeGood & her #widow for their associations, for who they’re dealing with, for, again, #FirstAmendment protected activity. And now we learn that they’re looking criminally at elected leaders engaging in core protected First Amendment speech. They’re just off the rails at this point.”
#law #Trump #RevengePolitics #WeaponizationOfGovernment #DOJ #LegalEthics #FreeSpeech #dissent #Dictatorship #Autocracy #Tyranny #MafiaState
-
The Electric State RPG
When I first saw Simon Stålenhag’s artwork for The Electric State I was captivated. His pieces bear a haunting familiarity which becomes unnerving as you take in the details. So, when I saw that Free League was crowdfunding an RPG based on The Electric State it was a no-brainer to back it. And when I was able to read it, this game left me thinking.
Introduction
The Electric State RPG is not about gaining treasure or saving the world. It’s about journeying through this world and provokes players to discover how their characters are changed by it. It’s wild.
Setting
The game takes place in an alternate reality 1990s, where many of the cultural cornerstones from our world also exist. Grunge is a thing, vehicles have a 90s aesthetic, and much of the technology is identical to our world. But there is one aspect of The Electric State which takes our 90s and twists it off angle enough that it becomes an alien landscape.
Neuronics broke the world.
In The Electric State RPG the human brain was not only charted, it was both mapped and replicated. This created the opportunity for humans to connect their minds to “neuroscapes” which allowed people to control remote drones and pilot them as though they were wearing the vehicles as skin. It opened up the door to have new neural networks created, giving the rise to robotics our world can only imagine.
The technological leap, combined with social and economic pressures, triggered a US Civil War which broke the county into several nations. The key nation in the game, Pacifica, consists of what used to be the State of California. It claims to be a democracy, but it’s dominated by Sentre, the corporation which created neuronics. Pacifica is in decline. While the densest population centers still feel “normal,” the further one travels from the big cities the more Pacifica’s decay is on display. It’s a society on the verge of collapse, but most folks are too tuned into their neurocasters to take note or care.
It’s a depressing setup, to say the least, but it gets worse. Ever since Sentre pushed out its latest update, Mode 6, neuro addiction has been on the rise. More and more people are being found dead, through either starvation or dehydration, wearing their neurocasters—blissfully connected to the neuroscape and ignoring reality until their very end. Even stranger, Mode 6 seems to have coincided with the growth of “Intercerebral Intelligences.” These entities have emerged from the neuroscapes, and there are rumors some of them have escaped into the physical world and created physical forms for themselves out of the drone wreckage which dots the landscape. Even more odd, cults are arising which treat these intelligences as gods.
As I read the book I tried to come up with a genre for the game. Alternate History, Science Fiction, or Post-Apocalyptic didn’t quite cover things, though there are elements of these in the game. I finally settled on describing The Electric State RPG as psychological horror.
Character Creation
Characters in The Electric State work off of ten archetypes which designate their key attribute, starting talent and money, as well as their basic equipment.
Characters also each have a Dream and a Flaw. These have no mechanical impact on the game but do serve as an excellent skeleton from which a character’s personality can develop.
Each traveler has four Attributes: Strength, Agility, Wits, and Empathy. Starting values range from 2-6 and are determined by rolling 4d6. Players roll the dice, and will re-roll until every die shows a value of 2 or higher. The values on the four dice are then are assigned to the Attributes as the player wishes. If players would rather use point buy for their attributes, they may. They are given 16 points to assign, but no value can be lower than 2 or greater than 6.
Two other derived attributes, Health and Hope, represent a characters physical and emotional well-being. Health is (Strength + Agility)/2 and Hope is (Wits + Empathy)/2. Both results are rounded up.
The last tracked value, Bliss, denotes the pull Neuronics has on the character. More on that in a bit.
Advancement
Travelers who follow their Dream or role-play their Flaw are rewarded with Improvement Rolls after each session. For each role granted a player is able to chose one of their four attributes and roll a d6. If they roll over their current score, that attribute increases by 1. These roles aren’t just “succeed” or “fail,” however, if a character fails their roll they gain a new skill instead. It’s an interesting way to show how characters are changing during their journey through their collapsing world.
Core Mechanics
The Rolls
The Electric State uses a streamlined version of Free League’s Year Zero Engine. For an attempt a player rolls a number of d6s equal to the attribute score most appropriate for the task. The number of dice rolled may be modified by a traveller’s gear, skills, or hinderances affecting them.
Any 6s mean the character has achieved a success, and multiple 6s mean the character’s success is “extra”—like succeeding while being so quiet no one hears the traveler’s actions.
If no 6s are rolled, or if a player wants to go for higher level of success, they may push their roll. To do this the player sets aside any dice showing a 1 or a 6 and re-rolls the rest. At this point 1s become active. Any 1s on a die rolled from a character’s attributes, or added through skills, reduce a character’s Hope—pushing them further to the brink of having a breakdown and perhaps suffering mental trauma. Any 1s on dice added through gear reduce the gear’s bonus. When a gear’s bonus hits zero it becomes busted and cannot be used. To keep gear dice separate players should roll two different color dice for attempts.
Opposed rolls in The Electric State are a competition for the most 6s between all opponents. Whoever rolls fewer 6s loses.
This streamlined version of the Year Zero Engine (YZE) makes setting up their dice pools, and reading results, a bit easier on the players. At the same time, it also makes pushing rolls a bit more risky because dice added through skills can trigger a loss of Hope. In other YZE games like Forbidden Lands, for example, skills never have a negative impact on the character when a roll is pushed. I like the added risk!
Combat
Combat in The Electric State RPG is designed for theater of the mind. Ranges are abstracted and are differentiated by zones. Zones can be differentiated by any natural separation between combatants—a hedgerow, a stream, or even a locked door or barricade can create zones in combat.
There are five ranges in the game. Engaged is anyone who is at “in your face” distance. Short is anything in the same zone. Medium is anything in an adjacent zone. Long is up to 4 zones away. Extreme is anything over 4 zones away.
Initiative is narrative-driven. If combat happens, and this is a game where combat should be a last resort, the character who triggers the combat will go first. They will be followed by all allied combatants, and then opponents. If there is a combat where the narrative says who goes first is a toss up, both sides roll a d6 and add the highest Wits value from an allied combatant. I’m a big fan of narrative-driven initiative, and making it side-based speeds things up at the table.
On a turn a combatant gets one move and one action, or two moves. Minor actions, like ducking for cover or interacting with an object, are considered free actions. How many free actions a character gets is determined by narrative. Shouting a warning, ducking for cover, and then reloading a gun makes narrative sense—though perhaps the reloading could be pushed to a subsequent turn or take up the Traveler’s move. Shouting a warning, typing in a computer password, reloading a gun, and rummaging for a sandwich in a single turn is narrative absurdity. Players and GMs need to work together to keep the in-game fiction working with some sort of logic.
Close combat attacks are made against anyone in Engaged distance and use a character’s Strength attribute as base dice. Ranged attacks are made against any target short range or greater, and use a character’s Agility attribute as base dice. Attacks will also add skill and weapon bonus dice to an attack roll.
Each weapon in the game has a set amount of damage inflicted through a hit and each 6, beyond the first, rolled in an attack inflicts an additional point of damage against the target. The desire to deliver a heavy blow is a wonderful way to entice players to push rolls!
When attacks hit The Electric State RPG includes a few ways to make an active defense.
When struck by a close attack a character may decide to Fight Back. This turns an attack attempt into an opposed roll, giving the target a chance to avoid taking damage or even hitting back. Any character who takes this reaction, however, forfeits their next turn—both movement and action. If a character had already acted in the current round they forfeit their turn in the subsequent round, instead.
Characters targeted by ranged attacks may seek cover, which reduces the number of dice rolled against them, or they be attempt to Dodge the incoming attack. Similar to Fighting Back, when a character dodges they forfeit their next turn—either in the current or subsequent round.
Armor can also be used to mitigate damage. Each armor type has an Armor Level which indicated how many dice should be rolled against damage. Any 6s on the armor roll reduce incoming damage by 1 point.
Damage from attacks reduces a character’s Health. When their Health score reaches zero the character is incapacitated and must make Death Rolls. To make this roll a player rolls four dice and notes the number of 6s rolled. Player gets three Death Rolls to try and get three 6s. If they do, the character stabilizes. If not, the character is dead.
An incapacitated character may be Rallied. Any player attempting to rally a downed traveler rolls Empathy. On a successful roll the incapacitated character rejoins the fight with Health equal to the number of 6s rolled, but they are not stabilized. Rallied characters still need to make death saves and can perish even while continuing to fight. I love a good rallying mechanic in games, and this sounds terrific.
Using Neuronics
The most fascinating aspect of the game is the ability to enter a neuroscape to search for information, interact with attached entities, or hack the system. In The Electric State neuroscapes are powered by massive towers which dominate the landscape. Many are connected to a global network, much like our internet, while some are limited to local access only.
Accessing a neuroscape requires the use of a neurocaster, and each character is equipped with one at the start of play. Not all neurocasters are created equal. The different models have gear bonuses for Processor, Network, and Grapics which are applied for different tasks inside the neuroscape. While neurocasters can connect wirelessly, they are more effective when connected via a hardwire and get +2 dice to all attempts inside the virtual world.
Finding information in, or hacking, the network are each given a difficulty rating of 1-3, commensurate with the attempt’s difficulty. This rating indicates the number of successful Wits rolls the player needs to make in order to achieve their goal—though there are certain talents which increase the number of dice for neurocasting attempts. Each attempt takes one stretch of time (about 5-10 minutes), though if any attempt fails subsequent rolls extend to a shift of time (about 5-10 hours).
Combat inside a neuroscape is possible, and will be flavored like whatever world is being emulated. Because the physics of a neuroscape are virtual, however, all combat is treated like close combat—using Wits instead of Strength. Just as in the real world, an attacked entity may fight back which may cause an attack to fail.
But there’s a twist.
Accessing the neuroscape, is not without risks. When connected to a neuroscape every failed roll increases a traveller’s Bliss by one. Failed attempts can be pushed, just as in the physical world, with the typical risk of losing Hope while doing so. Any traveller whose Bliss becomes greater than their current Hope is lost to The Electric State and cannot will themselves to disconnect from the network (though they may still take actions inside the virtual world to aid the group). Stranded players can be forcibly disconnected, but this will result in their Hope being reduced to zero and will trigger a mental trauma (if that rule is being used by the table).
The risk vs. reward aspect of Neuronics is one of the most fascinating aspects of play for me. Great things can be accomplished, and players may have both skills and equipment which will entice them to attempt such tasks, but in the end the Neuroscape may become a trap from which they cannot escape. It’s pretty cool.
Journeys
The Electric State RPG is not designed for long term campaign play. The characters aren’t heroes, but travelers, and their journey has a specific destination. A typical set up is for the GM and players to gather and select both the destination and the route the group will take to get there. The GM will then create Stops along the way which create both tension and danger for the group as they pass through a society in the midst of collapse. This flies in the face of more “sandbox” style play, where players take their characters wherever they want and the GM sets up situations in response to their actions. At the same time, given the nature of the game, an “on rails” journey does make some sense.
For tables which would like a more free-form trip to reach their destination, they may decide to forego a planned route and choose their direction based on whatever they feel drives the group. In this case, a GM will either move stops to match the route, or improvise a stop to trigger the story—with or without using the excellent tools in the core rulebook.
Why are the travelers on their journey? That’s up to the players. The simplest way to tie the destination to a traveller’s goal is to link it to their Dream. Something about the destination is linked to whatever they’re holding on to for hope in The Electric State RPG’s dystopian world. Travelers may also share goals if the players decide their stories are intertwined.
Travelers will also each have a personal threat, which will create urgency on the journey. Each of these threats will have a counter. Each time they appear the danger the threat represents will increase until they reach a final confrontation with the traveller. As with goals, threats may be shared between travelers if the players decide it makes sense.
Threats in this world aren’t just tied to the travelers. Each stop on the journey also has its own threats and counters, compounding the dystopian feel of the world.
There are tools in chapter 5 which help GMs work with the players to set up a journey and create stops. The advice here is well-done, with ample examples to spark ideas.
The Product
Physical Book
The Electric State is a “full-sized” book clocking in at 230 pages. The cover bears one of Simon Stålenhag’s pieces from the art book, which is stunning. The cover art isn’t borderless, though. Instead, there is a white bevel around the image which feels like an older style design language—like it comes from the 90s. The rear cover displays another piece of art from The Electric State, along with a blurb describing the game’s core concepts. The interior cover pages show a map of Pacifica, the game’s default location, and stuffed in the back is a fold out map which is stunning. It’s not as large as some other posters included in Free League products, but it’s the perfect size to be used at the table. I like it.
My only knocks on the physical book are there are no book ribbons and it’s printed on glossy paper. But the glossy paper didn’t bother me as much as it normally does because the interior layout is so high contrast.
Internal Layout
The design language for The Electric State is minimalist, and is a perfect fit for the game. Borders around call outs and tables are a thick black line. And these are “taped” to the page with scotch, or even duct, tape—as though the book was from the early days of desktop publishing and what we’re reading is a pre-print mock-up. The heading font is an attractive sans serif, and second level headings are preceded by the in-game “Sentre” logo which helps them stand out. Third level headings use the body’s serif font with a bold face and are indented.
Blockquotes, which I assume come from the original art book, are strewn through out The Electric State RPG. These are separated from the rest of the text with a large quotation mark above and a thick black line below and are presented in an italicized sans serif font. Very nice-looking.
Lists use a light-weight Sentre logo for bullet points, which is a stunning design choice. Tables utilize a lightweight sans serif font for the body cells, and a bold sans serif font for heading cells—table rows are separated by a thin line.
Chapter title pages display a full spread image from Simon Stålenhag’s artwork, with the chapter title on one of the spread’s pages in a large sans serif font, a blockquote below the title lays out the feeling for what is to come.
Everything in the layout is stark, and yet easy on the eyes. I never tired reading it.
The Electric State RPG’s core rulebook is filled with Simon Stålenhag’s art, to the point where finding a spread without a piece of art on it feels unusual. It is a visual feast, and the artwork never looses its haunting and provocative power. It’s amazing. I now want to purchase Simon Stålenhag’s books so I can experience it more.
Conclusion
This game has me drooling to run it. It’s “almost normal” world, tweaked to the point where even the familiar feels alien, draws me in. It’s a game which guides players to learn something about the nature of journey and hope in the midst of a slow moving crisis. It can be used to tell amazing stories, but it can also help players experience some deep introspection—just like Simon Stålenhag’s artwork.
You can pick up The Electric State RPG from Free League’s web site. A Hardback book, which includes a PDF with purchase, costs about $51.35. The PDF alone can be purchased through DriveThruRPG (Affiliate Link) for $24.99.
I don’t often suggest anything beyond, “If you like this sort of thing, maybe check this out.” For The Electric State RPG I will say if you found any part of this review appealing get this book. This game is wild.
#DMing #FreeLeague #gaming #GMing #Review #Reviews #RPG #TTRPG
-
CW: As an administrator of several Matrix servers, every now and then I have to decommission one. You can't just power the server down, throw it away and be done with it, so let me show you how it's done.
As an administrator of several Matrix servers, every now and then I have to decommission one.
You can't just power the server down, throw it away and be done with it (really, you can't!). You'll have to remove all users first, and give those removals some time to propagate over the Matrix universe. After that, you can power the server down and junk it.
A handful of users can be removed manually with, for example, Synapse-Admin. But today I have a server with several thousands of users... I've had problems with Carpal Tunnel Syndrome before, so there's no way I'm going to spend several hours moving my mouse the same directions over and over again for hours.
Prepare
I use the Matrix API and curl (thanks for that, @daniel:// stenberg://) to do this the easy way. Well, some of you may scratch your heads when I call this the easy way... 😏
All the commands I show here, are run on the Matrix server itself. You can run them anywhere, but then you'll have to replace "localhost" for the URL of your server, of course.
First of all, you'll need an access token for an account with admin rights. If you happen to have a session open, you can simply copy it from there. If you don't, here's how to get one.curl -s -X POST http://localhost:8008/_matrix/client/r0/login \
-H "Content-Type: application/json" \
-d '{ \
"type": "m.login.password", \
"user": "@administrator:EXAMPLE.COM" , \
"password": "SECRET ADMIN PASSWORD" \
}' | \
jq '.access_token'
This will give you a string like "syt_YWRtaW5pc3RyYXRvcg_dQCZlHWPsGluyHLYyhnH_2aI2ln", provided you used the right username, password and URL. I'll use "xxxx" for better visibility.
Check the number of users
Let's verify our access by checking how many users we're talking about.curl -s -X GET http://localhost:8008/_synapse/admin/v2/users?limit=1000000&deactivated=true \
-H "Authorization: Bearer xxxx" | \
jq '.users[] | .name' | \
wc -l
The limit of 1 million is sort of necessary: you can't say "every user", but if you don't provide a limit, you'll only get the first 100.
Now that you know how many users there are in your database, let's remove them all.
Remove all users
You may be thinking, "if I remove all users, I also remove my admin account, which could complicate things". Good thinking, I ran into that exact problem, because I did my previous user removals with Synapse-Admin (you know, selecting a handful users, clicking "remove", waiting... rince and repeat) and that wouldn't remove my admin account.
But when you use the API directly, you abandon the guard rails and you can actually hurt yourself. I was lucky enough to find that there was still one other admin account after I had removed mine, so I hijacked that one to finished the job. If yours is (was!) the only active admin account, you have a problem...
With this code we list all users MINUS OUR ADMIN ACCOUNT and pass them to the next command, that actually deletes them:curl -s -X GET http://localhost:8008/_synapse/admin/v2/limit=1000000 \
-H "Authorization: Bearer xxxx" | \
jq '.users[] | .name' | \
sed '/@administrator:EXAMPLE.COM/d' | \
xargs -I % \
curl -s -X POST -H "Authorization: Bearer xxxx" \
-H "Content-Type: application/json" \
-d '{ "erase": true }' \
http://localhost:8008/_synapse/admin/v1/deactivate/% | \
tee removal.log | \
wc -l
This will take a looong time, and that's why I have the command write its output to "removal.log", so you can check what's happening.
Every successful removal prints this result:{"id_server_unbind_result":"success"}
So once no new entries like that are being added to the log file, you're done and should be left with only your admin account(s).
Give it a few days for the rest of the Matrix universe to pick these removals up, say a week, and then you can junk your server.
#Matrix #curl #API -
CW: As an administrator of several Matrix servers, every now and then I have to decommission one. You can't just power the server down, throw it away and be done with it, so let me show you how it's done.
As an administrator of several Matrix servers, every now and then I have to decommission one.
You can't just power the server down, throw it away and be done with it (really, you can't!). You'll have to remove all users first, and give those removals some time to propagate over the Matrix universe. After that, you can power the server down and junk it.
A handful of users can be removed manually with, for example, Synapse-Admin. But today I have a server with several thousands of users... I've had problems with Carpal Tunnel Syndrome before, so there's no way I'm going to spend several hours moving my mouse the same directions over and over again for hours.
Prepare
I use the Matrix API and curl (thanks for that, @daniel:// stenberg://) to do this the easy way. Well, some of you may scratch your heads when I call this the easy way... 😏
All the commands I show here, are run on the Matrix server itself. You can run them anywhere, but then you'll have to replace "localhost" for the URL of your server, of course.
First of all, you'll need an access token for an account with admin rights. If you happen to have a session open, you can simply copy it from there. If you don't, here's how to get one.curl -s -X POST http://localhost:8008/_matrix/client/r0/login \
-H "Content-Type: application/json" \
-d '{ \
"type": "m.login.password", \
"user": "@administrator:EXAMPLE.COM" , \
"password": "SECRET ADMIN PASSWORD" \
}' | \
jq '.access_token'
This will give you a string like "syt_YWRtaW5pc3RyYXRvcg_dQCZlHWPsGluyHLYyhnH_2aI2ln", provided you used the right username, password and URL. I'll use "xxxx" for better visibility.
Check the number of users
Let's verify our access by checking how many users we're talking about.curl -s -X GET http://localhost:8008/_synapse/admin/v2/users?limit=1000000&deactivated=true \
-H "Authorization: Bearer xxxx" | \
jq '.users[] | .name' | \
wc -l
The limit of 1 million is sort of necessary: you can't say "every user", but if you don't provide a limit, you'll only get the first 100.
Now that you know how many users there are in your database, let's remove them all.
Remove all users
You may be thinking, "if I remove all users, I also remove my admin account, which could complicate things". Good thinking, I ran into that exact problem, because I did my previous user removals with Synapse-Admin (you know, selecting a handful users, clicking "remove", waiting... rince and repeat) and that wouldn't remove my admin account.
But when you use the API directly, you abandon the guard rails and you can actually hurt yourself. I was lucky enough to find that there was still one other admin account after I had removed mine, so I hijacked that one to finished the job. If yours is (was!) the only active admin account, you have a problem...
With this code we list all users MINUS OUR ADMIN ACCOUNT and pass them to the next command, that actually deletes them:curl -s -X GET http://localhost:8008/_synapse/admin/v2/limit=1000000 \
-H "Authorization: Bearer xxxx" | \
jq '.users[] | .name' | \
sed '/@administrator:EXAMPLE.COM/d' | \
xargs -I % \
curl -s -X POST -H "Authorization: Bearer xxxx" \
-H "Content-Type: application/json" \
-d '{ "erase": true }' \
http://localhost:8008/_synapse/admin/v1/deactivate/% | \
tee removal.log | \
wc -l
This will take a looong time, and that's why I have the command write its output to "removal.log", so you can check what's happening.
Every successful removal prints this result:{"id_server_unbind_result":"success"}
So once no new entries like that are being added to the log file, you're done and should be left with only your admin account(s).
Give it a few days for the rest of the Matrix universe to pick these removals up, say a week, and then you can junk your server.
#Matrix #curl #API -
CW: As an administrator of several Matrix servers, every now and then I have to decommission one. You can't just power the server down, throw it away and be done with it, so let me show you how it's done.
As an administrator of several Matrix servers, every now and then I have to decommission one.
You can't just power the server down, throw it away and be done with it (really, you can't!). You'll have to remove all users first, and give those removals some time to propagate over the Matrix universe. After that, you can power the server down and junk it.
A handful of users can be removed manually with, for example, Synapse-Admin. But today I have a server with several thousands of users... I've had problems with Carpal Tunnel Syndrome before, so there's no way I'm going to spend several hours moving my mouse the same directions over and over again for hours.
Prepare
I use the Matrix API and curl (thanks for that, @daniel:// stenberg://) to do this the easy way. Well, some of you may scratch your heads when I call this the easy way... 😏
All the commands I show here, are run on the Matrix server itself. You can run them anywhere, but then you'll have to replace "localhost" for the URL of your server, of course.
First of all, you'll need an access token for an account with admin rights. If you happen to have a session open, you can simply copy it from there. If you don't, here's how to get one.curl -s -X POST http://localhost:8008/_matrix/client/r0/login \
-H "Content-Type: application/json" \
-d '{ \
"type": "m.login.password", \
"user": "@administrator:EXAMPLE.COM" , \
"password": "SECRET ADMIN PASSWORD" \
}' | \
jq '.access_token'
This will give you a string like "syt_YWRtaW5pc3RyYXRvcg_dQCZlHWPsGluyHLYyhnH_2aI2ln", provided you used the right username, password and URL. I'll use "xxxx" for better visibility.
Check the number of users
Let's verify our access by checking how many users we're talking about.curl -s -X GET http://localhost:8008/_synapse/admin/v2/users?limit=1000000&deactivated=true \
-H "Authorization: Bearer xxxx" | \
jq '.users[] | .name' | \
wc -l
The limit of 1 million is sort of necessary: you can't say "every user", but if you don't provide a limit, you'll only get the first 100.
Now that you know how many users there are in your database, let's remove them all.
Remove all users
You may be thinking, "if I remove all users, I also remove my admin account, which could complicate things". Good thinking, I ran into that exact problem, because I did my previous user removals with Synapse-Admin (you know, selecting a handful users, clicking "remove", waiting... rince and repeat) and that wouldn't remove my admin account.
But when you use the API directly, you abandon the guard rails and you can actually hurt yourself. I was lucky enough to find that there was still one other admin account after I had removed mine, so I hijacked that one to finished the job. If yours is (was!) the only active admin account, you have a problem...
With this code we list all users MINUS OUR ADMIN ACCOUNT and pass them to the next command, that actually deletes them:curl -s -X GET http://localhost:8008/_synapse/admin/v2/limit=1000000 \
-H "Authorization: Bearer xxxx" | \
jq '.users[] | .name' | \
sed '/@administrator:EXAMPLE.COM/d' | \
xargs -I % \
curl -s -X POST -H "Authorization: Bearer xxxx" \
-H "Content-Type: application/json" \
-d '{ "erase": true }' \
http://localhost:8008/_synapse/admin/v1/deactivate/% | \
tee removal.log | \
wc -l
This will take a looong time, and that's why I have the command write its output to "removal.log", so you can check what's happening.
Every successful removal prints this result:{"id_server_unbind_result":"success"}
So once no new entries like that are being added to the log file, you're done and should be left with only your admin account(s).
Give it a few days for the rest of the Matrix universe to pick these removals up, say a week, and then you can junk your server.
#Matrix #curl #API -
CW: As an administrator of several Matrix servers, every now and then I have to decommission one. You can't just power the server down, throw it away and be done with it, so let me show you how it's done.
As an administrator of several Matrix servers, every now and then I have to decommission one.
You can't just power the server down, throw it away and be done with it (really, you can't!). You'll have to remove all users first, and give those removals some time to propagate over the Matrix universe. After that, you can power the server down and junk it.
A handful of users can be removed manually with, for example, Synapse-Admin. But today I have a server with several thousands of users... I've had problems with Carpal Tunnel Syndrome before, so there's no way I'm going to spend several hours moving my mouse the same directions over and over again for hours.
Prepare
I use the Matrix API and curl (thanks for that, @daniel:// stenberg://) to do this the easy way. Well, some of you may scratch your heads when I call this the easy way... 😏
All the commands I show here, are run on the Matrix server itself. You can run them anywhere, but then you'll have to replace "localhost" for the URL of your server, of course.
First of all, you'll need an access token for an account with admin rights. If you happen to have a session open, you can simply copy it from there. If you don't, here's how to get one.curl -s -X POST http://localhost:8008/_matrix/client/r0/login \
-H "Content-Type: application/json" \
-d '{ \
"type": "m.login.password", \
"user": "@administrator:EXAMPLE.COM" , \
"password": "SECRET ADMIN PASSWORD" \
}' | \
jq '.access_token'
This will give you a string like "syt_YWRtaW5pc3RyYXRvcg_dQCZlHWPsGluyHLYyhnH_2aI2ln", provided you used the right username, password and URL. I'll use "xxxx" for better visibility.
Check the number of users
Let's verify our access by checking how many users we're talking about.curl -s -X GET http://localhost:8008/_synapse/admin/v2/users?limit=1000000&deactivated=true \
-H "Authorization: Bearer xxxx" | \
jq '.users[] | .name' | \
wc -l
The limit of 1 million is sort of necessary: you can't say "every user", but if you don't provide a limit, you'll only get the first 100.
Now that you know how many users there are in your database, let's remove them all.
Remove all users
You may be thinking, "if I remove all users, I also remove my admin account, which could complicate things". Good thinking, I ran into that exact problem, because I did my previous user removals with Synapse-Admin (you know, selecting a handful users, clicking "remove", waiting... rince and repeat) and that wouldn't remove my admin account.
But when you use the API directly, you abandon the guard rails and you can actually hurt yourself. I was lucky enough to find that there was still one other admin account after I had removed mine, so I hijacked that one to finished the job. If yours is (was!) the only active admin account, you have a problem...
With this code we list all users MINUS OUR ADMIN ACCOUNT and pass them to the next command, that actually deletes them:curl -s -X GET http://localhost:8008/_synapse/admin/v2/limit=1000000 \
-H "Authorization: Bearer xxxx" | \
jq '.users[] | .name' | \
sed '/@administrator:EXAMPLE.COM/d' | \
xargs -I % \
curl -s -X POST -H "Authorization: Bearer xxxx" \
-H "Content-Type: application/json" \
-d '{ "erase": true }' \
http://localhost:8008/_synapse/admin/v1/deactivate/% | \
tee removal.log | \
wc -l
This will take a looong time, and that's why I have the command write its output to "removal.log", so you can check what's happening.
Every successful removal prints this result:{"id_server_unbind_result":"success"}
So once no new entries like that are being added to the log file, you're done and should be left with only your admin account(s).
Give it a few days for the rest of the Matrix universe to pick these removals up, say a week, and then you can junk your server.
#Matrix #curl #API -
La linea de ferrocarril "Murcia Zaraiche - Caravaca" en todo su esplendor.
Esta linea deber volver a resurgir de nuevo. En mi partida de NIMBY Rails la tengo en marcha.
-
#TrainTrackTuesday
dimanche, j'ai profité de l'absence de circulation du fait d'un glissement de terrain sur la voie ferrée pour une balade dans le bois et sur les rails.
D'autres photos de ma balade de dimanche matin sur les rails à https://bretagne.en-photo.fr/2026/mars/index.html#45 et suivantes#photography #tunnel #rail #Bretagne #Finistere #train #pont
-
#TrainTrackTuesday
dimanche, j'ai profité de l'absence de circulation du fait d'un glissement de terrain sur la voie ferrée pour une balade dans le bois et sur les rails.
D'autres photos de ma balade de dimanche matin sur les rails à https://bretagne.en-photo.fr/2026/mars/index.html#45 et suivantes#photography #tunnel #rail #Bretagne #Finistere #train #pont
-
#TrainTrackTuesday
dimanche, j'ai profité de l'absence de circulation du fait d'un glissement de terrain sur la voie ferrée pour une balade dans le bois et sur les rails.
D'autres photos de ma balade de dimanche matin sur les rails à https://bretagne.en-photo.fr/2026/mars/index.html#45 et suivantes#photography #tunnel #rail #Bretagne #Finistere #train #pont
-
#TrainTrackTuesday
dimanche, j'ai profité de l'absence de circulation du fait d'un glissement de terrain sur la voie ferrée pour une balade dans le bois et sur les rails.
D'autres photos de ma balade de dimanche matin sur les rails à https://bretagne.en-photo.fr/2026/mars/index.html#45 et suivantes#photography #tunnel #rail #Bretagne #Finistere #train #pont
-
Iron Rails Released by CopperByte Games for the Amiga
#IronRails #Amiga #CommodoreAmiga #CopperByteGames #RetroGaming #AmigaGames #ItchIO #RetroComputing
https://theoasisbbs.com/iron-rails-released-by-copperbyte-games-for-the-amiga/?fsp_sid=6161 -
Iron Rails Released by CopperByte Games for the Amiga
#IronRails #Amiga #CommodoreAmiga #CopperByteGames #RetroGaming #AmigaGames #ItchIO #RetroComputing
https://theoasisbbs.com/iron-rails-released-by-copperbyte-games-for-the-amiga/?fsp_sid=6161 -
Iron Rails Released by CopperByte Games for the Amiga
#IronRails #Amiga #CommodoreAmiga #CopperByteGames #RetroGaming #AmigaGames #ItchIO #RetroComputing
https://theoasisbbs.com/iron-rails-released-by-copperbyte-games-for-the-amiga/?fsp_sid=6161 -
Iron Rails Released by CopperByte Games for the Amiga
#IronRails #Amiga #CommodoreAmiga #CopperByteGames #RetroGaming #AmigaGames #ItchIO #RetroComputing
https://theoasisbbs.com/iron-rails-released-by-copperbyte-games-for-the-amiga/?fsp_sid=6161 -
Iron Rails Released by CopperByte Games for the Amiga
#IronRails #Amiga #CommodoreAmiga #CopperByteGames #RetroGaming #AmigaGames #ItchIO #RetroComputing
https://theoasisbbs.com/iron-rails-released-by-copperbyte-games-for-the-amiga/?fsp_sid=6161 -
@Quasit I wouldn't build it on Mastodon. Nor would I build it from scratch and then against Mastodon, only Mastodon and nothing but Mastodon. The Fediverse is not only much more than Mastodon, but technologically much more diverse than just Mastodon.
The best way would be to build it as an add-on (a so-called "app") for (streams) or Forte. That way, you would neither have to deal with Mastodon's limitations (yes, Mastodon is very limited although this isn't apparent to those of its users who don't know anything else), nor would you have to develop Fediverse server software from scratch.
In case you don't know them:
(streams) is the unofficial community name of a very powerful but technically nameless Fediverse application whose code is in the streams repository (https://codeberg.org/streams/streams). It's essentially a Facebook-style social networking application with quite a number of extra features and the second-most recent member of a software family that dates all the way back to Friendica from 2010 (https://friendi.ca). It's a fork of a fork of three forks of a fork (of a fork?) of Hubzilla (https://hubzilla.org) which, in turn, was reworked from a fork of a fork of what's now Friendica.
And Forte (https://codeberg.org/fortified/forte) is a fork of the streams repository that's very similar to (streams) itself.
All this was originally done by one and the same developer, a professional in IT and software for close to half a century.
Here is an article I've put together with tables that compare Mastodon, Friendica, Hubzilla, (streams) and Forte: https://hub.netzgemeinde.eu/item/0a75de76-eb27-4149-b708-f20b2f79d392
Unlike Mastodon which has only got four general-purpose profile fields in addition to the profile text, both (streams) and Forte already come with the profile fields that a good dating app would need such as:- pronouns (pick one out of 3 or none at all)
- birthday (from which the age is calculated)
- six free-text location fields, even including Facebook-style "hometown" where you used to live; you can select for yourself how far you want to go into detail with revealing your location
- gender (pick one out of 14 or none at all)
- marital status (pick one out of 31 or none at all) plus who plus date since
- sexual preference (pick one out of 9 or none at all)
- a separate keyword field
- political views
- religious views
- hobbies/interests
- likes
- dislikes
- other channels/Fediverse identities
- musical interests
- books/literature
- television
- film/dance/culture/entertainment
- love/romance
- work/employment
- school/education
A dating app could easily tie into the directory and make use of these profile fields. It could use a tag of its own in the keyword field so that it only shows channels that use this app (I'm not sure if it's possible to detect which channel has which apps installed).
One big advantage for users is that they don't have to use their daily-driver channel for the dating app. On Mastodon and in most of the Fediverse, your account is both your login and your identity. On (streams) and Forte, you can have multiple fully independent identities, each with its own name, its own ID, its own profile, its own contacts, its own posts and conversations, its own settings etc. etc., all behind one and the same login. It's like having multiple Mastodon accounts behind one login. That way, users don't have to reveal to everyone who knows their official daily-driver channel that they're using this dating app.
Also, Mastodon is hard-coded to 500 characters. You literally have to soft-fork it and edit the source code to change the limit. Both (streams) and Forte are essentially unlimited in characters (their actual character limit is over 24 million).
Privacy and security are much higher on (streams) and Forte than on Mastodon, in fact, much higher than most Fediverse users can even imagine. Private messages are actually literally private. On Mastodon, a direct message only defines whom it's sent to. On (streams) and Forte, permissions come into play. The start post in a conversation defines who is allowed to see the conversation. Not only that post, but all comments as well. It's literally impossible to pull someone else into an existing private conversation by mentioning because that someone simply isn't allowed to see anything in the conversation.
So when you're chatting with a woman via PM, and she dislikes you, she can't shame or dogpile you by pulling her friends into the conversation.
On top of that, although even Friendica already had quote-posts since 2010, private messages cannot be quote-posted.
For a developer, all it takes to build this is PHP plus database know-how. Like the whole rest of the family, (streams) and Forte don't need anything more than a LAMP stack. No Ruby on Rails, no Elixir, no TypeScript or Vue.js or any other JavaScript, no .NET.
Deploying a (streams) or Forte app is easy, too: Create a public git repository for it, keep it there, and server admins can add your repository to their servers and activate your app server-side. Both (streams) and Forte are very modular and designed to be easy to expand.
Most of this would be possible with Hubzilla as well which is much bigger in terms of users and available servers. However, Hubzilla has got one disadvantage: Its directory only shows Hubzilla and (streams) channels, i.e. channels that use Hubzilla's native Zot protocol. That's because ActivityPub support on Hubzilla is provided by another app, it's optional, it's off by default, and the directory can't tie into it. On (streams), ActivityPub support is still optional, but more advanced than on Hubzilla, built into the core and on by default. And Forte doesn't support anything else than ActivityPub.
In theory, it should be possible to build such a dating app for all three.
Also, yes, in theory, channels that use such a dating app can connect to Mastodon. But Mastodon users couldn't use that dating app. Mastodon simply doesn't have any support for profile fields which it itself doesn't have. Also, Mastodon is too unsecure, and meaningful conversations are difficult if one side is limited to 500 characters. And I would hate to see this dating app bound hard to Mastodon's culture and Mastodon's unwritten rules, neither of which take the Fediverse outside of Mastodon into account.
#Long #LongPost #CWLong #CWLongPost #FediMeta #FediverseMeta #CWFediMeta #CWFediverseMeta #NotOnlyMastodon #FediverseIsNotMastodon #MastodonIsNotTheFediverse #MastodonCulture #Hubzilla #Streams #(streams) #Forte #CharacterLimit #CharacterLimits #CharacterLimitMeta #CWCharacterLimitMeta #FediDate -
@Quasit I wouldn't build it on Mastodon. Nor would I build it from scratch and then against Mastodon, only Mastodon and nothing but Mastodon. The Fediverse is not only much more than Mastodon, but technologically much more diverse than just Mastodon.
The best way would be to build it as an add-on (a so-called "app") for (streams) or Forte. That way, you would neither have to deal with Mastodon's limitations (yes, Mastodon is very limited although this isn't apparent to those of its users who don't know anything else), nor would you have to develop Fediverse server software from scratch.
In case you don't know them:
(streams) is the unofficial community name of a very powerful but technically nameless Fediverse application whose code is in the streams repository (https://codeberg.org/streams/streams). It's essentially a Facebook-style social networking application with quite a number of extra features and the second-most recent member of a software family that dates all the way back to Friendica from 2010 (https://friendi.ca). It's a fork of a fork of three forks of a fork (of a fork?) of Hubzilla (https://hubzilla.org) which, in turn, was reworked from a fork of a fork of what's now Friendica.
And Forte (https://codeberg.org/fortified/forte) is a fork of the streams repository that's very similar to (streams) itself.
All this was originally done by one and the same developer, a professional in IT and software for close to half a century.
Here is an article I've put together with tables that compare Mastodon, Friendica, Hubzilla, (streams) and Forte: https://hub.netzgemeinde.eu/item/0a75de76-eb27-4149-b708-f20b2f79d392
Unlike Mastodon which has only got four general-purpose profile fields in addition to the profile text, both (streams) and Forte already come with the profile fields that a good dating app would need such as:- pronouns (pick one out of 3 or none at all)
- birthday (from which the age is calculated)
- six free-text location fields, even including Facebook-style "hometown" where you used to live; you can select for yourself how far you want to go into detail with revealing your location
- gender (pick one out of 14 or none at all)
- marital status (pick one out of 31 or none at all) plus who plus date since
- sexual preference (pick one out of 9 or none at all)
- a separate keyword field
- political views
- religious views
- hobbies/interests
- likes
- dislikes
- other channels/Fediverse identities
- musical interests
- books/literature
- television
- film/dance/culture/entertainment
- love/romance
- work/employment
- school/education
A dating app could easily tie into the directory and make use of these profile fields. It could use a tag of its own in the keyword field so that it only shows channels that use this app (I'm not sure if it's possible to detect which channel has which apps installed).
One big advantage for users is that they don't have to use their daily-driver channel for the dating app. On Mastodon and in most of the Fediverse, your account is both your login and your identity. On (streams) and Forte, you can have multiple fully independent identities, each with its own name, its own ID, its own profile, its own contacts, its own posts and conversations, its own settings etc. etc., all behind one and the same login. It's like having multiple Mastodon accounts behind one login. That way, users don't have to reveal to everyone who knows their official daily-driver channel that they're using this dating app.
Also, Mastodon is hard-coded to 500 characters. You literally have to soft-fork it and edit the source code to change the limit. Both (streams) and Forte are essentially unlimited in characters (their actual character limit is over 24 million).
Privacy and security are much higher on (streams) and Forte than on Mastodon, in fact, much higher than most Fediverse users can even imagine. Private messages are actually literally private. On Mastodon, a direct message only defines whom it's sent to. On (streams) and Forte, permissions come into play. The start post in a conversation defines who is allowed to see the conversation. Not only that post, but all comments as well. It's literally impossible to pull someone else into an existing private conversation by mentioning because that someone simply isn't allowed to see anything in the conversation.
So when you're chatting with a woman via PM, and she dislikes you, she can't shame or dogpile you by pulling her friends into the conversation.
On top of that, although even Friendica already had quote-posts since 2010, private messages cannot be quote-posted.
For a developer, all it takes to build this is PHP plus database know-how. Like the whole rest of the family, (streams) and Forte don't need anything more than a LAMP stack. No Ruby on Rails, no Elixir, no TypeScript or Vue.js or any other JavaScript, no .NET.
Deploying a (streams) or Forte app is easy, too: Create a public git repository for it, keep it there, and server admins can add your repository to their servers and activate your app server-side. Both (streams) and Forte are very modular and designed to be easy to expand.
Most of this would be possible with Hubzilla as well which is much bigger in terms of users and available servers. However, Hubzilla has got one disadvantage: Its directory only shows Hubzilla and (streams) channels, i.e. channels that use Hubzilla's native Zot protocol. That's because ActivityPub support on Hubzilla is provided by another app, it's optional, it's off by default, and the directory can't tie into it. On (streams), ActivityPub support is still optional, but more advanced than on Hubzilla, built into the core and on by default. And Forte doesn't support anything else than ActivityPub.
In theory, it should be possible to build such a dating app for all three.
Also, yes, in theory, channels that use such a dating app can connect to Mastodon. But Mastodon users couldn't use that dating app. Mastodon simply doesn't have any support for profile fields which it itself doesn't have. Also, Mastodon is too unsecure, and meaningful conversations are difficult if one side is limited to 500 characters. And I would hate to see this dating app bound hard to Mastodon's culture and Mastodon's unwritten rules, neither of which take the Fediverse outside of Mastodon into account.
#Long #LongPost #CWLong #CWLongPost #FediMeta #FediverseMeta #CWFediMeta #CWFediverseMeta #NotOnlyMastodon #FediverseIsNotMastodon #MastodonIsNotTheFediverse #MastodonCulture #Hubzilla #Streams #(streams) #Forte #CharacterLimit #CharacterLimits #CharacterLimitMeta #CWCharacterLimitMeta #FediDate