<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: ikatson</title><link>https://news.ycombinator.com/user?id=ikatson</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 14 Sep 2026 09:32:38 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ikatson" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by ikatson in "U.S. State Department pauses immigrant visa applications"]]></title><description><![CDATA[
<p>By the government: "This nonimmigrant classification..." [1]<p>[1] <a href="https://www.uscis.gov/working-in-the-united-states/h-1b-specialty-occupations" rel="nofollow">https://www.uscis.gov/working-in-the-united-states/h-1b-spec...</a></p>
]]></description><pubDate>Thu, 27 Aug 2026 13:52:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=49464935</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=49464935</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49464935</guid></item><item><title><![CDATA[Apache Iggy: thread-per-core with io_uring in Rust]]></title><description><![CDATA[
<p>Article URL: <a href="https://iggy.apache.org/blogs/2026/02/27/thread-per-core-io_uring/">https://iggy.apache.org/blogs/2026/02/27/thread-per-core-io_uring/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47396417">https://news.ycombinator.com/item?id=47396417</a></p>
<p>Points: 39</p>
<p># Comments: 3</p>
]]></description><pubDate>Mon, 16 Mar 2026 08:36:00 +0000</pubDate><link>https://iggy.apache.org/blogs/2026/02/27/thread-per-core-io_uring/</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=47396417</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47396417</guid></item><item><title><![CDATA[New comment by ikatson in "Instant database clones with PostgreSQL 18"]]></title><description><![CDATA[
<p>How about do the changes then bake them into the DB docker image. I.e. "docker commit".<p>Then spin up the dB using that image instead of an empty one for every test run.<p>This implies starting the DB through docker is faster than what you're doing now of course.</p>
]]></description><pubDate>Tue, 23 Dec 2025 15:10:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46365885</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=46365885</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46365885</guid></item><item><title><![CDATA[New comment by ikatson in "Debunking HDR [video]"]]></title><description><![CDATA[
<p>The author has a FAQ related to the video and he expands on "Why don’t you mention HLG in the demo" in it <a href="https://www.yedlin.net/HDR_Demo_FAQ.html" rel="nofollow">https://www.yedlin.net/HDR_Demo_FAQ.html</a></p>
]]></description><pubDate>Sun, 15 Jun 2025 12:17:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=44281920</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=44281920</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44281920</guid></item><item><title><![CDATA[New comment by ikatson in "Development on Apple Silicon with UTM"]]></title><description><![CDATA[
<p>Maybe I did misunderstand, I agree the post makes it overly complicated! You definitely don't need cloud-init just to run Linux on Mac OS</p>
]]></description><pubDate>Thu, 17 Apr 2025 13:42:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=43716716</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=43716716</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43716716</guid></item><item><title><![CDATA[New comment by ikatson in "Development on Apple Silicon with UTM"]]></title><description><![CDATA[
<p>> My thought was why use UTM? Most of this can be achieved with qemu alone<p>Afaik UTM uses Qemu under the hood, but provides a nice UI on top for the basic use cases. It also has a library of prepared images, so that your VM is a few clicks away from intention to have one.<p>It can also modify the VM, resize storage after creation etc.<p>Of course all of it can be done with QEMU alone, but this makes it easier to deal with than remembering tons of QEMU command line arguments.</p>
]]></description><pubDate>Thu, 17 Apr 2025 12:20:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=43715733</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=43715733</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43715733</guid></item><item><title><![CDATA[ScyllaDB Rust Driver 1.0]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.scylladb.com/2025/03/31/inside-scylladb-rust-driver-1-0/">https://www.scylladb.com/2025/03/31/inside-scylladb-rust-driver-1-0/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43554696">https://news.ycombinator.com/item?id=43554696</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 02 Apr 2025 08:33:31 +0000</pubDate><link>https://www.scylladb.com/2025/03/31/inside-scylladb-rust-driver-1-0/</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=43554696</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43554696</guid></item><item><title><![CDATA[New comment by ikatson in "Wi is Fi: Understanding Wi-Fi 4/5/6/6E/7 (802.11 n/AC/ax/be)"]]></title><description><![CDATA[
<p>Thanks to this website, I gave up chasing an elusive target of squeezing 1gbps over wifi on any of my devices - it explains really well what is going on and why I was banging my head against the wall trying to make it work.<p>A useful trick to explain you current wifi speed on Mac is to alt-click on the wifi icon - it immediately gives tons of useful connection properties that you can make sense of after reading this page.<p>One more thing that doesn't seem to be mentioned that may decrease the wifi speed - is installing an open-source firmware like OpenWrt on your router. While it gives a ton of cool benefits, it is totally possible the drivers etc that come with it will be worse than stock firmware.</p>
]]></description><pubDate>Thu, 01 Aug 2024 11:56:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=41128258</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=41128258</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41128258</guid></item><item><title><![CDATA[New comment by ikatson in "Show HN: Rqbit – bittorent CLI and desktop app written in Rust"]]></title><description><![CDATA[
<p>Concurrency and the shared state nature of torrents are definitely what makes it all hard and tricky. I've rewritten this part of DHT completely recently, but according to your experience looks like this time won't be the last.<p>For block requesting, rqbit has a pretty simple algorithm <a href="https://github.com/ikatson/rqbit/blob/main/crates/librqbit/src/torrent_state/live/mod.rs#L1102">https://github.com/ikatson/rqbit/blob/main/crates/librqbit/s...</a>, and I didn't notice it in benchmarks, thanks to Rust being fast by default I guess. I admit though, never looked how other clients do it, maybe the rqbit algorithm is too naive.</p>
]]></description><pubDate>Mon, 04 Dec 2023 01:28:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=38512687</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=38512687</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38512687</guid></item><item><title><![CDATA[New comment by ikatson in "Show HN: Rqbit – bittorent CLI and desktop app written in Rust"]]></title><description><![CDATA[
<p>For rqbit at least, there were only a few things necessary to start off with:<p>1. The bittorrent protocol specification: <a href="https://www.bittorrent.org/beps/bep_0003.html" rel="nofollow noreferrer">https://www.bittorrent.org/beps/bep_0003.html</a><p>2. Wireshark dumps of some existing BitTorrent clients to write unit-tests for RPC serialization/deserialization. I used qBittorrent, but you can use any other existing client.<p>3. (kind of optional) DHT protocol: <a href="https://www.bittorrent.org/beps/bep_0005.html" rel="nofollow noreferrer">https://www.bittorrent.org/beps/bep_0005.html</a>. This actually came later, you can download torrents using just #1. But if you try to do so, you'll discover that most peer information is stored in DHT, and not in trackers.<p>Everything else was heuristics, observing real network behaviour, and tweaking the code accordingly.<p>That said, I'm not exactly the go-to expert on "how to develop BT clients and servers", as rqbit isn't as fully featured as the more mature clients. But given that the above links got me that far, I'm sure they can give a very decent start.</p>
]]></description><pubDate>Mon, 04 Dec 2023 00:16:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=38512205</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=38512205</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38512205</guid></item><item><title><![CDATA[New comment by ikatson in "Show HN: Rqbit – bittorent CLI and desktop app written in Rust"]]></title><description><![CDATA[
<p>2 years ago when I decided to create rqbit, I've been using qBittorrent as my main client.<p>I think there was a bug in it, or smth else that caused it for me, that made it download torrents really slowly, and it couldn't saturate my gigabit network, whereas previously it was close.
It didn't bother me enough to investigate deeper, but instead sparked the curiosity of what would it take to make a qBittorrent myself.<p>Since then, either qBittorrent fixed the bug, or whatever else was causing it fixed it, so it's no longer an issue. So if you like qBittorrent, I'm with you - it's great!<p>My *recent* motivation to put some more work into rqbit was caused by smth else though:<p>1. I had some free time on my hands, and was craving coding some Rust<p>2. I gave the client to my dad, he put it on his RaspberryPI, said this is the fastest torrent client he's ever seen, and asked if certain features are available. I implemented them all, cause it wasn't hard, and I made my dad happier at the same time :)</p>
]]></description><pubDate>Sun, 03 Dec 2023 21:12:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=38510820</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=38510820</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38510820</guid></item><item><title><![CDATA[New comment by ikatson in "Show HN: Rqbit – bittorent CLI and desktop app written in Rust"]]></title><description><![CDATA[
<p>At the moment, it doesn't listen for bittorent downloads on neither UDP nor TCP, so external peers can't connect to it.<p>It only listens on UDP for DHT requests.<p>So if it connects by itself (only TCP is supported), then it can upload. In reality, this makes uploading rare.<p>For "being a good citizen" of the network, a couple days ago I implemented storing peer information, so that it can be returned back when DHT nodes query for it. It has limitations though, e.g. only storing 1000 peers at the moment, and not cleaning up old peers once the peer store is full.<p>Listening on UDP for torrent requests seems like a big change, maybe someday.</p>
]]></description><pubDate>Sun, 03 Dec 2023 20:58:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=38510693</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=38510693</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38510693</guid></item><item><title><![CDATA[New comment by ikatson in "Show HN: Rqbit – bittorent CLI and desktop app written in Rust"]]></title><description><![CDATA[
<p>When I built it at first a couple years ago, it all went pretty smooth until I hit concurrent communication with many peers, both for DHT and torrent downloading.<p>E.g. parsing bencode, and other binary protocols involved in the network (bittorrent peer protocol, tracker requests, DHT protocol) was all easy comparing to managing state.<p>Managing state (e.g. what parts we have downloaded so far, what are we downloading at the moment, what peers are we expecting to get pieces from, etc) has a lot of edge cases that need to be handled.<p>For a recent example, I was dealing with a bug that manifested like this: when resuming a torrent from "paused" state, it was stuck at ~99.87% downloaded, and never progressed. Turned out, than when I put the torrent into "paused" state, after disconnecting the peers, I wasn't marking the in-flight pieces for re-download. So when new peers connected, they had nothing to do.<p>DHT was also tricky, for multiple reasons:<p>- as it works via UDP, there's no "connection" - you need to match incoming messages to previously sent requests yourself. But then you might never get a response, so you must manage some kind of timeouts, to clean up memory of old outgoing requests that are no longer expected to be completed.<p>- DHT involves "recursive" requests. You query N peers at first, and each of them might return M other peers. So on next round you need to make N * M requests. And this recursion can continue forever, ever growing exponentially. You need to put some heuristics around not to explode the network and at least your own computer. For example, my MacOS UI was freezing when rqbit was trying to send too many DHT requests at once.<p>- Handling the above (and other) examples makes the code worse. Managing code complexity, at least for myself to understand what on earth is going on, is much harder than e.g. implementing the binary protocols.<p>Otherwise, it's all about tricky details, behaviours that can only be observed under certain circumstances, and only if you're curious enough to look, e.g.<p>- Garbage collection. Ensuring that when the client (e.g. peer, browser etc) disconnect, everything is cleaned up. E.g. when the torrent is paused, this causes a massive "stop" for all spawned tasks. If you don't account for that, they might keep running forever.<p>- Network issues. Re-connecting to peers, to DHT etc, re-trying everything that can be retried, might be a head-scratcher sometimes.<p>All that said, it's quite fun to deal with these when that's your goal by itself - to enjoy the process of coding.</p>
]]></description><pubDate>Sun, 03 Dec 2023 20:48:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=38510616</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=38510616</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38510616</guid></item><item><title><![CDATA[Show HN: Rqbit – bittorent CLI and desktop app written in Rust]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/ikatson/rqbit/releases/tag/v4.0.0">https://github.com/ikatson/rqbit/releases/tag/v4.0.0</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=38506835">https://news.ycombinator.com/item?id=38506835</a></p>
<p>Points: 78</p>
<p># Comments: 14</p>
]]></description><pubDate>Sun, 03 Dec 2023 13:17:53 +0000</pubDate><link>https://github.com/ikatson/rqbit/releases/tag/v4.0.0</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=38506835</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38506835</guid></item><item><title><![CDATA[New comment by ikatson in "Algos in Plain English – Efficient Division Without Mult, Div, or Mod Operators"]]></title><description><![CDATA[
<p>After reading the title of the article, I tried to solve it for fun before looking up the solution.<p>The logic followed what I learned at school about how to do it the long way, but of course with binary numbers it's so much easier.<p>I ended up with a shorter implementation that follows the same idea, but uses recursion [1]. The recursion is compiled away by Rust [2]<p>[1] <a href="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=ab374bcbd751432d25df325d6dfb3f6f" rel="nofollow">https://play.rust-lang.org/?version=stable&mode=debug&editio...</a>
[2] <a href="https://godbolt.org/z/bq3fnrE4h" rel="nofollow">https://godbolt.org/z/bq3fnrE4h</a></p>
]]></description><pubDate>Mon, 26 Sep 2022 20:18:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=32987791</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=32987791</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32987791</guid></item><item><title><![CDATA[Show HN: Rqbit – BitTorrent Client in Rust]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/ikatson/rqbit">https://github.com/ikatson/rqbit</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=28712431">https://news.ycombinator.com/item?id=28712431</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 30 Sep 2021 23:14:22 +0000</pubDate><link>https://github.com/ikatson/rqbit</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=28712431</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28712431</guid></item><item><title><![CDATA[New comment by ikatson in "Ask HN: What VPN service are you currently using?"]]></title><description><![CDATA[
<p>For simple usages like this, you can also create an SSH socks proxy with one SSH command, and then configure your browser to use a local port as a socks proxy.<p>Does not require any software installed on the server, and the whole setup should be quicker then configuring VPN server and client.<p>Also, an HTTP proxy is a couple steps more to setup, but will allow you to use command line tools on the client, not just the browser. The majority of command line tools support http_proxy and https_proxy environment variables.<p>An easy and pretty secure way to setup an HTTP proxy is:
1. Install tinyproxy.
2. Configure it to listen only on localhost and start it.
3. SSH port forward localhost:8888 from your server. For example to the same port on your client.
4. Configure your clients to use localhost:8888 as a proxy.</p>
]]></description><pubDate>Mon, 25 Feb 2019 09:17:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=19244200</link><dc:creator>ikatson</dc:creator><comments>https://news.ycombinator.com/item?id=19244200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19244200</guid></item></channel></rss>