<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="https://sandfox.me/assets/xml/atom.xsl" type="text/xsl media="all"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom">
  <title>Sand Fox (Posts about Misc)</title>
  <id>https://sandfox.me/misc.xml</id>
  <updated>2026-01-05T10:06:08Z</updated>
  <author>
    <name>Anton Smirnov</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://sandfox.me/misc.xml"/>
  <link rel="alternate" type="text/html" href="https://sandfox.me/misc.html"/>
  <generator uri="https://getnikola.com/">Nikola</generator>
  <entry>
    <title>Generating UUIDv7 in PostgreSQL 18</title>
    <id>https://sandfox.me/misc/pgsql-18-uuid-v7.html</id>
    <updated>2025-10-02T00:37:00+03:00</updated>
    <published>2025-10-02T00:37:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/pgsql-18-uuid-v7.html"/>
    <summary type="html">&lt;p&gt;&lt;a class="reference external" href="https://sandfox.me/misc/pgsql-uuid-v7.html"&gt;Another post&lt;/a&gt; just turned from a useful algorithm to madskillz.
Since PostgreSQL 18 the method is just:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_4e508138ff324ce581973ead89a56e9f-1" name="rest_code_4e508138ff324ce581973ead89a56e9f-1" href="https://sandfox.me/misc/pgsql-18-uuid-v7.html#rest_code_4e508138ff324ce581973ead89a56e9f-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuidv7&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</summary>
    <category term="postgres" label="postgres"/>
    <category term="sql" label="sql"/>
    <category term="uuid" label="uuid"/>
    <category term="uuidv7" label="uuidv7"/>
  </entry>
  <entry>
    <title>A Case for JSON6</title>
    <id>https://sandfox.me/misc/json6.html</id>
    <updated>2025-04-19T06:43:00+03:00</updated>
    <published>2025-04-19T06:43:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/json6.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;Just a required follow up &lt;a class="reference external" href="https://sandfox.me/misc/json5.html"&gt;for the previous post&lt;/a&gt;: JSON5 sucks too, like any other possible format.
Just look at this:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-1" name="rest_code_8b2f3c194d224029ba64edece311512e-1" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-2" name="rest_code_8b2f3c194d224029ba64edece311512e-2" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;certificate&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-3" name="rest_code_8b2f3c194d224029ba64edece311512e-3" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-3"&gt;&lt;/a&gt;&lt;span class="s2"&gt;-----BEGIN PRIVATE KEY-----\n\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-4" name="rest_code_8b2f3c194d224029ba64edece311512e-4" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-4"&gt;&lt;/a&gt;&lt;span class="s2"&gt;MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAt6wGEsfdarMo9KET\n\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-5" name="rest_code_8b2f3c194d224029ba64edece311512e-5" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-5"&gt;&lt;/a&gt;&lt;span class="s2"&gt;sNv9gpBWkGfhIq3/Jhr14+3d8TXprmTk/XWReo5DA3+SbB7ebF3xUtN/4K5lUkcG\n\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-6" name="rest_code_8b2f3c194d224029ba64edece311512e-6" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-6"&gt;&lt;/a&gt;&lt;span class="s2"&gt;1AbdywIDAQABAkBuMbfnFqAhvuFoeydMKYAcECrPMnOhEdENdIlnuTM53kBf18f/\n\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-7" name="rest_code_8b2f3c194d224029ba64edece311512e-7" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-7"&gt;&lt;/a&gt;&lt;span class="s2"&gt;KaWRWv8ViuZ31GpArY8cBzj0YG30vE49Il8ZAiEA7PpotzcpjNcMKnwEBm3q0c6H\n\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-8" name="rest_code_8b2f3c194d224029ba64edece311512e-8" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-8"&gt;&lt;/a&gt;&lt;span class="s2"&gt;3RRZD6i32Q/vXcQBeB0CIQDGaj4BJ/fuqiHvKzetfjhpOD+sYr3VDgEyjTcojhzZ\n\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-9" name="rest_code_8b2f3c194d224029ba64edece311512e-9" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-9"&gt;&lt;/a&gt;&lt;span class="s2"&gt;BwIgTBRYafmbrUuc7EbERAwlxxW3KJLPxOc1nsou3rt+fUECIQCjBGUfJAyDDUtG\n\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-10" name="rest_code_8b2f3c194d224029ba64edece311512e-10" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-10"&gt;&lt;/a&gt;&lt;span class="s2"&gt;KpbbN0n3wRwncRUQuCnps7Zu3pv6/wIhAIIcKty7O0T7auctlpMSdyw6vp0w818x\n\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-11" name="rest_code_8b2f3c194d224029ba64edece311512e-11" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-11"&gt;&lt;/a&gt;&lt;span class="s2"&gt;namFjg3cbBs4\n\&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-12" name="rest_code_8b2f3c194d224029ba64edece311512e-12" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-12"&gt;&lt;/a&gt;&lt;span class="s2"&gt;-----END PRIVATE KEY-----\n"&lt;/span&gt;
&lt;a id="rest_code_8b2f3c194d224029ba64edece311512e-13" name="rest_code_8b2f3c194d224029ba64edece311512e-13" href="https://sandfox.me/misc/json6.html#rest_code_8b2f3c194d224029ba64edece311512e-13"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/json6.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="configuration" label="configuration"/>
    <category term="json" label="json"/>
    <category term="json5" label="json5"/>
    <category term="json6" label="json6"/>
  </entry>
  <entry>
    <title>Is JSON5 a better JSON?</title>
    <id>https://sandfox.me/misc/json5.html</id>
    <updated>2025-04-16T06:10:00+03:00</updated>
    <published>2025-04-16T06:10:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/json5.html"/>
    <summary type="html">&lt;p&gt;Yes it is, at least when it comes to configuration files.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://sandfox.me/misc/file-formats-misuse.html"&gt;As I said earlier&lt;/a&gt;, JSON is a good serialization language but a terrible config language.
