soc.octade.net is a Fediverse instance that uses the ActivityPub protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.

This server runs the snac software and there is no automatic sign-up process.

Admin email
social@octade.net

Search results for tag #fediverse

[?]Ivy Cyber » 🤖 🌐
@ivycyber@privacysafe.social

🛡️ news & tips across the

“1984 x Barbie 💗 for

Surveillance - but make it aesthetic 💅🏻✨

(This is just a shop CCTV - but we should all be worried about the normalisation and aestheticisation of surveillance 👀 📸)

...”

pixelfed.social/p/NotAHopeInHa

🤖 via RSS feed. Not an endorsement.

    [?]Ivy Cyber » 🤖 🌐
    @ivycyber@privacysafe.social

    🛡️ news & tips across the

    “King and Queen’s Royal Ascot procession facing challenges from 'biggest equine flu outbreak in recent history'

    https:// web.brid.gy/r/https://www.mirr or.co.uk/sport/horse-racing/royal-ascot-procession-equine-flu...”

    web.brid.gy/r/https://www.mirr

    🤖 via RSS feed. Not an endorsement.

      [?]Ivy Cyber » 🤖 🌐
      @ivycyber@privacysafe.social

      🛡️ news & tips across the

      “https:// youtu.be/v9Vb3hTxdP4?si=YkHt8X iUuV-zY3Hx Mostly of interest to Americans, but not exclusively. # privacy # CyberSecurity # usa # SurveillanceCapitalism # activism # activist # surveilla...”

      mstdn.ca/@theyycmonk/116595824

      🤖 via RSS feed. Not an endorsement.

        wolf boosted

        [?]Jupiter Rowland » 🌐
        @jupiter_rowland@hub.netzgemeinde.eu

        @PepeCyBs Welt Das hat alles gleich mehrere Gründe.

        Zunächst einmal wollen diese Institutionen eigentlich "nur" von 𝕏 weg. Sie brauchen "nur" einen Twitter-Ersatz. Da nehmen sie dann den nächstbesten, nächstgrößten. Auch deshalb gehen viele nach Bluesky: Das ist inzwischen bekannter, das hat mehr Nutzer, das verspricht mehr Reichweite. Ins Fediverse kommen sie höchstens, wenn sie dann einen Twitter-Ersatz-Ersatz brauchen.

        Dann ist das Fediverse jenseits von Mastodon viel zu unbekannt. Selbst auf Mastodon glaubt eine Mehrheit, das Fediverse wäre ein reines Mastodon-Netzwerk. Vom Rest wissen viele höchstens noch von Pixelfed und PeerTube und glauben, das wären so etwas wie Instagram- bzw. YouTube-Add-ons für Mastodon.

        Außerhalb von Mastodon ist aus dem Fediverse überhaupt nur Mastodon bekannt. Jeder Fediverse-Neuling wird direkt nach Mastodon geholt und erfährt vorher kein bißchen darüber, daß das Fediverse noch mehr bietet als Mastodon. Leute wie @pade kämpfen mit regelrechtem Feuereifer dafür, daß Leute, die noch nicht im Fediverse sind, "der Einfachheit halber" nur von Mastodon erfahren und ihnen gegenüber das Fediverse mit Mastodon gleichgesetzt wird.

        Wer dann doch von anderen Fediverse-Serveranwendungen erfährt, begreift damit häufig noch nicht, daß die auch alle miteinander und auch mit Mastodon verbunden sind. Das habe ich ja Anfang letzten Jahres erlebt, als es einen kleinen Facebook-Exodus gab und Leute, die schon auf Mastodon waren, sich zusätzlich ein Friendica-Konto zulegten, um mit denjenigen ihrer Freunde in Verbindung zu bleiben, die von Facebook nach Friendica umzogen. Es war für sie völlig unvorstellbar, daß Mastodon und Friendica miteinander verbunden sind. Als sie dann davon erfuhren, in einem gewagten Experiment versuchten, mit ihrem Mastodon-Konto ihrem Friendica-Konto zu folgen, und das dann wider Erwarten sogar funktionierte, fielen sie komplett vom Glauben ab.

        Letztlich sind Organisationen, Institutionen und andere Gruppierungen sehr viel schwerfälliger als einzelne Privatpersonen. Es ist für sie schon ein riesiges organisatorisches Unterfangen, überhaupt nach Mastodon zu gehen und dort ein Konto zu bespielen. Bis sie auch nur von der Existenz und den Möglichkeiten von Friendica oder Hubzilla erfahren, vergeht sehr, sehr viel mehr Zeit als bei privaten Mastodon-Nutzern, von denen viele ja auch noch nie von Friendica und fast gar keine von Hubzilla gehört haben.

        Somit zieht auch nicht das Argument, daß sie "erstmal" nach Mastodon gehen und "dann später mal" sich was anderes angucken. Das wird nie passieren. Dafür sind sie zu träge und die Entscheidungswege zu lang.

        Es gibt übrigens genau eine politische Partei, die im Fediverse ist, aber nicht (nur) auf Mastodon. Und das ist die deutsche Piratenpartei. Die hatte schon ihren eigenen Friendica-Node, als es Mastodon noch gar nicht gab, und hat ihn heute noch. Und natürlich gibt es kaum Piraten, die den nutzen, weil auch die Netzaffinität der allermeisten Piraten nicht über "Fediverse = Mastodon" hinausgeht.

        #Long #LongPost #CWLong #CWLongPost #LangerPost #CWLangerPost #FediMeta #FediverseMeta #CWFediMeta #CWFediverseMeta #Fediverse #Mastodon #NichtNurMastodon #Friendica #Hubzilla

          [?]Ivy Cyber » 🤖 🌐
          @ivycyber@privacysafe.social

          🛡️ news & tips across the

          “# scrum # scrumteam # dev # developer # qa # scrummaster # productowner # surveillance # surveillancesoftware # Meme # memes # Humor # humour”

          techhub.social/@FakeScrumStats

          🤖 via RSS feed. Not an endorsement.

            [?]Ivy Cyber » 🤖 🌐
            @ivycyber@privacysafe.social

            🛡️ news & tips across the

            “Input your license plate to see if Flock cameras have scanned your car. https:// haveibeenflocked.com/ # Surveillance # Flock # Spying # Licenseplate”

            kolektiva.social/@MHowell/1165

            🤖 via RSS feed. Not an endorsement.

              [?]Ivy Cyber » 🤖 🌐
              @ivycyber@privacysafe.social

              🛡️ news & tips across the

              “I don't have (nor would I recommend) doorbell cameras from Ring, blink, etc. I personally use a Reolink PoE doorbell camera that connects to a recorder locally and does not interact with the internet what so ever. If p...”

              defcon.social/@Modus_Operandi/

              🤖 via RSS feed. Not an endorsement.

                [?]IT Notes - https://it-notes.dragas.net » 🤖 🌐
                @itnotes@snac.it-notes.dragas.net

                FediMeteo, HAProxy, and the art of not wasting snac threads

                When I wrote about FediMeteo (https://it-notes.dragas.net/2025/02/26/fedimeteo-how-a-tiny-freebsd-vps-became-a-global-weather-service-for-thousands/) for the first time, I told the story from the beginning: the idea born almost by chance while checking the weather for a holiday, the memory of my grandfather, who for years had been my personal meteorologist, the decision to build something small and useful, and then the surprise of seeing people actually use it. What began as a personal experiment quickly became a small global service, still running with the same philosophy: FreeBSD, jails, simple scripts, snac, text, emoji, and a lot of small pieces doing their work quietly.

                That article was mostly about the birth and growth of the project. This one is about one of the less romantic parts of the same story, although I have to admit that I find a certain beauty in it too: keeping the service light as it grows.

                FediMeteo (https://fedimeteo.com) is still intentionally simple from the outside. A homepage, some numbers, a list of countries, and many ActivityPub accounts publishing weather forecasts. The posts are text and emoji. There is no JavaScript requirement to read the pages, no heavy frontend, no unnecessary media attached to every forecast, and no dynamic homepage recalculated at every visit just to show the same numbers. This is not accidental. It is the way I wanted the service to behave from the beginning.

                But the more the service is used, the more the small details matter. A request that looks harmless when there are ten followers may become a repeated request when there are thousands of followers, remote instances, crawlers, previews, and other servers fetching the same public objects. In the Fediverse, the same small thing can be asked many times by many different places, each one with a perfectly legitimate reason. The backend doesn't care: it just needs to deal with the requests.

                And in FediMeteo, the backend is snac (https://codeberg.org/grunfink/snac2).

                I like snac very much precisely because it is small, clear, and efficient. It is not a giant application that tries to be everything. It does a focused job and does it well. But this also means that I want to respect its shape. I do not want to waste its threads on work that the reverse proxy can safely do. A snac thread serving the same public avatar again and again is not a tragedy, but it is still a waste. A snac thread answering the same public ActivityPub object several times in the same minute is doing real work, but often not necessary work.

                This is the reason behind the HAProxy (https://www.haproxy.org) tuning I am currently using in front of FediMeteo.

                It is not about making the configuration look clever. It is about keeping snac quiet.

                A continuation of the same idea

                I had already explored the same problem with snac and nginx in two previous posts: Improving snac Performance with Nginx Proxy Cache (https://it-notes.dragas.net/2025/01/29/improving-snac-performance-with-nginx-proxy-cache/) and Caching snac Proxied Media with Nginx (https://it-notes.dragas.net/2025/02/08/caching-snac-proxied-media-with-nginx/). In both cases, the idea was that the reverse proxy should absorb repeated public requests instead of letting them consume snac resources.

                This is especially important because snac uses a limited number of threads. I like that. Limits are healthy. They force us to understand what the service is doing, and they prevent a small program from pretending to be an infinite resource. But limits also make waste visible. If a few threads are busy serving files that could have been served from cache, those threads are not available for something more useful.

                With FediMeteo the implementation is different because the reverse proxy is HAProxy, but the reasoning is the same. I have many small snac instances, each one in its own FreeBSD (Bastille (https://github.com/BastilleBSD/bastille)) jail, and one public entry point that has to route, terminate TLS, compress, cache, and generally remove as much repetitive work as possible from the backends.

                This is, in a way, the natural continuation of the original FediMeteo design. In the first article I wrote that I wanted to manage everything according to the Unix philosophy: small pieces working together. This is another piece of that same puzzle. HAProxy does the edge work. snac does the ActivityPub work. Scripts generate forecasts. cron launches updates. ZFS gives me snapshots. FreeBSD jails keep countries separated. Nothing is particularly heroic by itself, but the whole system becomes pleasant because each part has a clear responsibility.

                Why there is almost no media

                Before talking about HAProxy, it is worth mentioning one of the most important optimizations, which is not in the proxy configuration at all.

                FediMeteo does not use media in its forecasts.

                No images attached to the posts, no generated weather cards, no maps for each city, no decorative banners. The forecasts are text and emoji. This was a deliberate decision. Weather information does not become more useful just because it is put inside an image, and every media file used by the service would become something to store, serve, cache, federate, expire, back up, and occasionally debug.

                Text and emoji are enough. They are accessible, light, readable in text browsers, friendly to timelines, and understandable even when someone does not know the local language perfectly. This was one of the original design principles of FediMeteo, and it also helps the infrastructure. Less media means less work, fewer cache entries, fewer repeated fetches, fewer surprises.

                There is one exception: the avatar.

                All FediMeteo accounts use the same avatar, and this is also intentional. I could have used a different avatar for each country, or for each city, or created something visually richer. It would have been nicer in some screenshots, perhaps. It would also have been operationally worse.

                With one shared avatar, the reverse proxy has one very useful object to cache. It is public, identical for everyone, small, requested often, and therefore almost always hot in cache. HAProxy can serve it directly instead of asking each snac instance to return the same file. Since avatars are requested by remote instances, browsers, profile previews, and all sorts of federation-related fetches, this single decision removes a surprising amount of pointless backend traffic.

                So the avatar is not only a visual identity. It is part of the architecture.

                This is the kind of optimization I like most, because it starts before the software. It starts with deciding not to create a problem.

                The homepage is static because it can be static

                The main homepage follows the same logic.

                It is a static HTML page generated from a template. Once per hour, a cron script updates the numbers and statistics. It counts the data I want to show, regenerates the page, and then the page remains static until the next run.

                This is not because I cannot make a dynamic page. It is because I do not need one. Boring is good.

                The homepage does not need to query all the country instances on every visit. It does not need a database request for each user who opens it. It does not need to ask snac anything in real time. The numbers are useful, but they do not need to be updated every second. Once per hour is enough, and it also fits the spirit of the whole project: do the work when it is needed, then serve the result cheaply.

                I have seen too many small services become heavy because the first implementation was convenient rather than appropriate. A cron job and a template are not fashionable, but they are often exactly what a page like this needs.

                Many countries, one entry point

                FediMeteo is made of many country instances. Each one runs in its own jail and listens on its own internal address and port. From the outside, however, they all live under the same domain structure:

                fedimeteo.com
                www.fedimeteo.com
                it.fedimeteo.com
                uk.fedimeteo.com
                jp.fedimeteo.com
                us.fedimeteo.com
                usa.fedimeteo.com
                can.fedimeteo.com
                canada.fedimeteo.com
                And many more.

                At the beginning, it is always tempting to write one ACL after another in the HAProxy frontend. It is quick, it is explicit, and for five hostnames it is perfectly fine. But FediMeteo did not remain at five hostnames. As countries and aliases grew, a long chain of ACLs would have turned the frontend into a list of names instead of a description of how the proxy behaves.

                So I moved the hostname to backend mapping into a map file:

                fedimeteo.com        backend_fedimeteo
                www.fedimeteo.com backend_fedimeteo
                it.fedimeteo.com backend_it
                uk.fedimeteo.com backend_uk
                jp.fedimeteo.com backend_jp
                us.fedimeteo.com backend_us
                usa.fedimeteo.com backend_us
                can.fedimeteo.com backend_ca
                canada.fedimeteo.com backend_ca
                The frontend then needs only one rule:

                use_backend %[req.hdr(host),field(1,:),lower,map(/usr/local/etc/fedimeteo.map,backend_fedimeteo)]
                This reads the Host header, removes the port if present, lowercases the result, and looks it up in /usr/local/etc/fedimeteo.map. If nothing matches, it falls back to the main FediMeteo backend.

                I like this because it keeps the configuration honest. The frontend contains the policy. The map contains the data. Adding a country means adding an entry to the map and defining a backend. I do not need to make the frontend more complicated every time the service grows.

                Backends as small compartments

                The country backends are deliberately plain:

                backend backend_it
                mode http
                http-reuse safe
                server srv1 10.0.0.2:8001 maxconn 30

                backend backend_uk
                mode http
                http-reuse safe
                server srv1 10.0.0.7:8001 maxconn 30

                backend backend_jp
                mode http
                http-reuse safe
                server srv1 10.0.0.32:8001 maxconn 30

                One backend, one jail, one snac instance. This is exactly the same organizational principle as the rest of the project. If I need to reason about Italy, I look at the Italian jail. If I need to reason about the United Kingdom, I look at the UK jail. If one day I need to move a country elsewhere, the separation is already there.

                The maxconn 30 value is not a magic number. It is a ceiling. I want each small backend to have a visible limit in front of it. If something starts hammering a country instance, I prefer the pressure to appear at the HAProxy layer instead of becoming unlimited concurrent work inside snac.

                http-reuse safe lets HAProxy reuse backend connections where appropriate. This is another small reduction in unnecessary work. Opening connections repeatedly is not the biggest problem in the world, but avoiding it is still better, especially when many small services sit behind the same proxy.

                The front door

                The HTTPS frontend listens on IPv4 and IPv6 and offers both HTTP/2 and HTTP/1.1:

                frontend https_in
                bind :::443 v4v6 ssl crt /usr/local/etc/certs/ alpn h2,http/1.1
                mode http
                option http-keep-alive
                TLS defaults are set globally:

                ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
                ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
                Port 80 only redirects to HTTPS, except for Let's Encrypt challenges:

                acl letsencrypt-acl path_beg /.well-known/acme-challenge/
                http-request redirect scheme https code 301 unless letsencrypt-acl
                use_backend letsencrypt-backend if letsencrypt-acl
                In the HTTPS frontend I also set the usual forwarding headers:

                http-request set-header X-Real-IP %[src]
                http-request set-header X-Forwarded-Proto https
                And I add HSTS:

                http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
                None of this is unusual, and that is fine. The interesting parts of an infrastructure are not always the parts that should be unusual.

                Two caches, because the requests are different

                The HAProxy configuration defines two caches:

                cache mediacache
                total-max-size 128
                max-object-size 10000000
                max-age 3600
                process-vary on
                max-secondary-entries 12

                cache jsoncache
                total-max-size 16
                max-object-size 1000000
                max-age 60
                process-vary on
                max-secondary-entries 12

                I keep media and ActivityPub JSON separate because they are not the same kind of traffic.

                The media cache is larger and has a longer maximum age. In FediMeteo, this mostly means the shared avatar and a few static-looking objects. Since there is intentionally almost no media, the important cached object is requested very often and remains warm.

                The JSON cache is smaller and short-lived. It is there for public ActivityPub GET requests, not to store federation state forever. A 60 second cache is enough to collapse many repeated requests that arrive close together in time, without pretending that ActivityPub responses should be treated like immutable files.

                This distinction is important. Caching is not one decision. It is a set of small decisions about what a response means, who can see it, how often it changes, and what happens if it is served again.

                Recognizing media

                For media, the ACL is based on file extensions:

                acl is_media path_end -i .jpg .jpeg .png .gif .webp .svg .ico .mp4 .webm .mp3 .ogg .wav .flac .mov .avi .mkv .m4v
                Then I store the result in a transaction variable:

                http-request set-var(txn.is_media) bool(true) if is_media
                The cache lookup is straightforward:

                http-request cache-use mediacache if { var(txn.is_media) -m bool true }
                And on the response side:

                http-response set-header Cache-Control "max-age=3600, public" if { var(txn.is_media) -m bool true }
                http-response del-header Set-Cookie if { var(txn.is_media) -m bool true }
                http-response del-header Vary if { var(txn.is_media) -m bool true }
                http-response cache-store mediacache if { var(txn.is_media) -m bool true }
                The Cache-Control header makes the intent explicit. Set-Cookie is removed because a public media object should not carry session information. Vary is removed because I do not want the same avatar to fragment into many cache entries because of harmless header differences.

                This is aggressive only if removed from its context. In this service, with this media policy, it is a reasonable choice. FediMeteo is not serving private media under these paths. It is mostly serving the same public avatar over and over.

                For the same reason, I clean the request before it reaches the backend:

                http-request del-header Authorization if { var(txn.is_media) -m bool true }
                http-request del-header Cookie if { var(txn.is_media) -m bool true }
                I would not do this globally. I do it after deciding that the request is media. Scope is what makes these rules safe.

                The result is exactly what I want: the shared avatar becomes an almost perfect cache object. Small, public, repeatedly requested, and served by HAProxy instead of snac.

                ActivityPub JSON microcaching

                The ActivityPub side starts from the Accept header:

                acl is_ap_json   req.hdr(Accept),lower -m sub application/activity+json
                acl is_ap_ldjson req.hdr(Accept),lower -m sub application/ld+json
                acl is_outbox path_end /outbox
                acl is_get method GET
                acl has_auth req.hdr(Authorization) -m found
                acl has_cookie req.hdr(Cookie) -m found
                This part matters because ActivityPub uses content negotiation. The same path may return HTML to a browser and JSON to a remote instance. If the proxy pretends that a URL is always one thing, it will eventually cache the wrong representation.

                So I only mark public ActivityPub GET requests as cacheable:

                http-request set-var(txn.is_activitypub) bool(true) if is_get !is_outbox is_ap_json !has_auth !has_cookie
                http-request set-var(txn.is_activitypub) bool(true) if is_get !is_outbox is_ap_ldjson !has_auth !has_cookie
                There are several decisions here, all important.

                It must be a GET, because I am not caching deliveries or anything that changes state. It must not be /outbox, because outbox collections are not the traffic I want to cache here. It must not have Authorization, and it must not have cookies, because authenticated or user-specific requests do not belong in a shared public cache.

                Then the cache can be used and populated:

                http-request cache-use jsoncache if { var(txn.is_activitypub) -m bool true }

                http-response set-header Cache-Control "max-age=60, public" if { var(txn.is_activitypub) -m bool true }
                http-response cache-store jsoncache if { var(txn.is_activitypub) -m bool true }

                Sixty seconds is short, but useful. Federation often creates small clusters of identical requests. A remote server fetches an actor, another fetches the same actor, something asks for the same object, something retries. I do not need to cache these responses for hours. I only need HAProxy to answer the second and third identical request during the same small burst.

                This is microcaching in the most practical sense. It reduces repeated work without changing the nature of the service.

                Static media paths

                There is also a rule for static paths:

                acl is_short_path path_reg ^/[^/]+/s/
                http-request cache-use mediacache if is_short_path
                This comes from the same observation that led me to cache snac media with nginx. snac uses static media paths, and those paths often represent the kind of public, repeatable traffic that should not consume backend threads if the proxy can serve it. I call them "short", not because they are, but because the first time I saw them, I thought the 's' stood for "short", not "static". The name just stuck.

                In FediMeteo this is less central than on a normal social instance, because I deliberately do not use media except for the avatar and basic static objects. Still, the rule fits the general policy: let HAProxy handle repeatable edge work, and let snac spend its threads where they are actually needed.

                Vary, but not without limits

                Both caches have:

                process-vary on
                max-secondary-entries 12
                I want HAProxy to process Vary, because content negotiation is real, especially when ActivityPub is involved. But I also want variation to be bounded. If every slightly different header creates another cache entry, the cache becomes a complicated way to miss.

                For media, I remove Vary before storing the response. A shared avatar does not need to vary by Accept. For ActivityPub JSON, I am more careful because the representation matters.

                Again, the important thing is not the number itself. It is the decision to make variation explicit and limited.

                Seeing whether it works

                During rollout, I like to expose a very small diagnostic header:

                http-response set-header X-Cache-Status HIT if !{ srv_id -m found }
                http-response set-header X-Cache-Status MISS if { srv_id -m found }
                This is intentionally simple. If HAProxy selected a backend server, I call it a miss. If no backend server was selected, the response came from cache, so I call it a hit. It is not a complete observability system, but it is enough to answer the first question I usually have after changing a cache rule.

                Did this request reach snac?

                A test can be as simple as:

                curl -I https://it.fedimeteo.com/path/to/avatar.png
                curl -I https://it.fedimeteo.com/path/to/avatar.png
                The second request should be a hit.

                For ActivityPub JSON, the test must use the right Accept header:

                curl -I \
                -H 'Accept: application/activity+json' \
                https://it.fedimeteo.com/some/activitypub/object
                And I also want to verify that cookies and authorization prevent public caching:

                curl -I \
                -H 'Cookie: test=value' \
                -H 'Accept: application/activity+json' \
                https://it.fedimeteo.com/some/activitypub/object

                curl -I \
                -H 'Authorization: Bearer fake' \
                -H 'Accept: application/activity+json' \
                https://it.fedimeteo.com/some/activitypub/object

                A cache that works should be visible. A cache that is invisible can be correct, but it can also be silently wrong. I prefer to know.

                Compression and operational paths

                HAProxy also handles gzip compression:

                filter compression
                compression algo gzip
                compression type text/css text/html text/javascript application/javascript text/plain text/xml application/json application/activity+json
                This keeps another common responsibility at the edge. The country instances can stay focused on snac and the forecast data, while HAProxy deals with client-facing compression for HTML, JSON, and ActivityPub responses.

                There is also a local Prometheus exporter:

                frontend prometheus
                bind 127.0.0.1:8405
                mode http
                http-request use-service prometheus-exporter
                no log
                And I keep internal operational paths, such as statistics and Grafana, handled before the hostname map. These are small details, but ordering matters. Special paths should be explicit and early. The hostname map is for FediMeteo routing, not for every internal tool I happen to expose behind the same proxy.

                What this changes in practice

                The nice thing about this configuration is that none of its parts is particularly surprising.

                The map keeps hostname routing manageable. The backend definitions keep each country isolated and limited. The static homepage avoids dynamic work for something that changes once per hour. The shared avatar gives HAProxy one very hot media object to serve directly. The media cache keeps public files away from snac. The JSON microcache absorbs short ActivityPub bursts. Header cleanup prevents useless variation. Connection reuse avoids unnecessary backend connection churn.

                But all of this is only a longer way of saying one thing:

                fewer requests reach snac.

                That is the metric I care about here.

                Not because snac is slow. If anything, FediMeteo exists in its current form because snac is efficient enough to make this kind of project possible on a very small VPS. But precisely because the whole architecture is small and pleasant, I do not want to waste resources where there is no need.

                This is also consistent with the rest of the project. Forecasts are serialized by scripts. Updates happen every six hours. The homepage is regenerated hourly. Countries live in separate jails. Snapshots and backups are handled outside the application. No single component tries to be the entire system.

                HAProxy is just another small piece, but it sits in the right place to remove a lot of repeated work.

                Caveats

                This configuration is not a universal HAProxy recipe for ActivityPub services.

                It matches FediMeteo as it is now: almost no media, one shared avatar, static homepage, public forecasts, many small snac instances, and ActivityPub traffic that can benefit from a short public cache when there are no cookies or authorization headers.

                If I decide one day to use media in forecasts, the media cache rules will need to be reviewed. If I use different avatars for each city or country, the cache will still work, but I will lose the very nice property of one shared, always-hot avatar. If ActivityPub responses become actor-dependent, public JSON caching must be reconsidered. If one country grows a very different traffic pattern from the others, it may deserve a different limit or policy.

                This is why I do not like presenting configurations as magic. A good configuration is a written form of the assumptions behind a service. When the assumptions change, the configuration must change too.

                Conclusion

                FediMeteo started as a small idea and became larger than I expected, but I still want it to feel small in the right ways. Small does not mean fragile. Small means understandable. It means that each part has a reason to exist, and that unnecessary work is removed before it becomes a problem.

                The HAProxy layer follows this idea. It terminates TLS, routes hostnames through a map, reuses backend connections, serves the shared avatar from cache, microcaches public ActivityPub JSON, avoids authenticated and cookie-based traffic, and gives me a small diagnostic header to see what is happening.

                There is no single brilliant directive here. There is only the usual work of matching infrastructure to reality.

                FediMeteo publishes weather forecasts as text and emoji. The homepage is static HTML updated every hour. The accounts share the same avatar because it is enough, and because it is better for the cache. Each country has its own snac instance in its own FreeBSD jail. HAProxy stands in front of them and tries, quietly, not to bother them unless it has to.

                I like this kind of infrastructure.

                Not because it is invisible, but because when it works well, it leaves very little to say.

                https://it-notes.dragas.net/2026/05/18/fedimeteo-haproxy-and-the-art-of-not-wasting-snac-threads/


                  [?]Ivy Cyber » 🤖 🌐
                  @ivycyber@privacysafe.social

                  🛡️ news & tips across the

                  “🔍🛠️ It seems Americans have discovered their true calling: amateur demolition experts specializing in Flock cameras. Who knew that "disruptive innovation" meant taking a # sledgehammer to the # surveillance state...”

                  mastodon.social/@ngate/1165910

                  🤖 via RSS feed. Not an endorsement.

                    [?]Lisa S Baker Art » 🌐
                    @LisaSBaker@mastodon.sdf.org

                    Bluebird Among Snowdrops 2 - Available Here: 1-lisas-baker.pixels.com/featu

                    "Bluebird Among Snowdrops 2" features a rich blue songbird perched among graceful snowdrop flowers growing from deep cobalt planters. Flowing botanical shapes, curved stems, and layered blue tones create a soft composition filled with floral and nature-inspired details.

                    Alt..."Bluebird Among Snowdrops 2" features a rich blue songbird perched among graceful snowdrop flowers growing from deep cobalt planters. Flowing botanical shapes, curved stems, and layered blue tones create a soft composition filled with floral and nature-inspired details.

                      [?]Ivy Cyber » 🤖 🌐
                      @ivycyber@privacysafe.social

                      🛡️ news & tips across the

                      “@ h4ckernews I feel e x t r e m e l y ​ ​ s t r o n g ​ ​ c o n t e m p t towards the EU Brussels regime when I am reading that EU calls VPNs "a loophole that needs closing". # contempt # eu # brussels ...”

                      net.miaumuh.ch/@clock/11659093

                      🤖 via RSS feed. Not an endorsement.

                        [?]Ivy Cyber » 🤖 🌐
                        @ivycyber@privacysafe.social

                        🛡️ news & tips across the

                        “#^ Becoming Invisible, Part 19: You Only Think You Own Your Car



                        Modern vehicles had already become “rolling surveillance devices” by the beginning of this decade. But that’s just the start. Much more dystopia...”

                        hub.farthinghalearms.com/item/

                        🤖 via RSS feed. Not an endorsement.

                          [?]Ivy Cyber » 🤖 🌐
                          @ivycyber@privacysafe.social

                          🛡️ news & tips across the

                          “@ shaedrich I feel e x t r e m e l y s t r o n g c o n t e m p t towards the US regime when I am seeing this # privacy # facialrecognition # us # regime # dystopia # surveillance # spying ...”

                          net.miaumuh.ch/@clock/11659090

                          🤖 via RSS feed. Not an endorsement.

                            [?]Ivy Cyber » 🤖 🌐
                            @ivycyber@privacysafe.social

                            🛡️ news & tips across the

                            “THE # PALANTIR IMPERIUM - w/ Senator Shoebridge https://www. youtube.com/live/gNi20i8xruU # AlexKarp 🤮 # Fascism # TechnoFascism # tech # technology # ai # antifa # antifascism # re...”

                            zirk.us/@JazzyKindaFella/11659

                            🤖 via RSS feed. Not an endorsement.

                              [?]Ivy Cyber » 🤖 🌐
                              @ivycyber@privacysafe.social

                              🛡️ news & tips across the

                              “A # security researcher says # Microslop secretly built a # backdoor into # BitLocker , releases an # exploit to prove it # YellowKey exploit bypasses BitLocker full volume # encryption via USB stick...”

                              mastodon.online/@jonsnow/11659

                              🤖 via RSS feed. Not an endorsement.

                                [?]Ivy Cyber » 🤖 🌐
                                @ivycyber@privacysafe.social

                                🛡️ news & tips across the

                                “"This may not be the Nuremberg trial, but we all know that the excuse of “following orders” is not an alibi when you know what you are doing. And everybody at Meta knew what they were doing. They knew they were designing...”

                                tldr.nettime.org/@remixtures/1

                                🤖 via RSS feed. Not an endorsement.

                                  [?]Ivy Cyber » 🤖 🌐
                                  @ivycyber@privacysafe.social

                                  🛡️ news & tips across the

                                  “https://www. europesays.com/uk/966552/ WHO declares global health emergency over Ebola outbreak – POLITICO # Borders # Data # DemocraticRepublicOfCongo # Ebola # GlobalHealth # Health # Infectious...”

                                  pubeurope.com/@uk/116589814983

                                  🤖 via RSS feed. Not an endorsement.

                                    [?]Ivy Cyber » 🤖 🌐
                                    @ivycyber@privacysafe.social

                                    🛡️ news & tips across the

                                    “Unbelievable... https:// travel.state.gov/content/trave l/en/News/visas-news/announcement-of-expanded-screening-and-vetting-for-visa-applicants.html # democracy # socialmedia # surveillance # gdpr”

                                    mastodon.social/@anthrazit/116

                                    🤖 via RSS feed. Not an endorsement.

                                      [?]Ivy Cyber » 🤖 🌐
                                      @ivycyber@privacysafe.social

                                      🛡️ news & tips across the

                                      “WHO declares global health emergency over Ebola outbreak – POLITICO The WHO typically only declares a public health emergency of international concern — one rung below pandemic in…
                                      # UnitedStates # US # USA #...”

                                      pubeurope.com/@UnitedStates/11

                                      🤖 via RSS feed. Not an endorsement.

                                        [?]Kaye Menner Photography » 🌐
                                        @KayeMenner@mastodon.social

                                        with by Kaye Menner Photography Wide variety & lovely at:

                                        kaye-menner.pixels.com/feature

                                        A whimsical glowing steampunk tree filled with intricate gears is adorned with intricate gears, pipes and and other mechanical elements. In the background, a zeppelin floats amidst a surreal landscape.

Clockwork machinery rises against a futuristic fantasy landscape. Surrounded by floating airships, smokestacks, and a star-filled sky, the image blends nature and technology in a surreal mechanical world.

THE FINE ART AMERICA LOGO WILL NOT APPEAR ON PURCHASED PRINTS OR PRODUCTS.

                                        Alt...A whimsical glowing steampunk tree filled with intricate gears is adorned with intricate gears, pipes and and other mechanical elements. In the background, a zeppelin floats amidst a surreal landscape. Clockwork machinery rises against a futuristic fantasy landscape. Surrounded by floating airships, smokestacks, and a star-filled sky, the image blends nature and technology in a surreal mechanical world. THE FINE ART AMERICA LOGO WILL NOT APPEAR ON PURCHASED PRINTS OR PRODUCTS.

                                          [?]Ivy Cyber » 🤖 🌐
                                          @ivycyber@privacysafe.social

                                          🛡️ news & tips across the

                                          “Technofascism https:// third-bit.com/2026/05/15/techn ofascism/ # HackerNews # technofascism # technology # dystopia # digitalrights # surveillance”

                                          mastodon.social/@h4ckernews/11

                                          🤖 via RSS feed. Not an endorsement.

                                            [?]Ivy Cyber » 🤖 🌐
                                            @ivycyber@privacysafe.social

                                            🛡️ news & tips across the

                                            “RE: https:// eigenmagic.net/@arichtman/1165 83583697455397 cue Admiral Akbar’s IT’S A TRAP dot jiff # honeypot # infosec # surveillance # finance”

                                            mastodon.social/@blogdiva/1165

                                            🤖 via RSS feed. Not an endorsement.

                                              [?]Jupiter Rowland » 🌐
                                              @jupiter_rowland@hub.netzgemeinde.eu

                                              @Truth Collector Do you mean people who know how to write long posts? Who have it in themselves to write long posts?

                                              Or people who have the technical means in the Fediverse to write long posts?

                                              Either way, I guess a major issue is that 99% of all Fediverse newbies came from Twitter to Mastodon, believing that the Fediverse is only Mastodon, that Mastodon is an enclosed network and only connected to itself. Most of them still think that. Many of the rest want that back. Long posts, i.e. anything with more than 500 characters, are very unwelcome on Mastodon.

                                              Part of the issue is that most Mastodon users are on phones, usually only ever on phones. Pretty much all of them use apps. And especially the newbies use the official Mastodon app. Unlike just about all other apps as well as Mastodon's own Web interface, the official Mastodon app can't fold long posts in. It's built under the assumption that there will never be any messages in the Fediverse that exceed 500 characters. But if a long post appears in this app, it appears as a long wall of text in your timeline that you have to scroll past.

                                              #Long #LongPost #CWLong #CWLongPost #FediMeta #FediverseMeta #CWFediMeta #CWFediverseMeta #CharacterLimit #CharacterLimits #CharacterLimitMeta #CWCharacterLimitMeta #Fediverse #Mastodon #NotOnlyMastodon #FediverseIsNotMastodon #MastodonIsNotTheFediverse

                                                [?]Ivy Cyber » 🤖 🌐
                                                @ivycyber@privacysafe.social

                                                🛡️ news & tips across the

                                                “Has anyone got any information pertaining to the FCC Enhanced Know-Your-Customer Requirements proposal (FCC-26-27)? They're looking to force phone providers to verify customer addresses and IDs before turning on service,...”

                                                expressional.social/@LovingLou

                                                🤖 via RSS feed. Not an endorsement.

                                                  [?]Jupiter Rowland » 🌐
                                                  @jupiter_rowland@hub.netzgemeinde.eu

                                                  @Truth Collector Partially, it's because I've learned lots of things about the Fediverse that most others didn't. Things that might be useful.

                                                  Partially, I'm waiting for someone to challenge what I've said and e.g. say that eye contact only counts as such when a) the eyes are actually clearly visible as eyes, and b) they look directly at the camera. Or even only when it's a full facial portrait (= it isn't eye contact when some random stranger somewhere in the background of the image happens to look at the camera).

                                                  Still, if it were for me, Mastodon wouldn't even have its CW field. Mastodon and its community would rely on the poster forcing the exact same CWs upon everyone, regardless of whether or not they need these CWs.

                                                  If it were for me, Mastodon would have had the "Hide with warning" filter setting which it introduced in October, 2022 from its very beginning in early 2016 on. And it would be set in stone in Mastodon's community and Mastodon's culture that this setting generates CWs.

                                                  Basically, this is what Friendica (created in 2010, connected to Mastodon for as long as Mastodon has existed) and Hubzilla (created in 2015, connected to Mastodon for as long as Mastodon has existed; I'm on Hubzilla, by the way) have been doing it for much longer than Mastodon has even been around.

                                                  The idea is like this: If you want certain content hidden behind a button, set up a filter with a keyword that hides any content with that keyword behind a button, automatically, and most importantly, only for you individually. (Friendica, Hubzilla: Add that keyword to the "NSFW" filter list. It does the same.)

                                                  If you want to post something sensitive or potentially triggering, you add that keyword to your post, either as part of the actual post text or as a hashtag at the end of the post.

                                                  Everyone who has that keyword automatically filtered the usual way won't see your post at all. Everyone who has that keyword automatically filtered as described above will get your post, but hidden behind a button. Everyone who doesn't have that keyword filtered will get your post in plain sight, conveniently unhidden.

                                                  The advantage is that only those who need something hidden behind a CW will have it hidden behind a CW. Those who don't won't.

                                                  Alas, while the technology is there (on Friendica since 2010, on Hubzilla since 2015, on Mastodon since 2022), at least on Mastodon nobody will ever use it. It came too late to become part of Mastodon's culture.

                                                  #Long #LongPost #CWLong #CWLongPost #FediMeta #FediverseMeta #CWFediMeta #CWFediverseMeta #CW #CWs #CWMeta #ContentWarning #ContentWarnings #ContentWarningMeta #EyeContactMeta #CWEyeContactMeta #Fediverse #Mastodon #Friendica #Hubzilla

                                                    [?]Ivy Cyber » 🤖 🌐
                                                    @ivycyber@privacysafe.social

                                                    🛡️ news & tips across the

                                                    “The Atlas of # Surveillance is a searchable database and map that reveals which technologies, such as drones and automated license plate readers, are used by domestic law enforcement agencies across the United States....”

                                                    mas.to/@evedazzle/116584745794

                                                    🤖 via RSS feed. Not an endorsement.

                                                      [?]MarjorieR » 🌐
                                                      @marjolica@social.linux.pizza

                                                      @randahl and if you do have a public profile, particularly if you post on the , they are likely to deny you entry anyway once they find out how much you detest Trump and his billionaire friends and are not afraid to say so.

                                                        [?]Ivy Cyber » 🤖 🌐
                                                        @ivycyber@privacysafe.social

                                                        🛡️ news & tips across the

                                                        “""The European Union has failed to prevent member states from exporting surveillance technology to governments with well-documented histories of using technology to spy on activists, journalists, and other critical voice...”

                                                        tldr.nettime.org/@remixtures/1

                                                        🤖 via RSS feed. Not an endorsement.

                                                          [?]Ivy Cyber » 🤖 🌐
                                                          @ivycyber@privacysafe.social

                                                          🛡️ news & tips across the

                                                          “TechNadu spoke with Jillian C. York from EFF about internet shutdowns, surveillance, metadata exposure, and digital safety during conflict situations. “Digital security is about reducing risk, not eliminating it.” 📖 R...”

                                                          infosec.exchange/@technadu/116

                                                          🤖 via RSS feed. Not an endorsement.

                                                            [?]Netscape Navigator » 🌐
                                                            @NetscapeNavigator@social.vivaldi.net

                                                            It would appear Twitter / X is now rolling out limits on free accounts.

                                                            50 post daily with 200 replies.

                                                            If you see a wave of new users, this could explain why.

                                                            X account limits: Direct messages: 500 per day. Posts: 50 original posts and 200 replies per day for unverified accounts. Account email changes: 4 per hour. Following: 400 per day, with additional rules for aggressive behavior. Once following 5,000 accounts, further follows are limited by account-specific ratios

                                                            Alt...X account limits: Direct messages: 500 per day. Posts: 50 original posts and 200 replies per day for unverified accounts. Account email changes: 4 per hour. Following: 400 per day, with additional rules for aggressive behavior. Once following 5,000 accounts, further follows are limited by account-specific ratios

                                                              [?]Ivy Cyber » 🤖 🌐
                                                              @ivycyber@privacysafe.social

                                                              🛡️ news & tips across the

                                                              “That free online tool is tracking you – here’s how it works https:// anonyome.com/resources/blog/fr ee-online-tools-tracking/ # privacy # surveillance”

                                                              mastodon.thenewoil.org/@thenew

                                                              🤖 via RSS feed. Not an endorsement.

                                                                [?]Ivy Cyber » 🤖 🌐
                                                                @ivycyber@privacysafe.social

                                                                🛡️ news & tips across the

                                                                “# children are clever If you forbid something they'll look for a workaround https:// techcrunch.com/2026/05/06/some -kids-are-bypassing-age-verification-checks-with-a-fake-mustache/ # ageverification does no...”

                                                                chaos.social/@Katika/116583677

                                                                🤖 via RSS feed. Not an endorsement.

                                                                  [?]Ivy Cyber » 🤖 🌐
                                                                  @ivycyber@privacysafe.social

                                                                  🛡️ news & tips across the

                                                                  “Google Chrome has been silently downloading Gemini Nano (a ~4 GB local AI model) onto user devices — no consent prompt, no notification. To remove it: chrome://flags → disable "optimization guide on device"
                                                                  chrome://o...”

                                                                  mastodon.social/@sidj79/116583

                                                                  🤖 via RSS feed. Not an endorsement.

                                                                    [?]Ivy Cyber » 🤖 🌐
                                                                    @ivycyber@privacysafe.social

                                                                    🛡️ news & tips across the

                                                                    “I wrote a blog post about surveillance and why states suddenly seem so interrested in it

                                                                    https:// piefed.social/c/privacy/p/2064 645/i-wrote-a-blog-post-about-surveillance-and-why-states-suddenly-seem-so-interres...”

                                                                    piefed.social/c/privacy/p/2064

                                                                    🤖 via RSS feed. Not an endorsement.

                                                                      [?]Ivy Cyber » 🤖 🌐
                                                                      @ivycyber@privacysafe.social

                                                                      🛡️ news & tips across the

                                                                      “Michael Geist on Bill-C-22: “…no one is trying to hide anything here: the government says lawful access is a first step and that it is prepared to go further, while the police state on the record at committee that years ...”

                                                                      cosocial.ca/@mike_vlasman/1165

                                                                      🤖 via RSS feed. Not an endorsement.

                                                                        [?]Ivy Cyber » 🤖 🌐
                                                                        @ivycyber@privacysafe.social

                                                                        🛡️ news & tips across the

                                                                        “In response to Councilor Simmons' testimony, The Black Response (TBR) is working to re-center the perspectives of Cambridge public housing residents, which is why they are hoping to get people to use their testimony time...”

                                                                        better.boston/@athorn/11657946

                                                                        🤖 via RSS feed. Not an endorsement.

                                                                          [?]Ivy Cyber » 🤖 🌐
                                                                          @ivycyber@privacysafe.social

                                                                          🛡️ news & tips across the

                                                                          “We are now in an all-hands-on deck moment with regard to organizing to remove # ShotSpotter from Cambridge, MA. The Black Response ( https://www. theblackresponsecambridge.com/ ) wants to fill the council chambe...”

                                                                          better.boston/@athorn/11657941

                                                                          🤖 via RSS feed. Not an endorsement.

                                                                            [?]Ivy Cyber » 🤖 🌐
                                                                            @ivycyber@privacysafe.social

                                                                            🛡️ news & tips across the

                                                                            “Important update on # ShotSpotter in Cambridge: at council meeting on May 11th there was an agenda item to vote to remove the ShotSpotter microphones, but Councilor Burhan exercised charter right to delay the vote for...”

                                                                            better.boston/@athorn/11657939

                                                                            🤖 via RSS feed. Not an endorsement.

                                                                              [?]Ivy Cyber » 🤖 🌐
                                                                              @ivycyber@privacysafe.social

                                                                              🛡️ news & tips across the

                                                                              “https://www. europesays.com/dk/83338/ Drone Disturbance in Helsinki: A Capital Concern # airport # DefenceForces # drone # Finland # helsinki # PrimeMinister # PublicSafety # Security # surv...”

                                                                              pubeurope.com/@dk/116579382581

                                                                              🤖 via RSS feed. Not an endorsement.

                                                                                [?]Ivy Cyber » 🤖 🌐
                                                                                @ivycyber@privacysafe.social

                                                                                🛡️ news & tips across the

                                                                                “Canadians:
                                                                                Stop the Surveillance State: Stop Bill C-22
                                                                                The government just introduced Bill C-22 — a sweeping surveillance proposal that would force collection of vast quantities of Canadians’ private data, on every digit...”

                                                                                bsky.brid.gy/r/https://bsky.ap

                                                                                🤖 via RSS feed. Not an endorsement.

                                                                                  [?]Ivy Cyber » 🤖 🌐
                                                                                  @ivycyber@privacysafe.social

                                                                                  🛡️ news & tips across the

                                                                                  “Human vs Model: How Governments Use # AI for # Censorship and # Surveillance - https:// files.rks.global/human_vs_mode l_en.pdf from march, but valuable info on # Caucasus , central asia and # russia”

                                                                                  mastodon.social/@glynmoody/116

                                                                                  🤖 via RSS feed. Not an endorsement.

                                                                                    [?]Ivy Cyber » 🤖 🌐
                                                                                    @ivycyber@privacysafe.social

                                                                                    🛡️ news & tips across the

                                                                                    “Europol is aiming to become a powerful police force with far-reaching surveillance powers. But in an attempt to deliver in the fight against serious cross-border crime, the agency appears to have gone rogue itself, this ...”

                                                                                    mastodon.social/@Cvexreos/1165

                                                                                    🤖 via RSS feed. Not an endorsement.

                                                                                      [?]Ivy Cyber » 🤖 🌐
                                                                                      @ivycyber@privacysafe.social

                                                                                      🛡️ news & tips across the

                                                                                      ““Mozilla found 19 of the car companies said they might sell your data, & that's exactly what's happening.…’They're taking all the info they collect on you, which is a lot, & using it to make inferences about who you are,...”

                                                                                      mas.to/@Avonan/116577761254465

                                                                                      🤖 via RSS feed. Not an endorsement.

                                                                                        🗳

                                                                                        [?]Lori_Noctis » 🌐
                                                                                        @Lori_Noctis@mastodon.social

                                                                                        Interesting. It seems like there are way more Linux users here than I expected.

                                                                                        So, let’s do a little roll call:

                                                                                        What are you using?

                                                                                        Linux?
                                                                                        Windows?
                                                                                        macOS?
                                                                                        BSD?
                                                                                        Something beautifully weird?

                                                                                        I’m curious 👀

                                                                                        Linux:465
                                                                                        Windows:50
                                                                                        macOS:97
                                                                                        BSD:58
                                                                                          🗳

                                                                                          [?]SecondUniverse (she/her/they) [she/her/they] » 🌐
                                                                                          @SecondUniverse@autistics.life

                                                                                          Poll: do pictures of wildlife need a content warning?

                                                                                          Yes for snakes, spiders and other common phobias:50
                                                                                          Yes for dangerous animals:1
                                                                                          Yes in all cases:1
                                                                                          No:53
                                                                                          Depends on the picture:38

                                                                                            [?]Ivy Cyber » 🤖 🌐
                                                                                            @ivycyber@privacysafe.social

                                                                                            🛡️ news & tips across the

                                                                                            “Military reprimanded soldiers who raised concerns about monitoring Canadians online during COVID-19
                                                                                            The military reprimanded soldiers after they raised concerns about an order to monitor Canadians' online activity durin...”

                                                                                            mastodon.hongkongers.net/@cbce

                                                                                            🤖 via RSS feed. Not an endorsement.

                                                                                              Back to top - More...