RSSAmplifier

Blog

blog of Marian Posăceanu - rubyist most of the time

marianposaceanu.comRSS feed ↗46 posts

Latest posts

PRs are dead, long live PRs?

Pull requests are an important part of programming culture. They serve multiple purposes and vary across teams, organisations and even technologies. In essence, they reflect how a team constantly evolves, both through its individual members and its code. They can be used to teach, fix bugs, refactor code, spark new ideas and even make friends through open source. The question is: how will they…

Semantic search in Rails using sqlite-vec, Kamal and Docker

I’ve been reading a lot about search lately: kNN, BM25, RRF and related ideas, both within Elasticsearch and in isolation. With the advent of LLMs, especially open-weight models, plus modern hardware, it feels like a good time to approach some of this in a pragmatic way. On the blog I'm already using a form of BM25 via SQLite’s FTS5 extension , which enables full-text search, similar to the…

Kamal, Rails deployments, and Rega turntables

Lately I've started to put my turntable back into working order. It's been disconnected from my main audio chain for about five years. The TT is a Rega RP3 with a bog-standard Rega Carbon cartridge. Why now one might ask? It wasn't my top priority and streaming Spotify to the WiiM Mini then via a DAC directly into my NAD power amplifier was good enough. Yet, I started missing my records. I mean I…

The analogue programmer in the land of LLMs

It's been a while since I've posted, for obvious reasons a lot has changed in the realm of programming. LLMs, "agentic" coding et al. I've started using them almost from day one, when they were pretty bad and they could barely generate some readable text in their images. When it comes to coding, being in my late 30s, I'm clearly what I'd call an "old-school" programmer: I'm using vim with a couple…

Moving from iTerm2 to Kitty for simplicity and performance

I love iTerm2, but it can be sluggish sometimes on my old late 2016 MacBook Pro. Plus, many of its features I never use. I had tried Alacritty before, but making it look and act like iTerm2 was a no-go. This time, I tried Kitty, and within two hours of work, it looked and behaved just like my iTerm2 configuration. This exploration was fueled by a performance comparison I came across that piqued my…

Ruby meets LISP: Unveiling alien tech at Friendly.rb's lightning talk

Originally published after the 2023 Friendly.rb conference in Romania, this is an archival account of that talk. At the Friendly.rb conference in Romania, I explored an experimental blend of Ruby and the Lisp family, implemented here through Clojure. This journey was more about embracing the spirit of experimentation intrinsic to Ruby, rather than direct comparison. A big shoutout to Jakob , whose…

The half-life of a programmer

Half-life (t1/2) is the amount of time required for the amount of something to fall to half its initial value. The term is very commonly used in nuclear physics to describe how quickly unstable atoms undergo radioactive decay, but it is also used more generally for discussing any type of exponential decay. I had this almost random idea of when a programmer hits his or her career half-life .…

Using Firebug as a scalpel, yet not for web development

Historical and safety note (2026): Firebug reached end of life; its functionality moved into Firefox’s built-in Developer Tools. Adobe ended Flash Player support on December 31, 2020, and Flash is unsafe to install. Deleting a DOM node in Developer Tools is temporary and local: it does not change the server, undo requests already made, or provide persistent content blocking. Current status…

Tomorrow is the first day of How to web 2010, this should be fun

Archive note (2026): The conference URL and discussion refer to the 2010 event. HTML5 was unfinished then; W3C published HTML5 as a Recommendation in 2014, and HTML is now maintained as a Living Standard by WHATWG. Current context How to Web · HTML Living Standard Just got to Bucharest, tomorrow I’ll be at How to Web 2010 . Hope it’s going to be good, the presentations look juicy. I hope I’ll meet…

The inherent entropy in our lives: to resist or to...

Editor’s note (2026): This essay uses information-theory entropy as a metaphor for uncertainty in life; it does not claim that the mathematical definition directly models a human life. The Forge38 and Twitter URLs below are retained as archival provenance and may no longer resolve. Background A Mathematical Theory of Communication · Information — Stanford Encyclopedia of Philosophy I’ve started…

The frontend backend debacle

Editor’s note (2026): This is a strongly worded 2010 opinion, not hiring or accessibility guidance. Modern web work includes both deep specializations and generalist roles; basic HTML and CSS syntax can be approachable, while production UI work also carries substantial accessibility and standards obligations. Current standard Web Content Accessibility Guidelines (WCAG) 2.2 I’m really starting to…

