<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>k.sosnierz.me</title>
  <subtitle>Browse aymeric&#39;s, an independent, searchable archive of readable snapshots from followed feeds, preserved in Git with aggr.</subtitle>
  <id>https://aggr.aymericbeaumet.com/sources/k.sosnierz.me/</id>
  <link rel="alternate" type="text/html" href="https://aggr.aymericbeaumet.com/sources/k.sosnierz.me/"/>
  <link rel="self" type="application/atom+xml" href="https://aggr.aymericbeaumet.com/sources/k.sosnierz.me/atom.xml"/>
  <updated>2026-10-16T11:21:12+00:00</updated>
  <author>
    <name>aymeric&#39;s</name>
  </author>
  <generator version="2.0.0" uri="https://github.com/aymericbeaumet/aggr">aggr</generator>
  <entry>
    <id>urn:aggr:item:c7821331f1f4690def8d0b528a885089d62340a5</id>
    <title type="text">Making a 88x31 button book using ImageMagick</title>
    <link rel="alternate" type="text/html" href="https://aggr.aymericbeaumet.com/items/lobste-rs/2026-10-16-making-a-88x31-button-book-using-imagemagick/"/>
    <link rel="via" type="text/html" href="https://k.sosnierz.me/08-11-24/"/>
    <published>2026-10-16T11:21:12+00:00</published>
    <updated>2026-10-16T11:21:12+00:00</updated>
    <author>
      <name>k.sosnierz.me via nathell</name>
    </author>
    <category term="news"/>
    <category term="art"/>
    <source>
      <title>Lobsters: Top Stories of the Past Week</title>
    </source>
    <summary type="text">Comments</summary>
    <content type="html">&lt;h2&gt;(On a posix system)&lt;/h2&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;If you&#39;ve spent a considerable amount of time surfing the internet (and especially the Small Web), you might have seen an 88x31 button, or a few dozen of them. Some of them look like this:&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-picture article-picture-fallback&quot; style=&quot;--image-ratio:16 / 9&quot;&gt;&lt;img src=&quot;https://k.sosnierz.me/08-11-24/anybrowser.gif&quot; alt=&quot;Best viewed with any HTML browser&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; referrerpolicy=&quot;no-referrer&quot; class=&quot;progressive-image&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;However, the nice thing about computer displays is that they are able to cope with quickly changing visuals, hence some have animation:&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-picture article-picture-fallback&quot; style=&quot;--image-ratio:16 / 9&quot;&gt;&lt;img src=&quot;https://k.sosnierz.me/08-11-24/vim.gif&quot; alt=&quot;Edited with Vim — Improved and free — I love my editor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;low&quot; referrerpolicy=&quot;no-referrer&quot; class=&quot;progressive-image&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;I have noticed that among &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;http://textfiles.com/underconstruction/88x31/&quot;&gt;very numerous examples&lt;/a&gt;, i haven&#39;t seen any that&#39;d go very far in that axis. Usually the animations are there just to catch your eye, or to display several words in succession. But why not Moby Dick?&lt;/p&gt;
