<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: ekimekim</title><link>https://news.ycombinator.com/user?id=ekimekim</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 18 Apr 2026 07:24:34 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ekimekim" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by ekimekim in "Swift is a more convenient Rust (2023)"]]></title><description><![CDATA[
<p>To provide a concrete example, this bit me in a typescript codebase:<p><pre><code>    type Option<T> = T | undefined

    function f<T>(value: T): Option<T> { ... }

    let thing: string | undefined = undefined;
    let result = f(thing);
</code></pre>
Now imagine the definition of Option is in some library or other file and you don't realize how it works. You are thinking of the Option as its own structure and expect f to return Option<string | undefined>. But Option<string | undefined> = string | undefined | undefined = string | undefined = Option<string>.<p>The mistake here is in how Option is defined, but it's a footgun you need to be aware of.</p>
]]></description><pubDate>Sun, 01 Feb 2026 01:45:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46842847</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=46842847</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46842847</guid></item><item><title><![CDATA[New comment by ekimekim in "Advent of Code 2025: Number of puzzles reduce from 25 to 12 for the first time"]]></title><description><![CDATA[
<p>There was one in a previous AoC that I think stumped a lot of AI at the time because it involved something that was <i>similar</i> to poker with the same terminology but different rules. The AI couldn't help but fall into a "this is poker" trap and make a solution that follows the standard rules.</p>
]]></description><pubDate>Sun, 26 Oct 2025 09:57:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=45710468</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=45710468</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45710468</guid></item><item><title><![CDATA[New comment by ekimekim in "You are the scariest monster in the woods"]]></title><description><![CDATA[
<p>As always, there is a relevant XKCD: <a href="https://xkcd.com/1968/" rel="nofollow">https://xkcd.com/1968/</a></p>
]]></description><pubDate>Wed, 15 Oct 2025 14:28:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=45593164</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=45593164</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45593164</guid></item><item><title><![CDATA[New comment by ekimekim in "YouTube's new anti-adblock measures"]]></title><description><![CDATA[
<p>Twitch puts the ads directly in the HLS stream, but as seperate segments from the content (a HLS stream is made of many small video files, on twitch they're about 2s long). They're trivial to recognize and filter out (they're actually explicitly tagged as ad segments) but it still won't serve you the actual stream you were trying to watch - the ad segments override it. The best you can do is just block until the first non-ad segment arrives.</p>
]]></description><pubDate>Sat, 21 Jun 2025 00:53:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=44333557</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=44333557</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44333557</guid></item><item><title><![CDATA[New comment by ekimekim in "The Difference Between Downloading and Streaming"]]></title><description><![CDATA[
<p>Twitch is HLS, but they've tightened the buffers and shortened the segments (2s is standard) so that latencies of down to a couple of seconds is common. It's quite impressive, tbh.</p>
]]></description><pubDate>Tue, 27 May 2025 15:20:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=44107825</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=44107825</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44107825</guid></item><item><title><![CDATA[New comment by ekimekim in "Tail Call Recursion in Java with ASM (2023)"]]></title><description><![CDATA[
<p>In a weird way it kinda reminds me of `exec` in sh (which replaces the current process instead of creating a child process). Practically, there's little difference between these two scripts:<p><pre><code>    #!/bin/sh
    foo
    bar
</code></pre>
vs<p><pre><code>    #!/bin/sh
    foo
    exec bar
</code></pre>
And you could perhaps imagine a shell that does "tail process elimination" to automatically perform the latter when you write the former.<p>But the distinction <i>can be</i> important due to a variety of side effects and if you could only achieve it through carefully following a pattern that the shell might or might not recognize, that would be very limiting.</p>
]]></description><pubDate>Mon, 31 Mar 2025 09:33:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=43532972</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=43532972</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43532972</guid></item><item><title><![CDATA[New comment by ekimekim in "First Orbital Rocket Launched from European Soil, Rocket Crashes, but It's Cool [video]"]]></title><description><![CDATA[
<p>I'm surprised they don't see more activity for polar orbits. You want to launch north-west or south-west and into ocean, northern scandanavia seems perfect for that.</p>
]]></description><pubDate>Mon, 31 Mar 2025 09:28:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=43532934</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=43532934</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43532934</guid></item><item><title><![CDATA[New comment by ekimekim in "Breaking Up with On-Call"]]></title><description><![CDATA[
<p>Sure, but the assumption here is that primary and backup (edit: probably, ie. they're not coordinating this) aren't going to the bathroom at the same time. It's also based on the idea that <i>alerts are extremely rare to begin with</i>. If you're expecting at least one page every rotation, that's way, way too often. Step one is to get alerts under control, step two is a sane on-call rotation.</p>
]]></description><pubDate>Tue, 18 Mar 2025 12:02:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=43398386</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=43398386</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43398386</guid></item><item><title><![CDATA[New comment by ekimekim in "Breaking Up with On-Call"]]></title><description><![CDATA[
<p>When I'm in charge of an on-call rotation I always try to make it very clear that this is <i>not</i> the expectation.<p>In my preferred model of on-call, you have a primary, then after 5min an escalation to secondary, then after 5min an escalation to something drastic (sometimes "everyone", sometimes a manager).<p>The expectation is that <i>most of the time</i> you should be able to respond within 5 minutes, but if you can't then that's what the secondary role is for - to catch you. This means it's perfectly acceptable to go for a run, go to a movie, etc.<p>You relax the responsibility on the individual and let a sensible amount of redundancy solve the problem instead. Everyone is less stressed, and sure you get the occasional 5min delay in response but I'm willing to bet that the overall MTTR is lower since people are well rested and happier to be on call to begin with.</p>
]]></description><pubDate>Tue, 18 Mar 2025 11:19:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=43398095</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=43398095</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43398095</guid></item><item><title><![CDATA[New comment by ekimekim in "Resistance to Rust abstractions for DMA mapping"]]></title><description><![CDATA[
<p>> I wonder why that C file which maps a more abstract Rust-friendly C-API on top of the existing API can't live inside the Rust directory and build structure<p>This is more or less what the RfL folks are asking for - they have a Rust API to be used by other Rust code, which uses the existing C API, and are promising to maintain that API themselves. It lives in the Rust "directory".<p>The C maintainer is rejecting this, seemingly because his goal isn't to find a compromise that works but to completely block the project.</p>
]]></description><pubDate>Tue, 04 Feb 2025 10:19:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=42930578</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42930578</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42930578</guid></item><item><title><![CDATA[New comment by ekimekim in "Steam Brick: No screen, no controller, just a power button and a USB port"]]></title><description><![CDATA[
<p>I do use it occasionally - mostly when Windows has thrown up some issue stopping Steam from working properly.<p>eg. I need to dismiss a dialog that is invisible over remote play, or it won't finish logging in until I close a "finish setting up your windows install" screen.</p>
]]></description><pubDate>Sun, 26 Jan 2025 08:43:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=42828778</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42828778</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42828778</guid></item><item><title><![CDATA[New comment by ekimekim in "Steam Brick: No screen, no controller, just a power button and a USB port"]]></title><description><![CDATA[
<p>This isn't all that different to how I use my gaming PC - it's off in another room, with a monitor that is plugged in but almost always off (I don't think Windows will boot without at least something plugged in?), Steam set to start on boot, and then I entirely use it via Steam Remote Play from my main PC.</p>
]]></description><pubDate>Sat, 25 Jan 2025 23:44:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=42826153</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42826153</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42826153</guid></item><item><title><![CDATA[New comment by ekimekim in "A phishing attack involving g.co, Google's URL shortener"]]></title><description><![CDATA[
<p>What I'm confused by is how they got that far, to the point that 2FA was the only thing in their way. Did they already have this user's password?</p>
]]></description><pubDate>Sat, 25 Jan 2025 01:32:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=42818604</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42818604</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42818604</guid></item><item><title><![CDATA[New comment by ekimekim in "Mastodon announces new European non-profit, change of CEO"]]></title><description><![CDATA[
<p>> ownership moves to a new not-for-profit entity based somewhere in Europe, with the exact location still to be finalized. The organization is currently headquartered in Germany, where it was a nonprofit until its charitable status was stripped last year.<p>So it sounds like Mastodon <i>was</i> run by a non-profit, but the non-profit ran afoul of some legal issues, and they're now creating a fixed version? This seems to be administrative details, not news.</p>
]]></description><pubDate>Mon, 13 Jan 2025 15:40:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=42684611</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42684611</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42684611</guid></item><item><title><![CDATA[New comment by ekimekim in "Black boxes from Jeju Air 2216 stopped recording four minutes before crash"]]></title><description><![CDATA[
<p>I'm no expert, but I wouldn't be surprised if it's much, MUCH easier to get "non-critical" systems hooked up to new, better equipment as it would undergo far less checks and approvals.</p>
]]></description><pubDate>Sun, 12 Jan 2025 09:43:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=42672386</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42672386</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42672386</guid></item><item><title><![CDATA[New comment by ekimekim in "Meta is killing off its AI-powered Instagram and Facebook profiles"]]></title><description><![CDATA[
<p>It's a commonly-accepted way to refer to "Black in a racial, ethnic or cultural sense", particularly African-American culture. See for example the AP's style guide: <a href="https://apnews.com/article/archive-race-and-ethnicity-9105661462" rel="nofollow">https://apnews.com/article/archive-race-and-ethnicity-910566...</a> and also the relevant wikipedia article <a href="https://en.wikipedia.org/wiki/African_Americans#Terminology" rel="nofollow">https://en.wikipedia.org/wiki/African_Americans#Terminology</a></p>
]]></description><pubDate>Sun, 05 Jan 2025 08:09:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=42600427</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42600427</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42600427</guid></item><item><title><![CDATA[New comment by ekimekim in "Curl-Impersonate"]]></title><description><![CDATA[
<p>In most cases this is just based on user agent. It's widespread enough that I just habitually tell requests not to set a User Agent at all (these aren't blocked, but if the UA contains "python" it is).</p>
]]></description><pubDate>Mon, 30 Dec 2024 16:20:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=42550682</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42550682</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42550682</guid></item><item><title><![CDATA[New comment by ekimekim in "My vote on voting systems"]]></title><description><![CDATA[
<p>> I disagree that strategic voting as a downside outweighs the downsides of RCV or FPTP - especially when FPTP itself is susceptible to strategic voting, too.<p>To clarify, I never intended that as a defence of FPTP. It's awful and I'll take any of the systems being discussed here over it. It was a statement specifically towards IRV over score/approval.</p>
]]></description><pubDate>Sun, 22 Dec 2024 06:39:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=42484766</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42484766</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42484766</guid></item><item><title><![CDATA[New comment by ekimekim in "My vote on voting systems"]]></title><description><![CDATA[
<p>Being vulnerable to strategic voting is a huge downside that outweighs other considerations.<p>As the article mentions, in the real world score voting would just be approval voting where you put a max score on some choices and 0 on others.<p>And in approval voting you need to think about how others will vote and pick your cutoff point based on who you think has a chance - do you vote "yes" for the center-right party to avoid the hard right party getting in? Or do you vote "no" to help the center-left party beat the center-right party? (swap those directions to personal preference)<p>RCV isn't perfect, but in all but the smallest elections there's really no practical strategic voting considerations. You just state your true preference order.<p>Of course, I'll take any of them over FPTP.</p>
]]></description><pubDate>Fri, 20 Dec 2024 14:01:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=42471122</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42471122</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42471122</guid></item><item><title><![CDATA[New comment by ekimekim in "Error Stacking in Rust"]]></title><description><![CDATA[
<p>That's interesting. To me stack traces + default pass up the stack <i>are</i> the distinguishing features of exceptions.<p>Suppose we had a version of the ? operator that automatically appended a call stack to the error value returned. Are you saying that that's not "an exception" because I still need to write ? after each falliable function? Or because it's still part of the return type? Or is it specifically only an exception if it works via stack unwinding?</p>
]]></description><pubDate>Thu, 19 Dec 2024 19:52:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=42465087</link><dc:creator>ekimekim</dc:creator><comments>https://news.ycombinator.com/item?id=42465087</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42465087</guid></item></channel></rss>