<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: dszoboszlay</title><link>https://news.ycombinator.com/user?id=dszoboszlay</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 01 May 2026 09:38:15 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=dszoboszlay" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by dszoboszlay in "Elixir/Erlang Hot Swapping Code (2016)"]]></title><description><![CDATA[
<p>Hot code upgrades on the BEAM are awesome, but they're not a piece of cake. If you're also interested in the challenges of making them production safe, I gave a talk about this topic on CodeBEAM Sto earlier this year:<p><a href="https://youtu.be/epORYuUKvZ0?si=gkVBgrX2VpBFQAk5" rel="nofollow">https://youtu.be/epORYuUKvZ0?si=gkVBgrX2VpBFQAk5</a><p>OP talks in the summary about the importance of understanding the process. It's very much true, but you need to understand not only the process your tooling provides, but also what's going on in the background and what hasn't been taken care for you by your tools. I'm afraid these things are rarely understood about hot upgrades, even by experienced Erlang engineers.</p>
]]></description><pubDate>Fri, 13 Dec 2024 17:28:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=42410473</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=42410473</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42410473</guid></item><item><title><![CDATA[New comment by dszoboszlay in "List of Citogenesis Incidents"]]></title><description><![CDATA[
<p>> arbitrary addition to Coati, "also known as....the Brazilian aardvark"<p>But via citogenesis, the coati really became also known as the Brazilian aardvark. So the original claim is true, and this wasn't really citogenesis after all. More like self fulfilling prophecy.</p>
]]></description><pubDate>Wed, 12 Apr 2023 22:02:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=35547648</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=35547648</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35547648</guid></item><item><title><![CDATA[New comment by dszoboszlay in "Spy Balloon Simulator"]]></title><description><![CDATA[
<p>And a fish:<p>Deploy time: 2022-11-10 06:00<p>Deploy point: 5.31° S , 18.138° W<p>Simulation length: 9 days</p>
]]></description><pubDate>Wed, 22 Feb 2023 08:10:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=34892983</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=34892983</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34892983</guid></item><item><title><![CDATA[New comment by dszoboszlay in "Spy Balloon Simulator"]]></title><description><![CDATA[
<p>Here's a fun challenge: try to draw something nice on the map. My first submission is a not too perfect heart:<p>Deploy time: 2022-11-10 03:00<p>Deploy point: 23.795° S , 133.047° E<p>Simulation length: 10 days</p>
]]></description><pubDate>Wed, 22 Feb 2023 08:03:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=34892957</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=34892957</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34892957</guid></item><item><title><![CDATA[New comment by dszoboszlay in "26 programming languages in 25 days, Part 2: Reflections on language design"]]></title><description><![CDATA[
<p>Based on my quite limited experience with Python the big drawback of indentation sensitivity is copy pasting will only work when your editor has great language support. If I copy a block of code from indentation level X and paste it to indentation level Y when I have explicit end-of-block tokens the worst thing that could happen is that I end up with badly indented code that I have to clean up manually. On the other hand, if indentation matters, and my editor messes up things, I am very likely to get code that looks good, probably compiles too, but does nothing like the original. I have to read through every line carefully and think about where the blocks were meant to end.
In the end I'm still not convinced that significant indentation would worth the trouble.</p>
]]></description><pubDate>Tue, 03 Jan 2023 12:23:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=34230569</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=34230569</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34230569</guid></item><item><title><![CDATA[New comment by dszoboszlay in "Ask HN: Azure has run out of compute – anyone else affected?"]]></title><description><![CDATA[
<p>Good news is that today is Black Friday, so the e-commerce industry is running at peak capacity. In 30 days it will be Christmas, and by then (the very latest!) everybody will scale back, so you have a good chance to gain access to more compute before you reach the end of your runway.</p>
]]></description><pubDate>Fri, 25 Nov 2022 17:38:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=33744820</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=33744820</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33744820</guid></item><item><title><![CDATA[New comment by dszoboszlay in "Joy of Elixir (2020)"]]></title><description><![CDATA[
<p>I'm sorry to hear you got frustrated with this task, but to be honest, I don't think it would be representative of how it feels working with Elixir or Erlang. It's like sitting down with zero experience to an IBM mainframe and trying to accomplish some routine administration task, setting up mandatory password rotation policy or whatever. It'd feel frustrating and difficult for sure, but it doesn't tell mutch about the mainframe. Especially since it isn't even a design goal for it to feel similar to the Windows or Mac OS your familiar with.<p>When it comes to node names in the schema, you have to change them, but there's actually an example just about this piece of task in the docs: <a href="https://www.erlang.org/doc/apps/mnesia/mnesia_chap7#backup,-restore,-fallback,-and-disaster-recovery" rel="nofollow">https://www.erlang.org/doc/apps/mnesia/mnesia_chap7#backup,-...</a></p>
]]></description><pubDate>Sat, 17 Sep 2022 05:50:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=32875102</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=32875102</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32875102</guid></item><item><title><![CDATA[New comment by dszoboszlay in "A pizzeria owner made money buying his own $24 pizzas from DoorDash for $16 (2020)"]]></title><description><![CDATA[
<p>It may or may not be fraud as the letter of the law, but this is definitely the shadiest part of the story. Also a pretty lame thing to do.<p>It would have been much more elegant to add some crazy overpriced option to your pizzas where you could make a huge margin. Like "gift wrap +$100" which would mean putting a $0.01 ribbon around the box. You could make much more money this way from Doordash with less hassle than switching certain orders to plain dough.</p>
]]></description><pubDate>Tue, 16 Aug 2022 20:05:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=32488110</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=32488110</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32488110</guid></item><item><title><![CDATA[New comment by dszoboszlay in "The hunt for a cluster-killer Erlang bug (2021)"]]></title><description><![CDATA[
<p>In the beginning (read: 2005) there was only one system, Kred. It was written in Erlang and did everything, so became a huge monolith over time.<p>About 10 years later Klarna started to change its system architecture (which makes total sense, since by that time it grew to a successful unicorn, with a way more complex business than what it had at launch time).<p>First, instead of shovelling every new feature into the monolith, it introduced new (mostly micro-)services around it. This model is successful, and most of these new services are written in Java, but there are also Erlang ones and other, even some "exotic" ones, like Haskell. (Also, through a series of acquisitions, Klarna got a bunch of tech from other companies, which, you can imagine, were written in whatever language those other companies used.)<p>There was also an attempt to replace Kred, the old Erlang system, with a new one (happened to be written in Java), and this project indeed was a failure in the sense that Kred is still around and nobody wants to decommission it nowadays. But the intended replacement system still proved useful, so it's not really a failure from that system's developers point of view.</p>
]]></description><pubDate>Fri, 17 Jun 2022 08:39:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=31775588</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=31775588</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31775588</guid></item><item><title><![CDATA[New comment by dszoboszlay in "The hunt for a cluster-killer Erlang bug (2021)"]]></title><description><![CDATA[
<p>Kafka being a soft dependency is not an assumption, it's a design goal. So the conclusion should be to eliminate any hard dependencies on Kafka, if anything.<p>However, when it comes to metrics in particular, I'd say Kafka was still a soft dependency. The reason we lost our metrics during the incident was a scheduler lock-up blocking the collection of VM-level metrics. It's just coincidence that the scheduler lock was caused by brod in this case. Otherwise metrics would just flow to Graphite directly, never interacting with Kafka.<p>When it comes to the complete monitoring solution around Kred, there was one bit of it depending on Kafka: System monitor (<a href="https://github.com/klarna-incubator/system_monitor" rel="nofollow">https://github.com/klarna-incubator/system_monitor</a>). This tool is exporting data that doesn't fit well into Graphite or Splunk, so we store it in Postgres instead. Due to pure laziness it was at the time of the incident not writing directly to Postgres though, but was just pushing the data to Kafka. (The reason is that we already had a service available to push data from Kafka to Postgres.) After the incident we eliminated Kafka from the path. I didn't mention this work in the post because it was only marginally related.</p>
]]></description><pubDate>Fri, 17 Jun 2022 08:21:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=31775490</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=31775490</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31775490</guid></item><item><title><![CDATA[New comment by dszoboszlay in "Ask HN: What game do you wish existed?"]]></title><description><![CDATA[
<p>I'd like to play with a game that's like Civilisation, but when you start, you don't know what world you're playing in. You only know what your ruler sees and hears. You may send your Columbus across the Atlantic, and you will see him arrive to India in the East. Later on you may learn that he instead discovered a new continent. Maybe. Maybe he really landed in India in your game. Or maybe he was a fraud and found nothing, and all the lands he reported on will disappear from the map when you send more ships to follow his route.<p>Similarly, you wouldn't know which technology would work in this world and which not. Maybe alchemy would be real, and you could develop it to mass produce rare materials. Maybe it would turn out to be fake science only. Similarly, magic and religion may work as either basic mind tricks and psychology that enlightenment would mostly cancel out, or be part of the reality of the world, and you could get gods fighting on your side Greek mythology style, or wizards casting spells even deadlier than tanks and nukes.<p>I guess this system would be already a bit too hard to implement, but if I could keep wishing freely, it would be awesome if you could actually govern by writing whatever law you want. So you wouldn't just click a button to switch from feudalism to theocracy or communism, but you would actually have to come to an agreement with power figures (or classes) in your society on how your state would work. You could grant rights to tax trade routes in exchange of doing military service for example. And later you would need support from some other group if you would like to abolish this system.</p>
]]></description><pubDate>Wed, 25 May 2022 22:00:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=31511225</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=31511225</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31511225</guid></item><item><title><![CDATA[New comment by dszoboszlay in "Type-Based Optimizations in the JIT"]]></title><description><![CDATA[
<p>This is not exactly how the Beam VM works.<p>> an ISA design that contains no unbounded local looping primitives<p>Actually, most of the Beam instructions are non-O(1). For example since integers are unbounded in Erlang even simple arithmetic (+, -, etc.) may turn out to be a non-constant time operation (even though most of the time your integers will fit into a single machine word, so it'd rarely be a problem). But there's also a built-in for appending lists (++), which obviously contains an unbounded loop in it.<p>The solution is that these instructions are written so that they do work on chunks of data (e.g. ++ may process 1000 elements of a list in a chunk) after which they increment the reduction counter and possibly schedule out the process.<p>> there's no other way to do loops given the ISA constraints<p>The Beam ISA allows looping. You can even write a hand-crafted loop that will never increment the reduction counter and thus will deadlock a scheduler. But the Erlang compiler will never generate such a loop for you.<p>On the ISA level there are only labels where you can jump to. You can jump forwards and backwards. So you could implement a language that offers loops and still compiles to Beam. However, since jumps don't increment the reduction counter, you would either risk your loops breaking the fair scheduling of processes, or you would have to ensure that the loop body contains an operation that increments the reduction counter and allows the scheduler to suspend the process.<p>> This atomicity of bytecode basic-blocks is what guarantees that actors can be hard-killed without corrupting the abstract-machine scheduler they run on<p>Well, it is of course important that you don't interrupt the scheduler at an arbitrary point, midway executing an opcode. But there are no atomically executed bytecode blocks. Actors are free to kill not because they would run their code in uninterrupted atomic blocks, but because they don't share state (their heap) with each other. So if you have an actor that holds e.g. a binary tree, and it is half way into inserting a value into the binary tree when you kill it, it may leave the binary tree in an inconsistent state, but that doesn't matter, because no one  else have access to this data structure: it lives on this process' own heap.<p>When processes use shared resources (such as ETS tables, files or a gen_server process) and they are killed, they may very well leave that shared resource in an inconsistent state, just not on the VM layer, but on the application logic layer. So the file will still be usable as a file, but it may contain corrupted data for example.<p>> The JVM doesn't have this atomicity, and so you can't hard-kill a Java thread without corrupting the JVM. Instead, you can only softly "interrupt" threads.<p>If you would port Erlang to the JVM, that would be the least of your problems. The compiler could just insert code to check for these signals every now and then. I go further: if you'd run Erlang code (and only Erlang code) on the JVM, it wouldn't even matter that you don't have separate heaps. Every process would only use a separate part of the shared heap, so they couldn't tip on each other's toe. The GC could take care of the rest as usual.<p>I think there are two real issues with porting to the JVM:<p>* Mapping an Erlang process to an OS thread would only work up to some reasonably low number of Erlang processes. After that you'd have to switch to a green thread model with schedulers, which is a lot of work to implement.
* The Beam put a lot of effort into making the VM scale well to a lot of schedulers. Things like how to implement a message box where 100+ schedulers can concurrently push messages to. You'd probably have to implement similar optimisations for the data structures you'd use for message boxes, ETS tables etc. on the JVM too.</p>
]]></description><pubDate>Wed, 27 Apr 2022 10:38:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=31178328</link><dc:creator>dszoboszlay</dc:creator><comments>https://news.ycombinator.com/item?id=31178328</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31178328</guid></item></channel></rss>