Sign in

ioquatix.bsky.social

@ioquatix.bsky.social
895 followers 6 following 60 posts
PostsRepliesMedia
ioquatix.bsky.social @ioquatix.bsky.social · 01/03/2025
Also, looking at those numbers, event machine was using more than 3x the processor time: > (17.97+8.42) / 241.45 => 0.10929799130254712 > (76.58+5.03) / 243.25 => 0.3354984583761562 So even if, for example, it was 5% better in wall clock time (unproven), it's costing you ~3x in processor time.
010
ioquatix.bsky.social @ioquatix.bsky.social · 01/03/2025
Realistically as long as the network is the same for both tests, it's not going to change the outcome, however it might affect the ratio of processor/network which could influence some of the numbers. I tried 10 x 100_000:
100
ioquatix.bsky.social @ioquatix.bsky.social · 01/03/2025
I changed the code to do 10 x 10,000 which is 100k. Better to benchmark with a fixed known load.
110
ioquatix.bsky.social @ioquatix.bsky.social · 01/03/2025
This is a good talk which will help give you a deeper understanding of how to compare these types of systems: www.youtube.com/watch?v=r-TL...
youtube.com
"Performance Matters" by Emery Berger
YouTube video by Strange Loop Conference
020
ioquatix.bsky.social @ioquatix.bsky.social · 01/03/2025
IOW, since eventmachine and async follow largely the same design strategy (event loop), I'd expect them to be similar in terms of performance.
110
ioquatix.bsky.social @ioquatix.bsky.social · 01/03/2025
One thing to confirm would be the use of per-message deflate and how it's negotiated. Since each message may need to be processed by libz/deflate, it could change the performance characteristics. This wouldn't be a comparison of async vs eventmachine, but different connection parameters.
110
ioquatix.bsky.social @ioquatix.bsky.social · 01/03/2025
One thing you'll notice is that while the wall clock run-time was about the same (25s) the actual user processor time was greatly reduced, in conclusion, one could say that async was more efficient (less time spent executing CPU instructions). I'm not sure what would specifically cause this though.
110
ioquatix.bsky.social @ioquatix.bsky.social · 01/03/2025
This benchmark is hard to draw conclusions from. The network conditions are constantly changing. I got similar results from both systems but I also saw fluctuations one way or another too. To really see the difference, you'd need to run a local "firehose" to remove the network variance.
210
ioquatix.bsky.social @ioquatix.bsky.social · 01/03/2025
Hello
100
Reposted by @ioquatix.bsky.social
Xavier Noria @fxn.bsky.social · 14/02/2025
Using `Module#set_temporary_name` (added by @ioquatix.bsky.social 🤘). I am decorating Active Record with a module. Don't need a constant for it, and an unexpected constant could mess existing lookups up. You'd typically use an anonymous module, but that is meaningless in ancestor chain listings.
1111
ioquatix.bsky.social @ioquatix.bsky.social · 10/02/2025
ChatGPT wrote this code: ruby(47811,0x1fc22c840) malloc: Heap corruption detected, free list is damaged at 0x60000040bc00 *** Incorrect guard value: 585253 ruby(47811,0x1fc22c840) malloc: *** set a breakpoint in malloc_error_break to debug
030
Reposted by @ioquatix.bsky.social
Brad Gessler @bradgessler.com · 07/02/2025
For example, when I switched @tinyzap.com from Puma to @ioquatix.bsky.social's Falcon server, my entire web application was much more responsive and loads faster in the browser because each image you see in the screenshot below fires a request to Rails to get the image URL.
562
ioquatix.bsky.social @ioquatix.bsky.social · 09/02/2025
The Ruby Fiber::Scheduler embraces the GVL while Threads constantly bump up against it. I specifically designed the scheduler to work with the GVL with minimal impact. However, that being said, in the future I want to remove the GVL and experiment with a work stealing multi-threaded scheduler.
010
ioquatix.bsky.social @ioquatix.bsky.social · 30/01/2025
Rack has passed 1 billion downloads.
1141
ioquatix.bsky.social @ioquatix.bsky.social · 30/01/2025
I'll remember this for next time I'm in a meeting and asked a question I don't have an answer for.
020
ioquatix.bsky.social @ioquatix.bsky.social · 28/01/2025
You should write an adapter for bake.
110
Reposted by @ioquatix.bsky.social
Aaron Patterson @tenderlove.dev · 27/01/2025
Made a patch for Ruby that I think is cool, but probably can't be on by default. It emits a warning when an object is mutated from a thread that didn't create the object (patch is here: github.com/ruby/ruby/co...)
Screenshot of a terminal that has a thread unsafe program displayed and a warning emitted when objects are mutated from different threads
6485
ioquatix.bsky.social @ioquatix.bsky.social · 28/01/2025
Good job GitHub Actions. Did it pass or fail? Oh, refresh the page. Status is updated to green tick... awesome.
000
ioquatix.bsky.social @ioquatix.bsky.social · 25/01/2025
Best use of katamari in a bug report. github.com/orgs/communi...
github.com
Evolving GitHub Issues - Public Preview · community · Discussion #148713
GitHub Issues is evolving! 🥳 Feedback wanted Thank you for participating in the issues public preview for sub-issues, issue types and advanced search. To provide your feedback on other experiences ...
010
Reposted by @ioquatix.bsky.social
Scattergun @scattergun.email · 21/01/2025
At long last, Scattergun is back in business! Our focus was, and remains, simple and privacy focused mailing lists. After a period of hibernation, we're also making a commitment to remain online and operation for as long as there are paying users. Here's all the details:
blog.scattergun.email
Scattergun is open for new users once again
Scattergun is open for business again. I initially launched the product way back in October, 2021. A few months later, my accountant told me I couldn't directly collect payments for SaaS from EU consu...
032
ioquatix.bsky.social @ioquatix.bsky.social · 21/01/2025
Time for marshmallows 😋
070
ioquatix.bsky.social @ioquatix.bsky.social · 21/01/2025
Gone fishing.
080
ioquatix.bsky.social @ioquatix.bsky.social · 17/01/2025
I’m having a sugar collapse. Will go swimming to burn off the excess energy.
020
ioquatix.bsky.social @ioquatix.bsky.social · 17/01/2025
Innovations in pizza: blueberry and marshmallow 😋
140
ioquatix.bsky.social @ioquatix.bsky.social · 12/01/2025
I will miss your newsletter, wishing you a speedy recovery!
130
ioquatix.bsky.social @ioquatix.bsky.social · 07/01/2025
I built a rock sculpture.
030
ioquatix.bsky.social @ioquatix.bsky.social · 06/01/2025
Many years ago in Reefton, I took this photo of a man and his pet possum. Possums are considered a pest in New Zealand, but I love the facial expressions in this photo.
160
ioquatix.bsky.social @ioquatix.bsky.social · 06/01/2025
Baking focaccia.
0140
ioquatix.bsky.social @ioquatix.bsky.social · 23/12/2024
Ginger bread mountains.
010
ioquatix.bsky.social @ioquatix.bsky.social · 22/12/2024
🎙️ Earlier this year, I joined Ruby Rogues to talk about Async, Falcon, and advancing Rails with concurrency & streaming. 🚀 We explored challenges, simplifying deployments, and even gave Futurama a shoutout. 📺💡 www.youtube.com/watch?v=fpXB...
youtube.com
Revolutionizing Ruby Deployment with Falcon Web Server and Async Concurrency Framework - RUBY 627
YouTube video by Top End Devs
054
ioquatix.bsky.social @ioquatix.bsky.social · 15/12/2024
I originally implemented Async in C++: github.com/kurocha/async I used it in a commercial project, and it was a great success. I'd like to revisit the C++ implementation when I have time. I think at least part of that work will form the basis for some native extensions (e.g. HTTP/3) in the future.
github.com
GitHub - kurocha/async
Contribute to kurocha/async development by creating an account on GitHub.
140
ioquatix.bsky.social @ioquatix.bsky.social · 15/12/2024
Falcon originally started as a proof of concept, just to see whether it was possible to build an event-driven web-server and what the performance would be like. It wasn't so much the end goal, but the journey (implementation) that was most interesting to me.
130
ioquatix.bsky.social @ioquatix.bsky.social · 15/12/2024
io-event is a special kind of effort. We could have used an off the shelf solution like libev or libuv, both are good, battle tested solutions, and it probably would have been easier. However, I wanted to deeply integrate with Ruby to ensure the lowest possible overheads for each operation.
140
ioquatix.bsky.social @ioquatix.bsky.social · 13/12/2024
Even 3 years later, this is still an extremely good summary of the advantages of Async: brunosutic.com/blog/async-r...
brunosutic.com
Async Ruby - Bruno Sutic
Async Ruby is a powerful and highly scalable concurrency feature. It's available today, it's production-ready, and it's an awesome addition to Ruby language!
074
Reposted by @ioquatix.bsky.social
Andreas Finger 🇪🇺 @mediafinger.com · 03/12/2024
He clearly does sleep and work asynchronously. 😴😁
051
ioquatix.bsky.social @ioquatix.bsky.social · 03/12/2024
I had a great time too! Sharing knowledge is extremely important to me, and it’s even better when it inspires others to explore new possibilities. I’m thrilled you’re diving into Falcon. Let me know if you need any guidance or want to discuss ideas further! 🚀
1130
Reposted by @ioquatix.bsky.social
Ayush @ayushn21.bsky.social · 03/12/2024
I think I learned more in a day of hanging out with @ioquatix.bsky.social than I did in 3 years of university 😂. I’m now really looking forward to diving deeper into the Falcon web server … it’s likely to become my default going forward. It’s just a stellar piece of software.
1101
ioquatix.bsky.social @ioquatix.bsky.social · 02/12/2024
It means the semantics of the protocol e.g. www.rfc-editor.org/rfc/rfc9110.... rather than the wire format (e.g. HTTP/1 vs HTTP/2 vs HTTP/3).
rfc-editor.org
RFC 9110: HTTP Semantics
The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture o...
000
ioquatix.bsky.social @ioquatix.bsky.social · 28/11/2024
Oh man, egg on my face, I used ChatGPT to understand the RFC and it hallucinated part of the specification. I ended reverting the PR and rewriting it: github.com/socketry/pro... The funny thing is, it wasn't totally wrong, and it looked okay based on my understanding of the RFC at the time (bad).
github.com
Add `priority` header according to RFC9218. by ioquatix · Pull Request #74 · socketry/protocol-http
https://www.rfc-editor.org/rfc/rfc9218.html introduces a generic per-request prioritisation mechanism. Let's add support for it. Types of Changes New feature. Contribution I added tests f...
130
ioquatix.bsky.social @ioquatix.bsky.social · 28/11/2024
Now we get to remove all this code!
github.com
Remove suport for priority frame and stream dependencies. by ioquatix · Pull Request #23 · socketry/protocol-http2
HTTP/2 has deprecated the priority frame and stream dependency tracking. This feature has been effectively removed from the protocol. As a consequence, the internal implementation is greatly simpli...
030
ioquatix.bsky.social @ioquatix.bsky.social · 28/11/2024
It's a protocol agnostic implementation of HTTP semantics, so it gets used as the foundation for HTTP/1, HTTP/2 in Async::HTTP.
110
ioquatix.bsky.social @ioquatix.bsky.social · 28/11/2024
Yeah, it's way better than HTTP/2's completely bonkers dependency management.
040
ioquatix.bsky.social @ioquatix.bsky.social · 28/11/2024
Did you know RFC9218 introduced a generic per-request priority mechanism? Neither did I. Let's add support for it in protocol-http / async-http: github.com/socketry/pro...
github.com
Add priority header. by ioquatix · Pull Request #73 · socketry/protocol-http
https://www.rfc-editor.org/rfc/rfc9218.html introduces a generic per-request prioritisation mechanism. Let's add support for it. Types of Changes New feature. Contribution I added tests f...
240
ioquatix.bsky.social @ioquatix.bsky.social · 27/11/2024
async-redis now tested on valkey: github.com/socketry/asy...
github.com
Try running tests on valkey. by ioquatix · Pull Request #58 · socketry/async-redis
See #57 for context. Types of Changes Maintenance. Contribution I added tests for my changes. I tested my changes locally. I agree to the Developer's Certificate of Origin 1.1.
040
ioquatix.bsky.social @ioquatix.bsky.social · 26/11/2024
When you start to question reality:
040
ioquatix.bsky.social @ioquatix.bsky.social · 26/11/2024
You can easily start a server use `Async::HTTP::Server` it's like 5 lines of code.
020
Reposted by @ioquatix.bsky.social
Ayush @ayushn21.bsky.social · 26/11/2024
I’m in Christchurch to watch some men clobber a leather sphere with a wooden stick (colloquially known as cricket), so I took the opportunity to hang out with @ioquatix.bsky.social and chat Ruby!
0111
ioquatix.bsky.social @ioquatix.bsky.social · 12/11/2024
Streaming Rack with Falcon - learn about streaming input, output, server-sent events, full-duplex streaming and WebSockets! www.codeotaku.com/journal/2024...
codeotaku.com
Streaming Rack with Falcon
0155
ioquatix.bsky.social @ioquatix.bsky.social · 02/11/2024
Are you talking about performance or ergonomics?
100
ioquatix.bsky.social @ioquatix.bsky.social · 31/10/2024
Fair enough - my point was that the performance characteristics of threads in CRuby is extremely hard to predict and because of the GVL, we have "spooky sequentialization at a distance". That's not how threads are supposed to work IMHO. Adjusting the timer quantum doesn't fix the design issues.
020