{"title":"Tau's TILs","link":[{"@attributes":{"href":"https:\/\/tau.garden\/til\/atom.xml","rel":"self","type":"application\/atom+xml"}},{"@attributes":{"href":"https:\/\/tau.garden\/til\/"}}],"generator":"Zola","updated":"2025-12-08T00:00:00+00:00","id":"https:\/\/tau.garden\/til\/atom.xml","entry":[{"title":"Reset authors for multiple Git commits","published":"2025-12-08T00:00:00+00:00","updated":"2025-12-08T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/git-rebase-reset-author\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/git-rebase-reset-author\/","content":"<p>From <a href=\"https:\/\/jeffkreeftmeijer.com\/git-rebase-reset-author\/\">Jeff Kreeftmeijer<\/a>'s blog:<\/p>\n<blockquote>\n<p>If for some reason (like breaking your configuration) you need to reset the author for a number of git commits, <a href=\"https:\/\/stackoverflow.com\/questions\/16217801\/git-rebase-change-author#comment111719071_16218264\">rebase with <code>git-rebase --exec<\/code> and amend each commit<\/a>:<\/p>\n<pre data-lang=\"bash\" class=\"language-bash z-code\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">git<\/span><\/span><span class=\"z-meta z-function-call z-arguments z-shell\"> rebase main<span class=\"z-variable z-parameter z-option z-shell\"><span class=\"z-punctuation z-definition z-parameter z-shell\"> --<\/span>exec<\/span> <span class=\"z-string z-quoted z-single z-shell\"><span class=\"z-punctuation z-definition z-string z-begin z-shell\">&#39;<\/span>git commit --amend --reset-author --no-edit<span class=\"z-punctuation z-definition z-string z-end z-shell\">&#39;<\/span><\/span><\/span>\n<\/span><\/code><\/pre>\n<\/blockquote>\n"},{"title":"spellout converts numbers to number words","published":"2025-12-08T00:00:00+00:00","updated":"2025-12-08T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/spellout\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/spellout\/","content":"<p><code>spellout<\/code> is a handy utility that converts numbers to words:<\/p>\n<pre data-lang=\"bash\" class=\"language-bash z-code\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">$<\/span><\/span><span class=\"z-meta z-function-call z-arguments z-shell\"> spellout <span class=\"z-meta z-group z-expansion z-command z-parens z-shell\"><span class=\"z-punctuation z-definition z-variable z-shell\">$<\/span><span class=\"z-punctuation z-section z-parens z-begin z-shell\">(<\/span><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">seq<\/span><\/span><span class=\"z-meta z-function-call z-arguments z-shell\"> 1 10<\/span><span class=\"z-punctuation z-section z-parens z-end z-shell\">)<\/span><\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">one<\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">two<\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">three<\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">four<\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">five<\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">six<\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">seven<\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">eight<\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">nine<\/span><\/span>\n<\/span><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">ten<\/span><\/span>\n<\/span><\/code><\/pre>\n"},{"title":"Template Strings in Python","published":"2025-12-08T00:00:00+00:00","updated":"2025-12-08T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/template-strings\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/template-strings\/","content":"<p>Python has <a href=\"https:\/\/docs.python.org\/3\/library\/string.templatelib.html\">template strings<\/a> that allow you to process the\nstrings and interpolations before creating the final string:<\/p>\n<pre data-lang=\"python\" class=\"language-python z-code\"><code class=\"language-python\" data-lang=\"python\"><span class=\"z-source z-python\"><span class=\"z-meta z-statement z-import z-python\"><span class=\"z-keyword z-control z-import z-from z-python\">from<\/span><\/span><span class=\"z-meta z-statement z-import z-python\"><span class=\"z-meta z-import-source z-python\"> <span class=\"z-meta z-import-path z-python\"><span class=\"z-meta z-import-name z-python\">string<\/span><span class=\"z-punctuation z-accessor z-dot z-python\">.<\/span><span class=\"z-meta z-import-name z-python\">templatelib<\/span><\/span> <span class=\"z-meta z-statement z-import z-python\"><span class=\"z-keyword z-control z-import z-python\">import<\/span><\/span><\/span><\/span><span class=\"z-meta z-statement z-import z-python\"><\/span><span class=\"z-meta z-statement z-import z-python\"> <span class=\"z-meta z-generic-name z-python\">Interpolation<\/span><\/span>\n<\/span><span class=\"z-source z-python\">\n<\/span><span class=\"z-source z-python\"><span class=\"z-meta z-function z-python\"><span class=\"z-storage z-type z-function z-python\"><span class=\"z-keyword z-declaration z-function z-python\">def<\/span><\/span> <span class=\"z-entity z-name z-function z-python\"><span class=\"z-meta z-generic-name z-python\">quote<\/span><\/span><\/span><span class=\"z-meta z-function z-parameters z-python\"><span class=\"z-punctuation z-section z-parameters z-begin z-python\">(<\/span><\/span><span class=\"z-meta z-function z-parameters z-python\"><span class=\"z-variable z-parameter z-python\">input<\/span><\/span><span class=\"z-meta z-function z-parameters z-annotation z-python\"><span class=\"z-punctuation z-separator z-annotation z-parameter z-python\">:<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-support z-type z-python\">str<\/span><\/span> <span class=\"z-keyword z-operator z-arithmetic z-python\">|<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">Interpolation<\/span><\/span><\/span><span class=\"z-meta z-function z-parameters z-python\"><span class=\"z-punctuation z-section z-parameters z-end z-python\">)<\/span><\/span><span class=\"z-meta z-function z-python\"> <\/span><span class=\"z-meta z-function z-annotation z-return z-python\"><span class=\"z-punctuation z-separator z-annotation z-return z-python\">-&gt;<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-support z-type z-python\">str<\/span><\/span><\/span><span class=\"z-meta z-function z-python\"><span class=\"z-punctuation z-section z-function z-begin z-python\">:<\/span><\/span>\n<\/span><span class=\"z-source z-python\">    <span class=\"z-meta z-statement z-conditional z-if z-python\"><span class=\"z-keyword z-control z-conditional z-if z-python\">if<\/span> <span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-support z-function z-builtin z-python\">isinstance<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-support z-function z-builtin z-python\">input<\/span><\/span><span class=\"z-punctuation z-separator z-arguments z-python\">,<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">Interpolation<\/span><\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span><span class=\"z-punctuation z-section z-block z-conditional z-if z-python\">:<\/span><\/span>\n<\/span><span class=\"z-source z-python\">        <span class=\"z-keyword z-control z-flow z-return z-python\">return<\/span> <span class=\"z-storage z-type z-string z-python\">f<\/span><span class=\"z-meta z-string z-interpolated z-python\"><span class=\"z-string z-quoted z-double z-python\"><span class=\"z-punctuation z-definition z-string z-begin z-python\">&quot;<\/span><\/span><\/span><span class=\"z-meta z-string z-interpolated z-python\"><span class=\"z-string z-quoted z-double z-python\">\u00ab<\/span><span class=\"z-meta z-interpolation z-python\"><span class=\"z-punctuation z-section z-interpolation z-begin z-python\">{<\/span><span class=\"z-source z-python z-embedded\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-support z-function z-builtin z-python\">input<\/span><span class=\"z-punctuation z-accessor z-dot z-python\">.<\/span><span class=\"z-meta z-generic-name z-python\">value<\/span><\/span><\/span><\/span><span class=\"z-meta z-interpolation z-python\"><span class=\"z-punctuation z-section z-interpolation z-end z-python\">}<\/span><\/span><span class=\"z-string z-quoted z-double z-python\">\u00bb<span class=\"z-punctuation z-definition z-string z-end z-python\">&quot;<\/span><\/span><\/span>\n<\/span><span class=\"z-source z-python\">    <span class=\"z-meta z-statement z-conditional z-else z-python\"><span class=\"z-keyword z-control z-conditional z-else z-python\">else<\/span><span class=\"z-punctuation z-section z-block z-conditional z-else z-python\">:<\/span><\/span>\n<\/span><span class=\"z-source z-python\">        <span class=\"z-keyword z-control z-flow z-return z-python\">return<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-support z-function z-builtin z-python\">input<\/span><\/span>\n<\/span><span class=\"z-source z-python\">\n<\/span><span class=\"z-source z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">cheese<\/span><\/span> <span class=\"z-keyword z-operator z-assignment z-python\">=<\/span> <span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\"><span class=\"z-punctuation z-definition z-string z-begin z-python\">&#39;<\/span><\/span><\/span><span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\">Camembert<span class=\"z-punctuation z-definition z-string z-end z-python\">&#39;<\/span><\/span><\/span>\n<\/span><span class=\"z-source z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">cheese_2<\/span><\/span> <span class=\"z-keyword z-operator z-assignment z-python\">=<\/span> <span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\"><span class=\"z-punctuation z-definition z-string z-begin z-python\">&#39;<\/span><\/span><\/span><span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\">Brie<span class=\"z-punctuation z-definition z-string z-end z-python\">&#39;<\/span><\/span><\/span>\n<\/span><span class=\"z-source z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">template<\/span><\/span> <span class=\"z-keyword z-operator z-assignment z-python\">=<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">t<\/span><\/span><span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\"><span class=\"z-punctuation z-definition z-string z-begin z-python\">&#39;<\/span><\/span><\/span><span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\">Ah! We do have <span class=\"z-constant z-other z-placeholder z-python\"><span class=\"z-punctuation z-definition z-placeholder z-begin z-python\">{<\/span>cheese<span class=\"z-punctuation z-definition z-placeholder z-end z-python\">}<\/span><\/span>, but no <span class=\"z-constant z-other z-placeholder z-python\"><span class=\"z-punctuation z-definition z-placeholder z-begin z-python\">{<\/span>cheese_2<span class=\"z-punctuation z-definition z-placeholder z-end z-python\">}<\/span><\/span>.<span class=\"z-punctuation z-definition z-string z-end z-python\">&#39;<\/span><\/span><\/span>\n<\/span><span class=\"z-source z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">rendered<\/span><\/span> <span class=\"z-keyword z-operator z-assignment z-python\">=<\/span> <span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\"><span class=\"z-punctuation z-definition z-string z-begin z-python\">&#39;<\/span><\/span><\/span><span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\"><span class=\"z-punctuation z-definition z-string z-end z-python\">&#39;<\/span><\/span><\/span><span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-punctuation z-accessor z-dot z-python\">.<\/span><\/span><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-meta z-generic-name z-python\">join<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-meta z-generic-name z-python\">quote<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">v<\/span><\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span> <span class=\"z-meta z-expression z-generator z-python\"><span class=\"z-keyword z-control z-loop z-for z-generator z-python\">for<\/span> <span class=\"z-meta z-generic-name z-python\">v<\/span> <span class=\"z-keyword z-control z-loop z-for z-in z-python\">in<\/span><\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">template<\/span><\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span>\n<\/span><span class=\"z-source z-python\"><span class=\"z-comment z-line z-number-sign z-python\"><span class=\"z-punctuation z-definition z-comment z-python\">#<\/span> &gt;&gt;&gt; rendered\n<\/span><\/span><span class=\"z-source z-python\"><span class=\"z-comment z-line z-number-sign z-python\"><span class=\"z-punctuation z-definition z-comment z-python\">#<\/span> &#39;Ah! We do have \u00abCamembert\u00bb, but no \u00abBrie\u00bb.&#39;\n<\/span><\/span><\/code><\/pre>\n"},{"title":"<hgroup>: The Heading Group element","published":"2025-06-01T00:00:00+00:00","updated":"2025-06-01T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/hgroup\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/hgroup\/","content":"<p>The <code>&lt;hgroup&gt;<\/code> element allows grouping\na heading with another heading or a paragraph.<\/p>\n<p>This is really useful for subtitles or taglines:<\/p>\n<pre data-lang=\"html\" class=\"language-html z-code\"><code class=\"language-html\" data-lang=\"html\"><span class=\"z-text z-html z-basic\"><span class=\"z-meta z-tag z-other z-html\"><span class=\"z-punctuation z-definition z-tag z-begin z-html\">&lt;<\/span><\/span><span class=\"z-meta z-tag z-other z-html\"><span class=\"z-entity z-name z-tag z-other z-html\">hgroup<\/span><span class=\"z-punctuation z-definition z-tag z-end z-html\">&gt;<\/span><\/span>\n<\/span><span class=\"z-text z-html z-basic\">    <span class=\"z-meta z-tag z-block z-any z-html\"><span class=\"z-punctuation z-definition z-tag z-begin z-html\">&lt;<\/span><span class=\"z-entity z-name z-tag z-block z-any z-html\">h1<\/span><span class=\"z-punctuation z-definition z-tag z-end z-html\">&gt;<\/span><\/span><span class=\"z-constant z-character z-entity z-named z-html\"><span class=\"z-punctuation z-definition z-entity z-html\">&amp;<\/span>lt<span class=\"z-punctuation z-terminator z-entity z-html\">;<\/span><\/span>hgroup<span class=\"z-constant z-character z-entity z-named z-html\"><span class=\"z-punctuation z-definition z-entity z-html\">&amp;<\/span>gt<span class=\"z-punctuation z-terminator z-entity z-html\">;<\/span><\/span><span class=\"z-meta z-tag z-block z-any z-html\"><span class=\"z-punctuation z-definition z-tag z-begin z-html\">&lt;\/<\/span><span class=\"z-entity z-name z-tag z-block z-any z-html\">h1<\/span><span class=\"z-punctuation z-definition z-tag z-end z-html\">&gt;<\/span><\/span>\n<\/span><span class=\"z-text z-html z-basic\">    <span class=\"z-meta z-tag z-block z-any z-html\"><span class=\"z-punctuation z-definition z-tag z-begin z-html\">&lt;<\/span><span class=\"z-entity z-name z-tag z-block z-any z-html\">p<\/span><span class=\"z-punctuation z-definition z-tag z-end z-html\">&gt;<\/span><\/span>The Heading Group Element<span class=\"z-meta z-tag z-block z-any z-html\"><span class=\"z-punctuation z-definition z-tag z-begin z-html\">&lt;\/<\/span><span class=\"z-entity z-name z-tag z-block z-any z-html\">p<\/span><span class=\"z-punctuation z-definition z-tag z-end z-html\">&gt;<\/span><\/span>\n<\/span><span class=\"z-text z-html z-basic\"><span class=\"z-meta z-tag z-other z-html\"><span class=\"z-punctuation z-definition z-tag z-begin z-html\">&lt;\/<\/span><\/span><span class=\"z-meta z-tag z-other z-html\"><span class=\"z-entity z-name z-tag z-other z-html\">hgroup<\/span><span class=\"z-punctuation z-definition z-tag z-end z-html\">&gt;<\/span><\/span>\n<\/span><\/code><\/pre>\n"},{"title":"Creative Commons Symbols in Unicode","published":"2024-05-21T00:00:00+00:00","updated":"2024-05-21T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/cc-symbols\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/cc-symbols\/","content":"<p>There are <a href=\"https:\/\/creativecommons.org\/2020\/03\/18\/the-unicode-standard-now-includes-cc-license-symbols\/\">dedicated Unicode symbols<\/a> for Creative Commons licenses such as\nCC0 \/ share alike \/ attribution, etc.<\/p>\n<p><span style=\"font-size: 2em;\">\ud83c\udd0d \ud83c\udd0e \ud83c\udd0f \ud83c\udd6d \ud83c\udd6e \ud83c\udd6f<\/span><\/p>\n<p>(<a href=\"https:\/\/www.unicode.org\/charts\/PDF\/U1F100.pdf\">chart<\/a>)<\/p>\n"},{"title":"Disable User in GNOME Login Screen","published":"2023-12-21T00:00:00+00:00","updated":"2023-12-21T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/disable-user\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/disable-user\/","content":"<p>After digging around in <a href=\"https:\/\/gitlab.freedesktop.org\/accountsservice\/accountsservice\/-\/blob\/42aa71ac99bebe552c26dc03239b88c02fbe37c0\/src\/user-classify.c#L117\">AccountManager<\/a>'s source code for a bit\nI figured that the easiest way to hide\/disable a user in the login screen\nis to change the shell to <code>\/sbin\/nologin<\/code>:<\/p>\n<pre data-lang=\"sh\" class=\"language-sh z-code\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">sudo<\/span><\/span><span class=\"z-meta z-function-call z-arguments z-shell\"> chsh<span class=\"z-variable z-parameter z-option z-shell\"><span class=\"z-punctuation z-definition z-parameter z-shell\"> -<\/span>s<\/span> \/sbin\/nologin USERNAME<\/span>\n<\/span><\/code><\/pre>\n"},{"title":"Chunking A Large File","published":"2023-12-12T00:00:00+00:00","updated":"2023-12-12T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/split-cat\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/split-cat\/","content":"<p>Today I had the misfortune of having to transfer a file larger than 4\u202fGiB using a FAT32-formatted USB drive.<\/p>\n<p>Luckily there's the handy <a href=\"https:\/\/man7.org\/linux\/man-pages\/man1\/split.1.html\"><code>split<\/code><\/a> command that splits a file into multiple chunks.<\/p>\n<p>The following command splits the file into chunks that are each at most 4 GiB large:<\/p>\n<pre data-lang=\"sh\" class=\"language-sh z-code\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">split<\/span><\/span><span class=\"z-meta z-function-call z-arguments z-shell\"><span class=\"z-variable z-parameter z-option z-shell\"><span class=\"z-punctuation z-definition z-parameter z-shell\"> --<\/span>bytes<\/span> 4G large_file<\/span>\n<\/span><\/code><\/pre>\n<p>The chunks are named <code>xaa<\/code>, <code>xab<\/code>, <code>xac<\/code>, \u2026<\/p>\n<p>On the other side one can use <a href=\"https:\/\/man7.org\/linux\/man-pages\/man1\/cat.1.html\"><code>cat<\/code><\/a> to reconstruct the file from its chunks:<\/p>\n<pre data-lang=\"sh\" class=\"language-sh z-code\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"z-source z-shell z-bash\"><span class=\"z-meta z-function-call z-shell\"><span class=\"z-variable z-function z-shell\">cat<\/span><\/span><span class=\"z-meta z-function-call z-arguments z-shell\"> x<span class=\"z-keyword z-operator z-regexp z-quantifier z-shell\">*<\/span> <span class=\"z-keyword z-operator z-assignment z-redirection z-shell\">&gt;<\/span> large_file<\/span>\n<\/span><\/code><\/pre>\n"},{"title":"Python's int(x) Rounds Towards Zero","published":"2023-09-23T00:00:00+00:00","updated":"2023-09-23T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/python-int-rounding\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/python-int-rounding\/","content":"<p>I was surprised to learn that Python's <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#int\"><code>int<\/code><\/a> function rounds floats towards zero. <br \/>\nHere's the relevant excerpt from the <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#int\">official docs<\/a>:<\/p>\n<blockquote>\n<p>[\u2026] For floating point numbers, this truncates towards zero.<\/p>\n<\/blockquote>\n<figure>\n    \n    <figcaption>Example<\/figcaption>\n    \n    <pre data-lang=\"python\" class=\"language-python z-code\"><code class=\"language-python\" data-lang=\"python\"><span class=\"z-source z-python\"><span class=\"z-meta z-statement z-import z-python\"><span class=\"z-keyword z-control z-import z-from z-python\">from<\/span><\/span><span class=\"z-meta z-statement z-import z-python\"><span class=\"z-meta z-import-source z-python\"> <span class=\"z-meta z-import-path z-python\"><span class=\"z-meta z-import-name z-python\">math<\/span><\/span> <span class=\"z-meta z-statement z-import z-python\"><span class=\"z-keyword z-control z-import z-python\">import<\/span><\/span><\/span><\/span><span class=\"z-meta z-statement z-import z-python\"><\/span><span class=\"z-meta z-statement z-import z-python\"> <span class=\"z-meta z-generic-name z-python\">floor<\/span><span class=\"z-punctuation z-separator z-import-list z-python\">,<\/span> <span class=\"z-meta z-generic-name z-python\">ceil<\/span><\/span>\n<\/span><span class=\"z-source z-python\">\n<\/span><span class=\"z-source z-python\"><span class=\"z-keyword z-control z-flow z-assert z-python\">assert<\/span><span class=\"z-meta z-group z-python\"><span class=\"z-punctuation z-section z-group z-begin z-python\">(<\/span><span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-support z-type z-python\">int<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-keyword z-operator z-arithmetic z-python\">-<\/span><span class=\"z-constant z-numeric z-float z-decimal z-python\">0<span class=\"z-punctuation z-separator z-decimal z-python\">.<\/span>8<\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span> <span class=\"z-keyword z-operator z-comparison z-python\">==<\/span> <span class=\"z-constant z-numeric z-integer z-decimal z-python\">0<\/span><span class=\"z-punctuation z-section z-group z-end z-python\">)<\/span><\/span>\n<\/span><span class=\"z-source z-python\"><span class=\"z-keyword z-control z-flow z-assert z-python\">assert<\/span><span class=\"z-meta z-group z-python\"><span class=\"z-punctuation z-section z-group z-begin z-python\">(<\/span><span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-meta z-generic-name z-python\">floor<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-keyword z-operator z-arithmetic z-python\">-<\/span><span class=\"z-constant z-numeric z-float z-decimal z-python\">0<span class=\"z-punctuation z-separator z-decimal z-python\">.<\/span>8<\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span> <span class=\"z-keyword z-operator z-comparison z-python\">==<\/span> <span class=\"z-keyword z-operator z-arithmetic z-python\">-<\/span><span class=\"z-constant z-numeric z-integer z-decimal z-python\">1<\/span><span class=\"z-punctuation z-section z-group z-end z-python\">)<\/span><\/span>\n<\/span><span class=\"z-source z-python\"><span class=\"z-keyword z-control z-flow z-assert z-python\">assert<\/span><span class=\"z-meta z-group z-python\"><span class=\"z-punctuation z-section z-group z-begin z-python\">(<\/span><span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-meta z-generic-name z-python\">ceil<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-keyword z-operator z-arithmetic z-python\">-<\/span><span class=\"z-constant z-numeric z-float z-decimal z-python\">0<span class=\"z-punctuation z-separator z-decimal z-python\">.<\/span>8<\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span> <span class=\"z-keyword z-operator z-comparison z-python\">==<\/span> <span class=\"z-constant z-numeric z-integer z-decimal z-python\">0<\/span><span class=\"z-punctuation z-section z-group z-end z-python\">)<\/span><\/span>\n<\/span><\/code><\/pre>\n\n<\/figure>\n<p>If you want the floored result, you need to use <a href=\"https:\/\/docs.python.org\/3\/library\/math.html#math.floor\"><code>math.floor<\/code><\/a>.\nIf you want the ceilling result, you need to use <a href=\"https:\/\/docs.python.org\/3\/library\/math.html#math.ceil\"><code>math.ceil<\/code><\/a>.<\/p>\n"},{"title":"Fleurons","published":"2023-09-18T00:00:00+00:00","updated":"2023-09-18T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/fleurons\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/fleurons\/","content":"<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Fleuron_(typography)\">Fleurons<\/a> are a decorative typographical element that usually take the form\nof flowers or leaves.\nA use that I recently became fond of is the use of a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Fleuron_(typography)\">fleuron<\/a> as <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dinkus\">dinkus<\/a> to symbolize a logical break:<\/p>\n<hr \/>\n<p>Wiki Commons has a <a href=\"https:\/\/commons.wikimedia.org\/wiki\/Category:Fleurons_in_SVG\">handy list<\/a> of fleurons in SVG format.<\/p>\n"},{"title":"SQLite rowid as Foreign Key","published":"2023-09-10T00:00:00+00:00","updated":"2023-09-10T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/sqlite-rowid-fk\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/sqlite-rowid-fk\/","content":"<p>I was really excited <a href=\"https:\/\/tau.garden\/til\/sqlite-rowid\/\">when I first learned<\/a> about SQLite's <code>rowid<\/code> feature.<\/p>\n<p>There is however a downside to the automatic <code>rowid<\/code> column: It can't be used as part of foreign keys.\nQuoting from the <a href=\"https:\/\/www.sqlite.org\/rowidtable.html\">SQLite docs<\/a> (emphasis is mine):<\/p>\n<blockquote>\n<p>[\u2026]. The parent key must be a named column or columns in the parent table, <strong>not the rowid.<\/strong><\/p>\n<\/blockquote>\n<p>Fixing this downside is easy: Just add an <code>INTEGER PRIMARY KEY<\/code> column\u2014it will get aliased to the <code>rowid<\/code> column\n(See <a href=\"https:\/\/www.sqlite.org\/lang_createtable.html#rowids_and_the_integer_primary_key\">\u00abROWIDs and the INTEGER PRIMARY KEY\u00bb<\/a>):<\/p>\n<pre data-lang=\"sql\" class=\"language-sql z-code\"><code class=\"language-sql\" data-lang=\"sql\"><span class=\"z-source z-sql\"><span class=\"z-meta z-create z-sql\"><span class=\"z-keyword z-other z-create z-sql\">CREATE<\/span> <span class=\"z-keyword z-other z-sql\">TABLE<\/span> <\/span><span class=\"z-meta z-toc-list z-full-identifier z-sql\"><span class=\"z-entity z-name z-function z-sql\">example<\/span><\/span>\n<\/span><span class=\"z-source z-sql\">    ( id <span class=\"z-storage z-type z-sql\">INTEGER<\/span> <span class=\"z-storage z-modifier z-sql\">PRIMARY KEY<\/span>\n<\/span><span class=\"z-source z-sql\">    , ...\n<\/span><span class=\"z-source z-sql\">    );\n<\/span><\/code><\/pre>\n"},{"title":"Launching Sublime Merge via CLI","published":"2023-06-03T00:00:00+00:00","updated":"2023-06-03T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/sublime-merge\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/sublime-merge\/","content":"<p><a href=\"https:\/\/www.sublimemerge.com\/\">Sublime Merge<\/a> can be launched using the <code>smerge<\/code> command\nsimilar to the <code>subl<\/code> command for <a href=\"https:\/\/www.sublimetext.com\/\">Sublime Text<\/a>.<\/p>\n<p>Apart from the primary use case of opening a path by using <code>smerge &lt;path&gt;<\/code>\nyou can also open other tools such as blame (<code>smerge blame<\/code>) or log (<code>smerge log<\/code>).<\/p>\n"},{"title":"\u00ac\u03c6 \u2194 \u03c6 \u2192 \u22a5","published":"2023-04-15T00:00:00+00:00","updated":"2023-04-15T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/logical-not\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/logical-not\/","content":"<table><thead><tr><th>\u03c6<\/th><th>\u00ac\u03c6<\/th><th>\u03c6 \u2192 \u22a5<\/th><th>\u00ac\u03c6 \u2194 (\u03c6 \u2192 \u22a5)<\/th><\/tr><\/thead><tbody>\n<tr><td>\u22a4<\/td><td>\u22a5<\/td><td>\u22a5<\/td><td>\u22a4<\/td><\/tr>\n<tr><td>\u22a5<\/td><td>\u22a4<\/td><td>\u22a4<\/td><td>\u22a4<\/td><\/tr>\n<\/tbody><\/table>\n"},{"title":"0\u2070","published":"2022-10-23T00:00:00+00:00","updated":"2022-10-23T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/0-pow-0\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/0-pow-0\/","content":"<p>I have always assumed that $0^0$ is undefined with the same \u00abseverity\u00bb as $0 \\div 0$,\nbut in a lot of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Zero_to_the_power_of_zero#Discrete_exponents\">contexts<\/a>, it is actually defined as $0^0 = 1$. <br \/>\nMost notably to me in this category are the IEEE floating-point numbers <sup class=\"footnote-reference\"><a href=\"#1\">1<\/a><\/sup>.<\/p>\n<div class=\"footnote-definition\" id=\"1\"><sup class=\"footnote-definition-label\">1<\/sup>\n<p>There is technically the <code>powr<\/code> function, which treats $0^0$ as <code>NaN<\/code>, but most programming languages use the <code>pow<\/code> function.<\/p>\n<\/div>\n"},{"title":"Non-Constructive Proofs","published":"2022-10-23T00:00:00+00:00","updated":"2022-10-23T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/non-constructive-proofs\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/non-constructive-proofs\/","content":"<p>Non-constructive proofs are a neat trick to show the existence of something without providing an example.<\/p>\n<p>A <a href=\"https:\/\/web.archive.org\/web\/20141023060917\/http:\/\/www.users.waitrose.com\/~hindley\/Root2Proof2014.pdf\">common example<\/a> for such a proof is for the theorem \u00abthere exist two irrational numbers $a$ and $b$ such that $a^b$ is rational.\u00bb\nIt goes as follows:<\/p>\n<p>Let $a = b = \\sqrt{2}$<\/p>\n<p>$a^b = \\sqrt{2}^{\\sqrt{2}}$ is either rational or irrational<\/p>\n<ol>\n<li>If it is rational then our statement is proved.<\/li>\n<li>If it is irrational, then we can pick $a = \\sqrt{2}^{\\sqrt{2}}$. <br \/>\n$(\\sqrt{2}^{\\sqrt{2}})^{\\sqrt{2}} = \\sqrt{2}^2 = 2$, which is rational.<\/li>\n<\/ol>\n"},{"title":"Python doctest","published":"2022-10-23T00:00:00+00:00","updated":"2022-10-23T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/python-doctest\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/python-doctest\/","content":"<p>I've recently picked up Python again, and a neat feature that I ran across by chance is\nthe <code>doctest<\/code> module. <br \/>\nIt tests if the example in your docstrings actually do what you claim! <sup class=\"footnote-reference\"><a href=\"#1\">1<\/a><\/sup><\/p>\n<p>Let's say we have this neat <code>is_leap_year<\/code> function with a few examples. <br \/>\nNote that the examples are all prefixed with <code>&gt;&gt;&gt; <\/code> (That's from the interactive prompt.)<\/p>\n<pre data-lang=\"python\" class=\"language-python z-code\"><code class=\"language-python\" data-lang=\"python\"><span class=\"z-source z-python\"><span class=\"z-meta z-function z-python\"><span class=\"z-storage z-type z-function z-python\"><span class=\"z-keyword z-declaration z-function z-python\">def<\/span><\/span> <span class=\"z-entity z-name z-function z-python\"><span class=\"z-meta z-generic-name z-python\">_is_leap_year<\/span><\/span><\/span><span class=\"z-meta z-function z-parameters z-python\"><span class=\"z-punctuation z-section z-parameters z-begin z-python\">(<\/span><\/span><span class=\"z-meta z-function z-parameters z-python\"><span class=\"z-variable z-parameter z-python\">year<\/span><\/span><span class=\"z-meta z-function z-parameters z-annotation z-python\"><span class=\"z-punctuation z-separator z-annotation z-parameter z-python\">:<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-support z-type z-python\">int<\/span><\/span><\/span><span class=\"z-meta z-function z-parameters z-python\"><span class=\"z-punctuation z-section z-parameters z-end z-python\">)<\/span><\/span><span class=\"z-meta z-function z-python\"> <\/span><span class=\"z-meta z-function z-annotation z-return z-python\"><span class=\"z-punctuation z-separator z-annotation z-return z-python\">-&gt;<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-support z-type z-python\">bool<\/span><\/span><\/span><span class=\"z-meta z-function z-python\"><span class=\"z-punctuation z-section z-function z-begin z-python\">:<\/span><\/span>\n<\/span><span class=\"z-source z-python\">    <span class=\"z-comment z-block z-documentation z-python\"><span class=\"z-punctuation z-definition z-comment z-begin z-python\">&quot;&quot;&quot;<\/span>Determines if a year is a leap year.\n<\/span><\/span><span class=\"z-source z-python\"><span class=\"z-comment z-block z-documentation z-python\">    &gt;&gt;&gt; _is_leap_year(2020)\n<\/span><\/span><span class=\"z-source z-python\"><span class=\"z-comment z-block z-documentation z-python\">    True\n<\/span><\/span><span class=\"z-source z-python\"><span class=\"z-comment z-block z-documentation z-python\">    &gt;&gt;&gt; _is_leap_year(2100)\n<\/span><\/span><span class=\"z-source z-python\"><span class=\"z-comment z-block z-documentation z-python\">    False\n<\/span><\/span><span class=\"z-source z-python\"><span class=\"z-comment z-block z-documentation z-python\">    &gt;&gt;&gt; _is_leap_year(2000)\n<\/span><\/span><span class=\"z-source z-python\"><span class=\"z-comment z-block z-documentation z-python\">    True\n<\/span><\/span><span class=\"z-source z-python\"><span class=\"z-comment z-block z-documentation z-python\">    <span class=\"z-punctuation z-definition z-comment z-end z-python\">&quot;&quot;&quot;<\/span><\/span>\n<\/span><span class=\"z-source z-python\">    <span class=\"z-keyword z-control z-flow z-return z-python\">return<\/span> <span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-meta z-generic-name z-python\">divides<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-constant z-numeric z-integer z-decimal z-python\">400<\/span><span class=\"z-punctuation z-separator z-arguments z-python\">,<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">year<\/span><\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span> <span class=\"z-keyword z-operator z-logical z-python\">or<\/span> <span class=\"z-meta z-group z-python\"><span class=\"z-punctuation z-section z-group z-begin z-python\">(<\/span><span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-meta z-generic-name z-python\">divides<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-constant z-numeric z-integer z-decimal z-python\">4<\/span><span class=\"z-punctuation z-separator z-arguments z-python\">,<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">year<\/span><\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span> <span class=\"z-keyword z-operator z-logical z-python\">and<\/span> <span class=\"z-keyword z-operator z-logical z-python\">not<\/span> <span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-meta z-generic-name z-python\">divides<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-constant z-numeric z-integer z-decimal z-python\">100<\/span><span class=\"z-punctuation z-separator z-arguments z-python\">,<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">year<\/span><\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span><span class=\"z-punctuation z-section z-group z-end z-python\">)<\/span><\/span>\n<\/span><span class=\"z-source z-python\">\n<\/span><span class=\"z-source z-python\"><span class=\"z-meta z-statement z-conditional z-if z-python\"><span class=\"z-keyword z-control z-conditional z-if z-python\">if<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-support z-variable z-magic z-python\">__name__<\/span><\/span> <span class=\"z-keyword z-operator z-comparison z-python\">==<\/span> <span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\"><span class=\"z-punctuation z-definition z-string z-begin z-python\">&#39;<\/span><\/span><\/span><span class=\"z-meta z-string z-python\"><span class=\"z-string z-quoted z-single z-python\">__main__<span class=\"z-punctuation z-definition z-string z-end z-python\">&#39;<\/span><\/span><\/span><span class=\"z-punctuation z-section z-block z-conditional z-if z-python\">:<\/span><\/span>\n<\/span><span class=\"z-source z-python\">    <span class=\"z-meta z-statement z-import z-python\"><span class=\"z-keyword z-control z-import z-python\">import<\/span> <span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">doctest<\/span><\/span><\/span>\n<\/span><span class=\"z-source z-python\">    <span class=\"z-meta z-function-call z-python\"><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-meta z-generic-name z-python\">doctest<\/span><\/span><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-punctuation z-accessor z-dot z-python\">.<\/span><\/span><span class=\"z-meta z-qualified-name z-python\"><span class=\"z-variable z-function z-python\"><span class=\"z-meta z-generic-name z-python\">testmod<\/span><\/span><\/span><\/span><span class=\"z-meta z-function-call z-arguments z-python\"><span class=\"z-punctuation z-section z-arguments z-begin z-python\">(<\/span><span class=\"z-punctuation z-section z-arguments z-end z-python\">)<\/span><\/span>\n<\/span><\/code><\/pre>\n<p>Calling <code>doctest.testmod<\/code> looks at all the examples in this module, runs the code and compares the result.<\/p>\n<div class=\"footnote-definition\" id=\"1\"><sup class=\"footnote-definition-label\">1<\/sup>\n<p>This reminds me of the documentation tests feature in Rust (<a href=\"https:\/\/doc.rust-lang.org\/cargo\/commands\/cargo-test.html\"><code>cargo test<\/code><\/a>).<\/p>\n<\/div>\n"},{"title":"SQLite rowid","published":"2022-10-23T00:00:00+00:00","updated":"2022-10-23T00:00:00+00:00","author":{"name":"Unknown"},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/tau.garden\/til\/sqlite-rowid\/","type":"text\/html"}},"id":"https:\/\/tau.garden\/til\/sqlite-rowid\/","content":"<p>Tables in SQLite automatically get an auto-incrementing unique key called <a href=\"https:\/\/www.sqlite.org\/lang_createtable.html#rowid\"><code>rowid<\/code><\/a> <sup class=\"footnote-reference\"><a href=\"#1\">1<\/a><\/sup>. <br \/>\nSorting or searching by the <code>rowid<\/code> is really fast because the data is stored in a B-Tree structure.<\/p>\n<div class=\"footnote-definition\" id=\"1\"><sup class=\"footnote-definition-label\">1<\/sup>\n<p>Unless explicitly turned off using <code>WITHOUT ROWID<\/code>.<\/p>\n<\/div>\n"}]}