this post was submitted on 30 Jun 2024
581 points (100.0% liked)

Programmer Humor

22322 readers
2658 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 2 years ago
MODERATORS
 

Meme transcription:

Panel 1: Bilbo Baggins ponders, “After all… why should I care about the difference between int and String?

Panel 2: Bilbo Baggins is revealed to be an API developer. He continues, “JSON is always String, anyways…”

top 50 comments
sorted by: hot top controversial new old
[–] RustyNova@lemmy.world 111 points 9 months ago* (last edited 9 months ago) (9 children)

To whoever does that, I hope that there is a special place in hell where they force you to do type safe API bindings for a JSON API, and every time you use the wrong type for a value, they cave your skull in.

Sincerely, a frustrated Rust dev

[–] skuzz@discuss.tchncs.de 37 points 9 months ago (2 children)

"Hey, it appears to be int most of the time except that one time it has letters."

throws keyboard in trash

[–] Username@feddit.de 16 points 9 months ago (2 children)

Rust has perfectly fine tools to deal with such issues, namely enums. Of course that cascades through every bit of related code and is a major pain.

[–] RustyNova@lemmy.world 24 points 9 months ago (1 children)

Sadly it doesn't fix the bad documentation problem. I often don't care that a field is special and either give a string or number. This is fine.

What is not fine, and which should sentence you to eternal punishment, is to not clearly document it.

Don't you love when you publish a crate, have tested it on thousands of returned objects, only for the first issue be "field is sometimes null/other type?". You really start questioning everything about the API, and sometimes you'd rather parse it as serde::Value and call it a day.

load more comments (1 replies)
[–] skuzz@discuss.tchncs.de 4 points 9 months ago

True, and also true.

load more comments (1 replies)
[–] Rednax@lemmy.world 12 points 9 months ago (1 children)

The worst thing is: you can't even put an int in a json file. Only doubles. For most people that is fine, since a double can function as a 32 bit int. But not when you are using 64 bit identifiers or timestamps.

[–] firelizzard@programming.dev 35 points 9 months ago (15 children)

That’s an artifact of JavaScript, not JSON. The JSON spec states that numbers are a sequence of digits with up to one decimal point. Implementations are not obligated to decode numbers as floating point. Go will happily decode into a 64-bit int, or into an arbitrary precision number.

load more comments (15 replies)
[–] Carighan@lemmy.world 5 points 9 months ago (1 children)

Relax, it's just JSON. If you wanted to not be stringly-typed, you'd have not used JSON.

(though to be fair, I hate it when people do bullshit types, but they got a point in that you ought to not use JSON in the first place if it matters)

load more comments (1 replies)
load more comments (6 replies)
[–] apprehentice@lemmy.enchanted.social 48 points 9 months ago (1 children)
[–] kionite231@lemmy.ca 50 points 9 months ago (2 children)
[–] Skua@kbin.earth 27 points 9 months ago (3 children)

strings are in base two, got it

[–] Rez@sh.itjust.works 38 points 9 months ago (2 children)

Wouldn't the answer be "10" in that case?

[–] Skua@kbin.earth 41 points 9 months ago

yes, if I could do maths

[–] joyjoy@lemm.ee 22 points 9 months ago (1 children)
[–] Eheran@lemmy.world 5 points 9 months ago (1 children)
[–] CanadaPlus@lemmy.sdf.org 16 points 9 months ago (6 children)

1 11 111 1111 11111 111111

That's base 1. By convention, because it doesn't really fit the pattern of positional number systems as far as I can tell, but it gets called that.

[–] Eheran@lemmy.world 6 points 9 months ago (1 children)

Oh, I get it, was reading as base 2 and confused by that. Essentially Roman numerals without all the fancy shortcuts.

load more comments (1 replies)
load more comments (5 replies)
[–] SpaceNoodle@lemmy.world 9 points 9 months ago

That's unary.

load more comments (1 replies)
[–] andyburke@fedia.io 47 points 9 months ago (4 children)

These JSON memes got me feeing like some junior dev out there is upset because they haven't read and understood the docs.

[–] RustyNova@lemmy.world 26 points 9 months ago (5 children)
load more comments (5 replies)
[–] kbin_space_program@kbin.run 14 points 9 months ago

Timing is about right for it to be a batch of newly minted CS grads getting into their first corporate jobs.

[–] Valmond@lemmy.world 6 points 9 months ago

Comments? Comments? Who needs comments?

[–] maxinstuff@lemmy.world 20 points 9 months ago (1 children)

I'll have you know all of my code is stringly typed.

load more comments (1 replies)
[–] ooterness@lemmy.world 19 points 9 months ago (3 children)
[–] 0x0@programming.dev 12 points 9 months ago (9 children)

If there are no humans in the loop, sure, like for data transfer. But for, e.g., configuration files, i'd prefer a text-based solution instead of a binary one, JSON is a nice fit.

[–] MonkderDritte@feddit.de 10 points 9 months ago* (last edited 9 months ago) (1 children)

What, no! Use TOML or something for config files.

[–] 0x0@programming.dev 6 points 9 months ago

TOML

Interesting... me likes it.

[–] Michal@programming.dev 5 points 9 months ago (4 children)

Yaml is more human readable/editable, and it's a superset of json!

load more comments (4 replies)
load more comments (7 replies)
[–] bleistift2@sopuli.xyz 4 points 9 months ago

Hell, no. If I wanted to save bytes, I’d use a binary format, or just fucking zip the JSON. Looking at a request-response pair and quickly understanding the transferred data is invaluable.

load more comments (1 replies)
[–] chicken@lemmy.dbzer0.com 9 points 9 months ago (1 children)

Explicit types are just laziness, you should be catching exceptions anyways.

[–] fapforce5@lemmy.world 8 points 9 months ago

I do. I return an error.

[–] brian@programming.dev 8 points 9 months ago (2 children)

json doesn't have ints, it has Numbers, which are ieee754 floats. if you want to precisely store the full range of a 64 bit int (anything larger than 2^53 -1) then string is indeed the correct type

load more comments (2 replies)
[–] veganpizza69@lemmy.world 8 points 9 months ago (2 children)

It's the API's job to validate it either way. As it does that job, it may as well parse the string as an integer.

[–] bleistift2@sopuli.xyz 6 points 9 months ago (1 children)

I refuse to validate data that comes from the backend I specifically develop against.

[–] TrickDacy@lemmy.world 7 points 9 months ago (1 children)

A string that represents types...

[–] RustyNova@lemmy.world 8 points 9 months ago

If a item can have different type, those label fields are actually quite useful. So I don't see the problem

load more comments