Chloroform 🌸 😋 💕 💕
Badabinski @ Badabinski @kbin.earth Posts 0Comments 393Joined 1 yr. ago
That was the first one I saw. I have never experienced anything like the progression from "huh," to "what," to "WHAT," to inchoate noises that came out of me as I watched him make that boat. The Fabio one is more accessible imo, but the Bezos head boat is just so fucking glorious.
Yep. Bash was my first programming language so I have absolutely stepped on every single one of those goddamn pedblasters. I love it, but I also hate it, and I am still drawn to using it.
No worries! Bash was my first language, and I still unaccountably love it after 15 years. I hate it and say mean things about it, but I'm usually pleased when I get to write some serious Bash.
I personally don't believe there's a case for it in the scripts I write, but I've spent years building the || die
habit to the point where I don't even think about it as I'm writing. I'll probably edit my post to be a little less absolute, now that I'm awake and have some caffeine in me.
One other benefit I forgot to mention to explicit error handling is that you get to actually log a useful error message. Being able to rg 'failed to scrozzle foo.* because service y was not available'
and immediately find the exact line in the script that failed is so nice. It's not quite a stack trace with line numbers, but it's much nicer than what you have with bash by default or with set -e.
Lol, I love that someone made this. What if your input has newlines tho, gotta use that NUL terminator!
God, I wish more tools had nice NUL-separated output. Looking at you, jq
. I dunno why this issue has been open for so long, but it hurts me. Like, they've gone back and forth on this so many times...
From https://mywiki.wooledge.org/BashFAQ/105
Once upon a time, a man with a dirty lab coat and long, uncombed hair showed up at the town police station, demanding to see the chief of police. "I've done it!" he exclaimed. "I've built the perfect criminal-catching robot!"
The police chief was skeptical, but decided that it might be worth the time to see what the man had invented. Also, he secretly thought, it might be a somewhat unwise move to completely alienate the mad scientist and his army of hunter robots.
So, the man explained to the police chief how his invention could tell the difference between a criminal and law-abiding citizen using a series of heuristics. "It's especially good at spotting recently escaped prisoners!" he said. "Guaranteed non-lethal restraints!"
Frowning and increasingly skeptical, the police chief nevertheless allowed the man to demonstrate one robot for a week. They decided that the robot should patrol around the jail. Sure enough, there was a jailbreak a few days later, and an inmate digging up through the ground outside of the prison facility was grabbed by the robot and carried back inside the prison.
The surprised police chief allowed the robot to patrol a wider area. The next day, the chief received an angry call from the zookeeper. It seems the robot had cut through the bars of one of the animal cages, grabbed the animal, and delivered it to the prison.
The chief confronted the robot's inventor, who asked what animal it was. "A zebra," replied the police chief. The man slapped his head and exclaimed, "Curses! It was fooled by the black and white stripes! I shall have to recalibrate!" And so the man set about rewriting the robot's code. Black and white stripes would indicate an escaped inmate UNLESS the inmate had more than two legs. Then it should be left alone.
The robot was redeployed with the updated code, and seemed to be operating well enough for a few days. Then on Saturday, a mob of children in soccer clothing, followed by their parents, descended on the police station. After the chaos subsided, the chief was told that the robot had absconded with the referee right in the middle of a soccer game.
Scowling, the chief reported this to the scientist, who performed a second calibration. Black and white stripes would indicate an escaped inmate UNLESS the inmate had more than two legs OR had a whistle on a necklace.
Despite the second calibration, the police chief declared that the robot would no longer be allowed to operate in his town. However, the news of the robot had spread, and requests from many larger cities were pouring in. The inventor made dozens more robots, and shipped them off to eager police stations around the nation. Every time a robot grabbed something that wasn't an escaped inmate, the scientist was consulted, and the robot was recalibrated.
Unfortunately, the inventor was just one man, and he didn't have the time or the resources to recalibrate EVERY robot whenever one of them went awry. The robot in Shangri-La was recalibrated not to grab a grave-digger working on a cold winter night while wearing a ski mask, and the robot in Xanadu was recalibrated not to capture a black and white television set that showed a movie about a prison break, and so on. But the robot in Xanadu would still grab grave-diggers with ski masks (which it turns out was not common due to Xanadu's warmer climate), and the robot in Shangri-La was still a menace to old televisions (of which there were very few, the people of Shangri-La being on the average more wealthy than those of Xanadu).
So, after a few years, there were different revisions of the criminal-catching robot in most of the major cities. In some places, a clever criminal could avoid capture by wearing a whistle on a string around the neck. In others, one would be well-advised not to wear orange clothing in certain rural areas, no matter how close to the Harvest Festival it was, unless one also wore the traditional black triangular eye-paint of the Pumpkin King.
Many people thought, "This is lunacy!" But others thought the robots did more good than harm, all things considered, and so in some places the robots are used, while in other places they are shunned.
The end.
The issue with set -e
is that it's hideously broken and inconsistent. Let me copy the examples from the wiki I linked.
Or, "so you think set -e is OK, huh?"
Exercise 1: why doesn't this example print anything?
#!/usr/bin/env bash set -e i=0 let i++ echo "i is $i"
Exercise 2: why does this one sometimes appear to work? In which versions of bash does it work, and in which versions does it fail?
#!/usr/bin/env bash set -e i=0 ((i++)) echo "i is $i"
Exercise 3: why aren't these two scripts identical?
#!/usr/bin/env bash set -e test -d nosuchdir && echo no dir echo survived
#!/usr/bin/env bash set -e f() { test -d nosuchdir && echo no dir; } f echo survived
Exercise 4: why aren't these two scripts identical?
set -e f() { test -d nosuchdir && echo no dir; } f echo survived
set -e f() { if test -d nosuchdir; then echo no dir; fi; } f echo survived
Exercise 5: under what conditions will this fail?
set -e read -r foo < configfile
And now, back to your regularly scheduled comment reply.
set -e
would absolutely be more elegant if it worked in a way that was easy to understand. I would be shouting its praises from my rooftop if it could make Bash into less of a pile of flaming plop. Unfortunately , set -e
is, by necessity, a labyrinthian mess of fucked up hacks.
Let me leave you with a allegory about set -e
copied directly from that same wiki page. It's too long for me to post it in this comment, so I'll respond to myself.
I was tempted for years to use it as an occasional try/catch, but learning Go made me realize that exceptions are amazing and I miss them, but that it is possible (but occasionally hideously tedious) to write software without them. Like, I feel like anyone who has written Go competently (i.e. they handle every returned err
on an individual or aggregated basis) should be able to write relatively error-handled shell. There are still the billion other footguns built directly into bash that will destroy hopes and dreams, but handling errors isn't too bad if you just have a little die
function and the determination to use it.
People call set -euo pipefail
strict mode but, it's just another footgun in a language full of footguns. Shellcheck is a fucking blessing from heaven though. I wish I could forcibly install it on every developer's system.
Honestly, the fact that bash exposes low level networking primitives like a TCP socket via /dev/TCP is such a godsend. I've written an HTTP client in Bash before when I needed to get some data off of a box that had a fucked up filesystem and only had an emergency shell. I would have been totally fucked without /dev/tcp, so I'm glad things like it exist.
EDIT: oh, the article author is just using netcat, not doing it all in pure bash. That's a more practical choice, although it's way less fun and cursed.
EDIT: here's a webserver written entirely in bash. No netcat, just the /bin/bash binary https://github.com/dzove855/Bash-web-server
set -euo pipefail
is, in my opinion, an antipattern. This page does a really good job of explaining why. pipefail is occasionally useful, but should be toggled on and off as needed, not left on. IMO, people should just write shell the way they write go, handling every command that could fail individually. it's easy if you write a die
function like this:
die () { message="$1"; shift return_code="${1:-1}" printf '%s\n' "$message" 1>&2 exit "$return_code" } # we should exit if, say, cd fails cd /tmp || die "Failed to cd /tmp while attempting to scrozzle foo $foo" # downloading something? handle the error. Don't like ternary syntax? use if if ! wget https://someheinousbullshit.com/"$foo"; then die "failed to get unscrozzled foo $foo" fi
It only takes a little bit of extra effort to handle the errors individually, and you get much more reliable shell scripts. To replace -u, just use shellcheck with your editor when writing scripts. I'd also highly recommend https://mywiki.wooledge.org/ as a resource for all things POSIX shell or Bash.
I'm shocked nobody has mentioned Bobby Fingers (266k subscribers at this time). He's a sassy Irish man with a really deep voice who makes incredibly detailed dioramas of weird moments. My favorite diorama is the one he made about Fabio Lanzoni (the sexy guy on the cover of hundreds of romance novels) getting hit in the face by a goose while riding a roller coaster: https://youtube.com/watch?v=2RIEPKEhE2s
It's absolutely spectacular. He sculpts the faces out of clay in 1:1 scale, scans them, 3D prints them in miniature, and just goes above and beyond. The videos are funny as all fuck too, with tons of jokes with long setups. I'd highly recommend them.
I'd recommend stepping away from the printer for a few hours to get over the "everything is fucked forever" feeling. I've been there and I can absolutely relate. I once dropped a heavy metal thing on the screen of a brand new $1600 TV I had just unboxed and destroyed it. I was absolutely devastated for hours. Once I took the time to emotionally regulate, I was able to find a way to unfuck the situation. I strongly believe you'll be able to fix this issue and happily use your printer. Worst case is that you buy a replacement part. Prusa sells every single part of their printers individually, and I'm sure you'd be able to buy a new board for a reasonable price.
The unit is AQI (short for Air Quality Index). In the USA, AQI is the maximum value of a function run against measurements made over time for (any or all of) PM2.5, PM10, O3, SO2, and NOx. AQI is widely used, but the specific definition of air quality varies regionally. If some country or city has terrible levels of something other than what I mentioned earlier, it wouldn't make sense to use the same scale that the USA uses.
It's useful for us asthmatics because shit in the air is shit in the air. If I were especially sensitive to a particular chemical then I might need to dive into a specific AQI for just that chemical, or look at the actual metrics used to compute the AQI and adjust my air filtering needs accordingly.
EDIT: This is, quite frankly, a shit explanation. The Wikipedia article I linked has a great breakdown of how the AQI is calculated in various countries. I'd definitely recommend checking it out if you're curious.
I did some follow-up research and found that subsequent audits found no backdoors. They're either incredibly sneaky, or the person making these claims wasn't being entirely honest.
It's a thing that makes single sign-on easier and more extensible. If you have a login email matching a server side rule, you get kicked over to a different auth provider (e.g. Okta).
Still drives me absolutely fucking bazonkers though.
This is true, but LR controllers have also been a thing for a few years now. zwave-js-ui lacked support until fairly recently, but the hardware has been out for a while.
How could he do that to my best lad 😭
I've kept this vague, but still, SPOILERS ahead for The First Law series by Joe Abercrombie. SPOILERS. I'll see if I can get the damn spoiler tag working, but SPOILERS.
EDIT: No dice, I can't seem to get the spoiler tag working on Interstellar.
<details><summary> Spoilers for The First Law series by Joe Abercrombie</summary>
At the very end of the ninth and final book of the First Law series by Joe Abercrombie, your favorite character (possibly just of the series, but they might be your favorite fictional character ever) that you've spent three books getting to know and love and cherish is fucking executed in front of people they love and then you find out that execution was orchestrated by the second best character in the entire nine book series. It felt like my heart was being ripped up and I fukken wept like a small child. My partner was angry and depressed for months because this character stood for so much that was good and hopeful and then they just fucking died in such a horrible way. Joe Abercrombie is a fucking amazing writer for being able to elicit an emotional response like that and he's a bastard for doing so. The moment is totally earned and I'd highly recommend the books. Just make sure you're in a good place emotionally before you start the last one.
</details>
what a name for a company. I wonder someone will repost this when the whole "Lemmy is obsessed with beans" thing happens again.
EDIT: assuming this is your photo, you have a shitton of sodium cyanide there lol