<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: kdeldycke</title><link>https://news.ycombinator.com/user?id=kdeldycke</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 10 Apr 2026 05:09:55 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=kdeldycke" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by kdeldycke in "Open source security at Astral"]]></title><description><![CDATA[
<p>I maintain `repomatic`, a Python CLI + reusable workflows. It bakes most of the practices from this post into a drop-in setup for Python projects (uv-based, but works for others too). The goal is to make the secure default the easy default for maintainers who just want to ship packages. Also addresses a lot of GitHub Actions own shortcomings.<p>But thanks to the article I added a new check for the fork PR workflow approval policy.<p>More at: <a href="https://github.com/kdeldycke/repomatic" rel="nofollow">https://github.com/kdeldycke/repomatic</a></p>
]]></description><pubDate>Thu, 09 Apr 2026 15:42:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47705174</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=47705174</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47705174</guid></item><item><title><![CDATA[New comment by kdeldycke in "Show HN: Extra-Platforms, Python library to detect OS, arch, shell, CI, AI"]]></title><description><![CDATA[
<p>For the moment I consider that only one agent can be active. If multiple are detected, I raise an error. That is intentional to gather more context and feedback from users. I will change this behavior as soon as someone report me a use-case.<p>See the implementation at: <a href="https://github.com/kdeldycke/extra-platforms/blob/ecbe740bf7abe8b027ddda8512f3019f2e5bb02a/extra_platforms/detection.py#L1609-L1651" rel="nofollow">https://github.com/kdeldycke/extra-platforms/blob/ecbe740bf7...</a></p>
]]></description><pubDate>Thu, 02 Apr 2026 12:02:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47613280</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=47613280</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47613280</guid></item><item><title><![CDATA[Show HN: Extra-Platforms, Python library to detect OS, arch, shell, CI, AI]]></title><description><![CDATA[
<p>I built Extra Platforms over the past 5 years because I kept writing the same detection boilerplate over and over. And also because Python's original platform.linux_distribution() function has been removed in Python 3.8. Its replacement, Distro, only covers Linux.<p>It detects six traits (CPU architecture, OS/distribution, shell, terminal, CI, agents), which are grouped into families (BSD, LINUX, UNIX, ...) for convenience.<p>You can try the library without installing anything:<p><pre><code>  $ uvx --with extra-platforms python
  >>> from extra_platforms import current_platform, BSD, is_linux
  >>> current_platform()
  Platform(id='macos', name='macOS')
  >>> current_platform() in BSD
  True
  >>> is_linux()
  False
</code></pre>
It also ships Pytest decorators (@skip_linux, @unless_macos) for platform-conditional tests.<p>The library has zero dependencies and is Apache-2.0 licensed.<p>I'm interested in collecting edge cases, which you can send me by performing an auto-detection with:<p><pre><code>  $ uvx extra-platforms</code></pre></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47611994">https://news.ycombinator.com/item?id=47611994</a></p>
<p>Points: 9</p>
<p># Comments: 2</p>
]]></description><pubDate>Thu, 02 Apr 2026 09:24:09 +0000</pubDate><link>https://github.com/kdeldycke/extra-platforms</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=47611994</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47611994</guid></item><item><title><![CDATA[New comment by kdeldycke in "Falsehoods programmers believe about aviation"]]></title><description><![CDATA[
<p>I did: <a href="https://github.com/kdeldycke/kevin-deldycke-blog/blob/main/content/2016/falsehoods-programmers-believe-about-falsehoods-lists.md">https://github.com/kdeldycke/kevin-deldycke-blog/blob/main/c...</a></p>
]]></description><pubDate>Sat, 07 Jun 2025 10:51:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=44208794</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=44208794</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44208794</guid></item><item><title><![CDATA[New comment by kdeldycke in "Understanding the PURL Specification (Package URL)"]]></title><description><![CDATA[
<p>I have a project called Meta Package Manager that supports pURLs, so you can:<p>$ mpm install pkg:npm/left-pad@1.2.3<p>Other commands allows you to export the SBOM of all packages installed on your machine. More info at: <a href="https://github.com/kdeldycke/meta-package-manager">https://github.com/kdeldycke/meta-package-manager</a></p>
]]></description><pubDate>Thu, 05 Jun 2025 19:44:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=44195111</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=44195111</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44195111</guid></item><item><title><![CDATA[New comment by kdeldycke in "Rust library for building no-boilerplate CLI apps"]]></title><description><![CDATA[
<p>> My holy grail will still be landing on a good multi-layer configuration setup for Rust CLIs. Ideally CLI flags merged over top of environment variables merged over top of configuration files.<p>I did that for Python if you are interested: <a href="https://github.com/kdeldycke/click-extra">https://github.com/kdeldycke/click-extra</a><p>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.</p>
]]></description><pubDate>Wed, 04 Dec 2024 09:32:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=42315889</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=42315889</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42315889</guid></item><item><title><![CDATA[New comment by kdeldycke in "Engineers do not get to make startup mistakes when they build ledgers"]]></title><description><![CDATA[
<p>> When I decided to write a post on ledgers, I already knew there were a few good resources out there to help me.<p>One that's not referenced in this article and compile all of them is: <a href="https://github.com/kdeldycke/awesome-billing#readme">https://github.com/kdeldycke/awesome-billing#readme</a></p>
]]></description><pubDate>Fri, 29 Nov 2024 09:29:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=42272522</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=42272522</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42272522</guid></item><item><title><![CDATA[New comment by kdeldycke in "Show HN: We created the most comprehensive global sales tax/VAT/GST index"]]></title><description><![CDATA[
<p>Yes you're right. It is not complete and had plan to fix all that a couple of years ago but put it on the back-burner. I'm still happy to merge PRs upstream from motivated contributors! :)</p>
]]></description><pubDate>Wed, 03 Jul 2024 12:33:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=40865341</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=40865341</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40865341</guid></item><item><title><![CDATA[New comment by kdeldycke in "Show HN: We created the most comprehensive global sales tax/VAT/GST index"]]></title><description><![CDATA[
<p>They can scrap my CSV at: <a href="https://github.com/kdeldycke/vat-rates">https://github.com/kdeldycke/vat-rates</a></p>
]]></description><pubDate>Wed, 03 Jul 2024 09:29:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=40864274</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=40864274</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40864274</guid></item><item><title><![CDATA[New comment by kdeldycke in "Tantivy – full-text search engine library inspired by Apache Lucene"]]></title><description><![CDATA[
<p>I ‘m using <a href="https://stork-search.net" rel="nofollow">https://stork-search.net</a> for my static website search, but it’s no longer maintained. So yeah, Tantivy would be a great candidate to replace it! :)</p>
]]></description><pubDate>Tue, 28 May 2024 02:28:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=40496803</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=40496803</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40496803</guid></item><item><title><![CDATA[New comment by kdeldycke in "Ask HN: Did you encounter any leap year bugs today?"]]></title><description><![CDATA[
<p>Billing. It always has to be the billing. For a list of all other edge cases, you have: <a href="https://github.com/kdeldycke/awesome-falsehood#readme">https://github.com/kdeldycke/awesome-falsehood#readme</a></p>
]]></description><pubDate>Fri, 01 Mar 2024 08:24:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=39559764</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=39559764</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39559764</guid></item><item><title><![CDATA[New comment by kdeldycke in "Ask HN: What are the best articles on managing people?"]]></title><description><![CDATA[
<p>I compiled a list of these articles at: <a href="https://github.com/kdeldycke/awesome-engineering-team-management">https://github.com/kdeldycke/awesome-engineering-team-manage...</a><p>For each one I tried to extract the key point or Tl;Dr in the description.</p>
]]></description><pubDate>Mon, 12 Feb 2024 09:13:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=39342954</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=39342954</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39342954</guid></item><item><title><![CDATA[New comment by kdeldycke in "Microsoft is bringing Python to Excel"]]></title><description><![CDATA[
<p>We were discussing about Resolver One 6 months ago at: <a href="https://news.ycombinator.com/item?id=34819682">https://news.ycombinator.com/item?id=34819682</a><p>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)?</p>
]]></description><pubDate>Sat, 26 Aug 2023 20:56:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=37276841</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=37276841</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37276841</guid></item><item><title><![CDATA[New comment by kdeldycke in "Writing a Package Manager"]]></title><description><![CDATA[
<p>Something like Meta Package Manager? <a href="https://github.com/kdeldycke/meta-package-manager">https://github.com/kdeldycke/meta-package-manager</a></p>
]]></description><pubDate>Sat, 26 Aug 2023 20:49:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=37276766</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=37276766</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37276766</guid></item><item><title><![CDATA[New comment by kdeldycke in "Ask HN: Could you share your personal blog here?"]]></title><description><![CDATA[
<p><a href="https://kevin.deldycke.com" rel="nofollow noreferrer">https://kevin.deldycke.com</a> - Refresh in progress. A static site generated in Python thanks to Pelican, from MyST content, hosted on CloudFlare.</p>
]]></description><pubDate>Fri, 07 Jul 2023 07:45:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=36628527</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=36628527</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36628527</guid></item><item><title><![CDATA[New comment by kdeldycke in "Why use OpenID Connect instead of plain OAuth2?"]]></title><description><![CDATA[
<p>You can start with: <a href="https://github.com/kdeldycke/awesome-iam">https://github.com/kdeldycke/awesome-iam</a> . But beware of the rabbit hole!</p>
]]></description><pubDate>Tue, 27 Jun 2023 07:50:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=36490069</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=36490069</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36490069</guid></item><item><title><![CDATA[New comment by kdeldycke in "Everything that uses configuration files should report where they're located"]]></title><description><![CDATA[
<p>If you maintain a Python CLI, you can use Click-Extra [1].<p>It provides a ready-to-use --config option which reports how it sources the configuration file [2]:<p><pre><code>  $ 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.
  (...)
</code></pre>
It also adds an auto-magic --show-params [3] to help you see where parameters are coming from:<p><pre><code>  $ 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     │
  ╰─────────────────┴─────────────────────────────────────────┴─────────────────────────────────────────┴──────┴──────────────────┴─────────┴─────────────────┴─────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┴─────────────╯
</code></pre>
[1]: <a href="https://github.com/kdeldycke/click-extra">https://github.com/kdeldycke/click-extra</a><p>[2]: <a href="https://kdeldycke.github.io/click-extra/config.html" rel="nofollow noreferrer">https://kdeldycke.github.io/click-extra/config.html</a><p>[3]: <a href="https://kdeldycke.github.io/click-extra/parameters.html#show-params-option" rel="nofollow noreferrer">https://kdeldycke.github.io/click-extra/parameters.html#show...</a></p>
]]></description><pubDate>Sun, 25 Jun 2023 10:15:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=36466637</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=36466637</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36466637</guid></item><item><title><![CDATA[New comment by kdeldycke in "EU suggests breaking up Google's ad business in preliminary antitrust ruling"]]></title><description><![CDATA[
<p>In a project I maintain on billing and payments[1], I had a link to Google Ads API. It was documenting how they had hard-limit budget, with notions like "capped actuals" and "monthly with rollover". The explanation was quite good so I keep it around to explain the concept, and why it was perfect for customers to avoid any surprises.<p>Then the URL[2] 404'd and the API disappeared. I couldn't find any references to a "BillingCap". I wondered why[3].<p>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.<p>[1]: <a href="https://github.com/kdeldycke/awesome-billing">https://github.com/kdeldycke/awesome-billing</a><p>[2]: <a href="https://developers.google.com/ad-manager/api/reference/v201911/CompanyService.BillingCap" rel="nofollow noreferrer">https://developers.google.com/ad-manager/api/reference/v2019...</a><p>[3]: <a href="https://twitter.com/kdeldycke/status/1625409998225285121" rel="nofollow noreferrer">https://twitter.com/kdeldycke/status/1625409998225285121</a><p>[4]: <a href="https://developers.google.com/authorized-buyers/apis/guides/marketplace/proposals" rel="nofollow noreferrer">https://developers.google.com/authorized-buyers/apis/guides/...</a></p>
]]></description><pubDate>Wed, 14 Jun 2023 15:23:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=36327364</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=36327364</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36327364</guid></item><item><title><![CDATA[Motorized iPhone Stands with DockKit]]></title><description><![CDATA[
<p>Article URL: <a href="https://developer.apple.com/videos/play/wwdc2023/10304/">https://developer.apple.com/videos/play/wwdc2023/10304/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=36210584">https://news.ycombinator.com/item?id=36210584</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 06 Jun 2023 10:20:42 +0000</pubDate><link>https://developer.apple.com/videos/play/wwdc2023/10304/</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=36210584</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36210584</guid></item><item><title><![CDATA[New comment by kdeldycke in "Show HN: Trogon – An automatic TUI for command line apps"]]></title><description><![CDATA[
<p>That's funny because like Trogon, I also implemented some kind of introspection for Python's Click arguments structure. But to automatically derives a configuration file instead of a TUI: <a href="https://kdeldycke.github.io/click-extra/config.html" rel="nofollow">https://kdeldycke.github.io/click-extra/config.html</a></p>
]]></description><pubDate>Thu, 25 May 2023 08:17:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=36068244</link><dc:creator>kdeldycke</dc:creator><comments>https://news.ycombinator.com/item?id=36068244</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36068244</guid></item></channel></rss>