<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: pkkm</title><link>https://news.ycombinator.com/user?id=pkkm</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 20 May 2026 19:03:10 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=pkkm" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by pkkm in "Ruby 4.0.0 Preview2"]]></title><description><![CDATA[
<p>Similar feelings here. Ruby's philosophy of providing a ton of different ways to do the same thing can lead to some pretty sweet-looking code, almost like poetry... but I'd rather have Python's stylistic consistency and better-integrated type hints. Now that Python has Poetry and uv, Ruby's main remaining advantage has evaporated and it's hard for me to justify using the language.<p>Another thing I don't like about Ruby is how much the community has embraced the Clean Code brand of readability snake oil. It's easy to come by the opinion that any function over 5 lines is a code smell and over 10 lines it's outright bad. I've even heard the view that if-else statements are a code smell and I should always try to replace them with different classes that have the same interface. To be fair, that only happened twice, but that's two more times than I've heard it from users of any other language. I think that the Python community usually strikes a better balance between avoiding excessive function/class length and avoiding excessive indirection.</p>
]]></description><pubDate>Tue, 18 Nov 2025 17:41:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=45969478</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=45969478</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45969478</guid></item><item><title><![CDATA[Iommi: A toolkit to build web apps faster]]></title><description><![CDATA[
<p>Article URL: <a href="https://docs.iommi.rocks/index.html">https://docs.iommi.rocks/index.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45233179">https://news.ycombinator.com/item?id=45233179</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 13 Sep 2025 16:05:45 +0000</pubDate><link>https://docs.iommi.rocks/index.html</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=45233179</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45233179</guid></item><item><title><![CDATA[New comment by pkkm in "PHP 8.5 adds pipe operator"]]></title><description><![CDATA[
<p>PHP has its significant flaws, but superficial syntactic differences aren't among them. In my experience, it takes two weeks to get used to pretty much any syntax.</p>
]]></description><pubDate>Tue, 05 Aug 2025 21:18:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=44804449</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=44804449</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44804449</guid></item><item><title><![CDATA[Timeouts and Cancellation for Humans (2018)]]></title><description><![CDATA[
<p>Article URL: <a href="https://vorpus.org/blog/timeouts-and-cancellation-for-humans/">https://vorpus.org/blog/timeouts-and-cancellation-for-humans/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44217198">https://news.ycombinator.com/item?id=44217198</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 08 Jun 2025 14:23:15 +0000</pubDate><link>https://vorpus.org/blog/timeouts-and-cancellation-for-humans/</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=44217198</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44217198</guid></item><item><title><![CDATA[New comment by pkkm in "Read the Obits"]]></title><description><![CDATA[
<p>Thanks!</p>
]]></description><pubDate>Tue, 29 Apr 2025 09:04:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=43830190</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43830190</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43830190</guid></item><item><title><![CDATA[New comment by pkkm in "Migrating away from Rust"]]></title><description><![CDATA[
<p>Is that different from what is happening already? A lot of people won't adopt a language/technology unless it has a huge repository of answers on StackOverflow, mature tooling, and a decent hiring pool.<p>I'm not saying you're definitely wrong, but if you think that LLMs are going to bring qualitative change rather than just another thing to consider, then I'm interested in why.</p>
]]></description><pubDate>Mon, 28 Apr 2025 20:59:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=43826042</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43826042</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43826042</guid></item><item><title><![CDATA[New comment by pkkm in "Read the Obits"]]></title><description><![CDATA[
<p>> the inefficacy of the popular forms of 'brainstorming' compared to the more painful forms that work<p>Interesting, what's your recommended resource for learning more about this?</p>
]]></description><pubDate>Mon, 28 Apr 2025 15:41:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=43822706</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43822706</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43822706</guid></item><item><title><![CDATA[New comment by pkkm in "Whenever – typed and DST-safe datetimes for Python"]]></title><description><![CDATA[
<p>I'm not the creator, the credit for that goes to Arie Bovenberg. I just wanted to show this to people.</p>
]]></description><pubDate>Sun, 13 Apr 2025 11:15:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=43671931</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43671931</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43671931</guid></item><item><title><![CDATA[New comment by pkkm in "Whenever: Typed and DST-safe datetimes for Python"]]></title><description><![CDATA[
<p>I think wesselbindt meant that datetimes should not inherit from dates.</p>
]]></description><pubDate>Sun, 13 Apr 2025 11:13:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=43671922</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43671922</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43671922</guid></item><item><title><![CDATA[New comment by pkkm in "Emacs Lisp Elements"]]></title><description><![CDATA[
<p>> My theory: what matters isn't "best practices", it's have a coherent conceptual design and code that reflects that design.<p>I think so too; that said, the language could definitely be better. It suffers from a lot of primitive obsession. Instead of structs, you often find either vectors or lists with predefined element positions; instead of map, ordered map, and multimap types, it's just various kinds of lists everywhere. They're not even used consistently: for the same thing, one package may use an alist and another a plist.</p>
]]></description><pubDate>Sun, 13 Apr 2025 10:22:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=43671691</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43671691</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43671691</guid></item><item><title><![CDATA[New comment by pkkm in "YAML: The Norway Problem (2022)"]]></title><description><![CDATA[
<p>Programming with string templates, in a highly complex and footgun-rich markup language, is one of the things I find most offputting about the DevOps ecosystem.</p>
]]></description><pubDate>Sun, 13 Apr 2025 09:54:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=43671543</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43671543</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43671543</guid></item><item><title><![CDATA[New comment by pkkm in ""Adulting" courses in America"]]></title><description><![CDATA[
<p>I'm not seeing any empirical data in the article.</p>
]]></description><pubDate>Sun, 13 Apr 2025 09:20:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=43671357</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43671357</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43671357</guid></item><item><title><![CDATA[Whenever: Typed and DST-safe datetimes for Python]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/ariebovenberg/whenever">https://github.com/ariebovenberg/whenever</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43671308">https://news.ycombinator.com/item?id=43671308</a></p>
<p>Points: 286</p>
<p># Comments: 143</p>
]]></description><pubDate>Sun, 13 Apr 2025 09:12:19 +0000</pubDate><link>https://github.com/ariebovenberg/whenever</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43671308</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43671308</guid></item><item><title><![CDATA[Ask HN: Easiest and hardest concurrency models to use correctly?]]></title><description><![CDATA[
<p>There's a lot of options for concurrency. In Python alone, you can use threads with shared memory, threads with queues, processes with queues, concurrent.futures, asyncio, trio, or AnyIO. Java now has a preview of structured concurrency and virtual threads in addition to regular threads. There's also the CSP model of Go, as well as the actor model and supervision trees of Erlang/OTP. Software transactional memory seems to be popular in the purely functional world but rare outside of it.<p>I'm curious about your experiences with these concurrency models - which are easy to get right, and which are endless sources of bugs? I'm particularly interested in use cases where there are lots of long-running connections and correctness matters more than performance: chat servers, MMORPG servers, IoT central systems, etc.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43601341">https://news.ycombinator.com/item?id=43601341</a></p>
<p>Points: 10</p>
<p># Comments: 3</p>
]]></description><pubDate>Sun, 06 Apr 2025 13:37:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=43601341</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43601341</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43601341</guid></item><item><title><![CDATA[New comment by pkkm in "On JavaScript's Weirdness"]]></title><description><![CDATA[
<p>Both JS and PHP are rather footgun-rich languages; have you tried Python, Java, Kotlin, or C#?</p>
]]></description><pubDate>Fri, 04 Apr 2025 14:02:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=43582539</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43582539</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43582539</guid></item><item><title><![CDATA[New comment by pkkm in "InitWare, a portable systemd fork running on BSDs and Linux"]]></title><description><![CDATA[
<p>Could someone who's more familiar with this project explain the advantages? To me, the main advantages of systemd are<p>1) It enables better separation of concerns, Twelve-Factor App style. For example, user-installed programs no longer need to connect to a logging daemon or execute a complex daemonization dance [1]. They can just run like a normal command-line program and dump logs to stderr.<p>2) It cuts down on integration problems, shell script glue, and the amount of different config syntaxes you have to know. Its architecture is modular with over 100 different binaries, so you can still pick-and-choose components and do privilege separation, but because these components are all coming from the same vendor, you know they're going to work well together.<p>3) It can do certain things far more reliably because it's willing to use Linux-specific APIs. For example, thanks to cgroups v2, it can supervise a process correctly no matter what kind of weird forking strategy the process is using.<p>Since this project is intended to be compatible across Unix-like systems, it won't be able to use Linux-specific APIs, so advantage 3 is gone. It looks like it dropped many components of systemd, so advantage 2 is partially gone too. Is this project just about getting some cross-cutting concerns into the init system and having better scheduling of service startup?<p>[1] <a href="https://www.freedesktop.org/software/systemd/man/latest/daemon.html#SysV%20Daemons" rel="nofollow">https://www.freedesktop.org/software/systemd/man/latest/daem...</a></p>
]]></description><pubDate>Fri, 04 Apr 2025 09:06:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=43579837</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43579837</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43579837</guid></item><item><title><![CDATA[New comment by pkkm in "Ask HN: A retrofitted C dialect?"]]></title><description><![CDATA[
<p>I'm a lot less experienced than you, but since you're collecting ideas, I'll give my opinion.<p>For me personally, the biggest improvements that could be made to C aren't about advanced type system stuff. They're things that are technically simple but backwards compatibility makes them difficult in practice. In order of importance:<p>1) Get rid of null-terminated strings; introduce native slice and buffer types. A slice would be basically <i>struct { T *ptr, size_t count }</i> and a buffer would be <i>struct { T *ptr, size_t count, size_t capacity }</i>, though with dedicated syntax to make them ergonomic - perhaps <i>T ^slice</i> and <i>T @buffer</i>. We'd also want buffer -> slice -> pointer decay, <i>beginof</i>/<i>endof</i>/<i>countof</i>/<i>capacityof</i> operators, and of course good handling of type qualifiers.<p>2) Get rid of <i>errno</i> in favor of consistent out-of-band error handling that would be used in the standard library and recommended for user code too. That would probably involve using the return value for a status code and writing the actual result via a pointer: <i>int do_stuff(T *result, ...)</i>.<p>3) Get rid of the strict aliasing rule.<p>4) Get rid of various tiny sources of UB. For example, standardize <i>realloc</i> to be equivalent to <i>free</i> when called with a length of 0.<p>Metaprogramming-wise, my biggest wish would be for a way to enrich programs and libraries with custom compile-time checks, written in plain procedural code rather than some convoluted meta-language. These checks would be very useful for libraries that accept custom (non-<i>printf</i>) format strings, for example. An opt-in linear type system would be nice too.<p>Tool-wise, I wish there was something that could tell me definitively whether a particular run of my program executed any UB or not. The simpler types of UB, like null pointer dereferences and integer overflows, can be detected now, but I'd also like to know about any violations of aliasing and pointer provenance rules.</p>
]]></description><pubDate>Tue, 25 Feb 2025 19:20:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=43176100</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43176100</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43176100</guid></item><item><title><![CDATA[New comment by pkkm in "What would happen if we didn't use TCP or UDP?"]]></title><description><![CDATA[
<p>You don't need to make up your own for this experiment. There's already a pretty old protocol that's far superior to TCP, but failed to get adoption because of network hardware dropping everything other than TCP and UDP. It's called SCTP.</p>
]]></description><pubDate>Tue, 25 Feb 2025 07:26:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=43169169</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43169169</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43169169</guid></item><item><title><![CDATA[New comment by pkkm in "CEO Simulator: Startup Edition"]]></title><description><![CDATA[
<p>Looks fixed to me, thanks! Now the die doesn't roll when I select an objective that has moved. That works, though I would prefer if these objectives were simply unselectable and the game had some kind of visual indication of which objectives you can select. Kind of like desktop GUIs, which grey out buttons you can't click rather than letting you click them but making them do nothing. I think that would make the game UI a bit "smoother" and more pleasant to use.<p>EDIT: This would combine very well with my suggestion from the previous comment: make the cards glow in the card selection stage, make the selectable objectives glow in the objective selection stage, and make the die glow when it should be rolled. That would let you get rid of two microfrustrations at once: the hints that cover the UI and the die that can be clicked but doesn't roll. If you also replaced the modal tutorial popup at the start with a top or side button, that would drop the UI microfrustrations to zero.<p>Also, I've just noticed that the cards are a bit blurry when zoomed in on hover.<p>I hope the feedback was helpful!</p>
]]></description><pubDate>Sun, 23 Feb 2025 18:23:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=43151653</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43151653</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43151653</guid></item><item><title><![CDATA[New comment by pkkm in "CEO Simulator: Startup Edition"]]></title><description><![CDATA[
<p>> I was able to select an objective that had moved as a result of a card at the start of the day, could infinitely roll the dice with nothing happening.<p>Same bug here, in Firefox 128.<p>Also, while we're making suggestions, would it be possible to replace the tutorial balloon boxes with something that's less in the way? I like built-in hints and don't want to turn them off, but sometimes they can be a bit annoying when they cover up parts of the game UI. I would prefer some kind of animated glow behind the parts of the game I'm supposed to click on (cards, bars, or the die) plus a statically positioned explanation box to the side or on the bottom. That would make the hints unobtrusive enough that there would be no need to provide an option to turn them off.</p>
]]></description><pubDate>Sun, 23 Feb 2025 16:16:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=43150378</link><dc:creator>pkkm</dc:creator><comments>https://news.ycombinator.com/item?id=43150378</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43150378</guid></item></channel></rss>