brie

joined 2 years ago
[–] brie 7 points 9 months ago (1 children)

I guess it kind of depends. Not really sure what most people actually use, but for those who use MS's services, Office web isn't great, and Skype for Linux is rather temperamental. A lot of games work under Proton, but not all.

My perception of "average user" is probably skewed towards being not technical enough to troubleshoot on their own, but skilled enough to run through a tutorial of what keys to press. For someone used to Windows, patching things up is simpler than learning all the ins and outs of a new OS.

I don't disagree that most people would be fine using Linux, but there needs to be a compelling reason why Linux would be significantly better, or else the switching cost makes it not worthwhile.

[–] brie 4 points 9 months ago (3 children)

When going from Windows to Linux, all of the tradeoffs are involved. For me what I don't like about Windows outweighs the pain points of my choice of Linux distro, but for some they'd weigh the sides and Windows still comes out on top.

Anyway my take is that Linux is better ideologically, but for the average consumer who justs want to use their favorite apps, Windows works fine and they're not really going to care until Windows piles on enough garbage to make switching worthwhile.

[–] brie 11 points 9 months ago (6 children)

(Not the person you replied to)

Windows has issues, but so does Linux. My personal experience with Fedora (Silverblue) has been fairly good with minimal hassle (Gnome Software breaks sometimes with auto updates, but is leaps and bounds ahead of the Synaptic days). However, someone using other hardware, another distro, or using other software might have a lot more problems to contend with.

There's a lot of case-by-case nuance that in my opinion makes broad switch from A to B recommendations less meaningful than discussing the pros and cons and letting people decide on their own whether Linux could be useful for them.

[–] brie 1 points 10 months ago

