<rss xmlns:source="http://source.scripting.com/" version="2.0">
  <channel>
    <title>Travis Fantina</title>
    <link>https://blog.travisfantina.com/</link>
    <description></description>
    
    <language>en</language>
    
    <lastBuildDate>Thu, 16 Apr 2026 21:25:41 -0400</lastBuildDate>
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/04/16/updating-some-backbonejs-code-what.html</link>
      <pubDate>Thu, 16 Apr 2026 21:25:41 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/04/16/updating-some-backbonejs-code-what.html</guid>
      <description>&lt;p&gt;Updating some Backbone.js code&amp;hellip; What a blast from the past, over the year&amp;rsquo;s I believe I&amp;rsquo;ve worked on three Backbone projects. It&amp;rsquo;s fun to dig into legacy hotness from 10 or 15 years back it allows you to judge the code with more clarity. The code today was pretty clever, the Backbone stuff I worked on a year ago; not so much.&lt;/p&gt;
</description>
      <source:markdown>Updating some Backbone.js code... What a blast from the past, over the year&#39;s I believe I&#39;ve worked on three Backbone projects. It&#39;s fun to dig into legacy hotness from 10 or 15 years back it allows you to judge the code with more clarity. The code today was pretty clever, the Backbone stuff I worked on a year ago; not so much.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/04/16/new-script-to-kill-the.html</link>
      <pubDate>Thu, 16 Apr 2026 14:31:58 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/04/16/new-script-to-kill-the.html</guid>
      <description>&lt;p&gt;New script to kill the &lt;code&gt;rails s&lt;/code&gt;: &lt;code&gt; lsof -i:3000 | grep &amp;quot;ruby&amp;quot; | awk &#39;{print $2}&#39; | xargs kill -15&lt;/code&gt;
I&amp;rsquo;ve set that as a workflow in Alfred that runs when I hit command-control-r (⌘⌃R). I set this up last year because I find Rails gets hung up and control-c isn&amp;rsquo;t enough to kill it.  However, prior to right now I was using &lt;code&gt;lsof -i:3000 | xargs kill -15&lt;/code&gt; which would also kill Firefox (Zen), &lt;code&gt;grep&lt;/code&gt; for Ruby and then grabbing the specific processes fixed this.&lt;/p&gt;
</description>
      <source:markdown>New script to kill the `rails s`: ` lsof -i:3000 | grep &#34;ruby&#34; | awk &#39;{print $2}&#39; | xargs kill -15` 
I&#39;ve set that as a workflow in Alfred that runs when I hit command-control-r (⌘⌃R). I set this up last year because I find Rails gets hung up and control-c isn&#39;t enough to kill it.  However, prior to right now I was using `lsof -i:3000 | xargs kill -15` which would also kill Firefox (Zen), `grep` for Ruby and then grabbing the specific processes fixed this.
</source:markdown>
    </item>
    
    <item>
      <title>Args and Params</title>
      <link>https://blog.travisfantina.com/2026/04/13/i-think-ive-always-used.html</link>
      <pubDate>Mon, 13 Apr 2026 16:24:58 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/04/13/i-think-ive-always-used.html</guid>
      <description>&lt;p&gt;I think I&amp;rsquo;ve always used &lt;code&gt;args&lt;/code&gt; and &lt;code&gt;params&lt;/code&gt; interchangeably; TIL &lt;em&gt;parameters&lt;/em&gt; are what the function accepts and &lt;em&gt;arguments&lt;/em&gt; are the values passed in.  For example in Elixir:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-elixir&#34; data-lang=&#34;elixir&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; my_func(name, age) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; 
  ...
&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt; 
&lt;span style=&#34;color:#75715e&#34;&gt;# above name, and age are parameters&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# then at the call site:&lt;/span&gt;
my_func(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Travis&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;34&lt;/span&gt;) 
&lt;span style=&#34;color:#75715e&#34;&gt;# &amp;#34;Travis&amp;#34; and 34 are arguments&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <source:markdown>I think I&#39;ve always used `args` and `params` interchangeably; TIL _parameters_ are what the function accepts and _arguments_ are the values passed in.  For example in Elixir:
```elixir 
def my_func(name, age) do 
  ...
end 
# above name, and age are parameters
# then at the call site:
my_func(&#34;Travis&#34;, 34) 
# &#34;Travis&#34; and 34 are arguments
``` 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/04/08/just-read-the-term-react.html</link>
      <pubDate>Wed, 08 Apr 2026 06:39:58 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/04/08/just-read-the-term-react.html</guid>
      <description>&lt;p&gt;Just read the term &amp;ldquo;React Engineer&amp;rdquo;, I know it&amp;rsquo;s cliche but I need to scream into the void on this: there is no such thing as a &amp;ldquo;React Engineer&amp;rdquo;;  engineers are licensed professionals and highly regulated, slapping components together to &amp;ldquo;make the graphql look pretty&amp;rdquo; is not an engineering job.&lt;/p&gt;
&lt;p&gt;I get that these terms are conflated, but I never call myself a &amp;ldquo;software engineer&amp;rdquo; because I didn&amp;rsquo;t do an engineering program.&lt;/p&gt;
</description>
      <source:markdown>Just read the term &#34;React Engineer&#34;, I know it&#39;s cliche but I need to scream into the void on this: there is no such thing as a &#34;React Engineer&#34;;  engineers are licensed professionals and highly regulated, slapping components together to &#34;make the graphql look pretty&#34; is not an engineering job.

