• 0 Posts
  • 36 Comments
Joined 1Y ago
cake
Cake day: Jun 13, 2023

help-circle
rss

So far, this isn’t much of anything.

Telegram already closes public channels reported for copyright violations.

Some excerpts from this post:

Compared to other platforms, we do not see the seriousness of Telegram to cooperate.

. . .

In May 2023, progress appeared to be going in the wrong direction. Telegram was reportedly refusing to cooperate with the Ministry of Communications and Digital on the basis it did not wish to participate in any form of politically-related censorship.

. . .

With no obviously public comment from Telegram on the matter, it’s hard to say how the social platform views its end of what appears to be an informal agreement.

Telegram will be acutely aware, however, that whatever it gives, others will demand too. That may ultimately limit Telegram’s response, whatever it may be, whenever it arrives – if it even arrives at all.



Approval voting simplifies things but also has limitations because it removes any weight/preference people may have.

Yes, but nowhere near the problems of IRV. If those particular limitations bother you, as I said:

If you want to take on a little complexity for some further improvement, use delegable yes/no voting.

. . . don’t let the perfect be the enemy of the good.

I see zero “good” in IRV, for all the reasons outlined in the rant. Its failures are absurd and beyond unacceptable given that there are strictly better and simpler alternatives. Don’t let something shiny and terrible stop you from using something actually quite good.


I’m repeating myself here because a lot of commenters have a misplaced hope for IRV improving things:

Instant runoff voting is terrible and more complicated than people think, and I will never support it. It’s a false improvement whose adoption will discourage meaningful change.

If it’s a single winner election and you want a simple improvement, use approval voting. If you want to take on a little complexity for some further improvement, use delegable yes/no voting. I have one idea for further improvement, if anyone is really interested in voting methods.

Link to my anti-IRV rant


Only responding to the IRV portion of your comment, and repeating myself from elsewhere in this thread:

Instant runoff voting is terrible and more complicated than people think, and I will never support it. It’s a false improvement whose adoption will discourage meaningful change.

If it’s a single winner election and you want a simple improvement, use approval voting. If you want to take on a little complexity for some further improvement, use delegable yes/no voting. I have one idea for further improvement, if anyone is really interested in voting methods.

Link to my anti-IRV rant


Instant runoff voting is terrible and more complicated than people think, and I will never support it. It’s a false improvement whose adoption will discourage meaningful change.

If it’s a single winner election and you want a simple improvement, use approval voting. If you want to take on a little complexity for some further improvement, use delegable yes/no voting. I have one idea for further improvement, if anyone is really interested in voting methods.

Link to my anti-IRV rant


Great! If you get a chance, I’d be interested to hear about your rtx complaints.


I’m not who you asked, and not a user of pkgx, but one of the reasons I prefer rtx (which supports asdf plugins) to asdf is that by default it doesn’t use shims, but updates the PATH instead.

So for example, running which python will show me a clearly versioned python executable path, rather than a mysterious shim that represents a different realpath at different times.


No Zsh support for now, and maybe no user fonts?

And a warning: it’s got telemetry on by default.



I made my account with them early on. I signed up to subscription content to eventually get around to reading, using that address. I signed up for other services, using that address, where access to that address was my only recovery option. I joined IRL community interest groups with that address.

Then I spent a long time without checking it, and they deactivated the account and I’ve lost all data and messages sent there.

And lost my discord account, too. Even though I have the correct discord credentials, discord decided to lock me out unless I can confirm I still have that tuta email address.




Sorry I don’t know how to kbin yet. Maybe the link provided by the bot that replied to me is better?

Are there any concatenative/stack/Factor kbin magazines you know of?


There are some concatenative-related discord links in the sidebar of https://programming.dev/c/concatenative you may or may not be able to stand.

Anyway answering the main post: Factor (stack/concatenative), Nim, Roc, Zsh


It might be because it’s a single string, and might work if you store it or expand it as an array. I think it would in Zsh, anyway.

But the response to use a function instead is probably wiser.


Factor, the concatenative programming language, NestedText, the configuration format, and Nu Shell, even though I don’t use it.



All of these languages are relatively succinct, and I rely on that to reduce visual and mental clutter, because I have a pea brain.

Factor, Nim, Roc, and Zsh each offer, to differing extents, some argument-then-function ordering in the syntax, which strikes me as elegant and fun, and maybe even wise. In that order, Factor does this the most (using postfix/reverse-polish-notation and managing a data stack), and Zsh the least (piping output from one command as the input for the next command).


Roc

Roc is a functional language, and an offshoot of Elm in spirit. The lead developer and community are great. Relative to Elm, it’s more inclusive and experimental in the development process, and does not primarily or exclusively target web stuff. They aim to create an ambitiously integrated development environment, especially taking advantage of any guarantees the functional design can offer.

