<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Postgresql on Marcello Barnaba</title>
    <link>https://sindro.me/it/tags/postgresql/</link>
    <description>Recent content in Postgresql on Marcello Barnaba</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Sat, 06 Apr 2019 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://sindro.me/it/tags/postgresql/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ChronoModel 1.0: sette anni per rilasciare</title>
      <link>https://sindro.me/it/posts/2019-04-06-chronomodel-one-dot-zero/</link>
      <pubDate>Sat, 06 Apr 2019 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2019-04-06-chronomodel-one-dot-zero/</guid>
      <description>&lt;div class=&#34;retrospective&#34;&gt;&#xA;  &lt;span class=&#34;retrospective-icon&#34;&gt;&amp;#x1f50d;&lt;/span&gt;&#xA;  &lt;div class=&#34;retrospective-body&#34;&gt;&#xA;    &lt;em&gt;Retrospettiva 2026&lt;/em&gt;&lt;br&gt;&#xA;    La mia ultima release e&amp;rsquo; stata la &lt;a href=&#34;https://rubygems.org/gems/chrono_model/versions/1.2.2&#34; target=&#34;_blank&#34;&gt;v1.2.2&lt;/a&gt; a maggio 2019. Dopo, &lt;a href=&#34;https://github.com/tagliala&#34; target=&#34;_blank&#34;&gt;Geremia Taglialatela&lt;/a&gt; ha preso in mano la manutenzione e l&amp;rsquo;ha portato alla &lt;a href=&#34;https://rubygems.org/gems/chrono_model/versions/5.0.0&#34; target=&#34;_blank&#34;&gt;v5.0.0&lt;/a&gt; con supporto per Rails 8.1 e Ruby 4.0. &lt;a href=&#34;https://rubygems.org/gems/chrono_model/versions&#34; target=&#34;_blank&#34;&gt;34 release&lt;/a&gt; in 14 anni, &lt;a href=&#34;https://github.com/ifad/chronomodel/stargazers&#34; target=&#34;_blank&#34;&gt;201 stelle&lt;/a&gt;, e ancora attivamente mantenuta. La &lt;a href=&#34;https://vjt.github.io/chronomodel/&#34; target=&#34;_blank&#34;&gt;documentazione API&lt;/a&gt; e il &lt;a href=&#34;https://github.com/ifad/chronomodel&#34; target=&#34;_blank&#34;&gt;repo&lt;/a&gt; sono entrambi vivi.&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Sette anni fa ho &lt;a href=&#34;https://sindro.me/it/posts/2012-05-07-chronomodel-time-travel-postgresql/&#34;&gt;rilasciato ChronoModel v0.1.0&lt;/a&gt; — una gem Ruby che da&amp;rsquo; ai modelli ActiveRecord capacita&amp;rsquo; temporali su PostgreSQL. Cinque giorni di hacking, trentasei commit, nessun test, e una confessione sul monkey-patching della costante dell&amp;rsquo;adapter PostgreSQL.&lt;/p&gt;&#xA;&lt;p&gt;Oggi taggo la &lt;a href=&#34;https://github.com/ifad/chronomodel/commit/aa07e74&#34; target=&#34;_blank&#34;&gt;v1.0.0&lt;/a&gt;. Il messaggio di commit e&amp;rsquo; &lt;code&gt;:gem: this is v1.0.0&lt;/code&gt;. Non proprio un discorso memorabile, ma il codice parla da solo: 506 commit, 31 release, 52 file modificati, 5.392 righe aggiunte. L&amp;rsquo;&lt;a href=&#34;https://sindro.me/it/posts/2012-05-07-chronomodel-time-travel-postgresql/#larchitettura&#34;&gt;idea di base&lt;/a&gt; — viste aggiornabili su &lt;code&gt;public&lt;/code&gt;, dati correnti su &lt;code&gt;temporal&lt;/code&gt;, storico su &lt;code&gt;history&lt;/code&gt; con table inheritance — non e&amp;rsquo; mai cambiata. Tutto il resto si&#39;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Eaco: il guardiano delle chiavi dell&#39;Ade</title>
      <link>https://sindro.me/it/posts/2015-02-28-eaco-authorization-ruby/</link>
      <pubDate>Sat, 28 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2015-02-28-eaco-authorization-ruby/</guid>
      <description>&lt;div class=&#34;retrospective&#34;&gt;&#xA;  &lt;span class=&#34;retrospective-icon&#34;&gt;&amp;#x1f50d;&lt;/span&gt;&#xA;  &lt;div class=&#34;retrospective-body&#34;&gt;&#xA;    &lt;em&gt;Retrospettiva 2026&lt;/em&gt;&lt;br&gt;&#xA;    Eaco ha raggiunto la &lt;a href=&#34;https://github.com/ifad/eaco/tree/v1.0.0&#34; target=&#34;_blank&#34;&gt;v1.0.0&lt;/a&gt; il 5 maggio 2016 — messaggio di commit: &amp;ldquo;This is v1.0.0. Two years in production.&amp;rdquo; E&amp;rsquo; cresciuto fino a 54 stelle, 8 fork, 240 commit, e ha gestito l&amp;rsquo;autorizzazione all&amp;rsquo;IFAD per altri cinque anni. &lt;a href=&#34;https://github.com/tagliala&#34; target=&#34;_blank&#34;&gt;Geremia Taglialatela&lt;/a&gt; l&amp;rsquo;ha preso in mano nel 2020 e l&amp;rsquo;ha mantenuto su Rails 6.0 e 6.1, poi ha &lt;a href=&#34;https://github.com/ifad/eaco/commit/19&#34; target=&#34;_blank&#34;&gt;modernizzato la CI&lt;/a&gt; a fine 2025. Il pattern ABAC con ACL-come-hash si e&amp;rsquo; rivelato esattamente la scelta giusta per un&amp;rsquo;organizzazione dove l&amp;rsquo;accesso e&amp;rsquo; determinato da posizione, dipartimento e gruppo di lavoro — non solo &amp;ldquo;admin o no.&amp;rdquo; Il &lt;a href=&#34;https://github.com/ifad/eaco&#34; target=&#34;_blank&#34;&gt;repo&lt;/a&gt; e&amp;rsquo; ancora online, e la &lt;a href=&#34;https://vjt.github.io/eaco/&#34; target=&#34;_blank&#34;&gt;documentazione YARD&lt;/a&gt; e&amp;rsquo; ancora tra le piu&amp;rsquo; complete che abbia mai scritto per una gem.&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ifad/scriptoria&#34; target=&#34;_blank&#34;&gt;Scriptoria&lt;/a&gt; e&amp;rsquo; un&amp;rsquo;applicazione interna di workflow all&amp;rsquo;&lt;a href=&#34;http://www.ifad.org/&#34; target=&#34;_blank&#34;&gt;IFAD&lt;/a&gt; — un&amp;rsquo;agenzia specializzata delle Nazioni Unite a Roma — e il suo layer di autorizzazione mi sta dando sui nervi da mesi. Il codice funziona, ma e&amp;rsquo; aggrovigliato nell&amp;rsquo;app. Ogni volta che dobbiamo aggiungere un nuovo ruolo o cambiare chi puo&amp;rsquo; accedere a cosa, stiamo editando codice applicativo che non dovrebbe occuparsi di semantica di autorizzazione.&lt;/p&gt;&#xA;&lt;p&gt;Cosi&amp;rsquo; otto giorni fa ho iniziato a estrarlo. Oggi rilascio il risultato: &lt;a href=&#34;https://github.com/ifad/eaco&#34; target=&#34;_blank&#34;&gt;Eaco&lt;/a&gt; — un framework di Attribute-Based Access Control per Ruby, che prende il nome da &lt;a href=&#34;http://it.wikipedia.org/wiki/Eaco&#34; target=&#34;_blank&#34;&gt;Eaco&lt;/a&gt;, il guardiano delle chiavi dell&amp;rsquo;Ade nella mitologia greca.&lt;/p&gt;&#xA;&lt;p&gt;172 commit. Cinque release. 100% di test coverage. E un sabato pomeriggio che non rivedro&amp;rsquo; mai piu&#39;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ChronoModel: viaggiare nel tempo con PostgreSQL</title>
      <link>https://sindro.me/it/posts/2012-05-07-chronomodel-time-travel-postgresql/</link>
      <pubDate>Mon, 07 May 2012 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2012-05-07-chronomodel-time-travel-postgresql/</guid>
      <description>&lt;div class=&#34;retrospective&#34;&gt;&#xA;  &lt;span class=&#34;retrospective-icon&#34;&gt;&amp;#x1f50d;&lt;/span&gt;&#xA;  &lt;div class=&#34;retrospective-body&#34;&gt;&#xA;    &lt;em&gt;Retrospettiva 2026&lt;/em&gt;&lt;br&gt;&#xA;    ChronoModel e&amp;rsquo; ancora vivo — 14 anni, 41 release, 201 stelle. Le regole sono state sostituite da trigger INSTEAD OF nella &lt;a href=&#34;https://github.com/ifad/chronomodel/tree/v0.6.0&#34; target=&#34;_blank&#34;&gt;v0.6&lt;/a&gt; (2014), l&amp;rsquo;hack &lt;code&gt;box()&lt;/code&gt;/&lt;code&gt;point()&lt;/code&gt; da colonne &lt;code&gt;tsrange&lt;/code&gt; native, e il monkey-patching da una corretta registrazione dell&amp;rsquo;adapter. &lt;a href=&#34;https://github.com/tagliala&#34; target=&#34;_blank&#34;&gt;Geremia Taglialatela&lt;/a&gt; ha preso in mano la manutenzione nel 2020 e l&amp;rsquo;ha portato alla &lt;a href=&#34;https://rubygems.org/gems/chrono_model/versions/5.0.0&#34; target=&#34;_blank&#34;&gt;v5.0.0&lt;/a&gt; con supporto per Rails 8.1 e Ruby 4.0. L&amp;rsquo;idea di base — viste aggiornabili su &lt;code&gt;public&lt;/code&gt;, dati correnti su &lt;code&gt;temporal&lt;/code&gt;, storico su &lt;code&gt;history&lt;/code&gt; con table inheritance — non e&amp;rsquo; mai cambiata. Il &lt;a href=&#34;https://github.com/ifad/chronomodel&#34; target=&#34;_blank&#34;&gt;repo&lt;/a&gt; e&amp;rsquo; attivo e mantenuto.&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Stiamo costruendo un CRM all&amp;rsquo;&lt;a href=&#34;http://www.ifad.org/&#34; target=&#34;_blank&#34;&gt;IFAD&lt;/a&gt; — un&amp;rsquo;agenzia specializzata delle Nazioni Unite a Roma — e uno dei requisiti chiave sono i dati temporali. Dobbiamo sapere come appariva un record in qualsiasi momento del passato. Qual era il budget di questo progetto il 15 marzo? Quando e&amp;rsquo; cambiato l&amp;rsquo;indirizzo di questo beneficiario? Chi ha approvato cosa, e come appariva il record in quel momento?&lt;/p&gt;&#xA;&lt;p&gt;Stavo prototipando un approccio basato sullo schema di PostgreSQL — viste, regole, table inheritance — e funzionava. Poi &lt;a href=&#34;https://github.com/amedeo&#34; target=&#34;_blank&#34;&gt;Amedeo&lt;/a&gt;, il mio capo, ci ha dato un&amp;rsquo;occhiata e ha detto: &amp;ldquo;Questa roba non deve vivere dentro il CRM. Fanne un framework riusabile.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Aveva ragione. Il pattern temporale non ha niente a che fare con la logica del CRM. Va in una gem.&lt;/p&gt;&#xA;&lt;p&gt;Cosi&amp;rsquo; ho avuto cinque giorni di concentrazione totale, e oggi rilascio &lt;a href=&#34;https://github.com/ifad/chronomodel&#34; target=&#34;_blank&#34;&gt;ChronoModel&lt;/a&gt; — un&amp;rsquo;estensione ActiveRecord che da&amp;rsquo; ai tuoi modelli capacita&amp;rsquo; temporali complete su PostgreSQL. Quello che Oracle ti vende come &lt;a href=&#34;http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_flashback.htm&#34; target=&#34;_blank&#34;&gt;Flashback Queries&lt;/a&gt; facendoti pagare fior di quattrini, noi lo facciamo con SQL standard su Postgres 9.0+.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
