<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: jacobvosmaer</title><link>https://news.ycombinator.com/user?id=jacobvosmaer</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 31 Aug 2026 08:15:50 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jacobvosmaer" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jacobvosmaer in "Creepy Crawlies"]]></title><description><![CDATA[
<p>Normal clones can reuse delta-compressed data the server stored on disk. Shallow clones impose a negative constraint: do not transfer data outside the requested commit depth. Pre-computed delta chains than contain unrequested data become unusable and the server must do delta compression on the fly to satsify the shallow clone.</p>
]]></description><pubDate>Sun, 30 Aug 2026 15:39:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=49499659</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=49499659</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49499659</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "My Ed(1) Toolbox"]]></title><description><![CDATA[
<p>I like ed but I prefer 'sam -d' (the terminal mode of Sam). It has a nice looping construct 'x' and you can open multiple files and do batch edits (with 'X').<p>There is a Go port of Sam, which is easy to install:<p>go install 9fans.net/go/cmd/sam@latest<p><a href="http://sam.cat-v.org/" rel="nofollow">http://sam.cat-v.org/</a></p>
]]></description><pubDate>Wed, 24 Sep 2025 13:25:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=45359999</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=45359999</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45359999</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Casio VZ-1 Algorithms"]]></title><description><![CDATA[
<p>> Other manufacturers such as Yamaha are guilty of the same kind of interface obfuscation<p>Everybody agrees the FS1R is a confusing mess although there too I think it's not just the interface but it goes deeper down to them not knowing enough themselves about what can be done with the capabilities of the engine.<p>In defense of Yamaha, if you read that retrospective I linked in the post [1], you do see that they spent years whittling down their engine to arrive at the DX7 and I think it shows. They did not spend that kind of effort on the FS1R nor did Casio on the VZ-1.<p>[1]: <a href="https://web.archive.org/web/20150912075333/http://usa.yamaha.com/products/music-production/synthesizers/synth_40th/history/chapter02/" rel="nofollow">https://web.archive.org/web/20150912075333/http://usa.yamaha...</a></p>
]]></description><pubDate>Thu, 08 Aug 2024 16:32:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=41193371</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=41193371</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41193371</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Mk: A Successor to Make (1987) [pdf]"]]></title><description><![CDATA[
<p>I tried plan9port's mk for a moment out of curiosity. I quickly ran into an annoying usability problem: it compares file mtimes with second accuracy.<p><a href="https://github.com/9fans/plan9port/blob/cc4571fec67407652b03d6603ada6580de2194dc/src/cmd/mk/unix.c#L346">https://github.com/9fans/plan9port/blob/cc4571fec67407652b03...</a><p>With sub-second build times for individual targets, this causes mk to needlessly recompile files because the target may have the same mtime as the prerequisites.</p>
]]></description><pubDate>Sun, 16 Jul 2023 13:57:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=36747054</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=36747054</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36747054</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Don't abuse su for dropping user privileges (2015)"]]></title><description><![CDATA[
<p>The article does not talk about security problems. It's about whether your daemon works correctly.<p>1. Depending on the environment, process supervision can break if there is an unexpected process sitting between the supervisor and the supervisee. The article describes how the switch to PAM forced the introduction of an in-the-middle process responsible for closing the PAM session. The old su used exec, which avoids an in-the-middle process.<p>2. Su uses the shell of the target user, and will outright not work if the target user has a "nologin" shell.<p>The article goes on to mention correct workarounds for this like daemontools setuidguid, Runit chpst or just rolling your own exec wrapper.</p>
]]></description><pubDate>Fri, 26 May 2023 18:24:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=36087880</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=36087880</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36087880</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Yamaha DX7 Technical Analysis"]]></title><description><![CDATA[
<p>I'm not sure. Intuitively I would think "phase angle" means "offset into the sine wave lookup table".<p>If you step through the lookup table with constant size steps, you would get a sine wave. If the steps are not constant size then you get a distorted sine wave. The "rate of change of the phase angle" would then be the step size.</p>
]]></description><pubDate>Thu, 21 Oct 2021 08:48:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=28941960</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=28941960</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28941960</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Yamaha DX7 Technical Analysis"]]></title><description><![CDATA[
<p>Only original DX7's, or also the DX7ii?<p>Opening up the DX7ii (and other synths from the same time) is a pain compared to the nice hinge construction you get on the original DX7.</p>
]]></description><pubDate>Thu, 21 Oct 2021 08:34:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=28941874</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=28941874</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28941874</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Generics enabled by default in Go tip"]]></title><description><![CDATA[
<p>>not necessarily much safer than void*<p>You can cast void* to anything you want. With interface{} you get a type check, either through an assertion or a panic. That is a big difference in safety.</p>
]]></description><pubDate>Sat, 21 Aug 2021 09:20:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=28255486</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=28255486</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28255486</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Plan 9 from Bell Labs in Cyberspace"]]></title><description><![CDATA[
<p>I think "everything is a file" also means: everything is addressable by a file path. Per-process namespaces are part of what makes this possible.<p>In a way it's similar to HTTP REST, which is also organized by file paths, except instead of the HTTP verbs GET, POST etc. you get open, read, write as your verbs.<p>A side channel is then just a directory entry.</p>
]]></description><pubDate>Tue, 23 Mar 2021 22:32:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=26561189</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=26561189</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26561189</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Vftool runs Linux virtual machines in macOS Big Sur"]]></title><description><![CDATA[
<p>Thanks to another commenter I found <a href="https://github.com/evansm7/vftool/issues/2#issuecomment-735455161" rel="nofollow">https://github.com/evansm7/vftool/issues/2#issuecomment-7354...</a> which is exactly what I needed for Ubuntu 20.04: the idea to use cloud images which bypasses the silly installer.</p>
]]></description><pubDate>Fri, 11 Dec 2020 19:28:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=25389694</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=25389694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25389694</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Vftool runs Linux virtual machines in macOS Big Sur"]]></title><description><![CDATA[
<p>Ubuntu 18.04 (Linux 4.15) in xhyve works fine for me. I tried to get 20.04 set up a while ago but I gave up because its installer kept flaking out on me, something about the disk if I remember correctly.</p>
]]></description><pubDate>Fri, 11 Dec 2020 12:33:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=25385021</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=25385021</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25385021</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Vftool runs Linux virtual machines in macOS Big Sur"]]></title><description><![CDATA[
<p><a href="https://developer.apple.com/documentation/virtualization?language=objc" rel="nofollow">https://developer.apple.com/documentation/virtualization?lan...</a><p><a href="https://developer.apple.com/documentation/hypervisor?language=objc" rel="nofollow">https://developer.apple.com/documentation/hypervisor?languag...</a><p>Looks like Virtualization.framework is newer (Big Sur only) and uses Objective C classes rather than C functions.<p>I know from the xhyve README that it contains code responsible for booting a Linux kernel, which suggests Hypervisor.framework does not take care of that for you. The Virtualization.framework API on the other hand takes a linux kernel + ramdisk as its inputs.<p>So it sounds like the framework vftool is built on is more high-level than that of xhyve, and like vftool is Linux-only.</p>
]]></description><pubDate>Fri, 11 Dec 2020 08:48:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=25383692</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=25383692</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25383692</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Vftool runs Linux virtual machines in macOS Big Sur"]]></title><description><![CDATA[
<p>I wonder how this compares to xhyve, which I use on Intel Mac. It's nice to see something like it for ARM.<p>It appears xhyve is built on Hypervisor.framework while vftool is built on Virtualization.framework. Is that the main difference? What does that mean?</p>
]]></description><pubDate>Fri, 11 Dec 2020 08:38:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=25383658</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=25383658</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25383658</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Ruby 3.0 Preview 1"]]></title><description><![CDATA[
<p>>The biggest issue with ractor support as it stands today would really be getting ALL the libraries any given app uses to support the ractor design.<p>I wonder if this will create a chicken-egg situation. Without significant Ractor adoption it will be hard to get libraries to adapt. Without essential pieces like Puma supporting (and benefiting from) Ractor there is less reason to for apps to use Ractor.<p>I am reminded of the difficulties faced by Rubinius, which if I understand correctly, was hampered by too many MRI-compatible libraries not working to get people to switch.</p>
]]></description><pubDate>Fri, 25 Sep 2020 20:47:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=24593934</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=24593934</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24593934</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Go’s Major Versioning Sucks – From a Fanboy"]]></title><description><![CDATA[
<p>I think the issue is about having to cross a module boundary, which is really about monorepo vs multirepo. You have much more freedom to make breaking changes when you don't need to cross a (repo/module) boundary.<p>I think the Go module system encourages you to avoid adding unnecessary boundaries. As someone else pointed out already, one of the problems is that you don't find out that boundaries are bad until you hit v2, and then you discover that you have this chunk of technical debt (unnecessary repo boundaries that slow down development) that you didn't know about.</p>
]]></description><pubDate>Wed, 16 Sep 2020 08:49:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=24490783</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=24490783</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24490783</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "C4: C in Four Functions (2014)"]]></title><description><![CDATA[
<p>Clang on my macOS doesn't like the fact that main() takes and returns long long. But it appears GCC on Debian 8 (random linux I have lying around) doesn't mind.<p>I get it to compile on macOS if I remove the int define but then it segfaults when you run it. I wonder if there is some magic flag to make "main does not return int" a non-fatal error on Clang?<p>It's fun to read this code but running it is even more fun, you can see the VM code it generates, with source line annotations and all.</p>
]]></description><pubDate>Tue, 18 Feb 2020 08:01:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=22354283</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=22354283</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22354283</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Teenage Engineering has won over kids and professionals with a synthesizer"]]></title><description><![CDATA[
<p><a href="https://www.ifixit.com/Guide/Teenage+Engineering+OP-1+Connector+Board+Replacement/19125" rel="nofollow">https://www.ifixit.com/Guide/Teenage+Engineering+OP-1+Connec...</a><p>You don't need to solder, the connectors are on a user-replaceable daughter board.</p>
]]></description><pubDate>Thu, 25 Jul 2019 18:44:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=20528187</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=20528187</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20528187</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "A Go implementation of Poly1305 that makes sense"]]></title><description><![CDATA[
<p>I'm not sure but I suspect the algorithm contains optimizations that require direct access to the "limbs" of the big integers.<p>Or perhaps it's about avoiding allocations?</p>
]]></description><pubDate>Wed, 03 Apr 2019 12:57:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=19562904</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=19562904</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19562904</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "The default OpenSSH key encryption is worse than plaintext"]]></title><description><![CDATA[
<p>The user experience of doing this is very bad. Every time I look into doing this I end up with blog posts that describe punching numbers into the GPG CLI, master keys, subkeys, PIN's. I don't want to be a GPG enthusiast, I just want to use my SSH key safely. (No offense to GPG enthusiasts!)</p>
]]></description><pubDate>Fri, 03 Aug 2018 21:47:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=17683904</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=17683904</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17683904</guid></item><item><title><![CDATA[New comment by jacobvosmaer in "Go += Package Versioning"]]></title><description><![CDATA[
<p>I think vendoring is very useful and it would be a step back if it becomes harder.<p>Caching proxies for zip downloads sounds nice, but it's more than just "a bit more infrastructure". I think it would be a huge burden to package publishers if each of them has to manage their own dependency zip mirror as a separate piece of infrastructure. You need version control anyway; checking your dependencies into that same version control does not require a new piece of infrastructure.<p>Coming from Ruby, where rubygems.org is a very painful point of failure, in my eyes the fact that Go dependencies are not a separate download is a big plus.<p>In fact without a single blessed dependency repository such as rubygems.org, in the Go case you have as many points of failure at build time as there are different code hosting sites in your dependency graph.</p>
]]></description><pubDate>Wed, 21 Feb 2018 19:48:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=16432355</link><dc:creator>jacobvosmaer</dc:creator><comments>https://news.ycombinator.com/item?id=16432355</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=16432355</guid></item></channel></rss>