<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: RossBencina</title><link>https://news.ycombinator.com/user?id=RossBencina</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 16 May 2026 12:29:18 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=RossBencina" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by RossBencina in "I'm going back to writing code by hand"]]></title><description><![CDATA[
<p>> The first group are still thinking fairly deeply about design and interfaces and data structures, and are doing fairly heavy review in those areas.<p>I can't speak for others, but I'd go further and say that LLMs allow me to go <i>deeper</i> on the design side. I can survey alternative data structures, brainstorm conversationally, play design golf, work out a consistent domain taxonomy and from there function, data structure and field names, draft and redraft code, and then rewrite or edit the code myself when the AI cost/benefit trade off breaks down.</p>
]]></description><pubDate>Mon, 11 May 2026 04:06:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48090968</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=48090968</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48090968</guid></item><item><title><![CDATA[New comment by RossBencina in "A report on burnout in open source software communities (2025) [pdf]"]]></title><description><![CDATA[
<p>I'm sorry to hear about your experiences. I find it hard enough to deal with pushy people who have mismatched expectations (and yes, I'm not proud of it but at times I have been an entitled user.) I don't think what you're describing is limited to open source software though. Any time you make yourself available to the general population you're going to attract the full spectrum of human behavior. I guess the trick is to not make your project a honeypot for the debilitating stuff.<p>> I've learned to draw much stricter boundaries.<p>Could you elaborate on what has worked for you?<p>I imagine people who work in customer service have strategies too.</p>
]]></description><pubDate>Sat, 02 May 2026 01:39:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47982473</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=47982473</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47982473</guid></item><item><title><![CDATA[New comment by RossBencina in "Tell HN: An update from the new Tindie team"]]></title><description><![CDATA[
<p>Found this statement from Alexander Rowsell, Tindie social media manager and editor of the Tindie Blog (link expires in one day):<p><a href="https://privatebin.net/?db6418554d9d5728#3NjbsSUYzw227zG5P1kwH77U443RbJ17Ti8jTNGGtzog" rel="nofollow">https://privatebin.net/?db6418554d9d5728#3NjbsSUYzw227zG5P1k...</a></p>
]]></description><pubDate>Wed, 29 Apr 2026 10:18:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47946323</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=47946323</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47946323</guid></item><item><title><![CDATA[New comment by RossBencina in "The fastest Linux timestamps"]]></title><description><![CDATA[
<p>Great read. A question: what is the status of this problem on other architectures such as ARM and RISC-V, would the analysis and solution be the same? e.g. does ARM have invariant TSC?</p>
]]></description><pubDate>Mon, 27 Apr 2026 02:49:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47917189</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=47917189</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47917189</guid></item><item><title><![CDATA[New comment by RossBencina in "The West forgot how to make things, now it’s forgetting how to code"]]></title><description><![CDATA[
<p>Excellent post. Two stand-out points are deskilling through abolition of apprenticeship (or equivalent progression through the rank and responsibility), and loss of institutional knowledge, especially tacit knowledge stored in individual people. These are people problems more than they are technology problems. Without continuity of process and practice stuff gets lost. Sometimes change really is progress, for example software safety and security practices have progressed over the past 50 years, but other times change is just churn, or choices driven by misaligned incentives which will bite later, as the article describes.</p>
]]></description><pubDate>Sun, 26 Apr 2026 07:27:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47908182</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=47908182</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47908182</guid></item><item><title><![CDATA[New comment by RossBencina in "Any Open Source projects in need of documentation writer?"]]></title><description><![CDATA[
<p>If you're interested in audio, PortAudio is an established project with a lot of users. I have no doubt that the docs could be improved. I know this because I wrote a large chunk of the docs and I am frequently impressed by the docs of other projects. I'm not sure what the best way to improve them would be (improve structure? replace missing content? presentation? unify doxygen docs, README, and website, something else?). You could make an impact by reviewing our docs and posting your review as a GitHub ticket with a prioritised list of low-effort, low-churn, high-impact improvements. Even better if you submit some PRs. At the moment us maintainers have to allocate most of our limited time to maintenance.<p>Daily snapshot of the generated doxygen docs are here: <a href="https://files.portaudio.com/archives/pa_v19_doxydocs.tgz" rel="nofollow">https://files.portaudio.com/archives/pa_v19_doxydocs.tgz</a><p>website: www.portaudio.com<p>GitHub (including wiki): <a href="https://github.com/PortAudio/portaudio" rel="nofollow">https://github.com/PortAudio/portaudio</a><p>I'd also like to make a general comment about "making an impact" on open source projects. There are many ways to help out on an open source project, but one good way is to maximise the benefit:maintainer-cost ratio. Maintainer cost comes in a number of forms: cognitive and time cost of reviewing PRs, engaging in design discussions, iterating on PRs, coordinating a "live" work in progress PR for long periods of time, you get the idea. With this in mind, I like it when the contributor owns the PR from submission to merge, don't just make the PR, help the maintainers get it over the line however is needed. A lot can be done by simply submitting PRs that follow project guidelines and established conventions, are targeted at a single improvement, making them uncomplicated, quick and easy to review, and most importantly such obvious improvements that there is no question about merging the change. A pet peeve of mine is PRs that include one excellent insta-merge change and an unrelated change that is controversial or requires significant rework. Keep PRs orthogonal, atomic, simple. It might be more work for you but if you are available to contribute you are not the time-poor party.</p>
]]></description><pubDate>Fri, 10 Apr 2026 06:15:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47714271</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=47714271</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47714271</guid></item><item><title><![CDATA[New comment by RossBencina in "//go:fix inline and the source-level inliner"]]></title><description><![CDATA[
<p>I'm not sure what all of the hazards are, but I could imagine a language (or a policy) where public APIs ship with all of the inline fix directives packaged as robust transactions (some kind of "API-version usage diffs"). When the client pulls the new API version they are required to run the update transaction against their usage as part of the validation process. The catch being that this will only work if the fix is entirely semantically equivalent, which is sometimes hard to guarantee. The benefits would be huge in terms of allowing projects to refine APIs and fix bad design decisions early rather than waiting or never fixing things "because too many people already depend on the current interface".</p>
]]></description><pubDate>Mon, 16 Mar 2026 00:46:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47393771</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=47393771</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47393771</guid></item><item><title><![CDATA[New comment by RossBencina in "Pushing and Pulling: Three reactivity algorithms"]]></title><description><![CDATA[
<p>When I first started working with dataflow computation I was fortunate to have a computer scientist point me in the direction of an introductory compiler textbook.<p>It's worth considering that the dataflow graph (as an abstract mathematical graph), the computation graph (the partial order of function execution required to compute the data), the traversal strategy, the runtime representation of the graph, the runtime data structure for the graph, and the runtime data structures for efficient reactive update are all separate but related aspects.<p>For instance, push and pull are both directed graphs. They have the same connectivity, but the direction of the arrows is reversed. You can only efficiently traverse edges in the direction that you represent. A <i>dataflow</i> graph has edges pointing from sources to sinks, a <i>data dependency</i> graph has edges pointing from sinks to sources. [Side note: if a computation can produce multiple results the data dependency graph and the computation dependency graph are not exactly the same thing and you need to be clear on the distinction, but I am assuming here single-output nodes]. In a dataflow graph you want to evaluate the changed nodes prior to evaluating the downstream nodes that depend on them. As TFA states, this necessitates a postorder (children first) traversal of the <i>data dependency</i> graph, starting at all terminal sinks, and terminating at sources or already visited nodes. You can use a sense-reversing "visited" flag on each node to avoid a reset pass. As noted in the article this traversal need only be performed when the graph topology changes. But for stable traversal order the topological sort can be cached in an array. Needless to say that arrays are much faster to iterate over than any kind of pointer chasing. [Witness the rise of Entity-Component systems over OO models]. I suspect that there is a cut-over point where it is more efficient to iterate the entire array (perhaps with memoized results, or JIT compilation) than to perform a more surgical "update only what is downstream of the changes" approach. Another approach is to assign all nodes a contiguous integer id, and maintain a dirty node bitmask where bit-indices correspond to node ids. In addition, each source has a bitmask that is 1 for <i>all</i> downstream dependent nodes. When a source changes, bitwise-or source.downstream_dependents bitmask with the global dirty_nodes bitmask. To evaluate (not necessarily immediately), iterate in topological order processing only the dirty nodes. In any case, the point I'm trying to make is that the data structure that is best for building or manipulating the graph could very well be different from the data structure that is best for computing the desired results. There will be trade-offs to be made. For this reason alone it's best to keep the graph-theoretic properties and the implementation data structures separate in your head.<p>In my view the interesting requirements raised by the article are (1) lazy evaluation (e.g. of expensive or conditionally required data). This might be where <i>control flow graphs</i> of <i>basic blocks</i> enter the story. and, (2) dynamic reconfiguration during node evaluation. Some questions I'd be asking about dynamic reconfiguration are: what happens if you delete a node that has yet to be evaluated? will new subgraphs "patched in" to the existing graph (how exactly?), or are they always disconnected components that can be evaluated after the current graph traversal completes?</p>
]]></description><pubDate>Mon, 09 Mar 2026 00:02:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47303077</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=47303077</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47303077</guid></item><item><title><![CDATA[New comment by RossBencina in "The unreasonable effectiveness of the Fourier transform"]]></title><description><![CDATA[
<p>> exponential functions remain (scaled) exponential when passed through such operations.<p>See also: eigenvalue, differential operator, diagonalisation, modal analysis</p>
]]></description><pubDate>Sat, 10 Jan 2026 00:56:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=46561522</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46561522</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46561522</guid></item><item><title><![CDATA[New comment by RossBencina in "The unreasonable effectiveness of the Fourier transform"]]></title><description><![CDATA[
<p>Pretty sure in the USA you can patent mathematics if it is an integral part of the realisation of a physical system.* There is a book "Math you Can't Use" that discusses this.<p>* not a legal definition, IANAL.</p>
]]></description><pubDate>Fri, 09 Jan 2026 08:00:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46551183</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46551183</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46551183</guid></item><item><title><![CDATA[New comment by RossBencina in "The unreasonable effectiveness of the Fourier transform"]]></title><description><![CDATA[
<p>Moreover, The Unreasonable Effectiveness of Linear, Orthogonal Change of Basis.</p>
]]></description><pubDate>Thu, 08 Jan 2026 22:50:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=46547645</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46547645</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46547645</guid></item><item><title><![CDATA[New comment by RossBencina in "The unreasonable effectiveness of the Fourier transform"]]></title><description><![CDATA[
<p>To be more precise, when working with sampled data with uniform sample rate you use the Discrete Time Fourier Transform (DTFT), not the Fourier Transform!. None the less, you still end up with an approximate spectrum which is the signal spectrum convolved with the window function's spectrum.<p>In my view the Fourier Transform is still useful in the real world. For example you can use it to analytically derive the spectrum of a given window.<p>But I think the parent is hinting at wavelet basis.</p>
]]></description><pubDate>Thu, 08 Jan 2026 22:48:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=46547613</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46547613</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46547613</guid></item><item><title><![CDATA[New comment by RossBencina in "Project Patchouli: Open-source electromagnetic drawing tablet hardware"]]></title><description><![CDATA[
<p>> Honestly, just pick up the Art of Electronics<p>I got this advice in 1998. I have the book. I found it useful for the "art" part. It got me through the projects that I was working on at the time, but personally it didn't help me with the fundamentals. Paraphrasing what has been said on this site many times in the past: AoE is a great first book in practical electronics if you already have an undergraduate degree in physics. I showed my brother AoE when he was building guitar pedals and he couldn't make sense of it and said it was obviously assuming things that he didn't know (he had no high-school science background).<p>There are a lot of potential and/or assumed pre-requistites even for basic electronics: high school physics, first-year calculus, maybe a differential equations course, certainly familiarity with complex numbers. As I understand it EEs take vector calculus and classical electromagnetism, that's a long road for self-study. For that reason it's hard to give general advice about where to begin.<p>For someone starting out I think the first things to study are DC and then AC analysis of passive circuits (networks of resistors, capacitors, inductors), starting with networks of resistors. Ohms Law, what current and voltage actually mean, some basic introduction to the physics passive components. This is the basics, and I don't see AoE getting anyone over this hump. This could be learnt in many ways, electronics technicians and amateur radio people know this stuff -- there are no doubt courses outside university both on line and in person. If we're talking books, get a second hand copy of Grob's "Basic Electronics." Once that's covered you can move on to semiconductors. I can recommend Malvino's "Electronic Principles," but this book won't teach you about resistors, capacitors and inductors. After that I think the Art of Electronics would be approachable. And also more specialised topics like digital design or operational amplifier circuits.<p>A book that usually gets a mention is Paul Scherz "Practical Electronics for Inventors." I got that book later, I personally found it a bit overwhelming with the mixture of really basic practical stuff combined with more advanced circuit theory, but it's no doubt popular for a reason.<p>Another standard recommendation is to buy one ARRL Handbook from each decade (I have 1988), the older ones have less advanced (hence more accessible) material. But reading the "Electronics Fundamentals" chapter is no substitute for Grob and Malvino.</p>
]]></description><pubDate>Thu, 08 Jan 2026 11:17:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=46539743</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46539743</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46539743</guid></item><item><title><![CDATA[New comment by RossBencina in "Corundum – open-source FPGA-based NIC and platform for in-network compute"]]></title><description><![CDATA[
<p>Alex Forencich has been live streaming rebuilding Corundum starting a few weeks ago: <a href="https://www.youtube.com/@AlexForencich/streams" rel="nofollow">https://www.youtube.com/@AlexForencich/streams</a><p>As I understand it Taxi is where new development is happening: <a href="https://github.com/fpganinja/taxi" rel="nofollow">https://github.com/fpganinja/taxi</a></p>
]]></description><pubDate>Sun, 04 Jan 2026 09:32:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46486433</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46486433</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46486433</guid></item><item><title><![CDATA[New comment by RossBencina in "Xr0 verifier, guarantee the safety of C programs at compile time"]]></title><description><![CDATA[
<p>In general, symbolic execution will consider all code paths. If it can't (or doesn't want to) prove that the condition is always true or false it will check that the code is correct in two cases: (1) true branch taken, (2) false branch taken.</p>
]]></description><pubDate>Sun, 04 Jan 2026 00:13:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=46483281</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46483281</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46483281</guid></item><item><title><![CDATA[New comment by RossBencina in "Xr0 verifier, guarantee the safety of C programs at compile time"]]></title><description><![CDATA[
<p>> we don't even use static analysis and validators for c or C++<p>There is some use, how much I don't know. I guess it should be established best practice by now. Also run test suites with valgrind.<p>Historically many of the C/C++ static analyzers were proprietary. I haven't checked lately but I think Coverity was (is?) free for open source projects.</p>
]]></description><pubDate>Sun, 04 Jan 2026 00:09:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46483256</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46483256</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46483256</guid></item><item><title><![CDATA[New comment by RossBencina in "Take One Small Step"]]></title><description><![CDATA[
<p>The part about task initiation induced stress -> flight or fight -> distraction/relief-seeking resonated with me. I hadn't noticed that before. The small steps bit reminds me of BJ Fogg's "brush one tooth."<p>One common failure mode of "do the smallest/easiest thing first" that the article didn't address was that sometimes it's so easy to "buy the running shoes" that you end up with a house full of "easy first steps." I think a better approach is to aim to eliminate unnecessary complexity in moving towards the goal. You can do this by aiming for the smallest, easiest, and simplest first step that simultaneously <i>maximises progress</i> towards the goal. e.g. "I want to make a stand to hold my XYZ." Bad first step: Buy a 3D printer. Good first step: Improvise something out of cardboard.</p>
]]></description><pubDate>Sat, 03 Jan 2026 23:56:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=46483166</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46483166</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46483166</guid></item><item><title><![CDATA[New comment by RossBencina in "Clock synchronization is a nightmare"]]></title><description><![CDATA[
<p>> I kinda don’t like PTP. Too complicated and requires specialized hardware.<p>In my view the specialised hardware is just a way to get more accurate transmission and arrival timestamps. That's useful whether or not you use PTP.<p>> My mental model is that you form a connected graph of clocks and this allows you to convert arbitrary timestamps from any clock to any clock. This is a lossy conversion that has jitter and can change with time.<p>This sounds like the "peer to peer" equivalent to PTP. It would require every node to maintain state about it's estimate (skew, slew, variance) of every other clock. I like the concept, but obviously it adds complexity to end-stations beyond what PTP requires (i.e. increases the hardware cost of embedded implementations). Such a system would also need to model the network topology, or control routing (as PTP does), because packets traversing different routes to the same host will experience different delay and jitter statistics.<p>> TicSync is cool<p>I hadn't seen this before, but I have implemented similar convex-hull based methods for clock recovery. I agree this is obviously a good approach. Thanks for sharing.</p>
]]></description><pubDate>Sun, 28 Dec 2025 03:14:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=46408039</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46408039</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46408039</guid></item><item><title><![CDATA[New comment by RossBencina in "Clock synchronization is a nightmare"]]></title><description><![CDATA[
<p>C++11 distinguishes system_clock from steady_clock. As you say, using system_clock is a bug.</p>
]]></description><pubDate>Sun, 28 Dec 2025 03:05:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=46407994</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46407994</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46407994</guid></item><item><title><![CDATA[New comment by RossBencina in "Clock synchronization is a nightmare"]]></title><description><![CDATA[
<p>Out of interest, how do you measure a sub-10ps phase lock between devices 50km apart?</p>
]]></description><pubDate>Sun, 28 Dec 2025 02:54:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=46407949</link><dc:creator>RossBencina</dc:creator><comments>https://news.ycombinator.com/item?id=46407949</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46407949</guid></item></channel></rss>