<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://blog.siami.fr/</id><title>Adrien Siami</title><subtitle>Software engineer, Ruby, Rails, Web and stuff.</subtitle> <updated>2026-04-15T16:44:42+02:00</updated> <author> <name>Adrien Siami</name> <uri>https://blog.siami.fr/</uri> </author><link rel="self" type="application/atom+xml" href="https://blog.siami.fr/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://blog.siami.fr/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 Adrien Siami </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>Form objects in Rails (and why I built HyperActiveForm)</title><link href="https://blog.siami.fr/form-objects-in-rails-and-hyperactiveform" rel="alternate" type="text/html" title="Form objects in Rails (and why I built HyperActiveForm)" /><published>2026-04-14T00:00:00+02:00</published> <updated>2026-04-14T00:00:00+02:00</updated> <id>https://blog.siami.fr/form-objects-in-rails-and-hyperactiveform</id> <content type="text/html" src="https://blog.siami.fr/form-objects-in-rails-and-hyperactiveform" /> <author> <name>Adrien Siami</name> </author> <category term="Rails" /> <category term="Programming" /> <summary>Rails comes with great tools for building forms. When dealing with a single model, everything works smoothly. But as soon as your form needs to touch multiple models, or to have different validations based on context, it can start to get complicated. In this article we’ll look at the standard Rails approach to forms, some of the pain points we’ve all probably encountered, and how form objects ...</summary> </entry> <entry><title>Smooth UI animations on server-rendered HTML</title><link href="https://blog.siami.fr/smooth-ui-animations-on-server-rendered-html" rel="alternate" type="text/html" title="Smooth UI animations on server-rendered HTML" /><published>2026-03-01T00:00:00+01:00</published> <updated>2026-03-01T00:00:00+01:00</updated> <id>https://blog.siami.fr/smooth-ui-animations-on-server-rendered-html</id> <content type="text/html" src="https://blog.siami.fr/smooth-ui-animations-on-server-rendered-html" /> <author> <name>Adrien Siami</name> </author> <category term="Rails" /> <category term="Web" /> <summary>I’ve been using Hotwire in production since the beta release of Turbo, and it’s changed the way I build web apps. It’s a great way to get SPA-like interactivity at a fraction of the complexity. In this article, we’ll explore how we can use Turbo 8’s morphing, the view transitions API, and a sprinkle of Stimulus to create a smooth, interactive experience with minimal code. We’ll see how these t...</summary> </entry> <entry><title>Launching YAMLFish, a simple translations management tool</title><link href="https://blog.siami.fr/launching-yamlfish-a-simple-translations-management-tool" rel="alternate" type="text/html" title="Launching YAMLFish, a simple translations management tool" /><published>2024-12-16T00:00:00+01:00</published> <updated>2024-12-16T00:00:00+01:00</updated> <id>https://blog.siami.fr/launching-yamlfish-a-simple-translations-management-tool</id> <content type="text/html" src="https://blog.siami.fr/launching-yamlfish-a-simple-translations-management-tool" /> <author> <name>Adrien Siami</name> </author> <category term="Rails" /> <category term="Web" /> <summary>As a software engineer, I’ve always dreaded working with translations. It can get increasingly tricky with the number of locales and parallel features being developed. As a CTO of a small company, when updating the YML files manually didn’t cut it anymore, I looked for a simple tool that would help me manage the translations, that would not cost a fortune. I did not find any that suited my ne...</summary> </entry> <entry><title>Avoid constantize in Rails</title><link href="https://blog.siami.fr/avoid-constantize-in-rails" rel="alternate" type="text/html" title="Avoid constantize in Rails" /><published>2024-11-26T00:00:00+01:00</published> <updated>2024-11-26T00:00:00+01:00</updated> <id>https://blog.siami.fr/avoid-constantize-in-rails</id> <content type="text/html" src="https://blog.siami.fr/avoid-constantize-in-rails" /> <author> <name>Adrien Siami</name> </author> <category term="Rails" /> <category term="Programming" /> <summary>What do you do when you need to instanciate a class in Rails, but its name is dynamic? Let’s say we want to serialize an object for use in an API payload and we have to handle different versions. We could have a MySerializer::V1 and MySerializer::V2 classes. And to instanciate the correct one, we could do something like this: serializer_class = "MySerializer::V#{version}".constantize serial...</summary> </entry> <entry><title>Generate magic tokens in Rails with generates_token_for</title><link href="https://blog.siami.fr/generate-magic-tokens-in-rails" rel="alternate" type="text/html" title="Generate magic tokens in Rails with generates_token_for" /><published>2024-04-28T00:00:00+02:00</published> <updated>2024-04-28T00:00:00+02:00</updated> <id>https://blog.siami.fr/generate-magic-tokens-in-rails</id> <content type="text/html" src="https://blog.siami.fr/generate-magic-tokens-in-rails" /> <author> <name>Adrien Siami</name> </author> <category term="Rails" /> <category term="Programming" /> <summary>For a long time, and probably still today, the reference for authentication in Rails is using a gem like Devise. Thing is, you’ll probably end up customizing it a lot: views, emails, onboarding flow, etc. Since Rails 7.1, we have access to several new features that make it easier to implement authentication with minimal extra code, making it a viable option for many projects. One of these fea...</summary> </entry> </feed>
