<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: bjoli</title><link>https://news.ycombinator.com/user?id=bjoli</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 25 Jul 2026 12:23:58 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=bjoli" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by bjoli in "HomeLab #1: MikroTik as a Home Router"]]></title><description><![CDATA[
<p>One of their newer APs has thread radio. That is the best idea anyone has had since the mid 90s.</p>
]]></description><pubDate>Mon, 20 Jul 2026 10:13:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48976686</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48976686</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48976686</guid></item><item><title><![CDATA[New comment by bjoli in "HomeLab #1: MikroTik as a Home Router"]]></title><description><![CDATA[
<p>How is the ipv6 situation these days? I left Ubiquiti 2 years ago because I needed to be able to configure the /56 I got from my isp. The unifi controller was pathetic in what it could do.</p>
]]></description><pubDate>Mon, 20 Jul 2026 10:11:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48976671</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48976671</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48976671</guid></item><item><title><![CDATA[New comment by bjoli in "G# – A modern .NET language with Go, Kotlin, and Swift ergonomics"]]></title><description><![CDATA[
<p>if you compile to c# you can use #line directives to get integration with debuggers. it is really simple. for debug builds you can do an ANF pass and generate debugging locations for every different expression.</p>
]]></description><pubDate>Sat, 18 Jul 2026 09:04:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48956373</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48956373</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48956373</guid></item><item><title><![CDATA[New comment by bjoli in "G# – A modern .NET language with Go, Kotlin, and Swift ergonomics"]]></title><description><![CDATA[
<p>why doesn't anyone just jump the gun and introduce proper parallelism primitives? SML/NJ got it right in 1991. ocaml5.0 has domains and effect handlers.<p>why do people still accept CSP? It is simple to do some things in it, bit please just give me concurrentML with "simple" channels for that kind of work , and proper channels for any kind of hard stuff. I have had to write things in go that took me days to get straight that would have been 20 trivial lines in any concurrentML implementation.</p>
]]></description><pubDate>Thu, 16 Jul 2026 20:13:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48939614</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48939614</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48939614</guid></item><item><title><![CDATA[New comment by bjoli in "G# – A modern .NET language with Go, Kotlin, and Swift ergonomics"]]></title><description><![CDATA[
<p>if the language specifies all ranges to be the same this matters very little.<p>if a ranges are inclusive, you get used to it. if it is arbitrary it is awful.</p>
]]></description><pubDate>Thu, 16 Jul 2026 20:05:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48939539</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48939539</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48939539</guid></item><item><title><![CDATA[New comment by bjoli in "G# – A modern .NET language with Go, Kotlin, and Swift ergonomics"]]></title><description><![CDATA[
<p>i have made a language that xompiles to c#. I wrote a lexer. then a parser. then a type checker (hindley milner, function local so that top level functions must have type signatures) a match compiler.<p>the hardest part was what came next: the code generation. despite producing c# instead of MSIL.  The features I use are: static and dynamic traits, pattern matching, and a concurrentML.<p>It is actually quite simple when you don't have to do closure conversion yourself.</p>
]]></description><pubDate>Thu, 16 Jul 2026 20:02:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48939513</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48939513</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48939513</guid></item><item><title><![CDATA[New comment by bjoli in "C++20 Improved the For-Loop Syntax"]]></title><description><![CDATA[
<p>the looping facilities in most languages suck. We are at a position where iteration is either "increment or decrement numbers", or "go through this collection". Everything else means degrading performance. In some languages (Python, ruby) the choice is between the comfortable way to iterate through a collection (for a in xyz:), or the fast way (while). It is just stupid.</p>
]]></description><pubDate>Wed, 15 Jul 2026 14:27:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48921379</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48921379</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48921379</guid></item><item><title><![CDATA[New comment by bjoli in "TypeScript 7"]]></title><description><![CDATA[
<p>I would chose typescript over js, Python and perhaps ruby. but I would use Scheme over typescript. I would probably use f# or ocaml over Scheme for most projects.<p>it is not an either or.</p>
]]></description><pubDate>Thu, 09 Jul 2026 09:08:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48843052</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48843052</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48843052</guid></item><item><title><![CDATA[New comment by bjoli in "StreetComplete: Fixing OpenStreetMap, one tiny quest at a time"]]></title><description><![CDATA[
<p>Last week I am #2 in Sweden on StreetComplete, despite using veapucci for about half my edits (my neighborhood is pretty effed up).<p>AMA I guess</p>
]]></description><pubDate>Wed, 08 Jul 2026 10:07:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=48829988</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48829988</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48829988</guid></item><item><title><![CDATA[New comment by bjoli in "Rob Pike – 'Concurrency Is Not Parallelism' [video] (2012)"]]></title><description><![CDATA[
<p>that is one of the reasons async is everywhere. proper threads are not enough. 2 threads are great at doing 2 things at once, but unless you have the hardware 1000 threads scale very badly at doing 1000 dings at once.<p>with CAS, making a multicore cml is not too hard.</p>
]]></description><pubDate>Wed, 08 Jul 2026 10:04:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48829963</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48829963</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48829963</guid></item><item><title><![CDATA[New comment by bjoli in "Poly/ML – A Standard ML Implementation"]]></title><description><![CDATA[
<p>it is like CSP but with first class events. In CSP you have to manage complex protocols yourself, whereas in cml you can compose larger even trees and then do one sync.<p>a classic example of something that is trivial in cml but requires a mediator in CSP or go is two fibers swapping values atomically where a fiber can pull out at any time. in cml it is about 20 lines of code that can be in a library. it composes with other events.<p>in csp it is a "server" that manages the swap which means you lose the sectability.<p>Evert time you want to have any kind of protocol, cml wins.</p>
]]></description><pubDate>Wed, 08 Jul 2026 06:16:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48828217</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48828217</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48828217</guid></item><item><title><![CDATA[New comment by bjoli in "Poly/ML – A Standard ML Implementation"]]></title><description><![CDATA[
<p>and you get concurrentML. People get all wet in the pants by the actor model and CSP, but my god CML is much nicer in every way.<p>I had a weird introduction to programming. I spent my first half year doing php, and them went all in on scheme and sml. Which is nice in many ways, but I do have a hard time accepting many of the completely braindead (subjective opinion, of course) choices of most of the popular languages.<p>I do think clojure is a pretty nice compromise. Rich has good taste, obviously. Clojure's core.async could be less async and more CML in my taste. Wrapping a simpler async api in cml is easy. Implementing CML on top on core.async is either very hard or full of compromises.</p>
]]></description><pubDate>Tue, 07 Jul 2026 05:42:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48814049</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48814049</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48814049</guid></item><item><title><![CDATA[New comment by bjoli in "Rob Pike – 'Concurrency Is Not Parallelism' [video] (2012)"]]></title><description><![CDATA[
<p>you can implent something like futures on top of cml and use it as async. then you get async for stuff where async is useful and a proper way to write parallel programs for when async would lead to all the bad stuff async leads to.<p>i rarely write gui stuff and I find async is rarely what I need. in f# I at least have the option to use hopac.</p>
]]></description><pubDate>Sun, 05 Jul 2026 05:46:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48791541</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48791541</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48791541</guid></item><item><title><![CDATA[New comment by bjoli in "Rob Pike – 'Concurrency Is Not Parallelism' [video] (2012)"]]></title><description><![CDATA[
<p>yep. writing on my phone. notoriously bad at proof reading.</p>
]]></description><pubDate>Sun, 05 Jul 2026 05:22:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48791437</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48791437</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48791437</guid></item><item><title><![CDATA[New comment by bjoli in "Rob Pike – 'Concurrency Is Not Parallelism' [video] (2012)"]]></title><description><![CDATA[
<p>It seems like we forgot about lightweight fibers for about 30 years and then collectively rediscovered it in about 2010. sure, Java did green threads, but not like m:n stuff.<p>I sometimes wonder where we would be now if people would have gone "Wow, mr Reppy! concurrentML is so cool!" in 1993.<p>instead we got pthreads and collective amnesia and later we got go's girly times and channels which are only half way there.</p>
]]></description><pubDate>Sat, 04 Jul 2026 19:12:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=48788033</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48788033</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48788033</guid></item><item><title><![CDATA[New comment by bjoli in "Podman v6.0.0"]]></title><description><![CDATA[
<p>I administrate my home lab using podman desktop and quadlets. It is one of the few GUIs for what is mostly a cli utility that really adds value.</p>
]]></description><pubDate>Fri, 03 Jul 2026 05:52:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48771297</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48771297</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48771297</guid></item><item><title><![CDATA[New comment by bjoli in "RRB-Trees: Efficient Immutable Vectors (2012) [pdf]"]]></title><description><![CDATA[
<p>Edit: Sorry for repeating myself. Still thinking out loud.<p>I have already started. Not only is the concat faster (which means the derived operations in the rrb tree will be faster), but the derived operations can be done directly since the relaxation is going to be between 16 and 32 elements. A remove will just be a copy 16 out of 17 times.<p>This will mean that indexing might be slower in the b tree (it will be higher since the fill ratio is lower) part of the tree, and there might be slightly more of the relaxed nodes, but sweet jeebus this is a simplification.<p>A simplification that makes correctness easier and speeds up all other operations.setting the minimal amount of elements to 24 will still make concat faster, and will make memory waste almost the same (I can use c# inline arrays without feeling too bad).<p>I have both a fast b+tree and am
 Rrb tree. Why didn't I think of this before?!</p>
]]></description><pubDate>Fri, 26 Jun 2026 19:47:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48691125</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48691125</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48691125</guid></item><item><title><![CDATA[New comment by bjoli in "RRB-Trees: Efficient Immutable Vectors (2012) [pdf]"]]></title><description><![CDATA[
<p>Hmmm. This comment made me think. If you would do a radix tree that degrades to a b+tree, you would get a couple of things. The b+tree concat and subsequently insertions and removal, is faster than the rrb tree one, but yields more relaxed nodes.<p>If you have a relaxed root, you know the size of every subtree. If the the subtree is dense you can easily calculate the shift, meaning you get dense radix tree subnodes with fast lookup.<p>This gets you the benefits of a relaxed b tree, but no issues with accidentally having too deep shifts since they are relative to where the dense subtree starts.<p>This could be done to a rrb tree as well, which would mitigate the issues you are seeing, but would still lead to an arbitrarily deep tree if the concatenation isn't done properly.<p>The only tradeoff would be slower indexing on relaxed trees because more nodes would end up unbalanced, but at the same time concatenations, insertions and removals would probably be faster.<p>I will try to implement this.<p>Edit: no, seriously. This is a splendid idea. The b tree concat is faster than the rrb tree "full" merge. And simpler. And storing the tree subtree height in a byte somewhere means we can go from relaxed to dense and then do a proper radix tree search. (I have one of those rrb tree implementations that probably fails, btw. It has a proper concat, but the improper one is so much faster. I know. I am ashamed.)</p>
]]></description><pubDate>Fri, 26 Jun 2026 15:58:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48688157</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48688157</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48688157</guid></item><item><title><![CDATA[New comment by bjoli in "RRB-Trees: Efficient Immutable Vectors (2012) [pdf]"]]></title><description><![CDATA[
<p>This is a persistent ordered map on b+trees.<p><a href="https://rikspucko.koketteriet.se/bjoli/PersistentMap/src/branch/master/PersistentOrderedMap" rel="nofollow">https://rikspucko.koketteriet.se/bjoli/PersistentMap/src/bra...</a></p>
]]></description><pubDate>Fri, 26 Jun 2026 05:30:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48682677</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48682677</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48682677</guid></item><item><title><![CDATA[New comment by bjoli in "RRB-Trees: Efficient Immutable Vectors (2012) [pdf]"]]></title><description><![CDATA[
<p>that is because many implementations bypass strict rebalancing to squeeze out extra concat performance. And because the strict rebalancing algorithm is awful to implement.</p>
]]></description><pubDate>Fri, 26 Jun 2026 04:58:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=48682487</link><dc:creator>bjoli</dc:creator><comments>https://news.ycombinator.com/item?id=48682487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48682487</guid></item></channel></rss>