From 4cd6710ca9c9c1ec7d7b81d678c8c8bbb1ba50fc Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 1 May 2021 12:59:33 +0100 Subject: [PATCH 01/16] Update default categories --- defaultcategories/en.xml | 794 ++++++++++++++++++++------------------- 1 file changed, 409 insertions(+), 385 deletions(-) diff --git a/defaultcategories/en.xml b/defaultcategories/en.xml index 5ad67f407..a3daa9220 100644 --- a/defaultcategories/en.xml +++ b/defaultcategories/en.xml @@ -4,579 +4,603 @@ #categories retro - retrocomputer A500 atarist commodore teletext Retromeme matariki floppy 8bit atari atari800 trs80 communication floppydisk retrocomputing C64 ansi plan9 80s microcomputing communications omm retrogaming z80 8bitdo retro atari800xl retropie amiga bbcmicro microcomputer bbsing + retrocomputer kommunalwahl 90sretro A500 CreativeCommons atarist vax retroarch commodore teletext Retromeme matariki floppy recommendation 8bit cassette atari atari800 trs80 communication floppydisk retrocomputing C64 bbs ansi plan9 80s microcomputing kommunikation vaxvms retroarcade zdfretro cassette_tapes omm retrogaming z80 8bitdo retro atari800xl retropie commodore64 cassettetapes retrogame amiga bbcmicro microcomputer bbsing commercial - Sun, 07 Mar 2021 20:25:51 UT - - - sport - billiard darts swim motorsport snooker marathon hockey bouldering diving baseball Millwall mma mammal sailing athletics nook dumpsterdiving skating skiing sport climbing football combatsports - - Sun, 07 Mar 2021 20:25:51 UT - - - events - neverforget TuesdayVibe award OONIbday waybackwednesday fridayfilm IndigenousPeoplesDay5 notifications solo throwbackthursday valentinesday adventskalender live Day deepthoughts thingaday screenshotsaturday warmingup thursdaythoughts hackathons thursdaymorning throwback animalsweatersunday TooMuchScreenTime beethoven250thbirthday valentine humanrightsday followfriday wednesdaythought afediversechristmas whydopeopledoshitlikethis wednesdaymotivation cccamp19 lovewhereyoulive PostLikeYouThinkACrabWouldSunday showerthoughts animal beethoven anarchymonday Verkiezingsfestival 100DaysToOffload 0day hackathon ff holiday ipv4flagday christmas livecoding weeknotes LINMOBlive week mothersday concert festival FridayFolklore screenshottuesday animals VerkiezingsfestivalBIJ1 kdenlive dontstarve onthisday insideoutsockday livestream BowieDay morningcrew tzag sunday weekendvibes screenshotsunday cree VerseThursday liverpool waitangiday adayinthelife day ccc InternationalCheetahDay interestingtimes sideprojectsunday birthday sixonsaturday wordoftheday christmaslights meetup FathersDay kidsthesedays - - Sun, 07 Mar 2021 20:25:51 UT - - - politics - hate TakeOurPowerBack redessociais trump Anarchy cia alwaysantifascist sabotage qtibpoc community wageslavery immigration dissent liberation laws fascism farmersrprotest techtuesday skyofmywindow techthursday aws freedomofspeech anarchist prochoice freeexpression RacialHealing fascisme humanrights crime leftists Socialism ukpol FreeKeithLamar Antifascisme copwatch capitalismkills petition BorisJohnson meteorología freedom techdirt ontologicalanarchy union abolitionnow anarchism DefundThePolice earthship repression technews meto legal polizeigewalt dannenröderwald smalltech police nzpolitics greenhousegas antifascists oilwars kommunismus rightorepair bjp ThirdRunway multi testing hierarchy election republicans opinie diversity solidarity techwear sociaalDarwinisme sky_of_my_window mybodymychoice generalstrike fuckBiden neoliberal antipolitics abolition digitalfreedom mayday again hatespeech fascists LateStageOfCapitalism stopchasseacourre ciencia smashturkishfascism afropessimism burntheprisons cyberlaw peerproduction corporations iww freeassange commons choice Riot corporatewatch wageslave uspol frontex communism RemoveThePolice makecapitalismhistory abolishpolice Immigration biometric neoliberalism NeverTrustSimone socialecology wald wroclawskierewolucjonistki MutualAid capitalism technology test prisons wealth conspiracytheories corporatecrime DirectAction communist daretocare KeirStarmer taoteching anarchismus politiikka retrotechnology politics inclusivity government HeroesResist brightgreen poc anarchisme feminist DominicCummings nzpol Bookchin ClemencyNow Inauguration2021 arran techthoughts brexit totalitarianism privatisation TyskySour Labour nonprofitindustrialcomplex death LabourLeaks freethemall green neoliberaal BAME decolonizeyourmind alternative privilege antikapitalisme legalcounsel AbolishPrisonsAbolishPolice surfaceworldblows ecofascism opentechnologyfund popularitycontest SocietalChange facialrecognition cotech corruption hypocrisy anarchy Feminism propaganda dcc endsars celebratingfreedom decolonization digitalrights feminism Lhub HightechProblems problem pentesting polizei neo democracy anarchistki Govts xp powerpolitics 18Source censorshipBook radicaltech saytheirnames witchesagainstwhitesupremacy conspiracy anarchistbookclub redandanarchistskinheads corporate radicaldemocracy PritiPatel oiseau latestagecapitalism racist cancelculture MexicanRevolution elections RussellMaroonShoatz LhubSocial methods commonspub sea white prisoners warrants policebrutality alternativeto techshit borisjohnson Anarchist press Anarchism mutuality whitehouse freedomofexpression censorship CancelCulture decolonize HanauWarKeinEinzelfall keinmenschistillegal emmet decenterwhiteness blackandwhite Biden ChineseAppBan cooperative modi antifa law chip deathtoamerica manipulation ParticipatoryCultureFoundation firetotheprisons consumer britpol financial Capitalism surveillancecapitalism leftist Revolution ukpolitics mdcommunity glenngreenwald JeremyCorbyn blacklivesmatter FreeAlabamaMovement Anarchismus mononeon rentstrike dsa lawandorder migration neoist mutualaid capital multipleexposure humanetechnology AbolishPrison solidaritynotcharity anarchists fascist righttochoice socialcoop apocalypseworld DefundSurveillanceCapitalism platformcapitalism decolonizeconservation anarchistprisoners whistleblowers polizeiproblem UniversalBasicServices fuckcapitalism speech uselection IDPol Antifa deathtofascism lesanarchistes Slavetrade met democracia consumerism ourstreets extremist freespeech kapital neorodiversiteit refugees riot BernieSanders acab ecology SurveillanceCapitalism antifascism freewestpapua hambacherwald sunnytech espressif tech - - Sun, 07 Mar 2021 20:25:51 UT - - - gafam - zuckerberg caringissharing ads apple antitrust SpringerEnteignen deletewhatsapp GoogleDown AppleSearch bankruptBezos googlesearch mycologists youtube Goggle twitterkurds chromebook headset ffs facebook interoperability amazon farcebook boycottinstagram deletewhatsappday amazonring Gafam googleplus soldering degooglisation siri Facebook LeiharbeitAbschaffen advertising monopolies adtech fuckgoogle plottertwitter microsoft dtm twitter skype azure chrome hildebrandt corporateGiant uitkeringen youtubedl degoogled Google youtubers google gis walledgarden GAFCAM dt dotcoms deleteyoutube datafarms Instagram walledgardens agistri offseting appleii fascistbook FuckGoogle degoogle fuschia appleiie deleteinstagram ungoogled ring stopgoogle earrings affordances googledown gafam inspiring killedbygoogle fuckoffgoogle deletefacebook fuckoffgoogleandco office365 turingpi instagram playstore synergistic bigtech whatsapp mytwitteranniversary deleteamazon bluesky - - Sun, 07 Mar 2021 20:25:51 UT - - - people - Melissa harold paul Zachary markdown danielle dylan scott Barbara Kenneth theresa Denise Jesse Adam justin katherine judith Karen Patricia russell juan diane Rebecca donna olivia peter William denise Betty evelyn Christina brittany Jennifer Gregory Wayne Andrychów ethan Ralph Peter americalatina jean laura betty nathan margaret Bryan Virginia Jose Rose eric james david Joshua christine Billy CapitolRiot natalie daniel Jonathan Michael susan George johnny Lauren christina Amy kevin Natalie kenneth noahkathryn Lawrence aaron gregory Amber alexa Robert Edward Patrick Rachel bruce dennis Kayla frank Diane Donna Jack Paul Janice Brenda alexis timothy vincent Alice sarah amy Daniel jeff charlotte carolyn Emma Kyle Sean emily linda Olivia Eugene Donald janet ryan stdavids RichardDWolff bryan Hannah anna doctorow Catherine Alexander Christopher bob doris Anthony Jean diana Beverly frances Sarah margaretthatcher Jordan Anna Ethan Amanda jeremy donald mark matthew julie stephanie Jerry Diana David Linda adam richard henry Isabella elizabeth steven jessica Walter jeffrey Kevin Justin grace PeterGelderloos brandon mary jamesbaldwin sharon nicholas Benjamin amanda Emily Ruth heather albert Julie nancy stephen Cannabis James Megan Raymond michelle Nancy Frances Henry andrew Jessica julia Dorothy LoganGrendel Jason Charles Danielle Brandon jose noamchomsky virginia beverly ronald Bob madison Helen MarkoBogoievski Jeff helen Sophia larry dorothy Dennis monbiot Nicholas Frank jack Stephen Janet Alexis Pamela Jacqueline Dylan roy brenda jesse Roger Jeffrey Brittany Shirley Nathan christopher Carol Susan jason Philip Logan sandra jacob rose isabella Cynthia Joan jackieweaver aldoushuxley Maria martha Randy carl kyle karen raymond alice jerry carol Victoria Steven Douglas Lisa Julia joshua jacqueline Ashley eugene Bruce Albert Austin thomas Evelyn Gary Scott kimberly lawrence jennifer Russell austin logan Laura Chris Teresa Aaron Keith brian marktwain maryanning maria Joseph Andrew Vincent Katherine Joyce lauren Ryan amber alan ralph megan Kathleen sophia Cheryl abigail cynthia john Alan Debra QuickSummary arthurgloria Christine marilyn anthony chris Elizabeth sean Louis Larry christian deborah billy Abigail joesara keith Jeremy zachary ruth Grace teresa Doris benjamin Willie george barbara Charlotte philip randy Margaret Heather Bradley Jacob shirley pamela Matthew Nicole joan judy Kelly Brian melissa Sandra joseph andrea shamelessselfplug Joe Sara robert aaronswartz Bobby emma willie william angela SachaChua samuel tyler Thomas John kroger patricia ashley bobby kelly hannah Carolyn Ann CrimsonRosella gary wayne Marilyn Deborah rms Sharon gare Mary Samuel Mark walter rebecca Madison Juan lisa cheryl janice Christian gerald Timothy roger edward bradley Gerald patrickrachel framalang Kimberly Gabriel Marie PeterHoffmann louis kathleen Arthur Gloria terry Richard jonathan Harold Roy samantha Carl chalice Eric relationships nicole Andrea Judith Terry Stephanie Johnny Angela Noah Kathryn Ronald AskVanta Michelle Theresa gabrielmarie Samantha Judy michael charles Tyler DouglasPFry kayla catherinealexander Martha debra joyce - - Sun, 07 Mar 2021 20:25:51 UT - - - activitypub - followerpower FederatedSocialMedia Fediverse activitypub activertypub pleroma losttoot Rss2Fedi PeerTube devices gofed pixelfedlabs homelab fediblock fediverso lazyfedi federation instances fedilab pixiv mastotips toot fedilabfeature mastodev pixel mastodontips catsofthefediverse mastotip wallaby friendica mastodontip hiveway mastodonart mast megapixels gardenersofmastodon askthefediverse misskey collaboraoffice BlackFedi joinmastodon siskin socialhub followers fediart blocking Pixelfed contentwarnings pixelfed labournettv fediverseplaysjackbox mapeocolaborativo fedihive fedidb block FediMemories Feditip fablab collabathon Fediseminar onlyfedi socialcg sponsorblock tusky TLSmastery contentwarning peertubers imagedescription joinpeertube feditips fedizens Mastodon following epicyon afediversechat peertubeadmin leylableibt collaboration mastomagic YearOfTheFediverse dev fediadmin mastodonhost mond pixeldev timeline socialmedia wedistribute fosstodon instanceblock softwaredevelopment mastodonmonday collaborative isolategab greenmastodon fedireads PeertubeMastodonHost AskFediverse Bookwyrm federated socialhome greenfediverse microblocks fedivers MastodonMondays fediverse imagedescriptions Fedilab mastoadmin smithereen hackerstown blabber FediverseFutures mastodon developingcountries fedi fediplay peertube adblock mastomind lab BlackMastadon lazyfediverse mobilizon lazy gemifedi - - Sun, 07 Mar 2021 20:25:51 UT - - - programming - Easer cpp digitalpreservation programming css objects Python system digitaldivide digitalisierung FrancisBacon2020 dracut gitea mixers webdev proofing gui digital release ada schutzstreifen pypi proofofwork node rustlang ocaml program DigitalSouveräneSchule request_reaction sqlite guile nim uptronics hypocritcal profiles typescript forums vscode publiccode computerscience hackers guidelines vieprivée early adventofcode cgit CommonJS scripting warn git proof ui nocode solid nodejs systemchange trevornoah zinccoop tailwindcss guix raku fedidev c sourcecode publiekecode framaforms WendyLPatrick grep django gmic zim sackthelot gitportal gitlab crusty decoder readability parrot relevance_P1Y kingparrot Leiharbeit programmer trunk haskell OpenSourceHardware Tarifvertrag esm unicode development gerrit frgmntscnr github digitalmarketsact freecodecamp openrc tuskydev threema html5 algorithms PythonJob lisp digitaldefenders forge pleaseshare HirsuteHippo resnetting fourtwenty rakudev adaptation developers libraries drivers animation freecode forgefed javascript fragment cpm code elisp commands patterns eq ECMAScriptModules html rakulang portal terminal rust lowcode request spiritbomb r dramasystem go digitalaudioworkstation esbuild golang clojurescript ruby contractpatch deceptionpatterns obsolescence_programmée computers developer racket forum bugreport mercurial python fontforge indiedev kabelfernsehen alternatives OpenSource Scheibenwischer - - Sun, 07 Mar 2021 20:25:51 UT - - - nature - hiking RedNeckedWallaby reforestation wat marsupial StormBella insect morning trees lichen badger light gecko birds nature teamcapy frogs snow sunrise hambacherforest forestfinance leopardgecko moutains coldwater inaturalist sunset forest australianwildlife capybara goodmorning forestation enlightenment natur deforestation natural birdsarentreal morningwalk insects wildlife afforestation northernlights RainforestAlliance amphibians - - Sun, 07 Mar 2021 20:25:51 UT - - - writing - blog tootfic authors poem cutupmethod pdf blogPages shortstory magazine smallstories blogging smallpoems sciencefiction writing proverbs blogs noblogo otf playwright hedgedoc microfiction interactivestorytelling westernjournal quote icanhazpdf WriteFreely storytelling goodread goodreads creativewriting horror limerick journals zineswap zines shortstories journalists journal poetry - - Sun, 07 Mar 2021 20:25:51 UT - - - gardening - BlagueDeCodeur sporespondence blockade inde mastogarden kinder independant communitygardening deno composting cabbage bundeswehr opensourceseeds onions bordeaux datenschleuder florespondence garden thyme horticulture DailyFlowers acu kinderbijslag permaculture papuamerdeka lag CompanionPlanting gardens independence flowers kale gardening plants devilslettuce fahrräder gardenersworld golden toeslagenaffaire seeds Opensourcegarden - - Sun, 07 Mar 2021 20:25:51 UT - - - hardware - plugandplay purism opennic restauration solarpower PersonalComputer cyberdeck PineCUBE tex keyboards electron screenless homebrewcomputing FarmersTractorRally pinebook modem lowtech datenschutz industrial analogcomputing TrueDelta keyboard screenprinting Pinecil pocketchip oshw ArmWorkstation hardwarehacking laptops electronics teamdatenschutz charm printmaker deck modular larp cybredeck computing laptop solarpunk recycling repairability theatrelighting lenovo fairelectronics librem MacBookProService fuse date ibm 3dprinting electro MechcanicalKeyboards hardware retrohardware pinetab openhardware raspberrypi 3dprinter barcode Quartz64 PlanetComputer jtag pinetime screens pinebookpro 3d PinebookPro 3dprint Handprint modemmanager keyboardio mechanicalkeyboard PineTalk arm ipad FireAlarms PinePower paperComputer amd openpower devopa thinkpad iot repairable raspberrypi4 print analog electronic - - Sun, 07 Mar 2021 20:25:51 UT - - - internet - linkeddata decentralised immersiveweb dotcons i2p sceptic earlyinternet spam firefox redecentralize decentral buster wikipedia rtmp dataprotection decentralization inclusiónsocial decentralize w3c dotConism internetaccess geminispace selfhosted piratenpartij maille meta torrent mailab k9mail data socialism sitejs anticolonial worldbusterssocialclub publicserviceinternet centralisation internetarchaeology WordPress darkages self saferinternetday contentmoderation distributed mydata decentralizedweb mailman router protection rne dataretention bigdata routeros selfhosting communityhosting brave icann selfsustaining hosting discourse weblate PeerToPeer dns openstandards conceptmap nojs ejabberd oauth tic hypercore CDNsAreEvil meshtastic protonmail TubEdu standards yourdataisyourdata internetfreedom gemini webui InternetCrimeFamily wlan internetBanking SmallWeb coopcloud cw internetshutdown godotengine cdn liberapay distributedcoop xmpp semanticweb identicurse socialnetwork selfie website SaferInternetDay content splinternet participation highavailability webstandards mapa mindmapping domains ntp cloudfront socialnetworks metadata disconnect Meme database proton disco cloudfirewall descentralizare icmp videocast jabber cleanuptheweb webbrowsers decentralized wiki cloudron browserextensions ssb darknet cookies Qute darkweb netcat webInstaller map Reddit server browser cloudy IPFS p2p social antisocial tiddlywiki www opendata ilovewikipedia web WebsiteStatus netshutdowns twitch im 9front theserverroom Watomatic datafree domain OpenStreetMap geminiprotocol statistics pirate datacracy filesharing rss openstreetmap ipns mozilla voicemail Nyxt yacy debloattheweb crosspost mail i2pd ipfs internetradio browsers wikidata selfpub decentralizeit ballpointpen netscape mixcloud gmail openculture letthenetwork cyberspace SwitchToXmpp messaging selfies offthegrid enxeñeríasocial cloud ddg internet moderation decentralisation metaverse fox ssbroom serverMeddling missingmaps bravesearch sneakernet NatureNeedsJustice internetarchive godot dweb kmail js mindmap dark beakerbrowser notetoself NetShutdown enigmail onlineharms dot Internet descentralizarea thepiratebay ftp internetshutdowns fixtheweb lazyweb socialweb colonial socialists ebay mozillahubs instantmessaging interoperabilitate webmention Justice4MohamudHassan - - Sun, 07 Mar 2021 20:25:51 UT - - - science - engineering math epidemiology ethnology womeninstem archeology botany STEM biodiversity linguistic anthro supercollider nextgeneration zoology climatology dna geography physics archaeologist generalstreik geology generationidentitaire stemwijzer bioengineering botanical dawkins ineigenersache holo graphTheory meterology regenerative biotech psychology biology generation gene chemistry paleontology oceanography stem nextgenerationinternet biomedical anthropology - - Sun, 07 Mar 2021 20:25:51 UT - - - photos - smartphonephotography nikon 90mm photography wildlifephotography photo photogrpahy tokyocameraclub nikond90 photos macrophotography photographie camera macropod cameras fossphotography myphoto naturephotography picture macro streetphotography photoreference pictures - - Sun, 07 Mar 2021 20:25:51 UT - - - history - musichistory heirloom monarchs holocaust history makeinghistory anarchisthistory NetworkingHistory blackhistory monarch computerhistory - - Sun, 07 Mar 2021 20:25:51 UT - - - places - lapaz luanda asunción nouakchott conakry kyiv moscow saipan gibraltar dublin KlimaGerechtigkeit catalunya dannibleibt avarua hargeisa delhi niamey chișinău freestuff colombo brasília phnompenh mbabane danni belgrade belmopan pyongyang hannover calls ulaanbaatar oranjestad Reykjavik gaborone seattle ndjamena raw singapore kingedwardpoint abidjan nuuk asshole pretoria papeete malé rhetorical robberfly zagreb gitega abudhabi flyingfishcove castries georgetown hagåtña videoFreex cassette oric borikua basseterre hamburg afrika kinshasa suva klimaatverandering valparaíso athens roseau sheffield baku charlotteamalie antananarivo domi pristina MakoYass videocalls santiago sukhumi berlin uptronicsberlin funafuti libreville puertorico ClimateChange hanoi philipsburg tehran banjul prague rawhide andorralavella daw yerevan portauprince videoprojects dakar paramaribo tifariti capetown rigaer94 tirana klima ankara ipswich managua lisbon bishkek amsterdam climatchoas videogames klimaat EastVirginia portonovo santodomingo bangkok texas bucharest kathmandu aden madrid sanjuan vienna kingston kabul damascus stockholm douglas ClassOf2015 willemstad hibernoenglish thehague panamacity RassismusTötet beirut amman newdelhi tórshavn nouméa oslo alofi gustavia paris video cockburntown ottawa classical stepanakert portofspain klimakrise class fsberlin honiara berniememe asmara florida nicosia helsinki taipei tegucigalpa tokyo tashkent larochelle vr MadeInEU sarajevo algiers KlimaKrise nairobi muscat monaco riyadh lusaka wellington bissau juba mariehamn majuro buenosaires ngerulmud dhaka berlinhateigenbedarf guatemalacity washington vatican kuwaitcity Erdmannhausen londonboaters SystemChangeNotClimateChange bern mexicocity bratislava myasstodontownhall bridgetown prince delhipolice crowsnestpass tunis manila stanley matautu copenhagen barcelona lomé videocall budapest ouagadougou mogadishu freetown victoria lora brazzaville portmoresby ashgabat kampala Klimaatalarm elaaiún vilnius ContourDrawing bloemfontein sucre london passalong marseille berniesanders pagopago bradesestate oakland vaduz addis nürnberg naypyidaw CassetteNavigation khartoum baghdad bandar moroni cuirass lehavre portvila kingstown ChrisCrawford reykjavík lofi manama accra windhoek fortworth nukualofa classic ciutatvella tbilisi canberra quito maputo cetinje adams putrajaya ramallah bogotá dodoma harare havana warsaw münster valletta localberlin ljubljana bamako kualalumpur podgorica rabat cotonou plymouth seoul neumünster Portland dushanbe bangui magnifyingglass aotearoa westisland tskhinvali palikir caracas jamestown rome munich freestuffberlin sãotomé jakarta daressalaam sansalvador seo apia essex yaren cairo jerusalem brussels kigali southtarawa beijing minsk montevideo vientiane philips maseru klimaatopwarming hamilton lorawan doha tripoli celtic portlouis lima adamstown deventer weimar abuja fuckalabamapower lilongwe nassau lobamba heathrow nyc fly montreal rawtherapee dili riga assembly lesbos monrovia nursultan Neuzulassung gab sanjosé klimaatrechtvaardigheid marigot islamabad fb malabo tallinn sahara thimphu klimanotstand yaoundé praia bujumbura washingtondc sofia skopje - - Sun, 07 Mar 2021 20:25:51 UT - - - music - musicprodution LaurieAnderson punk punkname ourbeats gas vollgasindiekrise indieweb synthesizer daftpunk indiemusic 20thcenturyjazz steamlinux streetpunk bikepunks bandcamp mymusic musicians jamendo ipod skinheadmusic rap shoegaze mp3 steam indie steampunk indieauthor nazipunksfuckoff Music EnvoieStopHashtagAu81212 thecure posthardcore vaporwave IndustrialMusicForIndustrialPeople Mixtip dubstep synthwave bootstrap oi rave freemusic nowplaying hiphop hardcore experimentalmusic spotify fedimusic musicbrainz eos90D soundcloud frankiegoestohollywood ccmusic typographie dj newwave dorkwave producing experimental musicproduction chiptune lastfm 1 funkwhale eos wp playlist retrosynth NowPlaying libremusicproduction MusicAdvent coinkydink pmbootstrap arianagrande indiecember synth music np bass techno jazz production graphics darkwave mastomusic metal polychromatic funk magnatune fediversemusic cyberpunkmusic cleantechnologies BandcampFriday mixtape - - Sun, 07 Mar 2021 20:25:51 UT - - - conferences - FOSDEM2021 debconf FOSDEM talk fossdem FreedomBoxSummit apconf2020 schmoocon penguicon2021 summit confidenceTricks minidebconf rc3worldleaks penguicon emacsconf MCH2021 ox defcon flossevent conf rC3 rC3World FOSDEM21 conference flossconf apconf rC3one smalltalk C3 config confy - - Sun, 07 Mar 2021 20:25:51 UT - - - food - vitamind cake teamviewer FoodHardship pankow margarine zwartepiet dessert salsa caviar brot theexpanse BellaSpielt cookery pietons Ôtepoti panther food cakecutting skillet teamgodzilla spiel liquor milk bolognese recipe foodporn yeast drinking plate waffle biscuit glaze omelette filet pastry wine woke Caribbeans hamburger juice Amazfish sourdough cagefree nuts gras toast broth batter foodie breadposting spiele ketchup divoc seasoning mayo soup arpanet pan voc imateapot Anglefish potatoes mayonnaise vegan dish avocado spice bakery butterflies butterfly cooking teamhuman yogurt thecandycrystalrainbowcodex crumble cider caffeine butter mastokitchen cook pottery creepypasta mastocook cobbler steak pizza soda fedikitchen aroma oil Miroil angelfish flour cream nutella pie cuisine potse freerange tartar kropotkin tea marinade mushroom entree lfi bread salad beans fresh syrup fermentation mushrooms cookie wordstoliveby curd soysauce lowcarb pudding beer baking peterkropotkin fish foodwaste wheat pot TeamFerment sauerkraut stew weltspiegel chocolate paste wok recipes expanse olive burger candy Steam spanish kitchen coffee bagel teams taste SpieleWinter2020 meat noodle raclette caramel rice eggs grill poutine demoteam lard croissant pasta vegane strawberry foods WaterDrinkers cheese oregano drink muffin LowRefresh foie sauce foodanddrink soy growyourfood vore pandemie cocoa sandwich mousse chili redfish - - Sun, 07 Mar 2021 20:25:51 UT - - - farming - johndeere - - Sun, 07 Mar 2021 20:25:51 UT - - - countries - romania burma lithuania solomon chile Instanz maui fiji tajikistan benin paraguay eeuu icelandtrip senegal ukraine italy brunei nicaragua guyana Pflanzenbestimmung euphoria zambia iceland morocco rojava netherlands swaziland bosnian suriname winningatlife elsalvador russia samoa asl european czech belarus hayabusa2 kyrgyzstan uk abuse translation sanmarino catalonia panama africa japan buyused venezuela gambia freeNukem kuwait barbados papua greece switzerland uae mau nigeria usa angola honduras djibouti laos sierraleone nonprofit britain cambodia ych vietnam neofeud zealios seychelles marshall kazakhstan trailrunning urk estonia tonga stlucia burundi bangladesh egypt mali congo us jordan speedrun grenada israel psychic algeria ghana bosnia translations russian eritrea bhutan hungary Störungsverbot saudi slovenia tig mauikit czechosvlovakia bahamas australia kiribati togo koreanorth poland Überbevölkerung malawi capeverde armenia american hautrauswasgeht bahrain mozambique americanpinemarten beleuchtung southsudan Martesamericana syria micronesia maldives iran indigenous sweden bijîberxwedanarojava ethiopia cuba liberia canada burkina somalia Chile scotland russiaToday vaticancity easttimor austria turkey yemen Bolivia denmark USBased madagascar finland philippines ivorycoast haiti ecuador Portugal azerbaijan gasuk spain albania afghanistan europe mauritania dominica ökonomisierung thailand belize westpapuauprising nerdlife macedonia montenegro thenetherlands qatar mongolia costarica boatingeurope birdsofkenya latvia uzbekistan kabelaufklärung ireland iraq malaysia mexico mauritius dezentralisierung oman chad nz de georgia zimbabwe france serbia lesotho oddmuse tunisia argentina czechia cameroon namibia sudan indonesia colombia worldwildlifeday kryptowährung tuvalu britainology beckychambers turkmenistan tanzania germany neuhier norway comoros auteursrecht guatemala Thailand kosovo andorra wales indiastrikes servus pakistan belgium china antigua life koreasouth newzealand visiticeland einzelfall rwanda luxembourg libya indywales italyisntreal nauru moldova bad eastindiacompany stigmergic palau taiwan kenya trinidad eu botswana fossaudio CuriosidadesVariadas jamaica vanuatu cyprus aminus3 malta Icelandic niger s3 westpapua busse unitedstates myanmar saintvincent guinea nepal peru uganda uruguay india lebanon neurodiversity southafrica croatia europeanunion bolivia chinese dominican srilanka bulgaria slovakia speedrunning gabon psychedelicart stkitts liechtenstein neofeudalism brazil shutdowncanada - - Sun, 07 Mar 2021 20:25:51 UT - - - software - borgbackup app freedombox windows libre nginx postscript freebsd Framasoft invidious drm publicdomain ilovefreesoftware kubernetes nodrm copyleft fossmendations freedoom jami FuckOffZoom quicksy whiteboard free docker freesoftware gimp backups foss matrix dinosaur designjustice thefreethoughtproject filesystems nextcloud translate wechat notmatrix Mosstodon HappyLight openscad uidesign TabOrder searx ikiwiki Linux FreeSoftware rocketchat thanksfreesw outreachy synapse API lyft photoshop nitter virtualbox discord opensource diaspora yunohost oss chickadee littlebigdetails cabal conferencing libreboot mycroft accessibility devops owncast emacs freiesoftware fluffychat writefreely videoconferencing bigbluebutton email chatapps HappyNewYear floss plugins libresoftware softwareengineering mosstodon expandocat deltachat application uifail FOSS GNOMECircle bittorrent fossils penpot vlc zoom tiling FriendofGNOME usability opendesign obnam snap ProprietarySoftwareProblems pandoc blackcappedchickadee cryptpad software libretranslate OwnStream upstream slack Hummingbard Element zrythm gnu CTZN mumble grsync freecad drmfree telegram containers tails blockchain irssi mcclim iso mutt design gameoftrees freetool backup rotonde freetube GNU skydroid thunderbird sysadmin parler apps chat licensing inclusivedesign defectivebydesign metager screenreaders sysadmins ZeroCool LINMOBapps obsproject softwareheritage profanity Tankklappe doomemacs ffmpeg fossandcrafts telesoftware love reboot opensourcegardens switchingsoftware OSM freesw agpl distribute GNOME strafmaatschappij distributedledger mattermost principiadiscordia rocket ghostscript win10 Zoom elemental libreops element inclusive chatty softwareGripe nativeApp MatrixEffect jitsi wordpress SwitchToJami mongodb ux rsync libreoffice crossstitch dino plugin xwiki openoffice container discordia softwaredesign ledger sounddesign glimpse - - Sun, 07 Mar 2021 20:25:51 UT - - - cycling - bicycle cycling bike motorbike thingsonbikes Snowbike cyclist - - Sun, 07 Mar 2021 20:25:51 UT - - - phones - mobileapp fairphone3 téléphone mobian pine fdroid plasmamobile android smartphonepic ubportsqanda linuxmobile sailfish phones fennecfdroid Mobian osmf smartphone ios sms4you smartphones iOS14 keto pinemarten linuxphones openmoko mobilelinux freeyourandroid QWERTYphones sailfishos siskinim monal osmocom Smartphones lineageos molly androiddev plasma phosh BriarProject librem5 ubportsinstaller osm linuxphone pinephone Teracube PinePhone mobile pinephones sms pine64 fairphone ubuntutouch linphone Android linux ubports gnomeonmobile osmand vodafone linuxonmobile iphones postmarketos iOS microg grapheneos phone mobileKüfA - - Sun, 07 Mar 2021 20:25:51 UT - - - security - signalboost repair encrypt letsencrypt messengers BrowserHistory FlexibilizaciónResponsable autoritäreretatismus omemo dataleak messenger password keepassxc cryptography cybersecuritynews solarwinds communityalgorithmictrust infosec gchq wireless repairing IHaveSomethingToHide fotografie passwords IronySec cryptowars supplychainattacks UseAMaskUseTor cyberattack security tor comb e2e bruceschneier vpn itsec openssh openssl cryptoart spyware e2ee backdoor ed25519 torproject cryptomeanscryptography encryption informationsecurity ssh misshaialert cybersec encryptionsist restore FormFactors crypto theObservatory giftofencryption signalapp onionshare onion malware switchtosignal corydoctorow righttorepair cryptographyisoverparty opsec keepass TastySecurity torsocks nsa protonvpn trustissues yubikey nitrokey encrypted openpgp castor9 prismbreak gpgtools gpg fotopiastory equatorial cybersecurity Tor CryptoWars signal noscript trust drugs cryptoparty wire itsecurity cryptocurrency foto pgp cryptomator signalmessenger openvpn datasecurity autorotate regulators leak drugstore encryptiost libresignal securitynow storage tracking cloudflare - - Sun, 07 Mar 2021 20:25:51 UT - - - pandemic - covid19 corona psmeandmywholefamilycaughtcovidfromwork Coronavirus CoronaWarnApp facemasks vaccines vaccine JournalistsSpeakUpForAssange pandemic sayhername internationalproletarianrevolution covidville contacttracing tier4 covid coronavirus masks COVIDrelief virus Lockdown rna codid19 COVID19 YesWeWork ContactTracing COVID coronamaatregelen - - Sun, 07 Mar 2021 20:25:51 UT - - - astronomy - telescope mercury pluto planets galaxy venus mars amateurastronomy uranus nebula astronomy neptune space jupiter blackhole asteroid BackYardAstronomy moon observatory saturn milkyway - - Sun, 07 Mar 2021 20:25:51 UT - - - news - report news flash Wikileaks newsletter newsflash rt bbc goodnews doubledownnews reuters theguardian newsboat journalism SkyNews - - Sun, 07 Mar 2021 20:25:51 UT - - - cats - Cat dailycatpic dxp DailyCatVid katze kotorico kot CatsOfMastodon Leopard catbellies LapCats qualitätskatzen - - Sun, 07 Mar 2021 20:25:51 UT - - - employment - InterviewQuestions jechercheunjob mywork employees hiring ProgrammingJob reproductivework workinprogress bullshitjobs workplace antiwork kreaturworks worklog job DjangoJob teamwork framework hire hirefedi workshop carework nowhiring obs obsolescence work hertfordshire flossjobs jobs sexworker - - Sun, 07 Mar 2021 20:25:51 UT - - - radio - cbradio worldradioday hamr why tootlabradio pouetradio dx macintosh amateurradio radiohost radiokapital localization vantaradio ca radio healthcare listening hamradio FreeAllPoliticalPrisoners card10 fastapi radiobroadcasting radiosurvivor Poecileatricapillus radioshow local radio3 noshame osh audycja hackerpublicradio kosher audycjaradiowa california nowlistening listeningtonow radiobroadcast mastoradio spazradio anonradio kolektywneradio io api - - Sun, 07 Mar 2021 20:25:51 UT - - - indymedia - hs2 visionontv geek tredtionalmedia degeek globleIMC indymediaback pga indymedia networking stupid hs2IMC indymediaIMC network networkmonitoring roadsIMC stupidindivialisam roadstonowhere lifecult omn tv roadstonowhereIMC UKIMC fluffy 4opens openmedianetwork - - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT economics - workercoop cooperatives accounting bank bitcoin noplanetb theWorkshop feministeconomics WealthConcentration valueflows coops valuesovereignty funding platformcoop usebitcoin consommation workercoops economics value business platformcooperatives exoplanets shopping ethicalfunding displacement poplar shop plaintextaccounting crowdfund fairtrade RIPpla bankingCartel rope Bitcoin startups HenryGeorge plant economíasolidaria disablitycrowdfund crowdfunding limitstogrowth companies sharingiscaring techcoops disability micropatronage lgbtcrowdfund monetize smallbusiness intellectualproperty pla kommerzialisierung GitPay gdp deplatforming coop smallbusinesses europeancentralbank whyBitcoin infoshop grow growth limits fuckfoodbanks values banks planetary plannedObsolence planet worldbank + Europe workercoop cooperatives accounting bank bitcoin noplanetb feministeconomics WealthConcentration valueflows coops holochain valuesovereignty funding platformcoop pico usebitcoin shitcoin consommation workercoops economics value business platformcooperatives exoplanets shopping displacement economic poplar shop companyculture plaintextaccounting sovereignty crowdfund oops fairtrade RIPpla bankingCartel rope Bitcoin startups radicalcooperation HenryGeorge plant plausible economíasolidaria disablitycrowdfund crowdfunding limitstogrowth ponzi companies theygrowupfast hermannplatz sharingiscaring techcoops plastikfrei meetcoop disability micropatronage lgbtcrowdfund mehrplatzfürsrad monetize ua cryptocurrencies degrowth a2pico smallbusiness deliveroo intellectualproperty pla kommerzialisierung GitPay Fedigrowth gdp deplatforming coop smallbusinesses europeancentralbank whyBitcoin cryptocurrency infoshop grow growth limits fuckfoodbanks values banks planetary plannedObsolence planet worldbank - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT + + + sport + billiard darts swim motorsport snooker locksport trailrunning marathon hockey bouldering diving baseball Millwall mma mammal sailing athletics nook dumpsterdiving sportsball skating skiing sport climbing football combatsports + + Sat, 01 May 2021 11:58:46 UT + + + events + neverforget TuesdayVibe award daffodilday OONIbday waybackwednesday thursdayvibes fridayfilm sun IndigenousPeoplesDay5 notifications solo throwbackthursday valentinesday adventskalender live Day deepthoughts thingaday screenshotsaturday warmingup thursdaythoughts fridays hackathons thursdaymorning Gesundheitskrise throwback RomaDay assweek animalsweatersunday TooMuchScreenTime beethoven250thbirthday valentine humanrightsday followfriday wednesdaythought afediversechristmas whydopeopledoshitlikethis festivals wednesdaymotivation early MayDay2021 IllustrationDay cccamp19 coding lovewhereyoulive screenshot PostLikeYouThinkACrabWouldSunday showerthoughts BIJ1 worldpenguinday animal ScreenshotSaturday beethoven anarchymonday Verkiezingsfestival FreeAssangeYesterday 100DaysToOffload hackathon ff holiday LURKbirthday punday ipv4flagday christmas livecoding weeknotes LINMOBlive week FlashFictionFriday mothersday koningsdag concert festival FridayFolklore screenshottuesday animals VerkiezingsfestivalBIJ1 fujifilmxt2 kdenlive dontstarve onthisday GlobalMayDay2021 insideoutsockday livestream whiskerswednesday BowieDay morningcrew theskytoday InternationalAsexualityDay tzag TinyTuesday FridaysForFuture sunday Koning weekendvibes screenshotsunday showerthought koningshuis cree VerseThursday liverpool waitangiday adayinthelife goodmorning Caturday day InternationalCheetahDay flatfuckfriday RabbitRoadTrip2021 interestingtimes sideprojectsunday birthday sixonsaturday supdate StPatricksDay2021 koningsdag2021 wordoftheday christmaslights nationallibraryweek meetup FathersDay kidsthesedays + + Sat, 01 May 2021 11:58:46 UT + + + politics + hate conspiracytheory TakeOurPowerBack redessociais trump Anarchy cia socialjustice neoliberalisme workerowned alwaysantifascist sabotage qtibpoc VivotecniaCrueldadAnimal community systemicracism wageslavery immigration dissent liberation laws fascism farmersrprotest techtuesday skyofmywindow techthursday aws freedomofspeech anarchist prochoice freeexpression anticapitalist RacialHealing fascisme humanrights Anarchisme crime leftists Socialism ukpol FreeKeithLamar Antifascisme copwatch capitalismkills petition BorisJohnson meteorología independant freedom techtalk bikesforrefugees techdirt ontologicalanarchy techsit union abolitionnow anarchism DefundThePolice earthship repression legaltech technews Jurastil meto legal meeting polizeigewalt dannenröderwald smalltech police nzpolitics greenhousegas antifascists oilwars kommunismus censored rightorepair control bjp ThirdRunway multi seaslug maidsafe testing hierarchy chehalisrivermutualaidnetwork election republicans opinie diversity solidarity techwear communitycontrol hypocrits slavery sociaalDarwinisme metoo refugeeswelcome Coronariots seashepherd sky_of_my_window mybodymychoice generalstrike fuckBiden call2power neoliberal antipolitics charity abolition digitalfreedom transrightsarehumanrights ScottishElections2021 mayday unionyes again hatespeech fascists LateStageOfCapitalism earth stopchasseacourre solawi ciencia smashturkishfascism afropessimism antivax Electricians burntheprisons qt trumpism cyberlaw bossnapping peerproduction corporations iww pushbacksareillegal til labor commons choice feelthefreedom Riot corporatewatch postcapitalism smalltechnology wageslave uspol frontex communism mutualaidpdx RemoveThePolice makecapitalismhistory abolishpolice nationalisme oist Immigration competition biometric neoliberalism NeverTrustSimone socialecology wald whistleblower wroclawskierewolucjonistki MutualAid capitalism technology test prisons feministhackmeetings wealth supremecourt conspiracytheories corporatecrime DirectAction communist daretocare KeirStarmer NoMoreEmptyPromises censor helmet refugeesgr taoteching technopolice anarchismus politiikka kapitalisme retrotechnology housing decriminalization politics WarCommentary inclusivity gravimetry publicknowledge government neocities HeroesResist greendatacenter SocialDarwinism brightgreen poc anarchisme wayfire feminist DominicCummings nzpol TyskySour: Bookchin informationtechnology ClemencyNow Inauguration2021 arran Revolutionary techthoughts brexit tw totalitarianism privatisation TyskySour Labour nonprofitindustrialcomplex death LabourLeaks riots freethemall bolsonarogenocida green SocialJustice neoliberaal corporateStateTotalitarianism BAME decolonizeyourmind alternative privilege antikapitalisme firejail legalcounsel AbolishPrisonsAbolishPolice despotism earthovershootday palantir DecentraliseThePlanet anti surfaceworldblows ecofascism opentechnologyfund popularitycontest pdxmutualaid LhubTV SocietalChange facialrecognition cotech corruption florespondece hypocrisy anarchy fire colonization Feminism propaganda dcc greenit endsars celebratingfreedom Antillia corporateState decolonization pc digitalrights feminism freepress Lhub HightechProblems farm problem collaboration pentesting polizei neo democracy anarchistki Govts BelarusProtests xp powerpolitics 18Source hungerstrike censorshipBook radicaltech saytheirnames witchesagainstwhitesupremacy gulag digitalmarketsact socialist conspiracy anarchistbookclub redandanarchistskinheads hostileenvironment corporate osint radicaldemocracy PritiPatel oiseau surveillance latestagecapitalism bos racist cancelculture dec MexicanRevolution elections greatgreenwall RussellMaroonShoatz LhubSocial methods Flatseal commonspub sea white governance prisoners warrants policebrutality techshit earthday borisjohnson Anarchist deepspeech press routerfreedom Anarchism mutuality whitehouse haltandcatchfire freedomofexpression censorship CancelCulture decolonize HanauWarKeinEinzelfall druglawreform keinmenschistillegal emmet fascisten decenterwhiteness blackandwhite Biden ChineseAppBan cooperative trespass modi kdecommunity antifa law chip deathtoamerica manipulation ParticipatoryCultureFoundation firetotheprisons consumer PlanetarySocial britpol financial gravimetrie Capitalism surveillancecapitalism leftist Revolution ukpolitics mdcommunity glenngreenwald JeremyCorbyn blacklivesmatter freedomofthepress academicfreedom FreeAlabamaMovement Anarchismus strike mononeon rentstrike evergreen otd dsa informationstechnik lawandorder migration power oiseaux neoist capitalismenumérique mutualaid capital cymru multipleexposure humanetechnology AbolishPrison solidaritynotcharity anarchists fascist righttochoice socialcoop vim apocalypseworld DefundSurveillanceCapitalism feministserver platformcapitalism decolonizeconservation anarchistprisoners whistleblowers polizeiproblem notallmen UniversalBasicServices fuckcapitalism speech uselection IDPol Antifa deathtofascism lesanarchistes Slavetrade met democracia antitrespass drugtesting consumerism greenwashing ourstreets reform MeToo extremist freespeech anticonsumerism kapital neorodiversiteit refugees riot BernieSanders acab ecology yesminister antifascist SurveillanceCapitalism antifascism GlobalCapitalism whitepaper pdx freewestpapua eris hambacherwald powstaniewgetciewarszawskim sunnytech expression feudalism espressif tech + + Sat, 01 May 2021 11:58:46 UT + + + gafam + zuckerberg caringissharing ads apple antitrust SpringerEnteignen deletewhatsapp GoogleDown AppleSearch Floc bankruptBezos googlesearch mycologists bringBunysBack youtube Goggle twitterkurds chromebook fuckfacebook headset ffs AmazonMeansCops facebook 100heads amazon googlevoracle dystopia microsoftgithub farcebook myco boycottinstagram FlocOff deletewhatsappday amazonring Gafam googleplus soldering GoogleForms haggis degooglisation linkedin siri Facebook LeiharbeitAbschaffen advertising monopolies googleanalytics adtech fuckgoogle plottertwitter microsoft deletechrome dtm HeadscarfBan twitter skype azure chrome googledoodles hildebrandt corporateGiant uitkeringen FlocOffGoogle sidewalk nogafam youtubedl degoogled Google youtubers google stemverklaring gis walledgarden GAFCAM dt GooglevsOracle dotcoms deleteyoutube datafarms Instagram walledgardens agistri appleevent offseting appleii fascistbook FuckGoogle degoogle boringdystopia fuschia appleiie deleteinstagram ungoogled ring stopgoogle affordances googledown gafam inspiring killedbygoogle fuckoffgoogle deletefacebook gradschool GoogleIsBad fuckoffgoogleandco office365 lordoftherings turingpi instagram FlocBloc playstore synergistic bigtech boycottamazon whatsapp mytwitteranniversary deleteamazon bluesky + + Sat, 01 May 2021 11:58:46 UT + + + people + Melissa harold paul Zachary markdown JusticiaParaVictoria danielle dylan scott Barbara Kenneth theresa Denise FrankLeech Jesse Adam justin elinorostrom katherine judith Karen Patricia russell Metalang99 juan diane Rebecca donna olivia peter troy William denise Betty evelyn Christina brittany Jennifer Gregory Wayne Andrychów ethan Ralph Peter ecc americalatina jacobites jean laura betty nathan margaret alexanderlukashenko Bryan Virginia Jose Rose eric james david Joshua christine haaland Billy CapitolRiot natalie daniel Jonathan Michael susan George johnny bookmark Lauren christina Amy kevin Natalie kenneth noahkathryn Lawrence aaron gregory Amber alexa Robert Edward Patrick Rachel willemalexander bruce Forms dennis LegalCannabis Kayla frank Diane Donna Jack Paul Janice Brenda alexis timothy vincent Alice sarah amy Daniel jeff charlotte carolyn Emma Kyle Sean emily linda Olivia Eugene Donald janet ryan stdavids RichardDWolff bryan Hannah anna doctorow Catherine Alexander Christopher bob doris Anthony Jean diana Beverly frances Sarah margaretthatcher Jordan Anna Ethan Amanda jeremy donald mark matthew julie stephanie Jerry Diana David Linda adam richard henry RoyalFamily Isabella elizabeth steven jessica Walter jeffrey Kevin Justin grace PeterGelderloos brandon mary jamesbaldwin sharon nicholas Benjamin GeorgeFloyd amanda Emily Ruth heather stephenlawrence albert julianassange Julie nancy stephen Cannabis James Megan Raymond eugenetica michelle Nancy Frances Henry andrew Jessica julia marketing Dorothy LoganGrendel Jason Charles JonathanMorris Danielle Brandon jose noamchomsky virginia beverly obituary ronald Bob madison Helen MarkoBogoievski Jeff helen Sophia larry dorothy Dennis monbiot Nicholas Frank jack Stephen Janet ScottRosenberg Alexis Pamela Jacqueline Dylan roy brenda jesse Roger Jeffrey Brittany Shirley putkevinback Nathan christopher Carol Susan jason Philip Logan sandra jacob rose isabella Cynthia Joan jackieweaver aldoushuxley Maria martha Randy SarahEverard carl kyle karen raymond alice jerry carol RussellBrown Victoria Steven Douglas Lisa Julia joshua jacqueline Ashley assange eugene Bruce Albert Austin thomas Evelyn Gary Scott kimberly lawrence jennifer Russell austin logan Laura Chris Teresa Aaron Keith brian marktwain maryanning LamySafari maria Joseph Andrew Vincent Katherine Joyce lauren Ryan amber davidgraeber alan ralph princephilip megan Kathleen sophia Cheryl abigail cynthia john richardstallman Alan Debra QuickSummary arthurgloria mariadb Christine marilyn anthony chris Elizabeth sean Louis Larry christian deborah billy Abigail joesara AndreaBeste keith Jeremy markkennedy zachary ruth Grace teresa Doris benjamin Willie george barbara scottish Charlotte philip DaveCunliffe randy Margaret Heather Bradley Jacob shirley pamela Matthew Nicole joan judy Kelly savannah Brian melissa Sandra stallman markstone joseph andrea shamelessselfplug Joe Sara robert aaronswartz Bobby emma willie william angela SachaChua samuel Postmarketos tyler Thomas John kroger patricia ashley bobby roses kelly fuckamerica ThomasCahill hannah Carolyn Ann CrimsonRosella gary wayne Marilyn Deborah rms Sharon gare Mary Samuel BreonnaTaylor Mark walter rebecca helendixon Madison Juan lisa cheryl janice Christian gerald Timothy roger edward bradley Gerald patrickrachel framalang Kimberly Gabriel Marie EmmaFerris PeterHoffmann louis kathleen Arthur Gloria terry royals freejeremy Richard jonathan Harold JuliaKitten Roy samantha Carl chalice Eric relationships visuallyimpaired nicole Andrea Judith Terry Stephanie Johnny Angela Noah Kathryn Ronald AskVanta Michelle Theresa gabrielmarie Samantha Judy michael charles Tyler amaryllis DouglasPFry kayla catherinealexander Martha debra JohnMichaelGreer joyce + + Sat, 01 May 2021 11:58:46 UT + + + activitypub + followerpower FederatedSocialMedia Fediverse kazarma activitypub activertypub tootfic pleroma losttoot Rss2Fedi PeerTube devices gofed getfedihired collaborate pixelfedlabs hometown homelab fediblock fediverso lazyfedi federation instances fedilab Wallabag blocks pixiv mastotips toot fedilabfeature mastodev fediversetv pixel mastodontips catsofthefediverse mastotip wallaby MastoDev friendica mastodontip hiveway mastodonart mast Mosstodon megapixels Adblocker DeveloperExperience askthefediverse misskey collaboraoffice activitypub_conf BlackFedi joinmastodon siskin socialhub followers fediart ublockorigin blocking Metatext SocialMediaReimagined Pixelfed contentwarnings pixelfed labournettv fediverseplaysjackbox mapeocolaborativo fedihive greeninstances fedidb block FediMemories Feditip devs fablab fediverseparty collabathon Dev Fediseminar onlyfedi socialcg teamtoot sponsorblock tusky labour contentwarning peertubers imagedescription joinpeertube feditips tootcat fedizens Mastodon following epicyon afediversechat peertubeadmin leylableibt fediversefleamarket mastomagic YearOfTheFediverse dev mastodob fediadmin pleaseboost mastodonhost mond pixeldev timeline socialmedia tips wedistribute fosstodon instanceblock softwaredevelopment freetoot mastodonmonday fedihelp fediWhen collaborative isolategab greenmastodon fedireads networkTimeline PeertubeMastodonHost boost AskFediverse Bookwyrm federated socialhome greenfediverse microblocks collabora fedivers MastodonMondays fediverse imagedescriptions mastobikes gbadev lemmy Fedilab bunsenlabs mastoadmin smithereen hackerstown uadblock blabber FediverseFutures latenighttoots mastodon developingcountries PixelfedDev fedi fediversefriday fediplay widevine peertube fieldlabs mastomind lab BlackMastadon fedeproxy lazyfediverse mobilizon lazy gemifedi + + Sat, 01 May 2021 11:58:46 UT + + + internet + datasette linkeddata selfsufficiency decentralised immersiveweb pep dotcons i2p sceptic earlyinternet Clubhouse spam firefox redecentralize NYCMesh decentral wikipedia rtmp dataprotection decentralization inclusiónsocial decentralize w3c dotConism DutchPolitics internetaccess agnostic geminispace selfhosted piratenpartij DarkPatternsFTC metafilter maille meta torrent mailab geocaching MollyBrown mailfence k9mail nylasmail data socialism basemap sitejs anticolonial VerkehrsswendeJetzt worldbusterssocialclub publicserviceinternet networks online openddata centralisation internetarchaeology WordPress darkages self saferinternetday contentmoderation distributed OperationPanopticon mydata webhosting decentralizedweb mailman natto p2pleft socialdistancing router protection rne dataretention speedtest bigdata routeros greenhosting selfhosting forkawesome communityhosting CriminalJusticeBill brave icann selfsustaining hosting mailart discourse weblate PeerToPeer wikis dns stripe service openstandards nojs ejabberd oauth Anticon tic foxes hypercore CDNsAreEvil meshtastic protonmail TubEdu standards yourdataisyourdata internetfreedom onlineWhiteboard gemini antarctic zeit webui InternetCrimeFamily wlan boilemMashEmStickEmInAStew internetBanking Nature SmallWeb fedwiki ircd coopcloud cw internetshutdown democratic datadetox clearnet cdn liberapay brahmaputra distributedcoop xmpp semanticweb identicurse socialnetwork Disarchive selfie colonialism website SaferInternetDay content splinternet participation highavailability webstandards mapa groenlinks domains ntp centralized cloudfront socialnetworks metadata wikileaks disconnect Meme database socialanxiety proton disco web3 cloudfirewall TLSmastery descentralizare icmp videocast governement jabber cleanuptheweb webbrowsers webhook communications decentralized userdata wiki cloudron bsi browserextensions ssb darknet cookies Qute darkweb netcat webInstaller map Reddit archiv server browser cloudy IPFS p2p social antisocial tiddlywiki www missioncritical corne fortinet opendata ilovewikipedia web WebsiteStatus netshutdowns alttext twitch im darkmode 9front decentralise att jabberspam theserverroom Watomatic datafree domain OpenStreetMap closedweb geminiprotocol statistics BurnermailIO irc pirate plaintext datacracy filesharing rss openstreetmap ipns mozilla twitchbannedrevision voicemail mapbox Nyxt legacyInternet yacy webrtc databases symbiotic debloattheweb crosspost jmap mail i2pd ipfs internetradio bravenewworld browsers wikidata selfpub decentralizeit ballpointpen puredata netscape mixcloud DecolonizeTheInternet gmail openculture letthenetwork cyberspace SwitchToXmpp messaging selfies offthegrid enxeñeríasocial cloud ddg snailmail cleanup internet moderation decentralisation webinar metaverse socialcooling Seattle fox ssbroom pihole serverMeddling missingmaps bravesearch sneakernet NatureNeedsJustice Nextcloud internetarchive dataintegration dweb kmail js metatext adblock dark captcha beakerbrowser openweb NetShutdown enigmail libervia onlineharms gooddata mailinglist kernelupgrade dot Internet descentralizarea thepiratebay internetshutdowns fixtheweb lazyweb atom socialweb colonial firewall Politics socialists ebay mozillahubs instantmessaging publicservice interoperabilitate SolidProject webmention Justice4MohamudHassan cloudflare + + Sat, 01 May 2021 11:58:46 UT + + + programming + Easer cpp digitalpreservation programming css rubyonrails objects Python system digitaldivide digitalisierung FrancisBacon2020 dracut gitea mixers webdev proofing developerexperience gui digital release ada schutzstreifen pypi workaround proofofwork node websocket proofofstake ecosystem rustlang ocaml program DigitalSouveräneSchule request_reaction sqlite guile nim uptronics hypocritcal profiles DeutschlandDigitalSicherBSI typescript forums vscode gitsyncmurder musicforhackers publiccode computerscience hackers guidelines vieprivée adventofcode cgit solidarność CommonJS scripting warn digitalesouveränität DevelopmentBlog anime git proof sourcehut ui nocode solid nodejs systemchange trevornoah zinccoop tailwindcss terminalporn guix raku fedidev c script sourcecode publiekecode framaforms WendyLPatrick DigitalAutonomy grep django gmic zim sackthelot gitportal gitlab crusty decoder readability parrot relevance_P1Y Verkada react kingparrot Leiharbeit programmer trunk haskell OpenSourceHardware CodedBias codelyoko workstation guixhome Tarifvertrag esm penguin unicode development ursulakleguin gerrit frgmntscnr Fagradalsfjall github freecodecamp openrc tuskydev threema html5 algorithms PythonJob lisp digitaldefenders codeberg souveränität forge ursulaleguin pleaseshare HirsuteHippo resnetting frontenddevelopment animatedgif fourtwenty rakudev adaptation developers bug fortran libraries drivers animation freecode forgefed javascript fragment cpm code elisp JardínOpenSource commands patterns eq ECMAScriptModules html vintagecomputers rakulang portal terminal c99 SemillasOpenSource rust programminghumor lowcode request spiritbomb r dramasystem go forges digitalaudioworkstation esbuild golang clojurescript vintage ruby releaseday rustc contractpatch deceptionpatterns obsolescence_programmée computers developer darkpatterns racket sourceforge forum digitalprivacy bugreport mercurial openappecosystem python fontforge indiedev kabelfernsehen OpenSource Scheibenwischer + + Sat, 01 May 2021 11:58:46 UT + + + art + cherrytree oilpaint arttips mastoartist paperart activism CreativeToots theWorkshop Linke subresourceintegrity glitchart Art water ocart resource urban article penandink webcomics CommissionsOpen glassart martialarts watercolours artalley artvsartist2020 circulareconomy abstract artreference commission Earthquakes poe nomadbsd coloringpage dccomics inkscape blink artificalintelligence draw circuitsculpture ttip watercolor proceduralart resources poetesss memes ghibligif subpoena autisticartist barrigòtic art elinks sona animalart krita FreeColouringPage anthroart urbanart sigh queerart deviantart CircusInPlace communityresources pastel fantasyart drawings garten 20thcenturyillustration grafana daria artdeco adultcolouring source collective openstreeetmap cryptoart fantasy collage jordanlynngribbleart linksunten pro links CodeZwart thinkabout fanfic articles PartyPooperPost harmreductionart adhdmeme MastoArtHeader openra demoscene wallpaper generative political agriculture streetart coverart fountainpen stickers partners watercolour economy freeculture fiberart jet labyrinth edu MastoArt particl urbansketchers ParticlV3 creativetoots culture ganart opencl fiberarts polArt ink painting Leitartikel marten opencoop digitalart comic flyingonthewater sartre artwork mandala artificialintelligence b3d politicalcartoon blackart makingcomics glitch politicalprisoner wallpapers railway riso xkcd supportartists drawtober startinblox comics intelligence linkinbio mastoart urbanterror illustration artopencall Hinkley gnuimagemanipulationprogram os studioghibli 2MinuteSketch wireart cartoon oc AccidentalGraffiti eink OriginalCharacter farts poezio webcomic DigitalArt partnership oilpainting kickstarter furryart twinkle DisabledArtist unixstickers pink fursona afriquedusud comicsans inkjet generativeart VaccineApartheid sticker enbyart artbreeder 17maart fart videoart ivalice adultcoloring djmartinpowers arttherapy Cartudy fractal enby TattoosOfTheFediverse colouringpage worldwaterday NFTart signalstickers artschool digitalpainting intel artvsartist maart abstractart drawing sig circular sculpture artist pcbart meme cultureshipnames supertuxkart concretepoetry artwithopensource pinkwug VTMtober commissions pronouns opencallforartists VizierOpLinks commissionsopen fountainpenink MartinVanBeynen peppertop speedpainting animalpainting visionaryart blackartist figureart zine artists heart supportthearts genart urbanfantasy stickerei tree lineart smartcard pixelart alisajart openframeworks networknomicon openrailwaymap politicalpolicing Earthstar JuliaHartleyBrewer fan digitalArt artistsOfMastodon + + Sat, 01 May 2021 11:58:46 UT + + + nature + hiking camping RedNeckedWallaby reforestation wat marsupial StormBella insect morning delightful plankton trees lichen MicroOrganisms badger ProForestation lightweight light gecko birds nature volcano teamcapy butterflies frogs rainforest snow sunrise fossils hambacherforest forestfinance leopardgecko moutains coldwater rocks inaturalist sunset forest LandRestoration australianwildlife forests capybara enlightened waterfall sundaymorning forestation enlightenment natur walking deforestation desert lava natural WoodWideWeb birdsarentreal lichensubscribe morningwalk SpringRockShed insects wildlife afforestation northernlights RainforestAlliance amphibians desertification + + Sat, 01 May 2021 11:58:46 UT + + + writing + blog amwriting authors poem cutupmethod tories story pdf blogPages swap shortstory magazine smallstories blogging smallpoems sciencefiction writing proverbs quotes blogs noblogo otf logo playwright hedgedoc microfiction interactivestorytelling westernjournal quote letterwriting icanhazpdf WriteFreely microblog bulletjournal storytelling goodread goodreads creativewriting horror wordplay limerick journals artjournaling zineswap zines shortstories journalists journal writingcommunity poetry 20thcenturypoetry amwritingfiction + + Sat, 01 May 2021 11:58:46 UT + + + music + LibreMusicChallenge musicprodution KobiRock iea LaurieAnderson ics punk punkname ourbeats gas vollgasindiekrise indieweb cypherpunk synthesizer daftpunk bootstrappable indiemusic cipherpunk 20thcenturyjazz acousticguitar synthpop psychedelicrock steamlinux theCartographer streetpunk hydrapaper bikepunks bandcamp mymusic musicians jamendo ipod skinheadmusic jam rap shoegaze mp3 steam indie steganography steampunk ldjam48 indieauthor composing nazipunksfuckoff Music EnvoieStopHashtagAu81212 psychedelic thecure posthardcore vaporwave IndustrialMusicForIndustrialPeople Mixtip dubstep synthwave bootstrap oi rave freemusic nowplaying hiphop hardcore Musicsoft experimentalmusic nazi cp spotify fedimusic elisamusicplayer funkloch musicbrainz catsWithMusicalTalent eos90D soundcloud frankiegoestohollywood gastropod 20thcenturymusic vinyl rock ccmusic typographie dj newwave dorkwave producing experimental prince musicproduction chiptune loa lastfm tekno ripprince 1 funkwhale 20thcenturyrock eos wp playlist retrosynth NowPlaying libremusicproduction MusicAdvent coinkydink MusicTouring pmbootstrap midi arianagrande indiecember synth guitar blues musiciens listeningtonow music np bass techno musicmonday jazz production graphics darkwave mastomusic metal graphviz tigase polychromatic funk magnatune fediversemusic pegasus punkrock cyberpunkmusic raveculture cleantechnologies ldjam ftp BandcampFriday mixtape MusicsoftDownloader + + Sat, 01 May 2021 11:58:46 UT + + + gardening + seedstarting BlagueDeCodeur sporespondence blockade inde mastogarden kinder communitygardening som deno composting soil sehenswert cabbage bundeswehr opensourceseeds onions lettuce blossoms gardenersofmastodon datenschleuder florespondence cherryblossoms garden thyme flower horticulture DailyFlowers Schlachthofblockade cherryblossom acu kinderbijslag permaculture awesome hens papuamerdeka Auflagen lag CompanionPlanting gardens independence flowers kale gardening plants thegardenpath devilslettuce thegarden fahrräder gardenersworld golden beekeeping toeslagenaffaire seeds Opensourcegarden vegetablegarden + + Sat, 01 May 2021 11:58:46 UT + + + countries + thai romania burma lithuania solomon chile Instanz maui fiji tajikistan benin paraguay eeuu icelandtrip senegal ukraine italy brunei nicaragua guyana Pflanzenbestimmung euphoria zambia iceland morocco rojava netherlands swaziland tts bosnian suriname winningatlife elsalvador russia freeburma samoa romanian asl european czech belarus hayabusa2 bw kyrgyzstan uk abuse translation sanmarino catalonia panama africa west indians unitedkingdom japan Netherlands buyused venezuela gambia freeNukem kuwait barbados papua greece switzerland uae mau nigeria usa angola honduras djibouti laos sierraleone nonprofit britain cambodia ych vietnam esperanto neofeud zealios seychelles marshall kazakhstan estonia tonga stlucia burundi bangladesh egypt nachhaltigkeit japanese mali congo us jordan americangods speedrun grenada israel psychic algeria ghana bosnia translations russian eritrea bhutan armenian hungary Störungsverbot saudi slovenia tig mauikit czechosvlovakia bahamas libadwaita australia kiribati togo koreanorth poland Überbevölkerung malawi capeverde armenia american hautrauswasgeht bahrain mozambique japaneseglare americanpinemarten beleuchtung southsudan Martesamericana syria german micronesia maldives iran indigenous sweden bijîberxwedanarojava ethiopia cuba liberia canada burkina indian somalia Chile scotland russiaToday vaticancity easttimor austria turkey yemen Bolivia denmark USBased java madagascar finland philippines ivorycoast haiti ecuador Portugal azerbaijan gasuk spain albania massachusetts afghanistan rising europe mauritania dominica ökonomisierung thailand belize westpapuauprising nerdlife macedonia montenegro thenetherlands qatar mongolia costarica boatingeurope birdsofkenya latvia uzbekistan kabelaufklärung ireland iraq malaysia mexico investigations mauritius dezentralisierung oman chad nz de georgia zimbabwe france serbia lesotho romani oddmuse tunisia argentina czechia cameroon namibia sudan indonesia lifeboat colombia worldwildlifeday kryptowährung tuvalu britainology beckychambers turkmenistan tanzania germany neuhier norway comoros auteursrecht guatemala Thailand kosovo andorra wales indiastrikes servus pakistan belgium china antigua life koreasouth newzealand visiticeland einzelfall rwanda luxembourg libya indywales italyisntreal nauru moldova bad spanish eastindiacompany northernireland stigmergic palau taiwan kenya trinidad eu botswana sasl fossaudio CuriosidadesVariadas jamaica vanuatu cyprus aminus3 malta Icelandic niger s3 westpapua busse unitedstates myanmar saintvincent guinea nepal peru uganda uruguay india lebanon neurodiversity southafrica croatia europeanunion writerslife bolivia chinese dominican srilanka bulgaria slovakia speedrunning gabon psychedelicart ether stkitts liechtenstein neofeudalism brazil shutdowncanada + + Sat, 01 May 2021 11:58:46 UT + + + hardware + plugandplay peoplefarming purism schematics opennic zomertijd foundation restauration riscv solarpower carbonFootprintSham mietendeckel PersonalComputer cyberdeck PineCUBE tex keyboards electron hibernation schwarmwissen screenless homebrewcomputing FarmersTractorRally pinebook farming modem lowtech biblatex allwinner datenschutz daten pimeroni industrial analogcomputing homer TrueDelta keyboard screenprinting Pinecil raspberrypi3 pocketchip oshw misterfpga ArmWorkstation datensicherheit hardwarehacking mer picodisplay laptops electronics ham teamdatenschutz charm wolnabiblioteka uart panasonic pcb mermay printmaker deck powerpc acoustics ibmcompatible webcams modular larp cybredeck latex emmc ipadproart computing laptop solarpunk isa recycling apparmor repairability theatrelighting lenovo fairelectronics librem TokyoCameraClub MacBookProService pocket box86 JingPad fuse date solarpunkactionweek ibm 3dprinting electro carbon MechcanicalKeyboards hardware m68k retrohardware pinetab sicherheit openhardware raspberrypi datenautobahn webtoprint 3dprinter barcode Quartz64 PlanetComputer jtag ebu itsicherheit pinetime screens pinebookpro 3d batteries PinebookPro 3dprint Handprint modemmanager keyboardio mechanicalkeyboard robot arm lowerdecks ipad FireAlarms PinePower paperComputer amd openpower poweredSpeaker devopa eeepc F9600 rpi4 thinkpad RaspberryPiPico iot dat BeagleV repairable sbc circuitbending raspberrypi4 print displayport akihabara analog electronic + + Sat, 01 May 2021 11:58:46 UT + + + security + zuluCrypt signalboost repair encrypt letsencrypt messengers BrowserHistory FlexibilizaciónResponsable autoritäreretatismus BlacksInCyber omemo autotomy saveanonymity alg dataleak messenger foodinsecurity password keepassxc cryptography cybersecuritynews pipewire cryptolalaland solarwinds communityalgorithmictrust infosec gchq wireless castor repairing IHaveSomethingToHide fotografie passwords gif IronySec cryptowars anonym encryptioncan supplychainattacks UseAMaskUseTor anonymous cyberattack security tor comb e2e bruceschneier vpn BlacksInCybersecurity toreador itsec openssh factorio openssl spyware e2ee backdoor cryptotokens NSAmeansNationalScammingAgency stork conscientiousobjectors ed25519 torproject cryptomeanscryptography encryption 0day informationsecurity ssh misshaialert cybersec encryptionsist restore FormFactors crypto theObservatory autokorrektur giftofencryption kansascity auto signalapp anonymity fotografía onionshare onion autofahrer malware switchtosignal corydoctorow RestoreOurEarth radiorepair righttorepair cryptographyisoverparty opsec keepass encryptionists TastySecurity securitybyobscurity torsocks toronto nsa autorenleben schneier protonvpn trustissues InsecurityByObscurity yubikey nitrokey encrypted openpgp pgpainless ghibli castor9 deletesignal prismbreak gpgtools gpg fotopiastory equatorial sequoiapgp cybersecurity Tor CryptoWars signal noscript redaktor vector trust Torge cryptoparty wire historia itsecurity foto pgp RobinHoodStore cryptomator signalmessenger openvpn datasecurity autorotate regulators leak drugstore encryptiost libresignal doctors securitynow storage tracking + + Sat, 01 May 2021 11:58:46 UT + + + science + engineering math epidemiology stemfie electrochemistry ethnology womeninstem archeology botany STEM biodiversity ocean stemgeenFVD linguistic anthro supercollider nextgeneration zoology climatology SolarSystems dna geography physics archaeologist generalstreik geology ClinicalPsychology generationidentitaire economicanthropology Science SystemicRacism corrosion research stemwijzer bioengineering stemgeenPVV knowledge stemgeenVVD botanical dream dawkins ineigenersache stemgeenVVS holo graphTheory deepdreamgenerator meterology botanicalart JA21 regenerative biotech stemgeenJA21 psychology particles biology pacificocean generation gene fossilhunting badscience chemistry muon paleontology oceanography stem particlephysics nextgenerationinternet biomedical anthropology + + Sat, 01 May 2021 11:58:46 UT + + + photos + smartphonephotography nikon 90mm photography fujifilm wildlifephotography wild photo photogrpahy tokyocameraclub nikond90 photos macrophotography photographie photovoltaik camera macropod cameras fossphotography phonephotography myphoto naturephotography picture macro streetphotography FujinonXF90mm photoreference crop pictures + + Sat, 01 May 2021 11:58:46 UT + + + history + musichistory heirloom monarchs holocaust history arthistory makeinghistory anarchisthistory gaminghistory womenshistorymonth NetworkingHistory blackhistory monarch computerhistory + + Sat, 01 May 2021 11:58:46 UT + + + places + lapaz luanda asunción nouakchott conakry kyiv moscow saipan gibraltar dublin KlimaGerechtigkeit stuff catalunya dannibleibt avarua lilo hargeisa delhi niamey chișinău freestuff colombo brasília phnompenh mbabane danni belgrade rotterdam belmopan pyongyang hannover strawinsky calls ulaanbaatar oranjestad Reykjavik gaborone seattle ndjamena raw singapore kingedwardpoint abidjan nuuk asshole pretoria papeete malé rhetorical robberfly zagreb gitega abudhabi flyingfishcove castries georgetown hagåtña videoFreex oric videofeedback borikua basseterre hamburg afrika kinshasa Schadensersatzforderung suva klimaatverandering valparaíso athens roseau sheffield baku charlotteamalie antananarivo domi pristina bordeaux MakoYass videocalls santiago fsb sukhumi berlin urk uptronicsberlin funafuti libreville puertorico ClimateChange hanoi philipsburg tehran banjul prague rawhide andorralavella daw yerevan portauprince videoprojects dakar paramaribo tifariti capetown rigaer94 dma tirana klima ankara ipswich managua lisbon bishkek amsterdam climatchoas kent klimaat EastVirginia portonovo santodomingo bangkok texas bucharest kathmandu aden madrid sanjuan vienna kingston stuttgart kabul damascus stockholm douglas ClassOf2015 willemstad klimaschutz hibernoenglish thehague panamacity RassismusTötet beirut amman newdelhi tórshavn nouméa oslo alofi gustavia paris cockburntown ottawa classical stepanakert portofspain klimakrise class fsberlin honiara berniememe asmara florida nicosia helsinki taipei tegucigalpa bridge tokyo tashkent larochelle vr gabocom MadeInEU sarajevo algiers KlimaKrise nairobi muscat monaco riyadh flying lusaka wellington bissau juba mariehamn majuro buenosaires ngerulmud dhaka berlinhateigenbedarf guatemalacity washington vatican kuwaitcity Erdmannhausen londonboaters SystemChangeNotClimateChange bern mexicocity bratislava myasstodontownhall bridgetown delhipolice crowsnestpass tunis manila stanley matautu copenhagen barcelona lomé videocall budapest ouagadougou mogadishu PrawnOS freetown victoria lora brazzaville portmoresby ashgabat kampala Klimaatalarm gigabitvoucher kirigami webassembly elaaiún vilnius ContourDrawing bloemfontein gnuassembly sucre london passalong marseille berniesanders pagopago bradesestate oakland vaduz addis nürnberg naypyidaw CassetteNavigation khartoum baghdad bandar moroni cuirass lehavre portvila kingstown ChrisCrawford reykjavík lofi manama accra windhoek fortworth nukualofa classic ciutatvella tbilisi canberra quito maputo cetinje adams putrajaya ramallah solimaske bogotá dodoma harare havana warsaw münster valletta snes localberlin ljubljana bamako kualalumpur podgorica rabat cotonou oranje plymouth seoul neumünster Portland dushanbe bangui aotearoa westisland tskhinvali palikir caracas jamestown rome munich cambridge freestuffberlin sãotomé jakarta daressalaam sansalvador seo apia essex yaren cairo jerusalem brussels kigali southtarawa beijing minsk montevideo vientiane philips maseru klimaatopwarming hamilton lorawan lurk doha klimaatwake tripoli celtic portlouis lima adamstown deventer weimar abuja fuckalabamapower saw lilongwe nassau lobamba bernardhickey heathrow nyc fly montreal rawtherapee dili thesprawl riga assembly lesbos monrovia nursultan Neuzulassung gab sanjosé klimaatrechtvaardigheid marigot islamabad fb malabo tallinn sahara thimphu oranjeklanten klimanotstand yaoundé praia bujumbura strawberries washingtondc sofia skopje + + Sat, 01 May 2021 11:58:46 UT + + + software + beta borgbackup app fossnorth freedombox windows libre nginx postscript freenet freebsd kc Framasoft Flisol2021 invidious drm publicdomain ilovefreesoftware kubernetes openvms luca nodrm copyleft fossmendations freedoom jami betatesting libregraphics FuckOffZoom quicksy whiteboard free docker softwarelibre opensourcehardware interoperability impression3d freesoftware gimp backups foss matrix dinosaur mossad designjustice thefreethoughtproject filesystems nextcloud translate wechat notmatrix gnupg duplicati HappyLight opensourcesoftware agplv3 compression openscad freeganizm uidesign TabOrder searx ikiwiki Linux FreeSoftware userresearch FlisolLibre2021 DisCOElements Audio rocketchat thanksfreesw immers outreachy synapse API lyft freekirtaner photoshop nitter virtualbox ngi4eu discord whisperfish ee vaporware opensource diaspora yunohost oss chickadee appstore dégooglisons littlebigdetails cabal conferencing libreboot musiquelibre mycroft accessibility devops kdeapplications owncast phabricator emacs freiesoftware FLOSSvol moss fluffychat impress writefreely videoconferencing bigbluebutton email ngi chatapps HappyNewYear fossilfriday floss plugins softwaresuite graphic libresoftware softwareengineering mosstodon expandocat deltachat application uifail FOSS lucaapp GNOMECircle rockpro64 bittorrent penpot vlc zoom tiling FriendofGNOME usability winamp opendesign obnam snap ProprietarySoftwareProblems pandoc blackcappedchickadee cryptpad software libretranslate OwnStream upstream maplibre slack Hummingbard Element safenetwork asia SoftwareLibre zrythm gnu CTZN mumble grsync freecad drmfree telegram containers tails blockchain irssi HabKeinWhatsapp mcclim jitsimeet iso mutt librelingo WeAreAlmaLinux tilingwm sri design gameoftrees GnuLinuxAudio freegan freetool backup trueLinuxPhone rotonde freetube GNU speechrecognition skydroid thunderbird sysadmin it sound alternativeto parler apps chat licensing fossasia inclusivedesign defectivebydesign metager screenreaders sysadmins ZeroCool LINMOBapps obsproject softwareheritage profanity Tankklappe doomemacs ffmpeg fossandcrafts GNOME40 telesoftware love reboot opensourcegardens switchingsoftware OSM freesw agpl distribute magnifyingglass GNOME freeganizmniewybacza drive AlmaLinux GreenandBlackCross strafmaatschappij freetillie distributedledger mattermost principiadiscordia blue LinuxPhones rocket ghostscript win10 Zoom elemental flisoltenerife libreops element platforms inclusive ptp chatty lucafail informationwantstobefree softwareGripe nativeApp MatrixEffect culturalibre jitsi flisol dinosaurier wordpress SwitchToJami mongodb ux rsync libreoffice crossstitch dino plugin xwiki openoffice container discordia softwaredesign redeslibres ledger sounddesign chatcontrol alternatives glimpse + + Sat, 01 May 2021 11:58:46 UT + + + conferences + FOSDEM2021 stackconf debconf FOSDEM talk fossdem FreedomBoxSummit apconf2020 schmoocon realtalk penguicon2021 summit confidenceTricks libreplanet confluence minidebconf edw2021 rc3worldleaks StopStalkerAds SeaGL penguicon emacsconf MCH2021 flossconference conferences ox defcon emfcamp flossevent askpinetalk conf defcon201 rC3 rC3World FOSDEM21 conference mozfest flossconf apconf ccc persconferentie GeekBeaconFest rC3one smalltalk C3 config penguicon2022 confy + + Sat, 01 May 2021 11:58:46 UT + + + food + vitamind cake teamviewer FoodHardship pankow margarine zwartepiet dessert foils salsa caviar brot theexpanse BellaSpielt cookery pietons Ôtepoti panther food cakecutting skillet teamgodzilla spiel liquor milk bolognese recipe foodporn yeast drinking VendrediPeanutsNouka plate waffle pansexual biscuit glaze omelette veganismo filet pastry wine woke Caribbeans hamburger juice unauthorizedbread Amazfish sourdough gedankenspiel cagefree nuts gras toast broth batter foodie breadposting spiele ketchup divoc seasoning mayo soup arpanet pan voc imateapot Anglefish potatoes mayonnaise vegan dish avocado spice keto bakery butterfly cooking teamhuman SailfishOS yogurt thecandycrystalrainbowcodex crumble cider caffeine butter mastokitchen triceratops cook pottery creepypasta wastemanagement kitchencounter mastocook cobbler steak pizza vocaloid soda fedikitchen aroma oil Miroil angelfish flour foodsovereignty cream nutella pie cuisine potse meatismurder freerange tartar kropotkin tea marinade cakes mushroom thekitchen entree lfi dominospizza bread salad beans fresh syrup fermentation teamsky mushrooms cookie wordstoliveby curd soysauce lowcarb pudding plantbased beer baking peterkropotkin fish panoptykon spanisch foodwaste wholeGrain wheat pot TeamFerment Wypierdalaj sauerkraut stew weltspiegel chocolate paste soynuevo wok rainbow recipes kitchengarden expanse olive burger mrpotatohead candy Steam kitchen coffee bagel teams taste SpieleWinter2020 meat johannisbeeren noodle raclette caramel rice eggs grill davewiner poutine demoteam lard croissant pasta vegane strawberry foods WaterDrinkers cheese oregano drink muffin bikekitchen krop LowRefresh foie onepiece sauce foodanddrink soy godzilla growyourfood vore wholewheat pandemie cocoa sandwich mousse waste chili redfish + + Sat, 01 May 2021 11:58:46 UT + + + farming + johndeere deer + + Sat, 01 May 2021 11:58:46 UT + + + indymedia + fpga hs2 visionontv geek tredtionalmedia degeek globleIMC indymediaback openfoodnetwork pga indymedia networking stupid hs2IMC indymediaIMC network networkmonitoring roadsIMC stupidindivialisam roadstonowhere lifecult avgeek monitor omn tv roadstonowhereIMC UKIMC fluffy 4opens openmedianetwork + + Sat, 01 May 2021 11:58:46 UT + + + cycling + bicycle cycle bic cycling bike motorbike cyclingtour thingsonbikes openbikesensor Snowbike cyclist + + Sat, 01 May 2021 11:58:46 UT + + + phones + mobileapp fairphone3 téléphone nemomobile manjaro Jingos plasmaDev 5g mobian pine alarmphone fdroid plasmamobile shotonpinephone fairuse android smartphonepic nophone ubportsqanda linuxmobile sailfish phones fennecfdroid Mobian osmf smartphone plasma5 ios selinux mobileGNU PinePhoneOrderDay sms4you mob bp microphone linuxconnexion smartphones iOS14 pinemarten linuxphones openmoko mobilecoin mobilelinux freeyourandroid fair QWERTYphones sailfishos siskinim epic monal android10 osmocom Smartphones WakeMobile lineageos molly androiddev manjarolinux plasma phosh BriarProject librem5 ubportsinstaller osm shotonlibrem5 pinephone Teracube PinePhone mobile pinephones sms pine64 fairphone ubuntutouch linphone Android alpinelinux osmirl linux ubports gnomeonmobile osmand vodafone gnomemobile linuxonmobile iphones postmarketos iOS microg grapheneos recycletechjunkuselinux phone mobileKüfA + + Sat, 01 May 2021 11:58:46 UT + + + pandemic + covid19 coronaPolicies corona justasleepypanda psmeandmywholefamilycaughtcovidfromwork Coronavirus CoronaWarnApp facemasks vaccines pandemics vaccine JournalistsSpeakUpForAssange coranavirus pandemic sayhername internationalproletarianrevolution Zbalermorna covidville ZeroCovid contacttracing SùghAnEòrna tier4 coronapandemie covid pand volodine COVID19NL Moderna coronavirus masks Moderna2 COVIDrelief virus contacttracingapps moderna coronadebat Lockdown rna codid19 COVID19 YesWeWork ContactTracing vol CoronaCrisis COVID coronamaatregelen coronabeleid + + Sat, 01 May 2021 11:58:46 UT + + + books + readinggroup bookstore bookbinding justhollythings bookclub fake earthsea review ebooks docbook book notebook public amreading republicday failbook bookwyrm 5minsketch bookreview reading theLibrary cda netbook audiobooks sketchbook wayfarers fakebook books peerreview bookreviews failbooks sketch ebook wikibooks epub cookbook AnarchoBookClub + + Sat, 01 May 2021 11:58:46 UT + + + bots + mrrobot human bot Militanzverbot nobot botanists humanity militanzverbot humanrobotinteraction therobots humanetechnow verbote humankind + + Sat, 01 May 2021 11:58:46 UT + + + war + ru DonavynCoffey Myanmarmilitarycoup civilwar antiwar bomber coup tank handforth landmine tankies military autonomousweapons army Etankstelle weaponsofmathdestruction conflict navy warplane fort guns Myanmarcoup weapons siege battle WMD wmd airforce forth + + Sat, 01 May 2021 11:58:46 UT + + + astronomy + telescope mercury pluto planets galaxy venus mars amateurastronomy uranus spacex nebula astronomy neptune space jupiter blackhole asteroid BackYardAstronomy moon thehitchhikersguidetothegalaxy observatory asteroidos saturn milkyway spacelarpcafe + + Sat, 01 May 2021 11:58:46 UT + + + other + ageassurance lastpass yolo nothingnew Lastpass extinction MasseyUniversity itscomplicated massextinction misc mining pinside rant Terrassen righttodisassemble nsfw biomass ass Chiacoin assassinfly migrantstruggles PointlessGriping decluttering OCUPACAOCARLOSMARIGHELLA assembler + + Sat, 01 May 2021 11:58:46 UT + + + news + report news flash Wikileaks newsletter nothingnews newsflash newsroom Worldnews rt bbc foxnews News goodnews doubledownnews bbcnews reuters theguardian badReporting newsboat journalism SkyNews lobsters + + Sat, 01 May 2021 11:58:46 UT + + + cats + Cat dailycatpic dxp DailyCatVid Cats katze kotorico kot CatsOfMastodon Catshuis Leopard catbellies LapCats qualitätskatzen + + Sat, 01 May 2021 11:58:46 UT + + + employment + InterviewQuestions bullshit jechercheunjob mywork employees hiring workingfromhome ProgrammingJob reproductivework frame workinprogress bullshitjobs car workplace antiwork kreaturworks worklog sexworkers mainframe remotework remotejobs job DjangoJob teamwork framework hire KDEGear hirefedi workshop illustratorforhire tidyworkshops carework nowhiring KDE KDEGear21 obs workersrights obsolescence KDEFrameworks work hertfordshire flossjobs jobs precariousworkers sexworker + + Sat, 01 May 2021 11:58:46 UT + + + radio + cbradio worldradioday hamr varia why tootlabradio pouetradio dx macintosh amateurradio radiohost radiokapital localization nwr vantaradio ca radio healthcare listening hamradio FreeAllPoliticalPrisoners variabroadcasts card10 fastapi radiobroadcasting radiosurvivor Poecileatricapillus apis radioshow local radio3 noshame osh audycja hackerpublicradio kosher Phosh audycjaradiowa california road nowlistening radiobroadcast radiostation mastoradio broadcasting radiodread amateurr spazradio anonradio kolektywneradio io api + + Sat, 01 May 2021 11:58:46 UT + + + pets + spinning catpics uninstallman ExposureNotifications germanshepherd catofmastodon nin TheRabbitHole verification eurocrats QuestioningTechnology cathedrals Stelleninserat reEducationCamp mastodogs rats catbehaviour digidog Stallman Coolcats petrats governing dogsofmastodon gentrification evening broadcats gattini bunyPosting kitten fostercats cats uninStallman kittens Uninstallman pet dog scotties ageverification Pruning acat caturday catsofmastodon leninismo meow cute mastocat lenin catstodon dogs catsofparkdale mastocats W3CSpecification mastodog notpixiethecat londoninnercitykitties cat blackcat furry petitie dogsofmaston training catcontent UserDomestication + + Sat, 01 May 2021 11:58:46 UT games - appdesign minecraft tetris99 gamestop ageofempires TerraNil runequest dragonfall boardgames computergames fucknintendo gameassets gamestonk FediDesign puzzle indiegames gamedesign shadowrun chess nintendoswitch mud indiegame game 0ad gameart opengameart sign asset ttrpg gamedev freegames guildwars2 bideogames TetrisGore gaming gamemaker gameing nintendo roleplayinggames Gamesphere devilutionx rpg gamespot tetris dosgaming DnD cyber2077 tarot cyberpunk2077 gamesforcats FreeNukum spelunkspoil supermariomaker2 neopets minetest omake guildwars dnd games + appdesign minecraft tetris99 gamestop ageofempires BiophilicDesign videogame ksp TerraNil dungeonmaster AudioGame runequest miniatures dragonfall boardgames computergames fucknintendo fudgedice gameassets gamestonk videogames FediDesign puzzle indiegames gamedesign shadowrun spot godotengine adventuregames chess gamejam nintendoswitch mud indiegame game 0ad dragon playlog gameart opengameart sign asset ttrpg gamedev freegames guildwars2 bideogames TetrisGore gaming gamemaker gameing nintendo roleplayinggames Gamesphere devilutionx rpg gamespot tetris dosgaming DnD cyber2077 godot tarot cyberpunk2077 gamesforcats FreeNukum spelunkspoil boardgaming supermariomaker2 neopets minetest omake guildwars dice dnd games - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT years newyearsresolutions resolutions Year2020 year 1yrago newyear happynewyear 5yrsago newyearseve - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT linux - osdev opensuse linuxisnotanos elementaryos cli viernesdeescritorio shell aves kde Debian11 kdepim thisweekinlinux slackware search bsd tap openwrt distros tmux nixos nix DebianBullseye xfce ubuntubuzz shareyourdesktop personal wireguard linuxaudio usb nixpkgs gtk linuxmint debian trisquel gnome linuxposting console showyourdesktop research windowmanager desktop GuixSystem arch platform ubuntu snowfall gnulinux aur justlinuxthings xubuntu unix fedora centos tuxedocomputers openmandriva gentoo aurora researcher liveusb personalarchive usergroup systemd linuxgaming Debian distro tape destinationlinux LinuxSpotted Squarch gtk3 escritoriognulinux qubesos i3wm kubuntu epr JuiceFS reproducible haiku linuxisnotaplatform clip fall EMMS raspbian netbsd shellmustfall termux btrfs reproduciblebuilds joke artix gtk4 archlinuxarm bash archlinux platforms linuxconfau researchers GNUlinux rhel debianinstaller debianindia linuxisajoke suse linuxconsole + osdev opensuse share linuxisnotanos elementaryos cli buster viernesdeescritorio shell aves kde Debian11 reprobuilds pureos kdepim thisweekinlinux slackware wegmetdemonarchie search bsd tap openwrt falling runbsd distros stapler tmux seashell nixos alpine nix DebianBullseye xfce ubuntubuzz gnutools vaguejoke ack shareyourdesktop personal wireguard whonix hardenedbsd linuxaudio mate usb nixpkgs wordsearch torvalds gtk linuxmint DebianAcademy debian chroot trisquel gnome distrowatch linuxposting fedoraonpinephone console showyourdesktop FuckDeMonarchie windowmanager desktop GuixSystem arch platform ubuntu personalwiki snowfall gnulinux aur justlinuxthings xubuntu kdeframeworks5 unix fedora openbsd centos tuxedocomputers openmandriva gentoo aurora researcher liveusb dee personalarchive usergroup StockOS systemd linuxgaming Debian distro icecat tape puppylinux destinationlinux LinuxSpotted suicide show Squarch computer gtk3 escritoriognulinux qubesos i3wm clipstudiopaint dadjokes kubuntu epr JuiceFS reproducible haiku linuxisnotaplatform clip fall EMMS minicomputer raspbian netbsd DanctNIX termux btrfs reproduciblebuilds gravitationalwaves joke artix gtk4 linuxexpress archlinuxarm bash archlinux hare linuxconfau researchers AuratAzadiMarch gnomebuilder GNUlinux rhel debianinstaller debianindia linuxisajoke tux suse zsh linuxconsole - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT - art - arttips mastoartist paperart CreativeToots Linke subresourceintegrity water resource urban article glassart martialarts artalley artvsartist2020 circulareconomy abstract artreference poe nomadbsd dccomics inkscape artificalintelligence circuitsculpture watercolor resources memes autisticartist barrigòtic art sona animalart krita anthroart urbanart queerart deviantart CircusInPlace pastel drawings adultcolouring source collective openstreeetmap collage jordanlynngribbleart linkedin links thinkabout PartyPooperPost openai harmreductionart MastoArtHeader openra wallpaper ircd political agriculture streetart coverart stickers freeculture fiberart pcb MastoArt particl ParticlV3 groenlinks creativetoots culture ganart opencl fiberarts polArt ink painting Leitartikel marten opencoop digitalart comic sartre artwork openbsd mandala b3d politicalcartoon blackart glitch xkcd comics intelligence linkinbio mastoart urbanterror illustration artopencall gnuimagemanipulationprogram os wireart cartoon oc AccidentalGraffiti eink OriginalCharacter poezio webcomic DigitalArt partnership oilpainting irc furryart twinkle DisabledArtist pink fursona inkjet generativeart sticker enbyart particles artbreeder 17maart djmartinpowers arttherapy fractal enby TattoosOfTheFediverse signalstickers digitalpainting artvsartist abstractart drawing sig circular sculpture artist pcbart meme cultureshipnames concretepoetry artwithopensource pinkwug commissions opencallforartists commissionsopen fountainpenink power peppertop visionaryart blackartist zine artists heart genart stickerei lineart smartcard pixelart alisajart opencollective openrailwaymap circuitbending JuliaHartleyBrewer digitalArt artistsOfMastodon + transport + deutschland deutsch deutschebahn - Sun, 07 Mar 2021 20:25:51 UT - - - crafts - topic_imadethis hackerexchange exchange textile upholstery hackgregator gatos gato hackspacers shack dust3d hackerspaces sanding solvespace sundiy maker knitting hack hacked calligraphy biohacking wip jewelry diy upcycling woodworking 3dcad origami makers quilting hacker quilt weaving 3dmodel tinkering hacking woodwork ceramics embroidery shacks teardown - - Sun, 07 Mar 2021 20:25:51 UT - - - pets - catpics germanshepherd catofmastodon nin TheRabbitHole cathedrals Stelleninserat reEducationCamp mastodogs rats catbehaviour Coolcats petrats dogsofmastodon gentrification broadcats bunyPosting kitten fostercats cats kittens pet dog acat icecat caturday catsofmastodon meow cute mastocat catstodon dogs mastocats notpixiethecat londoninnercitykitties cat furry catcontent UserDomestication desertification - - Sun, 07 Mar 2021 20:25:51 UT - - - war - Myanmarmilitarycoup civilwar antiwar bomber coup tank handforth landmine military autonomousweapons army Etankstelle weaponsofmathdestruction conflict navy warplane fort guns Myanmarcoup weapons siege battle WMD wmd airforce forth - - Sun, 07 Mar 2021 20:25:51 UT - - - legal - eek rma hfgkarlsruhe amro karlsruhe remotelearning SpreekJeUitBekenKleur disinformation GameSphere OnlineHarmsBill laipower gdpr intros Anticritique learning energyflow misinformation peekier mojeek digitalservicesact geekproblem dmca - - Sun, 07 Mar 2021 20:25:51 UT - - - climate - energy renewables clouds openscience renewableenergy amp climateemergency climatechos ClimateAction climate climateracism renewable windenergy coal weatherforecast klimaatcrisis skypack poll fossilfuel globalwarming climatechange weather ragingqueerenergy climatecamp windpower globally globalization climatechoas pollution global parisclimateagreement science fossilfuels Climate sky climatescience energytransition climateaction ClimateCrisis globalviews climatemitigation climatecrisis - - Sun, 07 Mar 2021 20:25:51 UT - - - fiction - ABoringDystopia cyberpunk thehobbit fiction flashfiction genrefiction - - Sun, 07 Mar 2021 20:25:51 UT - - - gender - transparantie transistors broketrans transwomen transformativejustice transparency transcrowdfund esperanto transmission transgender womensart female osi nonbinary vantascape blacktransmagic nb trans nonbinarycommunity transpositivity transphobia transmitter women sri rant estradiol transfer transgenders pointlesslygendered queer genderQuiz gender genderqueerpositivity woman transrights - - Sun, 07 Mar 2021 20:25:51 UT - - - audio - feed audioproduction pulseaudio audi feedbackd audiofeedback audio - - Sun, 07 Mar 2021 20:25:51 UT - - - media - livestreaming ip sustainable mediathek mainstreaming stream trad maistreaming selfsustainable kawaiipunkstreams mainstream streaming weAreAllCrazy streamdeck maiabeyrouti sustainability diymedia submedia theatlantic traditionalmedia videos newsmedia wikimedia mixedmedia railroads documentary streamers tootstream taina ai realmedia media independentmedia theintercept - - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT activism - protestor clearchannel tyrannyofconvenience grassroot FreeLibreOpen g20 rig bekannt farmersprotest protests riseup sflc DanniVive apt reuse stopspyingonus keepiton FSFE20 fsfe softwarefreedom ilovefs ann activist xr SustainableUserFreedom bannerlord seachange directaction eff change openrightsgroup protest icantbreathe JeffreySDukes actiondirecte kroymann HS2 ngo MarcWittmann fsf fsfi StopHS2 grassroots HS2Rebellion antireport ClimateJustice BLM ExtinctionRebellion namechange changeisinyourhands conservancy ngos sp JefferySaunders LiliannePloumen climatechangeadaptation Kolektiva XR freeolabini announcement isolateByoblu annieleonard + rights protestor dutysolicitor roots annonce clearchannel nog20 farright tyrannyofconvenience grassroot nonviolentcommunication FreeLibreOpen g20 JusticeForRapheal rig bekannt farmersprotest animalrights protests riseup sflc DanniVive apt freeassange reuse stopspyingonus keepiton FSFE20 fsfe killthebill softwarefreedom AntiCopyright ilovefs ann activist edrigram xr SustainableUserFreedom bannerlord undercurrents righttoexist seachange directaction mannheim Doulingo politicalactivism wechange eff change openrightsgroup protest icantbreathe JeffreySDukes FSF actiondirecte kroymann protestsupport climatchange HS2 ngo MarcWittmann StandWithTillie fsf fsfi StopHS2 grassroots HS2Rebellion FreeJournalistAssange antireport ClimateJustice BLM ExtinctionRebellion shellmustfall namechange changeisinyourhands weareallassange conservancy ngos sp JefferySaunders GreatGreenWall LiliannePloumen freeassangenow directactiongetsthegoods climatechangeadaptation Kolektiva XR freeolabini announcement isolateByoblu annieleonard - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT + + + crafts + topic_imadethis hackerexchange exchange quilts textile upholstery hackgregator gatos gato hackspacers shack 3dmodeling dust3d hackerspaces tryhackme sanding solvespace sundiy craft papercrafts maker knitting hack hacked calligraphy biohacking wip spacecrafts hacktheplanet jewelry diy textiles projects hackerweekend handicrafts Handicraft upcycling woodworking 3dcad glass origami makers quilting crafting hacker quilt crafts weaving 3dmodel tinkering hacking woodwork ceramics embroidery shacks teardown + + Sat, 01 May 2021 11:58:46 UT + + + seasons + mailspring spring lupin thespinoff Dadvice hiddenServices autumn abolishice namedropping office hooping es pinterest winter ice hpintegrity pingpong PoliceTenSeven santa summer iced summerschool onlyoffice icedipping solstice unicef wintersolstice FederalOffice summerRolls pin homeoffice + + Sat, 01 May 2021 11:58:46 UT + + + legal + commandline eek scanlines rma remote formatie2021 hfgkarlsruhe amro karlsruhe dmc remotelearning tamron SpreekJeUitBekenKleur newnormal line disinformation OnlineHarms GameSphere squeekboard stopline3 OnlineHarmsBill laipower gdpr intros Anticritique energyflow misinformation peekier MovieGeek mojeek digitalservicesact line3 mainline airline permafrost geekproblem dmca + + Sat, 01 May 2021 11:58:46 UT questions - askmastodon askfedi question askmasto askfediverse totallyaskingforafriend ask askfosstodon + checking askmastodon biking questions king lockpicking askfedi askafriend question SocialNetworkingReimagined askmasto askfediverse totallyaskingforafriend ask askfosstodon - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT + + + climate + energy SoilCarbon vampire renewables fuel clouds apollo racisme mitm openscience renewableenergy ClimateMeme amp climateemergency climatechos ClimateAction climate climateracism renewable windenergy ClimateProtection coal mit weatherforecast crisis vampiro klimaatcrisis environment skypack poll fossilfuel earthscience globalwarming climatechange limitededition weather ragingqueerenergy climatecamp windpower sealevelrise globally globalization climatechoas racism CarbonOffsets basecamp exitpoll pollution global parisclimateagreement science fossil OABarcamp21 fossilfuels Climate sky climatescience energytransition climateaction ClimateCrisis warm globalviews headlamp climatemitigation Ruttecrisis climatecrisis + + Sat, 01 May 2021 11:58:46 UT + + + fiction + ABoringDystopia interactivefiction cyberpunk thehobbit fiction nonfiction flashfiction cyberpunk2020 genrefiction + + Sat, 01 May 2021 11:58:46 UT + + + gender + transparantie transistors broketrans internationalwomensday2021 transwomen transformativejustice transcrowdfund sylvanasimons resistance transmission transgender caféLatte transdayofresistance mens vieillesse womensart blacktranslivesmatter female osi nonbinary womensday vantascape van blacktransmagic less nb trans nonbinarycommunity transpositivity transdayofvisibility lgbtqia transphobia transmitter women lgbt womenrock estradiol lgbtq queerartist KCHomelessUnion transfer transgenders pointlesslygendered queer transdayofvisbility genderQuiz gender genderqueerpositivity woman transrights transdayofrevenge + + Sat, 01 May 2021 11:58:46 UT + + + audio + feed audioproduction pulseaudio audi feedbackd audiogames audiofeedback audio auditoriasocial + + Sat, 01 May 2021 11:58:46 UT + + + garbage + Anonymous cumbria documentation no QAnonAnonymous cum u ChanCulture + + Sat, 01 May 2021 11:58:46 UT + + + media + livestreaming ip digitalmedia mustwatch sustainable transparency mediathek mianstreaming mainstreaming stream trad maistreaming selfsustainable kawaiipunkstreams mainstream films streaming weAreAllCrazy video streamdeck puns maiabeyrouti mixed sustainability diymedia film submedia theatlantic traditionalmedia videos Internetradio mediawatch mainstreamining newsmedia audiovideo videosynthesis filmnoir wikimedia mixedmedia railroads documentary streamers gstreamer tootstream taina ai mediawiki realmedia media independentmedia theintercept + + Sat, 01 May 2021 11:58:46 UT birds - RainbowBeeEater pigeon cawbird pigeonlover bird birdwatch birding birdwatching + RainbowBeeEater pigeon cawbird pigeonlover bird birdwatch birding birbposting birdwatching - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT ethics - digitalethics ethics ethicallicense license ethical + digitalethics ethicaltech ethics ethicallicense license ethical - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT disability ableism disabled - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT + + + privacy + whatip PrivacyBook SearchHistory privacyaware dataprivacyday profiling what3words surveillancestate Privacy privacypolicy WhatsApp privacytoolsio makeprivacystick surveillancetech onlineprivacy developertools tools privacyredirect drugpolicy privacymatters policy privacyMatters whatsappprivacypolicy dataprivacy privacywashing privacy privacyinternational hat DataPrivacyDay2020 PrivacyFlaw ev nl WhatsappPrivacy + + Sat, 01 May 2021 11:58:46 UT podcasts - podcasting IntergalacticWasabiHour podcast tilde til postmarketOSpodcast tilderadio tildes podcasts tildeverse smallisbeautiful fertilizers tilvids qtile + podcasting IntergalacticWasabiHour podcast tilde postmarketOSpodcast tilderadio tildes podcasts tildeverse smallisbeautiful fertilizers PineTalk tilvids tildetown qtile - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT + + + philosophy + post minimalism maximalist maximalism digitalminimalism philosophy stoic postmodernism minimalist + + Sat, 01 May 2021 11:58:46 UT + + + religion + atheist neopagan pagan catholic paganism genesis SiddarthaGautama + + Sat, 01 May 2021 11:58:46 UT culture etiquette - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT funding - donate disabilitycrowdfund disabledcrowdfund alledoerferbleiben fundraiser BreakWalledGardens knowledge ngizero zeroknowledge edge led patreon + donate disabilitycrowdfund disabledcrowdfund alledoerferbleiben ethicalfunding mastercard netzfundstück fundraiser BreakWalledGardens ngizero fun oer zeroknowledge edge led zerohedge vkickstarter fungus fungi EntangledLife opencollective patreon - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT identity boomer - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT licenses - commongoods tootle copyright creative common gpl copyrightlaw tragedyofthecommons cc0 creativecommons commongood cc + commongoods creativecommonsrocks tootle CommunitySource copyright creative netcommons common gpl plugplugplug copyrightlaw EthicalSource questioncopyright tragedyofthecommons cc0 creativecommons commongood cc creativetoot - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT political - copservation progress rog house progressivehouse linguisticProgramming + copservation ram progress slaughterhouse rog cops houseless joerogan house straming theGreenhouse teahouse progressivehouse techhouse clubhouse yayagram PDXdefendthehouseless pdxhouseless deephouse linguisticProgramming - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT fashion - brasil fashionistas fashionesta bras fashionista fashion punkwear socks patches feditats zebras + brasil fashionistas fashionesta bras fashionista fashion punkwear earrings socks patches feditats zebras - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT techbros - securedrop einfachredeneben coloredpencil redhat hackernews red reddit redis + redbubble securedrop einfachredeneben coloredpencil redhat hackernews weareredhat red pencil reddit redis infrared redshift - Sun, 07 Mar 2021 20:25:51 UT - - - bots - human bot Militanzverbot botanists humanity militanzverbot humanrobotinteraction - - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT month - april july march chapril october november august june blackherstorymonth december september may feburary jejune january blackhistorymonth month blacktheirstorymonth + april 1may july march chapril marchofrobots2021 october november august june blackherstorymonth december september may feburary jejune january marchofrobots blackhistorymonth march4justice month blacktheirstorymonth - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT welfare - universalcredit welfare credit + universalcredit welfare socialwelfare credit - Sun, 07 Mar 2021 20:25:51 UT - - - books - justhollythings bookclub earthsea ebooks docbook book public amreading republicday failbook bookwyrm bookreview reading theLibrary wayfarers fakebook books bookreviews ebook wikibooks epub cookbook AnarchoBookClub - - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT comedy - laugh farce humour satire irony standup funny humor + laugh farce humour satire irony standup funny humor pun - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT health - medical burnout cannabis medicine run treatment EmotionalFirstAid safeabortion4all maryjane autistic running neurodivergent health motion actuallyautistic meds marijuana mentalhealth H5N8 healthy neurodiverse asperger autismus + medical CoronaApp autism burnout Underunderstood cannabis medicine run treatment EmotionalFirstAid safeabortion4all maryjane organisierung autistic running neurodivergent health motion actuallyautistic meds marijuana suicideprevention mentalhealth H5N8 healthy autismmeme drugs neurodiverse grunge asperger autismus - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT introductions reintroductions newhere firsttoot recommends Introduction Introductions introductons introduction intro introductions - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT facts - funfact didyouknow lifehack + funfact unfa didyouknow lifehack - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT ai - machinelearning + machinelearning openai - Sun, 07 Mar 2021 20:25:51 UT - - - seasons - spring autumn abolishice office winter ice santa summer onlyoffice icedipping solstice unicef wintersolstice summerRolls pin - - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT commons - opennmsgroup open openocd opennms openworlds openinnovation opennmt openweb + opennmsgroup open linkedopenactors openaccess openocd openengiadina opennms ess opensourcing openpublishing openworlds openwashing openinnovation opennmt - Sun, 07 Mar 2021 20:25:51 UT - - - philosophy - minimalism maximalist maximalism digitalminimalism philosophy stoic postmodernism minimalist - - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT education - SchoolForAfrica education teach tutorial + SchoolForAfrica techlearningcollective education teach learning languagelearning tutorial ec - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT scifi - startrekdiscovery startrek bitwarden discover SoftwareJob starwars war babylon5 + startrekdiscovery startrek bitwarden discover SoftwareJob LegDichNieMitSchwarzenKatzenAn starwars ds9 babylon NGIForward war babylon5 - Sun, 07 Mar 2021 20:25:51 UT - - - privacy - SearchHistory privacyaware dataprivacyday profiling surveillancestate Privacy privacypolicy privacytoolsio makeprivacystick surveillancetech developertools tools privacymatters policy whatsappprivacypolicy surveillance dataprivacy privacywashing privacy DataPrivacyDay2020 WhatsappPrivacy - - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT photography - pea landscapephotography landscapeart XSystem darktable hippeastrum landscape + pea landscapephotography landscapeart XSystem darktable peppercarrot speakers hippeastrum landscape - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT microcontroller - e microcontroller troll arduinoide arduino + e microcontroller Chatkontrolle troll arduinoide arduino - Sun, 07 Mar 2021 20:25:51 UT - - - religion - neopagan pagan catholic paganism genesis - - Sun, 07 Mar 2021 20:25:51 UT - - - design - userfriendly - - Sun, 07 Mar 2021 20:25:51 UT - - - other - Lastpass itscomplicated misc biomass ass assassinfly decluttering OCUPACAOCARLOSMARIGHELLA - - Sun, 07 Mar 2021 20:25:51 UT - - - help - mastohelp helpful help - - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT obituaries - tripadvisor rip + lichtenberg tripadvisor rip JavaScriptSucks obit ecmascript raspberripi obituaries ber liberty - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT - garbage - no QAnonAnonymous cum u ChanCulture + design + userfriendly friendly - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT + + + help + mastohelp helpwanted helpful help + + Sat, 01 May 2021 11:58:46 UT + + + travel + travellers travel taxi airtravel + + Sat, 01 May 2021 11:58:46 UT accessibility a11y - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT election Rainbowvote voted vote - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT moderation fedblock - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT entertainment - legallyblonde watching Thundercat makingof entertainment me un nowwatching themandalorian nt + legallyblonde watching Thundercat makingof entertainment me un nowwatching mandalorian themandalorian nt - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT languages lojban gaelic - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT environment - s clim climatechaos + s clim climatechaos climateadaptation - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT + + + organization + conceptmap mindmapping mindmap notetoself pi + + Sat, 01 May 2021 11:58:46 UT microcontrollers esp32c3 esp8266 esp32 - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT scotland glasgow highlands edinburgh loch - Sun, 07 Mar 2021 20:25:51 UT - - - transport - deutsch deutschebahn - - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT agriculture farmers - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT france Macronavirus - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT - travel - travel taxi airtravel + sailing + theBoatyard - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT + + + parenting + dadposting + + Sat, 01 May 2021 11:58:46 UT + + + jewelry + bracelet + + Sat, 01 May 2021 11:58:46 UT architecture concrete - Sun, 07 Mar 2021 20:25:51 UT + Sat, 01 May 2021 11:58:46 UT From fc6e85b6caa05118812a869b03ad948ec571899d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 3 May 2021 11:05:05 +0100 Subject: [PATCH 02/16] Make the display of account and version info within nodeinfo metadata opt-in --- daemon.py | 15 +++++++++++++-- epicyon.py | 24 +++++++++++++++++++++++- metadata.py | 23 +++++++++++++++++++---- tests.py | 18 +++++++++++++++--- 4 files changed, 70 insertions(+), 10 deletions(-) diff --git a/daemon.py b/daemon.py index ad0a7fee9..9a2441a61 100644 --- a/daemon.py +++ b/daemon.py @@ -971,9 +971,15 @@ class PubServer(BaseHTTPRequestHandler): return False if self.server.debug: print('DEBUG: nodeinfo ' + self.path) + + nodeInfoVersion = self.server.projectVersion + if not self.server.showNodeInfoVersion: + nodeInfoVersion = '0.0.0' + info = metaDataNodeInfo(self.server.baseDir, self.server.registration, - self.server.projectVersion) + nodeInfoVersion, + self.server.showNodeInfoAccounts) if info: msg = json.dumps(info).encode('utf-8') msglen = len(msg) @@ -14743,7 +14749,9 @@ def loadTokens(baseDir: str, tokensDict: {}, tokensLookup: {}) -> None: break -def runDaemon(brochMode: bool, +def runDaemon(showNodeInfoAccounts: bool, + showNodeInfoVersion: bool, + brochMode: bool, verifyAllSignatures: bool, sendThreadsTimeoutMins: int, dormantMonths: int, @@ -14812,6 +14820,9 @@ def runDaemon(brochMode: bool, print('serverAddress: ' + str(serverAddress)) return False + httpd.showNodeInfoAccounts = showNodeInfoAccounts + httpd.showNodeInfoVersion = showNodeInfoVersion + # ASCII/ANSI text banner used in shell browsers, such as Lynx httpd.textModeBanner = getTextModeBanner(baseDir) diff --git a/epicyon.py b/epicyon.py index a6d265f25..2384a9421 100644 --- a/epicyon.py +++ b/epicyon.py @@ -322,6 +322,16 @@ parser.add_argument("--brochMode", type=str2bool, nargs='?', const=True, default=False, help="Enable broch mode") +parser.add_argument("--nodeinfoaccounts", + dest='showNodeInfoAccounts', + type=str2bool, nargs='?', + const=True, default=False, + help="Show numbers of accounts within nodeinfo metadata") +parser.add_argument("--nodeinfoversion", + dest='showNodeInfoVersion', + type=str2bool, nargs='?', + const=True, default=False, + help="Show version number within nodeinfo metadata") parser.add_argument("--noKeyPress", dest='noKeyPress', type=str2bool, nargs='?', @@ -2600,6 +2610,16 @@ brochMode = \ if brochMode is not None: args.brochMode = bool(brochMode) +showNodeInfoAccounts = \ + getConfigParam(baseDir, 'showNodeInfoAccounts') +if showNodeInfoAccounts is not None: + args.showNodeInfoAccounts = bool(showNodeInfoAccounts) + +showNodeInfoVersion = \ + getConfigParam(baseDir, 'showNodeInfoVersion') +if showNodeInfoVersion is not None: + args.showNodeInfoVersion = bool(showNodeInfoVersion) + YTDomain = getConfigParam(baseDir, 'youtubedomain') if YTDomain: if '://' in YTDomain: @@ -2614,7 +2634,9 @@ if setTheme(baseDir, themeName, domain, print('Theme set to ' + themeName) if __name__ == "__main__": - runDaemon(args.brochMode, + runDaemon(args.showNodeInfoAccounts, + args.showNodeInfoVersion, + args.brochMode, args.verifyAllSignatures, args.sendThreadsTimeoutMins, args.dormantMonths, diff --git a/metadata.py b/metadata.py index 14db42f3e..4b512bffa 100644 --- a/metadata.py +++ b/metadata.py @@ -12,12 +12,27 @@ from utils import noOfAccounts from utils import noOfActiveAccountsMonthly -def metaDataNodeInfo(baseDir: str, registration: bool, version: str) -> {}: +def metaDataNodeInfo(baseDir: str, registration: bool, version: str, + showAccounts: bool) -> {}: """ /nodeinfo/2.0 endpoint + Also see https://socialhub.activitypub.rocks/t/ + fep-f1d5-nodeinfo-in-fediverse-software/1190/4 + + Note that there are security considerations with this. If an adversary + sees a lot of accounts and "local" posts then the instance may be + considered a higher priority target. + Also exposure of the version number and number of accounts could be + sensitive """ - activeAccounts = noOfAccounts(baseDir) - activeAccountsMonthly = noOfActiveAccountsMonthly(baseDir, 1) - activeAccountsHalfYear = noOfActiveAccountsMonthly(baseDir, 6) + if showAccounts: + activeAccounts = noOfAccounts(baseDir) + activeAccountsMonthly = noOfActiveAccountsMonthly(baseDir, 1) + activeAccountsHalfYear = noOfActiveAccountsMonthly(baseDir, 6) + else: + activeAccounts = 1 + activeAccountsMonthly = 1 + activeAccountsHalfYear = 1 + nodeinfo = { 'openRegistrations': registration, 'protocols': ['activitypub'], diff --git a/tests.py b/tests.py index 9c9213ce4..15bdb9ccf 100644 --- a/tests.py +++ b/tests.py @@ -504,8 +504,12 @@ def createServerAlice(path: str, domain: str, port: int, maxFollowers = 10 verifyAllSignatures = True brochMode = False + showNodeInfoAccounts = True + showNodeInfoVersion = True print('Server running: Alice') - runDaemon(brochMode, + runDaemon(showNodeInfoAccounts, + showNodeInfoVersion, + brochMode, verifyAllSignatures, sendThreadsTimeoutMins, dormantMonths, maxNewswirePosts, @@ -601,8 +605,12 @@ def createServerBob(path: str, domain: str, port: int, maxFollowers = 10 verifyAllSignatures = True brochMode = False + showNodeInfoAccounts = True + showNodeInfoVersion = True print('Server running: Bob') - runDaemon(brochMode, + runDaemon(showNodeInfoAccounts, + showNodeInfoVersion, + brochMode, verifyAllSignatures, sendThreadsTimeoutMins, dormantMonths, maxNewswirePosts, @@ -652,8 +660,12 @@ def createServerEve(path: str, domain: str, port: int, federationList: [], maxFollowers = 10 verifyAllSignatures = True brochMode = False + showNodeInfoAccounts = True + showNodeInfoVersion = True print('Server running: Eve') - runDaemon(brochMode, + runDaemon(showNodeInfoAccounts, + showNodeInfoVersion, + brochMode, verifyAllSignatures, sendThreadsTimeoutMins, dormantMonths, maxNewswirePosts, From 46accb7b40d512afa95775b9614cbb98ca6b6349 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 3 May 2021 11:17:21 +0100 Subject: [PATCH 03/16] NodeInfo metadata is unavailable during broch mode --- blocking.py | 7 +++++++ daemon.py | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/blocking.py b/blocking.py index ff59f2d4b..08f3f9eb3 100644 --- a/blocking.py +++ b/blocking.py @@ -627,6 +627,13 @@ def outboxUndoMute(baseDir: str, httpPrefix: str, print('DEBUG: post undo mute via c2s - ' + postFilename) +def brochModeIsActive(baseDir: str) -> bool: + """Returns true if broch mode is active + """ + allowFilename = baseDir + '/accounts/allowedinstances.txt' + return os.path.isfile(allowFilename) + + def setBrochMode(baseDir: str, domainFull: str, enabled: bool) -> None: """Broch mode can be used to lock down the instance during a period of time when it is temporarily under attack. diff --git a/daemon.py b/daemon.py index 9a2441a61..4d19cd489 100644 --- a/daemon.py +++ b/daemon.py @@ -110,6 +110,7 @@ from media import attachMedia from blocking import mutePost from blocking import unmutePost from blocking import setBrochMode +from blocking import brochModeIsActive from blocking import addBlock from blocking import removeBlock from blocking import addGlobalBlock @@ -972,14 +973,25 @@ class PubServer(BaseHTTPRequestHandler): if self.server.debug: print('DEBUG: nodeinfo ' + self.path) + # If we are in broch mode then don't show potentially + # sensitive metadata. + # For example, if this or allied instances are being attacked + # then numbers of accounts may be changing as people + # migrate, and that information may be useful to an adversary + brochMode = brochModeIsActive(self.server.baseDir) + nodeInfoVersion = self.server.projectVersion - if not self.server.showNodeInfoVersion: + if not self.server.showNodeInfoVersion or brochMode: nodeInfoVersion = '0.0.0' + showNodeInfoAccounts = self.server.showNodeInfoAccounts + if brochMode: + showNodeInfoAccounts = False + info = metaDataNodeInfo(self.server.baseDir, self.server.registration, nodeInfoVersion, - self.server.showNodeInfoAccounts) + showNodeInfoAccounts) if info: msg = json.dumps(info).encode('utf-8') msglen = len(msg) From 501885f5bb4bb49fccdf8f8ab377644428283054 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 3 May 2021 11:59:28 +0100 Subject: [PATCH 04/16] Instance metadata options in profile settings --- daemon.py | 18 ++++++++++++++++++ translations/ar.json | 4 +++- translations/ca.json | 4 +++- translations/cy.json | 4 +++- translations/de.json | 4 +++- translations/en.json | 4 +++- translations/es.json | 4 +++- translations/fr.json | 4 +++- translations/ga.json | 4 +++- translations/hi.json | 4 +++- translations/it.json | 4 +++- translations/ja.json | 4 +++- translations/ku.json | 4 +++- translations/oc.json | 4 +++- translations/pt.json | 4 +++- translations/ru.json | 4 +++- translations/zh.json | 4 +++- webapp_profile.py | 28 ++++++++++++++++++++++++++++ 18 files changed, 94 insertions(+), 16 deletions(-) diff --git a/daemon.py b/daemon.py index 4d19cd489..2c45af8d8 100644 --- a/daemon.py +++ b/daemon.py @@ -4703,6 +4703,24 @@ class PubServer(BaseHTTPRequestHandler): # on all incoming posts if path.startswith('/users/' + adminNickname + '/'): + showNodeInfoAccounts = False + if fields.get('showNodeInfoAccounts'): + if fields['showNodeInfoAccounts'] == 'on': + showNodeInfoAccounts = True + self.server.showNodeInfoAccounts = \ + showNodeInfoAccounts + setConfigParam(baseDir, "showNodeInfoAccounts", + showNodeInfoAccounts) + + showNodeInfoVersion = False + if fields.get('showNodeInfoVersion'): + if fields['showNodeInfoVersion'] == 'on': + showNodeInfoVersion = True + self.server.showNodeInfoVersion = \ + showNodeInfoVersion + setConfigParam(baseDir, "showNodeInfoVersion", + showNodeInfoVersion) + verifyAllSignatures = False if fields.get('verifyallsignatures'): if fields['verifyallsignatures'] == 'on': diff --git a/translations/ar.json b/translations/ar.json index fbd426865..a8ae3f47f 100644 --- a/translations/ar.json +++ b/translations/ar.json @@ -437,5 +437,7 @@ "viewButton": "عرض زر", "enterPetname": "أدخل PETNAME", "enterNotes": "أدخل الملاحظات", - "These access keys may be used": "قد يتم استخدام مفاتيح الوصول هذه، عادة مع مفتاح ALT + SHIFT + مفتاح ALT +" + "These access keys may be used": "قد يتم استخدام مفاتيح الوصول هذه، عادة مع مفتاح ALT + SHIFT + مفتاح ALT +", + "Show numbers of accounts within instance metadata": "إظهار عدد الحسابات داخل البيانات الوصفية للمثيلات", + "Show version number within instance metadata": "إظهار رقم الإصدار داخل البيانات الوصفية للمثيل" } diff --git a/translations/ca.json b/translations/ca.json index 589f5013c..6e8db45ac 100644 --- a/translations/ca.json +++ b/translations/ca.json @@ -437,5 +437,7 @@ "viewButton": "Botó Veure", "enterPetname": "Introduïu PETNAME", "enterNotes": "Introduïu notes", - "These access keys may be used": "Es poden utilitzar aquestes tecles d'accés, típicament amb Alt + Maj + tecla o Alt + clau" + "These access keys may be used": "Es poden utilitzar aquestes tecles d'accés, típicament amb Alt + Maj + tecla o Alt + clau", + "Show numbers of accounts within instance metadata": "Mostra el nombre de comptes a les metadades de la instància", + "Show version number within instance metadata": "Mostra el número de versió a les metadades de la instància" } diff --git a/translations/cy.json b/translations/cy.json index 2a3eb079f..012710f78 100644 --- a/translations/cy.json +++ b/translations/cy.json @@ -437,5 +437,7 @@ "viewButton": "Gweld y botwm", "enterPetname": "Rhowch enw PETName", "enterNotes": "Rhowch nodiadau", - "These access keys may be used": "Gellir defnyddio'r allweddi mynediad hyn, fel arfer gyda ALT + Shift + Allwedd Allwedd neu ALT +" + "These access keys may be used": "Gellir defnyddio'r allweddi mynediad hyn, fel arfer gyda ALT + Shift + Allwedd Allwedd neu ALT +", + "Show numbers of accounts within instance metadata": "Dangos nifer y cyfrifon o fewn metadata", + "Show version number within instance metadata": "Dangos rhif y fersiwn o fewn metadata" } diff --git a/translations/de.json b/translations/de.json index 6c50a2ddd..2ebf7d035 100644 --- a/translations/de.json +++ b/translations/de.json @@ -437,5 +437,7 @@ "viewButton": "Schaltfläche anzeigen", "enterPetname": "Petname eingeben", "enterNotes": "Notizen eingeben", - "These access keys may be used": "Diese Zugriffstasten können verwendet werden, typischerweise mit ALT + SHIFT + -Taste oder ALT + -Taste" + "These access keys may be used": "Diese Zugriffstasten können verwendet werden, typischerweise mit ALT + SHIFT + -Taste oder ALT + -Taste", + "Show numbers of accounts within instance metadata": "Anzahl der Konten in Instanzmetadaten anzeigen", + "Show version number within instance metadata": "Versionsnummer in Instanzmetadaten anzeigen" } diff --git a/translations/en.json b/translations/en.json index 0a5a5c8f2..242f8ef9d 100644 --- a/translations/en.json +++ b/translations/en.json @@ -437,5 +437,7 @@ "viewButton": "View button", "enterPetname": "Enter petname", "enterNotes": "Enter notes", - "These access keys may be used": "These access keys may be used, typically with ALT + SHIFT + key or ALT + key" + "These access keys may be used": "These access keys may be used, typically with ALT + SHIFT + key or ALT + key", + "Show numbers of accounts within instance metadata": "Show numbers of accounts within instance metadata", + "Show version number within instance metadata": "Show version number within instance metadata" } diff --git a/translations/es.json b/translations/es.json index 4c4a8b48f..cdd5b698f 100644 --- a/translations/es.json +++ b/translations/es.json @@ -437,5 +437,7 @@ "viewButton": "Botón de vista", "enterPetname": "Entrar en nombre de pettname", "enterNotes": "Ingresar notas", - "These access keys may be used": "Se pueden usar estas teclas de acceso, típicamente con teclas ALT + MAYÚS + teclas o ALT +" + "These access keys may be used": "Se pueden usar estas teclas de acceso, típicamente con teclas ALT + MAYÚS + teclas o ALT +", + "Show numbers of accounts within instance metadata": "Muestra el número de cuentas dentro de los metadatos de la instancia.", + "Show version number within instance metadata": "Mostrar el número de versión dentro de los metadatos de la instancia" } diff --git a/translations/fr.json b/translations/fr.json index a625f66fb..ad8f62cbf 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -437,5 +437,7 @@ "viewButton": "Bouton d'affichage", "enterPetname": "Entrez PETNAME", "enterNotes": "Faire entrer des notes", - "These access keys may be used": "Ces touches d'accès peuvent être utilisées typiquement avec une touche Alt + Maj + ou Alt +" + "These access keys may be used": "Ces touches d'accès peuvent être utilisées typiquement avec une touche Alt + Maj + ou Alt +", + "Show numbers of accounts within instance metadata": "Afficher le nombre de comptes dans les métadonnées de l'instance", + "Show version number within instance metadata": "Afficher le numéro de version dans les métadonnées de l'instance" } diff --git a/translations/ga.json b/translations/ga.json index 7f06c2759..ebb6d18d4 100644 --- a/translations/ga.json +++ b/translations/ga.json @@ -437,5 +437,7 @@ "viewButton": "Féach an cnaipe", "enterPetname": "Cuir isteach PetName", "enterNotes": "Cuir nótaí isteach", - "These access keys may be used": "Is féidir na heochracha rochtana seo a úsáid, de ghnáth le Alt + Shift + Eochair nó Alt + Eochair" + "These access keys may be used": "Is féidir na heochracha rochtana seo a úsáid, de ghnáth le Alt + Shift + Eochair nó Alt + Eochair", + "Show numbers of accounts within instance metadata": "Taispeáin líon na gcuntas laistigh de mheiteashonraí", + "Show version number within instance metadata": "Taispeáin uimhir an leagain laistigh de mheiteashonraí" } diff --git a/translations/hi.json b/translations/hi.json index be8a7b9f1..9861f5b43 100644 --- a/translations/hi.json +++ b/translations/hi.json @@ -437,5 +437,7 @@ "viewButton": "देखें बटन", "enterPetname": "PETNAME दर्ज करें", "enterNotes": "नोट्स दर्ज करें", - "These access keys may be used": "इन एक्सेस कुंजियों का उपयोग किया जा सकता है, आमतौर पर Alt + Shift + कुंजी या Alt + कुंजी के साथ" + "These access keys may be used": "इन एक्सेस कुंजियों का उपयोग किया जा सकता है, आमतौर पर Alt + Shift + कुंजी या Alt + कुंजी के साथ", + "Show numbers of accounts within instance metadata": "उदाहरण मेटाडेटा के भीतर खातों की संख्या दिखाएं", + "Show version number within instance metadata": "उदाहरण मेटाडेटा के भीतर संस्करण संख्या दिखाएं" } diff --git a/translations/it.json b/translations/it.json index 902b7adfe..be937bc46 100644 --- a/translations/it.json +++ b/translations/it.json @@ -437,5 +437,7 @@ "viewButton": "Visualizza il pulsante", "enterPetname": "Inserisci PetName", "enterNotes": "Inserisci le note", - "These access keys may be used": "Questi tasti di accesso possono essere utilizzati, in genere con tasto ALT + MAIUSC + o ALT + Key" + "These access keys may be used": "Questi tasti di accesso possono essere utilizzati, in genere con tasto ALT + MAIUSC + o ALT + Key", + "Show numbers of accounts within instance metadata": "Mostra il numero di account all'interno dei metadati dell'istanza", + "Show version number within instance metadata": "Mostra il numero di versione nei metadati dell'istanza" } diff --git a/translations/ja.json b/translations/ja.json index 8a14f543e..eca6ac0b0 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -437,5 +437,7 @@ "viewButton": "ボタンを見る", "enterPetname": "PetNameを入力してください", "enterNotes": "ノートを入力してください", - "These access keys may be used": "これらのアクセスキーは、通常はAlt + Shift +キーまたはAlt +キーを使用して使用できます。" + "These access keys may be used": "これらのアクセスキーは、通常はAlt + Shift +キーまたはAlt +キーを使用して使用できます。", + "Show numbers of accounts within instance metadata": "インスタンスメタデータ内のアカウント数を表示する", + "Show version number within instance metadata": "インスタンスメタデータ内にバージョン番号を表示する" } diff --git a/translations/ku.json b/translations/ku.json index 97dc9cc6a..a25fbbc43 100644 --- a/translations/ku.json +++ b/translations/ku.json @@ -437,5 +437,7 @@ "viewButton": "Bişkoja View", "enterPetname": "Porê binivîse", "enterNotes": "Nîşan binivîse", - "These access keys may be used": "Dibe ku ev keysên gihîştinê bikar bînin, bi gelemperî bi alt + shift + key an alt + key" + "These access keys may be used": "Dibe ku ev keysên gihîştinê bikar bînin, bi gelemperî bi alt + shift + key an alt + key", + "Show numbers of accounts within instance metadata": "Di nav metadata mînakê de hejmarên hesaban nîşan bidin", + "Show version number within instance metadata": "Di nav metadata mînakê de nimreya guhertoyê nîşan bide" } diff --git a/translations/oc.json b/translations/oc.json index b51578212..03e52d742 100644 --- a/translations/oc.json +++ b/translations/oc.json @@ -433,5 +433,7 @@ "viewButton": "View button", "enterPetname": "Enter petname", "enterNotes": "Enter notes", - "These access keys may be used": "These access keys may be used, typically with ALT + SHIFT + key or ALT + key" + "These access keys may be used": "These access keys may be used, typically with ALT + SHIFT + key or ALT + key", + "Show numbers of accounts within instance metadata": "Show numbers of accounts within instance metadata", + "Show version number within instance metadata": "Show version number within instance metadata" } diff --git a/translations/pt.json b/translations/pt.json index 6225a7986..4b2135f08 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -437,5 +437,7 @@ "viewButton": "Botão de visualização", "enterPetname": "Digite Petname", "enterNotes": "Digite notas", - "These access keys may be used": "Essas teclas de acesso podem ser usadas, normalmente com tecla Alt + Shift + Key ou Alt +" + "These access keys may be used": "Essas teclas de acesso podem ser usadas, normalmente com tecla Alt + Shift + Key ou Alt +", + "Show numbers of accounts within instance metadata": "Mostra o número de contas nos metadados da instância", + "Show version number within instance metadata": "Mostrar o número da versão nos metadados da instância" } diff --git a/translations/ru.json b/translations/ru.json index 460e78fcc..0fa03d6ad 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -437,5 +437,7 @@ "viewButton": "Кнопка просмотра", "enterPetname": "Введите petname", "enterNotes": "Введите ноты", - "These access keys may be used": "Эти ключевые ключи доступа могут быть использованы, обычно с ALT + Shift + Key или Alt + Key" + "These access keys may be used": "Эти ключевые ключи доступа могут быть использованы, обычно с ALT + Shift + Key или Alt + Key", + "Show numbers of accounts within instance metadata": "Показать количество учетных записей в метаданных экземпляра", + "Show version number within instance metadata": "Показать номер версии в метаданных экземпляра" } diff --git a/translations/zh.json b/translations/zh.json index 54c153c8e..06eaa96ca 100644 --- a/translations/zh.json +++ b/translations/zh.json @@ -437,5 +437,7 @@ "viewButton": "查看按钮", "enterPetname": "进入宠物名", "enterNotes": "输入笔记", - "These access keys may be used": "可以使用这些访问密钥,通常使用Alt + Shift +键或ALT +键" + "These access keys may be used": "可以使用这些访问密钥,通常使用Alt + Shift +键或ALT +键", + "Show numbers of accounts within instance metadata": "显示实例元数据中的帐户数", + "Show version number within instance metadata": "在实例元数据中显示版本号" } diff --git a/webapp_profile.py b/webapp_profile.py index 446fd47f8..59115eab9 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -1350,6 +1350,33 @@ def htmlEditProfile(cssCache: {}, translate: {}, baseDir: str, path: str, instanceStr += \ '

