-
21 votes
-
Sharing photos has the potential to reveal a lot of personal information, even if you're careful with removing metadata
9 votes -
The Horde
Every day I wake up thinking that The Horde is not there anymore. The dreams are good but few, and only make everything worse. I usually dream about The Horde. During sleep, my breathing is...
Every day I wake up thinking that The Horde is not there anymore. The dreams are good but few, and only make everything worse. I usually dream about The Horde. During sleep, my breathing is improved and more relaxed. I dream of a calendar without symbols.
When there's an inspiration, so I write. Delete everything afterward. A professional told me that's is a compulsion. The compulsion for the perfect word removes me from language itself. The enjoyment comes from excising something from myself, which makes me feel a bit closer to perfection.
Every once in awhile I forget The Horde is there. The writing becomes looser, I sip my coffee and take the lunch out of the freezer. The Horde is still there. The whistle makes my blood run cold.
I forgot when The Horde arrived, but since then my days are covered of night and dust. To me, The Horde has no color, they're covered in filth and dark cloth. They get a bit closer by dawn. But The Horde never comes.
They seem to enjoy tormenting me. Twice a crow's carcass hit my window. At least we were communicating. I had to open the window to clean the blood. The Horde did nothing. There's courtesy between me and The Horde. I never complain of their tiny advances, they never impale me alive and eat my viscera.
The worst consequence of The Horde was to remove my visitors. I had friends and a girlfriend, before The Horde. They came here regularly. On the other hand, there's something cozy about being surrounded by The Horde. I'm never alone.
I talked to them on a few occasions but never got an answer. I invited them to lunch and asked what they like The Walking Dead (seems like a relevant question for The Horde). Because, you see, The Horde may be savage, but they did not cut my internet. I keep telling everyone about The Horde, but no one believes me. They think I'm some internet phenomenon, an internal joke from a group they don't know about. They don't believe The Horde can come for them too, knocking on their armor of bronze and recycled aluminum.
Sometimes The Horde's shrieks seem to gain shape and order as if they obeyed a hidden commander. But this doesn't last, and they soon resume their lurid racket.
I don't know for how long I've lived with The Horde, nor for how long they'll stay. I'm afraid of waking up someday to find them gone. Because, in a certain way, I learned to love The Horde. I feel safe in their post-apocalyptic embrace.
This morning they got closer than normal. I can see it better now. They all have the same face, they're both one and The Horde. Their mouths are frozen in a permanent smile, salivating like rabid animals. One more step. They look like neanderthals. The Horde approaches slowly, with steady paces, and arrive with the furor of the sound of metal and drums. The house is hit by numerous rocks — the roof is about to give in. My crumbled body will soon become an ensign for their future marches. Or maybe become mush after being punctured by one thousand spears.
I'm only sure that this is going to end soon. Their petite steps, the threats, crows in the window. Everything is ending — finally, everything is ending. I'll never be again and so will The Horde. Nevermore.
3 votes -
Sweden fines Google $8 million for right-to-be-forgotten violations – a failure to comply with Europe's GDPR after they failed to adequately remove search results
11 votes -
What is the US Senate filibuster and what would it take to remove it?
7 votes -
Hidden third party telemetry found in Nokia 6.2, 7.2 smartphones
Update 12/03/2020: this is not a telemetry, but a kill switch from Colombian carrier - confirmed by HMD. Kill switch will be removed from most devices soon. I updated an article and posted it...
Update 12/03/2020: this is not a telemetry, but a kill switch from Colombian carrier - confirmed by HMD. Kill switch will be removed from most devices soon. I updated an article and posted it here.
Original article below:
I have recently purchased Nokia 6.2 and wanted to check if it sends any data somewhere, considering what happened with previous models
First, I noticed approx. daily connection to
dapi.hmdglobal.net
This is a Google Cloud that could belong to a company behind Nokia - HMD Global.
But the Privacy policy in my phone only speaks of "activation" process, not of daily diagnostics data.
So I used developer tools to remove the following packages (warning: this may break your device, I am not responsible for any consequences)com.hmdglobal.enterprise.api com.qualcomm.qti.qms.service.telemetry com.qualcomm.qti.qmmi com.qualcomm.qti.qdmaBefore removing them, I used APK Extractor to save APK files just in case it breaks my phone and I may be able to attempt reinstall. This part comes into play later.
The first was my blind guess about what exactly connects todapi.hmdglobal.net
The next 3 I found mentioned in various forums for other devices as "safe to remove", however, I have not seen any telemetry sent to Qualcomm or anywhere else, except what I mention next.After removing these packages, I noticed that there are some remaining unknown connections my device attempts several times per day.
They are all done in same order, one right after the other:www.pppefa.com www.ppmxfa.com www.forcis.claro.com.coAfter some investigation, I found that the first two domains point to some Microsoft Cloud servers rented in US.
The last one most probably belongs to Colombian telecom company, and this is where it becomes interesting.
After many hours of fruitless removing of different apps in my attempt so stop it, I suddenly remembered something.
When I used APK Extractor previously, there was an empty first line with some generic icon where an app icon should have been.
I went there again and indeed, this is a hidden system app, that you can not see in the list of all apps in Settings, normally. But it turns out, you can see it in Data usage (after it successfully sends some data using your mobile connection).
The name of the app is deliberately left empty to hide it, but if you click it in Data usage, you can see that this app isco.sitic.pp, which can receive SMS, can make calls, and has access to internet.
As with all Android apps, you can reverse read the name to guess what it is.
Turns out, http://sitic.com.co is a Colombian company, who "are leaders in innovation and create mobile and WEB applications for new products and services." (credit goes to Google Translate)screenshot of the app with permissions
In other words, this app is a 3rd party telemetry, hidden from user, not mentioned in the Privacy policy, that has access to SMS.
This looks very bad and I really hope this is a malware injected by factory and not something knowingly distributed by Nokia, HMD Global, the EU company.After removing the
co.sitic.ppapp, requests to Microsoft Cloud and Columbia stopped.
I was later pointed to a German forum, where (I believe) it was first found in a Nokia 7.2 device.
So, we have it confirmed in 2 devices in 2 different countries.On German forum they contacted Nokia (I assume support) but got tired exchanging emails for weeks without any result.
On 02/03/2020 I have requested an official reply from Nokia and HMD Global via press.services@nokia.com and press@hmdglobal.com and waiting for reply.
Since I am not a journalist, I may never get one.TLDR: 3rd party telemetry is found in Nokia 6.2 and 7.2 devices, is hidden from user, has access to SMS, and sends data to Microsoft Cloud in US and a server in Columbia.
It is probably supplied by SITIC S.A.S., a Colombian company, and looks more like a malware than a telemetry.28 votes -
Ndemic Creations' statement on the removal of Plague Inc. from the China App Store
12 votes -
Androcles and the Lion
In a time of ancient legends, Androcles was a runaway slave. He took shelter in a cave where a wounded Lion lived. By removing a thorn from his paw Androcles cured the beast; The Lion was very...
In a time of ancient legends, Androcles was a runaway slave.
He took shelter in a cave where a wounded Lion lived.
By removing a thorn from his paw Androcles cured the beast; The Lion was very pleased.
And then The Lion ate Androcles because he was a fucking lion.
5 votes -
Russian Foreign Minister Sergey Lavrov requests a meeting with Norwegian authorities to remove limitations on Russian activity on Svalbard
4 votes -
What git commands do you use frequently that you think more people should use?
Some of my favorites are: git add -p * This will go through your unstaged changes in chunks and allow you to stage each chunk individually in an interactive shell. git checkout -p * Similar to the...
Some of my favorites are:
git add -p *This will go through your unstaged changes in chunks and allow you to stage each chunk individually in an interactive shell.
git checkout -p *Similar to the above, this will go through your unstaged changes and allow you to undo each chunk. I almost never use Ctrl+Z anymore and go straight for this. Want to remove all of those print-debugging statements? Use this command to pluck them out one-by-one.
git commit -a --amend --no-edit && git push --force-with-leaseI alias this one to
whoopsin my bash profile. It will add all unstaged changes, add them to your last commit and then (safely) force-push the local branch to the tracked remote branch. This is especially useful when working with CI and you need to make constant configuration changes to get it to work. Yes, you could squash those commits afterwards as an alternative. But this is easier.
git rebase -i HEAD~5(Change
5to the number of previous commits you want to see)Interactive rebases are a core part of my git flow when working on feature branches. If a co-worker gives me feedback on a code review that requires a change to a previous commit I'll go back and edit that commit using this command. You can remove individual commits, squash commits, reorder commits, and so much more.
25 votes -
Discord has removed its library and game-launcher functionality as well as the activity feed
27 votes -
Scroll: A subscription service partnered with major websites that removes ads and many trackers, and pays sites based on your usage
24 votes -
Let's share recipes!
With Pepperplate.com moving their service to an overpriced subscription (queue the exodus), I've been moving some key recipes over to Paprika¹, I figured it'd be a good time to ask for some decent...
With Pepperplate.com moving their service to an overpriced subscription (queue the exodus), I've been moving some key recipes over to Paprika¹, I figured it'd be a good time to ask for some decent recipes.
Tuck your recipe and method in a
<details>with a good<summary>so the thread is easy to browse.I'll get us started!
Coconut-Braised Chicken with Chorizo and Potatoes
This comes from [Food and Wine Magazine](https://www.foodandwine.com/recipes/coconut-braised-chicken-chorizo-and-potatoes)INGREDIENTS
Chicken
- 2 tablespoons canola oil
- 6 whole chicken legs (2 pounds)
- Kosher salt
- Pepper
- 1/2 pound fresh Mexican chorizo
- 1 onion, thinly sliced
- 1 tablespoon minced peeled fresh ginger
- 1 garlic clove, minced
- 1 dried chile de árbol, broken in half
- 3 cups unsweetened coconut milk
- 1 pound baking potatoes, peeled and cut into 2-inch pieces
- 2 tablespoons fresh lime juice, plus lime wedges for serving
- 1 tablespoon unsalted butter
Gremolata
- 1/4 cup finely chopped cilantro, plus sprigs
- 7 coffee beans, finely crushed (1/2 teaspoon)
- 2 teaspoons finely grated lime zest
METHOD
Make the chicken
- Preheat the oven to 425°. In a large enameled cast-iron casserole, heat the oil. Season the chicken with salt and pepper. Working in 2 batches, brown the chicken over moderate heat, turning occasionally, about 8 minutes per batch. Transfer the chicken to a large plate. Add the chorizo and onion to the casserole and cook, stirring to break up the meat, until the onion is translucent, about 5 minutes. Stir in the ginger, garlic and chile and cook until fragrant, 1 minute. Add the coconut milk, potatoes and chicken to the casserole and bring to a simmer. Cover and braise in the oven for about 1 hour, until the chicken is cooked through. Stir in the lime juice and butter and season with salt.
Make the Gremolata
- In a small bowl, combine all of the ingredients and mix well. Make sure the cilantro and lime zest is fairly dry, but not dehydrated.
Plating
- Spoon the braised chicken and potatoes into shallow bowls. Garnish with the gremolata and cilantro sprigs and serve with lime wedges.
Gordon Ramsay's Stupid Simple Broccoli Soup
INGREDIENTS
- 1 large or two medium broccoli clusters (as fresh as possible)
- Salt (3 tsp.)
- Ground Black Pepper (4-5 turns on the grind wheel)
- Water
- Olive Oil
- Goat Cheese (2 slices per bowl, preferably 'ashed')
- Walnuts (about 5 per bowl)
METHOD
Cutting the Cheese
- You will want to slice your goat cheese at this point
- Dip the knife into the boiling hot water before each slice for even smooth cuts. Cut two slices of goat cheese per bowl being served. I like them about 5mm or so thick.
- After cutting, use the hot smooth side of your knife to smooth one side of the cheese slices for appearance.
The Soup
- Your broccoli is finished cooking when you can pierce it with little or no effort. Remove the stock pan from the stove burner.
DO NOT POUR THE WATER OUT!
- Use a slotted spoon to add broccoli to a blender but be careful because it's boiling hot!
- Pour enough of the water left over from cooking the broccoli to fill the blender half way.
- Add a pinch (or more) of salt.
- Use several pulses on your blender to break the broccoli up and then puree for several seconds.
Plating
- Add five walnuts to the bottom of a shallow bowl and then place pieces of goat cheese on top of them.
- Pour soup into shallow bowl around the cheese, not on it. Drizzle lightly with olive oil and serve at once!
Miso-Squash Soup with Sesame-Ginger Apples
This is from [SeriousEats](https://www.seriouseats.com/recipes/2015/10/miso-squash-soup-recipe.html) and is another super simple soup that is always a hit.INGREDIENTS
- 1 1/2 quarts plus 2 cups water, divided, plus more as needed
- 1/2 ounce kombu (approximately a 4- by 6-inch piece; see note)
- 1/2 ounce grated bonito flakes (about 3 cups; see note)
- 1 tablespoon plus 1 teaspoon vegetable oil, divided
- 1 leek, white and light green parts only, diced (about 1 1/2 cups)
- 2 medium carrots, diced (about 1 cup)
- 2 medium cloves garlic, sliced
- 2 (1 1/2-inch) knobs ginger, 1 knob peeled and thinly sliced, 1 knob peeled and finely grated, divided
- 1 (2-pound) squash, such as kuri, kabocha, or butternut, peeled, seeded, and diced
- 2 tablespoons white or red miso paste
- 1 tablespoon fresh juice from 1 lemon
- 1 teaspoon kosher salt, plus more as needed
- Pinch sugar, if needed
- 1 large crisp apple, such as Fuji, peeled, cored, and diced
- 1 large or 2 medium scallions, white and light green parts only, thinly sliced on the bias
- 1 teaspoon toasted sesame seeds
- 1/2 teaspoon toasted sesame oil
- 1 teaspoon rice vinegar
- Shichimi togarashi, optional
METHOD
- Combine 1 1/2 quarts water, kombu, and bonito flakes in a large saucepan and bring to a boil over high heat. Reduce to a bare simmer and cook for 5 minutes. Remove from heat, let cool for 5 minutes, then strain through a fine-mesh strainer. Discard solids and set dashi aside.
- In a large Dutch oven or soup pot, heat 1 tablespoon oil over medium-high heat until shimmering. Add leek, carrot, garlic, and sliced ginger. Cook, stirring, until vegetables are glistening and just starting to turn tender, about 4 minutes.
- Add squash and pour just enough dashi on top to cover vegetables. Bring to a simmer and cook until vegetables are fully tender, about 30 minutes. Using a standing blender or immersion blender, and working in batches if necessary, blend soup until very smooth. Blend in miso and lemon juice.
- Return soup to pot and thin with enough water to reach a pourable, silky-smooth consistency. Season with salt, add sugar to taste, and keep warm.
- Meanwhile, fill a medium bowl with 2 cups water and 1 teaspoon kosher salt. Add diced apple and let soak for 10 minutes. Drain apple well, then return to bowl. Toss with grated ginger, scallions, toasted sesame seeds, sesame oil, rice vinegar, and remaining 1 teaspoon vegetable oil. Season with salt, if needed.
- To serve, ladle hot soup into bowls and top with the apple-scallion salad. Garnish with shichimi togarashi, if desired.
¹Paprika is an overpriced recipe organizer -- paprikaapp.com -- it's okay, but also kind of lame.
16 votes -
Virginia school board stops removal of LGBTQ-themed children’s books
7 votes -
Apparently Samsung just put a removable battery in one of it's new phones
6 votes -
The last tracker was just removed from Basecamp.com
16 votes -
If the US removed FPTP and the electoral college, what new parties would pop up?
(You could replace FPTP with STV to keep the districts that elect representatives in the house intact.) I'll start. The Democratic party breaks up into the neoliberal and progressive parties. The...
(You could replace FPTP with STV to keep the districts that elect representatives in the house intact.)
I'll start.
The Democratic party breaks up into the neoliberal and progressive parties.
The neoliberal party is where centrist candidates like Joe Biden and Michael Bloomberg go.
The progressive party is where progressive candidates like Bernie Sanders and Elizabeth Warren go.
The Republican party might lose a large part of their electorate to the libertarians, since many Republicans are more concerned about letting business prevail and don't really want cultural conservatism.
Andrew yang maybe also leaves the Democrats and founds his own party, the party for online reform.
The greens also become significantly more popular but they may have too much in common with the progressives.
The Senate could be changed to include as many seats as the house for proper representation.
18 votes -
Messaging app ToTok has been removed from the Apple and Google app stores following claims the United Arab Emirates government was using it to spy on people
12 votes -
"Baby, It's Cold Outside" - Now with new and improved(?) lyrics
We had a discussion here last year about "Baby, It's Cold Outside", and whether the lyrics to this song encourage rape. This came after a radio station pulled the song from its playlist after...
We had a discussion here last year about "Baby, It's Cold Outside", and whether the lyrics to this song encourage rape. This came after a radio station pulled the song from its playlist after people complained it was too "rapey".
Well, John Legend has re-written this song "to remove the 'date-rape' lyrics". Here is the song and here are Legend's new lyrics.
What do you think? Did the song need to be re-written? Is this an improvement? Is this the "Christmas" song we need for a post-#metoo era?
Two asides:
This isn't really a "Christmas" song.
This isn't a Christmas song. The lyrics never mention Jesus or Christmas or Santa or Yuletide or the festive season. They don't even refer to Winter! There's just one lyric saying "it's cold outside" - and, as I mentioned in my analysis of the song last year, it's not even snowing in the movie scene where this song was first used.
This is ironic timing, considering Australia's weather.
Here in Australia, half the country is on fire and we're breaking all-time heat records - and here I am, writing about a song which says it's cold outside.
16 votes -
Suppose we make Tildes topics a bit more like little blogs by adding support for "updates?"
I've previously written about long-running topics and I've asked about software for blogging. But I keep coming back to doing some simple blogging on Tildes. I don't think Tildes should try to...
I've previously written about long-running topics and I've asked about software for blogging. But I keep coming back to doing some simple blogging on Tildes. I don't think Tildes should try to compete with real blogging software, but maybe Tildes can support a minimal version of it, enough to make it worth doing it here when starting an independent blog isn't worth the effort? An example would be a project diary (like for my accordion synthesizer project). We could encourage people to start a topic for each of their creative projects that they want to talk about and to post updates as they make progress. Or, perhaps this would be a way to cover some ongoing story that they want to live-blog?
I've refined my ideas a bit about how it might work: Suppose a Tildes topic contains a list of zero or more updates in chronological order? Only the original author can post an update, but anyone can write comments responding to any update. When you post an update to one of your topics, the comment tree for each previous update gets collapsed, encouraging people to comment on the latest update.
When a topic gets an update, it reappears in the topic list with a separate set of votes, showing both the original topic's title and the update's title concatenated. Any old listing is removed, so we don't show the same topic twice. However, maybe the topic heading shows the last three updates or so if the topic is getting multiple updates in a short period of time, as might happen when live-blogging.
12 votes -
Amid accusations of harassment and bad business practices, Ben Judd has resigned or been removed from his positions as CEO of Dangen, VP of DDM Japan, and more
4 votes -
Should some of these Republicans start to recuse themselves from the impeachment of Donald Trump?
Just a question. Lindsey Graham, Mitch McConnell, and the rest of them saying they already have a vote against removal of Donald before a court appearance. Sorry if this is the wrong sub tilde for...
Just a question. Lindsey Graham, Mitch McConnell, and the rest of them saying they already have a vote against removal of Donald before a court appearance.
Sorry if this is the wrong sub tilde for this. It just pisses me off.
"'I'm not trying to pretend to be a fair juror here': Graham predicts Trump impeachment will 'die quickly'" in Senate https://edition.cnn.com/2019/12/14/politics/lindsey-graham-trump-impeachment-trial/index.html
17 votes -
Laptop review of Acer A315-42
So I bought this laptop mainly for web browsing, document editing, note taking and programming with perhaps light gaming although that's not something I've tried yet. So, really just for school...
So I bought this laptop mainly for web browsing, document editing, note taking and programming with perhaps light gaming although that's not something I've tried yet. So, really just for school work.
Specifications
Laptop Model : Acer Aspire 3 A315-42
Laptop screen : 1080p IPS (with matte finish?)
CPU : R5 3500U
RAM : 8GB DDR4 (6GB available because of iGPU)
Storage : 256GB SSD NVMe
Wireless : Qualcomm Atheros QCA9377
Wired : Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 (According to lspci)
2x USB 2.0, 1x USB 3.0, 1x HDMI port, Audio jack, 1x RJ45 Ethernet port
Battery : 36.7WhLinux compatibility
Everything worked out of the box, gotta modify TLP to not kill the touchpad and webcam. The touchpad seems to have a mind of its own when it comes to being detected, It seems to be a kernel bug, unsure what I'll do about it concretely but rebooting a couple of times makes it work. Nothing to install thanks to AMD's open source mesa drivers. Might need a kernel higher than 5.3 because of general Ryzen 3000 issues but I've not tried, it was already higher than that.
Operating system tested
Basically never touched Windows, directly installed Fedora 31 Silverblue.
My Silverblue configuration is :
● ostree://fedora:fedora/31/x86_64/silverblue Version: 31.20191213.0 (2019-12-13T00:42:11Z) BaseCommit: a5829371191d0a3e26d3cced9f075525d2ea73679bd255865fcf320bd2dca22a GPGSignature: Valid signature by 7D22D5867F2A4236474BF7B850CB390B3C3359C4 RemovedBasePackages: gnome-terminal-nautilus gnome-terminal 3.34.2-1.fc31 LayeredPackages: camorama cheese eog fedora-workstation-repositories gedit gnome-calendar gnome-font-viewer gnome-tweaks hw-probe libratbag-ratbagd lm_sensors nano neofetch powertop radeontop sysprof systemd-swap tilix tlpKernel : 5.3.15
Gnome : 3.34.1Body and Looks
The screen back has metal, I believe it feels quite sturdy. The rest is reasonable feeling plastic. The material used just loves to imprint grease / fingers which kinda sucks - the keys being the exception thankfully. There was also stickers on the inside which well, are somewhat standard but I thought they were pretty obnoxious so I removed them.
Typing experience
It's nothing amazing but it's good enough. I'm not really knowledgeable on keyboards so that's as much as I can say on it, really.
Performance
Everything feels quite snappy but I don't game at all on this machine so I'm not pushing it too much other than while I'm compiling or doing other things. The temperature does go up to 75°C and the fans get a little loud but it's not that bad. It's mostly the bottom getting hot so it's not something you notice too much while typing. It also cold boots quite fast, in about 10-20seconds I want to say but I've not benchmarked that. It's my first computer with an SSD so there's that.
Battery life
I get about 5hours with tlp installed doing web browsing, some programming occasionally, listening to music on the speakers and chatting. Personally I was kind of expecting more from this considering it's an APU but it seems to be what other people are getting on similar setups so It'll do.
Conclusion
Overall, I'm pretty happy with this laptop considering how I bought it for 575$ on sale. I made this review mostly because I wasn't finding much information about this laptop on Linux and well, I don't know, I guess I felt like it. If you have any questions, ask up!
11 votes -
US Federal Aviation Administration engineers objected to Boeing’s removal of some 787 lightning protection measures
5 votes -
Does transparency in moderation really matter? User behavior after content removal explanations on Reddit.
14 votes -
Is there a reason I cannot have a tag people.doing.something
I usually don't mind my tags getting erased and someone putting a more appropriate tag, but I want to know what is wrong with people.doing.something, or someone doing something, or...
I usually don't mind my tags getting erased and someone putting a more appropriate tag, but I want to know what is wrong with people.doing.something, or someone doing something, or someone.doing.something. I tried various ways today, and each one got removed, and I would like to know why.
5 votes -
My thoughts and ideas for Tildes
I have lots of thoughts about Tildes that I end up forgetting. This post is my attempt to put them to good use. Some of those were already stated elsewhere. Introduction Just to make it very...
I have lots of thoughts about Tildes that I end up forgetting. This post is my attempt to put them to good use. Some of those were already stated elsewhere.
Introduction
Just to make it very clear: I am extremely happy with the way things are going on Tildes. If that was not the case, instead of drawing criticism I would simply not be here. So, please, let's be civil and avoid taking things personally ;)
I'm also a regular user, so please be gentle with my ignorance regarding the technical reasons why some things are either impossible or unpractical.
1. An Answer To A Common Objection
Some of these suggestions may encounter the following answer: "this should be an extension, not a core feature". To which I might respond:
- Extensions impact performance and it's good practice to keep them at a minimum
- Not everyone uses the same browser.
- Features implemented by the actual developers will probably be of a better quality
2. Golden Rule
Unless explicit or clearly unpractical, all suggestions should be interpreted as to be as optional (and preferably
opt-in) as possible for the user. I'll also make frequent use of the imperative mood: please understand that those are still suggestions. The imperative mood is just more practical. Also, notice that this is not my first language.3. Suggestions
3.1 Keyboard Shortcuts
The majority of Tildes users would probably welcome a good set of keyboard shortcuts. I apologize if such keyboard shortcuts already exist: if they do, there should be a page listing them all.
3.1.1 Vim-like and Emacs-like keybindings
There should be Vim-like and Emacs-like (you could choose which one!) keys all around. Even with things like Vimium, not everyone uses them, and a well-thought-out set of keybindings would be extremely beneficial.
This also applies to text fields.
4. Open Calls For Moderators
Right now, I'm not sure what criteria are being used to give someone moderator powers. I think being a developer or contributor is the main criterion, which makes a lot of sense. But other participants might be up to the task, and giving them a chance could be beneficial.
5. Moderation Action Should Always Present Reason
This may seem obvious and even unfair, but I think when a moderator is in no condition to dedicate the time to justify their moderation action (such as locking threads, removing contents or banning users), then the moderator should wait until this condition is met in order to take action.
6. Heated Discussions Should Be Allowed in More Circumstances
I understand Tildes is, and should always be, a place for politeness, even affectionate discussion, but sometimes heated language, including irony and sarcasm, are necessary to stress a point and take the discussion forward. I understand that's a fine line, and that is usually better err on the side of caution, but I also feel the need to caution my fellow Tilders and Tildes administration against excessive moderation, which could stifle the discussion of sensitive subjects
7. There Should Be a Page Explaining How to Collaborate
This page should be short and to the point, with lots of links. I, for instance, wanna collaborate in the documentation, but the information telling how to do so was in a comment I cannot find anymore.
8. Table of Contents
Tildes markdown should support the automated creation of a simple table of contents, which would be very useful for longer posts. Preferably, there should be a limited set of options, such as:
- title of the table of contents ("TOC", "Table of Contents", "Contents" etc)
- numbered vs unnumbered
- depth of the numbering
9. Search own content
I find very hard to search my own content. Sometimes I must reference something I said earlier, or adapt a previous response to a question I already answered. On these occasions, I have to manually
Ctrl+fpage after page of my user page, which is tedious and inefficient.10. Sort my own content
I wish I could sort my own content in the same manner I can with other pages. This would help with item
9, and also help answer faster to comments that were recently made.11. Notifications
I wish it was possible to
op-indesktop notifications for Tildes to show me whenever I get an answer to a thread, a comment or a private message.Correction: I'm not referring to Email notifications, but desktop notifications. The ones that appear occasionally on your browser or screen.
12. There Should Be Space for Comedy
I'm not saying Tildes should become a place for lazy memes and endless puns, but comedy is valuable content and I don't like the idea of Tildes being a more conversational version of Stack Overflow. I fully agree with @deimos vision for a website for meaningful interactions with a focus on privacy. I just don't think comedy is necessarily a menace to this and all the other Tildes' stated goals. Right now, we're a very serious bunch of folks. There should be a place for humor in Tildes. How would that work? IDK. I leave this open for discussion.
13. Link to Excerpt
It would be awesome being able to link not just to a particular comment, but to a selection of that particular comment. After linking to the excerpt, I would go to the full comment, but the excerpt would be highlighted.
Conclusion
This is more of a collection of thoughts than an article, therefore I cannot offer a proper conclusion. But I'd like to kindly ask my fellow Tilders to give some considerations to my ideas. And please understand that they are not complaints. It's just may to contribute to this great community.
Cheers ;)
18 votes -
Swedish King Carl Gustaf removes grandchildren from royal house – observers say move reflects a wider view that there is no need to pay so many members of the royal family
7 votes -
Some WeWork board members seek to remove Adam Neumann as CEO
4 votes -
Remove Richard Stallman
51 votes -
Discord is removing the "Nitro Games" game library subscription aspect of their Nitro premium service
18 votes -
Harry Potter books removed from St. Edward Catholic School due to 'curses and spells'
7 votes -
BangBros bought PornWikiLeaks.com—a website devoted to doxing and harassing porn performers—solely to shut it down and remove all information associated with it
26 votes -
All Tridactyl installations might get removed by Firefox on Aug 21
12 votes -
'Where's the line of free speech – are you removing voices that should be heard?': As YouTube struggles with extreme content, Susan Wojcicki talks about her role as the internet’s gatekeeper
11 votes -
SNES emulator bsnes now supports a new method of overclocking that removes slowdown without any framerate or pitch distortion
12 votes -
Rocket League will remove all paid, randomized Crates later this year, replacing them with a system that shows items in advance
23 votes -
DuckTales: Remastered is being removed from digital storefronts starting August 8th, last-chance 75% off sale on most platforms
20 votes -
US Federal Trade Commission announces that people who chose the $125 option from the Equifax breach will receive "nowhere near" that, and has removed it as an option
25 votes -
Tildes User Script: Drag and drop usernames in order to mention them in your comments
It is was a tedious task to mention users: copy, type, paste. This script makes it a single step: drag and drop any username on to the comment you're composing, and tada! It's there. Here is the...
It
iswas a tedious task to mention users: copy, type, paste. This script makes it a single step: drag and drop any username on to the comment you're composing, and tada! It's there.Here is the script:
// ==UserScript== // @name tildesDragNDropUsernameForMention // @version 1 // @grant none // @namespace tildes.net // ==/UserScript== var userLinks = document.querySelectorAll('a.link-user'); var dragstartHandler = function (event) { var text = event.target.innerText; if(!text.startsWith('@')){ text = "@" + text; } event.dataTransfer.setData("text", text); event.dataTransfer.dropEffect = 'copy'; } userLinks.forEach(function (each) { each.setAttribute('draggable', true); each.ondragstart = dragstartHandler; });Patches welcome!
Edit: remove useless code
9 votes -
How would one go about removing Google from one's life?
I have an android phone and my main email is a gmail. I'd like to somehow de-googlefy myself if at all possible. I don't have facebook so that isn't really a concern.
35 votes -
Proposed removal of kernel AX.25 support
5 votes -
Gay artist devastated by removal of artwork from Llandudno gallery after complaints of homophobia
News article: Gay artist 'devastated' to have THIS artwork 'censored' by Llandudno gallery after 'homophobia' complaint to police Direct link to the artwork on Paul Yore's Instagram:...
News article: Gay artist 'devastated' to have THIS artwork 'censored' by Llandudno gallery after 'homophobia' complaint to police
Direct link to the artwork on Paul Yore's Instagram: https://www.instagram.com/p/Bz2OF2EA4mR/
Is it homophobic to depict homophobia in art?
11 votes -
A bipartisan call to increase the Newstart allowance was removed from a parliamentary report at the direction of the Morrison government on the eve of the federal election
5 votes -
The Lab
This was written for a themed flash fiction contest (the theme was Technological Dystopia) and ended up losing, but I figured it wouldn't hurt to share it here. It's not my proudest work but, as...
This was written for a themed flash fiction contest (the theme was Technological Dystopia) and ended up losing, but I figured it wouldn't hurt to share it here. It's not my proudest work but, as flash fiction, I think it works well enough. I hope you enjoy!
She was three floors from the bottom of the sunken tower when the crying first reached her. A quick swipe earned her a pair from the rack nearby and she continued her descent.
With the aid of technology this process had been streamlined and systematized such that these checks were only needed once a month, but everyone dreaded them. She had drawn the short straw this time and, though it had been years since last she’d ventured to The Lab, she still remembered her last haunting experience. It wasn’t that she was a dissenter or rebelled against that which needed to be done. This was a necessary evil to save their species, but she was still a human being. Seeing them all like that, all tubes and tapes running from frail flesh, was enough to turn any stomach.
A pair of heavy iron doors sat ominously in her way as she bottomed out. She could see the white, crisp interior of The Lab beyond and pushed forward, swallowing her hesitance as best she could.
Before her lay a large room with clean white tile, walls and harsh, flourescent light. It smelled and looked like a hospital because that’s exactly what it was. 10 rows and columns of small, clear, plastic boxes stretched between her and the far wall. The muffs were doing their job exceedingly well, but she could still hear the awful racket bouncing around her memory. She took a deep breath, steadied herself, and started working.
Her primary duty was to make sure the machines were functioning correctly, mostly the arm that glided to and fro above the boxes, administering medicine or changing bags of various fluids as need be. She would also be checking the tubes for clogs that may have been missed by any old or worn out sensors; this was the part she dreaded the most. She flipped the lid on the nearest box and checked the left, then the right, and lastly the tube running into its belly button, and closed the box quickly.
It couldn’t have taken her more than 5 seconds but that short time was enough for the anguished face to plaster itself onto her mind. Everyone does their part, she reminded herself, from the start to the end. It didn’t serve a purpose to bemoan that which she could not change. She moved on to the next crib, hoping this would go by faster than she expected.
Halfway through her checks she hit a snag. There was a clog in Crib 54. She could register the fault in the system and it would fix it on its next hourly cycle, as were her orders, but it was such a small clog. The tube simply needed to be changed, and as a nurse she was well-versed in the procedure. In that moment it was decided.
The tubes themselves were specially designed to be thin and flexible, but rigid enough to fit the shape of a tear duct. Her first task, after finding a pair of gloves, was to gently remove the tube currently in the eye. She hovered over the crib and gently pulled the tube out of the right tear duct. It came slowly, millimeter by millimeter, each bit covered in more goop and mucus than the last. It wound its way up into the sinuses which meant, by the end of it, she had pulled at least five inches of tubing. This she discarded.
Next she had to insert the new tube (these were kept in abundance in a draw underneath the crib). She grabbed one, snipped it to length with a pair of scissors hanging from the IV stand, and took a moment to recent herself. Inserting the tube while the child was crying would be much more difficult than removing it.
As gently as she could she reached down and, with her index finger and thumb, pried open the eye of the little one. With one came the other, the muscles young and unwilling to work independently, and she found herself staring into a pair of brilliant green pools. Her heart melted and, for the briefest moment, she thought of taking it. She could smuggle it out. The bed being empty would trip the system but she could clear the error and explain it away somehow. But no, that was silly. This wasn’t a decision for her to make; things were done this way because there was no other choice.
She pushed the tip of the tube into the tear duct confidently, shoving the traitorous thoughts from her mind as the child’s cries were renewed with pain. She was here to do a job, cold and emotionless. It wasn’t her place to question the way things were done. The tube went in without a hitch and the child’s eyes snapped closed again once she released them. The little bundle of agony before her squirmed and she saw the tears begin to flow anew. With swift, definite movement she closed and latched the lid.
The rest of her checks went smoothly, but she couldn’t shake the uneasy feeling that now ran rampant in her gut. She hated Lab duty, and she expected that would always be the way. With a heavy heart she signed the documents needed to record her visit, noted the tube change in the work log, and left The Lab through its heavy iron doors. The trip upstairs would be long and tiring, but at least she could try and forget ever having been here.
12 votes -
Behind the scenes of Netflix’s decision to remove the controversial suicide scene in "13 Reasons Why"
14 votes -
Apple pushes a silent Mac update to forcibly remove hidden Zoom web server
24 votes -
Google faces contempt charge for failing to remove defamatory reviews
10 votes -
Code Quality Tip: The importance of understanding correctness vs. accuracy.
Preface It's not uncommon for a written piece of code to be both brief and functionality correct, yet difficult to reason about. This is especially true of recursive algorithms, which can require...
Preface
It's not uncommon for a written piece of code to be both brief and functionality correct, yet difficult to reason about. This is especially true of recursive algorithms, which can require some amount of simulating the algorithm mentally (or on a whiteboard) on smaller problems to try to understand the underlying logic. The more you have to perform these manual simulations, the more difficult it becomes to track what exactly is going on at any stage of computation. It's also not uncommon that these algorithms can be made easier to reason about with relatively small changes, particularly in the way you conceptualize the solution to the problem. Our goal will be to take a brief tour into what these changes might look like and why they are effective at reducing our mental overhead.
Background
We will consider the case of the subset sum problem, which is essentially a special case of the knapsack problem where you have a finite number of each item and each item's value is equal to its weight. In short, the problem is summarized as one of the following:
-
Given a set of numbers, is there a subset whose sum is exactly equal to some target value?
-
Given a set of numbers, what is the subset whose sum is the closest to some target value without exceeding it?
For example, given the set of numbers
{1, 3, 3, 5}and a target value of9, the answer for both of those questions is{1, 3, 5}because the sum of those numbers is9. For a target value of10, however, the first question has no solution because no combination of numbers in the set{1, 3, 3, 5}produces a total of10, but the second question produces a solution of{1, 3, 5}because9is the closest value to10that those numbers can produce without going over.
A Greedy Example
We'll stick to the much simpler case of finding an exact match to our target value so we don't have to track what the highest value found so far is. To make things even simpler, we'll consider the case where all numbers are positive, non-zero integers. This problem can be solved with some naive recursion--simply try all combinations until either a solution is found or all combinations have been exhausted. While more efficient solutions exist, naive recursion is the easiest to conceptualize.
An initial assessment of the problem seems simple enough. Our solution is defined as the set of array elements whose total is equal to our target value. To achieve this, we loop through each of the elements in the array, try combinations with all of the remaining elements, and keep track of what the current total is so we can compare it to our target. If we find an exact match, we return an array containing the matching elements, otherwise we return nothing. This gives us something like the following:
function subsetSum($target_sum, $values, $total = 0) { // Base case: a total exceeding our target sum is a failure. if($total > $target_sum) { return null; } // Base case: a total matching our target sum means we've found a match. if($total == $target_sum) { return array(); } foreach($values as $index=>$value) { // Recursive case: try combining the current array element with the remaining elements. $result = subsetSum($target_sum, array_slice($values, $index + 1), $total + $value); if(!is_null($result)) { return array_merge(array($value), $result); } } return null; }
Your Scope is Leaking
This solution works. It's functionally correct and will produce a valid result every single time. From a purely functional perspective, nothing is wrong with it at all; however, it's not easy to follow what's going on despite how short the code is. If we look closely, we can tell that there are a few major problems:
-
It's not obvious at first glance whether or not the programmer is expected to provide the third argument. While a default value is provided, it's not clear if this value is only a default that should be overridden or if the value should be left untouched. This ambiguity means relying on documentation to explain the intention of the third argument, which may still be ignored by an inattentive developer.
-
The base case where a failure occurs, i.e. when the accumulated total exceeds the target sum, occurs one stack frame further into the recursion than when the total has been incremented. This forces us to consider not only the current iteration of recursion, but one additional iteration deeper in order to track the flow of execution. Ideally an iteration of recursion should be conceptually isolated from any other, limiting our mental scope to only the current iteration.
-
We're propagating an accumulating total that starts from
0and increments toward our target value, forcing us to to track two different values simultaneously. Ideally we would only track one value if possible. If we can manage that, then the ambiguity of the third argument will be eliminated along with the argument itself.
Overall, the amount of code that the programmer needs to look at and the amount of branching they need to follow manually is excessive. The function is only 22 lines long, including whitespace and comments, and yet the amount of effort it takes to ensure you're understanding the flow of execution correctly is pretty significant. This is a pretty good indicator that we probably did something wrong. Something so simple and short shouldn't take so much effort to understand.
Patching the Leak
Now that we've assessed the problems, we can see that our original solution isn't going to cut it. We have a couple of ways we could approach fixing our function: we can either attempt to translate the abstract problems into tangible solutions or we can modify the way we've conceptualized the solution. With that in mind, let's take a second crack at this problem by trying the latter.
We've tried taking a look at this problem from a top-down perspective: "given a target value, are there any elements that produce a sum exactly equal to it?" Clearly this perspective failed us. Instead, let's try flipping the equation: "given an array element, can it be summed with others to produce the target value?"
This fundamentally changes the way we can think about the problem. Previously we were hung up on the idea of keeping track of the current total sum of the elements we've encountered so far, but that approach is incompatible with the way we're thinking of this problem now. Rather than incrementing a total, we now find ourselves having to do something entirely different: if we want to know if a given array element is part of the solution, we need to first subtract the element from the problem and find out if the smaller problem has a solution. That is, to find if the element
3is part of the solution for the target sum of8, then we're really asking if3 + solutionFor(5)is valid.The new solution therefore involves looping over our array elements just as before, but this time we check if there is a solution for the target sum minus the current array element:
function subsetSum($target_sum, $values) { // Base case: the solution to the target sum of 0 is the empty set. if($target_sum === 0) { return array(); } foreach($values as $index=>$value) { // Base case: any element larger than our target sum cannot be part of the solution. if($value > $target_sum) { continue; } // Recursive case: do the remaining elements create a solution for the sub-problem? $result = subsetSum($target_sum - $value, array_slice($values, $index + 1)); if(!is_null($result)) { return array_merge(array($value), $result); } } return null; }
A Brief Review
With the changes now in place, let's compare our two functions and, more importantly, compare our new function to the problems we assessed with the original. A few brief points:
-
Both functions are the same exact length, being only 22 lines long with the same number of comments and an identical amount of whitespace.
-
Both functions touch the same number of elements and produce the same output given the same input. Apart from a change in execution order of a base case, functionality is nearly identical.
-
The new function no longer requires thinking about the scope of next iteration of recursion to determine whether or not an array element is included in the result set. The base case for exceeding the target sum now occurs prior to recursion, keeping the scope of the value comparison nearest where those values are defined.
-
The new function no longer uses a third accumulator argument, reducing the number of values to be tracked and removing the issue of ambiguity with whether or not to include the third argument in top-level calls.
-
The new function is now defined in terms of finding the solutions to increasingly smaller target sums, making it easier to determine functional correctness.
Considering all of the above, we can confidently state that the second function is easier to follow, easier to verify functional correctness for, and less confusing for anyone who needs to use it. Although the two functions are nearly identical, the second version is clearly and objectively better than the original. This is because despite both being functionally correct, the first function does a poor job at accurately defining the problem it's solving while the second function is clear and accurate in its definition.
Correct code isn't necessarily accurate code. Anyone can write code that works, but writing code that accurately defines a problem can mean the difference between understanding what you're looking at, and being completely bewildered at how, or even why, your code works in the first place.
Final Thoughts
Accurately defining a problem in code isn't easy. Sometimes you'll get it right, but more often than not you'll get it wrong on the first go, and it's only after you've had some distance from you original solution that you realize that you should've done things differently. Despite that, understanding the difference between functional correctness and accuracy gives you the opportunity to watch for obvious inaccuracies and keep them to a minimum.
In the end, even functionally correct, inaccurate code is worth more than no code at all. No amount of theory is a replacement for practical experience. The only way to get better is to mess up, assess why you messed up, and make things just a little bit better the next time around. Theory just makes that a little easier.
17 votes -
-
Has Wine begun to remove the need for linux software?
I started using wine in about 2013 and I remember back then it was quite patchy and only worked on some programs/games. I used to have a rule that I stuck hard to that I would not buy any games...
I started using wine in about 2013 and I remember back then it was quite patchy and only worked on some programs/games. I used to have a rule that I stuck hard to that I would not buy any games that did not have a linux version. But now in 2019 I have found that everything I have tried to run in wine has been so seamless and close to flawless that I hardly know its running in wine. I semi regularly buy games that only have windows version because I am mostly sure it will work and can get a refund if it doesn't.
What does everyone else think about this?
8 votes