Here’s a sample, using the |> operator a lot, which lets you order the first argument to a function before the function IIRC:

getData = \filepath ->
    filepath
    |> Path.fromStr
    |> File.readUtf8
    |> Task.attempt \result ->
        result
        |> Result.withDefault ""
        |> Task.succeed

Nim

Nim is so darn flexible and concise, has great compilation targets, and employs Uniform Function Call Syntax to more implicitly enable the kind of ordering in the Roc example. And you can often leave out parentheses entirely.


Factor

Factor is a full-on postfix and concatenative language, tons of fun, and turns my brain inside out a bit. I made a community for concatenative languages here on programming.dev, and while there’s little activity so far, I’ve filled the sidebar with a bunch of great resources, including links to active chats.

EDIT: !concatenative@programming.dev

The Factor REPL (“listener”) provides excellent and speedy documentation and definitions, and a step-through debugger.

One idea that seems absurd at first is that for the most part, you don’t name data variables (though you can, and you do name function parameters). It’s all about whatever’s on the top of the stack.

In some languages it’s awkward to approximate multiple return values, but in a stack-oriented language it’s natural.

In Factor, everything is space-separated, so functions (“words”) can and do include or consist of symbols. [1..b] is not semantically something between brackets, it’s just a function that happens to be named [1..b]. It pops 1 item off the top of the stack (an integer), and pushes a range from 1 to that integer on to the top of the stack.

Here it is in my solution to the code.golf flavor of Fizz Buzz:

USING: io kernel math.functions math.parser ranges sequences ;

100 [1..b] [ 
  dup [ 3 divisor? ] [ 5 divisor? ] bi 2dup or [ 
    [ drop ] 2dip 
    [ "Fizz" "" ? ] [ "Buzz" "" ? ] bi* append 
  ] [ 2drop number>string ] if
  print 
] each

And in image form for glorious syntax highlighting: Syntax Highlighted Fizz Buzz in Factor

Factor example walkthrough

Anything between spaced brackets is a “quotation” (lambda/anonymous function).

So:

  • Push a range from 1-100 onto the stack.
  • Push a big quotation that doesn’t end till each at the bottom.
  • each consumes the range and the quotation. For each element of the range, it pushes the element then calls the quotation.
  • dup pushes a copy of the stack’s top item. Say we’re in the ninth iteration of the each loop, we’ve got 9 9 on the stack.
  • Two quotations are pushed (9 9 [...] [...]), then bi applies them each in turn to the single stack item directly beneath, leaving us with 9 t f (true, it’s divisble by three, false, it’s not by 5).
  • 2dup copies the top two, so: 9 t f t f
  • or combines the last two booleans: 9 t f t
  • Two quotes are pushed, followed by an if (9 t f t [...] [...] if), which pops that final t and calls only the first quotation.
  • [ drop ] 2dip takes us from 9 t f to t f – it dips under the top two, drops the temporary new top, then restores the original top two.
  • ? is like a ternary. That first quotation will push "Fizz" if called with t (true) on the stack, "" otherwise.
  • bi* applies the last two items (quotations) to the two values before them, each only taking one value. The Fizz one applies to t and the Buzz to f, taking us from t f [...] [...] to "Fizz" ""
  • append joins those strings, as it would any sequence: "Fizz"
  • Finally we print the string, leaving us with an empty stack, ready for the next iteration.

EDIT: Walkthrough in image form, more granular:


The ones I can get things done with:

  • Python
  • Zsh

My current obsession:

  • Factor

Honorable mentions:

  • Nim
  • Roc

I meant to communicate that the Redirector addon uses the given pattern to see if the entire URL string matches, not part of it. So the malicious URL does not match.

I’m wondering if there’s a real URL for which the Redirector approach will not work.


I’m not trying to be combative, I’m trying to understand. I’d like to see the failure in action so I can appreciate and pursue the proposed solution.

But when I added the community bit to the first URL, the browser resolved it and stripped the credentials, so the resulting URL matched. But the example credentials weren’t real so it’s not a great test; if there’s an real example I can test, please share it. Though I don’t see why I’d auth to an instance just to view it from a different instance.

When I added the community bit to the second URL, it was not a match, as it shouldn’t be. The pattern must match the entire URL.


HtTpS://user:pw@lemdro.id:443 is a valid url to lemdro.id and should match but will not

Well that one:

  • technically shouldn’t match, because it’s not a community URL
  • is not the form I expect and want to be using for this case
  • may actually work (if it were a real community link, which again, it’s not), because after authentication I think the browser strips the credentials

