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…
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…
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…
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…
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…
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…
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 .…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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 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…
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…
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…
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…
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.…
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…
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…
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…
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…
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…
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…
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…
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…
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 :…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…