JSON5 builds on its strong sides: it's backwards compatible with JSON and is still a subset of JavaScript and
it is still relatively easy to parse.
Then it adds all the good stuff like unquoted keys, trailing commas, and a must-have thing for any config, comments.
For me it has only two real downsides, both really minor.
First is, as most config-oriented languages, it's tricky for automated modification, a feature it shares with TOML and YAML.
The second one is &lt;a class="reference external" href="https://github.com/d3x0r/JSON6"&gt;JSON6&lt;/a&gt;, while ES6 syntax sugar is nice, it's just a &lt;a class="reference external" href="https://xkcd.com/927/"&gt;15th competing standard&lt;/a&gt;, and the worst, competing with itself.&lt;/p&gt;</summary>
    <category term="configuration" label="configuration"/>
    <category term="json" label="json"/>
    <category term="json5" label="json5"/>
  </entry>
  <entry>
    <title>Ignoring SSL Errors in Chrome</title>
    <id>https://sandfox.me/misc/chrome-ignore-ssl-errors.html</id>
    <updated>2024-05-07T17:45:00+03:00</updated>
    <published>2024-05-07T17:45:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/chrome-ignore-ssl-errors.html"/>
    <summary type="html">&lt;p&gt;Very useful when you are developing anything WebAuthn related.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_a994603f6e6d4c16b6b9bcf174072221-1" name="rest_code_a994603f6e6d4c16b6b9bcf174072221-1" href="https://sandfox.me/misc/chrome-ignore-ssl-errors.html#rest_code_a994603f6e6d4c16b6b9bcf174072221-1"&gt;&lt;/a&gt;google-chrome --ignore-certificate-errors --user-data-dir=$HOME/tmp/chrome-dev
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;--ignore-certificate-errors&lt;/span&gt;&lt;/code&gt; will disable any SSL warnings like self-signed certs.&lt;/p&gt;
&lt;p&gt;&lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;--user-data-dir&lt;/span&gt;&lt;/code&gt; will isolate this unsafe Chrome instance from your regular browsing.&lt;/p&gt;</summary>
    <category term="chrome" label="chrome"/>
    <category term="ssl" label="ssl"/>
  </entry>
  <entry>
    <title>Generating UUIDv7 in PostgreSQL</title>
    <id>https://sandfox.me/misc/pgsql-uuid-v7.html</id>
    <updated>2025-10-02T00:43:00+03:00</updated>
    <published>2024-01-20T07:50:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/pgsql-uuid-v7.html"/>
    <summary type="html">&lt;aside class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Update: &lt;a class="reference external" href="https://sandfox.me/misc/pgsql-18-uuid-v7.html"&gt;PostgreSQL 18 added uuidv7() function.&lt;/a&gt;&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;But what about Postgres?
