712 karma · joined November 5, 2010
Nothing protect you from a `yay -S foo` install and its dependencies. So this is not a guarantee or enforcement of a minimum release-age.
Actually writing this reply I went ahead and pointed that out in an issue at: https://github.com/Jguer/yay/issues/2883
(this is mpm, a Meta Package Manager)
But thanks to the article I added a new check for the fork PR workflow approval policy.
See the implementation at: https://github.com/kdeldycke/extra-platforms/blob/ecbe740bf7...
$ mpm install pkg:npm/left-pad@1.2.3
Other commands allows you to export the SBOM of all packages installed on your machine. More info at: https://github.com/kdeldycke/meta-package-manager
I did that for Python if you are interested: https://github.com/kdeldycke/click-extra
You create your CLI with Click as usual, then Click Extra introspects your "--parameters" to build up support for a corresponding configuration file in either TOML, YAML, JSON, INI or XML.
One that's not referenced in this article and compile all of them is: https://github.com/kdeldycke/awesome-billing#readme
For each one I tried to extract the key point or Tl;Dr in the description.
One mystery we did not resolve (pun intended) was why it did not find its audience. Was it too early? Was data science not established enough as a field? Was it because it was not Excel (i.e. the dominant tool)?
It provides a ready-to-use --config option which reports how it sources the configuration file [2]:
$ my-cli --verbosity DEBUG subcommand
debug: Load configuration matching ~/.config/my-cli/*.{toml,yaml,yml,json,ini,xml}
debug: Pattern is not an URL.
debug: Search local file system.
debug: No configuration file found.
(...)
It also adds an auto-magic --show-params [3] to help you see where parameters are coming from: $ cli --int-param1 3 --show-params
╭─────────────────┬─────────────────────────────────────────┬─────────────────────────────────────────┬──────┬──────────────────┬─────────┬─────────────────┬─────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────┬─────────────╮
│ ID │ Class │ Spec. │ Type │ Allowed in conf? │ Exposed │ Env. vars. │ Default │ Value │ Source │
├─────────────────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼──────────────────┼─────────┼─────────────────┼─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼─────────────┤
│ cli.color │ click_extra.colorize.ColorOption │ --color, --ansi / --no-color, --no-ansi │ bool │ │ │ CLI_COLOR │ True │ True │ DEFAULT │
│ cli.config │ click_extra.config.ConfigOption │ -C, --config CONFIG_PATH │ str │ │ │ CLI_CONFIG │ /home/runner/.config/cli/*.{toml,yaml,yml,json,ini,xml} │ /home/runner/.config/cli/*.{toml,yaml,yml,json,ini,xml} │ DEFAULT │
│ cli.help │ click_extra.colorize.HelpOption │ -h, --help │ bool │ │ │ CLI_HELP │ False │ False │ DEFAULT │
│ cli.int_param1 │ cloup._params.Option │ --int-param1 INTEGER │ int │ │ │ CLI_INT_PARAM1 │ 10 │ 3 │ COMMANDLINE │
│ cli.int_param2 │ cloup._params.Option │ --int-param2 INTEGER │ int │ │ │ CLI_INT_PARAM2 │ 555 │ 555 │ DEFAULT │
│ cli.show_params │ click_extra.parameters.ShowParamsOption │ --show-params │ bool │ │ │ CLI_SHOW_PARAMS │ False │ True │ COMMANDLINE │
│ cli.time │ click_extra.timer.TimerOption │ --time / --no-time │ bool │ │ │ CLI_TIME │ False │ False │ DEFAULT │
│ cli.verbosity │ click_extra.logging.VerbosityOption │ -v, --verbosity LEVEL │ str │ │ │ CLI_VERBOSITY │ WARNING │ Debug │ COMMANDLINE │
│ cli.version │ click_extra.version.VersionOption │ --version │ bool │ │ │ CLI_VERSION │ False │ False │ DEFAULT │
╰─────────────────┴─────────────────────────────────────────┴─────────────────────────────────────────┴──────┴──────────────────┴─────────┴─────────────────┴─────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┴─────────────╯
[1]: https://github.com/kdeldycke/click-extra[2]: https://kdeldycke.github.io/click-extra/config.html
[3]: https://kdeldycke.github.io/click-extra/parameters.html#show...
Then the URL[2] 404'd and the API disappeared. I couldn't find any references to a "BillingCap". I wondered why[3].
Now it makes sense: they got rid of budgets as you explained above. Everything's seems to be obfuscated behind a quite opaque Proposals/Deals[4] data structure now.
[1]: https://github.com/kdeldycke/awesome-billing
[2]: https://developers.google.com/ad-manager/api/reference/v2019...
[3]: https://twitter.com/kdeldycke/status/1625409998225285121
[4]: https://developers.google.com/authorized-buyers/apis/guides/...
A documented rant has made the rounds at https://sso.tax , which lists all vendors and their pricing of SSO.
All our clients had stacks of sedimented business rules and know-how, lying around in a mess of unreliable, unmaintained and un-versioned Excel files.
I was thinking of using Resolve One as a conduit that might be helpful to absorb all of that. A UI similar to a spreadsheet would be a clever trojan for adoption, as I could win the hearts and minds of the users that were not seeing themselves as developers. While bringing better software engineering and QA in the enterprisey world of organically grown, ad-hoc solutions.
Neptyne seems to revive that grand vision, so it would be interesting to study how and why Resolve One failed. Too soon perhaps, as the market wasn’t as big as it is today? Or maybe by the time you reach the critical point of the messy pile of Excel docs, you consent to invest into your core business and hire internal developers. I’d love to read a post-mortem of Resolve One.
Just did that on my projects with a simple call to:
find ./ -iname "*.py" -exec perl -p -i -e 's/# All Rights Reserved.*\n//sg' "{}" \;
The result: https://github.com/kdeldycke/meta-package-manager/commit/3ab...I have something similar for my dotfiles, a list of packages, their manager and version in a TOML file: https://github.com/kdeldycke/dotfiles/blob/main/packages.tom...
I then feed this to meta-package-manager[1] to install:
$ mpm restore ./packages.toml
[1] https://github.com/kdeldycke/meta-package-managerIt seems a web version of the app has been published in open-source[3] but that too has been EOL.
[1] https://web.archive.org/web/20120211201410/http://www.resolv... [2] https://www.resolversystems.com [3] https://github.com/pythonanywhere/dirigible-spreadsheet
That's worth investigating!
Now in a fictional, adversarial way, you can think of a bot exploiting this discrepancy to bankrupt a competitor: create dozens of fake accounts, consume just shy of $0.01 of resources, and have the platform pays 30x more in payment fees (public Stripe price is 30¢/transaction).
To incur a net loss of $1,000,000, you’ll have to find an antagonist ready to create 3,448,276 accounts (1_000_000 / (0.30 - 0.01)), each with their own identity and mean of payment, for a total of $34,482.76.
Fortunately this is highly impractical and will be caught real fast by your internal anti-abuse systems (you have those in place right?).
- isort (import statement sorting)
- pyupgrade (syntax upgrade for newer Python versions)
- pylint (general linting)
- pycln (remove unused imports)
- pydocstyle (docstring syntax checks)
All of these can be replaced with a single ruff call. Ruff consolidates the rules from all these tools into a comprehensive and non-overlapping corpus. And removes the burden of having to find the right invokation order.What's missing for ruff to be the gold standard, is to adopt features from:
- autopep8 (wraps long comments)
- docformatter (docstring auto-formatting)
- black (determinism code formatting)
- blacken-docs (applying black on Python code blocks in documentation)Strong vibes of the dot-com era reading the description but there's probably one or two insights there worth revisiting. Ordered! :)