56,966 blogs Β· [ { "id": "01a0d8f2-33e8-722f-a746-eea4f52ed6ae", "title": "Updating a C extension for a modern VM", "url": "https://ivoanjo.me/blog/2026/09/23/updating-a-c-extension-for-a-modern-vm/", "published_at": "2026-09-22T23:00:00+00:00" }, { "id": "01a0d8f2-33e8-722f-a746-eea4f62ad83f", "title": "How a Ruby profiler works", "url": "https://ivoanjo.me/blog/2026/09/22/how-a-ruby-profiler-works/", "published_at": "2026-09-21T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a289a7a95f", "title": "Low-level Ruby observability APIs", "url": "https://ivoanjo.me/blog/2025/07/12/lowlevel-toolkit-ruby-gem/", "published_at": "2025-07-11T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28a03a800", "title": "Talking Ruby GVL, Scheduling and Performance on the Dead Code podcast", "url": "https://ivoanjo.me/blog/2025/07/06/ruby-gvl-scheduling-podcast/", "published_at": "2025-07-05T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28aa512d0", "title": "native-filenames: Find out where native methods are defined in Ruby", "url": "https://ivoanjo.me/blog/2025/07/05/native-filenames-ruby-gem/", "published_at": "2025-07-04T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28b2eded7", "title": "I wrote another weird ruby gem: direct-bind", "url": "https://ivoanjo.me/blog/2025/06/15/direct-bind-ruby-gem/", "published_at": "2025-06-14T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28bd2bbf4", "title": "M:N scheduling and how the (Ruby) global vm lock impacts app performance", "url": "https://ivoanjo.me/blog/2025/03/30/mn-scheduling-and-how-the-ruby-gvl-impacts-app-perf/", "published_at": "2025-03-30T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28cbb7fbf", "title": "Building an always-on (Ruby) production profiler", "url": "https://ivoanjo.me/blog/2025/03/19/building-an-always-on-production-ruby-profiler/", "published_at": "2025-03-19T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28d7dfa64", "title": "Backtracie and the quest for prettier Ruby backtraces", "url": "https://ivoanjo.me/blog/2024/03/07/backtracie-and-the-quest-for-prettier-ruby-backtraces/", "published_at": "2024-03-07T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28e2784f4", "title": "Look out! Gotchas of using threads in Ruby", "url": "https://ivoanjo.me/blog/2024/03/04/look-out-gotchas-of-using-threads-in-ruby/", "published_at": "2024-03-04T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28e9b409e", "title": "Understanding the Ruby Global VM Lock by observing it", "url": "https://ivoanjo.me/blog/2023/07/23/understanding-the-ruby-global-vm-lock-by-observing-it/", "published_at": "2023-07-22T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28f444e6f", "title": "Ruby's unexpected I/O vs CPU unfairness", "url": "https://ivoanjo.me/blog/2023/02/11/ruby-unexpected-io-vs-cpu-unfairness/", "published_at": "2023-02-11T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a28fd9dd8f", "title": "Talking Ruby Performance Tooling at the Ruby Rogues podcast", "url": "https://ivoanjo.me/blog/2023/01/24/ruby-performance-tooling-podcast/", "published_at": "2023-01-24T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a290d982d0", "title": "Ruby reuses native OS threads after Ruby Threads die", "url": "https://ivoanjo.me/blog/2022/11/26/ruby-reuses-native-threads/", "published_at": "2022-11-26T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a291adbed6", "title": "Hunting production memory leaks at RubyKaigi 2022", "url": "https://ivoanjo.me/blog/2022/11/09/hunting-production-memory-leaks-rubykaigi-2022/", "published_at": "2022-11-09T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a291d95c8b", "title": "Tracing Ruby's (Global) VM Lock", "url": "https://ivoanjo.me/blog/2022/07/17/tracing-ruby-global-vm-lock/", "published_at": "2022-07-16T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29257243b", "title": "Talking Ruby Ractors and Concurrency at the Ruby Rogues podcast", "url": "https://ivoanjo.me/blog/2022/01/22/ractors-concurrency-podcast/", "published_at": "2022-01-22T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29305fde2", "title": "The unexpected cost of Ruby's NoMethodError exception", "url": "https://ivoanjo.me/blog/2021/11/01/nomethoderror-ruby-cost/", "published_at": "2021-11-01T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a293615959", "title": "Sunday Lol: Embedding images in commit logs", "url": "https://ivoanjo.me/blog/2021/03/14/embedding-images-in-commit-logs/", "published_at": "2021-03-14T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29439b37c", "title": "Ruby Ractor Experiments: Safe async communication", "url": "https://ivoanjo.me/blog/2021/02/14/ractor-experiments-safe-async/", "published_at": "2021-02-14T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a294580947", "title": "Looking into Array memory usage in Ruby", "url": "https://ivoanjo.me/blog/2021/02/11/looking-into-array-memory-usage/", "published_at": "2021-02-11T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a294c05249", "title": "What I've been reading: December+January 2021 Edition", "url": "https://ivoanjo.me/blog/2021/02/06/what-ive-been-reading-december-january-2021-edition-part-i/", "published_at": "2021-02-06T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a2952c723e", "title": "What I've been reading: November 2020 Edition", "url": "https://ivoanjo.me/blog/2020/12/02/what-ive-been-reading-november-2020-edition/", "published_at": "2020-12-02T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29575c3d4", "title": "Creating a newsletter!", "url": "https://ivoanjo.me/blog/2020/12/01/creating-a-newsletter/", "published_at": "2020-12-01T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a2962c9f49", "title": "What I've been reading: October 2020 Edition", "url": "https://ivoanjo.me/blog/2020/11/03/what-ive-been-reading-october-2020-edition/", "published_at": "2020-11-03T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a2965e156d", "title": "Better backtraces in Ruby using TracePoint", "url": "https://ivoanjo.me/blog/2020/07/19/better-backtraces-in-ruby-using-tracepoint/", "published_at": "2020-07-18T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a2969bf34e", "title": "Snippet: Getting a dynamically-generated method name on the Java stack using Javassist", "url": "https://ivoanjo.me/blog/2020/07/12/snippet-getting-a-dynamically-generated-method-name-on-the-java-stack-using-javassist/", "published_at": "2020-07-11T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a296bbf125", "title": "Ruby Experiment: Include class names in backtraces", "url": "https://ivoanjo.me/blog/2020/07/05/ruby-experiment-include-class-names-in-backtraces/", "published_at": "2020-07-04T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a297195b88", "title": "Quick tip: Unsafe concurrent Ruby hash access", "url": "https://ivoanjo.me/blog/2019/08/26/quick-tip-unsafe-concurrent-ruby-hash-access/", "published_at": "2019-08-25T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a297d8e143", "title": "Kotlin Hack: Transparently replace class with interface", "url": "https://ivoanjo.me/blog/2019/08/10/kotlin-hack-transparently-replace-class-with-interface/", "published_at": "2019-08-09T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a298b01546", "title": "Kotlin for Rubyists", "url": "https://ivoanjo.me/blog/2019/03/05/kotlin-for-rubyists/", "published_at": "2019-03-05T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a2998dcb34", "title": "Spotting unsafe Ruby patterns - Talk recording", "url": "https://ivoanjo.me/blog/2018/10/13/spotting-unsafe-ruby-patterns/", "published_at": "2018-10-12T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29a171046", "title": "Writing to a Java TreeMap concurrently can lead to an infinite loop during reads", "url": "https://ivoanjo.me/blog/2018/07/21/writing-to-a-java-treemap-concurrently-can-lead-to-an-infinite-loop-during-reads/", "published_at": "2018-07-20T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29b04bb9f", "title": "TIL: Java hides lambda frames in stack traces", "url": "https://ivoanjo.me/blog/2018/06/21/til-java-hides-lambda-frames-in-stack-traces/", "published_at": "2018-06-20T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29b3f922a", "title": "My thoughts on, and how I approach code reviews", "url": "https://ivoanjo.me/blog/2018/04/08/my-thoughts-on-and-how-i-approach-code-reviews/", "published_at": "2018-04-07T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29c38f69e", "title": "Is this ok…​? Or, spotting unsafe concurrent Ruby patterns", "url": "https://ivoanjo.me/blog/2018/01/31/is-this-ok-or-spotting-unsafe-concurrent-ruby-patterns/", "published_at": "2018-01-31T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29cda4740", "title": "Lightning Talk - Warm-Blanket: Goodbye crappy after-boot performance", "url": "https://ivoanjo.me/blog/2018/01/07/lightning-talk-warm-blanket-goodbye-crappy-afterboot-performance/", "published_at": "2018-01-07T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29d10b429", "title": "persistent-πŸ’Ž: a new ruby gem for beautiful immutable data structures", "url": "https://ivoanjo.me/blog/2018/01/03/persistent-for-beautiful-immutable-data-structures/", "published_at": "2018-01-03T00:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29db01dc6", "title": "asciidoc: an awesome markdown alternative", "url": "https://ivoanjo.me/blog/2017/10/22/asciidoc-an-awesome-markdown-alternative/", "published_at": "2017-10-21T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29e3def91", "title": "Why I always use attr_reader to access instance variables", "url": "https://ivoanjo.me/blog/2017/09/20/why-i-always-use-attr_reader-to-access-instance-variables/", "published_at": "2017-09-20T12:46:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a29e4feb78", "title": "Introducing the WarmBlanket gem", "url": "https://ivoanjo.me/blog/2017/08/20/introducing-warm-blanket-gem/", "published_at": "2017-08-20T09:00:57+00:00" }, { "id": "01a08789-1423-729a-9674-99a29ecfb62e", "title": "Ninjas’ guide to getting started with VisualVM", "url": "https://ivoanjo.me/blog/2017/08/12/ninjas-guide-to-visualvm/", "published_at": "2017-08-12T22:44:31+00:00" }, { "id": "01a08789-1423-729a-9674-99a29f8a0a7d", "title": "adopting tls", "url": "https://ivoanjo.me/blog/2017/05/02/moving-to-tls/", "published_at": "2017-05-02T22:01:59+00:00" }, { "id": "01a08789-1423-729a-9674-99a29fbaa730", "title": "rubies: a look at ruby's shiny future", "url": "https://ivoanjo.me/blog/2017/04/17/rubies-a-look-at-rubys-shiny-future/", "published_at": "2017-04-16T23:00:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a2a05c1590", "title": "quickies: heroku exec and deploying jruby", "url": "https://ivoanjo.me/blog/2017/03/19/quickies-heroku-exec-and-jruby-deploy/", "published_at": "2017-03-19T10:23:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a2a0b893d2", "title": "why you should be using jruby in production", "url": "https://ivoanjo.me/blog/2017/03/16/why-you-should-be-using-jruby-in-production/", "published_at": "2017-03-16T00:19:39+00:00" }, { "id": "01a08789-1423-729a-9674-99a2a17003e6", "title": "benchmarking jruby invokedynamic with a production application", "url": "https://ivoanjo.me/blog/2017/01/29/benchmarking-jruby-invokedynamic/", "published_at": "2017-01-29T22:55:02+00:00" }, { "id": "01a08789-1423-729a-9674-99a2a1c9b784", "title": "pry-debugger-jruby gem now on rubygems!", "url": "https://ivoanjo.me/blog/2016/12/02/pry-debugger-jruby-gem-now-on-rubygems/", "published_at": "2016-12-02T09:14:32+00:00" }, { "id": "01a08789-1423-729a-9674-99a2a21ae71d", "title": "weekend hacking: enviado gem", "url": "https://ivoanjo.me/blog/2016/11/22/weekend-hacking-enviado-gem/", "published_at": "2016-11-22T09:03:57+00:00" }, { "id": "01a08789-1423-729a-9674-99a2a29ff0e3", "title": "jruby's Charles Nutter on the jvm as a language platform", "url": "https://ivoanjo.me/blog/2016/11/15/jrubys-charles-nutter-on-the-jvm-as-a-language-platform/", "published_at": "2016-11-15T19:45:00+00:00" }, { "id": "01a08789-1423-729a-9674-99a2a37d38ee", "title": "peek and pick at mri's heap, part 2", "url": "https://ivoanjo.me/blog/2016/11/13/peek-and-pick-at-mris-heap-part2/", "published_at": "2016-11-13T19:47:44+00:00" }, { "id": "01a08789-1423-729a-9674-99a2a37e3954", "title": "finding dead ruby code with debride", "url": "https://ivoanjo.me/blog/2016/10/29/finding-dead-ruby-code-with-debride/", "published_at": "2016-10-29T12:25:42+00:00" }, { "id": "01a08789-1423-729a-9674-99a2a411c74f", "title": "psa: you can now debug with pry on jruby", "url": "https://ivoanjo.me/blog/2016/10/12/psa-you-can-now-debug-with-pry-on-jruby/", "published_at": "2016-10-12T21:05:41+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752e9a672b7", "title": "peek and pick at mri's heap, part 1", "url": "https://ivoanjo.me/blog/2016/10/10/peek-and-pick-at-mris-heap/", "published_at": "2016-10-10T21:20:28+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752e9fd42ca", "title": "why you should regenerate your spec_helper", "url": "https://ivoanjo.me/blog/2016/09/25/why-you-should-regenerate-your-spec-helper/", "published_at": "2016-09-25T13:32:23+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752ea517ce5", "title": "explaining git", "url": "https://ivoanjo.me/blog/2016/09/03/explaining-git/", "published_at": "2016-09-03T18:44:15+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752ea5dd07c", "title": "another round of jruby goodness", "url": "https://ivoanjo.me/blog/2016/07/17/another-round-of-jruby-goodness/", "published_at": "2016-07-17T16:36:10+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752eab0df5d", "title": "down the jruby rabbit hole", "url": "https://ivoanjo.me/blog/2016/07/16/down-the-jruby-rabbit-hole/", "published_at": "2016-07-16T21:24:51+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752eba903ef", "title": "did_you_know.ruby?", "url": "https://ivoanjo.me/blog/2016/05/14/did-you-know-ruby/", "published_at": "2016-05-14T16:16:00+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752ec9f3623", "title": "asciinema: shell recording done right!", "url": "https://ivoanjo.me/blog/2015/12/01/asciinema-shell-recording-done-right/", "published_at": "2015-12-01T22:19:07+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752ed14dd93", "title": "Whoa! Java has a REPL now!", "url": "https://ivoanjo.me/blog/2015/11/28/whoa-java-has-a-repl-now/", "published_at": "2015-11-28T22:32:59+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752eda6636a", "title": "Ruby meets weak memory models", "url": "https://ivoanjo.me/blog/2015/11/28/ruby-meets-weak-memory-models/", "published_at": "2015-11-28T20:14:23+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752edc622e7", "title": "Ruby features i'm looking forward to", "url": "https://ivoanjo.me/blog/2015/11/13/ruby-features-im-looking-forward-to/", "published_at": "2015-11-13T00:03:33+00:00" }, { "id": "01a08789-1424-70b8-9c47-3752ee710ad3", "title": "starting a new blog", "url": "https://ivoanjo.me/blog/2015/11/03/starting-a-new-blog/", "published_at": "2015-11-03T21:58:49+00:00" } ] posts Claim your blog
Back to ivoanjo.me
Blog Β· corpus.blog/blogs/ivoanjo.me/posts

ivoanjo.me

ivoanjo.me

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015