<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Zacalot.XYZ</title>
    <link>https://zacalot.xyz/</link>
    <description>Recent content on Zacalot.XYZ</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <copyright>CC BY 4.0</copyright>
    <lastBuildDate>Sat, 04 Nov 2023 12:19:49 -0500</lastBuildDate>
    <atom:link href="https://zacalot.xyz/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Getting C# Autocomplete on Windows Emacs</title>
      <link>https://zacalot.xyz/post/tech/csharp-lsp-on-windows/</link>
      <pubDate>Sat, 04 Nov 2023 00:00:00 -0500</pubDate>
      <guid>https://zacalot.xyz/post/tech/csharp-lsp-on-windows/</guid>
      <description>&lt;p&gt;I recently started getting back into working in the &lt;a href=&#34;https://godotengine.org/&#34;&gt;Godot Engine&lt;/a&gt; some and I wanted to use C# in it, so of course the first step of this was to try and make &lt;a href=&#34;https://www.gnu.org/software/emacs/&#34;&gt;Emacs&lt;/a&gt; a usable development environment for this.&lt;/p&gt;&#xA;&lt;p&gt;The kind of autocomplete that is desirable for working in C# is something like the IntelliSense that Microsoft offers in their Visual Studio products, as it allows your editor to understand your project&amp;rsquo;s structure in a manner that gives you useful tools such as auto completion, linting, error checking, etc. This functionality can be added to Emacs by installing a package for interfacing with a Language Server Protocol (LSP) server, which runs as a separate program Emacs communicates with by LSP, a JSON-RPC protocol.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debloating Social Media Platforms</title>
      <link>https://zacalot.xyz/post/tech/debloating-socials/</link>
      <pubDate>Thu, 01 Jun 2023 00:00:00 -0500</pubDate>
      <guid>https://zacalot.xyz/post/tech/debloating-socials/</guid>
      <description>&lt;p&gt;Websites like Twitter, Youtube, and Reddit are becoming increasingly bloated with JS, libraries, trackers, and all sorts of other baggage. So this a simple setup to avoid all that with the Redirector browser extension and some alternative front-ends to these platforms, such as: &lt;a href=&#34;https://nitter.unixfox.eu&#34;&gt;https://nitter.unixfox.eu&lt;/a&gt;, &lt;a href=&#34;https://www.yewtu.be&#34;&gt;https://www.yewtu.be&lt;/a&gt;, and &lt;a href=&#34;https://old.reddit.com&#34;&gt;https://old.reddit.com&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s also worth noting &lt;a href=&#34;https://libredirect.github.io/&#34;&gt;LibRedirect&lt;/a&gt; is a simple way to get these redirects and more, but I prefer the flexibility of this method.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing-redirector&#34;&gt;Installing Redirector&lt;/h2&gt;&#xA;&lt;p&gt;First, install the &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/redirector/&#34;&gt;Redirector&lt;/a&gt; extension. I use FireFox, but it also seems to exist for &lt;a href=&#34;https://chrome.google.com/webstore/detail/redirector/ocgpenflpmgnfapjedencafcfakcekcd&#34;&gt;Chrome&lt;/a&gt; as well. This is a neat extension that allows one to redirect any accessed URL to a different one, enabling us to effectively convert all links from these platforms to alternative ones.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Diagramming Org-Mode Headline Hierarchies with Org-Babel</title>
      <link>https://zacalot.xyz/post/tech/diagramming-org-mode-headlines/</link>
      <pubDate>Thu, 01 Jun 2023 00:00:00 -0500</pubDate>
      <guid>https://zacalot.xyz/post/tech/diagramming-org-mode-headlines/</guid>
      <description>&lt;p&gt;A while back the need arose to generate graphs of some hierarchies, so I thought it would be convenient to generate diagrams from org-mode headlines using &lt;a href=&#34;https://graphviz.org/&#34;&gt;Graphviz&lt;/a&gt;. Here&amp;rsquo;s an org-mode document capable of generating graphs using org-babel, using Elisp to convert the headline structure into JSON and Python to convert that JSON into a graphviz diagram:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#+begin_src &lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;emacs-lisp&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; :results silent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(require &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;org-element&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun pygraphing/get-headline-structure(id)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (json-encode (pygraphing/get-headline-descendents id)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun pygraphing/get-headline-by-id(id)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Returns headline from ID&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (let ((header &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;(org-element-map (org-element-parse-buffer) &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;headline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  (lambda (hl)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;(when (string= (org-element-property :ID hl) id)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;  (setq header hl))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;header))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun pygraphing/get-headline-tags(id)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Returns tags of item by ID&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (let (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;(header (pygraphing/get-headline-by-id id)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;(when header&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  (&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;   :ID (org-element-property :ID header)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;   ))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun pygraphing/get-headline-children-ids(id)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Returns child ids of a headline by its ID&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (let ((header (pygraphing/get-headline-by-id id)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;(&lt;span style=&#34;color:#a6e22e&#34;&gt;delq&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mapcar&lt;/span&gt; (lambda(child)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;(org-element-property :ID child))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&#x9;  (org-element-contents header)))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun pygraphing/get-headline-descendents(id)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Returns all descendents of headline&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (let ((header (pygraphing/get-headline-by-id id)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;(when header&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  (let ((children (pygraphing/get-headline-children-ids id)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;((header &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;(org-element-property :raw-value header))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;  (tags &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;(pygraphing/get-headline-tags id))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;  (children &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;delq&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mapcar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;  (lambda(childID)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;(pygraphing/get-headline-descendents childID))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;  children))))))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#+end_src&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#+begin_src &lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;python&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; :results file :dir (org-attach-dir) :var result=(pygraphing/get-headline-structure &amp;#34;1ff8ce7d-be78-4bd2-afa0-05be1fb9d9d2&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; graphviz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  dot &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; graphviz&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Digraph()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  root_header &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; json&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;loads(result)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;graph_header&lt;/span&gt;(header,parent&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  nodeName &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; header[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;header&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  dot&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;node(nodeName)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; parent:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;  dot&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;edge(parent,nodeName)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; header[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;children&amp;#34;&lt;/span&gt;]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; child &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; header[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;children&amp;#34;&lt;/span&gt;]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;  graph_header(child,nodeName)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  graph_header(root_header)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; dot&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;render(outfile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;diagram.png&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#+end_src&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*&lt;span style=&#34;font-weight:bold&#34;&gt; Root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:PROPERTIES:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:ID:       1ff8ce7d-be78-4bd2-afa0-05be1fb9d9d2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:END:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;**&lt;/span&gt; Child A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:PROPERTIES:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:ID:       ce64aa4c-3ed1-4535-ab97-7b486884ae05&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:END:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;***&lt;/span&gt; Child A-A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:PROPERTIES:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:ID:       836d5265-7860-4a36-ab9e-bec1ca2bffd8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:END:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;****&lt;/span&gt; Child A-A-A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:PROPERTIES:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:ID:       3f0d25a4-4b1a-49ff-8862-22f2d83631b0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:END:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;****&lt;/span&gt; Child A-A-B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:PROPERTIES:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:ID:       a53df412-244a-4c35-9dcb-0466bb2d2d40&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:END:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;***&lt;/span&gt; Child A-B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;**&lt;/span&gt; Child B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:PROPERTIES:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:ID:       3fc2535b-3fa8-4f05-bfb1-9735bc88d2d8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:END:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;***&lt;/span&gt; Child B-A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:PROPERTIES:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:ID:       96b0087c-306f-4b7c-92b2-bcc786bb1491&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:END:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;***&lt;/span&gt; Child B-B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:PROPERTIES:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:ID:       431857d5-6e64-4bb3-aa67-8eb9369fb776&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:END:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;***&lt;/span&gt; Child B-C&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:PROPERTIES:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:ID:       a8f166e1-12e6-4dda-85e7-4d0668dce02e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;:END:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(Note: Before continuing, make sure you have the &lt;code&gt;graphviz&lt;/code&gt; package installed for python with &lt;code&gt;python -m pip install graphviz&lt;/code&gt;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Site Setup</title>
      <link>https://zacalot.xyz/post/tech/site-setup/</link>
      <pubDate>Mon, 29 May 2023 00:00:00 -0500</pubDate>
      <guid>https://zacalot.xyz/post/tech/site-setup/</guid>
      <description>&lt;p&gt;Currently this site is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Edited with &lt;a href=&#34;https://www.gnu.org/software/emacs/&#34;&gt;Emacs&lt;/a&gt; in &lt;a href=&#34;https://orgmode.org/&#34;&gt;org-mode&lt;/a&gt; via &lt;a href=&#34;https://orgmode.org/manual/Using-capture.html&#34;&gt;org-capture&lt;/a&gt; and exported with &lt;a href=&#34;https://ox-hugo.scripter.co/&#34;&gt;ox-hugo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Built through &lt;a href=&#34;https://github.com/gohugoio/hugo&#34;&gt;Hugo&lt;/a&gt; with a (bearly) modified &lt;a href=&#34;https://github.com/clente/hugo-bearcub&#34;&gt;Bear Cub&lt;/a&gt; theme&lt;/li&gt;&#xA;&lt;li&gt;Served with &lt;a href=&#34;https://nginx.org/&#34;&gt;nginx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Accessed through &lt;a href=&#34;https://developers.cloudflare.com/cloudflare-one/connections/connect-apps&#34;&gt;Cloudflare Tunnel&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Personals</title>
      <link>https://zacalot.xyz/person/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://zacalot.xyz/person/</guid>
      <description>&lt;h2 id=&#34;contact&#34;&gt;Contact&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Email: &lt;a href=&#39;mailto:xyz@zacalot.xyz?subject=Reply%20to%20&#34;Personals&#34;&#39;&gt;xyz@zacalot.xyz&lt;/a&gt;&#xD;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;code&#34;&gt;Code&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Zacalot&#34;&gt;Github&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;misc&#34;&gt;Misc&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/@zacalot/videos&#34;&gt;Youtube&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://x.com/zacalotxyz&#34;&gt;X Social&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://bsky.app/profile/zacalot.bsky.social&#34;&gt;Bluesky&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Play Demo Game</title>
      <link>https://zacalot.xyz/project/ethertic/playdemogame/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://zacalot.xyz/project/ethertic/playdemogame/</guid>
      <description>&lt;p&gt;Click the square below to play &lt;a href=&#34;https://zacalot.xyz/project/ethertic/&#34;&gt;Ethertic&amp;rsquo;s&lt;/a&gt; demo game, &lt;em&gt;The Legend of Satoshi&lt;/em&gt; (Press &lt;code&gt;F11&lt;/code&gt; for fullscreen, requires WebAssembly and WebGL)&lt;/p&gt;&#xA;&lt;div style=&#34;width: 100%; overflow: hidden;&#34; id=&#34;game-border&#34;&gt;&#xD;&#xA;  &lt;div style=&#34;width: 100%; height: 100%; background-color: #1a1c2c; cursor: pointer; text-align: center; color: white; display: flex; justify-content: center; align-items: center; &#34; id=&#34;game-cover&#34;&gt;&lt;/div&gt;&#xD;&#xA;  &lt;canvas style=&#34;width: 100%; height: 100%; image-rendering: pixelated; display: none;&#34; id=&#34;canvas&#34; oncontextmenu=&#34;event.preventDefault()&#34; onmousedown=&#34;window.focus()&#34;&gt;&lt;/canvas&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;script type=&#34;text/javascript&#34;&gt;&#xD;&#xA;  var Module = &#xD;&#xA;  {&#xD;&#xA;&#x9;  canvas: document.getElementById(&#39;canvas&#39;),&#xD;&#xA;&#x9;  arguments:[&#39;/tic80/the_legend_of_satoshi.tic&#39;]&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  function resize()&#xD;&#xA;  {&#xD;&#xA;  let gameBorder = document.getElementById(&#39;game-border&#39;);&#xD;&#xA;  gameBorder.style.height = gameBorder.clientWidth * 144 / 256 + &#39;px&#39;;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  resize();&#xD;&#xA;&#xD;&#xA;  document.getElementById(&#39;game-cover&#39;).addEventListener(&#39;click&#39;, function()&#xD;&#xA;  {&#xD;&#xA;  document.getElementById(&#39;canvas&#39;).style.display = &#39;block&#39;&#xD;&#xA;&#xD;&#xA;  let scriptTag = document.createElement(&#39;script&#39;),&#xD;&#xA;  firstScriptTag = document.getElementsByTagName(&#39;script&#39;)[0];&#xD;&#xA;&#xD;&#xA;  scriptTag.src = &#39;/tic80/tic80.js&#39;;&#xD;&#xA;  firstScriptTag.parentNode.insertBefore(scriptTag, firstScriptTag);&#xD;&#xA;&#xD;&#xA;  this.remove();&#xD;&#xA;  })&#xD;&#xA;&#xD;&#xA;  window.addEventListener(&#39;resize&#39;, resize);&#xD;&#xA;&lt;/script&gt;</description>
    </item>
  </channel>
</rss>
