<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: amboar</title><link>https://news.ycombinator.com/user?id=amboar</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 15 Apr 2026 22:03:13 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=amboar" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by amboar in "How SQLite is tested"]]></title><description><![CDATA[
<p>I've become pretty enthusiastic about checklists.<p>In case it helps anyone else, I wrote a small tool that helps maintain and execute them:<p><a href="https://github.com/amboar/checklists/" rel="nofollow">https://github.com/amboar/checklists/</a><p>It's just a shell script wrapped around $EDITOR and git. The intent is to write checklists in the style of github-flavoured markdown. It has some tricks such as envsubst(1) interpolation and embedding little scripts whose execution is captured alongside the execution itself.<p>Here's an example checklist that's fairly well-worn (though is somewhat dated):<p><a href="https://gist.githubusercontent.com/amboar/f85449aad09ba22219dea274631b5a23/raw/4ae2f4800021f370175a457d83dfa558ab920bde/openbmc-linux-stable-bump.md" rel="nofollow">https://gist.githubusercontent.com/amboar/f85449aad09ba22219...</a><p>Where checklist entries are commands I just copy/paste them into a shell session. Usually this is in a tmux split with the checklist on one side with a shell on the other.<p>Could more of it be automated? Perhaps, though when some of the steps fail for various reasons, I find it's easier to recover or repair the situation if I have been invoking them myself sequentially. The embedded script support enables progressive automation where stability of the results is demonstrated over time.</p>
]]></description><pubDate>Thu, 18 Dec 2025 05:49:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=46309302</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=46309302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46309302</guid></item><item><title><![CDATA[New comment by amboar in "Is Software the UFOlogy of Engineering Disciplines?"]]></title><description><![CDATA[
<p>As I haven't seen a link to it in the comments yet: A while back Hillel Wayne put some effort into resolving the question of "Is Software Engineering Real Engineering?" with the crossover project: <a href="https://www.hillelwayne.com/talks/crossover-project/" rel="nofollow">https://www.hillelwayne.com/talks/crossover-project/</a><p>The conclusion he drew was that there's less difference than you might expect between software development and "traditional" engineering disciplines and that it's reasonable to consider software engineering a real engineering discipline.</p>
]]></description><pubDate>Fri, 07 Nov 2025 20:46:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=45850924</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=45850924</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45850924</guid></item><item><title><![CDATA[New comment by amboar in "The Helix Text Editor (2024)"]]></title><description><![CDATA[
<p>[keys.select."space"]
q = ":reflow"<p>has worked well for me, even if the reflow behaviour itself is sometimes frustrating</p>
]]></description><pubDate>Fri, 12 Sep 2025 11:36:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=45221057</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=45221057</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45221057</guid></item><item><title><![CDATA[New comment by amboar in "Programmers aren’t so humble anymore, maybe because nobody codes in Perl"]]></title><description><![CDATA[
<p>gcc's __attribute__((tainted_args)) is pretty handy: <a href="https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute" rel="nofollow">https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attribute...</a></p>
]]></description><pubDate>Fri, 01 Aug 2025 11:57:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=44755556</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=44755556</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44755556</guid></item><item><title><![CDATA[New comment by amboar in "GCC 15.1"]]></title><description><![CDATA[
<p>Section J.1 _Unspecified_ behavior says<p>> (11) The values of bytes that correspond to union members other than the one last stored into (6.2.6.1).<p>So it's a little more constrained in the ramifications, but the outcomes may still be surprising. It's a bit unfortunate that "UB" aliases to both "Undefined behavior" and "Unspecified behavior" given they have subtly different definitions.<p>From section 4 we have:<p>> A program that is correct in all other aspects, operating on correct data, containing unspecified behavior shall be a correct program and act in accordance with 5.1.2.4.</p>
]]></description><pubDate>Fri, 25 Apr 2025 14:59:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=43794268</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=43794268</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43794268</guid></item><item><title><![CDATA[New comment by amboar in "Git as a debugging tool"]]></title><description><![CDATA[
<p>Yeah, I have rerere turned on  However, it's not directly beneficial for the process outlined. With what I wrote about you only solve a given conflict at the end of a complete bisect run, not at each bisection point inside a run. The bisect/cherry-pick process is only used to determine whether conflicts do or don't happen at a given upstream commit. Usually you will solve a specific conflict only once, regardless of whether rerere is enabled.</p>
]]></description><pubDate>Sun, 31 Mar 2024 04:24:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=39881430</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=39881430</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39881430</guid></item><item><title><![CDATA[New comment by amboar in "Git as a debugging tool"]]></title><description><![CDATA[
<p>A handy trick I've developed is using`git bisect` to solve otherwise intractable rebase conflicts:<p><a href="https://codeconstruct.com.au/docs/bisect-intractable-rebase-conflicts/" rel="nofollow">https://codeconstruct.com.au/docs/bisect-intractable-rebase-...</a></p>
]]></description><pubDate>Sat, 30 Mar 2024 22:00:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=39879097</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=39879097</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39879097</guid></item><item><title><![CDATA[New comment by amboar in "Solar and wind to top coal power in US for first time in 2024"]]></title><description><![CDATA[
<p>Related, have something similar for the major grid in Australia and it's smaller counterpart in Western Australia: <a href="https://opennem.org.au/" rel="nofollow noreferrer">https://opennem.org.au/</a></p>
]]></description><pubDate>Sun, 17 Dec 2023 06:55:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=38670934</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=38670934</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38670934</guid></item><item><title><![CDATA[New comment by amboar in "Our BMCs are not great at keeping accurate time"]]></title><description><![CDATA[
<p>OpenBMC supports SoCs from Aspeed and Nuvoton, and HP were/are working to add support for their GXP (iLO) SoC.</p>
]]></description><pubDate>Tue, 09 Aug 2022 15:07:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=32399037</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=32399037</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32399037</guid></item><item><title><![CDATA[New comment by amboar in "Two startups tried to catch up to makers of advanced computer chips, and failed"]]></title><description><![CDATA[
<p>Ah, here's the circuit design equivalent of that story: <a href="https://twitter.com/dave_universetf/status/1473475348654268418" rel="nofollow">https://twitter.com/dave_universetf/status/14734753486542684...</a></p>
]]></description><pubDate>Tue, 11 Jan 2022 11:45:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=29890319</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=29890319</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29890319</guid></item><item><title><![CDATA[New comment by amboar in "Full key extraction of Nvidia TSEC"]]></title><description><![CDATA[
<p>One of my favourite talks is Decapping Chips the Hard Way by Adam Laurie and Zac Franken: <a href="https://youtu.be/0Z4aF-qiziM" rel="nofollow">https://youtu.be/0Z4aF-qiziM</a><p>That was 8 years ago</p>
]]></description><pubDate>Tue, 23 Nov 2021 09:33:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=29316070</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=29316070</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29316070</guid></item><item><title><![CDATA[New comment by amboar in "OpenPOWER Foundation announces LibreBMC, a POWER-based, fully open-source BMC"]]></title><description><![CDATA[
<p>> It was eating characters, which is the second worst thing it could do.<p>Okay, that's interesting. Did you file a bug with your system's firmware provider or with upstream?<p>You can file it against obmc-console at <a href="https://github.com/openbmc/obmc-console/issues" rel="nofollow">https://github.com/openbmc/obmc-console/issues</a><p>> Digging into the source, I found a really wonky software buffer... which kind of blew my mind - since hardware buffers and flow control exist.<p>Yep, it's how OpenBMC provides the console via IPMI, Redfish, SSH and on the commandline, as well as routing the console out to the connector on the rear of the chassis.<p>> I don't remember if that was a case where python was somehow in the pipeline, but that was unfortunately very common in OpenBMC.<p>Generally there hasn't been any python in the console handling pipeline. That said, python, while especially slow on a BMC, was pretty important for getting the project off the ground.<p>At this point OpenBMC has been python-free for several years.<p>> I also had a lot of trouble getting the thing to honor the most basic settings, like baud rate<p>There's some nuance to this, as depending on your system design the console may be coming from the host to the BMC via Aspeed's Virtual UARTs (VUARTs). The way the VUARTs work is the BMC and host are connected to either end of the two FIFOs between the UARTs' APB and LPC/eSPI interfaces. As such there's no baud rate as no data is clocked out in RS-232 fashion - the data is transferred as quickly as either side can access their register interfaces.<p>This has caused issues in the past with control flow that lead to data integrity issues:<p><a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/tty/serial/8250/8250_aspeed_vuart.c?h=v5.13-rc1&id=989983ea849d9421e8b9cd11f18e072fe00ea0d7" rel="nofollow">https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...</a><p><a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/tty/serial/8250/8250_aspeed_vuart.c?h=v5.13-rc1&id=5909c0bf9c7a17c52cf357bf5e752a76b8d72568" rel="nofollow">https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...</a><p>> But it is harder to confidently place the blame on that one. Is it OpenBMC's fault that the software provides no clue as to where things are going wrong in the serial plumbing? Is it the AST2500's fault that designers are routing every serial line through it and making it impossible to eliminate as the cause while troubleshooting?<p>I agree it can be difficult to debug where things are going wrong in the console pipeline.<p>In concept a serial console should be simple, but when you bring in requirements like various kinds of SoL, it starts to get more complex.</p>
]]></description><pubDate>Tue, 11 May 2021 09:42:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=27116079</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=27116079</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27116079</guid></item><item><title><![CDATA[New comment by amboar in "OpenPOWER Foundation announces LibreBMC, a POWER-based, fully open-source BMC"]]></title><description><![CDATA[
<p>> there is a lot about it that I won't miss, especially the way it handles serial communication<p>Out of curiosity, what were the issues you had with OpenBMC's serial communication?</p>
]]></description><pubDate>Tue, 11 May 2021 04:59:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=27114379</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=27114379</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27114379</guid></item><item><title><![CDATA[New comment by amboar in "Speed of Rust vs. C"]]></title><description><![CDATA[
<p>I realise your post is an argument in favour of Rust over C for these things, but regardless, you might be interested in a WIP library I've started to solve most of the issues you outlined: <a href="https://github.com/amboar/shmapper#libshmap" rel="nofollow">https://github.com/amboar/shmapper#libshmap</a></p>
]]></description><pubDate>Sat, 13 Mar 2021 06:22:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=26444464</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=26444464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26444464</guid></item><item><title><![CDATA[New comment by amboar in "Clockwise/Spiral Rule"]]></title><description><![CDATA[
<p>> - braindamaged linking<p>I mean, it's simple, but brain-damaged?<p>> - "if (!pred(x) || a <= b && y)" for "if not pred(x) or a =< b and y"<p>I guess more parentheses would improve the clarity but your English translation suffers the same problem as the code<p>> the c pre-processor<p>> - a broken comment syntax (how do you comment out a region with comments inside?)<p>Use the pre-processor that you complained about<p>#if 0
...
#endif</p>
]]></description><pubDate>Tue, 22 Dec 2020 12:48:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=25505726</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=25505726</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25505726</guid></item><item><title><![CDATA[New comment by amboar in "How io_uring and eBPF Will Revolutionize Programming in Linux"]]></title><description><![CDATA[
<p>As others have said, hacking it, certainly. But if you're not up for that and would like something more passive, read LWN.net (and possibly subscribe!)</p>
]]></description><pubDate>Fri, 27 Nov 2020 06:44:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=25226093</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=25226093</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25226093</guid></item><item><title><![CDATA[New comment by amboar in "Code Health: Make Interfaces Hard to Misuse (2018)"]]></title><description><![CDATA[
<p>Rusty's API scale captures this approach really well:<p>How Do I Make This Hard to Misuse?
<a href="https://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html" rel="nofollow">https://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html</a><p>What If I Don't Actually Like My Users?
<a href="https://ozlabs.org/~rusty/index.cgi/tech/2008-04-01.html" rel="nofollow">https://ozlabs.org/~rusty/index.cgi/tech/2008-04-01.html</a></p>
]]></description><pubDate>Sun, 06 Sep 2020 11:56:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=24390751</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=24390751</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24390751</guid></item><item><title><![CDATA[New comment by amboar in "Stop Memsetting Structures"]]></title><description><![CDATA[
<p>Use a packed struct (e.g. __attribute__((packed))). You may take a performance hit due to lack of alignment, but that's the judgement call</p>
]]></description><pubDate>Sat, 27 Apr 2019 20:50:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=19767550</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=19767550</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19767550</guid></item><item><title><![CDATA[New comment by amboar in "Gaining control of BMC from the host processor"]]></title><description><![CDATA[
<p>Right; then it comes down to platform design and whether you can reboot the soc in a mode that both reopens the bridges and doesn't kill the host, though that's not relevant if you're accessing it from the UART debug interface.<p>FWIW the mitigation patch in OpenBMC turns off all the bridges early in u-boot to minimise the race window for system reset/AC cycles.<p>Obviously would be better if it was possible to avoid the race window entirely (i.e. bridges default to closed, can be strapped open by the platform designer, and opened as required by firmware). We had asked for hardware changes along these lines for future generations (but may need to push a little harder...)</p>
]]></description><pubDate>Tue, 29 Jan 2019 13:30:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=19026084</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=19026084</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19026084</guid></item><item><title><![CDATA[New comment by amboar in "Gaining control of BMC from the host processor"]]></title><description><![CDATA[
<p>Something important to note is that this is largely a BMC firmware problem - the hardware can be securely configured to maintain CIA against the host, just sometimes it is not.</p>
]]></description><pubDate>Wed, 23 Jan 2019 07:16:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=18976352</link><dc:creator>amboar</dc:creator><comments>https://news.ycombinator.com/item?id=18976352</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18976352</guid></item></channel></rss>