<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/b7fcc830b8a111f098fb64bdd96eedf2?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/b7fcc830b8a111f098fb64bdd96eedf2?s=80&d=mm&r=g 2x" width="40"/><cite class="fn"><a class="url" href="https://comparegamehosting.com/game/minecraft/" rel="ugc external nofollow">Alex Booth</a></cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/controlling-a-computercraft-turtle-remotely/#comment-3128">
- April 25, 2018 at 9:27 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">April 25, 2018 at 9:27 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Opening up ComputerCraft to the world using the http commands was an amazing idea from the developers!</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/beb5f01c762e3ac8276b7dfd7affa2ae?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/beb5f01c762e3ac8276b7dfd7affa2ae?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Mircea Popescu</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/ddos/#comment-2927">
- September 2, 2017 at 6:23 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">September 2, 2017 at 6:23 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Perhaps look into <a href="http://trilema.com/2015/mika-epstein-aka-ipstenu-is-a-thoroughly-clueless-poser/" rel="nofollow ugc">http://trilema.com/2015/mika-epstein-aka-ipstenu-is-a-thoroughly-clueless-poser/</a></p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/f9bddb456724b83c643af6f44ae32042?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/f9bddb456724b83c643af6f44ae32042?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">nortti</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/diy-keyboards-and-how-keyboards-work/#comment-10102">
- June 9, 2023 at 2:43 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">June 9, 2023 at 2:43 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>“And better keyboards can detect multiple keys being pressed at once (N-key rollover), which I think they do by having a completely separate wire to each key.”</p>
<p>You can keep a matrix arrangement and have N-key rollover by putting a diode in series with every switch</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/eb8e07689c4f342e5ae296cab95f609e?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/eb8e07689c4f342e5ae296cab95f609e?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Carin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/hack-a-day-day-04-lashed-table/#comment-10633">
- November 6, 2023 at 8:44 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">November 6, 2023 at 8:44 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Cool!</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/3a4733166894a30fe613838ecaaa1e95?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/3a4733166894a30fe613838ecaaa1e95?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">eduardz</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/#comment-2842">
- November 23, 2016 at 12:18 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">November 23, 2016 at 12:18 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Hello,</p>
<p>Can you implement quota support from postgressql?</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/#comment-2873">
- April 5, 2017 at 7:05 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">April 5, 2017 at 7:05 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Not sure if this is “will you do” or “is it possible”. I will not do anything to set up quota–I have one user (me) so it doesn’t make sense. I encourage you to link if you do.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/04f9049f74277e447eee4569ac61563c?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/04f9049f74277e447eee4569ac61563c?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Tudor</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/#comment-2852">
- February 23, 2017 at 2:45 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">February 23, 2017 at 2:45 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>In the “useradd -d -M -d /var/mail/vmail –shell=/usr/bin/nologin -u 5000 -g vmail vmail“ I think the first “-d“ shouldn’t be there</p>
<p>Thanks for the post</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/#comment-2874">
- April 5, 2017 at 7:06 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">April 5, 2017 at 7:06 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Thanks for the corrections, glad you found it useful.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/04f9049f74277e447eee4569ac61563c?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/04f9049f74277e447eee4569ac61563c?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Tudor</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/#comment-2853">
- February 23, 2017 at 2:54 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">February 23, 2017 at 2:54 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Also, for Postgresql the correct commands to create users are:<br/>
CREATE USER postfix PASSWORD ‘XXX’;<br/>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/04f9049f74277e447eee4569ac61563c?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/04f9049f74277e447eee4569ac61563c?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Tudor</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/#comment-2854">
- February 23, 2017 at 3:22 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">February 23, 2017 at 3:22 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Also, there shouldn’t be any comma after the VALUES (<br/>
‘za3k’,<br/>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/9fe7e715cb7615380e65ebecc7c703b6?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/9fe7e715cb7615380e65ebecc7c703b6?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">S</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/#comment-3135">
- May 12, 2018 at 9:36 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">May 12, 2018 at 9:36 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>A little sloppy – you should have simply shown the entire contents of each file one by one, with descriptions in comments or whatever, instead of breaking them up into snippets – and there are a few errors and omissions (I can’t recall which ones now)<br/>
However, using this guide and some googling, I was able to get a mailserver working – which is more than I can say for any other guide; so, thanks.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/0f57bc0e6352458280cb89f50df560eb?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/0f57bc0e6352458280cb89f50df560eb?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Korilius</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/#comment-4730">
- July 17, 2021 at 3:56 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 17, 2021 at 3:56 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>A guide that could have been great but tripped at the finish line. A lot of errors in SQL and elsewhere along with step reorganization.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/#comment-4731">
- July 17, 2021 at 4:52 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 17, 2021 at 4:52 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>If you have any specific errors you can mention, I’d be happy to fix stuff.</p>
<p>But yeah, that’s the problem with writing a guide after you do something instead of during/before.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/a1e9d69b1d8b0a1fd3a90f03a40de162?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a1e9d69b1d8b0a1fd3a90f03a40de162?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">JenniferRM</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/introducing-the-zorchpad-display-demo/#comment-11338">
- April 20, 2024 at 9:52 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">April 20, 2024 at 9:52 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Very cool idea. I was imagining form factors, and was thinking briefly about somehow having a sort of laptop arrangement where an e-ink screen is visible through glass when it is closed and in some kind of “protective storage mode”, and then visible directly from “the proper side of the e-ink screen” after it opens up. This is probably impossible using default hardware options, but searching around to confirm this lead to some interesting links and unusual design demos.</p>
<p>Here’s ~12 year old thread from someone who wants a computer to use in an off grid cabin.<br/>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/introducing-the-zorchpad-display-demo/#comment-11339">
- April 20, 2024 at 10:24 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">April 20, 2024 at 10:24 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Try using numbers, instead of words! It works better for comparing power usage.</p>
<p>The “low-power computer” someone wants from 12 years ago should be 3W. The Zorchpad is designed to run at 0.001W.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/477bf018c52601e86d3a8aa07c6f9392?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/477bf018c52601e86d3a8aa07c6f9392?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">jiacheng hao</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/making-a-hardware-random-number-generator/#comment-11135">
- March 3, 2024 at 9:04 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">March 3, 2024 at 9:04 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Hello, I think you are truely right about the TRNG. I am a researcher who specializes in designing TRNG. And now I have a TRNG chip with PCB support USB2.0. And the speed can be up to 30Mbps. It can pass NIST 800-22 and 800-90B. Are you interested in that? Looking forward to your reply!!</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/making-a-hardware-random-number-generator/#comment-11136">
- March 3, 2024 at 11:36 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">March 3, 2024 at 11:36 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Interested in what way?</p>
<p>Is your TRNG open-source?</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/35cf1c8d20becce42e768c4bade3a1dc?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/35cf1c8d20becce42e768c4bade3a1dc?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">anon</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/making-my-finances-public/#comment-3253">
- February 7, 2019 at 6:19 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">February 7, 2019 at 6:19 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>is offline</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/making-my-finances-public/#comment-3882">
- December 17, 2019 at 7:41 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 17, 2019 at 7:41 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Yeah, my export broke a while back. This should be fixed indefinitely, but covers 2011-2016 only now.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/bc00b207944738af582a91c5352ef163?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/bc00b207944738af582a91c5352ef163?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Joel</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-4165">
- August 2, 2020 at 12:52 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">August 2, 2020 at 12:52 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>There appears to be a typo in step 5A. The page currently reads “lpinfo -m” but I believe should be “lpinfo -v”. Per the man page, the m flag lists drivers and the v flag lists devices. </p>
<p>The USB device can be found in the -v output for step 5A but the driver can be found in the -m output for step 5B.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/b99febd9d3367d3306947a8e159c6445?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/b99febd9d3367d3306947a8e159c6445?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Scott</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-4213">
- October 19, 2020 at 5:10 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">October 19, 2020 at 5:10 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Thank you so very much for this. Worked like a charm.</p>
<p>Any tips on how to print over the network?</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/dffffda5bcb146c22d8be3ef6b4f6554?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/dffffda5bcb146c22d8be3ef6b4f6554?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">rathesun01</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-4277">
- December 8, 2020 at 6:44 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 8, 2020 at 6:44 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Awesome post. Joel is supposedly correct. It should have been “lpinfo -v” in the step 5A.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-4279">
- December 12, 2020 at 1:31 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 12, 2020 at 1:31 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Corrected ‘lpinfo -v’, thanks.<br>
No clue how to print over the network, sorry. That’s actually why I set up a raspberry pi to connect to the printer instead–it’s my wifi interface.</br></p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/b851d521102349bbfd71e7d7df8bef44?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/b851d521102349bbfd71e7d7df8bef44?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">steve</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-4319">
- December 30, 2020 at 9:05 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 30, 2020 at 9:05 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>I have the Brother HL-2270DW, and I had to install from source to get it to work. I’m not using USB, but port forwarding across via NAT to another internal network. </p>
<p>I just used the cups admin pages to complete setting things up. Before using this package, I picked some other closely related printer. It was printing the page, sucking it back in, then finally printing. Not terrible, but I was annoyed. Now it’s perfect!</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/1edcef9b0ab9150a7e2d22cd18371609?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/1edcef9b0ab9150a7e2d22cd18371609?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Jaye Horn</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-4380">
- February 18, 2021 at 3:19 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">February 18, 2021 at 3:19 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>How did you install from source? and how did you do the port forwarding across via NAT to another internal network? I’m new to this so any help would be very much appreciated.</p>
<p>Thank you.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/173de507afbda1d5933757bb66e863eb?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/173de507afbda1d5933757bb66e863eb?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Job</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-4341">
- January 20, 2021 at 8:09 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">January 20, 2021 at 8:09 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Would this work for brother hl-l2395dw scanner?</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/285bae3dce12d6c20103a5ff2a4bcddb?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/285bae3dce12d6c20103a5ff2a4bcddb?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Adam Trask</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-5178">
- October 22, 2021 at 5:00 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">October 22, 2021 at 5:00 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Thanks so much for posting this. This helped get my HL-L2300D working properly.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/76652e498c8089550fa09056625d5899?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/76652e498c8089550fa09056625d5899?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Danial Foster</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-5438">
- December 24, 2021 at 1:39 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 24, 2021 at 1:39 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>>>> (author’s shameful note: if you’re not looking, I find it<br>
>>>surprisingly easy to plug USB B into the ethernet jack)</br></p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/fe520de38df86000b2d31661c96cd28a?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/fe520de38df86000b2d31661c96cd28a?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">J Bot</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/#comment-9429">
- January 3, 2023 at 4:03 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">January 3, 2023 at 4:03 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Any steps to do this with a wifi connected HL-2270DW? Thanks!</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/d8731f49a2e6864ba0675c4639ef08be?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/d8731f49a2e6864ba0675c4639ef08be?s=80&d=mm&r=g 2x" width="40"/><cite class="fn"><a class="url" href="https://scruss.com/blog/" rel="ugc external nofollow">scruss</a></cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/qr-backup/#comment-4642">
- June 9, 2021 at 6:58 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">June 9, 2021 at 6:58 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>nice! I’ve played with some similar ideas, using tar and QR Code output to a thermal printer. The used to be a thing (Twibright Optar, IIRC: it’s fallen off the web) that made full-page scannable codes that got an almost useful data density. But they weren’t QR Codes, so needed their own decoder.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/qr-backup/#comment-4644">
- June 9, 2021 at 2:06 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">June 9, 2021 at 2:06 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Actually, I link to it in the <a href="https://github.com/za3k/qr-backup/blob/master/docs/FAQ.md#what-other-paper-backup-projects-exist" rel="nofollow ugc">FAQ</a>, it’s still on the <a href="http://ronja.twibright.com/optar/" rel="nofollow ugc">web</a>. An even better version was “Paperback”, but it’s 9 years unmaintained–I’m looking into seeing if there is a maintained Linux port. Both do a lot of things right, even if they have a slightly different goal (high data density, over ease-of-use and foolproof restore).</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/qr-backup/#comment-4645">
- June 9, 2021 at 2:08 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">June 9, 2021 at 2:08 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Also, feel free to recommend me a good, cheap thermal printer. I tried to do a “poloroid” thing (take a picture of yourself with webcam, immediately print to thermal) and found that mine was shit and the heat overexposed unrelated parts. QR codes seem like a reasonable application, although I’d be concerned about the longevity of thermal paper for backups (can easily fade in heat).</p>
<p>Edit: If I remember correctly, I wanted to make a thermal-paper typewriter for a zine?</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/eca9fbfd1236b50f30aec8f7b95ef721?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/eca9fbfd1236b50f30aec8f7b95ef721?s=80&d=mm&r=g 2x" width="40"/><cite class="fn"><a class="url" href="https://2dminecraft.wordpress.com/" rel="ugc external nofollow">Susan Tatun</a></cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/#comment-511">
- July 10, 2015 at 11:31 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 10, 2015 at 11:31 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>An honest sharing about downloaing and installing Minecraft 1.6.4. I followed what you mentioned and did it sucessfully. Right now, I’m playing with my little son and guiding him what the terrific things are. Anyway, thanks a lot!</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/f386723170dfc6b4122c5fe2d95ffbbc?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/f386723170dfc6b4122c5fe2d95ffbbc?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lynx</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/#comment-1349">
- August 18, 2015 at 1:44 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">August 18, 2015 at 1:44 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>4am installs of servers is hard, and trying to follow the Forge wiki which is inaccurate at best is hard.<br/>
You got me from dead brick to running box in ten minutes. Thank you.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/746c2f840c27e88b6bfc135f14f4ce37?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/746c2f840c27e88b6bfc135f14f4ce37?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">crumpuppet</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/#comment-1689">
- September 7, 2015 at 1:32 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">September 7, 2015 at 1:32 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Thanks so much! I’ve been looking for these steps for a while, and finally found something that works. Would have been first prize if it could be used along with a GUI frontend like mcmyadmin, but oh well 🙂</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/48ef5c93bf1c483b50dd6b7977b9cbca?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/48ef5c93bf1c483b50dd6b7977b9cbca?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Dave</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/#comment-2468">
- November 9, 2015 at 11:14 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">November 9, 2015 at 11:14 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Same here. Searched all over found yours and running in moments. My kids have been hooked on mods and wanted a server. I have VMware and can spin up a linux box up in moments. This was so easy. Thanks.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/8cc161f40686089efa4eb9dbc381797a?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/8cc161f40686089efa4eb9dbc381797a?s=80&d=mm&r=g 2x" width="40"/><cite class="fn"><a class="url" href="https://minecraftapkmod.info/download/" rel="ugc external nofollow">Minecraft Lover</a></cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/#comment-3252">
- February 6, 2019 at 6:40 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">February 6, 2019 at 6:40 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Very useful information, Thank you</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/4589e18b3dc7de6c60e1b99052acfe1d?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/4589e18b3dc7de6c60e1b99052acfe1d?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Leon</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/#comment-3788">
- September 9, 2019 at 9:12 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">September 9, 2019 at 9:12 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Does anyone here have problems with installing the mods. Im donwloading them in the mods directory with the cmd “wget” and nothing works.Am i using the wrong command or what?</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/b50d1a265153eee6da6b41d6adc0eb06?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/b50d1a265153eee6da6b41d6adc0eb06?s=80&d=mm&r=g 2x" width="40"/><cite class="fn"><a class="url" href="https://apkstreet.com/roblox-mod-apk-unlimited-robux/" rel="ugc external nofollow">Rajan Chopra</a></cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/#comment-3991">
- March 7, 2020 at 3:45 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">March 7, 2020 at 3:45 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Thanks for sharing Minecraft. Can you also share Roblox Apk?</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/52ce2f57adc4ccfc3e6274ffa86bf9f5?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/52ce2f57adc4ccfc3e6274ffa86bf9f5?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Neckbeard Hater</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/#comment-4324">
- January 4, 2021 at 10:22 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">January 4, 2021 at 10:22 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>“one of the devs seems actively hostile around providing help to …”</p>
<p>this is so typical of the linux community. really. And I am a developer with 20 years experience, I hate the Linux community.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/cca172695c7bd7d417748775c1ad3c36?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/cca172695c7bd7d417748775c1ad3c36?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">nat</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/#comment-9669">
- February 14, 2023 at 9:17 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">February 14, 2023 at 9:17 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>lol this tutorial still works 9 years later thanks tho this helped so much!!</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/aa5d8a139b96dc7b082a50ca2446deff?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/aa5d8a139b96dc7b082a50ca2446deff?s=80&d=mm&r=g 2x" width="40"/><cite class="fn"><a class="url" href="http://sometimesicook.net" rel="ugc external nofollow">Tricia</a></cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/steak-tartare-3/#comment-255">
- May 21, 2015 at 8:14 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">May 21, 2015 at 8:14 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>So tasty! Enjoyed our month of obsessing over the recipe ^u^</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/47e66dd3a830fdd2a6191a4100425b43?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/47e66dd3a830fdd2a6191a4100425b43?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Mario Enriquez</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/streaming-linux-twitch-using-ffmpeg-and-alsa/#comment-4344">
- January 22, 2021 at 7:31 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">January 22, 2021 at 7:31 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Thanks for your post.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/111a7d8b594d7707bc1f5e3085c069ef?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/111a7d8b594d7707bc1f5e3085c069ef?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">JSevilla</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/terminal-goal-rationality-techniques/#comment-631">
- July 18, 2015 at 9:42 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 18, 2015 at 9:42 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Cool stuff. I liked exactboxing and DTOT.<br/>
Murphy jitsu has potential.<br/>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/aa5d8a139b96dc7b082a50ca2446deff?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/aa5d8a139b96dc7b082a50ca2446deff?s=80&d=mm&r=g 2x" width="40"/><cite class="fn"><a class="url" href="http://sometimesicook.net" rel="ugc external nofollow">Tricia</a></cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/time-management-optimizers-satisficers-minimizers/#comment-2451">
- November 5, 2015 at 9:13 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">November 5, 2015 at 9:13 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Very nice! I often find myself automatically optimizing – the easiest place to see this is in Animal Crossing where I’ll keep a large cash of items for when villagers might ask for one. The idea is to always be prepared (I blame girl scouts). I suppose the negative to this behavior is that it could lead to hording if left unchecked.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/aa5d8a139b96dc7b082a50ca2446deff?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/aa5d8a139b96dc7b082a50ca2446deff?s=80&d=mm&r=g 2x" width="40"/><cite class="fn"><a class="url" href="http://sometimesicook.net" rel="ugc external nofollow">Tricia</a></cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/tiny-cute-vampire-bat/#comment-2426">
- October 14, 2015 at 10:03 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">October 14, 2015 at 10:03 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Hola! Just wanted to let you know I nominated you for the Versatile Blogger Award, for more info check out my post here: <a href="http://sometimesicook.net/2015/10/14/the-versatile-blogger-award/" rel="nofollow ugc">http://sometimesicook.net/2015/10/14/the-versatile-blogger-award/</a> 😀</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4739">
- July 23, 2021 at 1:47 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 23, 2021 at 1:47 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>“Now we assign a binary codewords of length N, to each length N in the list.<br>
1:1100,2:0,4:1101,16:1110,17:1111,18:10”</br></p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4740">
- July 23, 2021 at 2:04 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 23, 2021 at 2:04 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>This is what “Aside: Storing Prefix-Free Codewords as a List of Lengths” is about. The algorithm is given in full in RFC 1952 if you’re interested. Basically, the code words are assigned starting from 0 (or 00, 000, etc) and counting up. As each code is assigned, anything with that code as a prefix becomes unavailable. They are assigned first from shortest to longest, and in the case of ties from leftmost in the list to rightmost in the list.</p>
<p>So first we assign 0 to the length-1 codeword (0 is lower than 1), then we assign the length-2 codeword 10 (the lowest length-2 code that doesn’t have a prefix 0), and finally we assign the length-4 codewords from left to right (1100, 1101, 1110, 1111 don’t have a prefix of 0 or 10 — they are the lowest and only codewords without one of those prefixes).</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4741">
- July 23, 2021 at 3:23 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 23, 2021 at 3:23 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>I think I get it now, as soon as I resolve some compile errors I’m gonna try this:</p>
<p>“`<br>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4742">
- July 25, 2021 at 12:06 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 25, 2021 at 12:06 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Took me a while to understand that I was supposed to be building the tree at this point (although this method compared to what I though of and implemented prior to this is inefficient both in space and speed, also terribly um-intuitive). I’m having trouble understanding exactly how to extract some literals you’ve mentioned:</p>
<p>“Byte 18-19: 0000001 10 0110101. Copy “0” code length 11-138 times<br>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4743">
- July 25, 2021 at 12:27 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 25, 2021 at 12:27 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>I’m glad this was helpful, but you should really go read RFC 1951 if you’re going to build a decoder. This isn’t meant to be a stand-alone guide.</p>
<p>I’m pretty lost trying to follow this comment, sorry. To clarify, for the “dynamic” compression, you first extract the CODING TABLE for the literals (the step you’re talking about). Then, you use the coding table to decompress the actual stream of content. It’s a two-step process, which is why it’s so complex.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4744">
- July 25, 2021 at 1:41 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 25, 2021 at 1:41 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Was gonna say I already had the code table but when it printed it seems the codes got corrupted, I’ll have to get back to you after fixing it. Anyways I find “guides” that don’t use real examples as this one does to be confusing sometimes, usually where it matters, that’s why I was consulting you who provided those key examples, I got a heck of a lot further with your guide than any other I’ve tried following which didn’t give the byte by byte, bit by bit example.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4745">
- July 25, 2021 at 1:50 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 25, 2021 at 1:50 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Turned out I was just printing the wrong value, here’s my current output:</p>
<p>`<br/>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4747">
- July 25, 2021 at 3:32 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 25, 2021 at 3:32 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Never min, I think I know where the literals are coming from now, I did this:</p>
<p><code><br/>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4756">
- July 26, 2021 at 7:46 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 26, 2021 at 7:46 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>I think I still misunderstood something somewhere, I’ve done a detailed post on the section I think I’ve mis-interpreted here:</p>
<p><a href="https://cboard.cprogramming.com/c-programming/180462-increment-gone-wrong.html#post1302477" rel="nofollow ugc">https://cboard.cprogramming.com/c-programming/180462-increment-gone-wrong.html#post1302477</a></p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4757">
- July 26, 2021 at 8:54 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 26, 2021 at 8:54 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Sorry, I don’t really want to help someone else debug code or output. I’d suggest following the links at the start of the blog article. Check out ‘infgen’ in particular.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4758">
- July 26, 2021 at 9:34 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 26, 2021 at 9:34 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>I originally gave up on infgen due to an access rights error when I tried installing via the package manager, the server refused to let me download it, then after your last comment I though to look for it’s github page, that one worked out fine, judging by it’s output the only thing I’ve got wrong are the length values for the distance symbols/codes/whatever you want to call them, where do you get that 2 from? same applies to the bit code along side them, where does that come from, is it just an iterated number for each valid symbol?</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4759">
- July 26, 2021 at 10:56 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 26, 2021 at 10:56 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>You read 267=260+7 codeword-lengths (the numbers 260 and 7 are given by bytes 10-12 in this example).</p>
<p>The first 260 codeword-lengths are used for one huffman table: 256 literals (always 256), then 1 “end of block” (always 2), then the remaining 3 are lengths.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4760">
- July 26, 2021 at 11:50 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 26, 2021 at 11:50 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Even if I use the same method of code generation as before I stiil would need to know where you got those “2”s from in the table immediately following this:</p>
<p>“We read 7 numbers, that’s the whole distances table. Assign the “standard” binary codewords to generate the following table:”</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4762">
- July 26, 2021 at 12:23 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 26, 2021 at 12:23 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Re-read above the table. The “bits” column is from bytes 24-25.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4763">
- July 26, 2021 at 12:43 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 26, 2021 at 12:43 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>No option to reply so I’ll do it here instead, I still don’t see where the 2 came from, is that a minimum length or from another hard code table? So far I can only see the bits given as a set/unset symbol & code flag, there’s no clear source for the length & extra bits values</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4764">
- July 26, 2021 at 5:54 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 26, 2021 at 5:54 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Finally found where you got the 2 from:</p>
<p><a href="https://www.w3.org/Graphics/PNG/RFC-1951" rel="nofollow ugc">https://www.w3.org/Graphics/PNG/RFC-1951</a></p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4773">
- July 31, 2021 at 11:29 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">July 31, 2021 at 11:29 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>I’ve clearly misunderstood something somewhere, could you take a look at the code I outlined in the below post please and see if you can spot what I’m misunderstanding, up until the point I have to lookup previously deflated values I’ve read the bits correctly but I’ve obviously not understood all the implied information correctly, I would post the code here but as you’ve seen these comments don’t support maintaining the code formatting resulting in a more confusing than necessary code.</p>
<p><a href="https://cboard.cprogramming.com/c-programming/180462-increment-gone-wrong-post1302541.html#post1302541" rel="nofollow ugc">https://cboard.cprogramming.com/c-programming/180462-increment-gone-wrong-post1302541.html#post1302541</a></p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/a82f569a804e9883d4fc220ed42386f9?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Lee</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-4786">
- August 2, 2021 at 5:36 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">August 2, 2021 at 5:36 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>You’ll be glad to know I finally got the algorithm right, have not looked at any source code from zlib or other projects so I’m free to slap MIT License on it the whole way through once I convert it to a cleaner version of itself. The unclean version is here for anyone’s reference.</p>
<p><a href="https://gitlab.com/awsdert/uc-evidence/-/tree/9441a73e59834456c41c1049036fc60925b705a0" rel="nofollow ugc">https://gitlab.com/awsdert/uc-evidence/-/tree/9441a73e59834456c41c1049036fc60925b705a0</a></p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">neubert</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-5413">
- December 21, 2021 at 1:00 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 21, 2021 at 1:00 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>From the Fixed huffman coding section:</p>
<p>“Byte 10-11: 110 10011000 10010: A literal. 10011000 (152) minus 00110000 (48) is 104. 104 in ASCII is ‘h’.”</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-5414">
- December 21, 2021 at 1:11 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 21, 2021 at 1:11 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>The binary range (given above) is 00110000-10111111. Rather than decoding the binary value, we decode the offset within that range.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">neubert</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-5432">
- December 22, 2021 at 7:27 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 22, 2021 at 7:27 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>“Now we assign a binary codewords of length N, to each length N in the list.<br/>
1:1100,2:0,4:1101,16:1110,17:1111,18:10”</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">neubert</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-5435">
- December 22, 2021 at 10:49 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 22, 2021 at 10:49 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>I figured it out. It’s this bit from RFC1951:</p>
<p><code><br/>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">neubert</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-5441">
- December 24, 2021 at 10:38 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 24, 2021 at 10:38 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>““Literals” 257-259 (all lengths) have codewords of length 4” Is this a hard and fast rule that’s always true regardless of the data or is this true _just_ for the compressed string in this example?</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-5444">
- December 25, 2021 at 2:25 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 25, 2021 at 2:25 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Just for the example. If it was always true, we wouldn’t have to encode it.</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/7872694d27b3b6fd8d71297a4799a82b?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">neubert</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-5449">
- December 27, 2021 at 12:54 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">December 27, 2021 at 12:54 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>“Byte 27: 1110 10 0 1. Length 4. Whenever we read a length, we read a distance. The distance is a range, 7-8. The extra bit we read is 0b0=0, plus 7 is Distance 7. So we look back 7 bytes and copy 4. The new output is: baabbbabaab”</p>
<p>I think there should be an extra a before the baabbbabaab</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/83113fa84f7bb884648d75b769d23a6c?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/83113fa84f7bb884648d75b769d23a6c?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">inco</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-8298">
- June 22, 2022 at 1:56 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">June 22, 2022 at 1:56 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>I’ve been reading quite a bit on DEFLATE in png files and I think this is the exact level of depth i needed to crack this whole mess. Thanks so much for writing this, sources like RFC1951 talk more about abstraction and general rules but to have a few examples lined out here its EXTREMELY useful. Thanks again</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/83113fa84f7bb884648d75b769d23a6c?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/83113fa84f7bb884648d75b769d23a6c?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">inco</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-8300">
- June 22, 2022 at 3:38 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">June 22, 2022 at 3:38 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Small question about reading bits: for Huffman codes of the code itself defines a length range and then the extra bits are reversed so that they can be interpreted. But should I reverse the distance or the distance extra bits as well?</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/7b25d5e576e752e12d04d663247f0989?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/7b25d5e576e752e12d04d663247f0989?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">Ricardo</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-11528">
- May 31, 2024 at 4:32 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">May 31, 2024 at 4:32 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Byte 31: 10 111000: Literal ‘b’<br/>
Byte 31: 10 1110 00: Length 4, Distance 1. We look back 1 byte and copy 4. The new output is: bbbbb</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" loading="lazy" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/understanding-gzip-2/#comment-11531">
- May 31, 2024 at 5:23 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">May 31, 2024 at 5:23 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Distance is how far back you start. Copy is how many symbols you copy.<br/>
You just blindly copy characters starting DISTANCE back, but since you’re appending to the string, you never run out of symbols to copy.</p>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/2d89a1cc42432c9e73fc4c4c2c43237f?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/2d89a1cc42432c9e73fc4c4c2c43237f?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">TheTechRobo</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/wip-dead-tree-publishing-4/#comment-7928">
- April 23, 2022 at 5:46 pm</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">April 23, 2022 at 5:46 pm </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>Out of curiosity, why did you stop the service?</p>
</div>
<div class="comment-author vcard">
<img alt="" class="avatar avatar-40 photo" decoding="async" height="40" src="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=40&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/09485be3ee1e86da6e39412f5c1b2a48?s=80&d=mm&r=g 2x" width="40"/><cite class="fn">admin</cite> <span class="says">says:</span>
</div><!-- .comment-author .vcard -->
-<div class="comment-meta commentmetadata"><a href="https://blog.za3k.com/wip-dead-tree-publishing-4/#comment-7947">
- April 24, 2022 at 9:39 am</a> </div><!-- .comment-meta .commentmetadata -->
+<div class="comment-meta commentmetadata">April 24, 2022 at 9:39 am </div><!-- .comment-meta .commentmetadata -->
<div class="comment-body">
<p>This was launched in 2015, and you’re the first person to ask me about the the service since. That should give you an idea of the popularity. I’m very bad at marketing, to be fair, so it’s not totally clear that means the service was undesirable.</p>
<p>So when I eventually ran into some problem with active maintenance (the site needed updating to keep working, or something of that kind), I just didn’t.</p>