<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: reubenbond</title><link>https://news.ycombinator.com/user?id=reubenbond</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 02 May 2026 09:04:48 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=reubenbond" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by reubenbond in "Next Generation Out of Band Garbage Collection"]]></title><description><![CDATA[
<p>Would GC.TryStartNoGCRegion work for you? <a href="https://learn.microsoft.com/en-us/dotnet/api/system.gc.trystartnogcregion?view=net-8.0#system-gc-trystartnogcregion(system-int64-system-boolean)" rel="nofollow">https://learn.microsoft.com/en-us/dotnet/api/system.gc.tryst...</a></p>
]]></description><pubDate>Sun, 03 Nov 2024 05:24:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=42031313</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=42031313</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42031313</guid></item><item><title><![CDATA[New comment by reubenbond in ".NET Aspire: Simplifying Cloud-Native Development with .NET 8"]]></title><description><![CDATA[
<p>We have a section in the FAQ about it: <a href="https://learn.microsoft.com/en-us/dotnet/aspire/reference/aspire-faq#what-s-the-difference-between--net-aspire-and-microsoft-orleans-" rel="nofollow noreferrer">https://learn.microsoft.com/en-us/dotnet/aspire/reference/as...</a><p>In short, these are complimentary things. Think about it like this: you use aspire to define the pieces which your app is comprised of (services, databases, etc), and that includes your Orleans silos & clients. Aspire lets you configure clustering once and then pass it to the services which consume it - rather than having to configure clustering identically in every silo & client app, for example. Here's an example of the work-in-progress: <a href="https://x.com/reubenbond/status/1724479093247549470?s=20" rel="nofollow noreferrer">https://x.com/reubenbond/status/1724479093247549470?s=20</a></p>
]]></description><pubDate>Wed, 15 Nov 2023 18:03:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=38280032</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=38280032</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38280032</guid></item><item><title><![CDATA[New comment by reubenbond in ".NET 8"]]></title><description><![CDATA[
<p>We should chat more about Reminders v2 - I want to learn more about what you'd like it to provide. Can you comment on the issue (<a href="https://github.com/dotnet/orleans/issues/7573">https://github.com/dotnet/orleans/issues/7573</a>)? If you'd like to see some of what is in the works, please message me on Discord and we can chat more about it (<a href="https://aka.ms/orleans/discord" rel="nofollow noreferrer">https://aka.ms/orleans/discord</a>)</p>
]]></description><pubDate>Tue, 14 Nov 2023 23:27:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=38271283</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=38271283</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38271283</guid></item><item><title><![CDATA[New comment by reubenbond in ".NET 8"]]></title><description><![CDATA[
<p>There were a bunch of new features added to Orleans in the past year, including Live Grain Migration, IAsyncEnumerable support, Cosmos DB & Redis providers.<p>I think workflows (durable async/await) are more useful than Reminders v2 alone (in some sense, workflows are Reminders v2), but an enhanced reminders system is likely part of that, as is the new log-structured storage system. The log structured storage issue discusses this: <a href="https://github.com/dotnet/orleans/issues/7691">https://github.com/dotnet/orleans/issues/7691</a>. We've been experimenting with a programming model for workflows and intend to share that more broadly soon. Currently, we are planning for .NET 9, so feedback is welcome (best provided via GitHub rather than here). Aspire will make it easier to build and deploy Orleans apps, which is one of the harder points for people getting started with Orleans currently.</p>
]]></description><pubDate>Tue, 14 Nov 2023 23:24:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=38271260</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=38271260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38271260</guid></item><item><title><![CDATA[New comment by reubenbond in "50 years later, is two-phase locking the best we can do?"]]></title><description><![CDATA[
<p>Which systems use Calvin-like protocols?</p>
]]></description><pubDate>Sat, 30 Sep 2023 00:58:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=37711885</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=37711885</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37711885</guid></item><item><title><![CDATA[New comment by reubenbond in "Choose Postgres queue technology"]]></title><description><![CDATA[
<p>> Anything but RabbitMQ.<p>Would you mind elaborating on this? I'd be happy for others to chime in with their experiences/opinions, too.</p>
]]></description><pubDate>Mon, 25 Sep 2023 02:24:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=37639035</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=37639035</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37639035</guid></item><item><title><![CDATA[New comment by reubenbond in "Seqlock-Based Atomic Memory Snapshots"]]></title><description><![CDATA[
<p>Not the same, but this reminds me of the Epoch Protection Version Scheme discussed in this paper: <a href="https://dl.acm.org/doi/fullHtml/10.1145/3533737.3535091" rel="nofollow noreferrer">https://dl.acm.org/doi/fullHtml/10.1145/3533737.3535091</a><p>EPVS is used in Microsoft FASTER, a KV storage engine that uses a hybrid log as its primary data structure: <a href="https://dl.acm.org/doi/10.1145/3183713.3196898" rel="nofollow noreferrer">https://dl.acm.org/doi/10.1145/3183713.3196898</a>, which is OSS and used by Microsoft  (where I work), with implementations in C++ and C#: <a href="https://microsoft.github.io/FASTER/" rel="nofollow noreferrer">https://microsoft.github.io/FASTER/</a></p>
]]></description><pubDate>Sat, 26 Aug 2023 16:26:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=37274244</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=37274244</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37274244</guid></item><item><title><![CDATA[New comment by reubenbond in "Turmoil, a framework for developing and testing distributed systems"]]></title><description><![CDATA[
<p>I used it to test an idea I had to implement the Fast Paxos optimization on top of CASPaxos and it was quite useful for that: <a href="https://github.com/ReubenBond/fast-caspaxos">https://github.com/ReubenBond/fast-caspaxos</a> (the code is bad, it's just an experiment)</p>
]]></description><pubDate>Fri, 18 Aug 2023 02:46:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=37170900</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=37170900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37170900</guid></item><item><title><![CDATA[New comment by reubenbond in "I reversed a Node.js malware and found the author"]]></title><description><![CDATA[
<p>try virustotal.com</p>
]]></description><pubDate>Wed, 02 Feb 2022 03:58:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=30173516</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=30173516</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30173516</guid></item><item><title><![CDATA[New comment by reubenbond in "The Deadlock Empire"]]></title><description><![CDATA[
<p>Coyote is a great tool/library from Microsoft for testing large numbers of schedules in .NET programs: <a href="https://microsoft.github.io/coyote/" rel="nofollow">https://microsoft.github.io/coyote/</a></p>
]]></description><pubDate>Sat, 04 Dec 2021 07:34:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=29439390</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=29439390</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29439390</guid></item><item><title><![CDATA[New comment by reubenbond in "Asynchronous Programming in C#"]]></title><description><![CDATA[
<p>If task A & B perform IO (eg, a DB call) and the alternatives are running them sequentially on one thread or running them concurrently (via async/await) on one thread, then running them concurrently can both decrease end-to-end latency and increase throughput.<p>> If you just synchronously run A then B, the overall time would be shorter (higher throughput) because of less context switching overhead.<p>There are no context switches: async/await isn't threads. The compiler generates state machines which are scheduled on a thread pool. Basically, each time an event happens (eg, database request completes or times out, or a new request arrives), that state machine is scheduled again so that it can observe that event. This doesn't involve context switching: you can have 1 thread or N threads happily working away on many concurrent tasks without needing to context switch between them.</p>
]]></description><pubDate>Fri, 24 Sep 2021 16:43:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=28644814</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=28644814</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28644814</guid></item><item><title><![CDATA[New comment by reubenbond in "Asynchronous Programming in C#"]]></title><description><![CDATA[
<p>> Consider that the minimum grain of a Task.Delay is 1 millisecond.<p>The minimum here is contingent on a few things. The API can accept a TimeSpan which can express durations as low as 100ns (10M ticks per second: <a href="https://docs.microsoft.com/dotnet/api/system.timespan.tickspersecond" rel="nofollow">https://docs.microsoft.com/dotnet/api/system.timespan.ticksp...</a>). The actual delay is subject to the timer frequency, which can be as high as 16ms and depends on the OS configuration (eg, see <a href="https://stackoverflow.com/a/22862989/635314" rel="nofollow">https://stackoverflow.com/a/22862989/635314</a>). However, I'm not sure how any of this relates to "go[ing] as fast as possible", since surely you would simply not use a Task.Delay in that case.<p>> There is a shitload of context switching and other barbarism that occurs when you employ async/await.<p>Async/await reduces context switching over the alternative of having one thread per request (i.e, many more OS threads than cores) and it (async/await) exhibits the same amount of context switching as Goroutines in Go and other M:N schedulers. If there is work enqueued to be processed on the thread pool, then that work will be processed without yielding back to the OS. The .NET Thread Pool dynamically sizes itself depending on the workload in an attempt to maximize throughput. If your code is not blocking threads during IO, you would ideally end up with 1 thread per core (you can configure that if you want).<p>Async/await can introduce overhead, though, so if you're writing very high-performance systems, then you may want to consider when to use it versus when to use other approaches as well as the relevant optimizations which can be implemented. I'd recommend people take the simple approach of using async/await at the application layer and only change that approach if profiling demonstrates that it's becoming a performance bottleneck.</p>
]]></description><pubDate>Fri, 24 Sep 2021 15:05:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=28643448</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=28643448</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28643448</guid></item><item><title><![CDATA[New comment by reubenbond in "Opus – an open source parallel corpus"]]></title><description><![CDATA[
<p>The Opus OpenSubtitles corpus was very useful when I was creating this Chinese-English dictionary app: <a href="https://github.com/ReubenBond/HanBaoBao" rel="nofollow">https://github.com/ReubenBond/HanBaoBao</a>. The tool which creates the dictionary database aggregates several sources, including processing Chinese subtitles for word frequency to inform the most likely cuts when performing word segmentation.</p>
]]></description><pubDate>Sun, 15 Aug 2021 14:56:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=28189256</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=28189256</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28189256</guid></item><item><title><![CDATA[New comment by reubenbond in "Ray: A Distributed Framework for Emerging AI Applications"]]></title><description><![CDATA[
<p>Given how Ray "provides [...] exactly-once semantics" for its actors, you could draw similarities between it and workflow-as-code frameworks such as <a href="https://temporal.io" rel="nofollow">https://temporal.io</a>. The way that Ray splits up actors and tasks looks similar to Temporal's Workflows + Activities split: Workflows (Ray actors) contain orchestration logic and have their method calls/results durably logged. Activities (Ray tasks) perform the expensive computations and any interaction with external systems and are not durably logged.<p>If you're in the .NET ecosystem or interested in distributed systems in general, you may like Orleans (<a href="https://github.com/dotnet/orleans" rel="nofollow">https://github.com/dotnet/orleans</a>), which I work on at Microsoft. Orleans contributes the Virtual Actor model which other modern actor frameworks are starting to adopt since it is well suited for the hectic, failure-prone environment of distributed systems (which those so-called Cloud Native Apps live in). The Ray paper linked from the article (<a href="https://www.usenix.org/system/files/osdi18-moritz.pdf" rel="nofollow">https://www.usenix.org/system/files/osdi18-moritz.pdf</a>) discusses some similarities. Slight correction on the paper: it states that "For message delivery, Orleans provides at-least-once [...] semantics". It's at-most-once. At-least-once messaging semantics (usually implemented via automatic retries) aren't ideal for these kinds of systems, in my opinion.</p>
]]></description><pubDate>Sun, 04 Jul 2021 18:06:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=27731485</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=27731485</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27731485</guid></item><item><title><![CDATA[The Curse of the A-Word]]></title><description><![CDATA[
<p>Article URL: <a href="https://docs.temporal.io/blog/sergey-the-curse-of-the-a-word/">https://docs.temporal.io/blog/sergey-the-curse-of-the-a-word/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=27054099">https://news.ycombinator.com/item?id=27054099</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 05 May 2021 18:53:35 +0000</pubDate><link>https://docs.temporal.io/blog/sergey-the-curse-of-the-a-word/</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=27054099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27054099</guid></item><item><title><![CDATA[New comment by reubenbond in "Goblins: A transactional, distributed actor model environment"]]></title><description><![CDATA[
<p>> I was watching a talk from Microsoft on the topic where they would refer to actors as “cloud native objects” and the model itself as an ideal way to do OOP on distributed systems. The marketing feels a little cringe at first but the mental model works well.<p>Was that my Orleans Deep Dive video? <a href="https://youtu.be/R0ODfwU6MzQ" rel="nofollow">https://youtu.be/R0ODfwU6MzQ</a><p>I started referring to Grains as Cloud Native Objects as a way to better convey them to people who aren't familiar already. My view is that Grains are different enough from Erlang/Akka style actors that lumping them under the Actor terminology can cause confusion. In the research publications, the term Virtual Actor is coined, which better describes them.<p>That video doesn't discuss it, but Orleans also supports distributed cross-actor ACID transactions, largely thanks to Phil Bernstein: <a href="https://www.microsoft.com/en-us/research/publication/transactions-distributed-actors-cloud-2/" rel="nofollow">https://www.microsoft.com/en-us/research/publication/transac...</a> and more recently <a href="https://www.microsoft.com/en-us/research/publication/resurrecting-middle-tier-distributed-transactions/" rel="nofollow">https://www.microsoft.com/en-us/research/publication/resurre...</a>.</p>
]]></description><pubDate>Fri, 02 Apr 2021 11:59:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=26670705</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=26670705</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26670705</guid></item><item><title><![CDATA[New comment by reubenbond in "Foundational Distributed Systems Papers"]]></title><description><![CDATA[
<p>The Raft paper is there. It's the first paper under the "Expository papers and blog posts" section</p>
]]></description><pubDate>Tue, 02 Mar 2021 01:17:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=26310759</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=26310759</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26310759</guid></item><item><title><![CDATA[New comment by reubenbond in "How Akka Cluster Works: Actors Living in a Cluster"]]></title><description><![CDATA[
<p>Orleans and Service Fabric are different. Orleans has been running in production for some time now and is actively developed on GitHub: <a href="https://github.com/dotnet/orleans" rel="nofollow">https://github.com/dotnet/orleans</a>.
Teams inside Microsoft run it on top of Service Fabric (and Kubernetes, etc.) More details in this talk: <a href="https://youtu.be/KhgYlvGLv9c" rel="nofollow">https://youtu.be/KhgYlvGLv9c</a><p>Service Fabric has something called Reliable Actors which are heavily inspired by Orleans.<p>Source: I'm the project lead for Orleans</p>
]]></description><pubDate>Wed, 20 Jan 2021 14:02:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=25846521</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=25846521</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25846521</guid></item><item><title><![CDATA[New comment by reubenbond in "Show HN: Lunatic – Actor System for Rust/WebAssembly"]]></title><description><![CDATA[
<p>Have you seen Orleans? <a href="https://github.com/dotnet/orleans" rel="nofollow">https://github.com/dotnet/orleans</a></p>
]]></description><pubDate>Sat, 21 Nov 2020 01:31:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=25167162</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=25167162</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25167162</guid></item><item><title><![CDATA[New comment by reubenbond in ".NET Orleans"]]></title><description><![CDATA[
<p>> why it took up to 6 years for MS to release an experimental fix [1] to run on Kubernetes?
> where I can find the outstanding issue in the release notes that [1] tries to fix?
- if .NET Orleans runs fine on Kubernetes, why is there a need for an experimental fix?<p>There is no experimental fix, just improvements. Things which can make life easier for developers running on Kubernetes by automating some things (setting addresses), and taking advantage of information that's available in a Kubernetes cluster (whether or not a pod has been deleted) and feeding that into the cluster membership system.<p>The reason the latter is useful is that it addresses something which can occur during initial dev/test, but which does not come up in production cases: when an entire cluster is deleted and redeployed with the same identity, the new instances try to contact defunct instances for a few minutes as a safety measure. The enhancement is to query Kubernetes to determine if it's worth trying to contact those nodes, or whether they're almost certainly dead.<p>- why Microsoft doesn't write and release an Operator & Helm chart, instead asking the community?<p>Helm charts aren't something we see requested often. Perhaps because Orleans is a framework which is embedded into the developer's application and not a service which gets deployed and stands alone (compared to, for example, a database). There are no separate Orleans pods, just the user's application pods. Internal users have been building applications on Kubernetes with their own Helm charts. Microsoft is not asking anybody to create those things, or anything, unless they want them for themselves.</p>
]]></description><pubDate>Wed, 07 Oct 2020 13:47:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=24708130</link><dc:creator>reubenbond</dc:creator><comments>https://news.ycombinator.com/item?id=24708130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24708130</guid></item></channel></rss>