blob42

u/blob42@lemmy.ml
17 posts · 67 comments

Recent posts

Recent comments

The shear amount of files and code and the consistency of which it was written (this could also be due to golang's style enforcement). If written by a person, they're beyond OCD levels of organized.

  • I started this project in 2017, I didn't even publish the prototypes it went through .

  • I code with vim and have a script that generate template license headers in files.

  • I use LLMs to generate better comments for importent core components but if you browse the code you will find much more personal comments with obvious typos, I am not native English speaker.

Some repetitive unit tests and code sections are made with LLMs

  • I make almost every commit manually as I work in a private git worktree and cherry-pick the features to the public one

Lastly I never paid for a single AI provider since ChatGPT appeared. I used the trial version of Copilot autocompletion for 2 months and never since then.

I am not anti-AI, all LLMs are self hosted with llama.cpp. I do however despise AI slop projects.

Happy to answer any questions :)

Go check the commit history. All the code base is handwritten except for a few repetitive tests. I kept the original git history.

The commments are partly made with LLMs but the majority are my own.

The README is manually written only using LLM as a helper. The emojis are there to make the Readme less raw and I personally hate them but a lot of people now skip a project if it's 100% text.

+1 I spent years wondering if my decision to invest in learning systemd was worth it. The sunk cost fallacy blinded me for too long but I am now willing to ditch systemd if a fork is not made.

I believe this pissed of enough users and it's likely we will see a fork

on *Permanently Deleted* · c/technology · 9 pts · 357d

Solution:

Use a VPS somewhere that will act as a proxy to your home server.

Connect the VPS to your home with wireguard/tailscale and do reverse proxy to your game server.

Now the public IP will be your VPS. Host it in an other close by country.

Of the IP does get flagged, change the VPS provider and keep the exact same setup.

Read /r/selfhosted or use GPT for a step by step guide

Thanks for the feedback :)

Regarding mobile devices my plan on the short term is to integrate with Floccus.

In the meantime I have been using a workaround with Syncthing as following:

I have a folder synced between my mobile devices and gosuki. From time to time I export all the mobile browser bookmarks using the built-in export to html. On Gosuki you can setup the html-autoimport module which continuously watches the synced folder and imports the bookmarks. It works flawlessly.

It relates to automated detection and merging of tags without any manual intervention.

For Chrome based browsers and many others, there is no native support of tags. With Gosuki you can hit ctrl+d, add some #tag and that's it. It will be merged with the database. If it already existed, say from an other browser, the tag will be added.

In other terms you may have the same bookmarks across many browsers and profiles and they will all end up in a single consistent state.

All of this is handles in real-time as if you had a browser extension installed in every browser / profile.

Because it's an open and decentralized protocol in the same vein as email. It is the most likely to survive in the longterm as it's not tied to a single entity.

Fragmentation is inevitable in a decentralized protocol. Look at email or http servers, there is no standard mainstream app but a standard extensible protocol, that's how the internet was originally designed to grow. Now that corporations are pushing their own protocols, they have an incentive to lock users in their ecosystem.

Not at all, message archive management and Push Notifications are some of the core XMPP extensions that almost any XMPP app supports.

Let me tell you an other huge advantage of XMPP for those who care about privacy: it's called Omemo, which is essentially the same protocol used by signal. Given the current push by govs to undermine encryption and private messaging providers, it is probably a good idea to look into self hosting anything remotely related to privacy. Even if they manage to (and they will) to pass their spyware everywhere, if more people self-host it would be much more costly for them and we would see many more secure protocols popup.

I use a self hosted XMPP stack with ejabberd as server and conversations.im for mobile apps. I have audio and video calls and tons of features built into xmpp. There is a huge selection of apps for all platforms.

XMPP is a battle tested protocol that all major messaging apps use underneath.

I used Matrix a few years ago for a full year. I dropped it and never came back. It is a bloated solution to a problem that was already solved by xmpp.

I programmed a bot that is shared with a private room that provides commands such as archiving websites with archiveit or yt videos with TubeArchivist

I am planning however to migrate from Ejabberd to Prosody as I would like to easilly hack on the source code or extensions and Ejabberd is Erlang with a very rigid stack.

I am planning to try it out, but for caddy users I came up with a solution that works after being bombarded by AI crawlers for weeks.

It is a custom caddy CEL expression filter coupled with caddy-ratelimit and caddy-defender.

Now here's the fun part, the defender plugin can produce garbage as response so when a matching AI crawler fits it will poison their training dataset.

Originally I only relied on the rate limiter and noticed that AI bots kept trying whenever the limit was reset. Once I introduced data poisoning they all stopped :)

git.blob42.xyz {
    @bot <<CEL
        header({'Accept-Language': 'zh-CN'}) || header_regexp('User-Agent', '(?i:(.*bot.*|.*crawler.*|.*meta.*|.*google.*|.*microsoft.*|.*spider.*))')
    CEL


    abort @bot
    

    defender garbage {

        ranges aws azurepubliccloud deepseek gcloud githubcopilot openai 47.0.0.0/8
      
    }

    rate_limit {
        zone dynamic_botstop {
            match {
                method GET
                 # to use with defender
                 #header X-RateLimit-Apply true
                 #not header LetMeThrough 1
            }
            key {remote_ip}
            events 1500
            window 30s
            #events 10
            #window 1m
        }
    }

    reverse_proxy upstream.server:4242

    handle_errors 429 {
        respond "429: Rate limit exceeded."
    }

}

If I am not mistaken the 47.0.0.0/8 ip block is for Alibaba cloud