I get that these terms are conflated, but I never call myself a &#34;software engineer&#34; because I didn&#39;t do an engineering program.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/03/24/whenever-i-get-a-spammy.html</link>
      <pubDate>Tue, 24 Mar 2026 13:40:20 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/03/24/whenever-i-get-a-spammy.html</guid>
      <description>&lt;p&gt;Whenever I get a spammy text my first move is to run:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; loadtest -c 50 -n 1000000 --rps 10000 https://spammy_url.com
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;They generally don&amp;rsquo;t use beefy servers so it&amp;rsquo;s fairly easy to crash them at least for a few minutes.  Thinking of creating background script to run this constantly for any spam texts I get, might be enough to spike a Lambda or Vercel bill a bit.&lt;/p&gt;
</description>
      <source:markdown>Whenever I get a spammy text my first move is to run:
```
 loadtest -c 50 -n 1000000 --rps 10000 https://spammy_url.com
```
They generally don&#39;t use beefy servers so it&#39;s fairly easy to crash them at least for a few minutes.  Thinking of creating background script to run this constantly for any spam texts I get, might be enough to spike a Lambda or Vercel bill a bit.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/02/24/151339.html</link>
      <pubDate>Tue, 24 Feb 2026 16:13:39 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/02/24/151339.html</guid>
      <description>&lt;p&gt;I&amp;rsquo;m a firm believer that 40-60% of jobs in the modern world do not need to exist. AI is driving those jobs out of existence, unfortunately it is not doing so by creating a simpler more utilitarian world, instead it serves as a multiplier for that waste and will likely create even more layers of pointless abstraction.&lt;/p&gt;
</description>
      <source:markdown>I&#39;m a firm believer that 40-60% of jobs in the modern world do not need to exist. AI is driving those jobs out of existence, unfortunately it is not doing so by creating a simpler more utilitarian world, instead it serves as a multiplier for that waste and will likely create even more layers of pointless abstraction.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/02/24/im-a-firm-believer-that.html</link>
      <pubDate>Tue, 24 Feb 2026 16:13:38 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/02/24/im-a-firm-believer-that.html</guid>
      <description>&lt;p&gt;I&amp;rsquo;m a firm believer that 40-60% of jobs in the modern world do not need to exist. AI is driving those jobs out of existence, unfortunately it is not doing so by creating a simpler more utilitarian world, instead it serves as a multiplier for that waste and will likely create even more layers of pointless abstraction.&lt;/p&gt;
</description>
      <source:markdown>I&#39;m a firm believer that 40-60% of jobs in the modern world do not need to exist. AI is driving those jobs out of existence, unfortunately it is not doing so by creating a simpler more utilitarian world, instead it serves as a multiplier for that waste and will likely create even more layers of pointless abstraction.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/02/23/last-week-i-added-internationalization.html</link>
      <pubDate>Mon, 23 Feb 2026 10:15:11 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/02/23/last-week-i-added-internationalization.html</guid>
      <description>&lt;p&gt;Last week I added internationalization to an large B2B app I&amp;rsquo;ve been working with for the past 6 years. It&amp;rsquo;s pretty gratifying to see this app that dozens of employees and hundreds of customers use every day now in Italian, Spanish, German, Polish and Dutch!&lt;/p&gt;
</description>
      <source:markdown>Last week I added internationalization to an large B2B app I&#39;ve been working with for the past 6 years. It&#39;s pretty gratifying to see this app that dozens of employees and hundreds of customers use every day now in Italian, Spanish, German, Polish and Dutch!
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/01/30/i-was-thinking-of-embedding.html</link>
      <pubDate>Fri, 30 Jan 2026 15:44:08 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/30/i-was-thinking-of-embedding.html</guid>
      <description>&lt;p&gt;I was thinking of embedding Calendly directly on my website so people could schedule meetings with me but it drops 3 cookies and makes about 11 network requests on page load&amp;hellip; That&amp;rsquo;s a hard pass.&lt;/p&gt;
</description>
      <source:markdown>I was thinking of embedding Calendly directly on my website so people could schedule meetings with me but it drops 3 cookies and makes about 11 network requests on page load... That&#39;s a hard pass.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/01/29/weve-moved-on-from-the.html</link>
      <pubDate>Thu, 29 Jan 2026 16:21:56 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/29/weve-moved-on-from-the.html</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve moved on from the &amp;ldquo;Israel has a right to defend themselves&amp;rdquo; phase to the &amp;ldquo;Israel has a right to develop beach front real estate&amp;rdquo; phase and still most world leaders are silent about this.&lt;/p&gt;
</description>
      <source:markdown>We&#39;ve moved on from the &#34;Israel has a right to defend themselves&#34; phase to the &#34;Israel has a right to develop beach front real estate&#34; phase and still most world leaders are silent about this.
</source:markdown>
    </item>
    
    <item>
      <title>Week in Review</title>
      <link>https://blog.travisfantina.com/2026/01/23/week-in-review.html</link>
      <pubDate>Fri, 23 Jan 2026 17:31:38 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/23/week-in-review.html</guid>
      <description>&lt;p&gt;This week I started getting back into some serious work for other clients. My schedule is kind of weird, I&amp;rsquo;m a consultant working 50-50 for two different companies (~20 hours each), so in a way I have two clients. However; one of the companies is an agency so I contract for them and then I contract for additional clients through them.  I have two clients I bill but three or four clients I work for.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m happy to get back into agency work, it&amp;rsquo;s a lot of fun flitting from project to project.  This is an overview of my week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Working in a legacy Phoenix code base I spent a few hours doing PR review and then developing a new feature which will change the way a specific type of order gets processed. This project has a fairly lengthy state machine that orders will pass through (think, credit check, sales order, customer notification, shipping), it can get pretty complex depending on the customer&amp;rsquo;s location, configuration, and the product they ordered.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ve been working on some infrastructure updates in an old Rails project, we had fantastic junior do the back breaking work of migrating the app from Rails 5 to Rails 8. It&amp;rsquo;s working locally but there are some issues running it on the actual EC2 instance.&lt;/li&gt;
