From d7fed7179e2de2ae9e0945f50152c7fc2e397dd6 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Thu, 2 Feb 2023 16:38:40 +0200 Subject: [PATCH] Remove all mentions of the compile command from the README and add a note on the usage of negative arguments (#77) * Fix https://github.com/OpenCyphal/yakut/issues/64 * Remove all mentions of the compile command from the README --- README.md | 65 +++++++++++------------ docs/windows_environment_cyphal_path.png | Bin 0 -> 34025 bytes yakut/VERSION | 2 +- 3 files changed, 32 insertions(+), 35 deletions(-) create mode 100644 docs/windows_environment_cyphal_path.png diff --git a/README.md b/README.md index d9fe89b..efa2e3e 100644 --- a/README.md +++ b/README.md @@ -40,66 +40,63 @@ Transport layer inspection tools: ## Invoking commands Any option can be supplied either as a command-line argument or as an environment variable named like -`YAKUT_[subcommand_]option`. If both are provided, command-line options take precedence over environment variables. You can use this feature to configure desired defaults by exporting environment variables from the rc-file of your shell (for bash/zsh this is `~/.bashrc`/`~/.zshrc`, for PowerShell see `$profile`). +`YAKUT_[subcommand_]option`. If both are provided, command-line options take precedence over environment variables. You can use this feature to configure desired defaults by exporting environment variables from the rc-file of your shell (for bash/zsh this is `~/.bashrc`/`~/.zshrc`, for PowerShell see `$profile`); Windows users can use the Environment Variables dialog. Options for the main command shall be specified before the subcommand when invoking Yakut: ```bash -yakut --path=/the/path compile path/to/my_namespace --output=destination/directory +yakut --json publish --period=0.1 my.data.Type "{}" +# ^^^^-main ^^^^^^^^^^-subcommand ``` -In this example, the corresponding environment variables are `YAKUT_PATH` and `YAKUT_COMPILE_OUTPUT`. +In this example, the corresponding environment variable values are `YAKUT_JSON=1` and `YAKUT_PUBLISH_PERIOD=0.1`. There is a dedicated `--help` option for every subcommand. Yakut may also be invoked via its alias **`y`** as long as this name does not conflict with another installed program. -## Compiling DSDL +### Negative arguments -Suppose we have our custom DSDL namespace that we want to use. First, it needs to be *compiled*: +When using Yakut, one often needs to pass negative numbers as arguments. Passing the number as-is does not work because the leading minus character looks like a command-line option. To work around this, add `--` (double minus) somewhere after the last option and before the negative number: ```bash -yakut compile ~/custom_data_types/sirius_cyber_corp +yakut some-command --some-options -- -42 ``` -Most of the commands require the standard namespace to be available, so let's compile it too, along with the regulated namespace: +## Adding DSDL namespaces -```bash -yakut compile ~/public_regulated_data_types/uavcan ~/public_regulated_data_types/reg -``` - -Yakut can directly fetch archives containing DSDL namespace directories at the top level, too: +Yakut will automatically make use of all DSDL namespaces found in the locations specified in the `CYPHAL_PATH` environment variable, separated either with `:` or `;`. Each path is expected to contain DSDL root namespace directories in it, like `/uavcan`, for example. This behavior is common for all Cyphal tools, so it is possible that you already have this variable configured in your environment. If not, you can set it up like this for bash/shell/zsh; note that `~/.cyphal` is the recommended default that should always be present, possibly with other directories, if desired: ```bash -# Compile all DSDL namespaces found in the archives: -yakut compile \ - https://github.com/OpenCyphal/public_regulated_data_types/archive/refs/heads/master.zip \ - https://github.com/Zubax/zubax_dsdl/archive/refs/heads/master.zip +export CYPHAL_PATH="$HOME/.cyphal:$CYPHAL_PATH" ``` -Compilation outputs will be stored in the current working directory, but it can be overridden if needed via `--output` or `YAKUT_COMPILE_OUTPUT`. Naturally, Yakut needs to know where the outputs are located to use them; by default it looks in the current directory. You can specify additional search locations using `--path` or `YAKUT_PATH`. +Windows users can set this up in the Environment Variables dialog: -A question one is likely to ask here is: -*Why don't you ship precompiled regulated DSDL together with the tool?* -Indeed, that would be trivial to do, but we avoid that on purpose to emphasize our commitment to supporting vendor-specific and regulated DSDL at the same level. In the past we used to give regulated namespaces special treatment, which caused our users to acquire misconceptions about the purpose of DSDL. Specifically, there have been forks of the standard namespace extended with vendor-specific types, which is harmful to the ecosystem. +Environment Variables dialog on Windows -Having to manually compile the regulated namespaces is not an issue because it is just a single command to run. You may opt to keeping compiled namespaces that you use often somewhere in a dedicated directory and put -`YAKUT_PATH=/your/directory` into your shell's rc-file so that you don't have to manually specify the path when invoking Yakut. Similarly, you can configure it to use that directory as the default destination for compiled DSDL: +To actually make use of a DSDL namespace, simply put its root namespace directory inside any of the locations specified in `CYPHAL_PATH`. For example, you can add DSDL namespaces from downloaded zip archives like this (or you can repeat the steps manually): ```bash -# bash/zsh on GNU/Linux or macOS -export YAKUT_COMPILE_OUTPUT=~/.yakut -export YAKUT_PATH="$YAKUT_COMPILE_OUTPUT" -``` +mkdir -p ~/.cyphal # Ensure the directory actually exists. + +# Add all namespaces from the public regulated data types repository: +wget https://github.com/OpenCyphal/public_regulated_data_types/archive/refs/heads/master.zip -O dsdl.zip +unzip dsdl.zip -d ~/.cyphal +mv -f ~/.cyphal/public_regulated_data_types*/* ~/.cyphal +# There will be some garbage left in the destination directory, but it's mostly harmless. -```powershell -# PowerShell on Windows (double quotes are always required!) -$env:YAKUT_COMPILE_OUTPUT="$env:APPDATA\Yakut" -$env:YAKUT_PATH="$env:YAKUT_COMPILE_OUTPUT" +# Add vendor-specific namespaces the same way, if you need any: +wget https://github.com/Zubax/zubax_dsdl/archive/refs/heads/master.zip -O dsdl.zip +unzip dsdl.zip -d ~/.cyphal +mv -f ~/.cyphal/zubax_dsdl*/* ~/.cyphal ``` -So that you say simply `yakut compile path/to/my_namespace` -knowing that the outputs will be always stored to and read from a fixed place unless you override it. +A question one is likely to ask here is: +*Why don't you ship regulated DSDL together with the tool?* +Indeed, that would be trivial to do, but we avoid that on purpose to emphasize our commitment to supporting vendor-specific and regulated DSDL at the same level. In the past we used to give regulated namespaces special treatment, which caused our users to acquire misconceptions about the purpose of DSDL. Specifically, there have been forks of the standard namespace extended with vendor-specific types, which is harmful to the ecosystem. + +**Implementation note:** Yakut will automatically compile the DSDL namespaces pointed to by `CYPHAL_PATH` into Python packages and store them into the directory specified in the `PYCYPHAL_PATH` environment variable; if there is no such variable (usually there isn't), it defaults to `~/.pycyphal`. In certain exceptional circumstances you may want to drop the compiled cache, in which case simply remove that directory, which will force Yakut to rebuild all namespaces next time they are needed. ## Communicating @@ -227,7 +224,8 @@ Publishing a message twice (you can use a subscriber as explained earlier to see ```bash export UAVCAN__UDP__IFACE=127.63.0.0 export UAVCAN__NODE__ID=42 -yakut pub -N2 33:uavcan.si.unit.angle.scalar 2.31 +yakut pub -N2 33:uavcan.si.unit.angle.scalar -- -2.31 +# The "--" is needed to disambiguate negative numbers. ``` Like in the case of subscriber, automatic subject type discovery is also available here. @@ -285,7 +283,6 @@ Suppose that there is node 42 that serves `sirius_cyber_corp.PerformLinearLeastS ```bash $ export UAVCAN__UDP__IFACE=127.63.0.0 $ export UAVCAN__NODE__ID=42 -$ yakut compile sirius_cyber_corp ~/public_regulated_data_types/uavcan $ yakut call 42 123:sirius_cyber_corp.PerformLinearLeastSquaresFit 'points: [{x: 10, y: 1}, {x: 20, y: 2}]' --- 123: diff --git a/docs/windows_environment_cyphal_path.png b/docs/windows_environment_cyphal_path.png new file mode 100644 index 0000000000000000000000000000000000000000..3f554e52e80f11693b21a230c0d9007daffee867 GIT binary patch literal 34025 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