\n' + + nodeInfoStr = \ + translate['Show numbers of accounts within instance metadata'] + if getConfigParam(baseDir, "showNodeInfoAccounts"): + instanceStr += \ + ' ' + \ + nodeInfoStr + '
\n' + else: + instanceStr += \ + ' ' + \ + nodeInfoStr + '
\n' + + nodeInfoStr = \ + translate['Show version number within instance metadata'] + if getConfigParam(baseDir, "showNodeInfoVersion"): + instanceStr += \ + ' ' + \ + nodeInfoStr + '
\n' + else: + instanceStr += \ + ' ' + \ + nodeInfoStr + '
\n' + if getConfigParam(baseDir, "verifyAllSignatures"): instanceStr += \ ' ' + \ translate['Verify all signatures'] + '
\n' + instanceStr += translate['Enabling broch mode'] + '
\n' if getConfigParam(baseDir, "brochMode"): instanceStr += \ From ea588262ef66bd29d3605f1334fd89d676ff5629 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 3 May 2021 23:31:06 +0100 Subject: [PATCH 05/16] Bookmarks search --- daemon.py | 38 ++++++++++++++++++++++++++++-- translations/en.json | 2 +- utils.py | 56 ++++++++++++++++++++++++++++++++++++++++++++ webapp_search.py | 11 +++++---- 4 files changed, 100 insertions(+), 7 deletions(-) diff --git a/daemon.py b/daemon.py index 2c45af8d8..fb4893ac4 100644 --- a/daemon.py +++ b/daemon.py @@ -2852,7 +2852,7 @@ class PubServer(BaseHTTPRequestHandler): elif searchStr.startswith('!'): # your post history search nickname = getNicknameFromActor(actorStr) - searchStr = searchStr.replace('!', '').strip() + searchStr = searchStr.replace('!', '', 1).strip() historyStr = \ htmlHistorySearch(self.server.cssCache, self.server.translate, @@ -2874,7 +2874,7 @@ class PubServer(BaseHTTPRequestHandler): self.server.showPublishedDateOnly, self.server.peertubeInstances, self.server.allowLocalNetworkAccess, - self.server.themeName) + self.server.themeName, 'outbox') if historyStr: msg = historyStr.encode('utf-8') msglen = len(msg) @@ -2883,6 +2883,40 @@ class PubServer(BaseHTTPRequestHandler): self._write(msg) self.server.POSTbusy = False return + elif searchStr.startswith('-'): + # bookmark search + nickname = getNicknameFromActor(actorStr) + searchStr = searchStr.replace('-', '', 1).strip() + bookmarksStr = \ + htmlHistorySearch(self.server.cssCache, + self.server.translate, + baseDir, + httpPrefix, + nickname, + domain, + searchStr, + maxPostsInFeed, + pageNumber, + self.server.projectVersion, + self.server.recentPostsCache, + self.server.maxRecentPosts, + self.server.session, + self.server.cachedWebfingers, + self.server.personCache, + port, + self.server.YTReplacementDomain, + self.server.showPublishedDateOnly, + self.server.peertubeInstances, + self.server.allowLocalNetworkAccess, + self.server.themeName, 'bookmarks') + if bookmarksStr: + msg = bookmarksStr.encode('utf-8') + msglen = len(msg) + self._login_headers('text/html', + msglen, callingDomain) + self._write(msg) + self.server.POSTbusy = False + return elif ('@' in searchStr or ('://' in searchStr and hasUsersPath(searchStr))): diff --git a/translations/en.json b/translations/en.json index 242f8ef9d..3997c6488 100644 --- a/translations/en.json +++ b/translations/en.json @@ -90,7 +90,7 @@ "View": "View", "Stop blocking": "Stop blocking", "Enter an emoji name to search for": "Enter an emoji name to search for", - "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for", + "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Enter an address, shared item, -bookmark, !history, #hashtag, *skill or :emoji: to search for", "Go Back": "◀", "Moderation Information": "Moderation Information", "Suspended accounts": "Suspended accounts", diff --git a/utils.py b/utils.py index 2542e90a0..763997b78 100644 --- a/utils.py +++ b/utils.py @@ -1678,6 +1678,59 @@ def isNewsPost(postJsonObject: {}) -> bool: return postJsonObject.get('news') +def _searchVirtualBoxPosts(baseDir: str, nickname: str, domain: str, + searchStr: str, maxResults: int, + boxName: str) -> []: + """Searches through a virtual box, which is typically an index on the inbox + """ + indexFilename = \ + baseDir + '/accounts/' + nickname + '@' + domain + '/' + \ + boxName + '.index' + if boxName == 'bookmarks': + boxName = 'inbox' + path = baseDir + '/accounts/' + nickname + '@' + domain + '/' + boxName + if not os.path.isdir(path): + return [] + + searchStr = searchStr.lower().strip() + + if '+' in searchStr: + searchWords = searchStr.split('+') + for index in range(len(searchWords)): + searchWords[index] = searchWords[index].strip() + print('SEARCH: ' + str(searchWords)) + else: + searchWords = [searchStr] + + res = [] + with open(indexFilename, 'r') as indexFile: + postFilename = 'start' + while postFilename: + postFilename = indexFile.readline() + if not postFilename: + break + if '.json' not in postFilename: + break + postFilename = path + '/' + postFilename.strip() + if not os.path.isfile(postFilename): + continue + with open(postFilename, 'r') as postFile: + data = postFile.read().lower() + + notFound = False + for keyword in searchWords: + if keyword not in data: + notFound = True + break + if notFound: + continue + + res.append(postFilename) + if len(res) >= maxResults: + return res + return res + + def searchBoxPosts(baseDir: str, nickname: str, domain: str, searchStr: str, maxResults: int, boxName='outbox') -> []: @@ -1686,6 +1739,9 @@ def searchBoxPosts(baseDir: str, nickname: str, domain: str, """ path = baseDir + '/accounts/' + nickname + '@' + domain + '/' + boxName if not os.path.isdir(path): + if os.path.isfile(path + '.index'): + return _searchVirtualBoxPosts(baseDir, nickname, domain, + searchStr, maxResults, boxName) return [] searchStr = searchStr.lower().strip() diff --git a/webapp_search.py b/webapp_search.py index 284c86425..83cd0625d 100644 --- a/webapp_search.py +++ b/webapp_search.py @@ -536,7 +536,7 @@ def htmlHistorySearch(cssCache: {}, translate: {}, baseDir: str, showPublishedDateOnly: bool, peertubeInstances: [], allowLocalNetworkAccess: bool, - themeName: str) -> str: + themeName: str, boxName: str) -> str: """Show a page containing search results for your post history """ if historysearch.startswith('!'): @@ -546,7 +546,7 @@ def htmlHistorySearch(cssCache: {}, translate: {}, baseDir: str, boxFilenames = \ searchBoxPosts(baseDir, nickname, domain, - historysearch, postsPerPage) + historysearch, postsPerPage, boxName) cssFilename = baseDir + '/epicyon-profile.css' if os.path.isfile(baseDir + '/epicyon.css'): @@ -560,10 +560,13 @@ def htmlHistorySearch(cssCache: {}, translate: {}, baseDir: str, # add the page title domainFull = getFullDomain(domain, port) actor = httpPrefix + '://' + domainFull + '/users/' + nickname + historySearchTitle = '🔍 ' + translate['Your Posts'] + if boxName == 'tlbookmarks': + historySearchTitle = '🔍 ' + translate['Bookmarks'] + historySearchForm += \ '