&lt;li&gt;Working with TypeScript, GraphQL and Rails to develop a history modal to display PaperTrail versions. Most of the back end work was done by another developer to convert the actual &lt;code&gt;Version&lt;/code&gt; record into a nice &amp;ldquo;log&amp;rdquo; I&amp;rsquo;m just trying to query them and display them with some filtering by date.  This was part of a larger sprint this week and last which was all-hands on (about 8 developers).&lt;/li&gt;
&lt;li&gt;Personally, I made a few improvements to my &lt;a href=&#34;https://blog.travisfantina.com/2026/01/16/harvest-timers-and-go.html&#34;&gt;Go tool to fetch&lt;/a&gt; my current time for the month from Harvest. Further improvements would only be a waste of time but I&amp;rsquo;m having a lot of fun playing with Go.&lt;/li&gt;
&lt;/ul&gt;
</description>
      <source:markdown>This week I started getting back into some serious work for other clients. My schedule is kind of weird, I&#39;m a consultant working 50-50 for two different companies (~20 hours each), so in a way I have two clients. However; one of the companies is an agency so I contract for them and then I contract for additional clients through them.  I have two clients I bill but three or four clients I work for.

I&#39;m happy to get back into agency work, it&#39;s a lot of fun flitting from project to project.  This is an overview of my week:

