this post was submitted on 12 Nov 2023
818 points (97.4% liked)

Programmer Humor

19213 readers
1414 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] topinambour_rex@lemmy.world 13 points 10 months ago (6 children)
[–] EmergMemeHologram@startrek.website 41 points 10 months ago* (last edited 10 months ago) (5 children)

Not always, but the second you use anchor/references you have sold your soul in a Faustian bargain of convenience.

On the alignment chart of data/markup formats:

  • lawful good: JSON
  • lawful neutral: TOML
  • lawful evil: XML
  • neutral good: reStructuredText
  • true neutral: HTML
  • neutral evil: LaTeX
  • chaotic good: YAML
  • chaotic neutral: Markdown
  • chaotic evil: xlsx/csv
[–] morrowind@lemmy.ml 16 points 10 months ago

Nah this chart needs fixing. Raw html is not neutral. And how is html neutral but xml evil. And who is writing restructured text outside of python?

[–] uid0gid0@lemmy.world 13 points 10 months ago (3 children)

I honestly think that JSON and YAML should be swapped due to YAML's strict indentation rules whereas you can just pack an entire JSON object on one line.

[–] Socsa@sh.itjust.works 7 points 10 months ago (1 children)

Also JSON has no comments. Which is great for me because I hate documenting my work, but it's still annoying.

[–] EmergMemeHologram@startrek.website 3 points 10 months ago (1 children)

Just create an attribute for your comments!

[–] sloppy_diffuser@sh.itjust.works 1 points 10 months ago

I just learned yesterday you can do this, lol. You can use "//": '' once at the root level of a package.json file.

Had to put an override to block a dependency of a dependency from installing (@types/* stubs when the package now has native type defs that conflicted with the no longer maintained stubs).

I put in a comment as to why its there.

[–] magic_lobster_party@kbin.social 6 points 10 months ago (1 children)

I think yaml’s need for indentation alone makes it chaotic evil. I’ve seen so many people struggle with the indentation than they really need to it’s not fun. Especially problematic with large configuration files.

JSON is easy to unpack with tools like jq or whatever.

[–] EmergMemeHologram@startrek.website 3 points 10 months ago (1 children)

There are 6 different combinations of “interpret multiline whitespace” character patterns. There are three types of single-line strings, and if you use “Yes” or “No” the data gets type cast.

Yaml is chaotic.

[–] uid0gid0@lemmy.world 4 points 10 months ago

Just because there are a lot of rules doesn't make something chaotic in this system. The lawful-chaotic axis is a spectrum of how much of a stickler for the rules you are. YAML's "one whitespace out of place and your whole config is fucked" attitude puts it squarely into lawful territory. JSON by contrast gives no shits about your file structure as long as your curly braces match.

[–] peopleproblems@lemmy.world 3 points 10 months ago

Oh this is a good point - the syntax error on line one has ruined several productive days.

Of course the tool would happily prettify it for me, but it has to be valid json. Which I think would make it more enjoyable if it said in that message "Good luck, we're counting on you."

[–] kuneho@lemmy.world 3 points 10 months ago

I went straight from chaotic evil to lawful good.

[–] Stumblinbear@pawb.social 3 points 10 months ago

TOML is my bestie

[–] stebo02@sopuli.xyz 2 points 10 months ago

good to know I'm on both the lawful good and the chaotic evil side

[–] mkhopper@lemmy.world 25 points 10 months ago (1 children)

It isn't "bad", as it does have a purpose. It's just fucking annoying to work with.

https://docs.platform.sh/learn/overview/yaml/what-is-yaml.html

[–] Michal@programming.dev 12 points 10 months ago (2 children)

How's it annoying? It's easier to edit by hand than json as it allows for comments and there's no trailing comma errors. I prefer it any day over json.

[–] magic_lobster_party@kbin.social 11 points 10 months ago

There’s a lot of foot guns in YAML. The specification is way more complicated with hidden obscurities. JSON specification is just 5 diagrams. YAML speciation on the other hand is an 86 page pdf, so there’s more room for nasty surprises (which is not a thing you want in configuration files).

I’ve also seen many people struggle more than they need to with the yaml indentation.

I think the only upside to yaml is that it allows for comments, but other than that JSON all the way.

https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell

[–] TheGiantKorean@lemmy.world 4 points 10 months ago (1 children)

The fact that it allows comments is really, really handy. I used to be a JSON advocate until I realized this one useful piece of info.

[–] bellsDoSing@lemm.ee 2 points 10 months ago (1 children)

Yeah, such a simple, but still killer feature. Really sad that JSON doesn't support them.

[–] TheGiantKorean@lemmy.world 1 points 10 months ago (1 children)

I wonder how you'd even implement that. Like maybe {! At the beginning.

[–] GTG3000@programming.dev 1 points 10 months ago (1 children)

Most comment-aware JSON parsers I've seen just use standard // to delineate comment lines.

[–] TheGiantKorean@lemmy.world 1 points 10 months ago

They make sense.

[–] MagicShel@programming.dev 6 points 10 months ago

There are plugins that go back and forth between JSON and YAML so as you might expect it's similar. Unlike JSON, spacing has semantic meaning, which can be a little annoying, especially when cutting and pasting. It's nice in that configs aren't cluttered up with open and close braces. It could be annoying AF if you're a tabs instead of spaces person but idk because I'm a spaces person.

I like YAML for config over .config files but it's not a big deal either way. It just encourages better organization of settings because the hierarchical structure demands it while .config let's you just drop a setting anywhere in the file. But it's valid to have the opposite preference for the exact same reasons.

[–] tuna_casserole@programming.dev 4 points 10 months ago (2 children)

not at all. it's used for configuration and stuff. having a lot of it can be a real bummer depending on the context. like a puppet config or perhaps a super weird docker compose setup. I've never heard anyone complain about the markup though. it's like blaming json for a crap api or something or idk blaming the coffee cup for burnt coffee 🤷

[–] MotoAsh@lemmy.world 8 points 10 months ago

It's just another structured data format. It's used for a lot more than config. It's also how you define commands and etc for Ansible. Like how a Maven project is defined in XML or a NodeJS package has its JSON.

Sure they're still "just" data formats on their own, but what they're used for is genuinely just as important as what it is. I really doubt XML would've held on like it has without HTML being the web.

[–] sndrtj@feddit.nl 2 points 10 months ago

For some little config it's fine, but it's horrible when used when you have thousands upon thousands of lines of it. Lots of DevOps tools tend to use it like a fully-blown turing-complete programming language, and each has a different DSL of doing variables, loops etc. And that becomes an abomination.

[–] joyjoy@lemm.ee 4 points 10 months ago

I'll answer your question with a question. Why does YAML support sexagesimal? (that's base 60)

ports:
- 22:22

Becomes

{
  "ports": [1342]
}
[–] learningduck@programming.dev 3 points 10 months ago (1 children)

I learned the hard way that no is false in yaml. Took us a while to realize why our app failed to start in Norway. Too many ways to do something.

[–] topinambour_rex@lemmy.world 1 points 10 months ago (1 children)
[–] learningduck@programming.dev 1 points 10 months ago

Yup. Have to ensure that you use "no" if you don't want yaml to equate it to false.