mastodon.world is one of the many independent Mastodon servers you can use to participate in the fediverse.
Generic Mastodon server for anyone to use.

Server stats:

8.5K
active users

#json

5 posts4 participants2 posts today

“Fun” learning YAML properly?

Okay. So. I have to learn ANSI-Bell for $ork. Meh. But okay.

Pre-existing “fun”

Playbooks are written in YAML. I hate YAML and have always used yaml2jsn to convert it to JSON (if possible) when I had to touch it in the past, as somehow a subset¹² of JSON is a valid subset of YAML accepted² by YAML parsers.

① you’ll have to make sure you don’t emit some codepoints literally, and to format numbers in scientific notation a specific way, but that’s generally a good advice for JSON emitters
② except JSON strings have codepoints outside the Basic Multilingual Plane encoded as two UTF-16 surrogates in \u#### notation whereas YAML parsers require it to be unescaped four-octet UTF-8, which breaks many JSON parsers; I ran into that just this week, in fact, for my RSS to Fediverse gateways…

I personally find YAML unwritable, due to things like GitHub Actions’ example of…

on:
  push:
    branches:
      - main

… does not convert to…

{
  "on": {
    "push": {
      "branches": [
        "main"
      ]
    }
  }
}

… but to:

{
  "1": {
    "push": {
      "branches": [
        "main"
      ]
    }
  }
}

(GitHub accepts both syntacēs in workflow files in JSON.)

But let’s go back to the “self-explaining, obvious” YAML:

on:
  push:
    branches:
      - main

So, we’ve already established that “on” is 1 and that something like country: no isn’t Norway but 0 (and real existing people have fallen into this, yet there are strong recommendations to not quote strings in YAML documents like ANSI-Bell playbooks, and somehow nobody even documents how strings are to be escaped and when they need to be escaped).

But, riddle me this:

push:
<2 spaces>branches:

But:

branches:
<2 spaces><hyphen-minus and space>main

But:

options:
<no space><hyphen-minus and space>Ubuntu
<no space><hyphen-minus and space>macOS

(All examples from here.)

I find this totally obvious and self-explanatory and consistent, and I totally know when to use two spaces, or dash-plus-space, or both.</sarcasm>

But there is training material!

One of the books I’ve been provided (actual published training material with an ISBN each) just hand-waves it away, the other says:

The target section looks like the following code snippet:

  - hosts: webservers
    user: root

[…] As per the YAML syntax, the line must start with a dash. […]

So, basically, the hosts: line must start with a dashhyphen-minus? I think not.

The “Hands-on interactive lab and helpful resources” in the Red Hat “YAML essentials for Ansible” “learning path” is similarly deficient in even fundamentally basic explanation. 0/10, won’t recommend.

Fun with training material, continued

The hand-waving book links to http://www.yaml.org/start.html, so let’s read…

a getting started guide for YAML