Another thing that they do that should make the process less vulnerable is they try to get developers involved in packaging their own applications (and have a verified badge, though I'm not sure how rigorous their verification is).

[–] brie 4 points 10 months ago (1 children)

The main downside is that there is a lot less customization of filters short of using a different DNS. There is also the potential for logging DNS (present with normal DNS servers as well). LibreOps claims they don't log requests, and personally I don't think they have much reason to lie, but there is still that element of trust. Many of the more well known DNS servers don't offer ad blocking DNS, so you'll most likely be switching to a different provider.

[–] brie 6 points 10 months ago (3 children)

Another way is through DNS (eg. noads.libredns.gr).

[–] brie 4 points 10 months ago

If I understand correctly, the idea is to cross-reference with the listed PGP keys to validate they haven't been changed (implicitly by an adversary)? This essentially sounds like what you're supposed to do with PGP anyway: keep the key so you can detect replacement of the key. The main difference is for someone who doesn't already have the key, they can cross reference it with the directory (essentially like a Wayback Machine for PGP keys).

[–] brie 3 points 10 months ago

I think some kind of anti-HTML measure yeeted my angle bracketed link :(. Fixed.

[–] brie 5 points 10 months ago* (last edited 10 months ago)

Another workaround would be to use a different frontend, eg. Eternity on Android. https://old.beehaw.org/ also seems to not have the bug.

[–] brie 7 points 10 months ago* (last edited 10 months ago) (2 children)

Some useful services:

[–] brie 1 points 10 months ago

That's specifically referring to when auto updates are enabled; on newer Android versions app stores can now update apps they've installed without needing the manual confirmation popup. Previously autoupdates would need a separate shim installed via root, since only system applications could perform unattended installation.

I'm not sure what would cause the difference, but the old behaviour (at least on my device) was to only do the download when updating all, with each individual app needing to then click the update button and the popup. With F-Droid Basic (which had this change for a while now), any apps it can update do so automatically when the update all button is pressed. Apps that it can't do unattended updates on, such as those that were installed by another app, still required manual update on the first one.

[–] brie 12 points 10 months ago (2 children)

The unattended updates just mean you don't have to sit through and manually click the second install popup for every update. They come in handy even when F-Droid doesn't have automatic updates enabled.

12
A Kbin userscript (self.programming)
submitted 2 years ago* (last edited 2 years ago) by brie to c/programming
 

Not a Lemmy script, but I thought it might still be useful for those of you who use Kbin.

The userscript has the following features:

  • Downvotes are hidden;
  • Heavily downvoted posts fade out;
  • The title text of the date also shows in local time;
  • Links to the parent, previous, and next comment in comments;
  • Some of the sidebar items are removed; and
  • Hovering over usernames is disabled.

I tried to make the sections cleanly delineated, so that unwanted features can be easily edited out.

// ==UserScript==
// @name        Kbin script
// @namespace   https://beehaw.org/u/brie
// @match       https://kbin.social/*
// @grant       none
// @version     1.1
// @author      @brie@beehaw.org
// @description Changes some aspects of comment display
// @run-at      document-start
// @license     AGPL-3.0-only
// ==/UserScript==

// Custom style
document.head.appendChild(document.createElement('style')).textContent = `\
/* Some color tweaks */
.theme--dark {
  --kbin-success-color: #38fa9f;
}


/* Hide sidebar sections */
.related-magazines,
.active-users,
.posts.section,
.entries.section {
  display: none;
}

/* Hide downvotes */
.comment span[data-subject-target="downvoteCounter"] {
  display: none;
}
`;

window.addEventListener("DOMContentLoaded", () => {
  // Rewrite community links to magazine links
  for (const link of document.querySelectorAll(`a[href^="/c/"]`)) link.setAttribute("href", `/m/${link.getAttribute("href").slice(3)}`);

  const siblings = new Map();
  for (const comment of document.querySelectorAll(`.comment`)) {
    // Fade out heavily downvoted posts (inspired by Hacker-News).
    const upvotes = comment.querySelector(`span[data-subject-target="favCounter"]`)?.textContent | 0;
    const downvotes = comment.querySelector(`span[data-subject-target="downvoteCounter"]`)?.textContent | 0;
    const boosts = comment.querySelector(`span[data-subject-target="upvoteCounter"]`)?.textContent | 0;

    const score =  (upvotes + 3) / (downvotes + 1);
    if (score < 1) {
      comment.style.setProperty("color", `color-mix(in srgb, var(--kbin-section-text-color) ${score*100}%, transparent)`);
      comment.style.setProperty("background", `color-mix(in srgb, var(--kbin-section-bg) ${score*100}%, var(--kbin-bg))`);
    }

    // Show downvotes in the title text
    comment.querySelector(`.vote__down > button`)?.setAttribute("title", `Reduce (${downvotes})`);

    // Show local date
    const timeago = comment.querySelector(`.timeago`);
    if (timeago) {
      const datetime = timeago.getAttribute("datetime");
      if (datetime) timeago.setAttribute("title", `\
${new Date(datetime)}
${datetime}`);
    }

    // HN-style navigation
    const header = comment.querySelector(`:scope > header`);
    const parent = comment.getAttribute("data-subject-parent-value");
    if (parent) {
      const toParent = document.createElement("a");
      toParent.href = `#entry-comment-${parent}`;
      toParent.textContent = "parent"
      header?.appendChild(toParent);
    }
    const sibling = siblings.get(parent);
    siblings.set(parent, comment);

    if (sibling) {
      const prev = document.createElement("a");
      prev.href = `#${sibling.getAttribute("id")}`;
      prev.textContent = "prev";

      if (parent) header?.appendChild(document.createTextNode(" "));
      header?.appendChild(prev);

      const next = document.createElement("a");
      next.href = `#${comment.getAttribute("id")}`;
      next.textContent = "next";
      const siblingHeader = sibling.querySelector(`:scope > header`)
      if (siblingHeader) {
        siblingHeader.appendChild(document.createTextNode(" "));
        siblingHeader.appendChild(next);
      }
    }
  }

  // Neuter the hover actions
  for (const el of document.querySelectorAll(`[data-action="mouseover->kbin#mention"]`)) {
    el.removeAttribute("data-action");
  }
});
view more: ‹ prev next ›