We can do it too.
Hopefully generators for new UUID versions will be added to uuid-ossp but it is not yet the case.&lt;/p&gt;
&lt;p&gt;The easiest way for now is to use pgcrypto, so let's start with that:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_fbf1735ea24d47f89731257bc8f03efd-1" name="rest_code_fbf1735ea24d47f89731257bc8f03efd-1" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_fbf1735ea24d47f89731257bc8f03efd-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extension&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pgcrypto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now port the solution from &lt;a class="reference external" href="https://sandfox.me/misc/mysql-uuid-v7.html"&gt;the MySQL post&lt;/a&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-1" name="rest_code_cd2c620983a04bd0a166042eb8951c71-1" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-2" name="rest_code_cd2c620983a04bd0a166042eb8951c71-2" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;epoch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;bigint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'12'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-3" name="rest_code_cd2c620983a04bd0a166042eb8951c71-3" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- version&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-4" name="rest_code_cd2c620983a04bd0a166042eb8951c71-4" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-5" name="rest_code_cd2c620983a04bd0a166042eb8951c71-5" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- variant bits&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-6" name="rest_code_cd2c620983a04bd0a166042eb8951c71-6" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-7" name="rest_code_cd2c620983a04bd0a166042eb8951c71-7" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Like with MariaDB, Postgres doesn't care about dashes on insertion,
so this value can be directly applied to a field with the uuid type.&lt;/p&gt;
&lt;p&gt;And again, to make it a formatted value, use a type cast:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-1" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-1" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-2" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-2" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;epoch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;bigint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'12'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-3" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-3" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-4" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-4" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-5" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-5" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-6" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-6" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))::&lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-7" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-7" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And to have a bytea value, use decode:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-1" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-1" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-2" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-2" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-3" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-3" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;epoch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;bigint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'12'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-4" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-4" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-5" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-5" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-6" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-6" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-7" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-7" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-8" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-8" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-9" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-9" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</summary>
    <category term="postgres" label="postgres"/>
    <category term="sql" label="sql"/>
    <category term="uuid" label="uuid"/>
    <category term="uuidv7" label="uuidv7"/>
  </entry>
  <entry>
    <title>Generating UUIDv7 in MySQL and MariaDB</title>
    <id>https://sandfox.me/misc/mysql-uuid-v7.html</id>
    <updated>2024-01-20T07:06:00+02:00</updated>
    <published>2024-01-20T07:06:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/mysql-uuid-v7.html"/>
    <summary type="html">&lt;p&gt;A quick way to generate UUIDv7 in MySQL 8 and MariaDB 11:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-1" name="rest_code_c37da9df485b40148f85e6698fa6f074-1" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-2" name="rest_code_c37da9df485b40148f85e6698fa6f074-2" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-3" name="rest_code_c37da9df485b40148f85e6698fa6f074-3" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;-- Use NOW(3) to get milliseconds&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-4" name="rest_code_c37da9df485b40148f85e6698fa6f074-4" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unix_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-5" name="rest_code_c37da9df485b40148f85e6698fa6f074-5" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- version&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-6" name="rest_code_c37da9df485b40148f85e6698fa6f074-6" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-7" name="rest_code_c37da9df485b40148f85e6698fa6f074-7" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- variant bits&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-8" name="rest_code_c37da9df485b40148f85e6698fa6f074-8" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-9" name="rest_code_c37da9df485b40148f85e6698fa6f074-9" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will generate a hex string that can be inserted into MariaDB's UUID type as is, dashes will be added automatically.&lt;/p&gt;
&lt;p&gt;If you need it as a binary value, wrap with unhex:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-1" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-1" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-2" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-2" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;unhex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-3" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-3" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unix_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-4" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-4" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-5" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-5" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-6" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-6" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-7" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-7" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-8" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-8" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you specifically need a valid RFC 4122 string representation, use a bin formatter function (MySQL) or a type cast (MariaDB):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-1" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-1" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;-- MySQL&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-2" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-2" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-2"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-3" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-3" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;bin_to_uuid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unhex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-4" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-4" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unix_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-5" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-5" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-6" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-6" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-7" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-7" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-8" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-8" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-9" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-9" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-10" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-10" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-10"&gt;&lt;/a&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-11" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-11" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-11"&gt;&lt;/a&gt;&lt;span class="c1"&gt;-- MariaDB&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-12" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-12" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-12"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-13" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-13" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;cast&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-14" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-14" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unix_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-15" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-15" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-16" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-16" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-17" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-17" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-18" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-18" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-19" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-19" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;UPD: &lt;a class="reference external" href="https://sandfox.me/misc/pgsql-uuid-v7.html"&gt;Postgres can do it too!&lt;/a&gt;&lt;/p&gt;</summary>
    <category term="mariadb" label="mariadb"/>
    <category term="mysql" label="mysql"/>
    <category term="sql" label="sql"/>
    <category term="uuid" label="uuid"/>
    <category term="uuidv7" label="uuidv7"/>
  </entry>
  <entry>
    <title>Running 32-bit Images in GitLab CI</title>
    <id>https://sandfox.me/misc/gitlab-ci-32bit.html</id>
    <updated>2023-09-07T16:03:00+03:00</updated>
    <published>2023-09-07T16:03:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/gitlab-ci-32bit.html"/>
    <summary type="html">&lt;p&gt;A thing that was not obvious to me and relatively hard to google
was a way to run a 32-bit docker image in the GitLab CI.
Docker itself has &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;--platform&lt;/span&gt;&lt;/code&gt; param but it is not exposed to the &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;.gitlab-ci.yml&lt;/span&gt;&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Luckily it's easy for the official Docker registry.
Apart from auto-selection images, it also contains per-architecture image repos with distinct package names.
You only need to specify a desired architecture prefix: like &lt;code class="docutils literal"&gt;amd64/php&lt;/code&gt; or &lt;code class="docutils literal"&gt;i386/php&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code yaml"&gt;&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-1" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-1" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-1"&gt;&lt;/a&gt;&lt;span class="nt"&gt;.test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-2" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-2" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-3" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-3" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;composer update&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-4" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-4" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;vendor/bin/phpunit&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-5" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-5" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-6" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-6" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-6"&gt;&lt;/a&gt;&lt;span class="nt"&gt;test-64bit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-7" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-7" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;.test&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-8" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-8" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;test&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-9" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-9" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;amd64/php:8&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-10" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-10" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-10"&gt;&lt;/a&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-11" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-11" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-11"&gt;&lt;/a&gt;&lt;span class="nt"&gt;test-32bit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-12" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-12" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;.test&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-13" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-13" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;test&lt;/span&gt;
&lt;a id="rest_code_5a3ade91a6bb43639ab4e233037c9469-14" name="rest_code_5a3ade91a6bb43639ab4e233037c9469-14" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_5a3ade91a6bb43639ab4e233037c9469-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;i386/php:8&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;or using the matrix:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code yaml"&gt;&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-1" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-1" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-1"&gt;&lt;/a&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-2" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-2" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;test&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-3" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-3" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;${ARCH}/php:${PHP_VERSION}&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-4" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-4" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-5" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-5" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;composer update&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-6" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-6" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;vendor/bin/phpunit&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-7" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-7" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;parallel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-8" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-8" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-9" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-9" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PHP_VERSION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-10" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-10" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;'7'&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-11" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-11" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;'8'&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-12" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-12" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;ARCH&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-13" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-13" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;amd64&lt;/span&gt;
&lt;a id="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-14" name="rest_code_a77058d3a39e403d8f636a0d3aeed7e3-14" href="https://sandfox.me/misc/gitlab-ci-32bit.html#rest_code_a77058d3a39e403d8f636a0d3aeed7e3-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;i386&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</summary>
    <category term="gitlab" label="gitlab"/>
    <category term="gitlab-ci" label="gitlab ci"/>
    <category term="i386" label="i386"/>
  </entry>
  <entry>
    <title>Resizing small EFI partition</title>
    <id>https://sandfox.me/misc/efi-fat32-parted.html</id>
    <updated>2023-04-17T15:46:00+03:00</updated>
    <published>2023-04-17T15:46:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/efi-fat32-parted.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;It started with the firmware failing to update because the EFI partition was low on free space.