… in my favourite webbrowser lynx:

                                                   Page not found · GitHub Pages
 
 
   File not found
 
   The  site  configured  at  this  address does not contain the requested
   file.
 
   If  this is your site, make sure that the filename case matches the URL
   as well as any file permissions.
   For root URLs (like http://example.com/) you must provide an index.html
   file.
 
   [1]Read  the full documentation for more information about using GitHub
   Pages.
   [2]GitHub Status — [3]@githubstatus
 
 
 
 
 
 
 
Edit this document's URL: https://yaml.org/start.html

… oooookay?

But surely yaml.org has more material? *looks* … well, it has links to the specs and implementations. All very useful, but not right now for a hopefully structured introduction that explains the hows and ideally also the whys.

Let’s follow the *New* link in which they announce the 1.2.2 spec… a blogpost. Okay. It has a title bar (brown background in Firefox) with a promising link:

   Y
 
     *
     * [2]Blog
     * [3]Docs

Let’s follow #3 to “Docs”!

←←←                                                                      Twitter
   [1]Skip to main content
 
   Y
 
     *
     * [2]Blog
     * [3]Docs
 
     *
     *
 
   [4]YAML Glossary
 
   [5]YAML Cheat Sheet
 
   (BUTTON) Menu
 
YAML Documentation
     __________________________________________________________________
 
   YAML documentation is on the way!
 
#content

This 80×24 screenshot is literally the entirety of the official #YAML documentation.

Well, colour me impressed.

Wait, no.

Fuck that shit.

Wait. This is for $dayjob. $customer also edits playbooks. I’m sure they’ll be delighted if I run things through yaml2jsn and commit the result as #JSON.

Also, see footnote 2 above.

Fuuuuck I’m SOL.

So. Do I honestly have to wade through the spec to learn this?

(Not that this is new. When I first learnt Python in 2008, I had to look at the C-language source code of the #Python interpreter to figure out things missing from the documentation. Which brings us back full circle to #ansible, the culprit of bringing this entire shitshow to my attention. I’m a programmer, not a DevCloudOp or something.)

Im #Fediverse spielt das #Protokoll #WebFinger gemäß #RFC 7033 eine wichtige Rolle, um Nutzende ausfindig zu machen.

Diese Webfinger-Abfragen finden im normalen Umgang mit dem Fediverse aus Sicht der Nutzerschaft hinter den Kulissen statt. Von einer fediversalen #Instanz wird erwartet, daß sie über eine sogenannte "Well-known #URI" (dazu an anderer Stelle mehr) auf eine Webfinger-Anfrage reagiert.

Dieser (gut bekannte) Identifikator lautet:

/.well-known/webfinger?resource=acct:

(wobei die Domain der Instanz sowie die abzufragende Kennung zu ergänzen ist)

Netterweise kann man diese Abfrage auch über die Weboberfläche von webfinger.net durchführen lassen.

Wer neugierig ist und dies (z.B. mit der eigenen Fediverse-Adresse) ausprobieren will:

➡️ https://webfinger.net/ im Browser aufrufen.

➡️ Oben rechts im Suchkästchen "Lookup WebFinger" die gewünschte Adresse eingeben, z.B. tagestipp@mastodonium.de (ohne das führende At-Zeichen) oder die #URL-Schreibweise https://mastodonium.de/@tagestipp und das Ergebnis bewundern.

➡️ Es sollte ein "#JSON Resource Descriptor (JRD)" zu sehen sein. Okay, möglicherweise ist das immer noch ziemlich technisch... ;-)

Zum Nachlesen und schmökern:
https://en.wikipedia.org/wiki/WebFinger
https://datatracker.ietf.org/doc/html/rfc7033
https://webfinger.net/
https://en.wikipedia.org/wiki/Well-known_URI
https://de.wikipedia.org/wiki/Uniform_Resource_Identifier

🌖 用四十行 Awk 解析 JSON
➤ 在 shell 環境中輕量級的 JSON 解析方案
akr.am/blog/posts/parsing-json
本文介紹瞭如何在 POSIX shell 環境中使用 Awk 撰寫一個簡單的 JSON 解析器,避免了對外部工具(如 jq)的依賴。作者分享了在沒有 Python 的情況下,為了滿足現有 shell script 的需求,而用 Awk 實現 JSON 解析的經驗。該解析器具有基本驗證功能,並提供了一個簡單的介面,能根據提供的路徑提取 JSON 中的特定值。雖然在處理複雜 JSON 結構時可能存在限制,但對於來自受信任來源的簡單 JSON 數據,它提供了一個輕量級且可行的解決方案。
+ 哇,用 Awk 解析 JSON 真令人驚訝!雖然可能不如專門的工具那麼強大,但對於簡單的任務來說,這絕對是一個方便的選擇。
+ 這個方法很聰明,在沒有 Python 的情況下也能解決問題。對於需要在資源有限的環境中處理 JS
#程式語言 #JSON #Awk #Shell Script

seize the dev · Parsing JSON in Forty Lines of AwkA single-function JSON parser for the POSIX shell.

[Перевод] Преобразование JSON в объекты C++ на этапе компиляции: демонстрация возможностей принятой в C++26 рефлексии

На прошлой неделе в Софии, столице Болгарии, закончилась работа над стандартом C++26 , который помимо контрактов , std::execution и всего прочего теперь включает и рефлексию. В этой статье будет продемонстрирован один из примеров её использования: преобразование строк в формате JSON в объекты C++ на этапе компиляции.

habr.com/ru/articles/922876/

#c++ #c++26 #json #boostjson #reflection #рефлексия

ХабрПреобразование JSON в объекты C++ на этапе компиляции: демонстрация возможностей принятой в C++26 рефлексииНа прошлой неделе в Софии, столице Болгарии, закончилась работа над стандартом C++26 , который теперь включает все наши предложения по рефлексии: P2996R13 : Reflection for C++26 P3394R4 : Annotations...