&lt;h2&gt;Size limitations&lt;/h2&gt;
&lt;p&gt;I was surprised to find that there seems to be no limit to the number of frames in a GIF file, and that the maximum resolution is 2^16 by 2^16, which is 4295 megapixels. We are of course limiting ourselves to just 88 by 31 pixels (or 0.003 megapixel), which might mean that regular text fonts don&#39;t get much space to shine — Arial, for example, seems to become legible at a minimum of 10 pixels height, which allows us to display about eleven words at once.&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-picture article-picture-fallback&quot; style=&quot;--image-ratio:16 / 9&quot;&gt;&lt;img src=&quot;https://k.sosnierz.me/08-11-24/arial.gif&quot; alt=&quot;One two three four five six seven eight nine ten eleven.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;low&quot; referrerpolicy=&quot;no-referrer&quot; class=&quot;progressive-image&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;Alternative fonts&lt;/h2&gt;
&lt;p&gt;As is often the case in computing, popular conventions end up upsetting someone enough that they develop an alternative way. In this case the alternative we&#39;re looking for are fonts designed to be legible at extremely low font sizes. There are some as small as 3x3, but personally I find &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://robey.lag.net/2010/01/23/tiny-monospace-font.html&quot;&gt;TomThumb&lt;/a&gt; to be the golden middle here. &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://k.sosnierz.me/08-11-24/tom-thumb.zip&quot;&gt;You can get TomThumb in truetype here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-picture article-picture-fallback&quot; style=&quot;--image-ratio:16 / 9&quot;&gt;&lt;img src=&quot;https://k.sosnierz.me/08-11-24/tom-thumb-new.png&quot; alt=&quot;All glyphs of the TomThumb font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;low&quot; referrerpolicy=&quot;no-referrer&quot; class=&quot;progressive-image&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;Getting Moby Dick&lt;/h2&gt;
&lt;p&gt;Firstly, you will want to obtain a plain text copy of the book&#39;s content. The methods might vary depending on what formats you have access to — &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://oldcomputer.info/hacks/diyscan/index.htm&quot;&gt;you can use OCR to grab the text from a physical book&lt;/a&gt;, with an .EPUB or .PDF you can convert them (or even copy text manually), or you might get lucky and find what you&#39;re looking already shipped as a plain text .txt file, as is the case with &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://www.gutenberg.org/ebooks/2701&quot;&gt;Moby Dick&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I downloaded the file and stripped the license at the start and the end. I also cropped off everything before the first chapter.&lt;/p&gt;
&lt;h2&gt;Formatting the work&lt;/h2&gt;
&lt;p&gt;If we take our button, which is 88x31, and our font, which is 6x4 (5x3 + spacing), we find that we can fit 5 rows of 22 characters each. ImageMagick, the tool we&#39;re going to use, is not very good at laying out text, so it&#39;d be wise to take care of that ourselves. There&#39;s several ways to do this, but the neatest one uses three posix tools: cat, tr and fold:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cat input.txt | tr &#39;\n&#39; &#39; &#39; | tr -d &#39;\r&#39; | fold -s -w 22 &amp;gt; 22w.txt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;cat is used to send the text to tr. tr translates each newline into a space, condensing the whole text file into one line. fold then takes that one line, splits it into multiple lines that are up to 22 characters wide (-w 22), and tries to avoid splitting words in half (-s).&lt;/p&gt;
&lt;p&gt;It&#39;s likely that at this point, your text looks fine. Mine was a bit garbled up, because fold doesn&#39;t handle multibyte characters well. I checked what non-ascii characters input.txt contained, and got rid of them using sed, like this: &lt;code&gt;sed -i &#39;s/”/&amp;quot;/g&#39;&lt;/code&gt;. The -i flag allows you to modify the file in place. You can find all the non-ascii characters using grep: &lt;code&gt;grep -P -n &#39;[^\x00-\x7F]&#39; input.txt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Of course, formatting is subjective. Depending on the kind of literary work, you might want to do it differently. I used &lt;code&gt;sed -i &#39;s/CHAPTER /\n\n\nCHAPTER /g&#39; input.txt&lt;/code&gt; to add some space between chapters, but chapters may be marked differently in the text you&#39;re using, or they might not be present at all.&lt;/p&gt;
&lt;h2&gt;And turning it into a GIF?&lt;/h2&gt;
&lt;p&gt;For this part, you&#39;re going to need &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://imagemagick.org/&quot;&gt;ImageMagick&lt;/a&gt; installed. Although it&#39;s likely that you already have it. We use the following command to generate the first version of our GIF file:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cat 22w.txt | convert -page 88x39+0+0 -background white -fill black -font tom.ttf -pointsize 6 text:- high.gif&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note that I have the actual tom.ttf file placed in the current working directory. It&#39;s mostly self explanatory. Convert takes the text from standard input and, just like that, puts it onto a GIF, frame by frame. Lovely. However, it seems to force some margin on the bottom of the image, which is why we drew the text on an image eight pixiels higher than we wanted. We&#39;re going to crop it now:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;convert high.gif -set delay 600 -coalesce -repage 0x0 -crop 88x31+0+0 +repage good.gif&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We&#39;re cropping those last eight pixels off, and also setting a reasonable delay between frames (in my experience, 6 seconds seems fine — please let me know if you disagree.&lt;/p&gt;
&lt;p&gt;Now good.gif should look somewhat like this:&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-picture article-picture-fallback&quot; style=&quot;--image-ratio:16 / 9&quot;&gt;&lt;img src=&quot;https://k.sosnierz.me/08-11-24/good.gif&quot; alt=&quot;First chapter of mobydying being shown frame by frame, at about a dozen words at once&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;low&quot; referrerpolicy=&quot;no-referrer&quot; class=&quot;progressive-image&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;Python bonus: centered text&lt;/h2&gt;
&lt;p&gt;I think it would be neat to have the text aligned to center, rather than having it stick so hard to the left edge. I wrote a quick python script for that, made it executable, then piped it&#39;s output into a file and once again regenerated the GIF.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot; data-language=&quot;Python&quot;&gt;&lt;span class=&quot;syntax-source syntax-python&quot;&gt;&lt;span class=&quot;syntax-comment syntax-line syntax-number-sign syntax-python&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-comment syntax-python&quot;&gt;#&lt;/span&gt;!/usr/bin/python3
&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-statement syntax-import syntax-python&quot;&gt;&lt;span class=&quot;syntax-keyword syntax-control syntax-import syntax-from syntax-python&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-statement syntax-import syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-import-source syntax-python&quot;&gt; &lt;span class=&quot;syntax-meta syntax-import-path syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-import-name syntax-python&quot;&gt;math&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-statement syntax-import syntax-python&quot;&gt;&lt;span class=&quot;syntax-keyword syntax-control syntax-import syntax-python&quot;&gt;import&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-statement syntax-import syntax-python&quot;&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-statement syntax-import syntax-python&quot;&gt; &lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;floor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-statement syntax-with syntax-python&quot;&gt;&lt;span class=&quot;syntax-keyword syntax-control syntax-flow syntax-with syntax-python&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-function-call syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-support syntax-function syntax-builtin syntax-python&quot;&gt;open&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-arguments syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-string syntax-python&quot;&gt;&lt;span class=&quot;syntax-string syntax-quoted syntax-double syntax-python&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-string syntax-python&quot;&gt;&lt;span class=&quot;syntax-string syntax-quoted syntax-double syntax-python&quot;&gt;22w.txt&lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-end syntax-python&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-statement syntax-with syntax-python&quot;&gt;&lt;span class=&quot;syntax-keyword syntax-control syntax-flow syntax-with syntax-as syntax-python&quot;&gt;as&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-statement syntax-with syntax-python&quot;&gt; &lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-with syntax-python&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;syntax-meta syntax-statement syntax-for syntax-python&quot;&gt;&lt;span class=&quot;syntax-keyword syntax-control syntax-flow syntax-for syntax-python&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-statement syntax-for syntax-python&quot;&gt;&lt;span class=&quot;syntax-keyword syntax-control syntax-flow syntax-for syntax-in syntax-python&quot;&gt;in&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-statement syntax-for syntax-python&quot;&gt; &lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;file&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-for syntax-python&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;i&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;syntax-keyword syntax-operator syntax-assignment syntax-python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-group syntax-python&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-begin syntax-python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;syntax-keyword syntax-operator syntax-arithmetic syntax-python&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-support syntax-function syntax-builtin syntax-python&quot;&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-arguments syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-dot syntax-python&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-python&quot;&gt;strip&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-end syntax-python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-keyword syntax-operator syntax-arithmetic syntax-python&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python&quot;&gt;2&lt;/span&gt;
        &lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;o&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;syntax-keyword syntax-operator syntax-assignment syntax-python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-string syntax-python&quot;&gt;&lt;span class=&quot;syntax-string syntax-quoted syntax-double syntax-python&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-string syntax-python&quot;&gt;&lt;span class=&quot;syntax-string syntax-quoted syntax-double syntax-python&quot;&gt; &lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-end syntax-python&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-keyword syntax-operator syntax-arithmetic syntax-python&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-python&quot;&gt;floor&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-arguments syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-keyword syntax-operator syntax-arithmetic syntax-python&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-dot syntax-python&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-python&quot;&gt;strip&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;syntax-meta syntax-function-call syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-support syntax-function syntax-builtin syntax-python&quot;&gt;print&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-arguments syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-qualified-name syntax-python&quot;&gt;&lt;span class=&quot;syntax-meta syntax-generic-name syntax-python&quot;&gt;o&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;picture class=&quot;article-picture article-picture-fallback&quot; style=&quot;--image-ratio:16 / 9&quot;&gt;&lt;img src=&quot;https://k.sosnierz.me/08-11-24/centered.gif&quot; alt=&quot;First chapter of mobydick being shown frame by frame at about a dozen words at once, but it looks neater&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;low&quot; referrerpolicy=&quot;no-referrer&quot; class=&quot;progressive-image&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;Moby Dick bonus: the full book&lt;/h2&gt;
&lt;p&gt;To save on bandwidth, the above-attached GIFs are examples consisting of only the first chapter. &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://k.sosnierz.me/08-11-24/full.gif&quot;&gt;Click here to wintess the full, 4.2 MB, over 19-hour long beauty&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
</feed>
