

How’s it compare to Hoarder/Karakeep?
Aussie living in the San Francisco Bay Area.
Coding since 1998.
.NET Foundation member. C# fan
https://d.sb/
Mastodon: @dan@d.sb
How’s it compare to Hoarder/Karakeep?
Because of various privacy legislation, and people not wanting Google to track them as much, they stopped syncing the data to Google servers. As someone who’s worked at big tech companies, my guess would be that storing so many people’s location history was flagged as an issue during a privacy audit.
It’s entirely local now. You can enable encrypted backups and back up the data, however you can really only have the data on one device now, and the web version is gone.
TypeScript doesn’t need the “function” keyword for a method in an object or on a class though.
const foo = {
bar(): string {
...
}
}
which I assume is doable because the syntax is unambiguous.
In PHP’s case, the method syntax should also be unambiguous.
The first programming language I used was Visual Basic (both VBA in Excel, and VB3 then VB6). I think it used redim to resize arrays.
TypeScript doesn’t need the “function” keyword for a method in an object or on a class though.
const foo = {
bar(): string {
...
}
}
which I assume is doable because the syntax is unambiguous.
PHP’s object orientation is similar to languages like Java and C#, which is what I was comparing to.
It enforces scalar types (string, int, etc) at runtime if you enable strict mode. There’s also static analysis tools like PHPStan and Psalm that will flag issues at build time.
Can we talk about PHP functions with typehints too?
public static function foo(): string {
Practically every other language with similar syntax does this instead:
public static string foo() {
Older variants used DIM for arrays and LET for other variables. DIM was originally called that because it was setting the dimensions of the array.
In modern BASIC variants, DIM has become a backronym: “declare in memory”.
had to upgrade due to DDOS
If you keep getting DDoS attacks, then I’d recommend getting DDoS protection from your hosting provider, or using Cloudflare. A lot of hosting providers can provide DDoS protection if you pay a bit extra per month.
I usually use HTTPS, because a lot of web features only work over HTTPS.
You can use Let’s Encrypt DNS challenges to get real TLS certificates for internal hosts, instead of having to use your own CA or self-signed certificates.
Tailscale has several NAT bypass / hole punching methods for double NAT (including CGNAT) and symmetric NAT, but they don’t work in 100% of cases. https://tailscale.com/blog/how-nat-traversal-works
IPv6 is definitely a good solution since then you don’t have to deal with NAT at all. IPv6 is pretty easily doable in the USA (at long as you’re not using Starlink) but can be harder in other countries that don’t have as robust IPv6 infrastructure.
this means their permissions do not work like docker, and it is not in fact a drop-in replacement for docker
It might a drop-in replacement for Docker if you’re running Docker in rootless mode? Not sure how common that is, though.
I like Unraid because it’s essentially “just Linux” but with a nice web UI. It’s got a great UI for Docker, VMs (KVM) and Linux containers (LXC).
Don’t. Use a VPN like Tailscale or Wireguard. Tailscale uses the Wireguard protocol but it’s very easy to configure, and will automatically set up a peer-to-peer mesh network for you (each node on the VPN can directly reach any other node, without having to route through a central server).
The only things that should be exposed publicly are things that absolutely need to be - for example, parts of Home Assistant need to be publicly exposed if you use the Google Assistant or Alexa integrations, since Google and Amazon need to be able to reach it.
this community is literally built around hosting your own local infrastructure.
That’s part of it, but using a dedicated server, colocated server, or VPS are also considered “self hosted” too. “self hosted” is broader than just having a server at home, and means any server, web service, etc where you maintain it yourself.
Hardware in your own house is generally referred to as a “home lab”.
For storing the backups, I use a storage VPS. I got one from HostHatch a few years ago during Black Friday sales, with 10TB space for $10/month. Hetzner have good deals with their storage boxes, too - they offer 5TB space for $13/month if you’re in the USA (you need to add VAT if you’re in Europe).
A good rule of thumb is to never pay more than $5/TB/month, and during Black Friday it’s closer to $2/TB/month. The LowEndTalk forum has the best Black Friday deals.
I use Borgbackup for backups, and Borgmatic to handle scheduling them. Borgbackup is a fantastic piece of software.
Borgmatic has an “append only” mode which lets you configure particular SSH keys to only be able to add data to the backup, not delete it. Even if someone/something (ransomware, malicious users, etc) gains access to your system and tries to delete the backups, they can’t. Essentially, this is protection against ransomware.
This is a very common issue with other backup solutions - the client has full access to the backup, so malware on the client system could potentially delete all the backups.
I have two backup copies of most things. One copy on my home server and one copy on my storage VPS. If you do do multiple backups, Borgbackup recommend doing two separate backups rather than doing one then rsyncing it to another server.
Crowdsec is much more efficient than fail2ban. Fail2ban is a lot of old single-threaded Python code with inefficient log parsing/tailing routines. Crowdsec is a more modern Go codebase.
If you’re looking at old-school solutions, there’s also DenyHosts.
Crowdsec blocks login attempts too.
Does this have a way of sharing a directory publicly?
I’d love to see an integration with PhotoStructure in addition to Immich.