' + \ - translate['Your Posts'] + \ - '

' + historySearchTitle + '' if len(boxFilenames) == 0: historySearchForm += \ From 4a351100f8d7aff8241ae6726aea057f94fc7e5f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 3 May 2021 23:33:12 +0100 Subject: [PATCH 06/16] Search results title --- webapp_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_search.py b/webapp_search.py index 83cd0625d..7148e57d2 100644 --- a/webapp_search.py +++ b/webapp_search.py @@ -561,7 +561,7 @@ def htmlHistorySearch(cssCache: {}, translate: {}, baseDir: str, domainFull = getFullDomain(domain, port) actor = httpPrefix + '://' + domainFull + '/users/' + nickname historySearchTitle = '🔍 ' + translate['Your Posts'] - if boxName == 'tlbookmarks': + if boxName == 'bookmarks': historySearchTitle = '🔍 ' + translate['Bookmarks'] historySearchForm += \ From d5c23b4dff5bb73430be7c810b527ee475a57456 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 3 May 2021 23:35:45 +0100 Subject: [PATCH 07/16] Consistent terminology --- translations/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/en.json b/translations/en.json index 3997c6488..c8a29aed5 100644 --- a/translations/en.json +++ b/translations/en.json @@ -90,7 +90,7 @@ "View": "View", "Stop blocking": "Stop blocking", "Enter an emoji name to search for": "Enter an emoji name to search for", - "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Enter an address, shared item, -bookmark, !history, #hashtag, *skill or :emoji: to search for", + "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Enter an address, shared item, -save, !history, #hashtag, *skill or :emoji: to search for", "Go Back": "◀", "Moderation Information": "Moderation Information", "Suspended accounts": "Suspended accounts", From eeeec162977bb95016a39aef7b490a0802ce0b37 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 4 May 2021 10:39:15 +0100 Subject: [PATCH 08/16] Include documents within nodeinfo --- daemon.py | 13 +++++++++++++ metadata.py | 9 ++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index fb4893ac4..9808b2cee 100644 --- a/daemon.py +++ b/daemon.py @@ -988,7 +988,20 @@ class PubServer(BaseHTTPRequestHandler): if brochMode: showNodeInfoAccounts = False + if callingDomain.endswith('.onion') and \ + self.server.onionDomain: + instanceUrl = 'http://' + self.server.onionDomain + elif (callingDomain.endswith('.i2p') and + self.server.i2pDomain): + instanceUrl = 'http://' + self.server.i2pDomain + else: + instanceUrl = \ + self.server.httpPrefix + '://' + self.server.domainFull + + aboutUrl = instanceUrl + '/about' + termsOfServiceUrl = instanceUrl + '/terms' info = metaDataNodeInfo(self.server.baseDir, + aboutUrl, termsOfServiceUrl, self.server.registration, nodeInfoVersion, showNodeInfoAccounts) diff --git a/metadata.py b/metadata.py index 4b512bffa..046461a91 100644 --- a/metadata.py +++ b/metadata.py @@ -12,7 +12,10 @@ from utils import noOfAccounts from utils import noOfActiveAccountsMonthly -def metaDataNodeInfo(baseDir: str, registration: bool, version: str, +def metaDataNodeInfo(baseDir: str, + aboutUrl: str, + termsOfServiceUrl: str, + registration: bool, version: str, showAccounts: bool) -> {}: """ /nodeinfo/2.0 endpoint Also see https://socialhub.activitypub.rocks/t/ @@ -40,6 +43,10 @@ def metaDataNodeInfo(baseDir: str, registration: bool, version: str, 'name': 'epicyon', 'version': version }, + 'documents': { + 'about': aboutUrl, + 'terms': termsOfServiceUrl + }, 'usage': { 'localPosts': 1, 'users': { From 4b82938b7c291e8231287b67678b99506c0ecdec Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 4 May 2021 11:17:06 +0100 Subject: [PATCH 09/16] Tidying --- daemon.py | 61 +++++++++++++++++++++++++++++++++++++---------------- metadata.py | 6 +++--- 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/daemon.py b/daemon.py index 9808b2cee..d4d951794 100644 --- a/daemon.py +++ b/daemon.py @@ -822,7 +822,12 @@ class PubServer(BaseHTTPRequestHandler): authorized: bool, httpPrefix: str, baseDir: str, nickname: str, domain: str, - domainFull: str) -> bool: + domainFull: str, + onionDomain: str, i2pDomain: str, + translate: {}, + registration: bool, + systemLanguage: str, + projectVersion: str) -> bool: """This is a vestigil mastodon API for the purpose of returning an empty result to sites like https://mastopeek.app-dist.eu @@ -900,30 +905,37 @@ class PubServer(BaseHTTPRequestHandler): sendJson = [] sendJsonStr = 'masto API timelines sent' - adminNickname = getConfigParam(self.server.baseDir, 'admin') + adminNickname = getConfigParam(baseDir, 'admin') if adminNickname and path == '/api/v1/instance': instanceDescriptionShort = \ - getConfigParam(self.server.baseDir, + getConfigParam(baseDir, 'instanceDescriptionShort') if not instanceDescriptionShort: instanceDescriptionShort = \ - self.server.translate['Yet another Epicyon Instance'] - instanceDescription = getConfigParam(self.server.baseDir, + translate['Yet another Epicyon Instance'] + instanceDescription = getConfigParam(baseDir, 'instanceDescription') - instanceTitle = getConfigParam(self.server.baseDir, - 'instanceTitle') + instanceTitle = getConfigParam(baseDir, 'instanceTitle') + + if callingDomain.endswith('.onion') and onionDomain: + domainFull = onionDomain + httpPrefix = 'http' + elif (callingDomain.endswith('.i2p') and i2pDomain): + domainFull = i2pDomain + httpPrefix = 'http' + sendJson = \ metaDataInstance(instanceTitle, instanceDescriptionShort, instanceDescription, - self.server.httpPrefix, - self.server.baseDir, + httpPrefix, + baseDir, adminNickname, - self.server.domain, - self.server.domainFull, - self.server.registration, - self.server.systemLanguage, - self.server.projectVersion) + domain, + domainFull, + registration, + systemLanguage, + projectVersion) sendJsonStr = 'masto API instance metadata sent' elif path.startswith('/api/v1/instance/peers'): # This is just a dummy result. @@ -931,7 +943,7 @@ class PubServer(BaseHTTPRequestHandler): # On a large instance you are somewhat lost in the crowd, but on # small instances a full list of peers would convey a lot of # information about the interests of a small number of accounts - sendJson = ['mastodon.social', self.server.domainFull] + sendJson = ['mastodon.social', domainFull] sendJsonStr = 'masto API peers metadata sent' elif path.startswith('/api/v1/instance/activity'): sendJson = [] @@ -962,10 +974,17 @@ class PubServer(BaseHTTPRequestHandler): def _mastoApi(self, path: str, callingDomain: str, authorized: bool, httpPrefix: str, baseDir: str, nickname: str, domain: str, - domainFull: str) -> bool: + domainFull: str, + onionDomain: str, i2pDomain: str, + translate: {}, + registration: bool, + systemLanguage: str, + projectVersion: str) -> bool: return self._mastoApiV1(path, callingDomain, authorized, httpPrefix, baseDir, nickname, domain, - domainFull) + domainFull, onionDomain, i2pDomain, + translate, registration, systemLanguage, + projectVersion) def _nodeinfo(self, callingDomain: str) -> bool: if not self.path.startswith('/nodeinfo/2.0'): @@ -10801,7 +10820,13 @@ class PubServer(BaseHTTPRequestHandler): self.server.baseDir, self.authorizedNickname, self.server.domain, - self.server.domainFull): + self.server.domainFull, + self.server.onionDomain, + self.server.i2pDomain, + self.server.translate, + self.server.registration, + self.server.systemLanguage, + self.server.projectVersion): return self._benchmarkGETtimings(GETstartTime, GETtimings, diff --git a/metadata.py b/metadata.py index 046461a91..c8bee73c1 100644 --- a/metadata.py +++ b/metadata.py @@ -105,13 +105,13 @@ def metaDataInstance(instanceTitle: str, 'id': '1', 'last_status_at': '2019-07-01T10:30:00Z', 'locked': adminActor['manuallyApprovesFollowers'], - 'note': '

