This is good to know, but adds an additional step to simply requiring a passcode to unlock on screen lock.
I like to code, garden and tinker
This is good to know, but adds an additional step to simply requiring a passcode to unlock on screen lock.
Just the act of refusing makes the act of seizing your phone legal or not. If you legally give them your phone by your own will, they are able to use all evidence they find in the courts. If you deny to give them your phone, and they seize it anyways and access it you have a valid path to throw the evidence they discover out as an illegal search and seizure of your property. I’m not a lawyer but that is the general thought process on denying them access to your property.
Edit: Just want to say this mostly pretains to United States law and similar legal structures. This advice is not applicable everywhere and you should research your countries rights and legal protections.
I personally rather trust that my device isn’t able to be unlocked without my permission, rather than hope I am able to do some action to disable it in certain situations. The availability of such features is nice, but I would assume I would be incapable of performing such actions in the moment.
My other thought is, how guilty is one perceived if they immediately attempt to lock their phones in such a matter, by a jury of their peers? I rather go the deniability route of I didn’t want to share my passcode vs I locked my phone down cause the cops were grabbing me.
To add to this, don’t use bio-metrics to lock your devices. Cops will “accidentally” use these to unlock devices when they are forcibly seized.
Yea this is just syntax, every language does it a little different, most popular languages seem to derive off of C in some capacity. Some do it more different than others, and some are unholy conglomerations of unrelated languages that somehow works. Instead of saying why is this different, just ask how does this work. It’s made my life a lot simpler.
var test int
is just int test
in another language.
func (u User) hi () { ... }
is just class User { void hi() { ... } }
in another language (you can guess which language I’m referencing I bet).
map := map[string]int {}
is just Map<String, Integer> map = new HashMap<>()
in another (yes it’s java).
Also RTFM, this is all explained, just different!
Edit: I also know this is a very reductive view of things and there are larger differences, I was mostly approaching this from a newer developers understanding of things and just “getting it to work”.
Sadly it wasn’t a bid to open source the AI, rather than a bid for payment.
My question would be, why do you need a more powerful server? Are you monitoring your load and seeing it’s overloaded often? Are you just looking to be able to hook more drives to it? Do you need to re-encode video on the fly for other devices? Giving some more details would help someone to give a more insightful answer. I personally am using a Raspberry Pi 4, Chromebox w/ an i7, an old HP rack server, and an old desktop PC for my self hosting needs, as this is cheaper than buying all new hardware (though the electricity bill isn’t the greatest haha, but oh well). If you are just looking for more storage, using the USB 3.0 slots on the Raspberry Pi 4b you can add a couple extra SSDs using a NVMe to USB 3.0 enclosure. For most purposes the speeds will be fine for most applications.
As for SSD vs HDD, SSD hands down. The only reason you’d pick an HDD is if your trying to get more storage cheaper and don’t mind a higher rate of failure. If your data is at all valuable, and it almost always is, redundancy should be added as well.
And as for running Linux, if it can’t run Linux I wouldn’t want to own it.
Edit: Fixed typo
This might help, sorry if it doesn’t, but here is a link to CloudFlares 5xx error code page on error 521. If you’ve done everything in the resolution list your ISP might be actively blocking you from hosting websites, as it is generally against the ISPs ToS to do such on residential service lines. This is why I personally rent a VPS and have a wireguard VPN setup to host from the VPN, which is basically just a roll your own version of Tailscale using any VPS provider. This way you don’t need to expose anything via your ISPs router/WAN and they can’t see what you are sending or which ports you are sending on (other than the encrypted VPN traffic to your VPS of course).
I use my own router with DD-WRT in-between the ISPs router/modem and my LAN, and use a different subnet. I haven’t had any issues with this myself, and my router just sees the ISP router/modem as the WAN.
I’ve never ran this program, but skimmed the documentation. You should be able to use the SHIORI_DIR
(or a custom database table following those instructions) along with the -p
argument for launching the web interface. A simple bash script that should work:
export SHIORI_DIR=/path/to/shiori-data-dir
shiori serve -p 8081
To run multiple versions, I’d suggest setting up each instance as a service on your machine in case of reboots and/or crashes.
Now for serving them, you have two options. The first is just let the users connect to the port directly, but this is generally not done for outward facing services (not that you can’t). The second is to setup a reverse proxy and route the traffic through subdomains or subpaths. Nginx is my go-to solution for this. I’ve also heard good things about Caddy. You’ll most likely have to use subdomains for this, as lots of apps assume they are the root path without some tinkering.
Edit: Corrected incorrect cli arguments and a typo.
SQL is the industry standard for a reason, it’s well known and it does the job quite well. The important part of any technology is to use it when it’s advantageous, not to use it for everything. SQL works great for looking up relational data, but isn’t a replacement for a filesystem. I’ll try to address each concern separately, and this is only my opinion and not some consensus:
Most programmers aren’t DB experts: Most programmers aren’t “experts”, period, so we need to work with this. IT is a wide and varied field that requires a vast depth of knowledge in specific domains to be an “expert” in just that domain. This is why teams break up responsibilities, the fact the community came in and fixed the issues doesn’t change the fact the program did work before. This is all normal in development, you get things working in an acceptable manner and when the requirements change (in the lemmy example, this would be scaling requirements) you fix those problems.
translation step from binary (program): If you are using SQL to store binary data, this might cause performance issues. SQL isn’t an all in one data store, it’s a database for running queries against relational data. I would say this is an architecture problem, as there are better methods for storing and distributing binary blobs of data. If you are talking about parsing strings, string parsing is probably one of the least demanding parts of a SQL query. Prepared statements can also be used to separate the query logic from the data and alleviate the SQL injection attack vector.
Yes, there are ORMs: And you’ll see a ton of developers despise ORMs. They is an additional layer of abstraction that can either help or hinder depending on the application. Sure, they make things real easy but they can also cause many of the problems you are mentioning, like performance bottlenecks. Query builders can also be used to create SQL queries in a manner similar to an ORM if writing plain string-based queries isn’t ideal.
For your own sanity, please use a formatter for your IDE. This will also help when others (and you) read the code, as indentation is a convenience for understanding program flow. From what I see:
enable
and disable
functions are never called for this portion of codeenabled
variable, if so it never passes scopes between the handleClick
and animation
methodsawait
for invoke
or updateCurrentBox
, causing all the code after either to immediately run. As a result, enabled
is never false
, since it just instantly flips back to true
. I’m not sure what library invoke
is from, but there should be a callback or the function returns a Promise
which can be await
ed.Sounds like some QoS software is also limiting LAN traffic, seeing as it still works if the internet is disconnected. I would look if your router has “Adaptive QoS” or something similar enabled.
In most setups I have seen, the nginx instance provided by Lemmy is used due to the routing needed between lemmy/lemmy-ui being handled in nginx. Your reverse proxy can then point to the nginx instance to expose lemmy.
These are just my opinions on the matter at hand.
TLDR; it’s not all about growing as massive as possible and letting everyone talk to everyone. It’s about communities being able to make choices for their user base and the freedom to choose who to federate with. It’s also about users having a choice of which instance they use to interact with the fediverse, and with whom. Having Meta involved limits these choices in not so obvious ways.
Doesn’t the fediverse have an inherent protection and/or immunity from corporate take-over?
Yes, but that does not mean it is invulnerable. Take the World Wide Web as an example, over the past couple of decades the decentralized web has become increasingly centralized. Projects such as Lemmy and Mastodon are a shot back at this trend, to try and break the web up as it was. Each instance gets to decide if letting large corporations federate with them is the best choice or not. It seems that a lot do not want this, and this is exactly the kind of protection from corporate take over that is inherent. The more large central servers are allowed to take a central role, the more power they will gain to snuff small communities and instances. They will do this by fragmenting users bases and communities over time, or any other dirty tricks they can come up with.
Also, having billions of dollars at your disposal is known to increase your influence overall. They can outspend anyone to sell most people on how Threads is interconnected and fediverse friendly, if you let them sell that lie they will win in time. They’ll do this, pull the rug and say how other independent instances aren’t corporating. They will shut off access to these communities in one way or another and begin the process of centralization. It has happened before, and will happen again.
Aren’t we protected?
If you choose to not use Threads, you are not giving your information directly to Meta. But, that does not mean you are safe. Meta is a corporation, and will try to pull whatever tricks they can to take over as the dominate player. They are going head to head with Twitter, what makes you think instances a fraction of Twitters size are safe?
Also, saying we are isolated by our individual instances is a bit humorous as they are federated. If one instance pushes most of the content is that really isolated? What about upvotes, engagement and any other activity that is pushed to other servers via the ActivityPub protocol? These will all be taken in by Meta, which means you are feeding them activity. Sure it’s safer, but they are still getting more data by engaging in the ActivityPub protocol than they get via scrapping pages. Also, they don’t have to play fair with the ActivityPub protocol, there are a lot of dirty tricks that could be used to hamper content on other instances than their own.
Is there anything currently stopping Meta from scraping the Fediverse for our content?
No, and the fediverse should not care. The goal of the fediverse at the moment is to stay independent and have a user base that is not reliant on a single entity and to stay away from the influence of corporate interests. If you operate in a public space, someones always going to be able to see it. It’s all about who owns that public space.
Won’t we grow & educate?
Who is we? Users that value their freedom will stay in the independent fediverse instances. Those who are looking for a twitter alternative will probably go to Threads. Those who don’t care will probably stay on Twitter. Any of these users might have multiple accounts on some or all of these services. Trying to group this together as “we” is a bit disingenuous.
As for growth, it’s not safe to assume that independent instances will grow because of the federation of users from Threads. Users that are on Threads are likely to stay on Threads, users that join instances are likely to stay there. Look to linux users to see why you aren’t going to convert many over the virtues of freedom and decentralization, you’ll just become another “fanboy”.
Aren’t we worried we’re forcing an ultimatum while the Fediverse is still in its infancy?
What is the ultimatum? This is a pretty loaded question, since some of the fediverse is already fractured. The fact you can spin up your own instance, invite whoever you want and keep the interests of your community out of the hands of corporations is the goal. Freedom to host your own community. Anything else is just having a capitalist mindset on growth, the line doesn’t always have to go up. Getting the most users isn’t the end game, it’s having a community that you belong to and feel a part of.
What’s the harm in pulling the ripcord if we try it, and it’s truly not a good fit?
Each instance chooses what is best for their community. Being a part of the mainstream content feed isn’t the goal of most of these decentralized communities.
“What about an influx of low-quality content?”
Why do instances need to let users block Meta when they know their users want Meta blocked? What’s stopping users from going to an instance that doesn’t block Meta if their instance disagrees with their opinion? It’s all about doing what instances communities want, or users can migrate if they feel their needs aren’t being met.
“What if Meta doesn’t moderate well?”
Meta will probably be able to moderate for their advertisers better than most instance operators will be able to. But again, it’s not about moderation and sanitizing content for advertiser revenue, it’s about having a space that is for the community by the community. It doesn’t need to be a single homogeneous community so ads can sell. Some of us want that outside of a corporations control, others don’t or don’t care, all are valid. Thankfully, everyone has a choice instead of being forced to do one or the other.
The numbers are a little higher than you mention (currently ~3.2k active users). The server isn’t very powerful either, it’s now running on a dedicated server with 6 cores/12 threads and 32 gb ram. Other public instances are using larger servers, such as lemmy.world running on a AMD EPYC 7502P 32 Cores “Rome” CPU and 128GB RAM or sh.itjust.works running on 24 cores and 64GB of RAM. Without running one of these larger instances, I cannot tell what the bottleneck is.
The issues I’ve heard with federation are currently how ActivityPub is implemented, and possibly the fact all upvotes are federated individually. This means every upvote causes a federation queue to be built, and with a ton of users this would pile up fast. Multiply this by all the instances an instance is connected to and you have an exponential increase in requests. ActivityPub is the same protocol used by other federated servers, including Mastodon which had growing pains but appears to be running large instances smoothly now.
Other than that, websockets seem to be a big issue, but is being resolved in 0.18. It also appears every connected user gets all the information being federated, which is the cause for the spam of posts being prepended to the top of the feed. I wouldn’t be surprised if people are already botting content scrapers/posters as well, which might cause a flood of new content which has to get federated which causes queues to back up; this is mostly speculation though.
As it goes with development, generally you focus on feature sets first. Optimization comes once you reach a point a code-freeze makes sense, then you can work on speeding things up without new features breaking stuff. This might be an issue for new users temporarily, but this project wasn’t expecting a sudden increase in demand. This is a great way to show where inefficiencies are and improve performance is though. I have no doubt these will be resolved in a timely manner.
My personal node seems to use minimal resources, not having even registered compared to my other services. Looking at the process manager the postgres/lemmy backend/frontend use ~250MB of RAM.
For now, staying off lemmy.ml and moving communities to other instances is probably best. The use case of large instances anywhere near the scale of reddit wasn’t the goal of the project until reddit users sought alternatives. We can’t expect to show up here and demand it work how we want without a little patience and contributing.
To add to this spending some time in custody is inconvenient, but losing your rights being convicted of something you didn’t even do is more inconvenient. You think you know what to say until you say the wrong thing and start digging a hole.