Http://maliciouswebsite.to/?q=http://lemdro.id will match but should not

No, it does not match.


AFAICT, this solution is working properly, but if you can find a URL that breaks it, please let me know.



I just posted this on the post you linked, but yeah I am hardcoding a list of instances into my solution. Here’s my comment, copied:


I’m using the Firefox addon Redirector, and one of my rules there redirects community links using regex. I keep adding to the pattern as I encounter more instances. Currently it’s:

Pattern: https://(lemdro\.id|lemmy\.run|beehaw\.org|lemmy\.ml|sh\.itjust\.works|lemmy\.fmhy\.ml|lemmy\.dbzer0\.com|lemmy\.world|sopuli\.xyz|lemmy\.kde\.social|lemmygrad\.ml|mander\.xyz|lemmy\.ca|zerobytes\.monster)/c/(.*)
Redirect to: https://programming.dev/c/$2@$1

Haha I’m still working that out for sure. I guess a combination of comments, a good debugger, practice, patterns such as making many very small well defined functions, and frankly a bunch of the people being geniuses (myself certainly excluded).


In case you haven’t heard, Factor just had a new stable release, and is tons of fun for postfix enthusiasts.



I wanted to try using yamlpath (yaml-set in particular) to recreate the first example, even though the usage model doesn’t quite match up. It’s a bit tedious because I don’t think you can do unrelated replacements in a single command:

$ <<<'{}' yaml-set -g ignored.hello -a world | yaml-set -g tabwidth -a 2 -F dquote | yaml-set -g trailingComma -a all | yaml-set -g singleQuote -a true -F dquote | yaml-set -g semi -a true -F dquote | yaml-set -g printwidth -a 120 -F dquote | yaml-get -p .

Trying to make it neater with Zsh and (forbidden) use of eval:

$ reps=(ignored.hello world tabwidth 2 trailingComma all singleQuote true semi true printwidth 120) cmd=()
$ for k v ( ${(kv)reps} )  cmd+=(yaml-set -g $k -a $v -F dquote \|)
$ <<<'{}' eval $cmd yaml-get -p .

EDIT: Ugh I can’t figure out how to properly write the less than sign in lemmy comments.


Here in New York City folks were distributing free bagels to the homeless. Out of concern for the food safety aspect of it all, our government helpfully disrupted the work and dumped bleach over the bagels to protect the needy from potentially unsafe food.

When the authorities finished their good work, the hungry folks proceeded to eat bleach-tainted bagels.

Governments don’t need to be red to do awfully stupid awful things.


Nothing that’s the same, but Telegram chats/channels and BeReal.


Not quite a god but

https://en.m.wikipedia.org/wiki/Sphinx

In Greek tradition, the sphinx is a treacherous and merciless being with the head of a woman, the haunches of a lion, and the wings of a bird. According to Greek myth, she challenges those who encounter her to answer a riddle, and kills and eats them when they fail to do so.

The word sphinx comes from the Greek Σφίγξ, associated by folk etymology with the verb σφίγγω (sphíngō), meaning “to squeeze”, “to tighten up”.


0xProto looks very nice, thanks! But of course no comparison is complete without Iosevka. And it’s so customizable it won’t be complete even then…

Here’s the build I use:


Create a ~/.netrc file with content like this:

machine dropout login YOUREMAIL password YOURPASSWORD

yt-dlp can use this:

yt-dlp --referer 'https://www.dropout.tv/' -nf 'http-540p' VIDEO_URL

That “http-540p” and alternatives can be listed:

yt-dlp --referer 'https://www.dropout.tv/' -n --list-formats VIDEO_URL 

Some of my favorites:

  • Launcher: Niagara
  • Rom: LineageOS
  • Browser: Firefox (with DarkReader and uBlock Origin)
  • Reddit: Relay (is this ending?)
  • HackerNews: Harmonic
  • Lemmy: Jerboa (haven’t tried alternatives)
  • Podcasts: AntennaPod (haven’t tried much else)
  • Identify stuff: LeafSnap (plants), SoundHound, Merlin (birds!)
  • Books: Moon+ Reader Pro
  • Barcodes: Catima
  • Computer stuff: KDE Connect
  • File stuff: Material Files and ZArchiver
  • TTS: @Voice Aloud Reader
  • Passwords: Bitwarden
  • Icons: Crayon or Viral
  • Keyboards: MS SwiftKey, maybe someday FlorisBoard, sometimes Hacker’s Keyboard
  • Scrobbles: Simple Scrobbler
  • Video: VLC and NewPipe
  • Weather: Weawow

EDITS:

  • Lemmy: Liftoff
  • Chat: Telegram
  • Email: Delta Chat?