<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: jph</title><link>https://news.ycombinator.com/user?id=jph</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 20 Apr 2026 12:53:42 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jph" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jph in "It's OK to compare floating-points for equality"]]></title><description><![CDATA[
<p>I have this floating-point problem at scale and will donate $100 to the author, or to anyone here, who can improve my code the most.<p>The Rust code in the assert_f64_eq macro is:<p><pre><code>    if (a >= b && a - b < f64::EPSILON) || (a <= b && b - a < f64::EPSILON)
</code></pre>
I'm the author of the Rust assertables crate. It provides floating-point assert macros much as described in the article.<p><a href="https://github.com/SixArm/assertables-rust-crate/blob/main/src/assert_f64/assert_f64_eq.rs" rel="nofollow">https://github.com/SixArm/assertables-rust-crate/blob/main/s...</a><p>If there's a way to make it more precise and/or specific and/or faster, or create similar macros with better functionality and/or correctness, that's great.<p>See the same directory for corresponding assert_* macros for less than, greater than, etc.</p>
]]></description><pubDate>Sat, 18 Apr 2026 11:14:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47814955</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=47814955</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47814955</guid></item><item><title><![CDATA[New comment by jph in "Red Hat takes on Docker Desktop with its enterprise Podman Desktop build"]]></title><description><![CDATA[
<p>If you're open to questions, I'm switching my teams from Docker to Podman on macOS. I'm hitting blockers for multi-user setups i.e. each developer has a non-admin account on the machine, whereas brew runs in its own account with admin permissions.<p>I would love a way to have Podman installable in userspace meaning in a non-admin account, or installable without brew, or with a dependency list such as QEMU or whatever else needs to be installed by an admin ahead of time, or with a sudousers config list, etc.<p>I know this is an atypical setup. Any advice from anyone here is much appreciated about multi-user non-admin macOS container setup for Podman or Docker or equivalent.</p>
]]></description><pubDate>Wed, 25 Feb 2026 18:30:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47155635</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=47155635</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47155635</guid></item><item><title><![CDATA[New comment by jph in "Start all of your commands with a comma (2009)"]]></title><description><![CDATA[
<p>Clever hack! <3 I also do namespacing yet in a different way.<p>I create a home directory "x" for executables that I want to manage as files, and don't want on PATH or as alias.<p>To run foo: ~/x/foo<p>For example I have GNU date as ~/x/date so it's independent of the system BSD date.</p>
]]></description><pubDate>Sat, 07 Feb 2026 11:21:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=46922968</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46922968</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46922968</guid></item><item><title><![CDATA[Queueing Theory v2: DORA metrics, queue-of-queues, chi-alpha-beta-sigma notation]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/joelparkerhenderson/queueing-theory">https://github.com/joelparkerhenderson/queueing-theory</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46922849">https://news.ycombinator.com/item?id=46922849</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 07 Feb 2026 10:54:48 +0000</pubDate><link>https://github.com/joelparkerhenderson/queueing-theory</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46922849</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46922849</guid></item><item><title><![CDATA[New comment by jph in "How to choose colors for your CLI applications (2023)"]]></title><description><![CDATA[
<p>Good questions.<p>For shell syntax, I aim for POSIX because for anything more advanced I switch from shell to a more powerful programming language.<p>Currently POSIX doesn't have the 'declare' statement, nor the '\e' syntax consistently, nor the 'echo -e' syntax consistently.<p>As for exporting, I do it because I have many quick scripts that I run often, and I prefer to switch the colors in one place such as in the evening from light mode to dark mode.<p>When you say the print statements aren't going to work by default, can you say more about this? Anything you can explain or point me to about this will be a big help. Thanks!</p>
]]></description><pubDate>Tue, 03 Feb 2026 21:50:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=46877826</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46877826</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46877826</guid></item><item><title><![CDATA[New comment by jph in "How to choose colors for your CLI applications (2023)"]]></title><description><![CDATA[
<p>Yes good points both, thank you. The source code link has more explanation about color choices and my preference of POSIX compatibility. You can also see the color function that checks NO_COLOR, CLICOLOR_FORCE, TERM = "dumb", -t 1, etc.<p>For color operands, I use raw escape codes because I aim for POSIX compatibility. If I'm working on something that needs more capabilities then I switch to a more powerful programming language e.g. python, rust, etc.<p>As far as I understand, POSIX tput defines some terminal operands (clear, init, reset, etc.) but not color operands (setaf, setab, sgr0, etc.).</p>
]]></description><pubDate>Tue, 03 Feb 2026 21:34:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46877622</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46877622</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46877622</guid></item><item><title><![CDATA[New comment by jph in "How vibe coding is killing open source"]]></title><description><![CDATA[
<p>I maintain multiple open source projects. In the past two months I've seen an uptick in AI-forgery attacks, and also an uptick in legitimate code contributions.<p>The AI-forgery attacks are highly polished, complete with forged user photos and fake social networking pages.<p>The legitimate code contributions are from people who have near-zero followers and no obvious track record.<p>This is topsy-turvy yet good news for open source because it focuses the work on the actual code, and many more people can learn how to contribute.<p>So long as code is good enough to get in the right ballpark for a PR, then I'm fine cleaning the work up a bit by hand then merging. IMHO this is a great leap forward for delivering better projects.</p>
]]></description><pubDate>Tue, 03 Feb 2026 20:39:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=46876943</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46876943</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46876943</guid></item><item><title><![CDATA[Show HN: unix-shell-script-kit 13.0 for POSIX functions, exit codes, color codes]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/SixArm/unix-shell-script-kit">https://github.com/SixArm/unix-shell-script-kit</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46848422">https://news.ycombinator.com/item?id=46848422</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 01 Feb 2026 19:02:06 +0000</pubDate><link>https://github.com/SixArm/unix-shell-script-kit</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46848422</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46848422</guid></item><item><title><![CDATA[New comment by jph in "How to choose colors for your CLI applications (2023)"]]></title><description><![CDATA[
<p>If you want a quick easy way to add some colors to your own shell scripts:<p><pre><code>    export STDOUT_COLOR_START='[34m'
    export STDOUT_COLOR_STOP='[0m'
    export STDERR_COLOR_START='[31m'
    export STDERR_COLOR_STOP='[0m'
</code></pre>
In your shell script:<p><pre><code>    print_stdout() {
        printf %s%s%s\\n "${STDOUT_COLOR_START:-}" "$*" "${STDOUT_COLOR_STOP:-}"
    }

    print_stderr() {
        >&2 printf %s%s%s\\n "${STDERR_COLOR_START:-}" "$*" "${STDERR_COLOR_STOP:-}"
    }
</code></pre>
Source: <a href="https://github.com/sixarm/unix-shell-script-kit" rel="nofollow">https://github.com/sixarm/unix-shell-script-kit</a><p>The source also has functions for nocolor, and detecting a dumb terminal setup that doesn't use colors, etc.</p>
]]></description><pubDate>Thu, 29 Jan 2026 17:36:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46813467</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46813467</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46813467</guid></item><item><title><![CDATA[New comment by jph in "Government drops plans for mandatory digital ID to work in UK"]]></title><description><![CDATA[
<p>I'm in the affected group because I'm a US citizen working in the UK. There's much more to the story because the UK has many digital ID aspects already in place-- such as for work visas and residence permits-- but these not coordinated into a whole.<p>What I experienced last year was many digital verification steps that were all required: open a UK bank account, sign up for a UK phone number, secure a UK residential postal address, apply for UK right-to-rent codes, generate a UK national insurance number, file for UK healthcare registration, and more.<p>Each step had different digital workflows and UI/UX. To traverse all these steps took hundreds of hours and a couple months wall time.<p>Many steps had catch-22s. The UK bank account needed a UK phone number, while the UK phone company needed a UK bank account. The UK payroll company needed a permanent residence, while the UK landlord needed UK payroll stubs. None of the steps had a quick simple way to digitally verify my UK work visa.<p>IMHO federation could be a big help here, such as for government agencies and government-approved businesses doing opt-in data sharing and ideally via APIs. For example, imagine each step can share its relevant information with other steps. This could make things more efficient, more accurate, and ideally more secure.</p>
]]></description><pubDate>Wed, 14 Jan 2026 17:54:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=46619477</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46619477</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46619477</guid></item><item><title><![CDATA[New comment by jph in "Show HN: Demo of Rust Lettre crate for sending email using SMTP"]]></title><description><![CDATA[
<p>Links:<p><a href="https://github.com/joelparkerhenderson/demo-rust-lettre-sync" rel="nofollow">https://github.com/joelparkerhenderson/demo-rust-lettre-sync</a><p><a href="https://github.com/joelparkerhenderson/demo-rust-lettre-async-tokio1-rustls-tls" rel="nofollow">https://github.com/joelparkerhenderson/demo-rust-lettre-asyn...</a><p><a href="https://github.com/joelparkerhenderson/demo-rust-lettre-async-tokio1-native-tls" rel="nofollow">https://github.com/joelparkerhenderson/demo-rust-lettre-asyn...</a></p>
]]></description><pubDate>Wed, 14 Jan 2026 01:00:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=46610964</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46610964</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46610964</guid></item><item><title><![CDATA[Show HN: Demo of Rust Lettre crate for sending email using SMTP]]></title><description><![CDATA[
<p>If you use Rust and want to learn about the Lettre crate for sending email using SMTP, here's a simple demonstration that can help with Lettre SMTP diagnostics and troubleshooting.<p>Feedback welcome, especially how to make it even easier for newcomers to diagnose SMTP issues. This code is all hand coded, no AI.<p>There are three implementations: synchronous, asynchronous with tokio1 rustls tls, asynchronous with tokio1 native tls.<p>https://github.com/joelparkerhenderson/demo-rust-lettre-sync<p>https://github.com/joelparkerhenderson/demo-rust-lettre-async-tokio1-rustls-tls<p>https://github.com/joelparkerhenderson/demo-rust-lettre-async-tokio1-native-tls</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46610947">https://news.ycombinator.com/item?id=46610947</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Wed, 14 Jan 2026 00:59:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=46610947</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46610947</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46610947</guid></item><item><title><![CDATA[New comment by jph in "ASCII-Driven Development"]]></title><description><![CDATA[
<p>Monodraw for Mac is my favorite. I'm a customer. $10 license. <a href="https://monodraw.helftone.com/" rel="nofollow">https://monodraw.helftone.com/</a></p>
]]></description><pubDate>Sat, 10 Jan 2026 22:53:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46570773</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46570773</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46570773</guid></item><item><title><![CDATA[New comment by jph in "UK government exempting itself from cyber law inspires little confidence"]]></title><description><![CDATA[
<p>UK government agencies have opportunities to improve cyber security in a pragmatic way by phasing in coordinated vulnerability disclosure.<p>This matches the article's point that the UK CSR bill may be a first step that helps to phase in bespoke legislation to improve UK national security.<p>For me this is professional because my work involves UK software engineering for medical information.<p>Coordinated vulnerability disclosure:
<a href="https://github.com/joelparkerhenderson/coordinated-vulnerability-disclosure" rel="nofollow">https://github.com/joelparkerhenderson/coordinated-vulnerabi...</a></p>
]]></description><pubDate>Sat, 10 Jan 2026 15:49:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=46566679</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46566679</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46566679</guid></item><item><title><![CDATA[New comment by jph in "Maybe comments should explain 'what' (2017)"]]></title><description><![CDATA[
<p>These examples could both be much better IMHO with a top comment block that describes the purpose of the functionality and shows good usage examples. Something like this below, and ideally using runnable doc comments to help keep the comment correctly explaining the code.<p>Replace symbol placeholders in the input string with translated values. Scan the string for symbol placeholders that use the format "$foo". The format uses a dollar sign, then optional ASCII letter, then optional word characters. Each recognized symbol is replaced with its corresponding value.<p>Symbols are only replaced if the symbol exists i.e. getSymbol(String) returns non-null, and the symbol has not already been replaced in this invocation.<p>Example:<p><pre><code>  - input = "Hello $name, welcome to $city!"

  - output -> "Hello Alice, welcome to Boston!"
</code></pre>
Return the string with symbol placeholders replaced.</p>
]]></description><pubDate>Sun, 04 Jan 2026 11:58:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46487140</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46487140</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46487140</guid></item><item><title><![CDATA[New comment by jph in "Show HN: Evidex – AI Clinical Search (RAG over PubMed/OpenAlex and SOAP Notes)"]]></title><description><![CDATA[
<p>Great project. Want to contact me when you'd like to talk? I do software engineering for clinicians at a health care organization, and I'd love to have my teams try your work in their own contexts. Email joel@joelparkerhenderson.com.</p>
]]></description><pubDate>Mon, 29 Dec 2025 23:13:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46427205</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46427205</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46427205</guid></item><item><title><![CDATA[New comment by jph in "The Java Ring: A Wearable Computer (1998)"]]></title><description><![CDATA[
<p>I worked at Sun and had the ring. We had a great demo where you could walk along a row of Sun workstations, and your X session would move with you, leaping from monitor to monitor, keeping pace with you. The idea at the time was "The Network is the Computer".<p>IIRC there was some coding that enabled each workstation to know where it was physically, so the security systems could know "User is signed into workstation X, and is requesting a move from workstation X to workstation Y, which is physically one meter away, so AOK to keep signed in."</p>
]]></description><pubDate>Mon, 15 Dec 2025 16:50:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=46276935</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46276935</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46276935</guid></item><item><title><![CDATA[SMART OKRs: the best highly-debatable way I know to align teams in large orgs]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/joelparkerhenderson/smart-okrs">https://github.com/joelparkerhenderson/smart-okrs</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46273028">https://news.ycombinator.com/item?id=46273028</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 15 Dec 2025 11:22:04 +0000</pubDate><link>https://github.com/joelparkerhenderson/smart-okrs</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46273028</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46273028</guid></item><item><title><![CDATA[New comment by jph in "Estimates are difficult for developers and product owners"]]></title><description><![CDATA[
<p>Yes small features help enormously. I've used ROPE and work breakdown structures (WBS) to estimate multiple projects at thousands of staff hours to under 4% of actual. The ROPE advantage is that it uses multiple perspectives, which gets stakeholders understanding that the estimates are imperfect and depend on many factors.</p>
]]></description><pubDate>Mon, 08 Dec 2025 19:55:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=46196794</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46196794</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46196794</guid></item><item><title><![CDATA[New comment by jph in "Estimates are difficult for developers and product owners"]]></title><description><![CDATA[
<p>Yes except in practice it's worked out more like this... Realistic is favored by tech teams. Optimistic is favored by salespeople and marketers. Pessimistic is favored by lawyers and compliance people. Equilibristic is favored by project managers and military.<p>Each stakeholder gets the kind of fortune they want. The important aspect (to me) is that the four viewpoints show all the stakeholders that their viewpoints are quite different.</p>
]]></description><pubDate>Mon, 08 Dec 2025 19:50:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46196739</link><dc:creator>jph</dc:creator><comments>https://news.ycombinator.com/item?id=46196739</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46196739</guid></item></channel></rss>