(Dell, why do you need 70 MB on the EFI while also making it as small as 150 MB at the same time?)
Well, resizing the partition is the obvious solution except it ended in a wonderful error message:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_a91b1af3ffe74772bf847bb769247aa3-1" name="rest_code_a91b1af3ffe74772bf847bb769247aa3-1" href="https://sandfox.me/misc/efi-fat32-parted.html#rest_code_a91b1af3ffe74772bf847bb769247aa3-1"&gt;&lt;/a&gt;GNU parted cannot resize this partition to this size. We're working on it!
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(spoiler: &lt;a class="reference external" href="https://bugzilla.gnome.org/show_bug.cgi?id=649324#c7"&gt;they're not&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;In my case the GPT partition was resized, just the filesystem was not grown, I only needed to reformat it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/efi-fat32-parted.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="efi" label="efi"/>
    <category term="fat32" label="fat32"/>
    <category term="linux" label="linux"/>
    <category term="parted" label="parted"/>
    <category term="til" label="til"/>
    <category term="windows" label="windows"/>
  </entry>
  <entry>
    <title>GPL Incompatibility</title>
    <id>https://sandfox.me/misc/gpl-incompatibility.html</id>
    <updated>2023-02-22T16:28:00+02:00</updated>
    <published>2023-02-22T16:28:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/gpl-incompatibility.html"/>
    <summary type="html">&lt;p&gt;"GPL incompatibility" of a FOSS license is not a problem of the incompatible license, it's the problem of the GPL.
Most permissive licenses and file-based copyleft licenses can be used together in a project without any conflict and that's great.
It's GPL that doesn't like any neighbors.&lt;/p&gt;</summary>
    <category term="copyleft" label="copyleft"/>
    <category term="gnu-gpl" label="gnu gpl"/>
    <category term="opensource" label="opensource"/>
  </entry>
  <entry>
    <title>LGPL is a bad practice</title>
    <id>https://sandfox.me/misc/lgpl-bad-practice.html</id>
    <updated>2024-11-24T21:26:00+02:00</updated>
    <published>2023-01-02T16:30:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/lgpl-bad-practice.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;TL;DR: Don't use LGPL, avoid library-based copyleft in general.&lt;/p&gt;
&lt;aside class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Removed some incorrect arguments, for example about interpreters&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;The closest acceptable no-brainer replacement should be &lt;a class="reference external" href="https://www.gnu.org/licenses/gpl-3.0.en.html"&gt;GNU GPL&lt;/a&gt; with &lt;a class="reference external" href="https://www.gnu.org/software/classpath/license.html"&gt;Classpath Exception&lt;/a&gt;,
but the concept of library-based copyleft itself is flawed.
It's better to consider &lt;a class="reference external" href="https://www.mozilla.org/en-US/MPL/"&gt;MPL&lt;/a&gt; (less copyleft) or &lt;a class="reference external" href="https://www.gnu.org/licenses/gpl-3.0.en.html"&gt;full GPL&lt;/a&gt; (more copyleft).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/lgpl-bad-practice.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="copyleft" label="copyleft"/>
    <category term="lgpl" label="lgpl"/>
    <category term="licensing" label="licensing"/>
    <category term="opinion" label="opinion"/>
  </entry>
  <entry>
    <title>Python Type Hints</title>
    <id>https://sandfox.me/misc/python-type-hints.html</id>
    <updated>2022-06-22T04:52:00+03:00</updated>
    <published>2022-06-22T04:52:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/python-type-hints.html"/>
    <summary type="html">&lt;p&gt;Python type hints are garbage.&lt;/p&gt;</summary>
    <category term="python" label="python"/>
    <category term="short" label="short"/>
    <category term="types" label="types"/>
  </entry>
  <entry>
    <title>No Discrimination</title>
    <id>https://sandfox.me/misc/no-discrimination.html</id>
    <updated>2022-03-16T19:45:00+02:00</updated>
    <published>2022-03-16T19:45:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/no-discrimination.html"/>
    <summary type="html">&lt;p&gt;In these uneasy times I just want to remind to all these passionate activists around
that there are other ethical points beyond any given "today thing" even when the today thing is truly horrible.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://opensource.org/osd"&gt;The Open Source Definition&lt;/a&gt;
states that open-source software must comply with the following criteria:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. No Discrimination Against Persons or Groups&lt;/strong&gt;
The license must not discriminate against any person or group of persons.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. No Discrimination Against Fields of Endeavor&lt;/strong&gt;
The license must not restrict anyone from making use of the program in a specific field of endeavor.
For example, it may not restrict the program from being used in a business, or from being used for genetic research.&lt;/p&gt;
&lt;p&gt;So whether you are breaking these rules &lt;a class="reference external" href="https://wiki.debian.org/qa.debian.org/jsonevil"&gt;for fun&lt;/a&gt; or &lt;a class="reference external" href="https://github.com/jamiebuilds/license/blob/9cde49dc1321e07ecd5453a0f859cd976499c824/README.md"&gt;showing&lt;/a&gt; your political &lt;a class="reference external" href="https://github.com/terraform-aws-modules/terraform-aws-eks/pull/1937"&gt;position&lt;/a&gt;, you should remember:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;It is not as fun as it seems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You are not hurting the people you hate, you are hurting the open-source community.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</summary>
    <category term="open-source" label="open source"/>
    <category term="politics" label="politics"/>
  </entry>
  <entry>
    <title>sass-hsv</title>
    <id>https://sandfox.me/misc/sass-hsv.html</id>
    <updated>2021-08-28T05:56:00+03:00</updated>
    <published>2021-08-28T05:56:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/sass-hsv.html"/>
    <summary type="html">&lt;p&gt;I haven't found a nice small helper for &lt;a class="reference external" href="https://en.wikipedia.org/wiki/HSL_and_HSV"&gt;HSV/HSB&lt;/a&gt; color format like &lt;a class="reference external" href="https://lesscss.org/functions/#color-definition-hsv"&gt;the one LESS has&lt;/a&gt;
so I published my first npm package.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://sandfox.dev/js/sass-hsv.html"&gt;https://sandfox.dev/js/sass-hsv.html&lt;/a&gt;&lt;/p&gt;</summary>
    <category term="hsb" label="hsb"/>
    <category term="hsv" label="hsv"/>
    <category term="sass" label="sass"/>
  </entry>
  <entry>
    <title>TOML vs YAML</title>
    <id>https://sandfox.me/misc/toml-yaml.html</id>
    <updated>2021-08-10T03:41:00+03:00</updated>
    <published>2021-08-10T03:41:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/toml-yaml.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;So... Let's compare.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/toml-yaml.html"&gt;Read more…&lt;/a&gt; (3 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="configuration" label="configuration"/>
    <category term="toml" label="toml"/>
    <category term="yaml" label="yaml"/>
  </entry>
  <entry>
    <title>Open Letter in Support of Richard Stallman</title>
    <id>https://sandfox.me/misc/support-stallman.html</id>
    <updated>2021-03-24T15:51:00+02:00</updated>
    <published>2021-03-24T15:51:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/support-stallman.html"/>
    <summary type="html">&lt;p&gt;&lt;a class="reference external" href="https://rms-support-letter.github.io"&gt;https://rms-support-letter.github.io&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please even if you do not agree with him politically but still don't like that raging mobs decide for others, sign the letter here:
&lt;a class="reference external" href="https://github.com/rms-support-letter/rms-support-letter.github.io/pulls"&gt;https://github.com/rms-support-letter/rms-support-letter.github.io/pulls&lt;/a&gt;&lt;/p&gt;</summary>
    <category term="fsf" label="fsf"/>
    <category term="politics" label="politics"/>
    <category term="rms" label="rms"/>
    <category term="sjw" label="sjw"/>
  </entry>
  <entry>
    <title>OTP Links</title>
    <id>https://sandfox.me/misc/otp-links.html</id>
    <updated>2020-08-26T16:43:00+03:00</updated>
    <published>2020-08-26T16:43:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/otp-links.html"/>
    <summary type="html">&lt;p&gt;Have you ever seen an one time password link in a regular &lt;code class="docutils literal"&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tag?&lt;/p&gt;
&lt;p&gt;Here is an example TOTP link from Google Authenticator repo:&lt;/p&gt;
&lt;pre class="literal-block"&gt;otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&amp;amp;issuer=Example&lt;/pre&gt;
&lt;p&gt;The most familiar form for them is QR codes:&lt;/p&gt;
&lt;img alt="QR code for the link above" src="https://sandfox.me/images/misc/otp-links/qr.png"&gt;
&lt;p&gt;Which is a problem if you're alterady on your mobile device and you can't scan it.
For this case there is usually a text like "Please manually add the key &lt;code class="docutils literal"&gt;JBSW Y3DP EHPK 3PXP&lt;/code&gt; to your Authenticator app".
But what about the link itself?
Well, just try it on your phone: &lt;a class="reference external" href="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&amp;amp;issuer=Example"&gt;click me&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'm really shocked that it works perfectly and that I have never seen this simple and very web style solution in action.&lt;/p&gt;</summary>
    <category term="2factor" label="2factor"/>
    <category term="otp" label="otp"/>
  </entry>
  <entry>
    <title>Is NEON a Better YAML?</title>
    <id>https://sandfox.me/misc/neon-better-yaml.html</id>
    <updated>2020-06-15T22:18:00+03:00</updated>
    <published>2020-05-29T06:18:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/neon-better-yaml.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;Short answer: NO. If you know what I mean.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/neon-better-yaml.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="neon" label="neon"/>
    <category term="yaml" label="yaml"/>
  </entry>
  <entry>
    <title>What's Wrong with StrictYAML</title>
    <id>https://sandfox.me/misc/strictyaml-problems.html</id>
    <updated>2020-05-29T05:48:00+03:00</updated>
    <published>2020-05-29T05:48:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/strictyaml-problems.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;While I'm still delaying my position on TOML vs YAML holy war let's look at the &lt;a class="reference external" href="https://hitchdev.com/strictyaml/"&gt;StrictYAML&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;StrictYAML is a type-safe YAML parser that parses and validates a restricted subset of the YAML specification.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Seems great but &lt;a class="reference external" href="https://hitchdev.com/strictyaml/features-removed/"&gt;let's look at the removed features list&lt;/a&gt;, Implicit Typing to be precise:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/strictyaml-problems.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="strictyaml" label="strictyaml"/>
    <category term="yaml" label="yaml"/>
  </entry>
  <entry>
    <title>Free Domain Names</title>
    <id>https://sandfox.me/misc/free-domain-names.html</id>
    <updated>2020-04-07T09:23:00+03:00</updated>
    <published>2020-04-07T09:23:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/free-domain-names.html"/>
    <summary type="html">&lt;p&gt;Just created a list of free domain name zones that still work if you need one for whatever reason.&lt;/p&gt;
&lt;p&gt;You can find it here: &lt;a class="reference external" href="https://freedomainzones.netlify.app"&gt;freedomainzones.netlify.app&lt;/a&gt;.&lt;/p&gt;</summary>
    <category term="dns" label="dns"/>
  </entry>
  <entry>
    <title>I Don't Like JavaScript</title>
    <id>https://sandfox.me/misc/i-dont-like-js.html</id>
    <updated>2020-04-01T00:34:00+03:00</updated>
    <published>2020-04-01T00:34:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/i-dont-like-js.html"/>
    <summary type="html">&lt;figure&gt;&lt;img src="https://sandfox.me/images/misc/i-dont-like-js/leverage_big.jpg"&gt;&lt;/figure&gt; &lt;div&gt;&lt;p&gt;When you created a cool tool in a language you don't like.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/i-dont-like-js.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="fun" label="fun"/>
    <category term="javascript" label="javascript"/>
    <category term="leverage" label="leverage"/>
  </entry>
  <entry>
    <title>Small Personal Update</title>
    <id>https://sandfox.me/misc/personal-update-2020.html</id>
    <updated>2020-03-28T01:16:00+02:00</updated>
    <published>2020-03-28T01:16:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/personal-update-2020.html"/>
    <summary type="html">&lt;p&gt;A small personal update about services and social networks.&lt;/p&gt;
&lt;p&gt;I changed my username on &lt;a class="reference external" href="https://github.com/arokettu"&gt;GitHub&lt;/a&gt; and &lt;a class="reference external" href="https://packagist.org/users/arokettu"&gt;Packagist&lt;/a&gt; to &lt;strong&gt;@arokettu&lt;/strong&gt;.
I'm also on &lt;a class="reference external" href="https://keybase.io/arokettu"&gt;Keybase&lt;/a&gt; now.&lt;/p&gt;</summary>
    <category term="github" label="github"/>
    <category term="keybase" label="keybase"/>
    <category term="packagist" label="packagist"/>
    <category term="personal" label="personal"/>
    <category term="social" label="social"/>
  </entry>
  <entry>
    <title>GitHub Signatures in Gitea</title>
    <id>https://sandfox.me/misc/gitea-github.html</id>
    <updated>2019-11-15T02:16:00+02:00</updated>
    <published>2019-11-15T02:16:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/gitea-github.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;A small lifehack for the Gitea owners.
As you may know, &lt;a class="reference external" href="https://help.github.com/en/github/authenticating-to-github/about-commit-signature-verification"&gt;GitHub signs commits done with its web interface with its GPG key&lt;/a&gt;.
These commits may end up on your Gitea server.
It looks rather unconvincing:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/gitea-github.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="gitea" label="gitea"/>
    <category term="github" label="github"/>
    <category term="gpg" label="gpg"/>
    <category term="lifehack" label="lifehack"/>
  </entry>
  <entry>
    <title>Dark Theme for the Blog</title>
    <id>https://sandfox.me/misc/dark-theme.html</id>
    <updated>2019-10-26T15:40:00+03:00</updated>
    <published>2019-10-26T15:40:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/dark-theme.html"/>
    <summary type="html">&lt;figure&gt;&lt;img src="https://sandfox.me/images/misc/dark-theme/dark.png"&gt;&lt;/figure&gt; &lt;div&gt;&lt;p&gt;Just finalized the dark theme for the blog.
The idea is simple, use &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;prefers-color-scheme&lt;/span&gt;&lt;/code&gt; media query and wrap dark style elements with it:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code css"&gt;&lt;a id="rest_code_56e17ad5a6eb4f55a61ed1315f222004-1" name="rest_code_56e17ad5a6eb4f55a61ed1315f222004-1" href="https://sandfox.me/misc/dark-theme.html#rest_code_56e17ad5a6eb4f55a61ed1315f222004-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;media&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dark&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_56e17ad5a6eb4f55a61ed1315f222004-2" name="rest_code_56e17ad5a6eb4f55a61ed1315f222004-2" href="https://sandfox.me/misc/dark-theme.html#rest_code_56e17ad5a6eb4f55a61ed1315f222004-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_56e17ad5a6eb4f55a61ed1315f222004-3" name="rest_code_56e17ad5a6eb4f55a61ed1315f222004-3" href="https://sandfox.me/misc/dark-theme.html#rest_code_56e17ad5a6eb4f55a61ed1315f222004-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;#4be&lt;/span&gt;
&lt;a id="rest_code_56e17ad5a6eb4f55a61ed1315f222004-4" name="rest_code_56e17ad5a6eb4f55a61ed1315f222004-4" href="https://sandfox.me/misc/dark-theme.html#rest_code_56e17ad5a6eb4f55a61ed1315f222004-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_56e17ad5a6eb4f55a61ed1315f222004-5" name="rest_code_56e17ad5a6eb4f55a61ed1315f222004-5" href="https://sandfox.me/misc/dark-theme.html#rest_code_56e17ad5a6eb4f55a61ed1315f222004-5"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/dark-theme.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="blog" label="blog"/>
    <category term="css" label="css"/>
    <category term="dark-theme" label="dark theme"/>
    <category term="night-mode" label="night mode"/>
    <category term="prefers-color-scheme" label="prefers-color-scheme"/>
  </entry>
  <entry>
    <title>On Common Misuse of the File Formats</title>
    <id>https://sandfox.me/misc/file-formats-misuse.html</id>
    <updated>2019-10-25T18:20:00+03:00</updated>
    <published>2019-10-25T18:20:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/file-formats-misuse.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;A small rant about text file format holy wars.
I believe that most of the file formats that participate in these holy wars are rather good
and the most of the frustration comes from their misuse.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/file-formats-misuse.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="configuration" label="configuration"/>
    <category term="documents" label="documents"/>
    <category term="json" label="json"/>
    <category term="serialization" label="serialization"/>
    <category term="toml" label="toml"/>
    <category term="xml" label="xml"/>
    <category term="yaml" label="yaml"/>
  </entry>
  <entry>
    <title>Bitbucket to Remove Mercurial Support</title>
    <id>https://sandfox.me/misc/bitbucket-mercurial.html</id>
    <updated>2019-08-20T21:40:00+03:00</updated>
    <published>2019-08-20T21:40:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/bitbucket-mercurial.html"/>
    <summary type="html">&lt;p&gt;So Mercurial lost its biggest hosting platform.
Sad to see it because I always thought that it has much more usable CLI
and much better branching system for corporate development than git.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;After much consideration, we've decided to remove Mercurial support
from Bitbucket Cloud and its API.
Mercurial features and repositories will be officially removed
from Bitbucket and its API on June 1, 2020.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a class="reference external" href="https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket"&gt;https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket&lt;/a&gt;&lt;/p&gt;</summary>
    <category term="bitbucket" label="bitbucket"/>
    <category term="git" label="git"/>
    <category term="mercurial" label="mercurial"/>
  </entry>
  <entry>
    <title>sandfox.dev</title>
    <id>https://sandfox.me/misc/sandfox-dev.html</id>
    <updated>2019-04-19T17:35:00+03:00</updated>
    <published>2019-04-19T17:35:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/sandfox-dev.html"/>
    <summary type="html">&lt;p&gt;I created a website to host documentation for my public libraries
and to serve as a primary index for them&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://sandfox.dev/"&gt;https://sandfox.dev/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Created with &lt;a class="reference external" href="https://www.sphinx-doc.org/"&gt;Sphinx&lt;/a&gt; with a small script
that collects docs directories from project repos&lt;/p&gt;</summary>
    <category term="dev" label="dev"/>
    <category term="documentation" label="documentation"/>
    <category term="projects" label="projects"/>
    <category term="sphinx" label="sphinx"/>
  </entry>
  <entry>
    <title>Rejecting Contributor Covenant</title>
    <id>https://sandfox.me/misc/rejecting-contributor-covenant.html</id>
    <updated>2019-02-17T22:44:00+02:00</updated>
    <published>2019-02-17T22:44:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/rejecting-contributor-covenant.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;Partially as a follow-up for a &lt;a class="reference external" href="https://sandfox.me/misc/github-censorship.html"&gt;previous post&lt;/a&gt;.
As we now know, the sole purpose of the Contributor Covenant is &lt;a class="reference external" href="https://www.reddit.com/r/KotakuInAction/comments/47p3f5/ethics_shanley_kane_the_ceo_of_model_view_culture/"&gt;silencing SJW's political enemies&lt;/a&gt;.
Luckily Coraline admitted that CC is political so resisting it is also mere politics :D&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/rejecting-contributor-covenant.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="code-of-conduct" label="code of conduct"/>
    <category term="code-of-merit" label="code of merit"/>
    <category term="contributor-covenant" label="contributor covenant"/>
    <category term="politics" label="politics"/>
    <category term="sjw" label="sjw"/>
  </entry>
  <entry>
    <title>Political Censorship on GitHub</title>
    <id>https://sandfox.me/misc/github-censorship.html</id>
    <updated>2019-02-17T18:58:00+02:00</updated>
    <published>2019-02-17T18:58:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/github-censorship.html"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;I never expected this blog to go political but the situation became outrageous&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/github-censorship.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="github" label="github"/>
    <category term="politics" label="politics"/>
    <category term="sjw" label="sjw"/>
  </entry>
  <entry>
    <title>Farewell to Jekyll</title>
    <id>https://sandfox.me/misc/farewell-to-jekyll.html</id>
    <updated>2020-05-28T07:41:00+03:00</updated>
    <published>2019-01-18T08:59:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/farewell-to-jekyll.html"/>
    <summary type="html">&lt;p&gt;Just ported the blog to &lt;a class="reference external" href="https://getpelican.com/"&gt;Pelican&lt;/a&gt; and removed all Jekyll files. Currently it seems the most logical choice for me&lt;/p&gt;
&lt;p&gt;First, I started to use reST much more extensively than Markdown and I want a blog generator that supports it better&lt;/p&gt;
&lt;p&gt;Second is my new interest in Python&lt;/p&gt;
&lt;p&gt;Third, &lt;a class="reference external" href="https://getpelican.com/"&gt;Pelican&lt;/a&gt; seems to have much more features that I like compared to Jekyll and other static generators that
I tested, especially Python ones (however &lt;a class="reference external" href="https://getnikola.com/"&gt;Nikola&lt;/a&gt; also seems a good alternative but I had to stop at something)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;UPD (May 2020):&lt;/em&gt; Nikola feels waaay better.&lt;/p&gt;</summary>
    <category term="blog" label="blog"/>
    <category term="jekyll" label="jekyll"/>
    <category term="pelican" label="pelican"/>
  </entry>
  <entry>
    <title>Harold Finch Uses JetBrains IDE</title>
    <id>https://sandfox.me/misc/person-of-interest-jetbrains.html</id>
    <updated>2016-06-16T03:20:00+03:00</updated>
    <published>2016-06-16T03:20:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/person-of-interest-jetbrains.html"/>
    <summary type="html">&lt;figure&gt;&lt;img src="https://sandfox.me/images/misc/person-of-interest-jetbrains/ide.jpg"&gt;&lt;/figure&gt; &lt;div&gt;&lt;p&gt;Yay, Harold Finch from the &lt;a class="reference external" href="https://www.imdb.com/title/tt1839578/"&gt;Person of Interest&lt;/a&gt; was spotted using some JetBrains IDE.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sandfox.me/misc/person-of-interest-jetbrains.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</summary>
    <category term="fun" label="fun"/>
    <category term="jetbrains" label="jetbrains"/>
    <category term="person-of-interest" label="person of interest"/>
    <category term="phpstorm" label="phpstorm"/>
  </entry>
  <entry>
    <title>RubyMine Supports Markdown</title>
    <id>https://sandfox.me/misc/rubymine-markdown.html</id>
    <updated>2016-04-06T02:55:00+03:00</updated>
    <published>2016-04-06T02:55:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/rubymine-markdown.html"/>
    <summary type="html">&lt;p&gt;Wow. It seems &lt;a class="reference external" href="https://www.jetbrains.com/ruby/"&gt;RubyMine&lt;/a&gt; and other JetBrains products now have very nice
Markdown support. I haven't even noticed it until last article.
(I usually had &lt;a class="reference external" href="https://plugins.jetbrains.com/plugin/7896"&gt;MultiMarkdown&lt;/a&gt; plugin installed)&lt;/p&gt;
&lt;p&gt;Killer feature for me is that it allows working with code blocks of known
languages as if it was real code, even have code completion
and some basic inspections there.&lt;/p&gt;
&lt;p&gt;&lt;img alt="RubyMine Markdown" src="https://sandfox.me/images/misc/rubymine-markdown/rubymine_markdown.png"&gt;&lt;/p&gt;</summary>
    <category term="markdown" label="markdown"/>
    <category term="rubymine" label="rubymine"/>
  </entry>
  <entry>
    <title>Kinda Blog</title>
    <id>https://sandfox.me/misc/begin.html</id>
    <updated>2016-03-09T17:08:49+03:00</updated>
    <published>2016-03-09T17:08:49+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/begin.html"/>
    <summary type="html">&lt;p&gt;In the beginning there was a Gemfile. And the Gemfile contained &lt;code class="highlight ruby"&gt;&lt;span class="n"&gt;gem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'jekyll'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'~&amp;gt; 3.1'&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I may post some earlier notes with earlier dates&lt;/p&gt;</summary>
    <category term="blog" label="blog"/>
    <category term="jekyll" label="jekyll"/>
  </entry>
</feed>