Shedding some light into UUID version 4 in Ruby and Rails

Ruby's standard library and Rails's PostgreSQL adapter use by default version 4 UUIDs. This could be changed in Rails migrations via: Archive note (2015; updated context 2024): These excerpts describe Rails 4.2-era behavior, not current defaults. RFC 4122 was obsoleted by RFC 9562 in May 2024; UUIDv4 has 122 random bits and implementations should use a CSPRNG. UUIDs are identifiers, not…

Ruby 2.2.0 Preview 1 quick Rails benchmarks

Great news everyone! Ruby 2.2 preview 1 has been released ! I'm really curious about the Incremental GC and Symbol GC so let's run some quick Rails benchmarks on a normal Rails API app. Archive note (2014): Ruby 2.2.0-preview1 was prerelease software and must not be used now. Ruby 2.2 reached end of life on 31 March 2018; Rails 4.0.x and the tested stack are unsupported. These are single 20-second…

Programatica 2010 after thoughts

Editor’s note (2026): This is a contemporaneous conference report from 2010. Product names, prices, hosting sites, terminology, and feature comparisons below describe that moment and are not current purchasing guidance. Java EE later became Jakarta EE. CodePlex—not SourceForge—was Microsoft’s separate forge, and Microsoft shut it down in 2017. The Azure prices and limits are preserved only as…

On zygohistomorphic prepromorphisms

There are words in programming that look like jokes. Zygohistomorphic prepromorphism is one of them. The first time you encounter it, you assume one of two things must have happened. Either someone lost a bet, or category theorists were left unsupervised for too long. Both explanations feel plausible. And yet the term survived. It appears in libraries. It appears on the Haskell wiki. People…

On writing artisanal code

Every artisan at a certain point in time just stops and starts thinking about the inner workings of his craft. He ponders on the whole process from the outside while trying to make connections between apparently dissimilar entities that his craft is made of. One might argue that this is a purely subjective endeavor: well, without any formal applicable theories it certainly is! Yet this doesn’t…

On unnamed abstracts, entities and happiness

Editor’s note (2026): The first definition link is no longer a dependable source. The quotation is a broad summary of classical utilitarianism, not a definition shared by every utilitarian theory. “All abstractions are leaky” also echoes Joel Spolsky’s 2002 Law of Leaky Abstractions. Further context Utilitarianism — Stanford Encyclopedia of Philosophy · The Law of Leaky Abstractions When I look…

On semantic Ruby block constructs

I was cruising around my Github notifications and I found an interesting open issue created by Jim Weirich : “The Semantic Rule for { } vs. do/end” in the Ruby style guide repository . The semantic rule The semantic rule says use { } for blocks where the primary purpose of the block is to return a value, use do/end for blocks where the primary purpose of the block is to execute side effects. The…

On Ruby modules and concerns

Modules are useful for highly specialized code that can be injected into other classes for fun and profit or for creating namespaces. An interesting approach is to use modules as an alternative to classical inheritance (without the usual trade-offs) : the core idea is to share an abstracted role that can be included in a set of different classes. Roles and modules One should start with the…

On Ruby 2.0 memory usage, Unicorn and Heroku

On UNIX-like operating systems (e.g. Linux) there's the concept of process forking via the fork() system call. When one calls fork from a parent-process it will spawn a new child-process - that is a copy of its parent, then both processes return from fork. The child-process has an exact copy of the parent's memory in a separate address space. Due to this clearly not being efficient, UNIX…

On font rendering consistency across browsers

