return result.stdout.decode("utf8")
def convert(self):
- self.data["content"] = self.html2markdown(self.data["content"].split("<!-- comments -->")[0])
-
- def save(self, target_dir):
+ parts = self.data["content"].split("<!-- comments -->")
+ self.data["content"] = self.html2markdown(parts[0])
+ self.data["markup"] = "markdown"
+ self.comments = ""
+ if len(parts) >= 1:
+ self.comments = parts[1]
+ self.data["has-comments"] = (self.comments.strip() != "")
+
+ def save(self, target_dir, comment_dir):
target_dir.mkdir(parents=True, exist_ok=True)
target_path = target_dir / (self.stem + ".md")
frontmatter.save(target_path, self.data)
+ if self.data["has-comments"]:
+ comment_path = comment_dir / (self.stem + ".html")
+ with open(comment_path, "w") as f:
+ f.write(self.comments)
+
class Converter():
- def __init__(self, from_, to):
+ def __init__(self, from_, to, comment_dir):
self.from_ = from_
self.to = to
+ self.comment_dir = comment_dir
def posts(self):
for post in Path(self.from_).iterdir():
def convert_all(self):
for post in self.posts():
post.convert()
- post.save(Path(self.to))
+ post.save(Path(self.to), Path(self.comment_dir))
if __name__ == "__main__":
- converter = Converter("posts-html", "posts-md")
+ converter = Converter("posts-html", "posts-md", "posts-comments")
converter.convert_all()
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-3128">
+<div id="comment-3128">
+<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-body">
+<p>Opening up ComputerCraft to the world using the http commands was an amazing idea from the developers!</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Alex Booth" class="comment-reply-link" data-belowelement="comment-3128" data-commentid="3128" data-postid="313" data-replyto="Reply to Alex Booth" data-respondelement="respond" href="https://blog.za3k.com/controlling-a-computercraft-turtle-remotely/?replytocom=3128#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-2927">
+<div id="comment-2927">
+<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-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="reply">
+<a aria-label="Reply to Mircea Popescu" class="comment-reply-link" data-belowelement="comment-2927" data-commentid="2927" data-postid="402" data-replyto="Reply to Mircea Popescu" data-respondelement="respond" href="https://blog.za3k.com/ddos/?replytocom=2927#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-10102">
+<div id="comment-10102">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to nortti" class="comment-reply-link" data-belowelement="comment-10102" data-commentid="10102" data-postid="1059" data-replyto="Reply to nortti" data-respondelement="respond" href="https://blog.za3k.com/diy-keyboards-and-how-keyboards-work/?replytocom=10102#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-10633">
+<div id="comment-10633">
+<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-body">
+<p>Cool!</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Carin" class="comment-reply-link" data-belowelement="comment-10633" data-commentid="10633" data-postid="1147" data-replyto="Reply to Carin" data-respondelement="respond" href="https://blog.za3k.com/hack-a-day-day-04-lashed-table/?replytocom=10633#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-2842">
+<div id="comment-2842">
+<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-body">
+<p>Hello,</p>
+<p>Can you implement quota support from postgressql?</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to eduardz" class="comment-reply-link" data-belowelement="comment-2842" data-commentid="2842" data-postid="358" data-replyto="Reply to eduardz" data-respondelement="respond" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/?replytocom=2842#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-2873">
+<div id="comment-2873">
+<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-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="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-2873" data-commentid="2873" data-postid="358" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/?replytocom=2873#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-odd thread-alt depth-1" id="li-comment-2852">
+<div id="comment-2852">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to Tudor" class="comment-reply-link" data-belowelement="comment-2852" data-commentid="2852" data-postid="358" data-replyto="Reply to Tudor" data-respondelement="respond" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/?replytocom=2852#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-2874">
+<div id="comment-2874">
+<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-body">
+<p>Thanks for the corrections, glad you found it useful.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-2874" data-commentid="2874" data-postid="358" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/?replytocom=2874#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-2853">
+<div id="comment-2853">
+<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-body">
+<p>Also, for Postgresql the correct commands to create users are:<br/>
+CREATE USER postfix PASSWORD ‘XXX’;<br/>
+CREATE USER dovecot PASSWORD ‘XXX’;</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Tudor" class="comment-reply-link" data-belowelement="comment-2853" data-commentid="2853" data-postid="358" data-replyto="Reply to Tudor" data-respondelement="respond" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/?replytocom=2853#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-2854">
+<div id="comment-2854">
+<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-body">
+<p>Also, there shouldn’t be any comma after the VALUES (<br/>
+ ‘za3k’,<br/>
+ ‘za3k.com’,<br/>
+ ‘{SHA512}…………………………………………………….==’ part</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Tudor" class="comment-reply-link" data-belowelement="comment-2854" data-commentid="2854" data-postid="358" data-replyto="Reply to Tudor" data-respondelement="respond" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/?replytocom=2854#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-3135">
+<div id="comment-3135">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to S" class="comment-reply-link" data-belowelement="comment-3135" data-commentid="3135" data-postid="358" data-replyto="Reply to S" data-respondelement="respond" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/?replytocom=3135#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-4730">
+<div id="comment-4730">
+<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-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="reply">
+<a aria-label="Reply to Korilius" class="comment-reply-link" data-belowelement="comment-4730" data-commentid="4730" data-postid="358" data-replyto="Reply to Korilius" data-respondelement="respond" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/?replytocom=4730#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor even depth-2" id="li-comment-4731">
+<div id="comment-4731">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-4731" data-commentid="4731" data-postid="358" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/?replytocom=4731#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-11338">
+<div id="comment-11338">
+<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-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/>
+<a href="https://forums.tomshardware.com/threads/ultra-low-power-pc-to-run-off-solar-power.1375469/" rel="nofollow ugc">https://forums.tomshardware.com/threads/ultra-low-power-pc-to-run-off-solar-power.1375469/</a></p>
+<p>Here is a 2023 video about the revived product “GVUIDO” (pronounced Guido) optimized for musicians where part of the UI involves covering a light sensor.<br/>
+<a href="https://www.youtube.com/watch?v=wTIf9wjm0y8" rel="nofollow ugc">https://www.youtube.com/watch?v=wTIf9wjm0y8</a></p>
+<p>One thing that struck me is that a lot of people might want a Xorchpad to stick INSIDE a larger system (out in nature? as part of a science package?) that might install a rugged solar panel and battery. Then a small USB-C cord might provide a Xorchpad inside the unit with power, and want some intelligence to come out of the same cord, in exchange?</p>
+<p>I’m not sure if a USB-C is consistent with the vision, however. Maybe the “minimum power” for that is far above the “maximim power” that would not blow the Sourcepad’s circuits?</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to JenniferRM" class="comment-reply-link" data-belowelement="comment-11338" data-commentid="11338" data-postid="1043" data-replyto="Reply to JenniferRM" data-respondelement="respond" href="https://blog.za3k.com/introducing-the-zorchpad-display-demo/?replytocom=11338#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-11339">
+<div id="comment-11339">
+<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-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>
+<p>I’m not sure what GVUIDO has to do with anything, was there a reason you linked that?</p>
+<p>The Zorchpad could easily be powered by any standard cable, yes. But if you need a larger system to power it, you’re missing the point.</p>
+<p>“Blowing circuits” is not a correct intuition for designing low-power electronics. Go learn about Ohm’s Law!</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-11339" data-commentid="11339" data-postid="1043" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/introducing-the-zorchpad-display-demo/?replytocom=11339#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-11135">
+<div id="comment-11135">
+<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-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="reply">
+<a aria-label="Reply to jiacheng hao" class="comment-reply-link" data-belowelement="comment-11135" data-commentid="11135" data-postid="598" data-replyto="Reply to jiacheng hao" data-respondelement="respond" href="https://blog.za3k.com/making-a-hardware-random-number-generator/?replytocom=11135#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment byuser comment-author-admin bypostauthor odd alt thread-odd thread-alt depth-1" id="li-comment-11136">
+<div id="comment-11136">
+<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-body">
+<p>Interested in what way?</p>
+<p>Is your TRNG open-source?</p>
+<p>Where do you research?</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-11136" data-commentid="11136" data-postid="598" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/making-a-hardware-random-number-generator/?replytocom=11136#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-3253">
+<div id="comment-3253">
+<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-body">
+<p>is offline</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to anon" class="comment-reply-link" data-belowelement="comment-3253" data-commentid="3253" data-postid="18" data-replyto="Reply to anon" data-respondelement="respond" href="https://blog.za3k.com/making-my-finances-public/?replytocom=3253#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-3882">
+<div id="comment-3882">
+<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-body">
+<p>Yeah, my export broke a while back. This should be fixed indefinitely, but covers 2011-2016 only now.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-3882" data-commentid="3882" data-postid="18" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/making-my-finances-public/?replytocom=3882#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-4165">
+<div id="comment-4165">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to Joel" class="comment-reply-link" data-belowelement="comment-4165" data-commentid="4165" data-postid="517" data-replyto="Reply to Joel" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=4165#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-4213">
+<div id="comment-4213">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to Scott" class="comment-reply-link" data-belowelement="comment-4213" data-commentid="4213" data-postid="517" data-replyto="Reply to Scott" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=4213#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-4277">
+<div id="comment-4277">
+<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-body">
+<p>Awesome post. Joel is supposedly correct. It should have been “lpinfo -v” in the step 5A.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to rathesun01" class="comment-reply-link" data-belowelement="comment-4277" data-commentid="4277" data-postid="517" data-replyto="Reply to rathesun01" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=4277#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment byuser comment-author-admin bypostauthor odd alt thread-odd thread-alt depth-1" id="li-comment-4279">
+<div id="comment-4279">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-4279" data-commentid="4279" data-postid="517" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=4279#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-4319">
+<div id="comment-4319">
+<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-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>
+<p>For printing over the network, I used the socket::9100 setting. No idea the command line knobs or dials, just did it through the cups web page.</p>
+<p>Another reason for me to do this is now my little rasperry pi zero w shows my printer as an AirPrint printer, so now I can print from my iDevices. Brother has their own app for this printer, but I was annoyed having to install a special app for this. My HL2270DW was made without AirPrint. It’s a fine little machine and don’t want to throw it out.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to steve" class="comment-reply-link" data-belowelement="comment-4319" data-commentid="4319" data-postid="517" data-replyto="Reply to steve" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=4319#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment odd alt depth-2" id="li-comment-4380">
+<div id="comment-4380">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to Jaye Horn" class="comment-reply-link" data-belowelement="comment-4380" data-commentid="4380" data-postid="517" data-replyto="Reply to Jaye Horn" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=4380#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-odd thread-alt depth-1" id="li-comment-4341">
+<div id="comment-4341">
+<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-body">
+<p>Would this work for brother hl-l2395dw scanner?</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Job" class="comment-reply-link" data-belowelement="comment-4341" data-commentid="4341" data-postid="517" data-replyto="Reply to Job" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=4341#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-even depth-1" id="li-comment-5178">
+<div id="comment-5178">
+<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-body">
+<p>Thanks so much for posting this. This helped get my HL-L2300D working properly.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Adam Trask" class="comment-reply-link" data-belowelement="comment-5178" data-commentid="5178" data-postid="517" data-replyto="Reply to Adam Trask" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=5178#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment even thread-odd thread-alt depth-1" id="li-comment-5438">
+<div id="comment-5438">
+<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-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>
+<p>I smiled when I saw this because you are clearly a ding dong; that sounds like a rookie mistake.</p>
+<p>I couldn’t get your instructions to work, so I tried troubleshooting through Google. Couldn’t figure it out. sudo lpinfo -v | grep usb wasn’t showing jack.</p>
+<p>It was because I had my USB B plugged into the ethernet jack of my BR-2270DW.</p>
+<p>Everything works now. Thank you so much.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Danial Foster" class="comment-reply-link" data-belowelement="comment-5438" data-commentid="5438" data-postid="517" data-replyto="Reply to Danial Foster" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=5438#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-even depth-1" id="li-comment-9429">
+<div id="comment-9429">
+<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-body">
+<p>Any steps to do this with a wifi connected HL-2270DW? Thanks!</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to J Bot" class="comment-reply-link" data-belowelement="comment-9429" data-commentid="9429" data-postid="517" data-replyto="Reply to J Bot" data-respondelement="respond" href="https://blog.za3k.com/printing-on-the-brother-hl-2270dw-printer-using-a-raspberry-pi/?replytocom=9429#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-4642">
+<div id="comment-4642">
+<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-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="reply">
+<a aria-label="Reply to scruss" class="comment-reply-link" data-belowelement="comment-4642" data-commentid="4642" data-postid="587" data-replyto="Reply to scruss" data-respondelement="respond" href="https://blog.za3k.com/qr-backup/?replytocom=4642#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-4644">
+<div id="comment-4644">
+<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-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="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-4644" data-commentid="4644" data-postid="587" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/qr-backup/?replytocom=4644#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment byuser comment-author-admin bypostauthor even depth-2" id="li-comment-4645">
+<div id="comment-4645">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-4645" data-commentid="4645" data-postid="587" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/qr-backup/?replytocom=4645#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-511">
+<div id="comment-511">
+<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-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="reply">
+<a aria-label="Reply to Susan Tatun" class="comment-reply-link" data-belowelement="comment-511" data-commentid="511" data-postid="13" data-replyto="Reply to Susan Tatun" data-respondelement="respond" href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/?replytocom=511#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-1349">
+<div id="comment-1349">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to Lynx" class="comment-reply-link" data-belowelement="comment-1349" data-commentid="1349" data-postid="13" data-replyto="Reply to Lynx" data-respondelement="respond" href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/?replytocom=1349#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-1689">
+<div id="comment-1689">
+<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-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="reply">
+<a aria-label="Reply to crumpuppet" class="comment-reply-link" data-belowelement="comment-1689" data-commentid="1689" data-postid="13" data-replyto="Reply to crumpuppet" data-respondelement="respond" href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/?replytocom=1689#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-2468">
+<div id="comment-2468">
+<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-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="reply">
+<a aria-label="Reply to Dave" class="comment-reply-link" data-belowelement="comment-2468" data-commentid="2468" data-postid="13" data-replyto="Reply to Dave" data-respondelement="respond" href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/?replytocom=2468#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-3252">
+<div id="comment-3252">
+<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-body">
+<p>Very useful information, Thank you</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Minecraft Lover" class="comment-reply-link" data-belowelement="comment-3252" data-commentid="3252" data-postid="13" data-replyto="Reply to Minecraft Lover" data-respondelement="respond" href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/?replytocom=3252#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-3788">
+<div id="comment-3788">
+<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-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="reply">
+<a aria-label="Reply to Leon" class="comment-reply-link" data-belowelement="comment-3788" data-commentid="3788" data-postid="13" data-replyto="Reply to Leon" data-respondelement="respond" href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/?replytocom=3788#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-3991">
+<div id="comment-3991">
+<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-body">
+<p>Thanks for sharing Minecraft. Can you also share Roblox Apk?</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Rajan Chopra" class="comment-reply-link" data-belowelement="comment-3991" data-commentid="3991" data-postid="13" data-replyto="Reply to Rajan Chopra" data-respondelement="respond" href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/?replytocom=3991#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-4324">
+<div id="comment-4324">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to Neckbeard Hater" class="comment-reply-link" data-belowelement="comment-4324" data-commentid="4324" data-postid="13" data-replyto="Reply to Neckbeard Hater" data-respondelement="respond" href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/?replytocom=4324#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-9669">
+<div id="comment-9669">
+<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-body">
+<p>lol this tutorial still works 9 years later thanks tho this helped so much!!</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to nat" class="comment-reply-link" data-belowelement="comment-9669" data-commentid="9669" data-postid="13" data-replyto="Reply to nat" data-respondelement="respond" href="https://blog.za3k.com/running-a-forge-server-on-headless-linux/?replytocom=9669#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-255">
+<div id="comment-255">
+<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-body">
+<p>So tasty! Enjoyed our month of obsessing over the recipe ^u^</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Tricia" class="comment-reply-link" data-belowelement="comment-255" data-commentid="255" data-postid="193" data-replyto="Reply to Tricia" data-respondelement="respond" href="https://blog.za3k.com/steak-tartare-3/?replytocom=255#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-4344">
+<div id="comment-4344">
+<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-body">
+<p>Thanks for your post.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Mario Enriquez" class="comment-reply-link" data-belowelement="comment-4344" data-commentid="4344" data-postid="509" data-replyto="Reply to Mario Enriquez" data-respondelement="respond" href="https://blog.za3k.com/streaming-linux-twitch-using-ffmpeg-and-alsa/?replytocom=4344#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-631">
+<div id="comment-631">
+<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-body">
+<p>Cool stuff. I liked exactboxing and DTOT.<br/>
+Murphy jitsu has potential.<br/>
+The modified goal factor has a suspicious component of leaving things to future me that I don’t like a bit though.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to JSevilla" class="comment-reply-link" data-belowelement="comment-631" data-commentid="631" data-postid="234" data-replyto="Reply to JSevilla" data-respondelement="respond" href="https://blog.za3k.com/terminal-goal-rationality-techniques/?replytocom=631#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-2451">
+<div id="comment-2451">
+<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-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="reply">
+<a aria-label="Reply to Tricia" class="comment-reply-link" data-belowelement="comment-2451" data-commentid="2451" data-postid="347" data-replyto="Reply to Tricia" data-respondelement="respond" href="https://blog.za3k.com/time-management-optimizers-satisficers-minimizers/?replytocom=2451#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-2426">
+<div id="comment-2426">
+<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-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="reply">
+<a aria-label="Reply to Tricia" class="comment-reply-link" data-belowelement="comment-2426" data-commentid="2426" data-postid="279" data-replyto="Reply to Tricia" data-respondelement="respond" href="https://blog.za3k.com/tiny-cute-vampire-bat/?replytocom=2426#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-4739">
+<div id="comment-4739">
+<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-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>
+<p>There’s no explanation as to where you pulled these bits from, I understand the number of bits comes from the aforementioned 414442 pulled out prior to this but I’ve seen nothing that explains how you pulled out the bit values for each of these code words</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4739" data-commentid="4739" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4739#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-4740">
+<div id="comment-4740">
+<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-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>
+<p>Thanks for the comment, it makes me happy to know anyone is reading this, and it’s very helpful to know what’s unclear in my writeup. I’d love to make it as good as possible.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-4740" data-commentid="4740" data-postid="668" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4740#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment even depth-3" id="li-comment-4741">
+<div id="comment-4741">
+<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-body">
+<p>I think I get it now, as soon as I resolve some compile errors I’m gonna try this:</p>
+<p>“`<br>
+ while ( cur_leng < max_leng )<br>
+ {<br>
+ for ( uint j = 0; j leng > cur_leng )<br>
+ continue;</br></br></br></br></p>
+<p> word->code = code;</p>
+<p> code++;<br>
+ }</br></p>
+<p> while ( !(code >> cur_leng) )<br>
+ ++code;</br></p>
+<p> ++cur_leng;<br>
+ }<br>
+“`</br></br></p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4741" data-commentid="4741" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4741#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-4742">
+<div id="comment-4742">
+<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-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>
+0b1010110=86, plus 11 is 97. Literals 0-96 are not present.<br>
+Byte 20: 1100 0101: Literal 1. Literal 97 (‘a’) has a codeword of length 1.<br>
+Byte 20: 1100 0 101: Literal 2. Number 98 (‘b’) has a codeword of length 2.”</br></br></br></p>
+<p>At first I though to get the literals I was supposed to add the code list position to the copy count but then I saw this after:</p>
+<p>“Byte 20-21: 11000 10 1111111 10. Copy “0” code length 11-138 times. 0b1111111=127, plus 11 is 138. Literals 99-236 are not present.<br/>
+Byte 21-22: 111111 10 0001000 1. Copy “0” code length 11-138 times. 0b0001000=8, plus 11 is 19. Literals 237-255 are not present”</p>
+<p>Which doesn’t follow that pattern, how do you determine the literals range?</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4742" data-commentid="4742" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4742#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor even depth-2" id="li-comment-4743">
+<div id="comment-4743">
+<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-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>
+<p>The key point I suspect you’re missed was: “Let’s read 267 numbers: the lengths of the codeword for each row.” These numbers are the length of the code for each literal in order (all of them, not just some of them). A length of 0 means “not present”.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-4743" data-commentid="4743" data-postid="668" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4743#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment odd alt depth-3" id="li-comment-4744">
+<div id="comment-4744">
+<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-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="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4744" data-commentid="4744" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4744#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment even depth-4" id="li-comment-4745">
+<div id="comment-4745">
+<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-body">
+<p>Turned out I was just printing the wrong value, here’s my current output:</p>
+<p>`<br/>
+./a.out aba.gz<br/>
+path = ‘aba.gz’<br/>
+PrintStreamDetails( 0x7ffd2cf70d80 ): ptr = 0x556653fbc480, pos = 0, num = 0, max = 328, fed = 0<br/>
+PrintBytes( 0x556653fbc480, 41, 16 )<br/>
+1F 8B 0 0 0 0 0 0 0 3 1D C6 49 1 0 0<br/>
+40 C0 AC A3 7F 88 3D 3C 20 2A 97 9D 37 5E 1D C<br/>
+29 34 94 23 0 0 0<br/>
+PrintStreamDetails( 0x7ffd2cf70d80 ): ptr = 0x556653fbc480, pos = 136, num = 80, max = 328, fed = 56<br/>
+gzip.magic = 1F8B, gzip.format = 0, gzip.flags = 0, gzip.mtime = 0, zlib.xflags = 0, zlib.system = 3<br/>
+gzip.flag_TEXT = false, gzip.flag_HCRC = false, gzip.flag_MORE = false, gzip.flag_NAME = false, gzip.flag_NOTE = false, gzip.flag_RESERVED = 0<br/>
+PrintStreamDetails( 0x7ffd2cf70d80 ): ptr = 0x556653fbc480, pos = 136, num = 80, max = 328, fed = 56<br/>
+last = true, type = 2<br/>
+lengc = 260, distc = 7, codec = 18, left = 60<br/>
+pos = 212, max = 328, count = 267<br/>
+left = 61, byte = 18, bit = 7<br/>
+Code Table:<br/>
+_list[ 0]: from = 1, more = 0, leng = 4, copy = 0, code = 1100<br/>
+_list[ 1]: from = 2, more = 0, leng = 1, copy = 0, code = 0<br/>
+_list[ 2]: from = 4, more = 0, leng = 4, copy = 0, code = 1101<br/>
+_list[ 3]: from = 16, more = 2, leng = 4, copy = 3, code = 1110<br/>
+_list[ 4]: from = 17, more = 3, leng = 4, copy = 3, code = 1111<br/>
+_list[ 5]: from = 18, more = 7, leng = 2, copy = 11, code = 10<br/>
+i = 0010 j = 5, from = 18, copy = 97<br/>
+Expecting character ‘a’<br/>
+Expecting character ‘b’<br/>
+i = 0010 j = 5, from = 18, copy = 138<br/>
+i = 0010 j = 5, from = 18, copy = 19<br/>
+Expecting character ”<br/>
+i = 1110 j = 3, from = 16, copy = 3<br/>
+Expecting character ”<br/>
+i = 1111 j = 4, from = 17, copy = 3<br/>
+Expecting character ”<br/>
+Expecting character ”<br/>
+Expecting character ”<br/>
+PrintBytes( 0x556653fbf4a0, 0, 16 )<br/>
+`</p>
+<p>And here’s the currently unfixed loop producing the bottom part of the output (also where the interpretation ends atm)</p>
+<p>`<br/>
+/* Should be building a tree here. */<br/>
+ while ( num < count && stream.num < stream.max )<br/>
+ {<br/>
+ CODEWORD *word = NULL;<br/>
+ uint j = 0;</p>
+<p> for ( cur_leng = 1; cur_leng <= max_leng; ++cur_leng )<br/>
+ {<br/>
+ i = RevBits( CopyStreamBits( &stream, cur_leng, false ), cur_leng );</p>
+<p> for ( j = 0; j leng == cur_leng && word->code == i )<br/>
+ {<br/>
+ IncStreamCount( &stream, cur_leng );<br/>
+ break;<br/>
+ }<br/>
+ }</p>
+<p> if ( j max_leng )<br/>
+ {<br/>
+ printf<br/>
+ (<br/>
+ “i = %u, j = %u, list.used = %u, cur_leng = %u\n”,<br/>
+ i, j, list.used, cur_leng<br/>
+ );<br/>
+ return Return( ret, EINVAL );<br/>
+ }</p>
+<p> size = CopyStreamBits( &stream, word->more, true );</p>
+<p> if ( word->from >= 16 )<br/>
+ {<br/>
+ printf( “i = ” );<br/>
+ SeeBits( &i, max_leng );<br/>
+ printf<br/>
+ (<br/>
+ ” j = %u, from = %2u, copy = %u\n”,<br/>
+ j, word->from, (uint)(size + word->copy)<br/>
+ );<br/>
+ num += min_literal_code = size + word->copy;<br/>
+ }<br/>
+ else<br/>
+ {<br/>
+ int c = (int)(min_literal_code + j);<br/>
+ printf( “Expecting character ‘%c’\n”, c );<br/>
+ symbol = symbols + num;<br/>
+ symbol->sym = (char)c;<br/>
+ symbol->len = j;<br/>
+ ++num;<br/>
+ }<br/>
+ }<br/>
+`</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4745" data-commentid="4745" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4745#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment odd alt depth-5" id="li-comment-4747">
+<div id="comment-4747">
+<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-body">
+<p>Never min, I think I know where the literals are coming from now, I did this:</p>
+<p><code><br/>
+printf( "Expecting character '%c', ", c );<br/>
+printf( "num as a character = '%c'\n", num );<br/>
+</code></p>
+<p>To see if num lined up, since it did I’m guessing those ranges where all the wasted leaves/branches of the huffman tree.</p>
+</div>
+<div class="reply">
+</div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-4756">
+<div id="comment-4756">
+<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-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>
+<p>The forum there is better able to handle pre-formatted code than this comment system so please take a look and tell me if you think I’ve mis-interpreted something also, and if so what you think is being mis-interpreted, in mean time I’m going to try and clean up my code so I can upload to gitlab so that you can a clearer idea of where I’m at and perhaps help me get to the last part, converting huffman codes to original values</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4756" data-commentid="4756" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4756#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-4757">
+<div id="comment-4757">
+<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-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="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-4757" data-commentid="4757" data-postid="668" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4757#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment even depth-3" id="li-comment-4758">
+<div id="comment-4758">
+<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-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="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4758" data-commentid="4758" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4758#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-4" id="li-comment-4759">
+<div id="comment-4759">
+<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-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>
+<p>The next 7 codeword-lengths are used to generate a second huffman table, for distances. The code generation works exactly the same as for the first table.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-4759" data-commentid="4759" data-postid="668" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4759#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment even depth-5" id="li-comment-4760">
+<div id="comment-4760">
+<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-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>
+<p>Because the previous method used that to determine what symbols to ignore until the code length increases, more specifically I had a “while ( cur_leng < max_leng )" loop and a sub loop that went looking for symbols expecting cur_leng codes and assigning them that way before using those same codes in another sub loop to decide if the next code should be increased further. Without knowing where those code lengths for the distance came from I can't progress.</p>
+<p>Thinking about it now I don't even have the codes for the length symbols, I just have the symbols. If it was supposed to be auto generated then I could understand the codes for the length symbols but I then don't understand the codes for the distance codes as they don't follow the huffman principle of no codes that can be misinterpreted.</p>
+</div>
+<div class="reply">
+</div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-5" id="li-comment-4762">
+<div id="comment-4762">
+<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-body">
+<p>Re-read above the table. The “bits” column is from bytes 24-25.</p>
+</div>
+<div class="reply">
+</div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-odd thread-alt depth-1" id="li-comment-4763">
+<div id="comment-4763">
+<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-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="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4763" data-commentid="4763" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4763#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment odd alt depth-2" id="li-comment-4764">
+<div id="comment-4764">
+<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-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>
+<p>” HDIST + 1 code lengths for the distance alphabet,</p>
+<p> encoded using the code length Huffman code<br/>
+”</p>
+<p>That was far too easily over looked, now I at least can generate the codes, though I think I will add a specialised handler and object to minimize code now that it’s getting more complicated than need be.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4764" data-commentid="4764" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4764#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-4773">
+<div id="comment-4773">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4773" data-commentid="4773" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4773#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment odd alt depth-2" id="li-comment-4786">
+<div id="comment-4786">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to Lee" class="comment-reply-link" data-belowelement="comment-4786" data-commentid="4786" data-postid="668" data-replyto="Reply to Lee" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=4786#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-odd thread-alt depth-1" id="li-comment-5413">
+<div id="comment-5413">
+<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-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>
+<p>Why are you subtracting 48?</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to neubert" class="comment-reply-link" data-belowelement="comment-5413" data-commentid="5413" data-postid="668" data-replyto="Reply to neubert" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=5413#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-5414">
+<div id="comment-5414">
+<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-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="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-5414" data-commentid="5414" data-postid="668" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=5414#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-5432">
+<div id="comment-5432">
+<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-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>
+<p>Could you elaborate on this? I thought I could get the same thing by using huffman encoding, using the code length as the frequency, but when I do that I get this:</p>
+<p>1:111,2:1100,4:00,16:10,17:01,18:1101</p>
+<p>Thanks!</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to neubert" class="comment-reply-link" data-belowelement="comment-5432" data-commentid="5432" data-postid="668" data-replyto="Reply to neubert" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=5432#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment odd alt depth-2" id="li-comment-5435">
+<div id="comment-5435">
+<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-body">
+<p>I figured it out. It’s this bit from RFC1951:</p>
+<p><code><br/>
+ 1) Count the number of codes for each code length. Let<br/>
+ bl_count[N] be the number of codes of length N, N >= 1.</code></p>
+<p> 2) Find the numerical value of the smallest code for each<br/>
+ code length:</p>
+<p> code = 0;<br/>
+ bl_count[0] = 0;<br/>
+ for (bits = 1; bits <= MAX_BITS; bits++) {<br/>
+ code = (code + bl_count[bits-1]) << 1;<br/>
+ next_code[bits] = code;<br/>
+ }</p>
+<p> 3) Assign numerical values to all codes, using consecutive<br/>
+ values for all codes of the same length with the base<br/>
+ values determined at step 2. Codes that are never used<br/>
+ (which have a bit length of zero) must not be assigned a<br/>
+ value.</p>
+<p> for (n = 0; n <= max_code; n++) {<br/>
+ len = tree[n].Len;<br/>
+ if (len != 0) {<br/>
+ tree[n].Code = next_code[len];<br/>
+ next_code[len]++;<br/>
+ }<br/>
+</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to neubert" class="comment-reply-link" data-belowelement="comment-5435" data-commentid="5435" data-postid="668" data-replyto="Reply to neubert" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=5435#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-odd thread-alt depth-1" id="li-comment-5441">
+<div id="comment-5441">
+<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-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="reply">
+<a aria-label="Reply to neubert" class="comment-reply-link" data-belowelement="comment-5441" data-commentid="5441" data-postid="668" data-replyto="Reply to neubert" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=5441#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-5444">
+<div id="comment-5444">
+<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-body">
+<p>Just for the example. If it was always true, we wouldn’t have to encode it.</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-5444" data-commentid="5444" data-postid="668" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=5444#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment even thread-even depth-1" id="li-comment-5449">
+<div id="comment-5449">
+<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-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>
+<div class="reply">
+<a aria-label="Reply to neubert" class="comment-reply-link" data-belowelement="comment-5449" data-commentid="5449" data-postid="668" data-replyto="Reply to neubert" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=5449#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-8298">
+<div id="comment-8298">
+<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-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="reply">
+<a aria-label="Reply to inco" class="comment-reply-link" data-belowelement="comment-8298" data-commentid="8298" data-postid="668" data-replyto="Reply to inco" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=8298#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment even depth-2" id="li-comment-8300">
+<div id="comment-8300">
+<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-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="reply">
+<a aria-label="Reply to inco" class="comment-reply-link" data-belowelement="comment-8300" data-commentid="8300" data-postid="668" data-replyto="Reply to inco" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=8300#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+<li class="comment odd alt thread-even depth-1" id="li-comment-11528">
+<div id="comment-11528">
+<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-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>
+<p>How can I understand the distance 1 and copy 4 symbols?<br/>
+Should I repeat the ‘b’ four times?</p>
+<p>What if the distance was 2 and copying 4 symbols?</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to Ricardo" class="comment-reply-link" data-belowelement="comment-11528" data-commentid="11528" data-postid="668" data-replyto="Reply to Ricardo" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=11528#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor even depth-2" id="li-comment-11531">
+<div id="comment-11531">
+<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-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>
+<p>If your string so far was “Wow, copying is really neat”, with distance 3 and copy 10 you would add: eateateate</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-11531" data-commentid="11531" data-postid="668" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/understanding-gzip-2/?replytocom=11531#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
--- /dev/null
+
+<ol class="commentlist">
+<li class="comment even thread-even depth-1" id="li-comment-7928">
+<div id="comment-7928">
+<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-body">
+<p>Out of curiosity, why did you stop the service?</p>
+</div>
+<div class="reply">
+<a aria-label="Reply to TheTechRobo" class="comment-reply-link" data-belowelement="comment-7928" data-commentid="7928" data-postid="214" data-replyto="Reply to TheTechRobo" data-respondelement="respond" href="https://blog.za3k.com/wip-dead-tree-publishing-4/?replytocom=7928#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+<ul class="children">
+<li class="comment byuser comment-author-admin bypostauthor odd alt depth-2" id="li-comment-7947">
+<div id="comment-7947">
+<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-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>
+</div>
+<div class="reply">
+<a aria-label="Reply to admin" class="comment-reply-link" data-belowelement="comment-7947" data-commentid="7947" data-postid="214" data-replyto="Reply to admin" data-respondelement="respond" href="https://blog.za3k.com/wip-dead-tree-publishing-4/?replytocom=7947#respond" rel="nofollow">Reply</a> </div><!-- .reply -->
+</div><!-- #comment-## -->
+</li><!-- #comment-## -->
+</ul><!-- .children -->
+</li><!-- #comment-## -->
+</ol>
\ No newline at end of file
categories:
- Technical
date: 2015-03-07 18:20:51-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- normativity
categories:
- Non-Technical
date: 2022-08-10 10:03:17-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- self-improvement
categories:
- Non-Technical
date: 2021-02-09 18:30:01-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- book review
categories:
- Non-Technical
date: 2021-03-06 02:09:13-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- review
categories:
- Non-Technical
date: 2021-02-05 00:30:43-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- games
categories:
- Non-Technical
date: 2022-01-31 14:13:12-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- book review
categories:
- Non-Technical
date: 2023-01-04 19:20:18-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- book review
categories:
- Non-Technical
date: 2023-04-23 17:09:30-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- personal
- Non-Technical
- Technical
date: 2023-01-09 11:30:38-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Non-Technical
date: 2021-02-09 18:22:54-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- game design
categories:
- Non-Technical
date: 2021-03-19 09:56:45-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- game design
categories:
- Non-Technical
date: 2024-02-20 12:45:12-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Technical
date: 2024-05-12 19:59:50-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- command-line
categories:
- Non-Technical
date: 2015-01-18 17:12:54-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Technical
date: 2017-07-06 18:20:09-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Technical
date: 2014-07-26 23:29:47-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- AWS
categories:
- Technical
date: 2014-11-23 13:51:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- android
categories:
- Non-Technical
date: 2023-04-23 16:32:01-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- ircpuzzles
categories:
- Non-Technical
date: 2023-04-04 11:33:24-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- irc
categories:
- Technical
date: 2015-12-05 19:25:52-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- backup
categories:
- Technical
date: 2015-12-05 19:18:13-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- backup
categories:
- Technical
date: 2014-11-08 09:52:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- backup
categories:
- Technical
date: 2014-11-23 13:14:46-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- backup
categories:
- Technical
date: 2015-10-19 22:33:34-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- backup
categories:
- Technical
date: 2014-11-23 14:35:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- apis
categories:
- Non-Technical
date: 2022-07-06 11:26:32-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- blog
categories:
- Technical
date: 2015-04-23 23:03:49-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- android
categories:
- Non-Technical
date: 2024-02-22 11:59:04-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- cooking
categories:
- Non-Technical
date: 2017-07-24 12:58:32-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- blast furnace
categories:
- Technical
date: 2023-12-18 17:45:53-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Non-Technical
date: 2023-08-17 12:20:03-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- games
categories:
- Technical
date: 2019-08-09 00:49:39-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- blackmagic
categories:
- Non-Technical
date: 2015-09-29 19:26:06-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- cardboard
categories:
- Technical
date: 2014-10-30 08:56:07-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- configuration
categories:
- Technical
date: 2015-10-18 18:27:48-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- computercraft
categories:
- Non-Technical
date: 2020-05-15 16:31:18-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- announcements
categories:
- Technical
date: 2021-06-05 15:29:36-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- programming
categories:
- Technical
date: 2020-05-18 22:13:02-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- cron
categories:
- Non-Technical
date: 2023-03-18 15:23:11-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- dungeons and dragons
categories:
- Non-Technical
date: 2023-07-20 09:17:10-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- roleplaying
categories:
- Non-Technical
date: 2016-06-20 17:27:24-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- meta
categories:
- Non-Technical
date: 2015-03-08 15:02:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- design
categories:
- Technical
date: 2015-11-02 18:36:11-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- control flow
categories:
- Non-Technical
date: 2017-07-04 16:29:56-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- carrying case
categories:
- Technical
date: 2023-06-09 13:28:55-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- hacks
categories:
- Non-Technical
date: 2015-01-22 21:32:15-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- domain names
categories:
- Non-Technical
date: 2023-07-17 13:58:49-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
- Non-Technical
- Technical
date: 2022-10-12 15:45:27-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- eink
categories:
- Non-Technical
date: 2023-08-28 10:43:52-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- godot
categories:
- Technical
date: 2021-06-11 17:50:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- debian
categories:
- Non-Technical
date: 2014-10-19 12:19:32-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags: []
title: Etherpad
categories:
- Technical
date: 2024-06-18 16:57:08-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- linux
categories:
- Technical
date: 2020-06-04 18:30:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- fabric
categories:
- Non-Technical
date: 2023-04-27 14:50:28-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- first aid
categories:
- Technical
date: 2024-01-01 11:55:32-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Non-Technical
date: 2015-03-15 19:34:16-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- games
categories:
- Uncategorized
date: 2024-05-01 14:25:59-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags: []
title: Garden signs on wall tiles (pt 2)
categories:
- Non-Technical
date: 2024-04-24 09:21:20-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Non-Technical
date: 2024-01-04 09:43:44-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- bad advice
categories:
- Technical
date: 2017-07-02 20:41:58-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- arch linux
categories:
- Technical
date: 2017-10-05 23:57:50-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Non-Technical
date: 2023-05-08 17:41:01-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags: []
title: Good Time Estimation
categories:
- Non-Technical
date: 2023-11-01 07:29:28-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Non-Technical
date: 2023-12-06 17:44:40-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2023-07-08 09:28:53-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- event
- Non-Technical
- Technical
date: 2023-11-01 16:30:57-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- games
categories:
- Non-Technical
date: 2023-11-04 15:58:18-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- furniture
- Non-Technical
- Technical
date: 2023-11-07 21:42:27-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- games
categories:
- Technical
date: 2023-11-07 07:33:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- graphics
categories:
- Non-Technical
date: 2023-11-08 15:40:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Non-Technical
date: 2023-11-10 19:24:36-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2023-11-11 23:23:47-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- graphics
categories:
- Non-Technical
date: 2023-11-12 11:15:25-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Non-Technical
date: 2023-11-13 21:45:06-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2023-11-14 15:18:54-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Non-Technical
date: 2023-11-18 09:33:42-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- game design
categories:
- Technical
date: 2023-11-20 08:50:26-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- general ai
categories:
- Technical
date: 2023-11-02 21:38:58-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- graphics
- Non-Technical
- Technical
date: 2023-11-20 20:57:20-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Technical
date: 2023-11-22 21:15:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- circuits
categories:
- Non-Technical
date: 2023-11-23 17:29:27-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2023-11-28 20:52:11-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Non-Technical
date: 2023-11-30 18:21:34-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Non-Technical
date: 2023-11-30 18:25:52-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-22 09:15:34-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
- Non-Technical
- Technical
date: 2022-11-03 17:52:52-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- blog
categories:
- Technical
date: 2022-12-05 21:15:50-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- bugs
- Non-Technical
- Technical
date: 2022-11-04 17:18:00-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- chat
- Non-Technical
- Technical
date: 2022-11-25 21:08:03-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-18 18:25:42-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-08 13:55:43-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- dictionary
- Non-Technical
- Technical
date: 2022-11-27 21:03:15-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- games
- Non-Technical
- Technical
date: 2022-11-19 21:04:04-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- audio
- Non-Technical
- Technical
date: 2022-11-22 19:37:06-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- game
- Non-Technical
- Technical
date: 2022-11-05 18:10:35-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-13 22:27:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- games
- Non-Technical
- Technical
date: 2022-11-25 21:05:38-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-05 16:41:54-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Technical
date: 2022-11-10 22:16:17-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- compiler
- Non-Technical
- Technical
date: 2022-11-09 14:01:51-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
- Non-Technical
- Technical
date: 2022-11-26 15:11:46-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- game
- Non-Technical
- Technical
date: 2022-11-05 15:42:40-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-27 14:57:02-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- games
- Non-Technical
- Technical
date: 2022-11-16 14:28:25-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-15 18:45:21-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- creative
- Non-Technical
- Technical
date: 2022-11-15 11:37:54-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-17 17:05:54-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-11 19:09:16-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
- Non-Technical
- Technical
date: 2022-12-07 19:22:32-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-29 16:24:43-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
- Non-Technical
- Technical
date: 2022-11-07 16:02:21-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Technical
date: 2022-11-25 21:10:50-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- algorithms
- Non-Technical
- Technical
date: 2022-11-06 21:35:27-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-30 16:44:44-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
- Non-Technical
- Technical
date: 2022-12-07 19:24:41-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Non-Technical
date: 2022-11-18 21:08:59-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
categories:
- Non-Technical
date: 2014-07-19 06:43:42-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags: []
title: New blog
categories:
- Non-Technical
date: 2023-12-31 16:20:36-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- games
categories:
- Non-Technical
date: 2022-07-02 23:01:41-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- finances
categories:
- Technical
date: 2023-07-21 16:44:36-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- cheatsheet
categories:
- Technical
date: 2015-10-05 01:44:36-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- command-line
categories:
- Technical
date: 2015-11-07 17:31:25-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- debian
categories:
- Technical
date: 2023-06-07 16:42:28-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- computers
categories:
- Non-Technical
date: 2015-06-28 02:22:27-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- computercraft
categories:
- Non-Technical
date: 2024-04-01 06:21:20-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- irc
categories:
- Non-Technical
date: 2021-05-31 20:20:37-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- isitoutyet
categories:
- Non-Technical
date: 2022-08-11 23:11:09-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- isitoutyet
categories:
- Technical
date: 2024-05-12 19:59:50-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- command-line
categories:
- Technical
date: 2014-11-23 14:35:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- apis
categories:
- Non-Technical
date: 2017-07-24 12:58:32-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- blast furnace
categories:
- Non-Technical
date: 2015-03-08 15:02:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- design
categories:
- Technical
date: 2023-06-09 13:28:55-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- hacks
- Non-Technical
- Technical
date: 2022-10-12 15:45:27-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- eink
categories:
- Technical
date: 2023-11-07 07:33:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- graphics
- Non-Technical
- Technical
date: 2022-11-25 21:08:03-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hack-a-day
- Non-Technical
- Technical
date: 2022-11-19 21:04:04-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- audio
categories:
- Technical
date: 2021-06-11 13:28:52-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- debian
categories:
- Non-Technical
date: 2014-12-01 12:19:47-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- finance
categories:
- Technical
date: 2020-05-12 14:00:28-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- immutable
categories:
- Non-Technical
date: 2023-06-07 09:38:53-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- crafts
- Non-Technical
- Technical
date: 2014-11-21 19:20:29-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags: []
title: The Double Lives of Books
categories:
- Technical
date: 2021-07-10 21:36:51-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- compression
categories:
- Non-Technical
date: 2015-04-30 03:12:07-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- carpentry
categories:
- Non-Technical
date: 2015-10-10 18:17:34-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Non-Technical
date: 2015-04-16 18:47:16-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- bootstrap
categories:
- Non-Technical
date: 2015-04-30 18:08:01-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- bootstrap
categories:
- Non-Technical
date: 2015-03-29 14:12:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- dead tree
categories:
- Technical
date: 2015-04-13 17:46:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- boot
categories:
- Technical
date: 2024-05-26 18:25:37-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hardware
categories:
- Non-Technical
date: 2019-12-17 18:19:15-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- bash history
categories:
- Technical
date: 2015-10-11 11:39:05-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- linux
categories:
- Technical
date: 2015-11-10 04:21:16-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- debian
categories:
- Technical
date: 2021-06-06 17:23:06-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- hardware
categories:
- Non-Technical
date: 2014-10-15 03:00:26-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- cybernetics
categories:
- Non-Technical
date: 2024-04-16 20:07:58-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Technical
date: 2015-03-13 11:15:07-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- git
categories:
- Non-Technical
date: 2023-07-12 16:36:15-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- dungeons and dragons
categories:
- Technical
date: 2021-06-11 13:28:52-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- debian
categories:
- Technical
date: 2020-05-20 15:56:18-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- linux
categories:
- Non-Technical
date: 2014-12-01 12:19:47-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- finance
- Non-Technical
- Technical
date: 2015-01-22 21:12:08-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- email
categories:
- Non-Technical
date: 2015-04-30 03:28:05-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- game
categories:
- Non-Technical
date: 2023-07-13 18:06:29-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- todo
categories:
- Non-Technical
date: 2019-08-08 13:14:24-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- blog
categories:
- Non-Technical
date: 2021-10-22 13:15:25-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- data collections
categories:
- Technical
date: 2021-05-26 13:02:35-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- crypto
categories:
- Non-Technical
date: 2023-02-03 13:37:16-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- pakistan
- Non-Technical
- Technical
date: 2023-02-02 12:47:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- website
categories:
- Non-Technical
date: 2021-02-07 03:30:04-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- game design
categories:
- Technical
date: 2022-07-10 09:28:46-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- backup
categories:
- Non-Technical
date: 2015-11-29 22:31:39-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- news
categories:
- Non-Technical
date: 2023-02-02 14:41:06-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Non-Technical
date: 2014-12-07 23:30:24-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- music
- Non-Technical
- Technical
date: 2015-04-24 16:58:38-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- armchair
categories:
- Non-Technical
date: 2015-10-22 17:02:41-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Non-Technical
date: 2015-02-17 11:53:54-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- pixel art
- Non-Technical
- Technical
date: 2024-05-11 11:49:13-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- programming
categories:
- Technical
date: 2020-05-12 14:00:28-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- immutable
categories:
- Non-Technical
date: 2024-01-19 14:30:16-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- organization
categories:
- Technical
date: 2020-04-18 16:47:39-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- linux
- Non-Technical
- Technical
date: 2022-08-10 09:32:40-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- linux
categories:
- Technical
date: 2022-03-22 09:28:49-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- backup
categories:
- Technical
date: 2022-09-22 16:38:08-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- announcements
categories:
- Technical
date: 2021-05-31 19:41:26-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- announcements
- Non-Technical
- Technical
date: 2021-08-07 17:59:35-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- raspberry pi
- Non-Technical
- Technical
date: 2024-05-20 21:09:34-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- electronics
- Non-Technical
- Technical
date: 2024-06-25 13:33:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- godot
categories:
- Non-Technical
date: 2015-10-27 19:10:59-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- recipe
categories:
- Technical
date: 2014-10-04 02:10:39-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- minecraft
- Non-Technical
- Technical
date: 2022-07-20 21:43:15-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Technical
date: 2023-06-24 09:20:14-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- programming
categories:
- Technical
date: 2015-03-12 19:09:37-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- command-line
categories:
- Non-Technical
date: 2023-06-07 09:38:53-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- crafts
categories:
- Technical
date: 2014-10-29 04:41:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- http
categories:
- Non-Technical
date: 2021-06-06 00:27:03-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- za3k.com
categories:
- Technical
date: 2015-08-04 20:12:09-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- cgi
categories:
- Non-Technical
date: 2015-04-28 23:04:50-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- cooking
categories:
- Non-Technical
date: 2019-08-08 13:13:00-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Uncategorized
date: 2020-01-06 16:53:24-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Non-Technical
date: 2022-07-11 15:45:40-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Technical
date: 2023-01-09 22:08:47-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Technical
date: 2020-03-21 21:26:52-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- alsa
categories:
- Technical
date: 2015-03-28 04:04:55-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- chrome
categories:
- Technical
date: 2015-10-17 03:35:05-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- debian
categories:
- Non-Technical
date: 2015-07-17 23:15:39-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- rationality
categories:
- Technical
date: 2021-08-16 19:28:16-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- iteration
categories:
- Non-Technical
date: 2014-12-01 01:24:28-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hacks
- Non-Technical
- Technical
date: 2014-11-21 19:20:29-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags: []
title: The Double Lives of Books
categories:
- Non-Technical
date: 2017-04-07 18:01:02-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- book review
categories:
- Non-Technical
date: 2020-11-20 17:41:32-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- timelog
categories:
- Non-Technical
date: 2015-11-02 18:26:22-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- rationality
categories:
- Non-Technical
date: 2022-09-23 15:05:15-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- lifelogging
categories:
- Non-Technical
date: 2015-10-10 17:54:17-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- art
categories:
- Technical
date: 2022-08-18 20:14:48-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Technical
date: 2021-07-10 21:36:51-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- compression
categories:
- Technical
date: 2024-06-08 19:46:00-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- linux
categories:
- Non-Technical
date: 2022-03-10 09:11:11-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Non-Technical
date: 2021-05-26 13:39:19-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- self-improvement
categories:
- Non-Technical
date: 2020-04-15 15:34:41-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- isitoutyet
categories:
- Non-Technical
date: 2015-04-30 03:12:07-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- carpentry
categories:
- Non-Technical
date: 2015-10-10 18:17:34-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Non-Technical
date: 2015-10-10 18:25:46-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- art
categories:
- Non-Technical
date: 2015-04-02 17:38:23-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- dead tree
categories:
- Non-Technical
date: 2015-04-16 18:47:16-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- bootstrap
categories:
- Non-Technical
date: 2015-04-30 18:08:01-07:00
-markup: html
+has-comments: true
+markup: markdown
source: wordpress
tags:
- bootstrap
categories:
- Non-Technical
date: 2015-03-29 14:12:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- dead tree
categories:
- Technical
date: 2015-04-13 17:46:31-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- boot
categories:
- Non-Technical
date: 2015-06-28 17:07:34-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- review
- Non-Technical
- Technical
date: 2022-07-08 12:02:57-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- archiving
categories:
- Technical
date: 2024-05-26 18:25:37-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hardware
categories:
- Technical
date: 2024-05-17 10:04:12-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- zorchpad
categories:
- Technical
date: 2024-06-05 10:36:45-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- zorchpad
categories:
- Technical
date: 2024-05-08 09:47:52-07:00
-markup: html
+has-comments: false
+markup: markdown
source: wordpress
tags:
- hardware