https://github.com/andrewzah/lilac-docker/tree/master/servic...
None of these services are useful apparently, because I manage them myself instead of relying on something like sandstorm/freedombox.
3,095 karma · joined January 22, 2020
My website and blog: andrewzah.com. I write about programming, language learning, and traveling. I have been studying Korean for ~4 years now.
My code: https://github.com/andrewzah. Currently remotely employed by Open Source Systems.
GPG: D87BD9DCF11BACD6CDB40CB213732FB13E61E0BE
https://github.com/andrewzah/lilac-docker/tree/master/servic...
None of these services are useful apparently, because I manage them myself instead of relying on something like sandstorm/freedombox.
I can support any app that I have either the source for, or a binary. I just write my own docker images [0] if one doesn't exist already on dockerhub, or install the binary directly on a VM or LXC as needed. For example, I set up Jellyfin on its own LXC.
For me, stuff like freedombox/sandstorm directly limit me as I would have to spend time learning their GUI, etc, for no gain. All I need is an ssh session into my docker VM and I can set up pretty much anything I need exactly how I want. This lets me be very particular about services accessing files, networking, versioning, and so on.
For non-technical users I could see freedombox (or sandstorm.io) being useful, but if you have enough knowledge to manage a vm + use docker-compose, the flexibility is much better.
There is also a plugin for Calibre, although I haven't tested this myself. I'm not sure if it requires a device ID or not. [1]
[0]: https://alexwlchan.net/2019/08/removing-the-drm-from-my-kind...
[1]: https://github.com/apprenticeharper/DeDRM_tools/wiki/Exactly...
Call me extremely pessimistic but events like Jan 6. will be used as justification to start attacking applications that offer end-to-end encryption, and encryption in general. Just like 9/11 was used to justify eroding certain civil liberties.
I find the biggest advantage is the network effect. In my experience I have found a lot of things through marketplace and fb groups, in addition to craiglist.
My point here is that you cannot solve a human and social problem from a technical standpoint. It doesn't matter how good your product is if no one uses it. Mastodon will never be a facebook replacement, etc.
* Aside from marketplace and local buy/sell groups.
You could have the greatest software in the world and it would not be able to replicate fb's markets and groups functionality. Craigslist is the only one that comes close for replicating fb marketplace.
If you want a small private blog, just host a single user mastodon or pleroma instance. That way you're part of the fediverse but maintain control of your own personal instance.
If you had asked me in 2010, 2015, or even 2018 I would've had different answers most likely.
"And you can’t imagine writing > 1000 LOC of a startup SaaS product in any of them? Really? "
After working on large rails codebases I get nauseous even thinking about having to safely maintain that level of code in dynamically typed languages.
Apache airflow? Doesn't use it. Jupyterhub? Doesn't use it.
I was happy to see projects like Zulip using this, but if it's optional then I can't rely on people actually using it. It's the same thing with ruby/sorbet.
You can do this exactly the same in alpine, with "apk update" and "apk add".
"Secondly, all this cargo-culting around small containers is fine if you are cramming resources. I am not."
The default docker python image is 885MB. python:buster-slim is 114MB which is much more reasonable. Even if you're not "cramming resources", pushing 885MB vs 115MB vs 20MB across the wire does add up over time.
In my case, we do quickly iterate and pull docker images so it does make a difference for my colleagues if the image is 30MB vs 500MB. Even if we're all on gigabit internet.
"Cargo culting" implies doing it without knowing why we're doing it. The benefits of reducing the size of docker images is apparent to everyone, although there are diminishing returns. With dive[0] it is very easy to figure out where the waste is.
"The reality is that my projects and many others are really, really over-provisioned. Looking at my graphs right now, I am on the front page of HN and my server load is still only 20%. "
Optimizing docker images has nothing to do with being over-provisioned.
I will concede that it's very different as a solo developer vs even a small team.
I agree here but I should note that my main focus is spending less time debugging errors at runtime and in production, and avoiding errors in the first place. This is primarily why I use rust.
"Not sure the verboseness of either golang or rust"
Verbosity has nothing at all to do with implementing good, robust code. You could do it in python, rust, or another language. With certain languages you don't have to spend time writing guard code because it's handled natively by the compiler, type system, or both.
" dynamically typed languages (arguably) makes it easier to change things,"
They make it easier to change things, not necessarily correctly. With modern IDEs refactoring is not an issue.
"Many have imagined and built valuable stuff in interpreted, dynamically typed languages before you, by being more focused on overall structure and making sure it's strict and resilient. One really doesn't have to search far for successful applications that are certainly way beyond 1000 LoC and still iterate pretty quickly for their size."
I am aware of this, but I can't help but wonder if they would be able to iterate much more quickly knowing that the compiler and type system eliminate entire classes of bugs. Sure, you might be able to get to running code a little bit faster, but if you have to spend time guarding it and debugging runtime errors... is it really faster?
===
There seems to be this mindset that being fledgling startup means no time for silly things like types or compilation, etc, only iteration. If one actually does their market research and figures out who their users are and what they want, one should be able to iterate just as quickly in i.e. golang or another compiled language with a healthy ecosystem.
I have not worked at a FAANG company or a company even remotely the size of those companies, but I have created and maintained somewhat large ruby on rails codebases. Debugging runtime errors became my bane, especially when I could not guarantee that the persons writing the ruby code were following modern practices (or any practices at all). Not that I think compilers are perfect, but they -do- catch so many errors, some of which may have made it into runtime.
I find the "ease" is overstated compared to time spent debugging issues in production, but that is a separate discussion.
See my comment in the sister thread about the django/rails equivalent.
To the extent of django or rail's maturity and features, likely not, although I don't know what features you use django for. I guess this answers my question to an extent.
Last time I worked with golang I used gin and xorm, but there were some things I had to manually do. That being said, I find rails to be an enormous beast that provides a lot of things that one may or may not need.
In my experience, working with golang and rust, which are compiled and statically/strongly typed have saved me headaches and time even with having to hand-roll some features.
It wasn't really an issue.
Nobody here is silenced. You do not have a right to a twitter account. People can, and do, make accounts elsewhere.
Literally anything Trump does can and is covered by the media; this is exactly the opposite of being "silenced".
How is this any different from a youtuber claiming the earth is flat or vaccines cause autism?
I really wouldn't recommend using an incorrect prescription. In the US anyways shops won't let you use a prescription older than 1 year.
Wow yeah, this makes a lot of sense. It's too bad nodes became associated with niche hobbies or interests.
E.g. a fraternity/sorority that hosts a node would make perfect sense for a local timeline. I guess the only issue is that these organizations aren't permanent. So people would have to migrate, which isn't a thing for twitter or facebook. I know mastodon has a feature for this specifically but I think people would still find it too confusing if people's handles kept on changing.
What I realized was I should have been asking: Do I care about the federated timeline? Do I care if my host blocks other hosts at random? Do I care if my host allows certain things (I.e. pornography with or without a NSFW tag, or at all). Do I know who the host is and can I trust them with my private messages and to not randomly ban me?
I personally like seeing the federated timeline as I have discovered some accounts through it. But my host absolutely needs to do some filtering because some hosts will allow -anything-. I never really found much use for the local timeline.
So for me, hosting was clearly the best option. I do try to get my friends to consider joining the fediverse, and I offer hosting to them to solve this issue.
It's so frustrating. I want to like apple and their approach to privacy, but then they do stuff like this that alienates non-apple users.
Anyway, imessage is like a caveman compared to messaging apps like Kakaotalk and LINE. Those have more features and I like group chats on them much more than I do on imessage. Not that I had a choice; I don't think I ever got my Korean friends' actual numbers because everyone uses Kakaotalk.
[0]: https://www.androidauthority.com/green-bubble-phenomenon-102...
But yes, the issue gets outsourced to the user, and you have to trust a random individual instead of an entity like twitter.
It's basically twitter/microblogging* with multiple hosts, and you can see posts from other hosts. So instead of just @andrewzah, my handle becomes @andrewzah@<host-I-chose>. You could visualize twitter as @andrewzah@twitter.com, but it's redundant as twitter is the only host. This is basically how email works, no?
The only other difference is federation, so you have two timelines instead of one: the entire** federated timeline, and the local timeline to your host. Plus the timeline of users you follow.
So unlike twitter, the user must decide what host they want to use. Or they can self-host an instance. I'm not sure if it's up to date, but https://instances.social has a wizard for this.
*: IIRC mastodon's default limit is 500 chars, and pleroma's is 2,000.
**: One exception: Hosts can block other hosts. So if you use i.e. mastodon.social, you won't see posts from users on blocked hosts unless you specifically follow them.
If a user blindly copy-pastes and destroys their main drive, that's a very good lesson to thoroughly double check before running destructive operations.
edit: I am not advocating for or against facebook being so large. What I am saying is there is a clear distinction between facebook and e.g. parler in terms of moderation.