Back in the day (i.e. when Firefox's version was a single digit) font rendering was at its best on Mozilla's browser. I remember comparing Firefox's anti-aliasing to the new-kid-on-the-block Chrome : the difference was huge. Time went by and we all know what happened : most web developers found themselves using Chrome as their main browser for doing their work and this is exactly what happened to…

Is Rubinius 2.2.3 production ready ?

Ruby 2.1 was released this Christmas, great news everyone! It sports a better GC (RGenGC — generational GC), hierarchical method caching, some small syntax changes and non-experimental refinements. All in all one can expect 5% to 15% performance increase which is quite awesome. Archive note (2014): Rubinius 2.2.3, JRuby 1.7.9, Ruby 2.1.0, Rails 4.0.2, and these server configurations are…

Installing a rails mysql stack on my laptop was a bit tricky

Historical instructions (2010)—do not follow on a current machine. Ruby 1.8/1.9 and Rails 2.3/3 are unsupported and lack current security fixes. Manually copying DLLs into runtime directories is unsafe and brittle. The commands below are retained only as a record of the old environment; use supported Ruby/Rails versions and current installation documentation instead. Current guidance Rails…

Improve Rails performance by adding a few gems

After working with Rails for some time, you start nitpicking about how to improve it. This is the first in a series of articles on how to improve (even marginally) Rails's performance. Archive note (2014): This is Rails 4.1-era advice. Do not copy these dependencies, native extensions, or global monkey patches into a current app without compatibility, maintenance, security, and workload review.…

How to Web conference, random thoughts, mostly live - five years later

Almost five years since the last post about How to Web [0] - wow, that's a large slice of the space-time continuum. I recall I almost started this blog for stuff like this, good memories [1]. Archive note (2015): This is a contemporaneous conference diary; links, organizations, and social-media handles are preserved as they were referenced at publication. Half a decade later, what's changed, one…

How to Web Conference, random thoughts, mostly live

Archive note (2026): The opening paragraph contains the corrupt fragment I’vevolatile and utopic place most of the time. ; it cannot be reconstructed safely and is left untouched pending an original source or backup. Sadly, today I’ve arrived a bit late, where "a bit" means a lot; I’vevolatile and utopic place most of the time. In very few domains you can take an idea and with small or no…

How to reduce the size of your VMs

As the host OS I use Windows 8 (just upgraded to 8.1), Well, why, one might ask? It is rather simple: Steam and after some dreadful searching and configuring tools I managed to install the basics for writing and deploying code: Vim, Git, PuTTy and a decent console replacement like Console2 [0]. Of course those aren't enough as 80% of my coding is *nix dependent and I wouldn't run it on anything…

How I speeded up my browsing experience by a really nice margin

Historical Windows/Firefox optimization (2010)—do not move a current browser profile using these instructions. RAM disks are volatile, so data disappears on shutdown or a crash. Moving the wrong profile path can lose history, sessions, cookies, or other user data. Back up the profile and treat this only as a dated account of moving disposable cache data; modern browser and storage behavior differs…

Chunked transfer encoding in Rails (streaming)

Anyone who has written a little PHP knows what the flush() family of functions do. The ideal usage scenario for using chunked transfer[0] is when we have something costly to render e.g. the first three most recent articles on a blog. Why, one might ask? Why stream It is rather simple: in a normal Rails render, the server finishes producing the response before sending the body; that delays the…

Buzzwords and manifestos

Editor’s note (2026): Here “NLP” refers to neuro-linguistic programming, not natural-language processing. Evidence reviews have found little support for claimed health outcomes. The HTTP-era links below may now be unavailable or changed. Source context Archived NHS introduction Do we really need them? I mean sometimes I ask myself what’s the point of all the so-called ways to get things done or…

Building a small blog cms in rails

Editor’s note (2026): This is a 2010 architectural sketch, not a current Rails security tutorial. RBAC is not inherently required for a single-author blog, production is not a substitute for automated or staging security tests, and authorization should fail closed under a current threat model. Current guidance Securing Rails Applications · CMS glossary Yes, building a blog CMS in Rails is…

A few words on frontend performance optimizations

Editor’s note (2026): This describes a 2010 jQuery and script-loader setup. RequireJS and LABjs are historical tools, and the performance result is anecdotal because the promised graphs and test method are absent. Third-party CDN scripts also introduce availability, privacy, and supply-chain considerations. Current measurement and security context User-centric performance metrics · Subresource…

Using RVM for quite some time? You should clean it up a bit

I can't even remember the last time I ran rvm implode , I'd reckon I've been using RVM for about three years. Sure: I always update it via rvm get stable but I never really clean up old Rubies or gems, I only run bundle clean --force in each repository from time to time since I don't always use bundle exec . In any case, time to see how much space it eats up on macOS via rvm disk-usage all :…

Tips: macOS save screenshots as JPEG in a different location

I'm not really sure why taking screenshots in macOS defaults to PNG file format. I just googled this and the "answer" was: MacOS captures screenshots using PNG as the default image format, which provides lossless compression and preserves image quality while creating relatively small files. OK - I can understand somewhat the logic behind this - "we're a premium brand, even the screenshots should…

The perils of writing request specs using concurrent-ruby under the JVM

This article describes a 2017 JRuby, concurrent-ruby, and RSpec setup. Current APIs, integrations, and behavior may differ, so the workaround below should be read as historical rather than current guidance. When I write an API, though I'm not a hard core TDD practitioner, I do like writing specs - especially request specs that test the whole stack. Adding them into an API is fast and yields quite…

Programming archaeology: PHP's dollar sigil

I started out with Java as my professional language and before I discovered Ruby, PHP was my main programming language of choice for new projects. This was probably six to seven years ago or more. I had some pretty good times with CodeIgniter [0] and various libraries like HHMVC [1]. In any case, I digress - even back then the most striking feature of its syntax was the dollar sign prepended to…

Multiple data stores and eventual consistency using micro-services

There are cases where ownership of the data consumed by a fleet of microservices is distributed across several systems of record. Derived data is then scattered across multiple storage solutions, each designed to solve a specific problem using a subset of it. It may be mirrored and synchronized into a specific format (consider a graph database), or enriched with features that exist only in another…

Making Rails asset pipeline faster

This article reflects the 2016-era Rails asset pipeline—Ruby Sass, libsass, Compass, therubyracer, and Node.js 6—and is not current Rails asset guidance. We all know that for a rather large Rails app with a substantial front end, the asset pre-compilation and more importantly - development mode changes are far from instantaneous. The front-end we're referring to is the kind that makes heavy use of…

macOS Sierra upgrade from a developer's perspective

Historical note: these are macOS Sierra 10.12-era procedures. SIP paths, Karabiner, Notes, and photoanalysisd behavior may differ on current macOS releases. Most developers (myself included) usually wait for the point one release of the next major macOS upgrade. This is mostly in order so that all the related tools/applications maintainers will have time to upgrade and iron out their bugs/issues…

Keep your Rails logs free of unwanted noise

I like to use Rollbar 's default plan for small apps or prototypes that are works in progress. Getting production exceptions in my inbox can be quite useful but most of them are actually 404s - sure there are a multitude of ways for filtering out the noise ( Fail2Ban , hand-written iptables rules , etc.) Historical note: these examples reflect an older Rails and Ubuntu 14.04-era deployment, so…

JRuby, RVM and Vim walk into a (performance) bar

I'm not sure why RVM is still my default Ruby version manager, but the issue at hand should be reproducible on rbenv too. Historical note: this article reflects a Vim 8.0, JRuby, RVM, and macOS system Ruby setup from 2017; versions and defaults differ on current macOS systems. Let's add a bit of context to this: we have an API written in Ruby and running on JRuby i.e. via JVM which implies slow…

Interesting links - Is logging a "code smell" ?

I was reading this article , and it raises quite an unexpected question - "Can we consider logging as a code smell"? Clearly - the answer is more nuanced than that and whilst I do enjoy the event bus approach from the article - that seems like overkill for most applications. It's interesting that Aspect Oriented Programming is mentioned but not in a positive light and I resonate with that to a…

How to reduce the size of your VMs (macOS Update)

​ Lately I'm also running macOS virtualized for testing various apps. After some heavy usage the same problem popped up: the .vmdk uses way too much space on my quite small 256GB SSD. Currently is at around 70GB. The process is similar to what I did on Windows and Linux i.e. write a null file that is erased at the end then use the command-line tools to compact the .vmdk and reclaim space (the…

Hierarchy of perceptions

I was thinking of the old conundrum of how we perceive the objective world or reality - it’s always through our limited sensory organs. Then it has to be processed: some small latency in the brain, maybe some evolutionary heuristics, our genetic background, etc. after all this we get a tainted fragment of the world. We know these facts: we aren’t getting a full picture, i.e., our perception is…

Harmonizing Projects: Navigating the Graph of Estimation and Detail

As someone who finds solace in the rich nuances of sound, I often draw parallels to the world of development. Ponder this: Just as the quality of music affects the depths of my appreciation, the broad overview of a project offers a satisfying clarity. Yet, the devil, as they say, is in the details. In much the same way I lose myself in the symphonies of sound, developers often journey through the…

Don’t stress, use the right gear for the job

Whilst I consider myself an audiophile, I also like to think I’m a pragmatist i.e. best of both worlds: don’t go over the top with snake oil gear but at the same time recognise that sound quality plays a pivotal role in how I listen and enjoy music. As developers, we use various ways to relax, in my case music plays a vital role - it decouples me from the “now”, triggers the creation of happy…