* Working in a legacy Phoenix code base I spent a few hours doing PR review and then developing a new feature which will change the way a specific type of order gets processed. This project has a fairly lengthy state machine that orders will pass through (think, credit check, sales order, customer notification, shipping), it can get pretty complex depending on the customer&#39;s location, configuration, and the product they ordered.
* I&#39;ve been working on some infrastructure updates in an old Rails project, we had fantastic junior do the back breaking work of migrating the app from Rails 5 to Rails 8. It&#39;s working locally but there are some issues running it on the actual EC2 instance.
* Working with TypeScript, GraphQL and Rails to develop a history modal to display PaperTrail versions. Most of the back end work was done by another developer to convert the actual `Version` record into a nice &#34;log&#34; I&#39;m just trying to query them and display them with some filtering by date.  This was part of a larger sprint this week and last which was all-hands on (about 8 developers).
* Personally, I made a few improvements to my [Go tool to fetch](https://blog.travisfantina.com/2026/01/16/harvest-timers-and-go.html) my current time for the month from Harvest. Further improvements would only be a waste of time but I&#39;m having a lot of fun playing with Go. 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/01/23/remember-when-the-tech-world.html</link>
      <pubDate>Fri, 23 Jan 2026 08:41:41 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/23/remember-when-the-tech-world.html</guid>
      <description>&lt;p&gt;Remember when the tech world solved racism by renaming &lt;code&gt;master&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt; branch?&lt;/p&gt;
</description>
      <source:markdown>Remember when the tech world solved racism by renaming `master` to `main` branch?
</source:markdown>
    </item>
    
    <item>
      <title>The ICC Must Issue An Arrest Warrant for Donald Trump</title>
      <link>https://blog.travisfantina.com/2026/01/22/the-icc-must-issue-an.html</link>
      <pubDate>Thu, 22 Jan 2026 07:17:58 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/22/the-icc-must-issue-an.html</guid>
      <description>&lt;p&gt;I wrote this a few weeks back the morning after the United States abducted the leader of the 53rd largest country (by population ~32 million), at the time I was thinking of shopping it around as an opinion piece or letter to the editor but it&amp;rsquo;s getting a little old. I&amp;rsquo;d like to put it somewhere before the world has completely moved on to the next unprecedented act.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;It was just over a year ago when the International Criminal Court (ICC) issued arrest warrants for two high ranking Israeli officials, notably Prime Minister Benjamin Netanyahu. This warrant, I am to understand is largely symbolic; it is unlikely that the Prime Minister would find himself in any “hostile” countries (read “hostile” as countries willing to uphold international law). Any such warrant against the president of the United States would, likewise, be symbolic but important. If the international community is unwilling to uphold law and order, on even a symbolic level, than what kind of world order remains?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The brazen attack on Venezuela and subsequent disposal of President Nicolás Maduro was likely illegal under all but the most construed US laws and definitely illegal under international law. Those of my generation, and frankly anyone over the age of about thirty, ought to remember the US’s sabre-rattling leading up to the invasion of Iraq. At least George W. Bush had the decorum to lie about the pretenses of such an invasion (although that was also a clear breach of international law and against the best evidence of nearly all independent investigations). Twenty-three years later, Donald Trump needs no such veneers: thus far, he acts with impunity. In 2003, it was clear to those who were looking that the US was about to invade a sovereign nation to plunder it’s oil reserves. In 2026, one need not even read between the lines: “We’re going to have our very large US oil companies... spend billions of dollars start making money for the country and we are ready to stage a second and much larger attack if we need to do so.”

There are arguments to be made against the character and regime of President Maduro; however any such accusations could be leveled at any number of US-friendly regimes without the pretext for invasion or occupation. It was not narcotics trafficking, nor the lack of open and fair elections, or any number of paper-thin excuses for this attack on a non-hostile sovereign nation. Make no mistake, as Trump himself alluded to when he accused Venezuela of “ripping [us] off”; it was simply the Maduro Administration’s refusal to play ball with US interests. 

I’m sure there are no small number of nations that would love to slap the cuffs on Donald Trump; however, none would dare. The US is just too powerful to take orders from any other nation individually or in the collective. As a permanent member of the UN security council, their veto power makes that entire body impotent. Such is the world which the US created over the course of the 20th century and it is the one in which Donald Trump is now a beneficiary. Any warrants issued by the ICC, would carry the same power as that issued for Netanyahu. We can not have any illusions about this. However; any nation that wishes to be remembered on the right side of history must act in accordance with international law and call for the arrest of President Donald J. Trump. 
&lt;/code&gt;&lt;/pre&gt;
</description>
      <source:markdown>I wrote this a few weeks back the morning after the United States abducted the leader of the 53rd largest country (by population ~32 million), at the time I was thinking of shopping it around as an opinion piece or letter to the editor but it&#39;s getting a little old. I&#39;d like to put it somewhere before the world has completely moved on to the next unprecedented act.

---

It was just over a year ago when the International Criminal Court (ICC) issued arrest warrants for two high ranking Israeli officials, notably Prime Minister Benjamin Netanyahu. This warrant, I am to understand is largely symbolic; it is unlikely that the Prime Minister would find himself in any “hostile” countries (read “hostile” as countries willing to uphold international law). Any such warrant against the president of the United States would, likewise, be symbolic but important. If the international community is unwilling to uphold law and order, on even a symbolic level, than what kind of world order remains? 

	The brazen attack on Venezuela and subsequent disposal of President Nicolás Maduro was likely illegal under all but the most construed US laws and definitely illegal under international law. Those of my generation, and frankly anyone over the age of about thirty, ought to remember the US’s sabre-rattling leading up to the invasion of Iraq. At least George W. Bush had the decorum to lie about the pretenses of such an invasion (although that was also a clear breach of international law and against the best evidence of nearly all independent investigations). Twenty-three years later, Donald Trump needs no such veneers: thus far, he acts with impunity. In 2003, it was clear to those who were looking that the US was about to invade a sovereign nation to plunder it’s oil reserves. In 2026, one need not even read between the lines: “We’re going to have our very large US oil companies... spend billions of dollars start making money for the country and we are ready to stage a second and much larger attack if we need to do so.”

	There are arguments to be made against the character and regime of President Maduro; however any such accusations could be leveled at any number of US-friendly regimes without the pretext for invasion or occupation. It was not narcotics trafficking, nor the lack of open and fair elections, or any number of paper-thin excuses for this attack on a non-hostile sovereign nation. Make no mistake, as Trump himself alluded to when he accused Venezuela of “ripping [us] off”; it was simply the Maduro Administration’s refusal to play ball with US interests. 

	I’m sure there are no small number of nations that would love to slap the cuffs on Donald Trump; however, none would dare. The US is just too powerful to take orders from any other nation individually or in the collective. As a permanent member of the UN security council, their veto power makes that entire body impotent. Such is the world which the US created over the course of the 20th century and it is the one in which Donald Trump is now a beneficiary. Any warrants issued by the ICC, would carry the same power as that issued for Netanyahu. We can not have any illusions about this. However; any nation that wishes to be remembered on the right side of history must act in accordance with international law and call for the arrest of President Donald J. Trump. 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/01/18/finished-reading-small-things-like.html</link>
      <pubDate>Sun, 18 Jan 2026 22:39:35 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/18/finished-reading-small-things-like.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9780571392605/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9780571392605&#34;&gt;Small Things Like These&lt;/a&gt; by Claire Keegan 📚&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the first book I&amp;rsquo;ve read this year, so calling it &amp;ldquo;the best book I&amp;rsquo;ve read all year&amp;rdquo; would be true, but to lump this in with last year and the say the same may be true as well! Keegan&amp;rsquo;s voice is incredible, this book was pure poetry, effortlessly capturing both the highs and lows of human emotion. Although, it takes place 40 years ago, the financial worries and dreary outlook generally feel like they could be ripped straight from 2026.&lt;br&gt;
The emotions I felt reading this book were not unlike those I feel reading A Christmas Carol, perhaps it was the Christmas time setting, or the newfound or recovered morality of the lead character but I think the writing itself was really that good.&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9780571392605/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Finished reading: [Small Things Like These](https://micro.blog/books/9780571392605) by Claire Keegan 📚

It&#39;s the first book I&#39;ve read this year, so calling it &#34;the best book I&#39;ve read all year&#34; would be true, but to lump this in with last year and the say the same may be true as well! Keegan&#39;s voice is incredible, this book was pure poetry, effortlessly capturing both the highs and lows of human emotion. Although, it takes place 40 years ago, the financial worries and dreary outlook generally feel like they could be ripped straight from 2026.  
The emotions I felt reading this book were not unlike those I feel reading A Christmas Carol, perhaps it was the Christmas time setting, or the newfound or recovered morality of the lead character but I think the writing itself was really that good.
</source:markdown>
    </item>
    
    <item>
      <title>Harvest Timers and Go!</title>
      <link>https://blog.travisfantina.com/2026/01/16/harvest-timers-and-go.html</link>
      <pubDate>Fri, 16 Jan 2026 23:16:52 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/16/harvest-timers-and-go.html</guid>
      <description>&lt;p&gt;This week I put together a tiny Go project. Go&amp;rsquo;s been on my &amp;ldquo;to learn&amp;rdquo; list for years now but I&amp;rsquo;ve never quite gotten around to it.  Over the summer I got as far as reading a few articles and skimming the documentation but I didn&amp;rsquo;t have the time to make anything.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a contractor working, primarily, for two clients. One is an agency that has their own Harvest account for tracking time against client projects. The other client is a traditional product company, I track time and bill them with my own, separate, Harvest account. It&amp;rsquo;s a bit of an annoyance because having two separate Harvest accounts means I have to sign in twice just to figure out how many hours I&amp;rsquo;ve worked in the month so far. I created a little CLI (the CLI part is not quite implemented yet) to query both accounts, grab my monthly hours, and total them.&lt;/p&gt;
&lt;p&gt;Strapped for time I asked Opencode to generate a basic query to an endpoint and parse the returned JSON, this outline was enough for me to go the rest of the way implementing what I needed.&lt;/p&gt;
&lt;p&gt;You can check it out here, but unless your in the exact same situation as me, it&amp;rsquo;s likely not going to do you much good!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codeberg.org/tfantina/HarvestTime&#34;&gt;codeberg.org/tfantina/&amp;hellip;&lt;/a&gt;&lt;/p&gt;
</description>
      <source:markdown>This week I put together a tiny Go project. Go&#39;s been on my &#34;to learn&#34; list for years now but I&#39;ve never quite gotten around to it.  Over the summer I got as far as reading a few articles and skimming the documentation but I didn&#39;t have the time to make anything.  

I&#39;m a contractor working, primarily, for two clients. One is an agency that has their own Harvest account for tracking time against client projects. The other client is a traditional product company, I track time and bill them with my own, separate, Harvest account. It&#39;s a bit of an annoyance because having two separate Harvest accounts means I have to sign in twice just to figure out how many hours I&#39;ve worked in the month so far. I created a little CLI (the CLI part is not quite implemented yet) to query both accounts, grab my monthly hours, and total them. 

Strapped for time I asked Opencode to generate a basic query to an endpoint and parse the returned JSON, this outline was enough for me to go the rest of the way implementing what I needed. 

You can check it out here, but unless your in the exact same situation as me, it&#39;s likely not going to do you much good!

[codeberg.org/tfantina/...](https://codeberg.org/tfantina/HarvestTime)
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/01/12/ive-tried-to-eliminate-the.html</link>
      <pubDate>Mon, 12 Jan 2026 17:47:42 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/12/ive-tried-to-eliminate-the.html</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve tried to eliminate the weird echo chamber of HackerNews from my life as much as possible. Interesting to see from the most 1000 discussed books only ~50 were written by women. This is exactly the sort of reason I&amp;rsquo;ve moved on from the orange site.&lt;br&gt;
&lt;a href=&#34;https://kottke.org/26/01/0048160-out-of-the-1000-most-disc&#34;&gt;kottke.org/26/01/004&amp;hellip;&lt;/a&gt;&lt;/p&gt;
</description>
      <source:markdown>I&#39;ve tried to eliminate the weird echo chamber of HackerNews from my life as much as possible. Interesting to see from the most 1000 discussed books only ~50 were written by women. This is exactly the sort of reason I&#39;ve moved on from the orange site.  
[kottke.org/26/01/004...](https://kottke.org/26/01/0048160-out-of-the-1000-most-disc)

</source:markdown>
    </item>
    
    <item>
      <title>Week in Review</title>
      <link>https://blog.travisfantina.com/2026/01/09/week-in-review.html</link>
      <pubDate>Fri, 09 Jan 2026 14:04:59 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/09/week-in-review.html</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been diving back into some Elixir projects this week; mostly small stuff. I updated Sentry and ensured it was logging at all the endpoints. Story time with this client&amp;hellip;&lt;/p&gt;
&lt;p&gt;Some six years ago I wired up Sentry to start tracking errors when this code base was fairly shiny and new; at the time I used free account associated with my work email. My thinking at the time was we could pilot Sentry then start a paid plan. I think the nature of this project, and Elixir in general is that it&amp;rsquo;s just fairly fault tolerant. Also, due to various priorities, budgeting, staffing, yadda, yadda I never took the time to dial Sentry in and filter the noise. Occasionally I&amp;rsquo;d dip into the account to look for a specific error, about half way through the month I&amp;rsquo;d get the email saying we&amp;rsquo;d hit our limit for the month and that was that.&lt;/p&gt;
&lt;p&gt;I should note this is not a small client, this application is processing millions a day in revenue! On the one hand they should have been paying for Sentry years ago, but on the other hand I get it. Security is not slacking in this organization, their servers get more junk requests to stuff like &lt;code&gt;/wp-admin&lt;/code&gt; then any other client I&amp;rsquo;ve ever worked with. This is, in no small part I believe, due to their rigorous use of bug bounty and associated white hat programs.  (It&amp;rsquo;s a source of pride that this particular application has never been hacked and generally scores better than most of their tech in pen-tests).
It&amp;rsquo;s interesting how a tool that is so essential to modern web-development like Sentry can be omitted for years and years; I&amp;rsquo;m confident we could have continued just fine without it but I&amp;rsquo;m also betting that if we take the time to filter the noise this is going to make the customer happier and make our lives far more simple.&lt;/p&gt;
</description>
      <source:markdown>I&#39;ve been diving back into some Elixir projects this week; mostly small stuff. I updated Sentry and ensured it was logging at all the endpoints. Story time with this client...

Some six years ago I wired up Sentry to start tracking errors when this code base was fairly shiny and new; at the time I used free account associated with my work email. My thinking at the time was we could pilot Sentry then start a paid plan. I think the nature of this project, and Elixir in general is that it&#39;s just fairly fault tolerant. Also, due to various priorities, budgeting, staffing, yadda, yadda I never took the time to dial Sentry in and filter the noise. Occasionally I&#39;d dip into the account to look for a specific error, about half way through the month I&#39;d get the email saying we&#39;d hit our limit for the month and that was that.  

I should note this is not a small client, this application is processing millions a day in revenue! On the one hand they should have been paying for Sentry years ago, but on the other hand I get it. Security is not slacking in this organization, their servers get more junk requests to stuff like `/wp-admin` then any other client I&#39;ve ever worked with. This is, in no small part I believe, due to their rigorous use of bug bounty and associated white hat programs.  (It&#39;s a source of pride that this particular application has never been hacked and generally scores better than most of their tech in pen-tests).
It&#39;s interesting how a tool that is so essential to modern web-development like Sentry can be omitted for years and years; I&#39;m confident we could have continued just fine without it but I&#39;m also betting that if we take the time to filter the noise this is going to make the customer happier and make our lives far more simple.

 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2026/01/05/pretty-quiet-on-here-over.html</link>
      <pubDate>Mon, 05 Jan 2026 13:21:19 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2026/01/05/pretty-quiet-on-here-over.html</guid>
      <description>&lt;p&gt;Pretty quiet on here over the holidays, partially due to illness and partially just wanting to be offline as much as possible.
I&amp;rsquo;d still like to get some end of year wrap-ups together.&lt;/p&gt;
</description>
      <source:markdown>Pretty quiet on here over the holidays, partially due to illness and partially just wanting to be offline as much as possible. 
I&#39;d still like to get some end of year wrap-ups together.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2025/12/26/watching-a-bit-of-the.html</link>
      <pubDate>Fri, 26 Dec 2025 22:09:51 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2025/12/26/watching-a-bit-of-the.html</guid>
      <description>&lt;p&gt;Watching a bit of the 2009 adaptation of A Christmas Carol, which I haven’t seen before but its bad… like really bad. Wild to think that Pixar’s Up came out the same year.&lt;/p&gt;
</description>
      <source:markdown>Watching a bit of the 2009 adaptation of A Christmas Carol, which I haven’t seen before but its bad… like really bad. Wild to think that Pixar’s Up came out the same year.  
</source:markdown>
    </item>
    
    <item>
      <title>Things Become Other Things</title>
      <link>https://blog.travisfantina.com/2025/12/24/things-become-other-things.html</link>
      <pubDate>Wed, 24 Dec 2025 14:13:00 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2025/12/24/things-become-other-things.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9780593732540/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9780593732540&#34;&gt;Things Become Other Things: A Walking Memoir&lt;/a&gt; by Craig Mod 📚&lt;/p&gt;
&lt;p&gt;I slow rolled this one, it took about two months; it was such a pleasure to read I wanted to savoir it but got bitten by then falling out of the habit of nightly reading. Overall, I liked this book. The potent mixture of travel journal and biography combined with hundreds of anecdotes about Japan was right up my alley.
At points I felt like Mod waxed on a bit more than necessary. It didn&amp;rsquo;t feel like filler, I felt that he struggled in points to condense his own thoughts, or that he wanted to convey something extremely pointed. Unable to find the exact notes to hit he danced around it instead. That&amp;rsquo;s not broadly true but there were segments that fell flat for me.
It may just be that Mod comes from such a different background than my own, although I have a lot of empathy for him (which is the mark of good writing), I didn&amp;rsquo;t always identify with him (the mark of extraordinary writing).&lt;/p&gt;
&lt;p&gt;For the photos alone, even the B&amp;amp;W ones in the mass market print this book is worth a read. But that&amp;rsquo;s true with any number of things about this book, the photos, the tour around the Kii peninsula, the factoids about Japan, I could recommend this book for any number of reasons and would heartily.&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9780593732540/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Finished reading: [Things Become Other Things: A Walking Memoir](https://micro.blog/books/9780593732540) by Craig Mod 📚

I slow rolled this one, it took about two months; it was such a pleasure to read I wanted to savoir it but got bitten by then falling out of the habit of nightly reading. Overall, I liked this book. The potent mixture of travel journal and biography combined with hundreds of anecdotes about Japan was right up my alley. 
At points I felt like Mod waxed on a bit more than necessary. It didn&#39;t feel like filler, I felt that he struggled in points to condense his own thoughts, or that he wanted to convey something extremely pointed. Unable to find the exact notes to hit he danced around it instead. That&#39;s not broadly true but there were segments that fell flat for me. 
It may just be that Mod comes from such a different background than my own, although I have a lot of empathy for him (which is the mark of good writing), I didn&#39;t always identify with him (the mark of extraordinary writing).

For the photos alone, even the B&amp;W ones in the mass market print this book is worth a read. But that&#39;s true with any number of things about this book, the photos, the tour around the Kii peninsula, the factoids about Japan, I could recommend this book for any number of reasons and would heartily. 
</source:markdown>
    </item>
    
    <item>
      <title>The Road Back to You... Do not read this book</title>
      <link>https://blog.travisfantina.com/2025/12/22/the-road-back-to-you.html</link>
      <pubDate>Mon, 22 Dec 2025 22:50:33 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2025/12/22/the-road-back-to-you.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9780830893270/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9780830893270&#34;&gt;The Road Back to You&lt;/a&gt; by Ian Morgan Cron 📚.&lt;/p&gt;
&lt;p&gt;There is an old expression, &amp;ldquo;it was a book but it should have been a pamphlet&amp;rdquo;. This book was an encyclopedia and should have been a business card. From the first page it&amp;rsquo;s clear that about 90% of the book is going to be filler. It&amp;rsquo;s charitable to say I &lt;em&gt;read&lt;/em&gt; it, skimmed may be a better term. After slogging through 30 pages I realized I was never going to make it through so I just read the descriptions and motivations for the 9 different types. Every page is crammed full of inane anecdotes, flat attempts at humor, and yes, the occasional joke that lands. At some point in the book the author starts listing famous people who are of a specific ennaegram type while providing the disclaimer; &amp;ldquo;these are just my observations&amp;rdquo;. This of course gives one pause: how complex is this system if you can watch a few interviews with someone you&amp;rsquo;ve never met and peg them as a 5? Do I really need to read a whole book on it then? Also one of the famous people listed is, literally, Bilbo Baggins; who I needn&amp;rsquo;t remind you &lt;em&gt;is not a person!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Writing aside, I tend to lump personality &amp;ldquo;types&amp;rdquo; in with horoscopes and birth order, I go into this with eyes open and a healthy dose of skepticism. This was recommended to me by my therapist, in a session, which gave it an order of legitimacy that other &amp;ldquo;personality tests&amp;rdquo; don&amp;rsquo;t have.  I &lt;em&gt;do&lt;/em&gt; see the value in applying framework and heuristics to human beings, especially ourselves. Although this book is a huge turn off, I wouldn&amp;rsquo;t want to throw the ennaegram out with the bathwater (and there is so much water in this book). The two page description of each trait was interesting and gave me insight into my motivations. If nothing else this book helped to focus on motivations rather than outcomes. Several months before I read this I took an ennaegram test online but there was too much weight given to &lt;em&gt;what&lt;/em&gt; I do not &lt;em&gt;why&lt;/em&gt; I do it.&lt;/p&gt;
&lt;p&gt;This book though&amp;hellip; I read it because my therapist recommended it, professionally.  Frankly if I didn&amp;rsquo;t like her as much as I do, I&amp;rsquo;d probably never speak to her again.&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9780830893270/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Finished reading: [The Road Back to You](https://micro.blog/books/9780830893270) by Ian Morgan Cron 📚. 

There is an old expression, &#34;it was a book but it should have been a pamphlet&#34;. This book was an encyclopedia and should have been a business card. From the first page it&#39;s clear that about 90% of the book is going to be filler. It&#39;s charitable to say I _read_ it, skimmed may be a better term. After slogging through 30 pages I realized I was never going to make it through so I just read the descriptions and motivations for the 9 different types. Every page is crammed full of inane anecdotes, flat attempts at humor, and yes, the occasional joke that lands. At some point in the book the author starts listing famous people who are of a specific ennaegram type while providing the disclaimer; &#34;these are just my observations&#34;. This of course gives one pause: how complex is this system if you can watch a few interviews with someone you&#39;ve never met and peg them as a 5? Do I really need to read a whole book on it then? Also one of the famous people listed is, literally, Bilbo Baggins; who I needn&#39;t remind you _is not a person!_

Writing aside, I tend to lump personality &#34;types&#34; in with horoscopes and birth order, I go into this with eyes open and a healthy dose of skepticism. This was recommended to me by my therapist, in a session, which gave it an order of legitimacy that other &#34;personality tests&#34; don&#39;t have.  I _do_ see the value in applying framework and heuristics to human beings, especially ourselves. Although this book is a huge turn off, I wouldn&#39;t want to throw the ennaegram out with the bathwater (and there is so much water in this book). The two page description of each trait was interesting and gave me insight into my motivations. If nothing else this book helped to focus on motivations rather than outcomes. Several months before I read this I took an ennaegram test online but there was too much weight given to _what_ I do not _why_ I do it. 

This book though... I read it because my therapist recommended it, professionally.  Frankly if I didn&#39;t like her as much as I do, I&#39;d probably never speak to her again.
</source:markdown>
    </item>
    
    <item>
      <title>Today I Learned ~D[2025-12-19]</title>
      <link>https://blog.travisfantina.com/2025/12/19/today-i-learned-d.html</link>
      <pubDate>Fri, 19 Dec 2025 11:03:46 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2025/12/19/today-i-learned-d.html</guid>
      <description>&lt;p&gt;When I work in Ruby, I really miss the pattern matching of Elixir. Today I discovered a few restructuring tricks for hashes that recreate some of that pattern matching goodness from Elixir. The TLDR is that you can use forward assignment.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;options &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;one&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;two&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;optional&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;}
&lt;span style=&#34;color:#75715e&#34;&gt;# then later &lt;/span&gt;
options &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;one&lt;/span&gt;:, &lt;span style=&#34;color:#e6db74&#34;&gt;two&lt;/span&gt;:, &lt;span style=&#34;color:#e6db74&#34;&gt;optional&lt;/span&gt;:}

$&amp;gt; one
&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
$&amp;gt; optional
&lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note the &lt;code&gt;=&amp;gt;&lt;/code&gt; rightward operator, aka Ruby&amp;rsquo;s old friend the hashrocket, this is called forward assignment.
You can make the above more robust with a &lt;code&gt;rescue&lt;/code&gt; clause:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;options &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;one&lt;/span&gt;:, &lt;span style=&#34;color:#e6db74&#34;&gt;two&lt;/span&gt;:, &lt;span style=&#34;color:#e6db74&#34;&gt;optional&lt;/span&gt;:} &lt;span style=&#34;color:#66d9ef&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the event that somebody passes in an options hash like &lt;code&gt;{one: 1, two: 2}&lt;/code&gt; this will prevent things from blowing up. When destructuring Ruby will return &lt;code&gt;nil&lt;/code&gt; for &lt;code&gt;optional&lt;/code&gt;.&lt;/p&gt;
</description>
      <source:markdown>When I work in Ruby, I really miss the pattern matching of Elixir. Today I discovered a few restructuring tricks for hashes that recreate some of that pattern matching goodness from Elixir. The TLDR is that you can use forward assignment.
```ruby 
options = {one: 1, two: 2, optional: false}
# then later 
options =&gt; {one:, two:, optional:}

$&gt; one
1
$&gt; optional
false
```
Note the `=&gt;` rightward operator, aka Ruby&#39;s old friend the hashrocket, this is called forward assignment.
You can make the above more robust with a `rescue` clause:
```ruby
options =&gt; {one:, two:, optional:} rescue nil 
```
In the event that somebody passes in an options hash like `{one: 1, two: 2}` this will prevent things from blowing up. When destructuring Ruby will return `nil` for `optional`.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2025/12/19/looking-through-my-zsh-configs.html</link>
      <pubDate>Fri, 19 Dec 2025 08:51:22 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2025/12/19/looking-through-my-zsh-configs.html</guid>
      <description>&lt;p&gt;Looking through my &lt;code&gt;zsh&lt;/code&gt; configs today, all sorts of hidden and forgotten gems.  Notably &lt;code&gt;clobberass&lt;/code&gt; for recompiling Rails assets:
&lt;code&gt;alias clobberass=&amp;quot;rails assets:clobber &amp;amp;&amp;amp; rails tmp:clear &amp;amp;&amp;amp; rails assets:precompile&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would think the name would have made this unforgettable!&lt;/p&gt;
</description>
      <source:markdown>Looking through my `zsh` configs today, all sorts of hidden and forgotten gems.  Notably `clobberass` for recompiling Rails assets:
`alias clobberass=&#34;rails assets:clobber &amp;&amp; rails tmp:clear &amp;&amp; rails assets:precompile&#34;`

You would think the name would have made this unforgettable! 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://blog.travisfantina.com/2025/12/11/first-big-snow.html</link>
      <pubDate>Thu, 11 Dec 2025 12:56:44 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2025/12/11/first-big-snow.html</guid>
      <description>&lt;p&gt;First &lt;em&gt;big&lt;/em&gt; snow&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/197914/2025/518b0de0fb.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;
</description>
      <source:markdown>First *big* snow

&lt;img src=&#34;https://cdn.uploads.micro.blog/197914/2025/518b0de0fb.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title>Rails: Monkey patching TimeZone logic</title>
      <link>https://blog.travisfantina.com/2025/12/10/rails-monkey-patching-timezone-logic.html</link>
      <pubDate>Wed, 10 Dec 2025 16:38:32 -0400</pubDate>
      
      <guid>http://tfantina.micro.blog/2025/12/10/rails-monkey-patching-timezone-logic.html</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been working with a third party API to import some data, but only if one of the fields &lt;code&gt;effective_date&lt;/code&gt; is today or in the past.  So with&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[ {
    data: {...},
    effective_date: now
  },
  {
    data: {...},
    effective_date: tomorrow
   }
]

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;the first record will be imported while the second record will be skipped. This is fairly easy to write a spec for, but for a project manager, or a tester who is manually doing experience testing it&amp;rsquo;s kind of hard to know if the record with an effective date &lt;code&gt;tomorrow&lt;/code&gt; is going to import when tomorrow comes.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure there are libraries for this and strategies but I put together a little monkey patch for this scenario:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;module&lt;/span&gt; ActiveSupport
	&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TimeZone&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; 
			&lt;span style=&#34;color:#66d9ef&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;now &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;day
		&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt; 
	&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt; 
&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I sent that over to the PM with instructions on where to put it (essentially, anywhere).  Now, I realize this is not a good idea, and will likely mess up all kinds of stuff in Rails but for a one off test it worked perfectly and is still faster than signing into the service (which we may or may not have access to) and updating the &lt;code&gt;effective_date&lt;/code&gt;.&lt;/p&gt;
</description>
      <source:markdown>I&#39;ve been working with a third party API to import some data, but only if one of the fields `effective_date` is today or in the past.  So with

``` 
[ {
    data: {...},
    effective_date: now
  },
  {
    data: {...},
    effective_date: tomorrow
   }
]

```

the first record will be imported while the second record will be skipped. This is fairly easy to write a spec for, but for a project manager, or a tester who is manually doing experience testing it&#39;s kind of hard to know if the record with an effective date `tomorrow` is going to import when tomorrow comes.

I&#39;m sure there are libraries for this and strategies but I put together a little monkey patch for this scenario:

```ruby
module ActiveSupport
	class TimeZone
		def now 
			Time.now + 1.day
		end 
	end 
end
```

I sent that over to the PM with instructions on where to put it (essentially, anywhere).  Now, I realize this is not a good idea, and will likely mess up all kinds of stuff in Rails but for a one off test it worked perfectly and is still faster than signing into the service (which we may or may not have access to) and updating the `effective_date`.
</source:markdown>
    </item>
    
  </channel>
</rss>