Admin of '+domain+'

', + 'note': '

Admin of ' + domain + '

', 'statuses_count': 1, 'url': url, 'username': adminActor['preferredUsername'] }, 'description': instanceDescription, - 'email': 'admin@'+domain, + 'email': 'admin@' + domain, 'languages': [systemLanguage], 'registrations': registration, 'short_description': instanceDescriptionShort, @@ -120,7 +120,7 @@ def metaDataInstance(instanceTitle: str, 'status_count': 1, 'user_count': noOfAccounts(baseDir) }, - 'thumbnail': httpPrefix+'://'+domainFull+'/login.png', + 'thumbnail': httpPrefix + '://' + domainFull + '/login.png', 'title': instanceTitle, 'uri': domainFull, 'urls': {}, From 8b476f745d48cef0ae945e43ef2b40787818de6e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 4 May 2021 13:04:31 +0100 Subject: [PATCH 10/16] Declate before use --- daemon.py | 115 ++++++++++++++---------------------------------------- 1 file changed, 30 insertions(+), 85 deletions(-) diff --git a/daemon.py b/daemon.py index d4d951794..721c9c1ad 100644 --- a/daemon.py +++ b/daemon.py @@ -312,6 +312,20 @@ def saveDomainQrcode(baseDir: str, httpPrefix: str, class PubServer(BaseHTTPRequestHandler): protocol_version = 'HTTP/1.1' + def _getInstalceUrl(self, callingDomain: str) -> str: + """Returns the URL for this instance + """ + if callingDomain.endswith('.onion') and \ + self.server.onionDomain: + instanceUrl = 'http://' + self.server.onionDomain + elif (callingDomain.endswith('.i2p') and + self.server.i2pDomain): + instanceUrl = 'http://' + self.server.i2pDomain + else: + instanceUrl = \ + self.server.httpPrefix + '://' + self.server.domainFull + return instanceUrl + def _getheaderSignatureInput(self): """There are different versions of http signatures with different header styles @@ -1007,16 +1021,7 @@ class PubServer(BaseHTTPRequestHandler): if brochMode: showNodeInfoAccounts = False - if callingDomain.endswith('.onion') and \ - self.server.onionDomain: - instanceUrl = 'http://' + self.server.onionDomain - elif (callingDomain.endswith('.i2p') and - self.server.i2pDomain): - instanceUrl = 'http://' + self.server.i2pDomain - else: - instanceUrl = \ - self.server.httpPrefix + '://' + self.server.domainFull - + instanceUrl = self._getInstalceUrl(callingDomain) aboutUrl = instanceUrl + '/about' termsOfServiceUrl = instanceUrl + '/terms' info = metaDataNodeInfo(self.server.baseDir, @@ -1621,6 +1626,7 @@ class PubServer(BaseHTTPRequestHandler): """ usersPath = path.replace('/moderationaction', '') nickname = usersPath.replace('/users/', '') + actorStr = httpPrefix + '://' + domainFull + usersPath if not isModerator(self.server.baseDir, nickname): if callingDomain.endswith('.onion') and onionDomain: actorStr = 'http://' + onionDomain + usersPath @@ -1631,7 +1637,6 @@ class PubServer(BaseHTTPRequestHandler): self.server.POSTbusy = False return - actorStr = httpPrefix + '://' + domainFull + usersPath length = int(self.headers['Content-length']) try: @@ -6321,12 +6326,7 @@ class PubServer(BaseHTTPRequestHandler): if not self.postToNickname: print('WARN: unable to find nickname in ' + actor) self.server.GETbusy = False - actorAbsolute = \ - httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + \ '?page=' + str(pageNumber) @@ -6368,12 +6368,8 @@ class PubServer(BaseHTTPRequestHandler): if self.server.iconsCache.get('repeat.png'): del self.server.iconsCache['repeat.png'] self._postToOutboxThread(announceJson) - self.server.GETbusy = False - actorAbsolute = httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif callingDomain.endswith('.i2p') and i2pDomain: - actorAbsolute = 'http://' + i2pDomain + actor + self.server.GETbusy = False + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + '?page=' + \ str(pageNumber) + timelineBookmark @@ -6420,11 +6416,7 @@ class PubServer(BaseHTTPRequestHandler): if not self.postToNickname: print('WARN: unable to find nickname in ' + actor) self.server.GETbusy = False - actorAbsolute = httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + '?page=' + \ str(pageNumber) @@ -6463,11 +6455,7 @@ class PubServer(BaseHTTPRequestHandler): del self.server.iconsCache['repeat_inactive.png'] self._postToOutboxThread(newUndoAnnounce) self.server.GETbusy = False - actorAbsolute = httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + '?page=' + \ str(pageNumber) + timelineBookmark @@ -6725,12 +6713,7 @@ class PubServer(BaseHTTPRequestHandler): if not self.postToNickname: print('WARN: unable to find nickname in ' + actor) self.server.GETbusy = False - actorAbsolute = \ - httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + \ '?page=' + str(pageNumber) + timelineBookmark @@ -6780,12 +6763,7 @@ class PubServer(BaseHTTPRequestHandler): # send out the like to followers self._postToOutbox(likeJson, self.server.projectVersion) self.server.GETbusy = False - actorAbsolute = \ - httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + \ '?page=' + str(pageNumber) + timelineBookmark @@ -6832,12 +6810,7 @@ class PubServer(BaseHTTPRequestHandler): if not self.postToNickname: print('WARN: unable to find nickname in ' + actor) self.server.GETbusy = False - actorAbsolute = \ - httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif (callingDomain.endswith('.i2p') and onionDomain): - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + \ '?page=' + str(pageNumber) @@ -6887,11 +6860,7 @@ class PubServer(BaseHTTPRequestHandler): # send out the undo like to followers self._postToOutbox(undoLikeJson, self.server.projectVersion) self.server.GETbusy = False - actorAbsolute = httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif callingDomain.endswith('.i2p') and i2pDomain: - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + \ '?page=' + str(pageNumber) + timelineBookmark @@ -6939,12 +6908,7 @@ class PubServer(BaseHTTPRequestHandler): if not self.postToNickname: print('WARN: unable to find nickname in ' + actor) self.server.GETbusy = False - actorAbsolute = \ - httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif callingDomain.endswith('.i2p') and i2pDomain: - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + \ '?page=' + str(pageNumber) @@ -6983,12 +6947,7 @@ class PubServer(BaseHTTPRequestHandler): del self.server.iconsCache['bookmark.png'] # self._postToOutbox(bookmarkJson, self.server.projectVersion) self.server.GETbusy = False - actorAbsolute = \ - httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif callingDomain.endswith('.i2p') and i2pDomain: - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + \ '?page=' + str(pageNumber) + timelineBookmark @@ -7035,12 +6994,7 @@ class PubServer(BaseHTTPRequestHandler): if not self.postToNickname: print('WARN: unable to find nickname in ' + actor) self.server.GETbusy = False - actorAbsolute = \ - httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif callingDomain.endswith('.i2p') and i2pDomain: - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + \ '?page=' + str(pageNumber) @@ -7079,12 +7033,7 @@ class PubServer(BaseHTTPRequestHandler): del self.server.iconsCache['bookmark_inactive.png'] # self._postToOutbox(undoBookmarkJson, self.server.projectVersion) self.server.GETbusy = False - actorAbsolute = \ - httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif callingDomain.endswith('.i2p') and i2pDomain: - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + \ '?page=' + str(pageNumber) + timelineBookmark @@ -7689,11 +7638,7 @@ class PubServer(BaseHTTPRequestHandler): self.server.GETbusy = False return True actor = path.replace('/skills', '') - actorAbsolute = httpPrefix + '://' + domainFull + actor - if callingDomain.endswith('.onion') and onionDomain: - actorAbsolute = 'http://' + onionDomain + actor - elif callingDomain.endswith('.i2p') and i2pDomain: - actorAbsolute = 'http://' + i2pDomain + actor + actorAbsolute = self._getInstalceUrl(callingDomain) + actor self._redirect_headers(actorAbsolute, cookie, callingDomain) self.server.GETbusy = False return True From fd51d6322d971f058ab27a6023ac3165113491b1 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 4 May 2021 13:23:52 +0100 Subject: [PATCH 11/16] Tidying --- daemon.py | 185 +++++------------------------------------------------- 1 file changed, 14 insertions(+), 171 deletions(-) diff --git a/daemon.py b/daemon.py index 721c9c1ad..6724ce694 100644 --- a/daemon.py +++ b/daemon.py @@ -1626,14 +1626,10 @@ class PubServer(BaseHTTPRequestHandler): """ usersPath = path.replace('/moderationaction', '') nickname = usersPath.replace('/users/', '') - actorStr = httpPrefix + '://' + domainFull + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath if not isModerator(self.server.baseDir, nickname): - if callingDomain.endswith('.onion') and onionDomain: - actorStr = 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorStr = 'http://' + i2pDomain + usersPath - self._redirect_headers(actorStr + '/moderation', - cookie, callingDomain) + self._redirect_headers(actorStr + '/moderation', + cookie, callingDomain) self.server.POSTbusy = False return @@ -1823,10 +1819,6 @@ class PubServer(BaseHTTPRequestHandler): debug, self.server.recentPostsCache) - if callingDomain.endswith('.onion') and onionDomain: - actorStr = 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorStr = 'http://' + i2pDomain + usersPath self._redirect_headers(actorStr + '/moderation', cookie, callingDomain) self.server.POSTbusy = False @@ -2795,7 +2787,7 @@ class PubServer(BaseHTTPRequestHandler): path = path.split('?page=')[0] usersPath = path.replace('/searchhandle', '') - actorStr = httpPrefix + '://' + domainFull + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath length = int(self.headers['Content-length']) try: searchParams = self.rfile.read(length).decode('utf-8') @@ -2817,10 +2809,6 @@ class PubServer(BaseHTTPRequestHandler): return if 'submitBack=' in searchParams: # go back on search screen - if callingDomain.endswith('.onion') and onionDomain: - actorStr = 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorStr = 'http://' + i2pDomain + usersPath self._redirect_headers(actorStr + '/' + self.server.defaultTimeline, cookie, callingDomain) @@ -2960,10 +2948,7 @@ class PubServer(BaseHTTPRequestHandler): if searchStr.endswith(':') or \ searchStr.endswith(';') or \ searchStr.endswith('.'): - if callingDomain.endswith('.onion') and onionDomain: - actorStr = 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorStr = 'http://' + i2pDomain + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath self._redirect_headers(actorStr + '/search', cookie, callingDomain) self.server.POSTbusy = False @@ -3052,10 +3037,7 @@ class PubServer(BaseHTTPRequestHandler): self.server.POSTbusy = False return else: - if callingDomain.endswith('.onion') and onionDomain: - actorStr = 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and i2pDomain): - actorStr = 'http://' + i2pDomain + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath self._redirect_headers(actorStr + '/search', cookie, callingDomain) self.server.POSTbusy = False @@ -3100,10 +3082,7 @@ class PubServer(BaseHTTPRequestHandler): self._write(msg) self.server.POSTbusy = False return - if callingDomain.endswith('.onion') and onionDomain: - actorStr = 'http://' + onionDomain + usersPath - elif callingDomain.endswith('.i2p') and i2pDomain: - actorStr = 'http://' + i2pDomain + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath self._redirect_headers(actorStr + '/' + self.server.defaultTimeline, cookie, callingDomain) @@ -3437,7 +3416,7 @@ class PubServer(BaseHTTPRequestHandler): """ usersPath = path.replace('/linksdata', '') usersPath = usersPath.replace('/editlinks', '') - actorStr = httpPrefix + '://' + domainFull + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath if ' boundary=' in self.headers['Content-type']: boundary = self.headers['Content-type'].split('boundary=')[1] if ';' in boundary: @@ -3449,14 +3428,6 @@ class PubServer(BaseHTTPRequestHandler): if nickname: editor = isEditor(baseDir, nickname) if not nickname or not editor: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath if not nickname: print('WARN: nickname not found in ' + actorStr) else: @@ -3469,14 +3440,6 @@ class PubServer(BaseHTTPRequestHandler): # check that the POST isn't too large if length > self.server.maxPostLength: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath print('Maximum links data length exceeded ' + str(length)) self._redirect_headers(actorStr, cookie, callingDomain) self.server.POSTbusy = False @@ -3550,14 +3513,6 @@ class PubServer(BaseHTTPRequestHandler): os.remove(TOSFilename) # redirect back to the default timeline - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath self._redirect_headers(actorStr + '/' + defaultTimeline, cookie, callingDomain) self.server.POSTbusy = False @@ -3590,7 +3545,7 @@ class PubServer(BaseHTTPRequestHandler): self._404() return usersPath = usersPath.split('/tags/')[0] - actorStr = httpPrefix + '://' + domainFull + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath tagScreenStr = actorStr + '/tags/' + hashtag if ' boundary=' in self.headers['Content-type']: boundary = self.headers['Content-type'].split('boundary=')[1] @@ -3603,14 +3558,6 @@ class PubServer(BaseHTTPRequestHandler): if nickname: editor = isEditor(baseDir, nickname) if not hashtag or not editor: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath if not nickname: print('WARN: nickname not found in ' + actorStr) else: @@ -3623,14 +3570,6 @@ class PubServer(BaseHTTPRequestHandler): # check that the POST isn't too large if length > self.server.maxPostLength: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath print('Maximum links data length exceeded ' + str(length)) self._redirect_headers(tagScreenStr, cookie, callingDomain) self.server.POSTbusy = False @@ -3673,14 +3612,6 @@ class PubServer(BaseHTTPRequestHandler): os.remove(categoryFilename) # redirect back to the default timeline - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath self._redirect_headers(tagScreenStr, cookie, callingDomain) self.server.POSTbusy = False @@ -3695,7 +3626,7 @@ class PubServer(BaseHTTPRequestHandler): """ usersPath = path.replace('/newswiredata', '') usersPath = usersPath.replace('/editnewswire', '') - actorStr = httpPrefix + '://' + domainFull + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath if ' boundary=' in self.headers['Content-type']: boundary = self.headers['Content-type'].split('boundary=')[1] if ';' in boundary: @@ -3707,14 +3638,6 @@ class PubServer(BaseHTTPRequestHandler): if nickname: moderator = isModerator(baseDir, nickname) if not nickname or not moderator: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath if not nickname: print('WARN: nickname not found in ' + actorStr) else: @@ -3727,14 +3650,6 @@ class PubServer(BaseHTTPRequestHandler): # check that the POST isn't too large if length > self.server.maxPostLength: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath print('Maximum newswire data length exceeded ' + str(length)) self._redirect_headers(actorStr, cookie, callingDomain) self.server.POSTbusy = False @@ -3812,14 +3727,6 @@ class PubServer(BaseHTTPRequestHandler): os.remove(newswireTrustedFilename) # redirect back to the default timeline - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath self._redirect_headers(actorStr + '/' + defaultTimeline, cookie, callingDomain) self.server.POSTbusy = False @@ -3835,7 +3742,7 @@ class PubServer(BaseHTTPRequestHandler): update button on the citations screen """ usersPath = path.replace('/citationsdata', '') - actorStr = httpPrefix + '://' + domainFull + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath nickname = getNicknameFromActor(actorStr) citationsFilename = \ @@ -3855,14 +3762,6 @@ class PubServer(BaseHTTPRequestHandler): # check that the POST isn't too large if length > self.server.maxPostLength: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath print('Maximum citations data length exceeded ' + str(length)) self._redirect_headers(actorStr, cookie, callingDomain) self.server.POSTbusy = False @@ -3915,14 +3814,6 @@ class PubServer(BaseHTTPRequestHandler): citationsFile.close() # redirect back to the default timeline - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath self._redirect_headers(actorStr + '/newblog', cookie, callingDomain) self.server.POSTbusy = False @@ -3937,7 +3828,7 @@ class PubServer(BaseHTTPRequestHandler): """ usersPath = path.replace('/newseditdata', '') usersPath = usersPath.replace('/editnewspost', '') - actorStr = httpPrefix + '://' + domainFull + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath if ' boundary=' in self.headers['Content-type']: boundary = self.headers['Content-type'].split('boundary=')[1] if ';' in boundary: @@ -3949,14 +3840,6 @@ class PubServer(BaseHTTPRequestHandler): if nickname: editorRole = isEditor(baseDir, nickname) if not nickname or not editorRole: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath if not nickname: print('WARN: nickname not found in ' + actorStr) else: @@ -3974,14 +3857,6 @@ class PubServer(BaseHTTPRequestHandler): # check that the POST isn't too large if length > self.server.maxPostLength: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath print('Maximum news data length exceeded ' + str(length)) if self.server.newsInstance: self._redirect_headers(actorStr + '/tlfeatures', @@ -4068,14 +3943,6 @@ class PubServer(BaseHTTPRequestHandler): saveJson(postJsonObject, postFilename) # redirect back to the default timeline - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath if self.server.newsInstance: self._redirect_headers(actorStr + '/tlfeatures', cookie, callingDomain) @@ -4096,7 +3963,7 @@ class PubServer(BaseHTTPRequestHandler): """ usersPath = path.replace('/profiledata', '') usersPath = usersPath.replace('/editprofile', '') - actorStr = httpPrefix + '://' + domainFull + usersPath + actorStr = self._getInstalceUrl(callingDomain) + usersPath if ' boundary=' in self.headers['Content-type']: boundary = self.headers['Content-type'].split('boundary=')[1] if ';' in boundary: @@ -4105,14 +3972,6 @@ class PubServer(BaseHTTPRequestHandler): # get the nickname nickname = getNicknameFromActor(actorStr) if not nickname: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath print('WARN: nickname not found in ' + actorStr) self._redirect_headers(actorStr, cookie, callingDomain) self.server.POSTbusy = False @@ -4122,14 +3981,6 @@ class PubServer(BaseHTTPRequestHandler): # check that the POST isn't too large if length > self.server.maxPostLength: - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath print('Maximum profile data length exceeded ' + str(length)) self._redirect_headers(actorStr, cookie, callingDomain) @@ -5346,14 +5197,6 @@ class PubServer(BaseHTTPRequestHandler): return # redirect back to the profile screen - if callingDomain.endswith('.onion') and \ - onionDomain: - actorStr = \ - 'http://' + onionDomain + usersPath - elif (callingDomain.endswith('.i2p') and - i2pDomain): - actorStr = \ - 'http://' + i2pDomain + usersPath self._redirect_headers(actorStr + redirectPath, cookie, callingDomain) self.server.POSTbusy = False @@ -6368,7 +6211,7 @@ class PubServer(BaseHTTPRequestHandler): if self.server.iconsCache.get('repeat.png'): del self.server.iconsCache['repeat.png'] self._postToOutboxThread(announceJson) - self.server.GETbusy = False + self.server.GETbusy = False actorAbsolute = self._getInstalceUrl(callingDomain) + actor actorPathStr = \ actorAbsolute + '/' + timelineStr + '?page=' + \ From 73f1fea0b05b7db8f20c604864b420cd80c26df4 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 4 May 2021 13:39:19 +0100 Subject: [PATCH 12/16] Consistent spelling --- inbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inbox.py b/inbox.py index da64d8f54..3f8b5566c 100644 --- a/inbox.py +++ b/inbox.py @@ -2973,7 +2973,7 @@ def runInboxQueue(recentPostsCache: {}, maxRecentPosts: int, if hasValidContext(originalJson): hasJsonSignature = True else: - print('unrecognised @context: ' + + print('unrecognized @context: ' + str(originalJson['@context'])) # strict enforcement of json signatures From c3a91fc574407a2a5c540078651090909365624c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 4 May 2021 13:51:08 +0100 Subject: [PATCH 13/16] Store unknown contexts --- inbox.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/inbox.py b/inbox.py index 3f8b5566c..0ea654c66 100644 --- a/inbox.py +++ b/inbox.py @@ -2973,8 +2973,24 @@ def runInboxQueue(recentPostsCache: {}, maxRecentPosts: int, if hasValidContext(originalJson): hasJsonSignature = True else: + unknownContextsFile = \ + baseDir + '/accounts/unknownContexts.txt' + unknownContext = str(originalJson['@context']) + print('unrecognized @context: ' + - str(originalJson['@context'])) + unknownContext) + + alreadyUnknown = False + if os.path.isfile(unknownContextsFile): + if unknownContext in \ + open(unknownContextsFile).read(): + alreadyUnknown = True + + if not alreadyUnknown: + unknownFile = open(unknownContextsFile, "a+") + if unknownFile: + unknownFile.write(unknownContext + '\n') + unknownFile.close() # strict enforcement of json signatures if not hasJsonSignature: From 857b788ae1c25d65dff4cd81c2428453dd3532b9 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 4 May 2021 14:06:27 +0100 Subject: [PATCH 14/16] Record any unknown json sigtaure types --- inbox.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/inbox.py b/inbox.py index 0ea654c66..b35498529 100644 --- a/inbox.py +++ b/inbox.py @@ -2991,6 +2991,24 @@ def runInboxQueue(recentPostsCache: {}, maxRecentPosts: int, if unknownFile: unknownFile.write(unknownContext + '\n') unknownFile.close() + else: + print('Unrecognized jsonld signature type: ' + + jwebsigType) + + unknownSignaturesFile = \ + baseDir + '/accounts/unknownJsonSignatures.txt' + + alreadyUnknown = False + if os.path.isfile(unknownSignaturesFile): + if jwebsigType in \ + open(unknownSignaturesFile).read(): + alreadyUnknown = True + + if not alreadyUnknown: + unknownFile = open(unknownSignaturesFile, "a+") + if unknownFile: + unknownFile.write(jwebsigType + '\n') + unknownFile.close() # strict enforcement of json signatures if not hasJsonSignature: From ae1e0f67faf7cba089b8d728d14a3fae3fa1bb48 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 4 May 2021 14:30:04 +0100 Subject: [PATCH 15/16] Consistent square shaped avatar image --- epicyon-profile.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 29978a54f..754bb0bc5 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -341,7 +341,7 @@ a:focus { } .profileHeader .title { - border-radius: 50%; + border-radius: 10%; position: absolute; bottom: 100%; left: 25px; From 29c7287f8f9e71efafff6b694b037c3debc0e3e9 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 4 May 2021 15:18:58 +0100 Subject: [PATCH 16/16] Rite of passage --- defaultwelcome/final_ar.md | 9 +++++++++ defaultwelcome/final_ca.md | 9 +++++++++ defaultwelcome/final_cy.md | 9 +++++++++ defaultwelcome/final_en.md | 9 +++++++++ defaultwelcome/final_es.md | 9 +++++++++ defaultwelcome/final_fr.md | 9 +++++++++ defaultwelcome/final_ga.md | 9 +++++++++ defaultwelcome/final_hi.md | 9 +++++++++ defaultwelcome/final_it.md | 9 +++++++++ defaultwelcome/final_ja.md | 9 +++++++++ defaultwelcome/final_ku.md | 9 +++++++++ defaultwelcome/final_oc.md | 9 +++++++++ defaultwelcome/final_pt.md | 9 +++++++++ defaultwelcome/final_ru.md | 9 +++++++++ defaultwelcome/final_zh.md | 9 +++++++++ 15 files changed, 135 insertions(+) diff --git a/defaultwelcome/final_ar.md b/defaultwelcome/final_ar.md index 0d663d636..8b0ab6f2e 100644 --- a/defaultwelcome/final_ar.md +++ b/defaultwelcome/final_ar.md @@ -7,3 +7,12 @@ يؤدي تحديد **الشعار في الجزء العلوي** من الشاشة إلى التبديل بين عرض المخطط الزمني وملف التعريف الخاص بك. لن يتم تحديث الشاشة تلقائيًا عند وصول المنشورات ، لذا استخدم **F5** أو زر البريد الوارد للتحديث. + +#### طقوس المرور +تدربك ثقافة الشركة على الرغبة في الحصول على أكبر عدد من المتابعين والإعجابات - للبحث عن الشهرة الشخصية والتفاعلات السطحية التي تثير الغضب لجذب الانتباه. + +لذلك إذا كنت قادمًا من تلك الثقافة ، فيرجى العلم أن هذا نوع مختلف من النظام مع مجموعة مختلفة جدًا من التوقعات. + +ليس من الضروري وجود الكثير من المتابعين ، وغالبًا ما يكون غير مرغوب فيه. قد يحظرك الناس ، ولا بأس بذلك. لا أحد لديه الحق في جمهور. إذا قام شخص ما بحظرك فأنت لا تخضع للرقابة. يمارس الناس فقط حريتهم في الارتباط بمن يرغبون فيه. + +من المتوقع أن تكون معايير السلوك الشخصي أفضل مما هي عليه في أنظمة الشركات. سلوكك له أيضًا عواقب على سمعة هذه الحالة. إذا كنت تتصرف بطريقة متهورة تتعارض مع شروط الخدمة ، فقد يتم تعليق حسابك أو إزالته. diff --git a/defaultwelcome/final_ca.md b/defaultwelcome/final_ca.md index deff371ba..5731d031c 100644 --- a/defaultwelcome/final_ca.md +++ b/defaultwelcome/final_ca.md @@ -7,3 +7,12 @@ Utilitzeu la icona de **lupa** 🔍 per cercar manetes fedivers i seguir les per Si seleccioneu el **bàner a la part superior** de la pantalla es canvia entre la visualització de la línia de temps i el vostre perfil. La pantalla no s'actualitzarà automàticament quan arribin les publicacions, així que utilitzeu **F5** o el botó **Safata d'entrada** per actualitzar. + +#### Ritu de pas +La cultura corporativa us capacita per desitjar el màxim nombre de seguidors i gustos: per buscar fama personal i interaccions poc profundes i indignants per cridar l'atenció. + +Per tant, si proveniu d’aquesta cultura, tingueu en compte que es tracta d’un tipus de sistema diferent amb un conjunt d’expectatives molt diferents. + +No és necessari tenir molts seguidors i sovint no és desitjable. És possible que la gent us bloquegi i això està bé. Ningú no té dret a un públic. Si algú et bloqueja, no et censuraran. La gent només exerceix la seva llibertat per associar-se amb qui vulgui. + +S'espera que els estàndards de comportament personal siguin millors que en els sistemes corporatius. El vostre comportament també té conseqüències per a la reputació d'aquesta instància. Si us comporteu de manera desmesurada que va en contra de les condicions del servei, el vostre compte es pot suspendre o eliminar. diff --git a/defaultwelcome/final_cy.md b/defaultwelcome/final_cy.md index 12211aa7a..e3b866af3 100644 --- a/defaultwelcome/final_cy.md +++ b/defaultwelcome/final_cy.md @@ -7,3 +7,12 @@ Defnyddiwch yr eicon **chwyddwydr** 🔍 i chwilio am ddolenni bwydo a dilyn pob Mae dewis y faner **ar frig** y sgrin yn newid rhwng yr olygfa llinell amser a'ch proffil. Ni fydd y sgrin yn adnewyddu'n awtomatig pan fydd pyst yn cyrraedd, felly defnyddiwch **F5** neu'r botwm **Mewnflwch** i adnewyddu. + +#### Defod y Tocyn +Mae diwylliant corfforaethol yn eich hyfforddi i fod eisiau'r nifer uchaf o ddilynwyr a hoff bethau - i geisio enwogrwydd personol a rhyngweithio bas, sy'n achosi dicter, i fachu sylw. + +Felly os ydych chi'n dod o'r diwylliant hwnnw, byddwch yn ymwybodol bod hon yn fath wahanol o system gyda set wahanol iawn o ddisgwyliadau. + +Nid oes angen cael llawer o ddilynwyr, ac yn aml mae'n annymunol. Efallai y bydd pobl yn eich rhwystro chi, ac mae hynny'n iawn. Nid oes gan neb hawl i gynulleidfa. Os bydd rhywun yn eich blocio yna nid ydych chi'n cael eich sensro. Mae pobl yn arfer eu rhyddid i gysylltu â phwy bynnag maen nhw'n dymuno. + +Disgwylir i safonau ymddygiad personol fod yn well nag yn y systemau corfforaethol. Mae gan eich ymddygiad ganlyniadau i enw da'r achos hwn hefyd. Os ydych chi'n ymddwyn mewn modd anystyriol sy'n mynd yn groes i'r telerau gwasanaeth yna gellir atal neu ddileu eich cyfrif. diff --git a/defaultwelcome/final_en.md b/defaultwelcome/final_en.md index 81aad26cd..c5c8a498e 100644 --- a/defaultwelcome/final_en.md +++ b/defaultwelcome/final_en.md @@ -7,3 +7,12 @@ Use the **magnifier** icon 🔍 to search for fediverse handles and follow peopl Selecting the **banner at the top** of the screen switches between timeline view and your profile. The screen will not automatically refresh when posts arrive, so use **F5** or the **Inbox** button to refresh. + +#### Rite of Passage +Corporate culture trains you to want the maximum number of followers and likes - to seek personal fame and shallow, outrage-inducing interactions to grab attention. + +So if you are coming from that culture, please be aware that this is a different type of system with a very different set of expectations. + +Having a lot of followers is not necessary, and often it's undesirable. People may block you, and that's ok. Nobody has a right to an audience. If someone blocks you then you're not being censored. People are just exercising their freedom to associate with whoever they wish. + +Standards of personal behavior are expected to be better than in the corporate systems. Your behavior also has consequences for the reputation of this instance. If you behave in an inconsiderate manner which goes against the terms of service then your account may be suspended or removed. diff --git a/defaultwelcome/final_es.md b/defaultwelcome/final_es.md index 9050750a9..b6408449d 100644 --- a/defaultwelcome/final_es.md +++ b/defaultwelcome/final_es.md @@ -7,3 +7,12 @@ Utilice el icono de **lupa** 🔍 para buscar identificadores de fediverse y seg Al seleccionar el **banner en la parte superior** de la pantalla, se cambia entre la vista de línea de tiempo y su perfil. La pantalla no se actualizará automáticamente cuando lleguen las publicaciones, así que use **F5** o el botón **Bandeja de entrada** para actualizar. + +#### Rito de paso +La cultura corporativa te entrena para querer el máximo número de seguidores y me gusta, para buscar fama personal e interacciones superficiales e indignantes para llamar la atención. + +Entonces, si viene de esa cultura, tenga en cuenta que este es un tipo diferente de sistema con un conjunto de expectativas muy diferente. + +No es necesario tener muchos seguidores y, a menudo, no es deseable. Es posible que la gente te bloquee, y eso está bien. Nadie tiene derecho a una audiencia. Si alguien te bloquea, no estás siendo censurado. La gente simplemente está ejerciendo su libertad para asociarse con quien quiera. + +Se espera que los estándares de comportamiento personal sean mejores que los de los sistemas corporativos. Su comportamiento también tiene consecuencias para la reputación de esta instancia. Si se comporta de manera desconsiderada que va en contra de los términos de servicio, su cuenta puede ser suspendida o eliminada. diff --git a/defaultwelcome/final_fr.md b/defaultwelcome/final_fr.md index 272133245..fb6c5e768 100644 --- a/defaultwelcome/final_fr.md +++ b/defaultwelcome/final_fr.md @@ -7,3 +7,12 @@ Utilisez l'icône **loupe** 🔍 pour rechercher des poignées fediverse et suiv La sélection de la **bannière en haut** de l'écran bascule entre la vue chronologique et votre profil. L'écran ne s'actualisera pas automatiquement à l'arrivée des messages, utilisez donc **F5** ou le bouton **Boîte de réception** pour actualiser. + +#### Rite de passage +La culture d'entreprise vous entraîne à vouloir le maximum de followers et de likes - à rechercher une renommée personnelle et des interactions superficielles et indignées pour attirer l'attention. + +Donc, si vous venez de cette culture, sachez qu'il s'agit d'un type de système différent avec un ensemble d'attentes très différent. + +Avoir beaucoup d'adeptes n'est pas nécessaire et souvent indésirable. Les gens peuvent vous bloquer, et ce n'est pas grave. Personne n'a droit à une audience. Si quelqu'un vous bloque, vous n'êtes pas censuré. Les gens exercent simplement leur liberté de s'associer avec qui ils veulent. + +On s'attend à ce que les normes de comportement personnel soient meilleures que dans les systèmes d'entreprise. Votre comportement a également des conséquences sur la réputation de cette instance. Si vous vous comportez d'une manière inconsidérée qui va à l'encontre des conditions d'utilisation, votre compte peut être suspendu ou supprimé. diff --git a/defaultwelcome/final_ga.md b/defaultwelcome/final_ga.md index b8c1e576b..4f7995df7 100644 --- a/defaultwelcome/final_ga.md +++ b/defaultwelcome/final_ga.md @@ -7,3 +7,12 @@ Tá tú réidh anois chun Epicyon a úsáid. Is spás sóisialta measartha é se Ag roghnú an bhratach **ag barr** na lasca scáileáin idir amharc amlíne agus do phróifíl. Ní dhéanfaidh an scáileán athnuachan go huathoibríoch nuair a thiocfaidh na poist, mar sin bain úsáid as **F5** nó an cnaipe **Bosca Isteach** chun athnuachan a dhéanamh. + +#### Deasghnáth an Phasáiste +Cuireann an cultúr corparáideach oiliúint ort go dteastaíonn uait an líon is mó leantóirí agus a leithéidí - clú agus cáil phearsanta agus idirghníomhaíochtaí éadomhain, spreagtha a lorg chun aird a tharraingt. + +Mar sin má tá tú ag teacht ón gcultúr sin, bí ar an eolas gur cineál difriúil córais é seo le tacar ionchais an-difriúil. + +Ní gá go leor leantóirí a bheith agat, agus go minic bíonn sé neamh-inmhianaithe. Féadfaidh daoine bac a chur ort, agus tá sé sin ceart go leor. Níl sé de cheart ag aon duine lucht féachana a fháil. Má chuireann duine bac ort níl cinsireacht á dhéanamh ort. Níl ach a saoirse á fheidhmiú ag daoine chun caidreamh a dhéanamh le cibé duine is mian leo. + +Meastar go mbeidh caighdeáin iompraíochta pearsanta níos fearr ná sna córais chorparáideacha. Tá iarmhairtí ag d’iompar freisin ar cháil an cháis seo. Má iompraíonn tú ar bhealach neamhfhreagrach a théann i gcoinne na dtéarmaí seirbhíse ansin féadfar do chuntas a chur ar fionraí nó a bhaint. diff --git a/defaultwelcome/final_hi.md b/defaultwelcome/final_hi.md index 971af274c..81a156b72 100644 --- a/defaultwelcome/final_hi.md +++ b/defaultwelcome/final_hi.md @@ -7,3 +7,12 @@ समय दृश्य और आपकी प्रोफ़ाइल के बीच स्क्रीन स्विच के शीर्ष **पर स्थित** बैनर का चयन करना। पोस्ट आने पर स्क्रीन अपने आप रिफ्रेश नहीं होगी, इसलिए रीफ्रेश करने के लिए **F5** या **इनबॉक्स** बटन का उपयोग करें। + +#### यादगार घटना +कॉरपोरेट कल्चर आपको अधिक से अधिक संख्या में अनुयायियों और पसंदों को प्राप्त करने के लिए प्रशिक्षित करता है - ध्यान आकर्षित करने के लिए व्यक्तिगत प्रसिद्धि और उथले, नाराजगी-उत्प्रेरण बातचीत। + +इसलिए यदि आप उस संस्कृति से आ रहे हैं, तो कृपया ध्यान रखें कि यह एक अलग प्रकार की प्रणाली है जिसमें बहुत अलग अपेक्षाएं हैं। + +बहुत सारे अनुयायी होना आवश्यक नहीं है, और अक्सर यह अवांछनीय है। लोग आपको ब्लॉक कर सकते हैं, और यह ठीक है। किसी को भी एक दर्शक का अधिकार नहीं है। अगर कोई आपको ब्लॉक करता है तो आपको सेंसर नहीं किया जा रहा है। लोग बस अपनी स्वतंत्रता का प्रयोग कर रहे हैं कि वे जो चाहें करें। + +व्यक्तिगत व्यवहार के मानक कॉर्पोरेट सिस्टम की तुलना में बेहतर होने की उम्मीद है। इस उदाहरण की प्रतिष्ठा के लिए आपके व्यवहार के परिणाम भी हैं। यदि आप एक असंगत तरीके से व्यवहार करते हैं जो सेवा की शर्तों के खिलाफ जाता है तो आपका खाता निलंबित या हटाया जा सकता है। diff --git a/defaultwelcome/final_it.md b/defaultwelcome/final_it.md index 818b231f9..4b3eaab34 100644 --- a/defaultwelcome/final_it.md +++ b/defaultwelcome/final_it.md @@ -7,3 +7,12 @@ Usa l'icona **lente d'ingrandimento** 🔍 per cercare gli handle di fediverse e Selezionando il **banner nella parte superiore** dello schermo si passa dalla visualizzazione della sequenza temporale al tuo profilo. La schermata non si aggiornerà automaticamente all'arrivo dei post, quindi utilizza **F5** o il pulsante **Posta in arrivo** per aggiornare. + +#### Rito di passaggio +La cultura aziendale ti insegna a desiderare il numero massimo di follower e Mi piace, a cercare la fama personale e interazioni superficiali e indignate per attirare l'attenzione. + +Quindi, se vieni da quella cultura, tieni presente che questo è un tipo diverso di sistema con un insieme di aspettative molto diverso. + +Avere molti follower non è necessario e spesso è indesiderabile. Le persone potrebbero bloccarti, e va bene. Nessuno ha diritto a un pubblico. Se qualcuno ti blocca, non verrai censurato. Le persone stanno solo esercitando la loro libertà di associarsi con chi desiderano. + +Gli standard di comportamento personale dovrebbero essere migliori rispetto ai sistemi aziendali. Il tuo comportamento ha anche conseguenze sulla reputazione di questa istanza. Se ti comporti in modo sconsiderato che va contro i termini di servizio, il tuo account potrebbe essere sospeso o rimosso. diff --git a/defaultwelcome/final_ja.md b/defaultwelcome/final_ja.md index 40b4e2575..8183dd287 100644 --- a/defaultwelcome/final_ja.md +++ b/defaultwelcome/final_ja.md @@ -7,3 +7,12 @@ 画面の上部にある **バナー** を選択すると、タイムラインビューとプロファイルが切り替わります。 投稿が到着しても画面は自動的に更新されないため、 **F5** または **受信トレイ** ボタンを使用して更新してください。 + +#### 通過儀礼 +企業文化は、最大数のフォロワーや好きな人を求め、個人的な名声と浅い、怒りを誘発する相互作用を求めて注目を集めるように訓練します。 + +したがって、その文化から来ている場合、これは非常に異なる一連の期待を持つ異なるタイプのシステムであることに注意してください。 + +多くのフォロワーを持つ必要はなく、多くの場合、それは望ましくありません。 人々があなたをブロックするかもしれません、そしてそれは大丈夫です。 誰も聴衆に対する権利を持っていません。 誰かがあなたをブロックした場合、あなたは検閲されていません。 人々は、彼らが望む誰とでも交際する自由を行使しているだけです。 + +個人の行動基準は、企業システムよりも優れていると期待されています。 あなたの行動は、このインスタンスの評判にも影響を及ぼします。 利用規約に違反する軽率な行動をとった場合、アカウントが停止または削除される可能性があります。 diff --git a/defaultwelcome/final_ku.md b/defaultwelcome/final_ku.md index 957eaa1d7..5a5914dd2 100644 --- a/defaultwelcome/final_ku.md +++ b/defaultwelcome/final_ku.md @@ -7,3 +7,12 @@ Hûn niha amade ne ku dest bi karanîna Epicyon bikin. Ev cîhek civakî ya nerm Hilbijartina **pankarta li jor** a switches-ekranê di navbera dîtina demjimêr û profîla we de. Dema ku şande tên dîmender dê bixweber nûve nebe, ji ber vê yekê **F5** an bişkoja **Inbox** ji bo nûvekirinê bikar bînin. + +#### Rêûresma Derbasbûnê +Çanda pargîdaniyê we perwerde dike ku hûn jimara herî zêde şopîner û hezên xwe bixwazin - li navdariyek kesane û têkiliyên kûr, hêrs-lêgerîn digerin da ku balê bikişînin. + +Ji ber vê yekê heke hûn ji wê çandê têne, ji kerema xwe hay ji xwe hebin ku ev pergalek celebek cuda ye ku bi bendewariyek pir cûda ye. + +Hebûna gelek şagirtan ne hewce ye, û pir caran ew nexwaze. Mirov dikare we bloke bike, û ew baş e. Mafê kesî tune ku guhdar bike. Ger kesek we bloke bike wê hingê hûn nayên sansur kirin. Mirov tenê azadiya xwe ya ku bi kî bixwaze re têkildar dibe bikar tîne. + +Tê payîn ku standardên tevgera kesane ji pergalên pargîdaniyê çêtir in. Reftara we ji bo navûdengê vê nimûneyê jî encam dide. Heke hûn bi rengek bêhesib tevdigerin ku li dijî şertên karûbarê ye wê hingê dibe ku hesabê we were sekinandin an rakirin. diff --git a/defaultwelcome/final_oc.md b/defaultwelcome/final_oc.md index ef9eb2601..49a17693c 100644 --- a/defaultwelcome/final_oc.md +++ b/defaultwelcome/final_oc.md @@ -7,3 +7,12 @@ Use the **magnifier** icon 🔍 to search for fediverse handles and follow peopl Selecting the **banner at the top** of the screen switches between timeline view and your profile. The screen will not automatically refresh when posts arrive, so use **F5** or the **Inbox** button to refresh. + +#### Rite of Passage +Corporate culture trains you to want the maximum number of followers and likes - to seek personal fame and shallow, outrage-inducing interactions to grab attention. + +So if you are coming from that culture, please be aware that this is a different type of system with a very different set of expectations. + +Having a lot of followers is not necessary, and often it's undesirable. People may block you, and that's ok. Nobody has a right to an audience. If someone blocks you then you're not being censored. People are just exercising their freedom to associate with whoever they wish. + +Standards of personal behavior are expected to be better than in the corporate systems. Your behavior also has consequences for the reputation of this instance. If you behave in an inconsiderate manner which goes against the terms of service then your account may be suspended or removed. diff --git a/defaultwelcome/final_pt.md b/defaultwelcome/final_pt.md index 3f8cdf87b..b96b0a4b3 100644 --- a/defaultwelcome/final_pt.md +++ b/defaultwelcome/final_pt.md @@ -7,3 +7,12 @@ Use o ícone de **lupa** 🔍 para pesquisar as alças do fediverse e seguir pes Selecionar o **banner na parte superior** da tela alterna entre a visualização da linha do tempo e seu perfil. A tela não será atualizada automaticamente quando as postagens chegarem, então use **F5** ou o botão **Caixa de entrada** para atualizar. + +#### Rito de passagem +A cultura corporativa treina você a querer o número máximo de seguidores e curtidas - a buscar fama pessoal e interações superficiais que induzem à indignação para chamar a atenção. + +Portanto, se você vem dessa cultura, saiba que esse é um tipo diferente de sistema, com um conjunto de expectativas muito diferente. + +Não é necessário ter muitos seguidores e, muitas vezes, é indesejável. As pessoas podem bloquear você, e tudo bem. Ninguém tem direito a audiência. Se alguém bloqueia você, você não está sendo censurado. As pessoas estão apenas exercendo sua liberdade de se associar com quem quiserem. + +Espera-se que os padrões de comportamento pessoal sejam melhores do que os sistemas corporativos. Seu comportamento também tem consequências para a reputação desta instância. Se você se comportar de maneira imprudente que vá contra os termos de serviço, sua conta poderá ser suspensa ou removida. diff --git a/defaultwelcome/final_ru.md b/defaultwelcome/final_ru.md index 31e11700f..993edc44b 100644 --- a/defaultwelcome/final_ru.md +++ b/defaultwelcome/final_ru.md @@ -7,3 +7,12 @@ При выборе **баннера вверху** экрана выполняется переключение между представлением временной шкалы и вашим профилем. Экран не обновляется автоматически при поступлении сообщений, поэтому используйте **F5** или кнопку **Входящие** для обновления. + +#### Обряд посвящения +Корпоративная культура учит вас стремиться к максимальному количеству подписчиков и лайков - стремиться к личной славе и поверхностным, вызывающим возмущение взаимодействиям, чтобы привлечь внимание. + +Так что, если вы происходите из этой культуры, имейте в виду, что это другой тип системы с совершенно другим набором ожиданий. + +Не обязательно иметь много подписчиков, а зачастую и нежелательно. Люди могут заблокировать вас, и это нормально. Никто не имеет права на аудиенцию. Если кто-то вас блокирует, значит, вы не подвергаетесь цензуре. Люди просто пользуются своей свободой общаться с кем хотят. + +Ожидается, что стандарты личного поведения будут лучше, чем в корпоративных системах. Ваше поведение также влияет на репутацию этого экземпляра. Если вы ведете себя невнимательно, что противоречит условиям обслуживания, ваша учетная запись может быть приостановлена или удалена. diff --git a/defaultwelcome/final_zh.md b/defaultwelcome/final_zh.md index 1cd50c41b..542ce6a67 100644 --- a/defaultwelcome/final_zh.md +++ b/defaultwelcome/final_zh.md @@ -7,3 +7,12 @@ 选择屏幕顶部的横幅广告可在时间轴视图和个人资料之间切换。 帖子到达时,屏幕不会自动刷新,因此请使用F5或“收件箱”按钮刷新。 + +#### 通行礼 +企业文化训练您想要最大数量的追随者和喜欢的人-寻求个人名望和肤浅,激怒的互动来吸引注意力。 + +因此,如果您来自这种文化,请注意,这是另一种类型的系统,具有不同的期望值。 + +拥有大量的追随者不是必需的,而且通常是不可取的。 人们可能会阻止您,没关系。 没有人有听众的权利。 如果有人阻止了您,那么您将不会受到审查。 人们只是在行使与任何希望的人交往的自由。 + +个人行为标准有望比公司系统更好。 您的行为也会对该实例的声誉产生影响。 如果您的行为举止粗鲁,违反了服务条款,那么您的帐户可能会被暂停或删除。