Having a budget for donations is really nice because it makes giving away money much easier. In my mental model this is simply not my money, but I can decide where it goes. This also makes spontaneous donations much easier. When the Ukraine war broke out and my employer set up a donation matching program, giving away 2000€ didn't require second thoughts from me.
Scaling your donations with your salary is nice because it gives you a reason to ask for higher salary besides becoming even richer.
With a software engineering salary, this is also enough money to support multiple organizations with a significant amount of money each. Discovering new organizations that do cool stuff and reading the occasional newsletter with positive news, knowing that your money supported that outcome, is really nice.
I give the bulk of it to the Against Malaria Foundation, drawing from the effective altruism idea. They distribute mosquito nets and score very high in the (years of "healthy" life saved)/dollar metric. The rest goes to various NGOs around human rights, civil liberties, environmental protection, journalism, and the FOSS/donationware that I use.
LineageOS does not have certification (i.e. does not meet Google's quality standards) to install the Google applications. Manufacturers who want to ship with Google Apps have to take everything up a notch to get the certification, which is a huge amount of work (on top of everything that LineageOS and the likes are doing).
They did successfully sue the manufacturer over those quality issues. The Fairphone 4 is produced by a different manufacturer and is expected to have much less of such issues.
There's not much more to it than you can see, there's the BIM360 tab on the left that allows browsing through a cloud directory structure, and Civil3D also has a learning content tab.
Qt-based Software uses Qt WebEngine instead of the .NET stuff. The reason we're using HTML + JS is that we wanted to share the start page between different applications and HTML + JS is the lowest common denominator so to say, something that every team could integrate.
I own that one (extended version) and in the "sitting" position (I assume that's how you would use the wheel) I can make it wobble front to back by a few millimeters if i really lean onto it, but side-to-side i can move it barely a millimeter or two even when yanking it rather hard. It feels really solid in that direction. In the standing position, it does move more.
For a non-mainstream-feature I thought that rather easy. Open about:profiles, click "create new profile", enter a name, and then use the "Launch profile in new browser" buttons on that page to use that profile.
I have one for work and one for non-work and it's great!
Yes, I have. "Every Western institution" is obviously an hyperbole, I wouldn't consider that ignorant. I started skimming the reply-article at some point, as it seemed to me like most nitpicks the author had might be correct, but missed the point of the original article. Reminding me of https://news.ycombinator.com/item?id=22854475.
(OT: 'Please don't comment on whether someone read an article. "Did you even read the article? It mentions that" can be shortened to "The article mentions that." ', from the HN guidelines)
Can someone expand on this? I found the article interesting, energetic and containing a strong and, to me, positive and useful message ("ask yourself what are you building?").
Yet parent calls it ignorant, of what? a sibling comment is "horrified" that the article gained so much attention here, although it seems to me that with it's focus on building stuff it's 100% on topic (which is "Anything that good hackers would find interesting").
As it's a little unsettling to me that other people find it horrifying that people like me found the article interesting, any details would be appreciated.
Good points. We believe we have fixed the physical-order-and- scraping-issue by using random uuids as primary keys, showing stuff in the UI always ordered by PK, and periodically doing a CLUSTER, which physically rearranges the table after some index (pk in our case).
We haven't thought about higher-order storage layers. I guess we should do that... Thanks!
The attack vector would be an attacker getting their hands at a DB dump including XIDs. Without any particular measures, they'd be able to de-anonymize every vote ever made, which is kind of a worst case scenario for an anonymity-focused app. Granted, since usually there are no dumps including XIDs lying around (e.g. backups don't contain them), this would effectively require an attacker to gain access to the database. When they're that far they could of course do all sorts of bad things, but most of those could probably be fixed with recreating the VM with a backup. Deanonymizing existing votes cannot be fixed :)
We also thought about hashing user IDs, but with any practical number of users in the database it would be possible for an attacker to just hash all existing user IDs and checking them all. So that would be more an obfuscation, making de-anonymization harder, but not impossible.
edit: we considered putting the user's password into that hash as well. that would also enable us to let the user edit their vote later, while still retaining anonymity. But then we'd need to ask them for their PW when voting, or we put a hash of the PW into their session data, and we'd need to restrict changing the PW until the election is over, and it seemed not worthwhile.
Re "same business transaction": That would probably still allow for correlating the votes with the flags because they'll still be added with some XID, which are monotonically increasing. Of course, it would require more effort and probably even guesswork, but still :)
Rewriting the election in the same transaction sounds smarter than the periodic solution. I need to discuss that with the team, thanks!
There's also one inherent data privacy problem in MVCC that I've been running into.
Suppose you have an app that lets people anonymously vote or comment on stuff, but only once. The vote in the DB must not have any connection to the person. So, you give the person a flag whether or not they voted already, and store the vote separately.
Now, you'd want to set both values in the same transaction for obvious reasons. But, since Postgres uses MVCC, the two tuples that are added to the database both contain the same transaction ID (XID), so there's the connection between user and vote again.
There seems to be no way to instruct postgres to "clean" those XIDs in any way. What we're doing now is periodically and manually updating every tuple in each affected table with dummy changes, essentially duplicating all tuples with all new XIDs, and then running VACUUM to delete the tuples with the old, potentially-deanonymizing XIDs. We haven't found anything easier...
you seem to assume that the bandwidth used by netflix is fixed. however, what actually happens on network saturation (given net neutrality) is that both netflix and non-netflix content will slow down. netflix watchers will see buffering or will get a lower resolution.
that is the point of net neutrality: handling packets on a non-discriminatory best-effort basis. if the "channel is stuffed", then a certain percentage of all the packets in the channel, including the netflix ones, will be dropped.
Having a budget for donations is really nice because it makes giving away money much easier. In my mental model this is simply not my money, but I can decide where it goes. This also makes spontaneous donations much easier. When the Ukraine war broke out and my employer set up a donation matching program, giving away 2000€ didn't require second thoughts from me.
Scaling your donations with your salary is nice because it gives you a reason to ask for higher salary besides becoming even richer.
With a software engineering salary, this is also enough money to support multiple organizations with a significant amount of money each. Discovering new organizations that do cool stuff and reading the occasional newsletter with positive news, knowing that your money supported that outcome, is really nice.
I give the bulk of it to the Against Malaria Foundation, drawing from the effective altruism idea. They distribute mosquito nets and score very high in the (years of "healthy" life saved)/dollar metric. The rest goes to various NGOs around human rights, civil liberties, environmental protection, journalism, and the FOSS/donationware that I use.