<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Franck Verrot</title><link>http://franck.verrot.us/</link><description>Recent content on Franck Verrot</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 31 Mar 2026 12:17:19 -0700</lastBuildDate><atom:link href="http://franck.verrot.us/feed.xml" rel="self" type="application/rss+xml"/><item><title>Fine-Tuning Actually Worked</title><link>http://franck.verrot.us/blog/2026/03/31/fine-tuning-actually-worked/</link><pubDate>Tue, 31 Mar 2026 12:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2026/03/31/fine-tuning-actually-worked/</guid><description>&lt;p&gt;Quick follow-up to the &lt;a href="http://franck.verrot.us/blog/2026/03/23/running-a-0-8b-model-on-an-iphone-to-help-my-kid-pick-a-college/"&gt;college search post&lt;/a&gt;. Last time, I gave up on fine-tuning a generative model and built a DistilBERT classifier instead. The classifier works great (100% precision, 100% recall), but I always had this nagging feeling that fine-tuning should have worked if I&amp;rsquo;d found the right model and the right tooling.&lt;/p&gt;
&lt;p&gt;Today Liquid AI released &lt;a href="https://www.liquid.ai/blog/lfm2-5-350m-no-size-left-behind"&gt;LFM2.5-350M&lt;/a&gt;, and it changes the picture.&lt;/p&gt;</description></item><item><title>Running a 0.8B Model on an iPhone to Help My Kid Pick a College</title><link>http://franck.verrot.us/blog/2026/03/23/running-a-0-8b-model-on-an-iphone-to-help-my-kid-pick-a-college/</link><pubDate>Mon, 23 Mar 2026 12:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2026/03/23/running-a-0-8b-model-on-an-iphone-to-help-my-kid-pick-a-college/</guid><description>&lt;p&gt;College search is a 10-dimensional optimization problem that families solve with spreadsheets, gut feelings, and way too many browser tabs.&lt;/p&gt;
&lt;p&gt;My kid wants to study biology, play D1 soccer, and ideally not pay more than $40K/year. Oh, and not biomedical, just bio. That&amp;rsquo;s four constraints already. Add in state preferences, school size, acceptance rates, graduation rates, application systems (Common App? ApplyTexas? UC?), and now you&amp;rsquo;re juggling variables that don&amp;rsquo;t fit in your head.&lt;/p&gt;</description></item><item><title>Build vs. Buy Your Software Factory: an 8090 Review</title><link>http://franck.verrot.us/blog/2026/03/22/build-vs-buy-your-software-factory-an-8090-review/</link><pubDate>Sun, 22 Mar 2026 11:13:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2026/03/22/build-vs-buy-your-software-factory-an-8090-review/</guid><description>&lt;p&gt;&lt;em&gt;Originally posted as a &lt;a href="https://x.com/franckverrot/status/2035781987630539064"&gt;thread on X&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I was reading that 8090 just landed a partnership with EY last week, and this got me interested in test-driving it. Most of the coverage out there focuses on enterprise usage, I wanted to know if it could help me on an open source project (no budget, PMs, just me/Claude/my repos.) And if this is good for thousands of consultants, maybe it could also be good for the day job.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll start by saying that I liked the pitch: the bottleneck in (a lot of, not all obviously) software is deciding what to build, not writing the code. 8090 wants to be the single source of truth that connects product decisions to engineering execution: a gap that&amp;rsquo;s more or less narrow in various companies, and that doesn&amp;rsquo;t exist in side projects (where I&amp;rsquo;m the CEO/CFO/engineer/QA/product marketing person all at once.)&lt;/p&gt;</description></item><item><title>Moving to Hugo</title><link>http://franck.verrot.us/blog/2026/03/22/moving-to-hugo/</link><pubDate>Sun, 22 Mar 2026 19:53:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2026/03/22/moving-to-hugo/</guid><description>&lt;p&gt;This blog has been running Jekyll since 2014. It served me well for years, but the theme was showing its age, the tooling felt stuck, and I wanted something faster and more modern. So I migrated to Hugo. One theme per decade I guess.&lt;/p&gt;</description></item><item><title>AI Agents as Programs, Not Just Prompts</title><link>http://franck.verrot.us/blog/2026/03/19/ai-agents-as-programs-not-just-prompts/</link><pubDate>Thu, 19 Mar 2026 01:48:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2026/03/19/ai-agents-as-programs-not-just-prompts/</guid><description>&lt;p&gt;&lt;em&gt;Originally posted as a &lt;a href="https://x.com/franckverrot/status/2034552496652538359"&gt;thread on X&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been building AI agents for a while now and I&amp;rsquo;m a bit puzzled about where the industry is going.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re writing the most autonomous software we&amp;rsquo;ve ever built, but the tools we use to build them are a mess. Python script calling APIs, state scattered everywhere, YAML configs, framework-of-the-week. It works until it doesn&amp;rsquo;t, and then you&amp;rsquo;re debugging at 2am because some MCP gateway is stuck as some tool or API changed shape and nothing caught it.&lt;/p&gt;</description></item><item><title>Running Graphical Apps in Apple's Container Tool</title><link>http://franck.verrot.us/blog/2026/03/15/running-graphical-apps-in-apples-container-tool/</link><pubDate>Sun, 15 Mar 2026 14:09:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2026/03/15/running-graphical-apps-in-apples-container-tool/</guid><description>&lt;p&gt;&lt;em&gt;Originally posted as a &lt;a href="https://x.com/franckverrot/status/2033289557333172621"&gt;thread on X&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m building an agentic harness modeled on Elm&amp;rsquo;s architecture: a strict functional pipeline where untrusted agent code runs in total isolation. Containers felt like the natural security boundary. Apple&amp;rsquo;s open-source container tool seemed like the ideal foundation. Building and running containers is dead simple (&lt;code&gt;container build . -t my-image&lt;/code&gt;, &lt;code&gt;container run -it my-image&lt;/code&gt;), but I still spent a chunk of my weekend (re-)discovering what breaks when you try to get graphical output across a real VM boundary on macOS.&lt;/p&gt;</description></item><item><title>Types in Ruby</title><link>http://franck.verrot.us/blog/2019/04/20/types-in-ruby/</link><pubDate>Sat, 20 Apr 2019 10:24:04 +0000</pubDate><guid>http://franck.verrot.us/blog/2019/04/20/types-in-ruby/</guid><description>&lt;p&gt;Quick thoughts on &lt;a href="https://sorbet.org/docs/adopting"&gt;Sorbet&lt;/a&gt;, that has been announced at &lt;a href="https://rubykaigi.org/2018"&gt;RubyKaigi
2018&lt;/a&gt; and once again in the &lt;a href="https://rubykaigi.org/2019"&gt;2019 edition&lt;/a&gt;, the type-checker
for Ruby.&lt;/p&gt;</description></item><item><title>Request Routing with Nomad and Consul</title><link>http://franck.verrot.us/blog/2019/03/16/request-routing-with-nomad-and-consul/</link><pubDate>Sat, 16 Mar 2019 11:20:16 +0000</pubDate><guid>http://franck.verrot.us/blog/2019/03/16/request-routing-with-nomad-and-consul/</guid><description>&lt;p&gt;Request Routing in the scheduler/container world is an ongoing challenge,
with a lot of different and competing solutions that tries to provide a solution.&lt;/p&gt;
&lt;p&gt;Some solutions are built on top of others, some only support specific
schedulers, some operate only at the &lt;a href="https://en.wikipedia.org/wiki/OSI_model#Layer_7:_Application_Layer"&gt;L7&lt;/a&gt; layer, which doesn&amp;rsquo;t make
things easy for Platform Engineers when it comes to adopting a specific
solution.&lt;/p&gt;
&lt;p&gt;Building and operating Nomad/Consul clusters with the Platform Engineering
Team at &amp;lt;&amp;lt;work&amp;gt;&amp;gt; has been an interesting problem to solve. We
explored a few different solutions, and as we evolve in a highly-regulated
world (we must implement HIPAA, SOC2 Type II, and HiTrust), solutions that
weren&amp;rsquo;t providing basic security (TLS everywhere, poor auditing, etc.)
haven&amp;rsquo;t been considered.&lt;/p&gt;</description></item><item><title>Introducing Terraform Stripe Provider</title><link>http://franck.verrot.us/blog/2019/02/25/introducing-terraform-stripe-provider/</link><pubDate>Mon, 25 Feb 2019 18:32:33 +0000</pubDate><guid>http://franck.verrot.us/blog/2019/02/25/introducing-terraform-stripe-provider/</guid><description>&lt;p&gt;I build products regularly, most of them don&amp;rsquo;t survive their prototype phases. In 2018, I built:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a (fast) FaaS with v8 and mruby&lt;/li&gt;
&lt;li&gt;a cryptocurrency exchange prototype&lt;/li&gt;
&lt;li&gt;a programmable cryptocurrency trading platform&lt;/li&gt;
&lt;li&gt;some more stealth projects&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(As an aside, my Open Source work isn&amp;rsquo;t included in this list as I considered it as a &amp;ldquo;horizontal&amp;rdquo; supporting these projects, but I&amp;rsquo;m more and more seduced by the idea of Open Source as a lifestyle business way of living, which I will try to explore in 2019.)&lt;/p&gt;
&lt;p&gt;I often go as far as setting up Stripe integrations to get the pricing plans in there, but I felt it was too tedious to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create an account for that new prototype&lt;/li&gt;
&lt;li&gt;Set up the prices in a spreadsheet, and reflect them there&lt;/li&gt;
&lt;li&gt;Keeping them aligned with my app&amp;rsquo;s code and Stripe&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So in order to automate Stripe&amp;rsquo;s setup I created a Terraform provider for Stripe. Billing as Code is great!&lt;/p&gt;</description></item><item><title>Introducing Trek</title><link>http://franck.verrot.us/blog/2019/01/21/introducing-trek/</link><pubDate>Mon, 21 Jan 2019 21:02:12 +0000</pubDate><guid>http://franck.verrot.us/blog/2019/01/21/introducing-trek/</guid><description>&lt;p&gt;Having spent a lot of time working with the Hashicorp stack lately,
I have been working a lot with the HashiCorp stack lately, mostly with
Consul, Nomad, and soon Vault. Even if I was more used to operating
Kubernetes, I really appreciate the simplicity and focus that HashiCorp
builds into its products.&lt;/p&gt;
&lt;p&gt;I also spend a lot of time in the console (mix of tmux, vim – or Visual Studio Code when pairing with people – and other CLI tools), so I wanted to find a tool that would keep me in the shell, and I eventually released it. Today, I&amp;rsquo;d like to introduce you to &lt;a href="https://github.com/franckverrot/trek"&gt;Trek&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Happy New Year!</title><link>http://franck.verrot.us/blog/2019/01/01/happy-new-year/</link><pubDate>Tue, 01 Jan 2019 16:22:45 +0000</pubDate><guid>http://franck.verrot.us/blog/2019/01/01/happy-new-year/</guid><description>&lt;p&gt;Happy New Year!&lt;/p&gt;
&lt;p&gt;I will try to write a little more on this blog in 2019. Mostly about
programming, but also as a way to use social media less and express thoughts
in more than a few lines.&lt;/p&gt;
&lt;p&gt;May 2019 be great for you, spending time on this shiny blog.&lt;/p&gt;
&lt;p&gt;Franck&lt;/p&gt;</description></item><item><title>Looking forward to Ruby's future</title><link>http://franck.verrot.us/blog/2018/12/31/looking-forward-to-ruby-s-future/</link><pubDate>Mon, 31 Dec 2018 22:45:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2018/12/31/looking-forward-to-ruby-s-future/</guid><description>&lt;p&gt;Ruby became a more stable and mature language over the years. Some would say
innovation slowed down (and I was probably one of them), but I still
appreciate writing Ruby on a daily basis on the job. In this blog post I will
succinctly explain why Ruby is still a valid choice for writing new
(web and non-web) applications, the challenges of maintaining large code
bases and what I look forward in the coming years.&lt;/p&gt;</description></item><item><title>Benchmarking Ruby's `method_missing` vs `define_method`</title><link>http://franck.verrot.us/blog/2015/07/21/benchmarking-ruby-method-missing-and-define-method/</link><pubDate>Sun, 12 Jul 2015 23:45:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2015/07/21/benchmarking-ruby-method-missing-and-define-method/</guid><description>&lt;p&gt;After recently &lt;a href="http://franck.verrot.fr/blog/2015/07/12/benchmarking-postgresql-select-query-planning-and-performance-on-columns-aggregates/"&gt;benchmarking &lt;code&gt;PostgreSQL&lt;/code&gt;&lt;/a&gt; to find out if some
of the techniques we used were efficient, I decided to look at the usage of a
controversed Ruby feature: &lt;code&gt;method_missing&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Benchmarking PostgreSQL's SELECT Query Planning and Performance on Columns Aggregates</title><link>http://franck.verrot.us/blog/2015/07/12/benchmarking-postgresql-select-query-planning-and-performance-on-columns-aggregates/</link><pubDate>Sun, 12 Jul 2015 22:50:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2015/07/12/benchmarking-postgresql-select-query-planning-and-performance-on-columns-aggregates/</guid><description>&lt;p&gt;Executing &lt;em&gt;a single query&lt;/em&gt; doesn’t always literally mean &lt;em&gt;executing exactly ONE query&lt;/em&gt;. Sometimes PostgreSQL (like any other relation database) will have to extract parts of your query (subqueries) and re-execute it as many times as needed to generate the results you are expecting it to generate. This article shows how &lt;code&gt;N+1&lt;/code&gt; issues can also happen without an explicit intent to produce them.&lt;/p&gt;</description></item><item><title>Hijacking gem commands</title><link>http://franck.verrot.us/blog/2015/04/21/hijacking-gem-commands/</link><pubDate>Tue, 21 Apr 2015 08:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2015/04/21/hijacking-gem-commands/</guid><description>&lt;p&gt;Rubygems has been made extensible by the usage of plugins. Any gem that provides a &lt;code&gt;lib/rubygems_plugin.rb&lt;/code&gt; file
will be discovered by the &lt;code&gt;gem&lt;/code&gt; infrastructure, whether it is loaded by your application or not.&lt;/p&gt;
&lt;p&gt;Adding new commands is fairly easy, here&amp;rsquo;s how we could replace existing ones (like &lt;code&gt;install&lt;/code&gt;), using only
Rubygems&amp;rsquo; public API.&lt;/p&gt;</description></item><item><title>Moving back to Jekyll</title><link>http://franck.verrot.us/blog/2014/09/28/moving-back-to-jekyll/</link><pubDate>Sun, 28 Sep 2014 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2014/09/28/moving-back-to-jekyll/</guid><description>&lt;p&gt;This blog used to run &lt;a href="octopress.org"&gt;Octopress&lt;/a&gt; and I blame myself for not
updating it as much as it should have been updated.&lt;/p&gt;
&lt;p&gt;From now on, I&amp;rsquo;ll try using a basic Jekyll/GH Pages setup. Permalinks
have been preserved, so I believe it can&amp;rsquo;t be a bad move anyway.&lt;/p&gt;
&lt;p&gt;As usual, finding subjects is going to be the tricky part, but I have
some topics I always wanted to cover. So&amp;hellip; stay tuned? :-)&lt;/p&gt;</description></item><item><title>Method definitions in Ruby 2.1.0 will not be void anymore</title><link>http://franck.verrot.us/blog/2013/08/21/method-definitions-in-ruby-2-1-0-will-not-be-void-anymore/</link><pubDate>Wed, 21 Aug 2013 08:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2013/08/21/method-definitions-in-ruby-2-1-0-will-not-be-void-anymore/</guid><description>&lt;p&gt;Ruby 2.1.0 will be released at the end of the year and among other features, a change done in the parser caught my eyes&amp;hellip;&lt;/p&gt;</description></item><item><title>New username</title><link>http://franck.verrot.us/blog/2012/07/08/new-username/</link><pubDate>Sun, 08 Jul 2012 22:37:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2012/07/08/new-username/</guid><description>&lt;p&gt;A couple of days ago I&amp;rsquo;ve decided to drop my old username &lt;code&gt;CesarioGW&lt;/code&gt; to become &lt;code&gt;franckverrot&lt;/code&gt;.
My &lt;a href="http://github.com/franckverrot"&gt;GitHub&lt;/a&gt; and &lt;a href="http://twitter.com/franckverrot"&gt;Twitter&lt;/a&gt; accounts have been renamed. I will slowly take care of the remaining accounts.&lt;/p&gt;</description></item><item><title>Pitch, Business Model, People: my wrap up of the 3rd Startup Weekend Lyon</title><link>http://franck.verrot.us/blog/2012/04/21/pitch--business-model--people--my-wrap-up-of-the-3rd-startup-weekend-lyon/</link><pubDate>Sat, 21 Apr 2012 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2012/04/21/pitch--business-model--people--my-wrap-up-of-the-3rd-startup-weekend-lyon/</guid><description>&lt;p&gt;Last weekend I had my first Startup Weekend experience. I must admit I have always been skeptical about
this kind of events and came with two goals in mind: try to change my mind about it &lt;strong&gt;and&lt;/strong&gt; pitch some idea
I had in the back of my head for a little while.&lt;/p&gt;</description></item><item><title>ActiveValidators 1.9.0</title><link>http://franck.verrot.us/blog/2012/04/07/activevalidators-190/</link><pubDate>Sat, 07 Apr 2012 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2012/04/07/activevalidators-190/</guid><description>&lt;p&gt;ActiveValidators 1.9.0 is out!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;activevalidators&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Read on for the full - yet concise - changelog.&lt;/p&gt;</description></item><item><title>What is the best way to pass NSManagedObjectContext around in iOS applications?</title><link>http://franck.verrot.us/blog/2012/01/18/best-way-to-pass-nsmanagedobjectcontext-around-in-ios-applications/</link><pubDate>Wed, 18 Jan 2012 00:09:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2012/01/18/best-way-to-pass-nsmanagedobjectcontext-around-in-ios-applications/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;
Passing an &lt;code&gt;NSManagedObjectContext&lt;/code&gt; in each and every &lt;code&gt;NSViewController&lt;/code&gt; that
needs CoreData can be done by different means, but some are frowned upon. In doubt, inject it.&lt;/p&gt;
&lt;p&gt;While pair-reviewing some code with my colleague &lt;a href="http://www.vtourraine.net/blog/"&gt;Vincent Tourraine&lt;/a&gt;,
we realized we wrote this kind of code into each &lt;code&gt;viewDidLoad:&lt;/code&gt; method of each &lt;code&gt;NSViewController&lt;/code&gt; subclasses we created:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-objc" data-lang="objc"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;managedObjectContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[[&lt;/span&gt;&lt;span class="n"&gt;UIApplication&lt;/span&gt; &lt;span class="n"&gt;sharedApplication&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;delegate&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;managedObjectContext&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Doing so is more or less the same as using a global variable, as calling &lt;code&gt;sharedApplication&lt;/code&gt; on &lt;code&gt;UIApplication&lt;/code&gt; returns the singleton
application instance. I kind of felt this was a code smell so I investigated.&lt;/p&gt;</description></item><item><title>ActiveValidators 1.3.0</title><link>http://franck.verrot.us/blog/2011/03/20/activevalidators-130/</link><pubDate>Sun, 20 Mar 2011 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2011/03/20/activevalidators-130/</guid><description>&lt;p&gt;ActiveValidators 1.3.0 has been released!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;activevalidators&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Read on for the full changelog.&lt;/p&gt;</description></item><item><title>Find out where a Rake task is defined</title><link>http://franck.verrot.us/blog/2011/02/20/find-out-where-a-rake-task-is-defined/</link><pubDate>Sun, 20 Feb 2011 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2011/02/20/find-out-where-a-rake-task-is-defined/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR&lt;/em&gt;
Rake &amp;gt; 0.8.7 has a handy &lt;code&gt;Rake::Task#locations&lt;/code&gt; method that makes it
damn easy to know where a task is defined or enhanced.&lt;/p&gt;
&lt;p&gt;During the last &lt;a href="http://lyonrb.fr"&gt;LyonRb&lt;/a&gt; meetup we read a quite large
portion of Rake&amp;rsquo;s source code. The idea was to find an easy way to determine
what file was defining/enhancing what task.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/richarkmichael"&gt;Richard&lt;/a&gt; and I just opened Rake
0.8.7&amp;rsquo;s source code (from our local machine&amp;rsquo;s RVM directory) and started hacking a bit to have that feature&amp;hellip;&lt;/p&gt;</description></item><item><title>LyonRb Bilan de l'apéro Ruby Lyon du 19 février 2011</title><link>http://franck.verrot.us/blog/2011/02/19/bilan-de-l-apero-ruby-lyon-du-17-fevrier-2011/</link><pubDate>Sat, 19 Feb 2011 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2011/02/19/bilan-de-l-apero-ruby-lyon-du-17-fevrier-2011/</guid><description>&lt;p&gt;Que de monde pour ce nouvel apéro Ruby à Lyon. L&amp;rsquo;élément encourageant
étant que le groupe ne descend plus en dessous de la douzaine!&lt;/p&gt;
&lt;p&gt;Quatre nouvelles têtes: &lt;a href="https://github.com/TiteiKo"&gt;Marion&lt;/a&gt;, Michel,
&lt;a href="http://vzmind.tumblr.com/"&gt;Vincent&lt;/a&gt; et &lt;a href="http://twitter.com/#!/richardkmichael/"&gt;Richard&lt;/a&gt;.
Bienvenue à vous!&lt;/p&gt;
&lt;p&gt;Les discussions se sont rapidement orientées sur le &lt;a href="http://lyon.startupweekend.org"&gt;StartUp Weekend Lyon&lt;/a&gt;,
où Vincent, JM, Pierre-Alexandre et Frédéric ont eu pour mission de faire un peu se prosélytisme :)&lt;/p&gt;
&lt;p&gt;Côté technique, nous avons eu un peu de temps pour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disséquer Rake afin de trouver un moyen simple pour retrouver où une
tâche est définie&lt;/li&gt;
&lt;li&gt;Discuter RESTful API et l&amp;rsquo;utilisation de l&amp;rsquo;entête Accept pour
effectuer le versioning.&lt;/li&gt;
&lt;li&gt;Philosopher sur les frameworks MVC comme ASP.NET MVC (beaucoup de
respect pour Scott Guthrie et le travail de son équipe), Symfony.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je n&amp;rsquo;ai pas réussi à parler de Seaside (Smalltalk)&amp;hellip; je ne désespère
pas!&lt;/p&gt;</description></item><item><title>LyonRb Bilan apero Ruby du 2 decembre 2010</title><link>http://franck.verrot.us/blog/2010/12/03/lyonrb-bilan-apero-ruby-du-2-decembre-2010/</link><pubDate>Fri, 03 Dec 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/12/03/lyonrb-bilan-apero-ruby-du-2-decembre-2010/</guid><description>&lt;p&gt;Encore de nouvelles têtes!&lt;/p&gt;</description></item><item><title>No Querying Views</title><link>http://franck.verrot.us/blog/2010/11/28/no-querying-views/</link><pubDate>Sun, 28 Nov 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/11/28/no-querying-views/</guid><description>&lt;p&gt;I made this plugin when we migrated to Rails 3. It basically prevents the development team from triggering any database query from the views.&lt;/p&gt;</description></item><item><title>LyonRb Bilan de la dernière rencontre</title><link>http://franck.verrot.us/blog/2010/11/27/lyonrb-bilan-de-la-derniere-rencontre/</link><pubDate>Sat, 27 Nov 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/11/27/lyonrb-bilan-de-la-derniere-rencontre/</guid><description>&lt;p&gt;Bien que cela fasse plus d&amp;rsquo;un mois que la dernière rencontre des &amp;ldquo;Rubyistes&amp;rdquo; Lyonnais (disons Rhône-Alpins) ait eu lieu, je ne trouve que maintenant (à moins d&amp;rsquo;une semaine du prochain apéro) le temps de le commenter&amp;hellip;&lt;/p&gt;
&lt;p&gt;Je pense qu&amp;rsquo;il s&amp;rsquo;agit du premier apéro qui réunit tant de personnes. Nous étions une bonne douzaine (14?), dont &lt;a href="http://pcreux.com/"&gt;Philippe&lt;/a&gt; de retour du Canada, &lt;a href="http://guillaume-barillot.com/blog/fr/33--blog"&gt;Guillaume&lt;/a&gt; et bien d&amp;rsquo;autres curieux qui rejoignent nos rangs.&lt;/p&gt;
&lt;p&gt;Philippe a pu présenter &lt;a href="https://github.com/gregbell/active_admin"&gt;ActiveAdmin&lt;/a&gt;, un projet assez intéressant qui permet de monter des interfaces d&amp;rsquo;administrations assez facilement, et qui fournit une DSL assez bien pensée.&lt;/p&gt;</description></item><item><title>New blog engine</title><link>http://franck.verrot.us/blog/2010/11/08/new-blog-engine/</link><pubDate>Mon, 08 Nov 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/11/08/new-blog-engine/</guid><description>&lt;p&gt;Trying out a new blog engine.&lt;/p&gt;
&lt;p&gt;Pretty simple backend: everything is stored on Github so publicly
accessible.&lt;/p&gt;</description></item><item><title>RubyCampLyon 2010 wrapping up</title><link>http://franck.verrot.us/blog/2010/04/17/rubycamplyon-2010-wrapping-up/</link><pubDate>Sat, 17 Apr 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/04/17/rubycamplyon-2010-wrapping-up/</guid><description>&lt;p&gt;The RubyCamp Lyon 2010 took place yesterday, Saturday 17th. I was great meeting all those people interested in Ruby, for both professional and amateur matters. Eyrolles was sponsoring the event and offered 10 books (I didn&amp;rsquo;t win one though - that&amp;rsquo;s for the sucking part :)).&lt;/p&gt;
&lt;p&gt;I also obtained a last-minute sponsoring from Engine Yard, but as I obtained the required info the night before the presentation, I only showed a little bit the interface but didn&amp;rsquo;t do anything real with it. Instead, I used Heroku and presented the 60-second deployment stuff. I think I made my point there: configuring servers and low-level stuff isn&amp;rsquo;t fun anymore, let&amp;rsquo;s put the application at the center of all.&lt;/p&gt;</description></item><item><title>Rails 3, Railties and Engines</title><link>http://franck.verrot.us/blog/2010/04/07/rails-3-railties-and-engines/</link><pubDate>Wed, 07 Apr 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/04/07/rails-3-railties-and-engines/</guid><description>&lt;p&gt;Rails 3 brings a lot of useful features. The main one, in my humble opinion, is the introduction of the classes Rails::Railtie and Rails::Engine.&lt;/p&gt;
&lt;p&gt;They bring the modularity that made code more reusable and easily integrable in your current code base. They also prove that there no reason to say that Rails is not ready for the Enterprise. One quick tip for the party poopers (you know who you are ;)): &lt;a href=":http://jruby.org/"&gt;JRuby&lt;/a&gt; makes things even easier for your development operations team members as it allows you to run your Ruby app (ie: Rails) within your favorite App Server (Websphere, Tomcat, you name them).&lt;/p&gt;</description></item><item><title>Live-Note got its own Google Chrome Extension</title><link>http://franck.verrot.us/blog/2010/03/25/live-note-got-its-own-google-chrome-extension/</link><pubDate>Thu, 25 Mar 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/03/25/live-note-got-its-own-google-chrome-extension/</guid><description>&lt;p&gt;Thanks to &lt;a href="http://www.google.com/profiles/luciano.santabrigida#buzz"&gt;Luciano (@lucianosb)&lt;/a&gt; Live-Note has got its own Google Chrome Extension.&lt;/p&gt;
&lt;p&gt;He even shot a video about it:&lt;/p&gt;</description></item><item><title>Fatal GCJ GNU Compiler for Java is not supported by JRuby</title><link>http://franck.verrot.us/blog/2010/03/22/fatal-gcj-gnu-compiler-for-java-is-not-supported-by-jruby/</link><pubDate>Mon, 22 Mar 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/03/22/fatal-gcj-gnu-compiler-for-java-is-not-supported-by-jruby/</guid><description>&lt;p&gt;If you ever encountered this when installing JRuby on Ubuntu:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Fatal: GCJ (GNU Compiler for Java) is not supported by JRuby.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Doing&lt;/p&gt;
&lt;p&gt;&lt;code&gt;export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;could do the trick, given you&amp;rsquo;ve installed sun-java6&amp;rsquo;s packages on your machine.&lt;/p&gt;
&lt;p&gt;I hope it&amp;rsquo;ll help.&lt;/p&gt;</description></item><item><title>Git Fast Forward Merges</title><link>http://franck.verrot.us/blog/2010/03/11/git-fast-forward-merges/</link><pubDate>Thu, 11 Mar 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/03/11/git-fast-forward-merges/</guid><description>&lt;p&gt;Moving our current projects codebase from Subversion to Git was a nice move. This plus the adoption of the feature-centric way of developing (BDD + Scrum + Kanban) and our repositories are now cleared of any form of waste (useless LOC written &amp;ldquo;just in case&amp;rdquo;). Now, we must adapt the usage we have of Git and one that we just initiated is the non fast forward merge.&lt;/p&gt;
&lt;p&gt;Moving our current projects codebase from Subversion to Git was a nice move. This plus the adoption of the feature-centric way of developing (BDD + Scrum + Kanban) and our repositories are now cleared of any form of waste (useless LOC written &amp;ldquo;just in case&amp;rdquo;).&lt;/p&gt;</description></item><item><title>Introducing Live-Note appspot com</title><link>http://franck.verrot.us/blog/2010/03/04/introducing-live-note-appspot-com/</link><pubDate>Thu, 04 Mar 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/03/04/introducing-live-note-appspot-com/</guid><description>&lt;p&gt;I was about to call this article &amp;ldquo;Gemcutter Webhooks on Google Wave (and Google App Engine) part 2&amp;rdquo; but then I realized that it was no more about that I wanted to focus on, but more on the Wave part (sorry Rubyists friends, but I had fun with Python (as long as I don&amp;rsquo;t try to do metaprogramming Python is nice to play with :)).&lt;/p&gt;
&lt;p&gt;Google released the Google Wave Robot API v2 (hurray). In that major revision, they are introducing the Active Robot API that makes it possible for robots (i.e. GAE-baked applications) to interact with Waves. In the previous version, your robot was being notified each time a wave (or wavelet, or blip) was modified or when a participant was added to the wave, but now, your application can actually be active and contact Wave on its own.&lt;/p&gt;
&lt;p&gt;In the first part of this series of articles, I was demonstrating how to build a GAE-baked application and how to subscribe to a web hook (being a Rubyist I was taking the webhooks from Gemcutter / Rubygems.org). I went only half-way as I wanted to actually see the result &lt;em&gt;inside&lt;/em&gt; Google Wave. But then I think to my self, what a wonderful &lt;del&gt;world&lt;/del&gt; think it would be to do something actually useful in my everyday life instead of just demonstrating mix of technologies (even if it&amp;rsquo;s neat to be able to make applications talk to each others).&lt;/p&gt;
&lt;p&gt;So today, it&amp;rsquo;s gonna be about a 12-hour-design application: &lt;strong&gt;Live-Note&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Rails 3 Let ActiveRecord Manage Your Translations</title><link>http://franck.verrot.us/blog/2010/02/27/rails-3-let-activerecord-manage-your-translations/</link><pubDate>Sat, 27 Feb 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/02/27/rails-3-let-activerecord-manage-your-translations/</guid><description>&lt;p&gt;With the previous versions of Rails we have the choice between storing the translations into a YAML file (one per language) and standard Ruby Hashes.&lt;/p&gt;
&lt;p&gt;Bringing the ActiveRecord backend to light, the I18n gem allows us now to manage all our translations in a regular database.&lt;/p&gt;
&lt;p&gt;The I18n gem (required to run Rails 3) has been released in late December and is providing all you need to store your translations into a database. A neat thing is the I18n::Backend::Base module, which makes it easy to start writing a new backend in no time.&lt;/p&gt;</description></item><item><title>Executing binary files with Ruby on Rails and Heroku</title><link>http://franck.verrot.us/blog/2010/02/24/executing-binary-files-with-ruby-on-rails-and-heroku/</link><pubDate>Wed, 24 Feb 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/02/24/executing-binary-files-with-ruby-on-rails-and-heroku/</guid><description>&lt;p&gt;One would easily wonder why in hell someone else would want to do that, but it&amp;rsquo;s actually often because you are forced to.&lt;/p&gt;
&lt;p&gt;In this post, I&amp;rsquo;ll explain how to proceed.&lt;/p&gt;</description></item><item><title>Talk to Gemcutter's API using XMPP/Google Talk</title><link>http://franck.verrot.us/blog/2010/02/20/talk-to-gemcutters-api-using-xmppgoogle-talk/</link><pubDate>Sat, 20 Feb 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/02/20/talk-to-gemcutters-api-using-xmppgoogle-talk/</guid><description>&lt;p&gt;Working with Ruby in my day job made me try other exciting things, especially with Google App Engine. Programming in Python is not so bad, but I won&amp;rsquo;t say I&amp;rsquo;m having fun remapping my brain onto the weirdosities of the language.&lt;/p&gt;
&lt;p&gt;Anyhoo&amp;hellip; Tonight I wanted to talk to Gemcutter, but not programmatically, I wanted to have it in my GTalk contact list and start having a little chat&amp;hellip;&lt;/p&gt;
&lt;p&gt;The very first step was to fire up a new application in App Engine web panel. Five seconds later, let&amp;rsquo;s fired up a GVim and create (within a new directory) app.yml and gemtalker.py.&lt;/p&gt;</description></item><item><title>Gemcutter Webhooks on Google Wave (and Google App Engine) part 1</title><link>http://franck.verrot.us/blog/2010/01/27/gemcutter-webhooks-on-google-wave-and-google-app-engine-part-1/</link><pubDate>Wed, 27 Jan 2010 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/blog/2010/01/27/gemcutter-webhooks-on-google-wave-and-google-app-engine-part-1/</guid><description>&lt;p&gt;So what are Gemcutter webhooks? It&amp;#8217;s a way to automatically notice an online app (say gemhooker.appspot.com for instance) about the activities of your favorite (or all) Gemcutter&amp;#8217;s gems...&lt;/p&gt;
&lt;p&gt;As mentioned in the &lt;a href="http://gemcutter.org/pages/gem_docs#webhook"&gt;documentation&lt;/a&gt;, let&amp;#8217;s install gemcutter&amp;#8217;s gem if not already done:&lt;/p&gt;
&lt;script src="http://gist.github.com/271511.js"&gt;&lt;/script&gt;&lt;p&gt;Now this is done, let&amp;#8217;s get it started and fire up a new Python&amp;#8217;s powered &lt;span class="caps"&gt;GAE&lt;/span&gt; app (gemhooker.py):&lt;br /&gt;
&lt;script src="http://gist.github.com/271504.js"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;If you deploy this app (with appcfg.py update gemhooker-clone-you-just-initialized), you won&amp;#8217;t see anything so let&amp;#8217;s ask Gemcutter to add a webhook that will notice our app everytime someone pushes changes onto Gemcutter! I&amp;#8217;m subscribing to every event of all the existing gems:&lt;/p&gt;</description></item><item><title>About</title><link>http://franck.verrot.us/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/about/</guid><description>&lt;p&gt;I&amp;rsquo;m an engineering executive who likes the messy middle: the point where product ambition, constraints, architecture, and people collide.&lt;/p&gt;
&lt;p&gt;Over the last decade in digital health, I&amp;rsquo;ve led teams through growth by designing scalable systems, improving quality and reliability, and building execution muscle across engineering and product. More recently, I&amp;rsquo;ve been driving practical AI adoption &amp;ndash; both in the product and in how teams build it &amp;ndash; while navigating the realities of compliance, security, and risk.&lt;/p&gt;</description></item><item><title>Portfolio</title><link>http://franck.verrot.us/portfolio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://franck.verrot.us/portfolio/</guid><description>&lt;h2 id="experience"&gt;Experience&lt;/h2&gt;
&lt;h3 id="omada-health"&gt;Omada Health&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Full-time &amp;ndash; 10+ years&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vice President of Engineering&lt;/strong&gt; (Aug 2021 &amp;ndash; Present)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Promoted from VP of Architecture and Infrastructure to lead the entire engineering organization&lt;/li&gt;
&lt;li&gt;Oversee architecture, infrastructure, and cross-functional engineering initiatives aligned with company strategy&lt;/li&gt;
&lt;li&gt;Drive adoption and integration of AI/ML technologies across the organization&lt;/li&gt;
&lt;li&gt;Champion AI/ML initiatives, fostering collaboration between Applied AI, Engineering, and Product teams while navigating Legal, Compliance, and Cybersecurity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Distinguished Software Engineer &amp;amp; Engineering Leader&lt;/strong&gt; (Nov 2015 &amp;ndash; Aug 2021)&lt;/p&gt;</description></item></channel></rss>