<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: vk6</title><link>https://news.ycombinator.com/user?id=vk6</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 18 Apr 2026 12:18:27 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=vk6" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Show HN: Libcurl.js – libcurl in WASM for end-to-end encrypted CORS proxies]]></title><description><![CDATA[
<p>Article URL: <a href="https://libcurl.js.org/">https://libcurl.js.org/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45232758">https://news.ycombinator.com/item?id=45232758</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 13 Sep 2025 15:15:14 +0000</pubDate><link>https://libcurl.js.org/</link><dc:creator>vk6</dc:creator><comments>https://news.ycombinator.com/item?id=45232758</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45232758</guid></item><item><title><![CDATA[New comment by vk6 in "Making Libcurl Work in WebAssembly"]]></title><description><![CDATA[
<p>Classic CORS proxies are bad for privacy though. They read the contents of the forwarded requests in plain text, which might include API keys or other secrets. This is problematic though, since the typical use case for CORS proxies is if you're unable to host your own backend.<p>With this kind of solution, the proxy only deals with the data in the underlying TCP socket. That data will be encrypted with TLS until it gets to the destination server. In this case, you don't need to fully trust the proxy sever to use it safely.</p>
]]></description><pubDate>Wed, 30 Jul 2025 19:28:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=44738524</link><dc:creator>vk6</dc:creator><comments>https://news.ycombinator.com/item?id=44738524</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44738524</guid></item><item><title><![CDATA[New comment by vk6 in "Making Libcurl Work in WebAssembly"]]></title><description><![CDATA[
<p>I did a similar project recently, although it was more focused on getting a good Javascript API out of libcurl, rather than integrating with a different language like R: <a href="https://github.com/ading2210/libcurl.js">https://github.com/ading2210/libcurl.js</a><p>My first approach for networking was also to use SOCK5 through a Websocket. However, this turns out to be really slow. Each new connection created by emscripten requires waiting for: the TLS handshake from the browser to your proxy, the Websocket handshake which takes place over HTTP/1.1, the SOCK5 handshake on the Websocket, and the TLS handshake from libcurl to the destination server.<p>That's many many round trips required just for a single request! In practice, if the proxy server isn't physically close to you, the latency can be multiple seconds. This is partially mitigated by the fact that libcurl can use HTTP/2 to reuse that socket, but if you're placing requests to different hosts, or those that don't support HTTP/2, this is a huge problem.<p>The solution is to make it so that multiple TCP sockets can share the same Websocket, and then minimize round trips in the proxy protocol. I wrote a new protocol for this purpose here: <a href="https://github.com/MercuryWorkshop/wisp-protocol">https://github.com/MercuryWorkshop/wisp-protocol</a><p>It basically acts like multiplexed SOCKS5 over a Websocket. One trick that it uses to reduce latency further is for the client to simply assume creating a new socket succeeded, and to start immediately sending data, which eliminates another round trip. So apart from the very first connection which establishes the Websocket, there is zero added latency for new sockets.<p>Actually getting Emscripten to use this is slightly cursed and you need to patch the generated JavaScript using some Regex. I could probably get this upstreamed in emscripten someday through.<p>Also, it turns out that when writing this sort of network proxy, it doesn't really matter what language you use. The bottleneck ends up being the Linux TCP stack. You might think that a hyper optimized Rust or Go based Websocket proxy would be faster, but I found that the Wisp proxy server I wrote in Python was on par with the one written in Rust during synthetic tests. Even the slowest implementations get upwards of 2 gbit/s of throughput (on slow CPUs) which can saturate the NICs of almost all VPS providers.</p>
]]></description><pubDate>Wed, 30 Jul 2025 19:09:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=44738326</link><dc:creator>vk6</dc:creator><comments>https://news.ycombinator.com/item?id=44738326</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44738326</guid></item><item><title><![CDATA[New comment by vk6 in "Show HN: Doom PDF: Play Doom Inside PDF Documents"]]></title><description><![CDATA[
<p>So you've rehosted the original PDF (from <a href="https://doompdf.pages.dev/doom.pdf" rel="nofollow">https://doompdf.pages.dev/doom.pdf</a>) on an AI generated site with a ton of SEO spam?<p>It really just looks like you're just trying to take advantage of my work for clout/ad revenue.</p>
]]></description><pubDate>Thu, 16 Jan 2025 21:25:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=42731089</link><dc:creator>vk6</dc:creator><comments>https://news.ycombinator.com/item?id=42731089</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42731089</guid></item><item><title><![CDATA[New comment by vk6 in "Show HN: Doom (1993) in a PDF"]]></title><description><![CDATA[
<p>You actually can use FreeDoom if you want by loading it as a custom IWAD. If you visit the site's landing page (<a href="https://doompdf.pages.dev/" rel="nofollow">https://doompdf.pages.dev/</a>) you can upload the IWAD file, and then it'll generate a new PDF file (that can even be saved and redistributed).<p>However, I chose the shareware version since the file size is a lot smaller and it's more recognizable to people.</p>
]]></description><pubDate>Mon, 13 Jan 2025 18:28:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=42686752</link><dc:creator>vk6</dc:creator><comments>https://news.ycombinator.com/item?id=42686752</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42686752</guid></item><item><title><![CDATA[New comment by vk6 in "Show HN: Doom (1993) in a PDF"]]></title><description><![CDATA[
<p>I just added this as a feature. You can launch the game with custom WADs at the site's landing page (<a href="https://doompdf.pages.dev/" rel="nofollow">https://doompdf.pages.dev/</a>). It'll open a new PDF file as a blob URL (and you can even save and redistribute the PDF it generates).<p>A disclaimer though - I don't have any experience with Doom modding. I don't know if the behavior of this feature is correct. All it does is it loads the PWAD by passing the "-file" argument to the game's main function.</p>
]]></description><pubDate>Mon, 13 Jan 2025 06:37:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=42680685</link><dc:creator>vk6</dc:creator><comments>https://news.ycombinator.com/item?id=42680685</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42680685</guid></item><item><title><![CDATA[New comment by vk6 in "Show HN: Tetris in a PDF"]]></title><description><![CDATA[
<p>It's definitely achievable, and it even runs with a playable framerate: <a href="https://news.ycombinator.com/item?id=42678754">https://news.ycombinator.com/item?id=42678754</a></p>
]]></description><pubDate>Mon, 13 Jan 2025 01:13:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=42678921</link><dc:creator>vk6</dc:creator><comments>https://news.ycombinator.com/item?id=42678921</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42678921</guid></item><item><title><![CDATA[Show HN: Doom (1993) in a PDF]]></title><description><![CDATA[
<p>I made a Doom source port that runs within a PDF file.<p>I was inspired by the recent HN post about Tetris in a PDF (<a href="https://news.ycombinator.com/item?id=42645218">https://news.ycombinator.com/item?id=42645218</a>) and I wondered if I could get Doom to run using a similar method.<p>It turns out that old versions of Emscripten can compile C to asm.js code that will happily run inside the limited JS runtime of the PDF engine. I used the doomgeneric (<a href="https://github.com/ozkl/doomgeneric">https://github.com/ozkl/doomgeneric</a>) fork of the original Doom source, as that made writing the IO fairly easy. All I had to do was implement a framebuffer and keyboard inputs.<p>Unlike previous interactive PDF demos, the output for DoomPDF is achieved by creating a text field for each row of pixels in the screen, then setting their contents to various ASCII characters. This gives me a 6 color monochrome display, that can be updated reasonably quickly (80ms per frame).<p>The source code is available at: <a href="https://github.com/ading2210/doompdf">https://github.com/ading2210/doompdf</a><p>Note that this PDF can only run in Chromium-based browsers that use the PDFium engine.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42678754">https://news.ycombinator.com/item?id=42678754</a></p>
<p>Points: 369</p>
<p># Comments: 74</p>
]]></description><pubDate>Mon, 13 Jan 2025 00:50:43 +0000</pubDate><link>https://doompdf.pages.dev/doom.pdf</link><dc:creator>vk6</dc:creator><comments>https://news.ycombinator.com/item?id=42678754</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42678754</guid></item><item><title><![CDATA[Escaping the Chrome Sandbox Through DevTools]]></title><description><![CDATA[
<p>Article URL: <a href="https://ading.dev/blog/posts/chrome_sandbox_escape.html">https://ading.dev/blog/posts/chrome_sandbox_escape.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=41866802">https://news.ycombinator.com/item?id=41866802</a></p>
<p>Points: 407</p>
<p># Comments: 77</p>
]]></description><pubDate>Thu, 17 Oct 2024 05:55:04 +0000</pubDate><link>https://ading.dev/blog/posts/chrome_sandbox_escape.html</link><dc:creator>vk6</dc:creator><comments>https://news.ycombinator.com/item?id=41866802</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41866802</guid></item></channel></rss>