So, why is #dotnet involved in the blame for #MicrosoftAzure CLI upload to blob storage being weird?

Due to how #dotnet computes an MD5, and returns an array of 16 bytes (the output of `xxd -r -p` in the cautionary tale), instead of the more common hexadecimal string.

https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.md5?view=net-10.0#remarks

An MD5 string is 32 bytes, so #Microsoft saved 16 bytes by making it less easy to get an MD5 string... #640kEnoughForAnyone

#MicrosoftLogic #ShamelessTechShaming #LegacyTech #LegacyCode

MD5 Class (System.Security.Cryptography)

Represents the abstract class from which all implementations of the MD5 hash algorithm inherit.

I imagine it went down like this at the #MicrosoftAzure design meeting:

> Microsoft engineer: We should store the MD5 of the content in the blob storage database.

> Senior Microsoft engineer: Let's use #dotnet (!), and interpret the hexadecimal MD5 (with a newline!) as binary, and then base64 encode it!

They might have saved a couple of bytes... #dotnet ...πŸ‘ ...😬

#MicrosoftLogic #ShamelessTechShaming #LegacyTech #LegacyCode #LegacyCodeProblems

But try uploading a single file to blob storage with the #MicrosoftAzure CLI! (and consume it with official #dotnet API's - which require an MD5 checksum for blobs)

Surely `az storage blob upload --file foo [account] [container] [dst]` is enough?

Wrong! You need `az storage blob upload --file foo --content-md5 $(md5sum foo | cut -d ' ' -f 1 | xxd -r -p | base64) [account] [container] [dst]` 😬

Likely due to doing stuff with #dotnet

#ShamelessTechShaming #MicrosoftLogic #LegacyTech #LegacyCode

@horenmar Ha ha - that's the #MicrosoftLogic joke of the day! 🀣

It's amazing that this can happen in a world with #semver .

Suppose an upstream package messes up and releases v4.4 with a breaking change. For some reason (msys2), you need a vcpkg baseline where the package is at v4.5. You need v4.3, and even though v4.3 is in the versions database, you can only get v4.5, because the only versioning constraint available is "version>=": "4", which baseline v4.5 satisfies πŸŽ‰πŸ€¦β€β™‚οΈ

#ShamelessTechShaming

Surprised with how bad the #MicrosoftAzure CLI tool is for batch uploading files to blob storage.

If a file already exists you get a five-line long warning - per file. Fair enough (ish).

There is no command line switch to ignore the warning - and `--overwrite false` changes nothing: You still get thousands of warnings when uploading a set of files (where some may already exist) - and you are left wondering whether it succeeded. Not so fair.

#ShamelessTechShaming #MicrosoftLogic #LegacyCode

@horenmar It certainly features a "unique" design! 😊

> vcpkg has a unique way of handling package versions

https://learn.microsoft.com/en-us/vcpkg/get_started/overview#why-vcpkg

#WhyVcpkgWhy #ShamelessTechShaming #LegacyCodeProblems

vcpkg overview

Learn about how the vcpkg C/C++ package manager can help you acquire and manage dependencies.