<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>not your average end user</title>
    <link>https://klatz.co/</link>
    <description>Recent content on not your average end user</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Mon, 11 May 2026 23:45:19 -0800</lastBuildDate>
    <atom:link href="https://klatz.co/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Lean 4 vibe-port of Flypitch (continuum hypothesis independence)</title>
      <link>https://klatz.co/blog/flypitch/</link>
      <pubDate>Mon, 11 May 2026 23:45:19 -0800</pubDate>
      <guid>https://klatz.co/blog/flypitch/</guid>
      <description>&lt;p&gt;I ported&#xA;&lt;a href=&#34;https://github.com/ianklatzco/flypitch/tree/master/flypitch4&#34;&gt;Flypitch&lt;/a&gt;&#xA;from Lean 3 to Lean 4 over the course of approximately a week, mostly&#xA;unattended Claude.&lt;/p&gt;&#xA;&lt;p&gt;The proof of the independence of the continuum hypothesis is a Gödel +&#xA;Cohen result that deals with the cardinality of the naturals vs. the reals.&lt;/p&gt;&#xA;&lt;p&gt;That is to say, it states that ZFC (which is from&amp;hellip;. set theory iirc)&#xA;cannot prove or disprove the existence of a &amp;ldquo;size&amp;rdquo; of infinity between that&#xA;of the Naturals and that of the Reals. The proof uses a technique called&#xA;&lt;strong&gt;forcing&lt;/strong&gt; (Cohen) and &lt;strong&gt;constructible sets&lt;/strong&gt; (Gödel).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Confidential Computing Notes</title>
      <link>https://klatz.co/blog/confidential-computing/</link>
      <pubDate>Tue, 14 Apr 2026 00:00:00 +0100</pubDate>
      <guid>https://klatz.co/blog/confidential-computing/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;Repo: &lt;a href=&#34;https://github.com/klatzco&#34;&gt;~/learning/gpucc&lt;/a&gt; (local)&lt;/li&gt;&#xA;&lt;li&gt;Hardware: AMD EPYC (SEV-SNP), Intel Xeon (TDX), NVIDIA H100/A100&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-is-confidential-computing&#34;&gt;What is Confidential Computing?&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Running workloads in hardware-enforced trusted execution environments (TEEs)&lt;/li&gt;&#xA;&lt;li&gt;The host/hypervisor cannot read or tamper with guest memory&lt;/li&gt;&#xA;&lt;li&gt;Attestation: cryptographic proof that the workload is running in a genuine TEE with expected code&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;amd-sev-snp&#34;&gt;AMD SEV-SNP&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SEV = Secure Encrypted Virtualization&lt;/li&gt;&#xA;&lt;li&gt;SNP = Secure Nested Paging (latest generation)&lt;/li&gt;&#xA;&lt;li&gt;Each VM gets its own encryption key managed by a dedicated security processor (PSP)&lt;/li&gt;&#xA;&lt;li&gt;Memory pages are encrypted transparently &amp;ndash; the guest OS doesn&amp;rsquo;t need modification&lt;/li&gt;&#xA;&lt;li&gt;Attestation via &lt;code&gt;/dev/sev-guest&lt;/code&gt; ioctl:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Send 64 bytes of user data (challenge/nonce)&lt;/li&gt;&#xA;&lt;li&gt;Get back a signed report (4096 bytes) from the AMD PSP&lt;/li&gt;&#xA;&lt;li&gt;Report contains measurement of the VM, policy, platform info&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&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-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; snp_report_req {&#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;uint8_t&lt;/span&gt; user_data[&lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;];    &lt;span style=&#34;color:#75715e&#34;&gt;// your challenge&#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:#66d9ef&#34;&gt;uint32_t&lt;/span&gt; vmpl;            &lt;span style=&#34;color:#75715e&#34;&gt;// privilege level&#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:#66d9ef&#34;&gt;uint8_t&lt;/span&gt; report[&lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt;];     &lt;span style=&#34;color:#75715e&#34;&gt;// signed attestation report&#xA;&lt;/span&gt;&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;// ioctl(fd, SNP_GET_REPORT, &amp;amp;req)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Kernel params needed: &lt;code&gt;mem_encrypt=on iommu=pt amd_iommu=on kvm_amd.sev=1 kvm_amd.sev_snp=1&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;QEMU launch requires &lt;code&gt;-object sev-snp-guest&lt;/code&gt; with cbitpos and policy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;intel-tdx&#34;&gt;Intel TDX&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TDX = Trust Domain Extensions&lt;/li&gt;&#xA;&lt;li&gt;Similar concept to SEV-SNP but Intel&amp;rsquo;s approach&lt;/li&gt;&#xA;&lt;li&gt;Uses a TDX Module running in a new CPU mode (SEAM)&lt;/li&gt;&#xA;&lt;li&gt;Each TD (Trust Domain) has isolated memory, CPU state&lt;/li&gt;&#xA;&lt;li&gt;Attestation via Intel&amp;rsquo;s SGX-style quoting infrastructure&lt;/li&gt;&#xA;&lt;li&gt;Advice from colleague with PhD: Intel generally hires lots of PhDs who implement Everything but it&amp;rsquo;s overcomplicated; AMD stuff tends to be simpler / works&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;gpu-confidential-computing&#34;&gt;GPU Confidential Computing&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;NVIDIA H100 supports CC mode &amp;ndash; GPU memory is encrypted&lt;/li&gt;&#xA;&lt;li&gt;GPU gets its own attestation report (firmware measurement, nonce, signature)&lt;/li&gt;&#xA;&lt;li&gt;Combined attestation: SEV-SNP report (VM integrity) + GPU report (GPU integrity)&lt;/li&gt;&#xA;&lt;li&gt;VFIO passthrough to give the confidential VM direct GPU access:&lt;/li&gt;&#xA;&lt;/ul&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# unbind from host driver, bind to vfio-pci&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$GPU_PCI_ID&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; /sys/bus/pci/devices/$GPU_PCI_ID/driver/unbind&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;vfio-pci&amp;#34;&lt;/span&gt; &amp;gt; /sys/bus/pci/devices/$GPU_PCI_ID/driver_override&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$GPU_PCI_ID&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; /sys/bus/pci/drivers/vfio-pci/bind&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;The whole pipeline: host setup -&amp;gt; guest image -&amp;gt; launch VM with GPU passthrough -&amp;gt; run CUDA inside confidential VM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;attestation-flow&#34;&gt;Attestation Flow&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Verifier sends a nonce/challenge&lt;/li&gt;&#xA;&lt;li&gt;Guest requests attestation from SEV-SNP (CPU-level) and GPU&lt;/li&gt;&#xA;&lt;li&gt;Both return signed reports containing:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Platform identity&lt;/li&gt;&#xA;&lt;li&gt;Firmware/code measurements&lt;/li&gt;&#xA;&lt;li&gt;The nonce (proves freshness)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Verifier checks signatures against known-good root of trust&lt;/li&gt;&#xA;&lt;li&gt;If valid, verifier trusts the computation results&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;workshoplab-ideas&#34;&gt;Workshop/Lab Ideas&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TDX vs SEV-SNP comparison: setup, attestation, performance&lt;/li&gt;&#xA;&lt;li&gt;GPU CC hello world: multiply two primes inside encrypted GPU memory, verify via attestation&lt;/li&gt;&#xA;&lt;li&gt;Remote attestation demo: client sends challenge, CC VM responds with proof&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;!--&#xA;vim: nospell&#xA;--&gt;</description>
    </item>
    <item>
      <title>Computer Science Notes</title>
      <link>https://klatz.co/blog/cs/</link>
      <pubDate>Wed, 01 Apr 2026 00:00:00 +0100</pubDate>
      <guid>https://klatz.co/blog/cs/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;Book: Introduction to Algorithms &amp;ndash; Cormen/Leiserson/Rivest/Stein (CLRS)&lt;/li&gt;&#xA;&lt;li&gt;Book: Structure and Interpretation of Computer Programs &amp;ndash; Abelson/Sussman (SICP)&lt;/li&gt;&#xA;&lt;li&gt;Course: &lt;a href=&#34;https://www.youtube.com/playlist?list=PLUl4u3cNGP63EdVPNLG3ToM6LaEUuStEY&#34;&gt;MIT 6.006 Introduction to Algorithms&lt;/a&gt; (YouTube) &amp;ndash; Demaine&lt;/li&gt;&#xA;&lt;li&gt;Course: &lt;a href=&#34;https://pdos.csail.mit.edu/6.824/&#34;&gt;MIT 6.824 Distributed Systems&lt;/a&gt; &amp;ndash; Morris&lt;/li&gt;&#xA;&lt;li&gt;Course: &lt;a href=&#34;https://15445.courses.cs.cmu.edu/&#34;&gt;CMU 15-445 Database Systems&lt;/a&gt; &amp;ndash; Pavlo&lt;/li&gt;&#xA;&lt;li&gt;Exercises: &lt;a href=&#34;https://www.nand2tetris.org/&#34;&gt;Nand2Tetris&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Exercises: &lt;a href=&#34;https://leetcode.com/&#34;&gt;Leetcode&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;golden section search - numerical approximation thing&lt;/p&gt;&#xA;&lt;!--&#xA;vim: nospell&#xA;--&gt;</description>
    </item>
    <item>
      <title>Physics Notes</title>
      <link>https://klatz.co/blog/physics/</link>
      <pubDate>Tue, 31 Mar 2026 00:00:00 +0100</pubDate>
      <guid>https://klatz.co/blog/physics/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;double slit&lt;/li&gt;&#xA;&lt;li&gt;stern-gerlach&lt;/li&gt;&#xA;&lt;li&gt;delayed choice&lt;/li&gt;&#xA;&lt;li&gt;cosmic scale delayed choice (wheeler&amp;rsquo;s)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Why are passkeys better?</title>
      <link>https://klatz.co/blog/why-passkeys/</link>
      <pubDate>Wed, 25 Mar 2026 23:33:45 -0800</pubDate>
      <guid>https://klatz.co/blog/why-passkeys/</guid>
      <description>&lt;p&gt;The login flows generally seem poorly-written, and we have now increased&#xA;the complexity of login flows. Are they worth it?&lt;/p&gt;&#xA;&lt;p&gt;Benefits:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;They ?require? secure elements. Websites can now know that a subsequent&#xA;request is coming from the same private key in a secure element (we have&#xA;a cryptographic ?root of trust? / ?chain of attribution? that connects a&#xA;given request to a previous one).&lt;/li&gt;&#xA;&lt;li&gt;The are pub/privkey auth. Servers only store the pubkey, so can&amp;rsquo;t be&#xA;hacked.&lt;/li&gt;&#xA;&lt;li&gt;The are phishing-resistant (they check url bar exactly).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In short, they are hardware-computed credentials that are gated behind your&#xA;Google/Apple/1password login.&lt;/p&gt;</description>
    </item>
    <item>
      <title>List: Internet Pianists</title>
      <link>https://klatz.co/blog/list-internet-pianists/</link>
      <pubDate>Wed, 04 Mar 2026 19:28:07 -0800</pubDate>
      <guid>https://klatz.co/blog/list-internet-pianists/</guid>
      <description>&lt;p&gt;Figured I should start keeping one:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/@Animenzzz&#34;&gt;Animenz&lt;/a&gt; - Anime arrangements&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/@cateen_hayatosumino&#34;&gt;Cateen カティン&lt;/a&gt; -&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/@lara6683&#34;&gt;lara6683&lt;/a&gt; - videogame covers&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/@Caliko&#34;&gt;Caliko&lt;/a&gt; - games&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Cool blogs</title>
      <link>https://klatz.co/blog/cool-blogs/</link>
      <pubDate>Wed, 03 Sep 2025 17:10:40 -0200</pubDate>
      <guid>https://klatz.co/blog/cool-blogs/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;1&#34;&gt;https://www.seangoedecke.com/good-system-design/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;2&#34;&gt;https://www.stephendiehl.com/posts/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;3&#34;&gt;https://leni.sh/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Linear Algebra Notes</title>
      <link>https://klatz.co/blog/linalg/</link>
      <pubDate>Wed, 03 Sep 2025 16:59:23 +0200</pubDate>
      <guid>https://klatz.co/blog/linalg/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;1&#34;&gt;Hefferon: Linear Algebra&lt;/a&gt; (Textbook, 4th ed)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Prompting Tips</title>
      <link>https://klatz.co/blog/prompting-tips/</link>
      <pubDate>Tue, 02 Sep 2025 22:28:05 -0800</pubDate>
      <guid>https://klatz.co/blog/prompting-tips/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;Reflect on 5-7 different possible sources of the problem, distill those down to 1-2 most likely sources, and then add logs to validate your assumptions before we move onto implementing the actual code fix&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://x.com/pyquantnews/status/1938990631298215968?s=46&#34;&gt;source&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-#####&#34; data-lang=&#34;#####&#34;&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Title: Senior Engineer Task Execution Rule&lt;/p&gt;&#xA;&lt;p&gt;Applies to: All Tasks&lt;/p&gt;&#xA;&lt;p&gt;Rule:&#xA;You are a senior engineer with deep experience building production-grade AI agents, automations, and workflow systems. Every task you execute must follow this procedure without exception:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Transformer Notes</title>
      <link>https://klatz.co/blog/transformers/</link>
      <pubDate>Tue, 02 Sep 2025 17:12:42 -0800</pubDate>
      <guid>https://klatz.co/blog/transformers/</guid>
      <description>&lt;p&gt;Transformer visualizations:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;1&#34;&gt;https://bbycroft.net/llm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://poloclub.github.io/transformer-explainer/&#34;&gt;https://poloclub.github.io/transformer-explainer/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;2&#34;&gt;Autograd / miniGPT by hand&lt;/a&gt; (blog roadmap)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;3&#34;&gt;CS336 @ Stanford&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://brandonrohrer.com/transformers.html&#34;&gt;Transformers from scratch&lt;/a&gt; - sensibly written, broken down by topic&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://arxiv.org/pdf/2410.19931&#34;&gt;Provable optimal transport with transformers&lt;/a&gt; - optimal transport - math for finding efficiently probability distribution 1 -&amp;gt; prob distrib 2&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Wasserstein distance - between two probability distribs&lt;/li&gt;&#xA;&lt;li&gt;Sinkhorn algorithm - iterative, converges towards a shortest&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://arxiv.org/pdf/2212.07677&#34;&gt;Transformers learn in-context from gradient descent&lt;/a&gt; (ETH Zurich)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;in-context learning - e.g. english followed by french, a &amp;ldquo;circuit&amp;rdquo; appears in the &amp;ldquo;neurons&amp;rdquo; called an &amp;ldquo;induction head&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;naively this might be, in the output, copying the english words - so&#xA;the circuit is doing the copy, and then it passes the same&#xA;tokenization of the english through the french neurons&lt;/li&gt;&#xA;&lt;li&gt;and this, but scaled up to another level of abstraction, is what is&#xA;generally referred to as in-context learning (&lt;a href=&#34;https://old.reddit.com/r/MachineLearning/comments/1cdih0a/d_llms_why_does_incontext_learning_work_what/l1ciojr/&#34;&gt;src&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;assertion of the ETH Zurich paper is that gradient descent happens in&#xA;the forward pass&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://arxiv.org/pdf/2406.02619&#34;&gt;Unelicitable backdoors in Language Models via Cryptographic Transformer&#xA;Circuits&lt;/a&gt; - feb2025, wrote a language to compile sha256 into a pytorch&#xA;transformer, that only triggers when a particular input is present&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technology Timelines</title>
      <link>https://klatz.co/blog/technology-timelines/</link>
      <pubDate>Tue, 26 Aug 2025 19:31:20 -0800</pubDate>
      <guid>https://klatz.co/blog/technology-timelines/</guid>
      <description>&lt;p&gt;Pulled from a model and not double-checked:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;100,000-50,000bce spoken language&lt;/li&gt;&#xA;&lt;li&gt;~10000bce agriculture, animal domestication&lt;/li&gt;&#xA;&lt;li&gt;~65000bce la pasiega cave paintings&lt;/li&gt;&#xA;&lt;li&gt;~3500bce bronze&lt;/li&gt;&#xA;&lt;li&gt;~3300bce early swords&lt;/li&gt;&#xA;&lt;li&gt;~3200bce written language&lt;/li&gt;&#xA;&lt;li&gt;~3000bce wheel&lt;/li&gt;&#xA;&lt;li&gt;~1500bce iron&lt;/li&gt;&#xA;&lt;li&gt;~1500bce hinduism&lt;/li&gt;&#xA;&lt;li&gt;~1300bce judaism&lt;/li&gt;&#xA;&lt;li&gt;~600bce buddhism / confucianism / daoism&lt;/li&gt;&#xA;&lt;li&gt;~500bce zoroastrianism in persia&lt;/li&gt;&#xA;&lt;li&gt;~500bce democracy (athens)&lt;/li&gt;&#xA;&lt;li&gt;~300bce shintoism&lt;/li&gt;&#xA;&lt;li&gt;200bce -&amp;gt; 200ce roman engineering (aqueducts)&lt;/li&gt;&#xA;&lt;li&gt;~30ce christianity&lt;/li&gt;&#xA;&lt;li&gt;100ce paper&lt;/li&gt;&#xA;&lt;li&gt;~600ce islam&lt;/li&gt;&#xA;&lt;li&gt;~800ce arabic numerals / algebra&lt;/li&gt;&#xA;&lt;li&gt;~1000 guns in china&lt;/li&gt;&#xA;&lt;li&gt;1191 eisai brings Chan buddhism to Japan, from China&lt;/li&gt;&#xA;&lt;li&gt;~1200 guns in europe&lt;/li&gt;&#xA;&lt;li&gt;~1200 universities&lt;/li&gt;&#xA;&lt;li&gt;~1440 printing press&lt;/li&gt;&#xA;&lt;li&gt;~1450 telescope&lt;/li&gt;&#xA;&lt;li&gt;~1600 microscope&lt;/li&gt;&#xA;&lt;li&gt;1543 copernican heliocentric model&lt;/li&gt;&#xA;&lt;li&gt;1687 newton principia mathematica&lt;/li&gt;&#xA;&lt;li&gt;1752 electricity experiments (franklin)&lt;/li&gt;&#xA;&lt;li&gt;1776 steam engine&lt;/li&gt;&#xA;&lt;li&gt;1783 first powered steamboat (france)&lt;/li&gt;&#xA;&lt;li&gt;1796 vaccination (jenner, smallpox)&lt;/li&gt;&#xA;&lt;li&gt;1804 first steam locomotive&lt;/li&gt;&#xA;&lt;li&gt;1807 fourier transform (fourier)&lt;/li&gt;&#xA;&lt;li&gt;1821 electric motor (faraday)&lt;/li&gt;&#xA;&lt;li&gt;1837 telegraph (morse)&lt;/li&gt;&#xA;&lt;li&gt;1856 steel: bessemer process (affordable)&lt;/li&gt;&#xA;&lt;li&gt;1876 telephone (bell)&lt;/li&gt;&#xA;&lt;li&gt;1879 lightbulb (edison)&lt;/li&gt;&#xA;&lt;li&gt;1885 first gasoline car, Karl Benz Patent-Motorwagen&lt;/li&gt;&#xA;&lt;li&gt;1895 radio (marconi)&lt;/li&gt;&#xA;&lt;li&gt;1895 x-rays (röntgen)&lt;/li&gt;&#xA;&lt;li&gt;1903 first powered flight, wright brothers&lt;/li&gt;&#xA;&lt;li&gt;1905 special relativity (einstein)&lt;/li&gt;&#xA;&lt;li&gt;1908 mass-produced car (Ford model T)&lt;/li&gt;&#xA;&lt;li&gt;1927 television&lt;/li&gt;&#xA;&lt;li&gt;1928 penicillin (fleming)&lt;/li&gt;&#xA;&lt;li&gt;1942 nuclear reactor (fermi)&lt;/li&gt;&#xA;&lt;li&gt;1945 nuclear weapons&lt;/li&gt;&#xA;&lt;li&gt;1945 eniac (computer)&lt;/li&gt;&#xA;&lt;li&gt;1947 transistor (bell labs)&lt;/li&gt;&#xA;&lt;li&gt;1953 dna (watson and crick)&lt;/li&gt;&#xA;&lt;li&gt;1957 satellites (sputnik)&lt;/li&gt;&#xA;&lt;li&gt;1958 integrated circuit&lt;/li&gt;&#xA;&lt;li&gt;1969 moon landing&lt;/li&gt;&#xA;&lt;li&gt;1969 ARPANET&lt;/li&gt;&#xA;&lt;li&gt;1973 black-scholes model (black, scholes, merton)&lt;/li&gt;&#xA;&lt;li&gt;1973 mobile phone (motorola)&lt;/li&gt;&#xA;&lt;li&gt;~1971 gold standard -&amp;gt; fiat in USA due to Vietnam War&lt;/li&gt;&#xA;&lt;li&gt;1978 IVF (first test-tube baby)&lt;/li&gt;&#xA;&lt;li&gt;1983 TCP/IP internet&lt;/li&gt;&#xA;&lt;li&gt;1990 web (tim berners lee @ cern) http and html&lt;/li&gt;&#xA;&lt;li&gt;1995 GPS civilian access&lt;/li&gt;&#xA;&lt;li&gt;2003 human genome sequenced (~92%)&lt;/li&gt;&#xA;&lt;li&gt;2007 iPhone&lt;/li&gt;&#xA;&lt;li&gt;2009 bitcoin&lt;/li&gt;&#xA;&lt;li&gt;2012 CRISPR gene editing&lt;/li&gt;&#xA;&lt;li&gt;2015 ethereum&lt;/li&gt;&#xA;&lt;li&gt;2017 transformers&lt;/li&gt;&#xA;&lt;li&gt;2018 alphafold&lt;/li&gt;&#xA;&lt;li&gt;2020 gpt3&lt;/li&gt;&#xA;&lt;li&gt;2020 mrna vaccines&lt;/li&gt;&#xA;&lt;li&gt;2022 complete human genome (T2T)&lt;/li&gt;&#xA;&lt;li&gt;2022 chatgpt&lt;/li&gt;&#xA;&lt;li&gt;2022 jwst&lt;/li&gt;&#xA;&lt;li&gt;2023 ozempic&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Please let me know if there are any errors or obvious omissions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>LessOnline 2025</title>
      <link>https://klatz.co/blog/lessonline-2025/</link>
      <pubDate>Sun, 01 Jun 2025 11:10:56 -0800</pubDate>
      <guid>https://klatz.co/blog/lessonline-2025/</guid>
      <description>&lt;p&gt;Rationalism has certainly been present in my high school and college&#xA;friend groups: initially with HPMOR and then later with LessWrong posts in&#xA;the DMs. When my roommates suggested we go to the conference, I was&#xA;enthusiastic for a shared group activity.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Being&amp;rdquo; very intellectual - in the head - is perhaps not a recipe for&#xA;centeredness and embodiment, which seem essential for knowing what feels&#xA;true in a moment, and where to go next.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reading List 2024</title>
      <link>https://klatz.co/blog/reading-list-2024/</link>
      <pubDate>Wed, 27 Nov 2024 12:21:22 -0800</pubDate>
      <guid>https://klatz.co/blog/reading-list-2024/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gallium.inria.fr/blog/intel-skylake-bug/&#34;&gt;https://gallium.inria.fr/blog/intel-skylake-bug/&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Skylake series of Intel processors had a hardware bug when using&#xA;certain registers in tight loops, with hyperthreading enabled.&lt;/li&gt;&#xA;&lt;li&gt;Manifested as crashes in OCaml programs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Some Stable Diffusion Research</title>
      <link>https://klatz.co/blog/stable-diffusion/</link>
      <pubDate>Thu, 05 Sep 2024 00:25:54 -0800</pubDate>
      <guid>https://klatz.co/blog/stable-diffusion/</guid>
      <description>&lt;p&gt;I got curious how Stable Diffusion works.&lt;/p&gt;&#xA;&lt;p&gt;Diffusion models, in short:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PNG -&amp;gt; Some &amp;ldquo;latest space&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Compressed with a &amp;ldquo;variational encoder / decoder&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Add noise according to a gaussian&lt;/li&gt;&#xA;&lt;li&gt;Pass (prompt,noise,latent_img, timestep) into a U-Net&lt;/li&gt;&#xA;&lt;li&gt;U-Net predicts noise that was added at that timestep&lt;/li&gt;&#xA;&lt;li&gt;A scheduler/sampler (e.g. DDPM, Euler) subtract predicted noise&lt;/li&gt;&#xA;&lt;li&gt;Pass through decoder&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;PNG -&amp;gt; Noise -&amp;gt; U-Net -&amp;gt; New PNG.&lt;/p&gt;&#xA;&lt;p&gt;PNG -vaencoder&amp;gt; Latent image -gaussian_noise&amp;gt;&#xA;latent+noise -unet&amp;gt; new_latent -vadecoder&amp;gt; New PNG&lt;/p&gt;</description>
    </item>
    <item>
      <title>2024 Plans</title>
      <link>https://klatz.co/blog/2024-plans/</link>
      <pubDate>Sat, 24 Feb 2024 19:15:36 -0800</pubDate>
      <guid>https://klatz.co/blog/2024-plans/</guid>
      <description>&lt;p&gt;Curious, once again, what voice to use where.&lt;/p&gt;&#xA;&lt;p&gt;Wanting to know precisely the correct time, socially, for a drink,&#xA;and precisely what the adverse health effects are.&lt;/p&gt;&#xA;&lt;p&gt;Thanksgiving in Chicago November. Gym with Jose.&lt;/p&gt;&#xA;&lt;p&gt;CCC at end of 2023.&lt;/p&gt;&#xA;&lt;p&gt;SF for two weeks in January.&lt;/p&gt;&#xA;&lt;p&gt;Colorado at the end of February, for Eric&amp;rsquo;s birthday.&lt;/p&gt;&#xA;&lt;!--&#xA;- goals: learn the crypto industry&#xA;- learn how the convos happen&#xA;--&gt;&#xA;&lt;p&gt;Working in novel fields means getting good quick at learning the techniques&#xA;of the specific field.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Properties of various blockchains</title>
      <link>https://klatz.co/blog/chains/</link>
      <pubDate>Mon, 19 Feb 2024 19:09:27 +0100</pubDate>
      <guid>https://klatz.co/blog/chains/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;Bitcoin&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The First One&lt;/li&gt;&#xA;&lt;li&gt;Proof of Work&lt;/li&gt;&#xA;&lt;li&gt;Has a scripting language called Script&lt;/li&gt;&#xA;&lt;li&gt;Lightning&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Ethereum&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Proof of Stake&lt;/li&gt;&#xA;&lt;li&gt;EVM opcodes see &lt;a href=&#34;https://klatz.co/blog/ethereum-execution-model&#34;&gt;my notes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;zksync&lt;/li&gt;&#xA;&lt;li&gt;Optimism&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Monero&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Privacy-preserving. High volume.&lt;/li&gt;&#xA;&lt;li&gt;Had some traceability issues early on&#xA;(&lt;a href=&#34;https://arxiv.org/pdf/1704.04299/&#34;&gt;paper&lt;/a&gt;)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;i.e., you could defeat the privacy guarantees&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Zcash&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Privacy-preserving. Not as high volume.&lt;/li&gt;&#xA;&lt;li&gt;ZKPs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Polkadot&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Focused on interoperability.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Substrate&amp;rdquo; SDK&#xA;&lt;ul&gt;&#xA;&lt;li&gt;hook into the base chain for computational &amp;ldquo;security&amp;rdquo; against 51%&#xA;attacks.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Kusama&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Polygon&lt;/li&gt;&#xA;&lt;li&gt;Solana&#xA;&lt;ul&gt;&#xA;&lt;li&gt;EBPF bytecode&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/solana-labs/rbpf&#34;&gt;rust impl&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Celestia&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some sort of interesting data availability primitives?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Cryptography Notes</title>
      <link>https://klatz.co/blog/cryptography/</link>
      <pubDate>Wed, 24 Jan 2024 05:27:56 +0100</pubDate>
      <guid>https://klatz.co/blog/cryptography/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Book: Understanding Cryptography &amp;ndash; Paar/Pelzi&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Course: &lt;a href=&#34;https://www.youtube.com/@introductiontocryptography4223/videos&#34;&gt;Introduction to Cryptography&lt;/a&gt; (YouTube) &amp;ndash; Paar&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Website: &lt;a href=&#34;https://zkhack.dev/&#34;&gt;zkhack.dev&lt;/a&gt; - by Boneh?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Course: &lt;a href=&#34;https://www.coursera.org/learn/crypto/&#34;&gt;Cryptography 1&lt;/a&gt; - Boneh&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Exercises: &lt;a href=&#34;https://cryptopals.com/sets/1&#34;&gt;Cryptopals&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Course: &lt;a href=&#34;https://appliedcryptography.page/&#34;&gt;Applied Cryptography&lt;/a&gt; &lt;a href=&#34;https://x.com/kaepora/status/1953003175176261884&#34;&gt;tweet&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Quantum computers break the hardness assumption of discrete log and&#xA;factoring primes.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RSA is broken.&lt;/li&gt;&#xA;&lt;li&gt;SHA256 has a sqrt() (quadratic) improvement - i.e. 256 -&amp;gt; 128.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Quantum computers are struggling with quantum error correction.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;ElGamal encryption system (1985) [wiki][55555]&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(n.b. not ElGamal signature scheme)&lt;/li&gt;&#xA;&lt;li&gt;DHKE-based pubkey encryption scheme&lt;/li&gt;&#xA;&lt;li&gt;uses cyclic groups, typically integers modulo a prime&lt;/li&gt;&#xA;&lt;li&gt;relies on discrete log hardness&lt;/li&gt;&#xA;&lt;li&gt;multiplicatively homomorphic ( &lt;code&gt;E(c1) * E(c2) = E(c1*c2) &lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;not used in modern FHE though, no addition and grows fast&lt;/li&gt;&#xA;&lt;li&gt;key generation is exponentiation in the group, h = g^x&lt;/li&gt;&#xA;&lt;li&gt;encryption is,&#xA;&lt;ul&gt;&#xA;&lt;li&gt;map message -&amp;gt; group element, m&lt;/li&gt;&#xA;&lt;li&gt;pick random integer y&lt;/li&gt;&#xA;&lt;li&gt;s = h ^ y (shared secret s)&lt;/li&gt;&#xA;&lt;li&gt;ciphertext is two parts; g^y and m * s&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;c1, c2, m can be used to reconstruct s &amp;amp; y, so new one generated every&#xA;message&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;decryption&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multisig vs Threshold Secret Sharing</title>
      <link>https://klatz.co/blog/multisig-vs-threshold/</link>
      <pubDate>Sun, 24 Dec 2023 16:26:54 +0100</pubDate>
      <guid>https://klatz.co/blog/multisig-vs-threshold/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;threshold secret sharing:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you have multiple shards of a secret&lt;/li&gt;&#xA;&lt;li&gt;given enough of them, you can reconstruct the whole secret&lt;/li&gt;&#xA;&lt;li&gt;sample implementation: &lt;a href=&#34;https://github.com/hashicorp/vault/blob/066b4a18088df8eac5bcabde4c2baa4dce44a0c6/shamir/shamir.go#L139&#34;&gt;github/hashicorp/vault/shamir.go&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;multisig:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you need multiple transactions from valid parties to execute&#xA;something&lt;/li&gt;&#xA;&lt;li&gt;sample implementation: &lt;a href=&#34;https://solidity-by-example.org/app/multi-sig-wallet/&#34;&gt;solidity-by-example/multisig&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/safe-global/safe-contracts/blob/f03dfae65fd1d085224b00a10755c509a4eaacfe/contracts/Safe.sol#L17&#34;&gt;github/safe/safe-contracts/Safe.sol&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;threshold: interesting cryptographic construction for reconstructing a&#xA;secret&lt;/li&gt;&#xA;&lt;li&gt;multisig: pattern in smart contract programming for only executing&#xA;something if enough signatures made by list of privkeys&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There&amp;rsquo;s also &lt;a href=&#34;https://en.wikipedia.org/wiki/Group_signature&#34;&gt;group signatures&lt;/a&gt; &amp;ndash; any member can generate a signature&#xA;on behalf of a group. Identity of the signer cannot be determined without&#xA;the group manager&amp;rsquo;s secret key.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ethereum execution model</title>
      <link>https://klatz.co/blog/ethereum-execution-model/</link>
      <pubDate>Mon, 18 Dec 2023 22:38:52 +0200</pubDate>
      <guid>https://klatz.co/blog/ethereum-execution-model/</guid>
      <description>&lt;h3 id=&#34;execution-model&#34;&gt;Execution model&lt;/h3&gt;&#xA;&lt;p&gt;source: &lt;a href=&#34;https://www.evm.codes/about&#34;&gt;https://www.evm.codes/about&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;stack based computer&lt;/li&gt;&#xA;&lt;li&gt;all instructions take args from stack except PUSHx&lt;/li&gt;&#xA;&lt;li&gt;sequential execution&#xA;&lt;ul&gt;&#xA;&lt;li&gt;JUMP / JUMPI&lt;/li&gt;&#xA;&lt;li&gt;REVERT&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;execution context:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;data regions&lt;/li&gt;&#xA;&lt;li&gt;variables (program counter)&lt;/li&gt;&#xA;&lt;li&gt;current caller (sender)&lt;/li&gt;&#xA;&lt;li&gt;callee&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;code region:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;sort of immutable&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SELFDESTRUCT / redeploy via CREATE2 can cause it to change&#xA;between 2 transactions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;EOAs have empty&lt;/li&gt;&#xA;&lt;li&gt;CODESIZE / CODECOPY&lt;/li&gt;&#xA;&lt;li&gt;EXTCODESIZE / EXTCODECOPY for cross-contract&#xA;&lt;ul&gt;&#xA;&lt;li&gt;return zero for contracts under construction&lt;/li&gt;&#xA;&lt;li&gt;indistinguishable from EOA, cannot trust detecting an EOA as an&#xA;address on chain&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;stack:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;32byte word size&lt;/li&gt;&#xA;&lt;li&gt;stores instruction inputs/outputs&lt;/li&gt;&#xA;&lt;li&gt;one created per call context&lt;/li&gt;&#xA;&lt;li&gt;destroyed at end of call context&lt;/li&gt;&#xA;&lt;li&gt;1024 values max&lt;/li&gt;&#xA;&lt;li&gt;PUSH1, POP, DUP1, SWAP1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;memory:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;not persistent / destroyed at end of call context&lt;/li&gt;&#xA;&lt;li&gt;initialized to 0&lt;/li&gt;&#xA;&lt;li&gt;MLOAD / MSTORE&lt;/li&gt;&#xA;&lt;li&gt;CREATE / EXTCODECOPY&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;storage:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;retained past completion of a call&lt;/li&gt;&#xA;&lt;li&gt;32byte keys, 32byte values&lt;/li&gt;&#xA;&lt;li&gt;SLOAD / SSTORE&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;calldata:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;region&lt;/li&gt;&#xA;&lt;li&gt;sent to transaction as part of smart contract transaction&lt;/li&gt;&#xA;&lt;li&gt;immutable&lt;/li&gt;&#xA;&lt;li&gt;CALLDATALOAD / CALLDATASIZE / CALLDATACOPY&lt;/li&gt;&#xA;&lt;li&gt;xCALL&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;return data:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RETURN / REVERT to set&lt;/li&gt;&#xA;&lt;li&gt;RETURNDATASIZE / RETURNDATACOPY&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;gas&#xA;&lt;ul&gt;&#xA;&lt;li&gt;validators &amp;ldquo;vet&amp;rdquo; transactions before they&amp;rsquo;re added&lt;/li&gt;&#xA;&lt;li&gt;they get paid for this&lt;/li&gt;&#xA;&lt;li&gt;memory expansion - offset accesses can cause more cost, grows&#xA;quadratic&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;access sets - list of storage slots&lt;/li&gt;&#xA;&lt;li&gt;touch slot lists - storage slot keys accessed by contract addresses&lt;/li&gt;&#xA;&lt;li&gt;gas refunds&#xA;&lt;ul&gt;&#xA;&lt;li&gt;contracts w insufficient gas fail&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;node-types&#34;&gt;Node types&lt;/h3&gt;&#xA;&lt;p&gt;source: &lt;a href=&#34;https://ethereum.org/en/developers/docs/nodes-and-clients/&#34;&gt;eth docs &amp;ndash; nodes and clients&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ZKP Rust Libraries</title>
      <link>https://klatz.co/blog/zkp-rust-libs/</link>
      <pubDate>Sun, 17 Dec 2023 21:16:26 +0200</pubDate>
      <guid>https://klatz.co/blog/zkp-rust-libs/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/arkworks-rs/r1cs-tutorial&#34;&gt;Arkworks&lt;/a&gt; has pretty unergonomic API but is the most used.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Example code to &lt;a href=&#34;https://github.com/arkworks-rs/r1cs-tutorial/blob/5d3a9022fb6deade245505748fd661278e9c0ff9/merkle-tree-example/src/lib.rs#L28&#34;&gt;prove a merkle tree inclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/zkcrypto/bellman&#34;&gt;Bellman&lt;/a&gt; looks a little nicer but a little less production-ready.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;exposes a bunch of low-level primitives (you have to implement a bit! and xor!) &lt;a href=&#34;https://electriccoin.co/blog/bellman-zksnarks-in-rust/&#34;&gt;for example&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;very mathy blog posts e.g. &lt;a href=&#34;https://trapdoortech.medium.com/zkp-deep-into-bellman-library-9b1bf52cb1a6&#34;&gt;https://trapdoortech.medium.com/zkp-deep-into-bellman-library-9b1bf52cb1a6&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Looks quite clean to write &amp;ndash;&#xA;&lt;a href=&#34;https://github.com/arcalinea/bellman-examples/blob/master/src/main.rs&#34;&gt;https://github.com/arcalinea/bellman-examples/blob/master/src/main.rs&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;needs random parameters?&lt;/li&gt;&#xA;&lt;li&gt;and a verifying key?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>VR Fishtank</title>
      <link>https://klatz.co/blog/vr-fishtank/</link>
      <pubDate>Thu, 14 Dec 2023 00:25:50 +0200</pubDate>
      <guid>https://klatz.co/blog/vr-fishtank/</guid>
      <description>&lt;p&gt;In January 2022, I moved to Berlin and led a team of 5 to build:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&#x9;&lt;li&gt;A VR puzzle competition connected to a real-life fishtank via&#xA;&#x9;submersible webcam video stream designed to teach binary reverse engineering&#xA;&#x9;&#x9;&lt;ul&gt;&#xA;&#x9;&#x9;&#x9;&lt;li&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;img src=&#34;https://klatz.co/images/submarine/0.gif&#34;&gt;&#xA;&#x9;&#x9;&#x9;&lt;/li&gt;&#xA;&#x9;&#x9;&#x9;&lt;li&gt;&#xA;&#x9;&#x9;&#x9; &#x9;&lt;!-- https://skillforge.com/how-to-autoplay-a-video-using-html-5-in-chrome/ --&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;video controls autoplay loop muted style=&#34;width: 100%&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;source type=&#34;video/mp4&#34; src=&#34;https://klatz.co/images/submarine/1.mp4&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/video&gt;&#xA;&#x9;&#x9;&#x9;&lt;/li&gt;&#xA;&#x9;&#x9;&#x9;&lt;li&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;img src=&#34;https://klatz.co/images/submarine/2.jpg&#34;&gt;&#xA;&#x9;&#x9;&#x9;&lt;/li&gt;&#xA;&#x9;&#x9;&#x9;&lt;li&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;img src=&#34;https://klatz.co/images/submarine/3.jpg&#34;&gt;&#xA;&#x9;&#x9;&#x9;&lt;/li&gt;&#xA;&#x9;&#x9;&#x9;&lt;li&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;img src=&#34;https://klatz.co/images/submarine/4.jpg&#34;&gt;&#xA;&#x9;&#x9;&#x9;&lt;/li&gt;&#xA;&#x9;&#x9;&#x9;&lt;li&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;img src=&#34;https://klatz.co/images/submarine/5.jpg&#34;&gt;&#xA;&#x9;&#x9;&#x9;&lt;/li&gt;&#xA;&#x9;&#x9;&#x9;&lt;li&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;img src=&#34;https://klatz.co/images/submarine/6.png&#34;&gt;&#xA;&#x9;&#x9;&#x9;&lt;/li&gt;&#xA;&#x9;&#x9;&#x9;&lt;li&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;video controls autoplay loop muted style=&#34;width: 100%&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;source type=&#34;video/mp4&#34; src=&#34;https://klatz.co/images/submarine/demovid.mp4&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/video&gt;&#xA;&#x9;&#x9;&#x9;&lt;/li&gt;&#xA;&#x9;&#x9;&lt;/ul&gt;&#xA;&#x9;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;why-did-i-build-this&#34;&gt;Why did I build this?&lt;/h3&gt;&#xA;&lt;p&gt;I moved to Berlin in the dead of winter, decided I wanted to start a&#xA;company, and naturally coped by spending 10-14h/day speaking Japanese&#xA;instead of going outside. As one does!&lt;/p&gt;</description>
    </item>
    <item>
      <title>bluesky</title>
      <link>https://klatz.co/blog/bluesky/</link>
      <pubDate>Tue, 02 May 2023 12:01:10 +0200</pubDate>
      <guid>https://klatz.co/blog/bluesky/</guid>
      <description>&lt;p&gt;i&amp;rsquo;m excited about it!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://staging.bsky.social/profile/klatz.co&#34;&gt;https://staging.bsky.social/profile/klatz.co&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;why&#34;&gt;why?&lt;/h3&gt;&#xA;&lt;p&gt;it solves a lot of twitter and mastodon&amp;rsquo;s problems. the devs are cool&#xA;people. i&amp;rsquo;ve used twitter ~every day for eight years, and have many times&#xA;not written useful code for myself because i knew it risked getting killed&#xA;by twitter.&lt;/p&gt;&#xA;&lt;h3 id=&#34;whats-cool-about-it&#34;&gt;what&amp;rsquo;s cool about it?&lt;/h3&gt;&#xA;&lt;p&gt;domain name handles.&lt;/p&gt;&#xA;&lt;p&gt;a collection of smart people who&amp;rsquo;ve thought for a long time about how to&#xA;architect things shaped like twitter&amp;rsquo;s access pattern in a healthily&#xA;decentralized way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git Notes</title>
      <link>https://klatz.co/blog/git-notes/</link>
      <pubDate>Fri, 24 Jun 2022 00:47:37 +0200</pubDate>
      <guid>https://klatz.co/blog/git-notes/</guid>
      <description>&lt;p&gt;From contributing to Stepmania:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git pull --rebase upstream main&#xA;git push origin main&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# delete local branch&#xA;git branch -d foo/bar&#xA;# delete remote branch&#xA;git push origin --delete foo/bar&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# updating personal fork&#xA;git pull --rebase upstream main   # pull most recent changes from project.&#xA;                                  # --rebase avoids merge commit.&#xA;                                  # only drop in case of merge conflict.&#xA;                                  # requires setting upstream to stepmania and being on origin.&#xA;&#xA;&#xA;# submitting a PR&#xA;  create new branch&#xA;  commit changes to new branch&#xA;  push to remote (fork)&#xA;  click green &amp;#34;submit pull request&amp;#34;&#xA;&#xA;the branch element is important - PR&amp;#39;s are branch based, not snapshots. further commits on a branch that is PR&amp;#39;d will create problems - they&amp;#39;ll be part of the same PR.&#xA;&amp;gt;&amp;gt; two simultaneous PR&amp;#39;s will cause problems.&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Protecting</title>
      <link>https://klatz.co/blog/i-want-to-protect-it/</link>
      <pubDate>Wed, 02 Feb 2022 12:55:39 +0100</pubDate>
      <guid>https://klatz.co/blog/i-want-to-protect-it/</guid>
      <description>&lt;p&gt;&amp;hellip; is hard, because it&amp;rsquo;s parenting.&lt;/p&gt;&#xA;&lt;p&gt;And with parenting, you have to clean up after your kids, even when they&#xA;make large messes, and you&amp;rsquo;re tired, and you&amp;rsquo;re at your wit&amp;rsquo;s end.&lt;/p&gt;&#xA;&lt;p&gt;The impulse to protect can be dangerous when misdirected. Or even wielded&#xA;by adversaries.&lt;/p&gt;&#xA;&lt;p&gt;Think misapplications &amp;ndash; those prepared to protect everything are bound to&#xA;run out of resources. (Perhaps threat modeling / allocating resources under&#xA;scarcity is useful here?)&lt;/p&gt;</description>
    </item>
    <item>
      <title>What is security research?</title>
      <link>https://klatz.co/blog/what-is-security-research/</link>
      <pubDate>Sun, 08 Aug 2021 12:54:35 +0100</pubDate>
      <guid>https://klatz.co/blog/what-is-security-research/</guid>
      <description>&lt;p&gt;(target audience: students)&lt;/p&gt;&#xA;&lt;p&gt;Depends on context, but roughly sortable into 3 categories:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Independent (you, by yourself)&lt;/li&gt;&#xA;&lt;li&gt;Industry (you, with a company)&lt;/li&gt;&#xA;&lt;li&gt;Academic (you, with a professor)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These different sectors have different incentives. It is worth considering&#xA;whether these incentives align with your goals. Once affiliated with an&#xA;institution, it generally becomes easier to switch to similar classes/tiers of&#xA;institutions.&lt;/p&gt;&#xA;&lt;p&gt;I previously did undergraduate research with an academic lab that focused&#xA;on systems security.  Nowadays I do personal research into whatever topics&#xA;I find interesting / think are most relevant for my career.&lt;/p&gt;</description>
    </item>
    <item>
      <title>pwnies-please: Adversarially Attacking an Image Classifier</title>
      <link>https://klatz.co/blog/pwnies-please/</link>
      <pubDate>Tue, 03 Aug 2021 13:14:43 -0600</pubDate>
      <guid>https://klatz.co/blog/pwnies-please/</guid>
      <description>&lt;img src=&#34;https://klatz.co/images/pwnies.png&#34;&gt;&#xA;&lt;p&gt;For &lt;a href=&#34;https://2021.uiuc.tf/challenges#pwnies_please-30&#34;&gt;UIUCTF 2021&lt;/a&gt;, I led a small group of colleagues to design and&#xA;deploy a CTF challenge wherein competitors had to fool an image classifier&#xA;based on &lt;code&gt;resnet18&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The challenge asks you to upload an image to the &amp;ldquo;pwny bouncer&amp;rdquo;, who will&#xA;then classify &amp;ldquo;pwny&amp;rdquo; or &amp;ldquo;not a pwny&amp;rdquo; using a naive classifier model, and a&#xA;robust classifier model. To win the flag, you must submit 10 images that&#xA;&amp;ldquo;fool&amp;rdquo; the nonrobust classifier (i.e. cause a mismatch between the&#xA;classifiers).&lt;/p&gt;</description>
    </item>
    <item>
      <title>radare2 install</title>
      <link>https://klatz.co/blog/radare2-install/</link>
      <pubDate>Sat, 03 Oct 2020 15:24:07 -0800</pubDate>
      <guid>https://klatz.co/blog/radare2-install/</guid>
      <description>&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/radareorg/radare2 &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; cd radare2 &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sys/install.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>how to use venv, simple</title>
      <link>https://klatz.co/blog/how-to-use-venv-simple/</link>
      <pubDate>Fri, 02 Oct 2020 22:34:55 -0800</pubDate>
      <guid>https://klatz.co/blog/how-to-use-venv-simple/</guid>
      <description>&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# tl;dr it lets you make a clean disposable python environment&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;# while in a project directory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python3 -m venv env&#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;ls ./env/bin&#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;# Activate.ps1  activate  activate.csh  activate.fish  easy_install easy_install-3.8  pip  pip3  pip3.8  pygmentize  python  python3&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;source ./env/bin/activate&#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;# now we can install packages in this folder&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;which python3&#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;# /home/ian/tmp/env/bin/python3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;which pip3&#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;# /home/ian/tmp/env/bin/pip3&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;pip install &lt;span style=&#34;color:#75715e&#34;&gt;# whatever you need&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Top N Most Valuable Metaskills for Technical People</title>
      <link>https://klatz.co/blog/critical-metaskills/</link>
      <pubDate>Tue, 15 Sep 2020 03:10:25 -0800</pubDate>
      <guid>https://klatz.co/blog/critical-metaskills/</guid>
      <description>&lt;p&gt;(continuing the theme of &amp;ldquo;me writing posts for friends I&amp;rsquo;m teaching to&#xA;code&amp;rdquo;)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How to ask technical questions artfully: &lt;a href=&#34;https://www.google.com/search?q=how+to+ask+technical+questions&#34;&gt;https://www.google.com/search?q=how+to+ask+technical+questions&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Get faster, better, more accurate responses&lt;/li&gt;&#xA;&lt;li&gt;People like you for asking questions interestingly and respectfully&lt;/li&gt;&#xA;&lt;li&gt;Feel the fear, and do it anyway&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;How to read documentation&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Python docs are good for reference, but they do not often explain well&lt;/li&gt;&#xA;&lt;li&gt;Sites like Geeksforgeeks, w3c are good for finding examples of how to&#xA;do a specific thing you want&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;How to submit good pull requests&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Be cheery and polite!&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/ianklatzco/psky.app/issues/4&#34;&gt;https://github.com/ianklatzco/psky.app/issues/4&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;img src=&#34;https://klatz.co/images/steve.png&#34;&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>How to make a Discord Bot</title>
      <link>https://klatz.co/blog/how-to-make-a-discord-bot/</link>
      <pubDate>Sun, 23 Aug 2020 23:41:08 -0700</pubDate>
      <guid>https://klatz.co/blog/how-to-make-a-discord-bot/</guid>
      <description>&lt;p&gt;Audience: friends I&amp;rsquo;m teaching to code.&lt;/p&gt;&#xA;&lt;p&gt;Warning, these are likely to change as WSL and discord.py do.&lt;/p&gt;&#xA;&lt;p&gt;If you get stuck anywhere or want to know more, DM me!&lt;/p&gt;&#xA;&lt;h1 id=&#34;goal&#34;&gt;Goal&lt;/h1&gt;&#xA;&lt;p&gt;A Discord bot on your local computer that runs when your computer is on.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Know how to read&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;you-will-learn&#34;&gt;You will learn&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How to read long instructions, ignoring irrelevant info so you can find what you need quickly&lt;/li&gt;&#xA;&lt;li&gt;How to use PowerShell, the Windows command line&lt;/li&gt;&#xA;&lt;li&gt;How to use Bash, the Linux command line&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(if Windows) install Windows Subsystem for Linux and upgrade it to version 2&lt;/li&gt;&#xA;&lt;li&gt;Install Windows Terminal&lt;/li&gt;&#xA;&lt;li&gt;Install Python and library &lt;code&gt;discord.py&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Make a new Discord Server and add me/the bot to it&lt;/li&gt;&#xA;&lt;li&gt;Copy some quickstart code into a file and save it&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;install-wsl-v2&#34;&gt;Install WSL v2&lt;/h3&gt;&#xA;&lt;p&gt;Instructions adapted from &lt;a href=&#34;https://docs.microsoft.com/en-us/windows/wsl/install-win10&#34;&gt;these&lt;/a&gt;, I&amp;rsquo;ve pulled out the relevant parts as of August 2020.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RSI/Keyboard Overuse Resources</title>
      <link>https://klatz.co/blog/rsi-resources/</link>
      <pubDate>Thu, 02 Jul 2020 15:41:52 -0700</pubDate>
      <guid>https://klatz.co/blog/rsi-resources/</guid>
      <description>&lt;p&gt;A friend recently developed tendonitis from typing/piano/Overwatch 12-14 hrs/day and I sent them my list of resources, collected over many years of me worrying about long-term effects of computer usage. Here they are.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;ldquo;&lt;a href=&#34;https://www.deconstructconf.com/2019/emily-shea-voice-driven-development&#34;&gt;Voice Driven Development&lt;/a&gt;&amp;rdquo; - Talk by Emily Shea on fighting RSI using Talon, an OSS software project&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.gboards.ca/product/georgi&#34;&gt;g Heavy Industries&lt;/a&gt;: Stenography keyboards made by a person with strong friendly hacker energy (&lt;a href=&#34;https://web.archive.org/web/20200614205207/https://twitter.com/gHeavyIndustry/status/1272267314629468161&#34;&gt;tweet&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.xkcd.com/2007/08/14/mirrorboard-a-one-handed-keyboard-layout-for-the-lazy/&#34;&gt;Old xkcd blog post&lt;/a&gt; about a quick-to-learn one-hand mirrored keyboard layout&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.dropbox.com/sh/qnr06iqyiet8tlg/AAAB-7WDx3N_g4uWylO_zfLba?dl=0&#34;&gt;My collection of random wrist stretches&lt;/a&gt; posted to the internet&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ergodox-ez.com/&#34;&gt;Company that sells Ergodox keyboards&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>WASM Reversing (b01lerctf 2020 alientech web 300)</title>
      <link>https://klatz.co/blog/boilerctf-alien-tech/</link>
      <pubDate>Sun, 15 Mar 2020 20:44:14 -0700</pubDate>
      <guid>https://klatz.co/blog/boilerctf-alien-tech/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/ianklatzco/ctf-blog/tree/master/files/alien_tech&#34;&gt;Files&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This challenge had 0 solves, probably because it was for a smaller CTF and had a difficult logical jump. I got about halfway through this challenge before getting stuck. I ended up&#xA;asking the organizers for the intended solve after the competition ended,&#xA;at which point I quickly solved it.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;re given a WASM binary and a webserver asking for a username and&#xA;password. &lt;a href=&#34;https://web.archive.org/web/20200316050500/http://ctfhacker.com/reverse/2018/09/16/flareon-2018-chrome-debugger.html&#34;&gt;This previous&#xA;writeup&lt;/a&gt;&#xA;was immensely helpful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2019 Year in Review: Finishing School, SIGPwny, Japan</title>
      <link>https://klatz.co/blog/2019-year-in-review/</link>
      <pubDate>Thu, 06 Feb 2020 04:15:38 -0800</pubDate>
      <guid>https://klatz.co/blog/2019-year-in-review/</guid>
      <description>&lt;p&gt;&lt;em&gt;this post was started 6 February, finished 9 July, and is backdated&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Been a while since the last post! I&amp;rsquo;ve been busy I guess. Haven&amp;rsquo;t had too&#xA;much of an itch to blog until I got to Seattle and had &lt;del&gt;a little&#xA;downtime&lt;/del&gt; caffeine at 10pm by accident. Writing late at night remains one of my favorite hobbies.&lt;/p&gt;&#xA;&lt;p&gt;I still really like the idea of blogging and hosting your own thing, because it&amp;rsquo;s a log of my life and I can share it with friends. I&amp;rsquo;d also like to refine my writing and decide on a tone for this particular blog, especially as I get interested in / develop expertise in my various subfields. For now, &amp;ldquo;this is my life and also random rhythm game information&amp;rdquo; seems good.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a crappy DBI harness for ASISCTF 2019: Silkroad</title>
      <link>https://klatz.co/blog/asisctf-silkroad/</link>
      <pubDate>Mon, 22 Apr 2019 03:57:15 -0600</pubDate>
      <guid>https://klatz.co/blog/asisctf-silkroad/</guid>
      <description>&lt;p&gt;I spent a disproportionately large amount of time solving the first portion&#xA;of this binary, because I was having fun learning things via it. I&#xA;did not solve anything past the first function, but hoo boy, there&amp;rsquo;s a great&#xA;pleasure in diving really deeply into a small problem and learning a lot.&lt;/p&gt;&#xA;&lt;p&gt;We are given a pwn binary that asks for a magic value and runs through six&#xA;obfuscated constraints. It reads from stdin, stores the ASCII, &lt;code&gt;strtol&lt;/code&gt;s&#xA;(str to long int) it, and &lt;code&gt;strlen&lt;/code&gt;s it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CypherCon 4 Talk: Building a Cohesive Undergraduate Security Club</title>
      <link>https://klatz.co/blog/cyphercon4-building-undergrad-sec-clubs/</link>
      <pubDate>Thu, 11 Apr 2019 11:30:59 -0700</pubDate>
      <guid>https://klatz.co/blog/cyphercon4-building-undergrad-sec-clubs/</guid>
      <description>&lt;p&gt;&lt;em&gt;Ian Klatzco&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;tldr-how-to-make-a-successful-security-club&#34;&gt;tl;dr: How to make a successful security club&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Create an easy-to-access chatroom (Discord)&lt;/li&gt;&#xA;&lt;li&gt;Set up a CTF framework like CTFd&lt;/li&gt;&#xA;&lt;li&gt;Make extremely easy challenges&lt;/li&gt;&#xA;&lt;li&gt;Make slides, hand them out at the beginning&lt;/li&gt;&#xA;&lt;li&gt;Present on them for 15m, walk around and help people solve for 45m&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;abstract&#34;&gt;Abstract&lt;/h3&gt;&#xA;&lt;p&gt;Building good teams (either in the &amp;ldquo;elite&amp;rdquo; sense or the &amp;ldquo;healthy culture&amp;rdquo;&#xA;sense) is hard. Our university security club had its ups and downs between&#xA;boring meetings and inaccessibility to newcomers &amp;ndash; we stepped it up this&#xA;year with a tighter meeting format, approachable 24-7 internal CTF, and&#xA;internal documentation. We saw better attendance, more people staying after&#xA;meetings, and freshmen successfully completing projects with upperclassman&#xA;mentorship. Other exciting developments include reusable published meetings&#xA;and writing our own fuzzers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GDB Catchpoints</title>
      <link>https://klatz.co/blog/gdb-catchpoints/</link>
      <pubDate>Wed, 13 Mar 2019 20:12:22 -0500</pubDate>
      <guid>https://klatz.co/blog/gdb-catchpoints/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gdb-peda$ help catch&#xA;Set catchpoints to catch events.&#xA;&#xA;List of catch subcommands:&#xA;&#xA;catch assert -- Catch failed Ada assertions&#xA;catch catch -- Catch an exception&#xA;catch exception -- Catch Ada exceptions&#xA;catch exec -- Catch calls to exec&#xA;catch fork -- Catch calls to fork&#xA;catch handlers -- Catch Ada exceptions&#xA;catch load -- Catch loads of shared libraries&#xA;catch rethrow -- Catch an exception&#xA;catch signal -- Catch signals by their names and/or numbers&#xA;catch syscall -- Catch system calls by their names&#xA;catch throw -- Catch an exception&#xA;catch unload -- Catch unloads of shared libraries&#xA;catch vfork -- Catch calls to vfork&#xA;&#xA;Type &amp;#34;help catch&amp;#34; followed by catch subcommand name for full documentation.&#xA;Type &amp;#34;apropos word&amp;#34; to search for commands related to &amp;#34;word&amp;#34;.&#xA;Command name abbreviations are allowed if unambiguous.&#xA;gdb-peda$&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So, if you wanted to catch all syscalls, you can &lt;code&gt;catch syscall&lt;/code&gt;. This will&#xA;stop on the entrance and exit of each syscall. Divide by two, and you&amp;rsquo;ll&#xA;get the total number of syscalls run by your program.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Compiling SM5 on Windows: 2019</title>
      <link>https://klatz.co/blog/compiling-sm5-2019/</link>
      <pubDate>Sat, 16 Feb 2019 22:18:30 -0600</pubDate>
      <guid>https://klatz.co/blog/compiling-sm5-2019/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;Installed a bunch of dependencies from&#xA;&lt;a href=&#34;https://github.com/stepmania/stepmania/wiki/Compiling-StepMania&#34;&gt;https://github.com/stepmania/stepmania/wiki/Compiling-StepMania&lt;/a&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Dl&amp;rsquo;d directx&lt;/li&gt;&#xA;&lt;li&gt;had 2015 redistrib on system&lt;/li&gt;&#xA;&lt;li&gt;installed windows 10 sdk&lt;/li&gt;&#xA;&lt;li&gt;installed latest nsis (release 15 dec 2018)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;installed visual studio community&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;git clone git@github.com:stepmania/stepmania.git&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cd stepmania &amp;amp;&amp;amp; git submodule update --init&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Visual Studio &amp;gt; Open &amp;gt; CMake &amp;gt; stepmania/CMakeLists.txt&lt;/li&gt;&#xA;&lt;li&gt;Commented out &lt;a href=&#34;https://github.com/stepmania/stepmania/issues/1794&#34;&gt;some lines of CMake&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;No argument specified with option /LIBPATH&lt;/li&gt;&#xA;&lt;li&gt;Started installing &lt;a href=&#34;https://github.com/etternagame/etterna/blob/develop/Docs/Building.md#dependenciesrequired-libraries&#34;&gt;etterna deps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Ultimately commented out &lt;a href=&#34;https://github.com/stepmania/stepmania/blob/e0b27d60b9da88bc6569b0b0b96a1b1ea7a75b4c/src/CMakeLists.txt#L421&#34;&gt;this line&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Unsure why it solved the problem, but it successfully compiled so&amp;hellip;&amp;hellip;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>IO Functions</title>
      <link>https://klatz.co/blog/io-functions/</link>
      <pubDate>Wed, 30 Jan 2019 04:17:22 -0600</pubDate>
      <guid>https://klatz.co/blog/io-functions/</guid>
      <description>&lt;p&gt;Manners of getting input. From memory, maybe more later.&lt;/p&gt;&#xA;&lt;p&gt;x86, 32 &amp;amp; 64b.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;read from stdin to a buffer&lt;/code&gt;: Will read any character (incl. nulls).&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;fgets&lt;/code&gt;: reads up to n-1. terminates on nulls. adds a newline.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;scanf&lt;/code&gt;: varargs. takes a format string specifier, eg &lt;code&gt;scanf(&amp;quot;%9s&amp;quot;, mem_loc);&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;getc in a while() loop&lt;/code&gt;: probably my least favorite.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;mmap()&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;port mapped io&lt;/code&gt;: x86 instructions &lt;code&gt;in&lt;/code&gt; and &lt;code&gt;out&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;mmio&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>UW printf chals: leakme</title>
      <link>https://klatz.co/blog/printf-chals/</link>
      <pubDate>Fri, 18 Jan 2019 03:35:00 -0600</pubDate>
      <guid>https://klatz.co/blog/printf-chals/</guid>
      <description>&lt;p&gt;&lt;em&gt;audience: sigpwny members after the meeting where we ran it. very tutorial-y&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;would probably be very useful for students trying to do CS461/ECE422&amp;rsquo;s printf activity, though that&amp;rsquo;s 32-bit&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;sigpwny meets 7pm thursday eceb 3013; we can&amp;rsquo;t help you with your security MPs but we&amp;rsquo;ll teach you the skills necessary to do them&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is very long and favors going in-depth so you can learn &lt;em&gt;why&lt;/em&gt; we&amp;rsquo;re doing things&#xA;rather than just giving you the solution. It probably could use some more editing. &lt;a href=&#34;https://github.com/ianklatzco/ctf-blog/blob/master/_posts/2019-01-18-printf-chals.md&#34;&gt;Pull requests are welcome&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>peda.py reference</title>
      <link>https://klatz.co/blog/peda-reference/</link>
      <pubDate>Fri, 18 Jan 2019 00:50:00 -0600</pubDate>
      <guid>https://klatz.co/blog/peda-reference/</guid>
      <description>&lt;p&gt;A few PEDA commands are undocumented (on the first page of the GitHub repo,&#xA;there&amp;rsquo;s more useful help in &lt;code&gt;help&lt;/code&gt;). Here are my notes.&lt;/p&gt;&#xA;&lt;p&gt;There are a bunch of useful aliases at the &lt;a href=&#34;https://github.com/longld/peda/blob/7f673be05db619105bc3e0203aad57844a1665e0/peda.py#L6151&#34;&gt;bottom of the file&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;stack-n&#34;&gt;stack n&lt;/h3&gt;&#xA;&lt;p&gt;Prints &lt;code&gt;n&lt;/code&gt; words off the stack.&lt;/p&gt;&#xA;&lt;h3 id=&#34;context&#34;&gt;context&lt;/h3&gt;&#xA;&lt;p&gt;Type &lt;code&gt;context&lt;/code&gt; to re-print what usually prints at a breakpoint (registers, code, stack).&lt;/p&gt;&#xA;&lt;h3 id=&#34;built-in-exploit-code&#34;&gt;Built-in exploit code&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gdb-peda$ help skeleton&#xA;Generate python exploit code template&#xA;Usage:&#xA;    skeleton type [file]&#xA;        type = argv: local exploit via argument&#xA;        type = env: local exploit via crafted environment (including NULL byte)&#xA;        type = stdin: local exploit via stdin&#xA;        type = remote: remote exploit via TCP socket&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;skip-over-certain-functions-alarm&#34;&gt;Skip over certain functions (alarm)&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gdb-peda$ help deactive&#xA;Bypass a function by ignoring its execution (eg sleep/alarm)&#xA;Usage:&#xA;    deactive function&#xA;    deactive function del (re-active)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>CSAW2018: tablez</title>
      <link>https://klatz.co/blog/tablez/</link>
      <pubDate>Thu, 17 Jan 2019 22:56:00 -0600</pubDate>
      <guid>https://klatz.co/blog/tablez/</guid>
      <description>&lt;p&gt;Warning: very stream-of-thought-y.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;It&amp;rsquo;s PIE, and ASLR is already off on my machine which makes restarting in GDB easier.&lt;/p&gt;&#xA;&lt;p&gt;Set a breakpoint on &lt;code&gt;main&lt;/code&gt;, and the &lt;code&gt;strncmp&lt;/code&gt; in &lt;code&gt;main&lt;/code&gt; that looks useful.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;main&lt;/code&gt; checks to make sure the input string is 37 bytes.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;r &amp;lt;&amp;lt;&amp;lt; $(python -c &amp;#34;print &amp;#39;a&amp;#39;*37&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;x64 calling convention is &lt;code&gt;rdi, rsi, rdx, rcx, r8, r9, and then they start going on the stack.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;peda guesses the args on &lt;code&gt;strncmp&lt;/code&gt; (and has one extra that shouldn&amp;rsquo;t be there):&lt;/p&gt;</description>
    </item>
    <item>
      <title>x64 Argument Passing</title>
      <link>https://klatz.co/blog/x64-argument-passing/</link>
      <pubDate>Thu, 17 Jan 2019 22:56:00 -0600</pubDate>
      <guid>https://klatz.co/blog/x64-argument-passing/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;According to the ABI, the first 6 integer or pointer arguments to a&#xA;function are passed in registers. The first is placed in rdi, the second in&#xA;rsi, the third in rdx, and then rcx, r8 and r9. Only the 7th argument and&#xA;onwards are passed on the stack.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64&#34;&gt;via&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>RISC-V Opcodes and Register Names</title>
      <link>https://klatz.co/blog/riscv-opcodes/</link>
      <pubDate>Wed, 02 Jan 2019 21:49:00 -0900</pubDate>
      <guid>https://klatz.co/blog/riscv-opcodes/</guid>
      <description>&lt;p&gt;I needed this a few times during ECE411 — Computer Organization and Design at&#xA;UIUC.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Opcodes are stored in the lowest 6 bits of the instructions (for 32 bit mode at least)&#xA;&#xA;LUI       0110111&#xA;AUIPC     0010111&#xA;JAL       1101111&#xA;JALR      1100111&#xA;BEQ       1100011&#xA;BNE       1100011&#xA;BLT       1100011&#xA;BGE       1100011&#xA;BLTU      1100011&#xA;BGEU      1100011&#xA;LB        0000011&#xA;LH        0000011&#xA;LW        0000011&#xA;LBU       0000011&#xA;LHU       0000011&#xA;SB        0100011&#xA;SH        0100011&#xA;SW        0100011&#xA;ADDI      0010011&#xA;SLTI      0010011&#xA;SLTIU     0010011&#xA;XORI      0010011&#xA;ORI       0010011&#xA;ANDI      0010011&#xA;SLLI      0010011&#xA;SRLI      0010011&#xA;SRAI      0010011&#xA;ADD       0110011&#xA;SUB       0110011&#xA;SLL       0110011&#xA;SLT       0110011&#xA;SLTU      0110011&#xA;XOR       0110011&#xA;SRL       0110011&#xA;SRA       0110011&#xA;OR        0110011&#xA;AND       0110011&#xA;FENCE     0001111&#xA;FENCE.I   0001111&#xA;ECALL     1110011&#xA;EBREAK    1110011&#xA;CSRRW     1110011&#xA;CSRRS     1110011&#xA;CSRRC     1110011&#xA;CSRRWI    1110011&#xA;CSRRSI    1110011&#xA;CSRRCI    1110011&#xA;&#xA;pg. 104 (Chapter 19) of the RISC-V Spec, version 2.2 volume 1:&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h4 id=&#34;register-names&#34;&gt;Register Names&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pg. 109 (Chapter 20) of the RISC-V Spec, version 2.2 volume 1:&#xA;Contains an assembly programmer&amp;#39;s manual (or at least, a placeholder for one)&#xA;which has some useful resources such as a mapping of pseudoinstructions to&#xA;base instructions.&#xA;&#xA;Register : ABI Name : Description                       : Saver&#xA;x0       : zero     : Hard-wired zero                   : -&#xA;x1       : ra       : Return address                    : Caller&#xA;x2       : sp       : Stack pointer                     : Callee&#xA;x3       : gp       : Global pointer                    : -&#xA;x4       : tp       : Thread pointer                    : -&#xA;x5       : t0       : Temporary/alternate link register : Caller&#xA;x6–7     : t1–2     : Temporaries                       : Caller&#xA;x8       : s0/fp    : Saved register/frame pointer      : Callee&#xA;x9       : s1       : Saved register                    : Callee&#xA;x10–11   : a0–1     : Function arguments/return values  : Caller&#xA;x12–17   : a2–7     : Function arguments                : Caller&#xA;x18–27   : s2–11    : Saved registers                   : Callee&#xA;x28–31   : t3–6     : Temporaries                       : Caller&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Python LC3 Emulator</title>
      <link>https://klatz.co/blog/python-lc3/</link>
      <pubDate>Mon, 31 Dec 2018 10:40:00 -0900</pubDate>
      <guid>https://klatz.co/blog/python-lc3/</guid>
      <description>&lt;p&gt;I wanted to learn how to write a CPU emulator, because it seemed like fun!&#xA;I ended up writing a disassembler too. &lt;a href=&#34;https://github.com/ianklatzco/lc3&#34;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I came across this &amp;ldquo;&lt;a href=&#34;https://justinmeiners.github.io/lc3-vm/&#34;&gt;literate program&lt;/a&gt;&amp;rdquo; on how to write one in C++. I wanted to&#xA;do it in Python, because it seemed like it would be more educational if I needed&#xA;to transform the presented C++ into Python, and I was in the mood to learn more&#xA;Python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Digging into pwntools</title>
      <link>https://klatz.co/blog/digging-into-pwntools/</link>
      <pubDate>Sun, 30 Dec 2018 14:40:00 -0900</pubDate>
      <guid>https://klatz.co/blog/digging-into-pwntools/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m digging around into how pwntools is packaged. It looks really nicely organized and commented.&lt;/p&gt;&#xA;&lt;h4 id=&#34;get-the-path-of-a-python-modules&#34;&gt;Get the path of a python modules&lt;/h4&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-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; pwn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(pwn&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;__file__)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;pwn&lt;/code&gt; module is just a top-level with nice naming — &lt;code&gt;pwnlib&lt;/code&gt; actually contains all the functionality.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;dynelf.py&lt;/code&gt; is really interesting — it lets you resolve any symbol in a binary given a function &lt;code&gt;leak(arbitrary_address)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to learn about computers</title>
      <link>https://klatz.co/blog/how-to-learn-about-computers/</link>
      <pubDate>Mon, 17 Dec 2018 09:45:00 -0500</pubDate>
      <guid>https://klatz.co/blog/how-to-learn-about-computers/</guid>
      <description>&lt;p&gt;I have this conversation with a lot of friends so I figured I&amp;rsquo;d collect my&#xA;favorite resources somewhere so that I can just pass around a list. This is&#xA;targeted at people who did not/do not intend to do a CS major in undergrad,&#xA;and who are interested in learning more as a hobby or to get a job.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;The hardest problem in computer science is learning how to enjoy it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quartus and ModelSim Tips &amp; Tricks</title>
      <link>https://klatz.co/blog/quartus-and-modelsim/</link>
      <pubDate>Sun, 09 Dec 2018 22:43:00 -0500</pubDate>
      <guid>https://klatz.co/blog/quartus-and-modelsim/</guid>
      <description>&lt;p&gt;Here are some things I learned during my time in ECE385 (FPGA Laboratory) and&#xA;ECE411 (CPU Organization &amp;amp; Design) at UIUC.&lt;/p&gt;&#xA;&lt;h3 id=&#34;you-dont-have-to-re-build-in-quartus-if-you-made-small-changes&#34;&gt;You don&amp;rsquo;t have to re-build in Quartus if you made small changes.&lt;/h3&gt;&#xA;&lt;p&gt;You can just use the ModelSim command line (&amp;ldquo;Transcript&amp;rdquo;) and push up until you&#xA;see &lt;code&gt;do &amp;lt;PROJECT NAME&amp;gt;_run_msim_rtl_verilog.do&lt;/code&gt;. This will re-compile inside of&#xA;ModelSim, saving you the need to close and reopen it.&lt;/p&gt;&#xA;&lt;h3 id=&#34;set-the-radix-to-hexadecimal&#34;&gt;Set the radix to hexadecimal&lt;/h3&gt;&#xA;&lt;p&gt;385 teaches you to do it through a GUI. The equivalent command (for ModelSim&amp;rsquo;s&#xA;command window) is &lt;code&gt;radix -h&lt;/code&gt; or &lt;code&gt;ra h&lt;/code&gt;. You can try setting it to default&#xA;to this, but I never got it working.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SM5 Lua: Error Reporting</title>
      <link>https://klatz.co/blog/sm5-lua-errors/</link>
      <pubDate>Sat, 24 Nov 2018 07:57:00 -0500</pubDate>
      <guid>https://klatz.co/blog/sm5-lua-errors/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m probably going to need a dance game sub-blog at this rate.&lt;/p&gt;&#xA;&lt;p&gt;I &lt;em&gt;really&lt;/em&gt; wish Stepmania didn&amp;rsquo;t crash (silently!) whenever it failed to&#xA;find a file somewhere.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;d love to write my own file loaders that didn&amp;rsquo;t fail on a missing file.&#xA;Maybe simply shim everything to check if the file exists first?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TLDR&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;SM(table)&lt;/code&gt; in Simply Love that pretty prints tables and whatever&#xA;strings you want to print. It will write to crashinfo.txt, log.txt, and to&#xA;the command line.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;debug.debug()&lt;/code&gt; will cause the game to hang until you hit enter in the command line.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Warn&lt;/code&gt; and &lt;code&gt;Trace&lt;/code&gt; seem not useful: they write to a text log in some&#xA;random directory.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;print&lt;/code&gt; is just &lt;code&gt;Trace&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;error&lt;/code&gt; will bail out of your actors/functions on error, and print at the&#xA;top of the screen.&lt;/li&gt;&#xA;&lt;/ul&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-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- I think this is built-in Lua functionality.&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;-- The fallback theme init script makes some shortcuts for this.&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;-- https://github.com/stepmania/stepmania/blob/27fdfb38718474253aeb33e9f9c7fd1a91ed823a/Themes/_fallback/Scripts/00%20init.lua#L11&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;-- aka print/Trace as defined in _fallback&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lua.Trace(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;string&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;-- Writes &amp;#39;timestap: string&amp;#39; to log.txt.&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;-- It looks like crashinfo.txt&amp;#39;s partial log is the last few things that&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;-- were supposed to be written to log.txt, before they were written.&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;error(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;reason&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;-- Bails on the current actor. Will prevent it from loading&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;-- any further (basically exits out of it) and displays the error at the top&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;-- of the Stepmania screen (if error reporting enabled).&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;lua.Warn(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;String&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;-- aka Warn&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;-- Prints the following to log.txt:&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;&#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;-- 02:14.132: WARNING: String&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Logs -&amp;gt; ~/Library/Logs/PRODUCT_ID&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>radare2 basics</title>
      <link>https://klatz.co/blog/r2-basics/</link>
      <pubDate>Fri, 16 Nov 2018 15:01:53 -0500</pubDate>
      <guid>https://klatz.co/blog/r2-basics/</guid>
      <description>&lt;p&gt;&lt;em&gt;(I wrote this post for our underclassmen, because I kept needing to explain how to get to graph mode in r2 and didn&amp;rsquo;t want to keep repeating myself).&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Radare2 is a vim-like reverse engineering tool. It is free. Your other options are Binary Ninja and IDA, which cost money for anything other than 32 bit binaries. They are substantially easier to learn and use.&lt;/p&gt;&#xA;&lt;p&gt;Here I&amp;rsquo;ll walk through an alternative way to solve &lt;a href=&#34;http://ctf.sigpwny.com/challenges#how2re&#34;&gt;how2re&lt;/a&gt; from the one we went over during the meeting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>boilerctf: old-oaken-bucket</title>
      <link>https://klatz.co/blog/old-oaken-bucket/</link>
      <pubDate>Mon, 05 Nov 2018 00:02:00 -0500</pubDate>
      <guid>https://klatz.co/blog/old-oaken-bucket/</guid>
      <description>&lt;h3 id=&#34;peda-may-be-useful&#34;&gt;PEDA may be useful&lt;/h3&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a script that makes gdb easier to use (run these in your shell)&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/longld/peda.git ~/peda&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;source ~/peda/peda.py&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.gdbinit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DONE! debug your program with gdb and enjoy&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;some-gdb-basics-youll-need&#34;&gt;Some GDB basics you&amp;rsquo;ll need&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;gdb old-oaken-bucket&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;break * 0x4005f6&lt;/code&gt; set a breakpoint on the main function. the binary is stripped, if you&amp;rsquo;re curious why read &lt;a href=&#34;https://klatz.co/ctf-blog/locating-main-in-stripped-binary&#34;&gt;this&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;run AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&lt;/code&gt; # starts the program and runs until it hits the breakpoint&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ni&lt;/code&gt; # next instruction &amp;ndash; steps in assembly.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;c&lt;/code&gt; continue until the next breakpoint or the program ends&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Simple reversing challenge from an internal Purdue ctf that i *ahem*&amp;rsquo;d my&#xA;way into. &lt;a href=&#34;https://www.dropbox.com/s/d1v6a5708cwzzs5/old-oaken-bucket?dl=0&#34;&gt;Download link&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adventures in SM5 Lua</title>
      <link>https://klatz.co/blog/sm5-lua/</link>
      <pubDate>Mon, 29 Oct 2018 03:49:00 -0500</pubDate>
      <guid>https://klatz.co/blog/sm5-lua/</guid>
      <description>&lt;p&gt;Mostly just trying to write down primitives that I figure out so I can&#xA;reference them later / share them with others.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Actor is the basic unit of a stepmania script.&lt;/p&gt;&#xA;&lt;p&gt;You can only return one per Lua file, so you will usually put a bunch of Actors in an &amp;ldquo;ActorFrame&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Everytime you change the .ssc, you need to reload cache. Lua scripts are read when you play the simfile, so you only need to start the song in the SM5 editor to see changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>picoctf 2018 writeups</title>
      <link>https://klatz.co/blog/picoctf-2018-writeups/</link>
      <pubDate>Thu, 18 Oct 2018 00:42:00 -0500</pubDate>
      <guid>https://klatz.co/blog/picoctf-2018-writeups/</guid>
      <description>&lt;h3 id=&#34;buffer_overflow_3&#34;&gt;buffer_overflow_3&lt;/h3&gt;&#xA;&lt;p&gt;Binary with a handrolled, static canary. So, we&amp;rsquo;re leaking it byte-by-byte.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;from pwn import *&#xA;import sys&#xA;&#xA;for c in range(0,256):&#xA;        p = process(&amp;#34;/problems/buffer-overflow-3_3_6bcc2aa22b2b7a4a7e3ca6b2e1194faf/vuln&amp;#34;, cwd=&amp;#34;/problems/buffer-overflow-3_3_6bcc2aa22b2b7a4a7e3ca6b2e1194faf&amp;#34;)&#xA;        p.sendline(&amp;#34;36&amp;#34;)&#xA;        p.sendline( &amp;#34;A&amp;#34;*32 + &amp;#39;\x49\x48\x77\x6a&amp;#39; + chr(c) )&#xA;        if &amp;#34;Flag&amp;#34; in p.recv(): print &amp;#34;good: %s&amp;#34; % hex(c)&#xA;# p.interactive()&#xA;&#xA;# and our one-liner is&#xA;# python -c &amp;#39;from pwn import *; print &amp;#34;100\n&amp;#34; + &amp;#34;A&amp;#34;*32 + &amp;#34;\x49\x48\x77\x6a&amp;#34; + &amp;#34;\xeb\x86\x04\x08&amp;#34; * 5&amp;#39; | ./vuln&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;rop&#34;&gt;rop&lt;/h3&gt;&#xA;&lt;p&gt;Simple ropchain satisfying a few constraints.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding Animations to SM5 Simply Love: DDRIllini</title>
      <link>https://klatz.co/blog/sm5-ddrillini-animations/</link>
      <pubDate>Sat, 06 Oct 2018 18:07:00 -0500</pubDate>
      <guid>https://klatz.co/blog/sm5-ddrillini-animations/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Learned&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/ianklatzco/learning/blob/master/lua/metatables.lua&#34;&gt;Lua metatables&lt;/a&gt; (i.e. operator overloads)&lt;/li&gt;&#xA;&lt;li&gt;Deleting frames from gifs in preview breaks them&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://sm.heysora.net/doc/&#34;&gt;Sora&amp;rsquo;s&lt;/a&gt; and &lt;a href=&#34;https://dguzek.github.io/Lua-For-SM5/LuaAPI&#34;&gt;Dan&amp;rsquo;s&lt;/a&gt; Stepmania docs are really nice&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Oscar came up with a nice DDRIllini logo.&lt;/p&gt;&#xA;&lt;img src=&#34;https://klatz.co/images/dancegames/sl-ddrillini.png&#34; alt=&#34;&#39;sl-ddrillini&#39;&#34;&gt;&#xA;&lt;h4 id=&#34;animated-refresh-if-it-stops-i-messed-with-the-gif&#34;&gt;Animated (refresh if it stops, I messed with the gif)&lt;/h4&gt;&#xA;&lt;img src=&#34;https://klatz.co/images/dancegames/sl-ddrillini.gif&#34; alt=&#34;&#39;sl-ddrillini&#39;&#34;&gt;&#xA;&lt;p&gt;Started from &lt;code&gt;ScreenInit\ decorations/default.lua&lt;/code&gt;, which animates the&#xA;collection of rainbow arrows when SL boots up.&lt;/p&gt;&#xA;&lt;p&gt;From Daikyi:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;InitCommand will happen during the loading of the specific screen the actor&#xA;is on. Guaranteed to run (in no guaranteed order) before any oncommand is&#xA;executed.&#xA;&#xA;OffCommand runs when there is a screen transition.&#xA;some screens when transitioning from one to the other however have no&#xA;transition time&#xA;&#xA;OnCommand: executed on load of screen, after init commands have run and&#xA;assets are loaded.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;LoadActor&lt;/code&gt; looks like it&amp;rsquo;s concatenating tables, which is really weird to&#xA;me. Lua has a construct called &lt;code&gt;metatables&lt;/code&gt; and another called&#xA;&lt;code&gt;metamethods.&lt;/code&gt; Basically, operator overloads for table methods. So you can&#xA;overload concatenation (&lt;code&gt;..&lt;/code&gt;) for tables. See &lt;a href=&#34;https://github.com/ianklatzco/learning/blob/master/lua/metatables.lua&#34;&gt;this&lt;/a&gt; for an example.&lt;/p&gt;</description>
    </item>
    <item>
      <title>canonical pwntools script</title>
      <link>https://klatz.co/blog/canonical-pwn-script/</link>
      <pubDate>Sun, 30 Sep 2018 05:52:00 -0500</pubDate>
      <guid>https://klatz.co/blog/canonical-pwn-script/</guid>
      <description>&lt;p&gt;I constantly find myself going back through old exploits for scripts, so&#xA;I&amp;rsquo;m going to try keeping up my &amp;ldquo;current favorite pwn scripts&amp;rdquo; here.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;from pwn import *&#xA;&#xA;# change logging level. options: debug, critical (high, low)&#xA;context.log_level = &amp;#39;critical&amp;#39;&#xA;&#xA;p = process(&amp;#34;./path&amp;#34;)&#xA;# p = remote(&amp;#39;host&amp;#39;, 3333)&#xA;&#xA;# useful with a pause() to connect gdb if pwnlib&amp;#39;s gdb isn&amp;#39;t working for&#xA;# whatever reason&#xA;# print util.proc.pidof(p) &#xA;&#xA;p.send(&amp;#34;banana&amp;#34;)&#xA;p.recv() # p sure this is capped at 4096 bytes or something&#xA;p.sendline(&amp;#34;this sends a newline after&amp;#34;)&#xA;&#xA;# p.recvall()&#xA;&#xA;p.interactive() # look we got a shell&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# alternative to the above, keeps the pipe open after sending the exploit&#xA;# so as to enable you to actually use the shell.&#xA;cat &amp;lt;(python solve.py) - | ./binary&#xA;(python -c &amp;#34;print &amp;#39;A&amp;#39;*2+&amp;#39;\x42&amp;#39;&amp;#34; ; cat) | ./bof&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# int to little endian, in pwn but sometimes i don&amp;#39;t have it installed&#xA;def p32(x): return struct.pack(&amp;#39;&amp;lt;I&amp;#39;,x)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>OpenITG/Stepmania Switcher</title>
      <link>https://klatz.co/blog/openitg-switcher/</link>
      <pubDate>Sat, 29 Sep 2018 14:01:00 -0500</pubDate>
      <guid>https://klatz.co/blog/openitg-switcher/</guid>
      <description>&lt;p&gt;a continuation of &lt;a href=&#34;https://klatz.co/blog/building-64bit-openitg&#34;&gt;this post on building OpenITG&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This closes one of the &lt;a href=&#34;https://github.com/ddrillini/uiuc-wendy/issues/2&#34;&gt;oldest issues on our issue tracker&lt;/a&gt;, which was&#xA;nearly a year old!&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-problem&#34;&gt;The Problem&lt;/h3&gt;&#xA;&lt;p&gt;Stepmania 5 doesn&amp;rsquo;t support a lot of older content (namely couples and&#xA;mods). Our cabinet runs both SM5 and the older version, 3.95, but swapping&#xA;between the two requires running a script, which is only accessible to&#xA;clubmembers with ssh access.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-solution&#34;&gt;The Solution&lt;/h3&gt;&#xA;&lt;p&gt;Amazon dash buttons and the &lt;a href=&#34;https://github.com/Nekmo/amazon-dash&#34;&gt;amazon-dash&lt;/a&gt; python package. Attached them&#xA;behind the machine, and the cabinet&amp;rsquo;s users can now switch between&#xA;versions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>passing to a process&#39;s stdin in gdb</title>
      <link>https://klatz.co/blog/stdin-to-gdb/</link>
      <pubDate>Sun, 16 Sep 2018 17:07:00 -0500</pubDate>
      <guid>https://klatz.co/blog/stdin-to-gdb/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://dustri.org/b/feed-binary-stdin-from-inside-gdb.html&#34;&gt;via&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes you want to pipe things into a process&amp;rsquo;s stdin (to emulate typing&#xA;things, for example.)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;echo &amp;#34;blah&amp;#34; | binary&#xA;python -c &amp;#34;print hello&amp;#34; | binary # is another common thing.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;But what if you want to do that with a process you&amp;rsquo;re starting via gdb?&#xA;Gets a little more complicated, but gdb has things built in to do such&#xA;things.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# run it in a subshell and get the stdout fd&#xA;gdb binary&#xA;r &amp;lt; &amp;lt;(python -c &amp;#34;print &amp;#39;\x41&amp;#39;*36&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# bash command substitution into how gdb does stdin&#xA;r &amp;lt;&amp;lt;&amp;lt; $(python -c &amp;#34;print &amp;#39;\x41&amp;#39;*36&amp;#34;)&#xA;# note! this handles nulls weirdly on stdin within gdb. (leakless, fireshellctf)&#xA;# the above did not have this issue.&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Locating main() in a stripped &amp; dynamically linked binary</title>
      <link>https://klatz.co/blog/locating-main-in-stripped-binary/</link>
      <pubDate>Mon, 10 Sep 2018 21:38:00 -0500</pubDate>
      <guid>https://klatz.co/blog/locating-main-in-stripped-binary/</guid>
      <description>&lt;p&gt;Learned:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;stripped binaries don&amp;rsquo;t point to main&lt;/li&gt;&#xA;&lt;li&gt;binja can find it anyway&lt;/li&gt;&#xA;&lt;li&gt;the dynamic linker runs before any of your program code&lt;/li&gt;&#xA;&lt;li&gt;trying &lt;code&gt;break _start&lt;/code&gt; in gdb will probably hit the linker&amp;rsquo;s instead&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I was working on TokyoWesterns 2018 &lt;code&gt;load&lt;/code&gt; and &lt;a href=&#34;https://stackoverflow.com/a/41800308/1234621&#34;&gt;this came up&#xA;(stackoverflow)&lt;/a&gt;. Sebastian&#xA;and I both tried identifying main this way and scratched our heads at why&#xA;this approach wasn&amp;rsquo;t working, so I&amp;rsquo;m taking a second stab at it now. Note&#xA;that the binary is both 64b and dynamically linked.&lt;/p&gt;</description>
    </item>
    <item>
      <title>pwnable.kr: passcode</title>
      <link>https://klatz.co/blog/pwnable-kr-passcode/</link>
      <pubDate>Sat, 01 Sep 2018 18:01:00 -0500</pubDate>
      <guid>https://klatz.co/blog/pwnable-kr-passcode/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;Partial RELRO means you can do GOT overwrites.&lt;/li&gt;&#xA;&lt;li&gt;Full RELRO blocks them (marks the page as read-only after symbol&#xA;resolution)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Learned a lot from&#xA;&lt;a href=&#34;https://systemoverlord.com/2017/03/19/got-and-plt-for-pwning.html&#34;&gt;https://systemoverlord.com/2017/03/19/got-and-plt-for-pwning.html&lt;/a&gt; and&#xA;&lt;a href=&#34;https://www.akashtrehan.com/writeups/pwnablekr_todders_bottle/&#34;&gt;https://www.akashtrehan.com/writeups/pwnablekr_todders_bottle/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The point of this challenge is to teach you about GOT overwrites.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a &lt;code&gt;.plt.got&lt;/code&gt; and &lt;code&gt;.got.plt&lt;/code&gt; section. I hate computers. &lt;code&gt;.got.plt&lt;/code&gt;&#xA;is the one that you want, as it contains addresses of library functions or&#xA;addresses of code to call the linker to go resolve those addresses.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CTF Blog</title>
      <link>https://klatz.co/blog/ctf-blog/</link>
      <pubDate>Sat, 01 Sep 2018 14:01:00 -0500</pubDate>
      <guid>https://klatz.co/blog/ctf-blog/</guid>
      <description>&lt;p&gt;I started a ctf blog at &lt;a href=&#34;https://klatz.co/ctf-blog/&#34;&gt;ctf-blog&lt;/a&gt;. It&amp;rsquo;ll probably contain&#xA;during-competition, train-of-thought writeups and miscellaneous tidbits&#xA;that I want to be able to find quickly during CTF.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tokyo Westerns CTF: load</title>
      <link>https://klatz.co/blog/tokyo-westerns-ctf/</link>
      <pubDate>Sat, 01 Sep 2018 14:01:00 -0500</pubDate>
      <guid>https://klatz.co/blog/tokyo-westerns-ctf/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Not a complete writeup, just my thoughts while working on it.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;load&#34;&gt;Load&lt;/h2&gt;&#xA;&lt;p&gt;At first glance, it looks like it&amp;rsquo;s nontrivial to locate &lt;code&gt;main()&lt;/code&gt; in a&#xA;stripped ELF.&lt;/p&gt;&#xA;&lt;p&gt;Via &lt;a href=&#34;https://stackoverflow.com/questions/9885545/how-to-find-the-main-functions-entry-point-of-elf-executable-file-without-any-s&#34;&gt;this SO question&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;__libc_start_main&lt;/code&gt; has the following prototype:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;int __libc_start_main(int (*main) (int, char**, char**), &#xA;                      int argc, &#xA;                      char *__unbounded *__unbounded ubp_av, &#xA;                      void (*init) (void), &#xA;                      void (*fini) (void), &#xA;                      void (*rtld_fini) (void), &#xA;                      void (*__unbounded stack_end));&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So, we can look at the top address of the stack in order to get a pointer&#xA;to main, set a breakpoint on it, and &lt;code&gt;continue&lt;/code&gt; till we get there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>writing shellcode using fasm</title>
      <link>https://klatz.co/blog/how-to-write-shellcode-using-fasm/</link>
      <pubDate>Sat, 01 Sep 2018 14:01:00 -0500</pubDate>
      <guid>https://klatz.co/blog/how-to-write-shellcode-using-fasm/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://klatz.co/ctf-blog/x86_32-execve-shellcode&#34;&gt;Small binary file containing only shellcode&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt install fasm -y&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; fasm example: this generates raw instruction in a file&#xA;; x86_32 shellcode&#xA;format binary&#xA;use32 ; 32b&#xA;    xor    eax,eax&#xA;    push   eax&#xA;    push   0x68732f2f&#xA;    push   0x6e69622f&#xA;    mov    ebx,esp&#xA;    push   eax&#xA;    push   ebx&#xA;    mov    ecx,esp&#xA;    mov    al,0xb&#xA;    int    0x80&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; this generates a runnable executable&#xA;format ELF64 executable&#xA;use64&#xA;    push 0x20&#xA;    jmp  QWORD [rsp]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# assemble it&#xA;fasm blah.asm blah.bin&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# you can read it into python, if you&amp;#39;re constructing shellcode&#xA;with open(&amp;#34;blah.bin&amp;#34;) as f:&#xA;    shellcode = f.read()&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>RIP10, or, The Countless Positive Ways in Which Dance Games Have Changed My Life</title>
      <link>https://klatz.co/blog/rip10/</link>
      <pubDate>Fri, 13 Apr 2018 19:16:00 -0500</pubDate>
      <guid>https://klatz.co/blog/rip10/</guid>
      <description>&lt;p&gt;Last month, we ran the 10th iteration of Rumble in the Prairie, DDRIllini&amp;rsquo;s&#xA;yearly tournament. This was my third (and likely last) spring tournament,&#xA;so I&amp;rsquo;d like to recap about how it&amp;rsquo;s grown and talk about the wonderful&#xA;people who help make it happen.&lt;/p&gt;&#xA;&lt;p&gt;(This is pretty long; links to different sections if you only care about&#xA;some of it)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;#recap&#34;&gt;Recap (of tournaments I&amp;rsquo;ve been to)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;#the-process&#34;&gt;The Process (of running RIP)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>FPGA Stepmania</title>
      <link>https://klatz.co/blog/fpga-stepmania/</link>
      <pubDate>Sun, 10 Dec 2017 16:50:00 -0500</pubDate>
      <guid>https://klatz.co/blog/fpga-stepmania/</guid>
      <description>&lt;p&gt;We implemented Stepmania (Dance Dance Revolution) on an Altera DE2-115&#xA;during the Fall 2017 semester of ECE385. Hopefully, the code can be of some&#xA;use to others in the future. If you&amp;rsquo;re a future student reading this, feel&#xA;free to contact me and ask questions.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ianklatzco/fpga-stepmania&#34;&gt;Github repo&lt;/a&gt;,&#xA;&lt;a href=&#34;https://drive.google.com/open?id=0B_xHmzNKe4EEWFo3WGRlWG5rWkU&#34;&gt;Google Drive folder (documentation)&lt;/a&gt;,&#xA;&lt;a href=&#34;https://klatz.co/files/fpga-stepmania-report.pdf&#34;&gt;PDF of the final report&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;video-container&#34;&gt;&#xA;&#x9;&lt;iframe width=&#34;560&#34; height=&#34;315&#34;&#xA;&#x9;src=&#34;https://www.youtube-nocookie.com/embed/2iYbuZDYV-I?rel=0&#34;&#xA;&#x9;frameborder=&#34;0&#34; allow=&#34;autoplay; encrypted-media&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;em&gt;This post was released and written on 13 April 2018, but is backdated to&#xA;match when we took the class.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Telegram Bot Markov Chains</title>
      <link>https://klatz.co/blog/linguistics-project/</link>
      <pubDate>Tue, 27 Jun 2017 04:00:47 -0500</pubDate>
      <guid>https://klatz.co/blog/linguistics-project/</guid>
      <description>&lt;p&gt;Last semester, I took an &amp;ldquo;Introduction to Computational Linguistics&amp;rdquo; class.&lt;/p&gt;&#xA;&lt;p&gt;It offered a survey of various topics in computational linguistics, such as part of speech tagging and machine translation, and a couple of simple projects to get your feet wet with the field. It was absolutely an introductory course, and I enjoyed it! Though to some extent I regret not taking the security course instead, but I&amp;rsquo;ll take that soon : )&lt;/p&gt;</description>
    </item>
    <item>
      <title>THOTCON 8 Talk: How to Doxx 60,000 Students, and the 6 cons I went to</title>
      <link>https://klatz.co/blog/con-postmortems-june-2017/</link>
      <pubDate>Mon, 26 Jun 2017 08:14:47 -0500</pubDate>
      <guid>https://klatz.co/blog/con-postmortems-june-2017/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s halfway through a busy year! I&amp;rsquo;ve done six or seven cons and con-like events, depending on how you count &amp;ldquo;con-like event&amp;rdquo;. Boilermake in January, RIP9 and Cyphercon 2.0 in March, ISUCDC in April, Thotcon 0x8 and ACEN in May, and Circle City Con 4.0 in June. Overall, they went super well, though, for rather different reasons.&lt;/p&gt;&#xA;&lt;p&gt;This year, I&amp;rsquo;ve been killing myself a bit between classwork and going to&amp;hellip; more con{ventions,ferences} than anyone rightfully should during college. It&amp;rsquo;s great.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Collaborative College Keyboard Project</title>
      <link>https://klatz.co/blog/collaborative-college-keyboard-project/</link>
      <pubDate>Fri, 12 May 2017 05:28:47 -0500</pubDate>
      <guid>https://klatz.co/blog/collaborative-college-keyboard-project/</guid>
      <description>&lt;p&gt;During my second semester of college, some friends and I decided to build custom split mechanical keyboards.&lt;/p&gt;&#xA;&lt;img src=&#39;https://klatz.co/images/keyboard/completed.jpg&#39;&gt;&#xA;&lt;p&gt;One of these friends owns a positively obscene number of keyboards, as he&#xA;picks them up from garage sales and craigslist deals for cheap. He had&#xA;several copies of the same keyboard, so I walked in to my room one day to&#xA;find an Apple Extended Keyboard II on my desk. I&amp;rsquo;d been wanting to build an&#xA;&lt;a href=&#34;https://ergodox.io&#34;&gt;Ergodox&lt;/a&gt; for a couple of years, so this was an opportunity to do so in&#xA;a cost-efficient manner. The other three members of our party had&#xA;previously worked with custom keyboards, so we decided to start a project&#xA;to build a bunch of cheap, custom Ergodox variants.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building OpenITG for 64bit Linux</title>
      <link>https://klatz.co/blog/building-64bit-openitg/</link>
      <pubDate>Wed, 19 Apr 2017 11:08:00 -0500</pubDate>
      <guid>https://klatz.co/blog/building-64bit-openitg/</guid>
      <description>&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; download openitg compiled for 64bit debian/ubuntu/archlinux&#xA;&lt;a href=&#34;https://github.com/ianklatzco/dance-games/raw/master/openitg/openitg-64bit-linux.zip&#34;&gt;here&lt;/a&gt;. should work with the right versions of packages installed and&#xA;libraries symlinked, which it&amp;rsquo;ll probably complain about when you try&#xA;running it.&lt;/p&gt;&#xA;&lt;p&gt;Couple extra things you might want to do for general quality of life, off of a stock SM3.95 install:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In openitg/Data/Stepmania.ini set inputdebounce to 0.050000.&lt;/li&gt;&#xA;&lt;li&gt;Disable vocalize: in &lt;code&gt;openitg/Themes/Simply\ Love/Vocalize/Vocalize.xml&lt;/code&gt; ctrl-f &amp;ldquo;defaults&amp;rdquo; and set it to &lt;code&gt;vocalize = { &#39;None&#39; , &#39;None&#39; } -- defaults &lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Disable pad input to menus: in &lt;code&gt;openitg/Data/Stepmania.ini&lt;/code&gt;, set &amp;lsquo;OnlyDedicatedMenuButtons=1&amp;rsquo;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;&#xA;&lt;p&gt;We run an Arch Linux SM5 PC inside the U of I dedicab, which is a clone of a setup by &lt;a href=&#34;https://twitter.com/danguzek&#34;&gt;Dan Guzek (dguzek)&lt;/a&gt; and &lt;a href=&#34;https://twitter.com/mutesauce&#34;&gt;David Nelson (mute)&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NYT Mention</title>
      <link>https://klatz.co/blog/nyt-mention/</link>
      <pubDate>Wed, 08 Feb 2017 14:33:04 -0600</pubDate>
      <guid>https://klatz.co/blog/nyt-mention/</guid>
      <description>&lt;p&gt;During one of my classes last semester, my professor stopped me and told me to go look up &lt;a href=&#34;https://www.nytimes.com/2016/11/29/travel/central-illinois-prairies-david-foster-wallace-literary.html&#34;&gt;an article in the New York Times&lt;/a&gt;. I was very surprised/pleased to find the following:&lt;/p&gt;&#xA;&lt;img src=&#39;https://klatz.co/images/nyt-mention/nyt.png&#39;&gt;&#xA;&lt;p&gt;Couple things.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;There are no tater tots or donuts in the Rec Room.&lt;/li&gt;&#xA;&lt;li&gt;As far as I know, the tables have never been orange-felted.&lt;/li&gt;&#xA;&lt;li&gt;My hair is neither gelled nor in a unicorn horn.&lt;/li&gt;&#xA;&lt;li&gt;How dare the author call it cheap. I &lt;em&gt;like&lt;/em&gt; the Rec Room.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Still, this was an absolutely hilarious find. I&amp;rsquo;m really pleased that my professor noticed — the article was in the NYT and about David Foster Wallace, who grew up in Urbana/Champaign — and then made the connection that there&amp;rsquo;s really only one student on campus who matches that description.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VR-DDR</title>
      <link>https://klatz.co/blog/vr-ddr/</link>
      <pubDate>Sat, 28 Jan 2017 21:40:04 -0600</pubDate>
      <guid>https://klatz.co/blog/vr-ddr/</guid>
      <description>&lt;p&gt;I went to Boilermake IV (Purdue&amp;rsquo;s yearly hackathon) with some friends. We made a virtual reality version of DDR with a full-rotation bar (&lt;a href=&#34;https://github.com/ianklatzco/vr-ddr&#34;&gt;source on github&lt;/a&gt;), and took third place overall. (The video quality is awful and I&amp;rsquo;m sorry.)&lt;/p&gt;&#xA;&lt;div class=&#34;video-container&#34;&gt;&#xA;  &lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/kt7jmsKZbb4&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;video-container&#34;&gt;&#xA;  &lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/AAVDxg1Pj0Q&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;On Friday night, we met up with Purdue&amp;rsquo;s Music Gaming Club. Sometime after that, we realized the pad we brought (a $35 Craigslist Cobalt Flux with a little bit of onsite penny modding) was sending us unreliable input, so I asked to borrow one of the club&amp;rsquo;s pads, and they graciously obliged.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Octopress 3.0 Getting Started</title>
      <link>https://klatz.co/blog/octopress-3-0-getting-started/</link>
      <pubDate>Sat, 07 Jan 2017 12:32:04 -0600</pubDate>
      <guid>https://klatz.co/blog/octopress-3-0-getting-started/</guid>
      <description>&lt;p&gt;Octopress 3.0&amp;rsquo;s docs don&amp;rsquo;t have one, so here&amp;rsquo;s a Github Pages quickstart. Based on &lt;a href=&#34;https://www.sitepoint.com/octopress-3-arrives-to-make-blog-generation-crazy-simple/&#34;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;{% highlight bash %}&lt;/p&gt;&#xA;&lt;h1 id=&#34;change-this&#34;&gt;change this&lt;/h1&gt;&#xA;&lt;p&gt;USERNAME=username&lt;/p&gt;&#xA;&lt;h1 id=&#34;change-to-just-reponame-if-youre-using-github-project-pages&#34;&gt;change to just REPONAME if you&amp;rsquo;re using github project pages&lt;/h1&gt;&#xA;&lt;p&gt;REPONAME=$USERNAME.github.io&lt;/p&gt;&#xA;&lt;p&gt;gem install octopress&#xA;mkdir blog&#xA;cd blog&#xA;octopress new ./&lt;/p&gt;&#xA;&lt;p&gt;git init&#xA;git remote add deploy &lt;a href=&#34;mailto:git@github.com&#34;&gt;git@github.com&lt;/a&gt;:$USERNAME/$REPONAME.git&#xA;octopress deploy init git &lt;a href=&#34;mailto:git@github.com&#34;&gt;git@github.com&lt;/a&gt;:$USERNAME/$REPONAME&#xA;echo &amp;ldquo;_deploy.yml&amp;rdquo; &amp;raquo; .gitignore&lt;/p&gt;&#xA;&lt;p&gt;jekyll build&#xA;git add .&#xA;git commit -m &amp;lsquo;first deploy&amp;rsquo;&#xA;octopress deploy&#xA;{% endhighlight %}&lt;/p&gt;</description>
    </item>
    <item>
      <title>Discord SMS Bridge</title>
      <link>https://klatz.co/blog/discord-sms-bridge/</link>
      <pubDate>Wed, 04 Jan 2017 20:43:39 -0500</pubDate>
      <guid>https://klatz.co/blog/discord-sms-bridge/</guid>
      <description>&lt;p&gt;A quick and dirty script to hook together Twilio (SMS) and Discord APIs,&#xA;for a friend who can&amp;rsquo;t otherwise connect to Discord.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ianklatzco/discord-sms-bridge&#34;&gt;Github repo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Thanks to Zoe Helding for her help.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dvorak</title>
      <link>https://klatz.co/blog/dvorak/</link>
      <pubDate>Wed, 07 Dec 2016 22:24:17 -0600</pubDate>
      <guid>https://klatz.co/blog/dvorak/</guid>
      <description>&lt;p&gt;Just a quick post to keep me sane during the leadup to finals :^)&lt;/p&gt;</description>
    </item>
    <item>
      <title>catfact.py: a cat fact delivery service</title>
      <link>https://klatz.co/blog/catfact-dot-py-a-cat-fact-delivery-tool/</link>
      <pubDate>Mon, 19 Sep 2016 14:22:56 -0500</pubDate>
      <guid>https://klatz.co/blog/catfact-dot-py-a-cat-fact-delivery-tool/</guid>
      <description>&lt;p&gt;Instead of getting a full night&amp;rsquo;s sleep before a week of classes, I wrote a python script that sends cat facts to a list of &lt;del&gt;friends&lt;/del&gt; logged in to our university&amp;rsquo;s server.&lt;/p&gt;&#xA;&lt;p&gt;At least, they were friends when I added them to this list :^)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gobby on OSX</title>
      <link>https://klatz.co/blog/gobby-on-osx/</link>
      <pubDate>Sun, 31 Jul 2016 01:54:45 -0500</pubDate>
      <guid>https://klatz.co/blog/gobby-on-osx/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://github.com/gobby/gobby/wiki/Download&#34;&gt;gobby download page&lt;/a&gt; somewhat unhelpfully states that &amp;ldquo;Gobby runs on Mac OS X, however we cannot offer a pre-built package at the moment.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Someone&amp;rsquo;s compiled it and thrown it into brew&amp;rsquo;s repository, though.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;brew install homebrew/gui/gobby&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Install &lt;a href=&#34;https://www.xquartz.org/&#34;&gt;XQuartz&lt;/a&gt; (local X server on OSX, as far as I&amp;rsquo;ve gathered).&lt;/p&gt;&#xA;&lt;p&gt;Find gobby&amp;rsquo;s executable on your machine (probably &lt;code&gt;/usr/local/Cellar/gobby&lt;/code&gt;) and open it in XQuartz (right click, Open With &amp;gt; XQuartz)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changing Your tmux Prefix</title>
      <link>https://klatz.co/blog/how-to-rebind-the-tmux-prefix/</link>
      <pubDate>Wed, 27 Apr 2016 10:47:38 -0500</pubDate>
      <guid>https://klatz.co/blog/how-to-rebind-the-tmux-prefix/</guid>
      <description>&lt;p&gt;I couldn&amp;rsquo;t find a satisfactorily quick answer for this with a google search, so here it is plain.&lt;/p&gt;&#xA;&lt;p&gt;Create a .tmux.conf in your home directory. Add the following to the file:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;unbind-key C-b&#xA;set -g prefix C-a&#xA;bind-key C-a send-prefix&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Making a Pebble display online users on a Minecraft Server</title>
      <link>https://klatz.co/blog/pebble-app-minecraft-server-poll/</link>
      <pubDate>Sun, 10 Apr 2016 04:29:34 -0500</pubDate>
      <guid>https://klatz.co/blog/pebble-app-minecraft-server-poll/</guid>
      <description>&lt;p&gt;After last Christmas, I decided to buy myself a Pebble. I &lt;em&gt;really&lt;/em&gt; wanted to write some kind of code for it. Since I was on break/had a ton of snow days, I set up a &lt;a href=&#34;http://feed-the-beast.com/&#34;&gt;Feed the Beast&lt;/a&gt; (modded) Minecraft server to play with friends, running via Hamachi (a VPN).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Song Devocalizer Box</title>
      <link>https://klatz.co/blog/devocalizer-box/</link>
      <pubDate>Mon, 26 Oct 2015 15:25:04 -0500</pubDate>
      <guid>https://klatz.co/blog/devocalizer-box/</guid>
      <description>&lt;p&gt;A friend of mine loves to sing. I saw a &lt;a href=&#34;http://makezine.com/projects/make-39/song-devocalizer/&#34;&gt;weekend project on Makezine&lt;/a&gt; a while back that I thought would be fitting for her.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatically Backing Up Terraria Saves/Worlds (Windows)</title>
      <link>https://klatz.co/blog/terraria-backup-script/</link>
      <pubDate>Thu, 03 Sep 2015 19:18:35 -0500</pubDate>
      <guid>https://klatz.co/blog/terraria-backup-script/</guid>
      <description>&lt;p&gt;I recently set up a Terraria server to play on with new friends from school. I wanted regular backups, so I cobbled together a quick backup script. Here&amp;rsquo;s how to set it up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Floppera</title>
      <link>https://klatz.co/blog/floppera/</link>
      <pubDate>Wed, 27 May 2015 04:28:23 -0500</pubDate>
      <guid>https://klatz.co/blog/floppera/</guid>
      <description>&lt;p&gt;Ever wanted to hear floppy drives sing?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Tour</title>
      <link>https://klatz.co/blog/google-tour/</link>
      <pubDate>Sat, 07 Mar 2015 16:02:06 -0600</pubDate>
      <guid>https://klatz.co/blog/google-tour/</guid>
      <description>&lt;p&gt;I led a group of students to a tour at Google&amp;rsquo;s Chicago office after school one day.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Raspberry Pi: NES-PC</title>
      <link>https://klatz.co/blog/raspberry-pi-nes-pc/</link>
      <pubDate>Sun, 15 Feb 2015 16:25:48 -0600</pubDate>
      <guid>https://klatz.co/blog/raspberry-pi-nes-pc/</guid>
      <description>&lt;p&gt;To wrap up an old loose end with a friend, I finished building an NES-themed media center PC built around a Raspberry Pi.&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;p&gt;We had originally started this project way before the Raspberry Pi was released, towards the end of 2011 or so. The initial plans were to throw a full-size motherboard and laptop CD drive into an NES case, along with a PicoPSU. Beyond cannibalizing the NES case, we never finished the original project, so over winter break we decided to throw a Raspberry Pi inside and finally wrap things up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Randy Pausch: Final Lecture</title>
      <link>https://klatz.co/blog/randy-pausch-final-lecture/</link>
      <pubDate>Sat, 10 Jan 2015 03:33:26 -0600</pubDate>
      <guid>https://klatz.co/blog/randy-pausch-final-lecture/</guid>
      <description>&lt;p&gt;Perhaps a few years late, but I just found this &lt;a href=&#34;https://www.youtube.com/watch?v=ji5_MqicxSo&#34;&gt;positively gorgeous final lecture by Randy Pausch&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;p&gt;As a wannabe computer science major/virtual reality geek, I&amp;rsquo;m really glad that I can directly relate to some of the work he did, and he&amp;rsquo;s got so many absolutely wonderful points throughout the entire video.&lt;/p&gt;&#xA;&lt;p&gt;Something cool: At one point, he references a Pirates of the Carribean attraction he worked on. I remember going to that attraction, and thinking it was the &lt;strong&gt;coolest&lt;/strong&gt; thing. Funny, the little ways you bump into people.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bridge Competition</title>
      <link>https://klatz.co/blog/bridge-competition/</link>
      <pubDate>Tue, 09 Dec 2014 20:05:51 -0600</pubDate>
      <guid>https://klatz.co/blog/bridge-competition/</guid>
      <description>&lt;p&gt;One of my school&amp;rsquo;s yearly events is a bridge competition put on by the science department and sponsored by a relatively successful construction company full of alumni. It&amp;rsquo;s been running some twenty-odd years, and my physics teacher dangled tasty extra credit in front of our class in exchange for a passing bridge.&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;p&gt;So I partnered up and we built a bridge, and then another bridge because we had the spare parts and felt like it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Eagle Project: Handicap-Accessible Picnic Tables</title>
      <link>https://klatz.co/blog/eagle-project/</link>
      <pubDate>Thu, 04 Dec 2014 13:39:38 -0600</pubDate>
      <guid>https://klatz.co/blog/eagle-project/</guid>
      <description>&lt;p&gt;Two weeks ago, I finished my Eagle Project.&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h3 id=&#34;update&#34;&gt;&lt;em&gt;&lt;strong&gt;UPDATE: &lt;a href=&#34;http://www.chicagotribune.com/suburbs/lincolnwood/chi-lwr-lincolnwood-teen-makes-benches-for-chicagos-misericordia-20150112-story.html&#34;&gt;I was featured in the local newspaper&lt;/a&gt; (!!!)&lt;/strong&gt;&lt;/em&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://i.imgur.com/6JeReaa.jpg&#34; alt=&#34;completed&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;It was a massive effort (much bigger than I anticipated) that ended up taking a cumulative 200 man-hours, 40 of my own.&lt;/p&gt;&#xA;&lt;p&gt;The project was constructing from scratch three massive, handicap-accessible picnic tables for this really awesome place called Misericordia (my &lt;a href=&#34;http://en.wikipedia.org/wiki/Misericordia_Home&#34;&gt;first-ever wikipedia page!&lt;/a&gt;). It&amp;rsquo;s a super-cool not-for-profit organization that does some really awesome things for a lot of people with disabilites.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Playing with the Experiment on Google IO&#39;s site</title>
      <link>https://klatz.co/blog/playing-with-the-experiment-on-google-ios-site/</link>
      <pubDate>Sat, 08 Mar 2014 00:20:09 -0500</pubDate>
      <guid>https://klatz.co/blog/playing-with-the-experiment-on-google-ios-site/</guid>
      <description>&lt;p&gt;Looking at &lt;a href=&#34;https://developers.google.com/events/io&#34;&gt;Google IO&amp;rsquo;s website&lt;/a&gt; (mostly with info for last year, so this is admittedly dated) I noticed an easter egg of sorts, a pretty Javascript application mysteriously titled &lt;a href=&#34;https://developers.google.com/events/io/experiment&#34;&gt;&amp;quot;/experiment&amp;quot;&lt;/a&gt;. The first thing you notice is the fact you can click on the I&amp;rsquo;s and the O&amp;rsquo;s. The next is that your inputs are tracked on the bottom of the screen. And then you noticed that there are right inputs and wrong inputs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Cheap Valentine&#39;s Day Card Audio Circuit</title>
      <link>https://klatz.co/blog/building-a-cheap-valentines-day-card-audio-circuit/</link>
      <pubDate>Sat, 22 Feb 2014 20:43:39 -0500</pubDate>
      <guid>https://klatz.co/blog/building-a-cheap-valentines-day-card-audio-circuit/</guid>
      <description>&lt;p&gt;About two weeks before Valentine&amp;rsquo;s Day, I got the idea of making a Zelda-themed card for a friend of mine. She and I are both big Zelda fans. I searched the web for a  card, until I found &lt;a href=&#34;http://blog.close-encounters.com.au/2013/02/normal-0-false-false-false.html&#34;&gt;this one&lt;/a&gt; that I liked because of the extra dimensions. It seems that the pop-up style heart container card is a pretty popular one overall, and this is one of many.&lt;/p&gt;&#xA;&lt;p&gt;I decided to take it another step, incorporating some of my (few) electronics skills into the project. To be honest, it was mostly an excuse to order some parts off of Digikey and super-nerdify what would otherwise be a fairly straightforward project. But hey! It was extraordinarily fun.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accessing the Admin panel on Coke Freestyle Machines</title>
      <link>https://klatz.co/blog/accessing-the-admin-panel-on-coke-freestyle-machines/</link>
      <pubDate>Fri, 31 Jan 2014 23:23:06 -0500</pubDate>
      <guid>https://klatz.co/blog/accessing-the-admin-panel-on-coke-freestyle-machines/</guid>
      <description>&lt;p&gt;Recently, a Meatheads burger joint opened up just down the street from my house. As a method of celebrating my first driver&amp;rsquo;s license and to say farewell to the pair of Lithuanians that had stayed with us through the week, we decided to go get some lunch.&lt;/p&gt;&#xA;&lt;p&gt;While there, I noticed a pair of those snazzy new Coke machines, the kind that let you pick a multitude of flavors and mix it with various popular beverages. My brother reminded me that we had found the admin panel on a previous visit, so we decided to look for it again.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why 1:1 iPad programs suck.</title>
      <link>https://klatz.co/blog/why-1-1-ipad-programs-suck/</link>
      <pubDate>Tue, 07 Jan 2014 18:43:02 -0500</pubDate>
      <guid>https://klatz.co/blog/why-1-1-ipad-programs-suck/</guid>
      <description>&lt;p&gt;I consider myself a pretty efficient worker when I get down to it. Not that I work all the time (actually, I don&amp;rsquo;t work much of the time, but that&amp;rsquo;s another issue), but that I work with optimal utilization of available resources (read: I like configuring my gadgets to help me do things). It comes from a childhood of ample freedom with tech, in that my father always let me to take things from him and put them into the most useful form. Beyond that, I like technology. Hell, I love technology, and the productivity boosts it offers. So you might imagine my elation when my school announced it would begin a 1:1 iPad program starting this year.&lt;/p&gt;</description>
    </item>
    <item>
      <title>about</title>
      <link>https://klatz.co/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/about/</guid>
      <description>&lt;p&gt;For work, I look for &lt;strong&gt;security vulnerabilites&lt;/strong&gt; and think about&#xA;&lt;strong&gt;business risk&lt;/strong&gt;.  My nights involve thinking hard about the structure of&#xA;our society, teaching friends how to code and find jobs, and playing games&#xA;that are engaging and teach well. I thrive with human interaction and&#xA;collaboration; &amp;ldquo;learning together&amp;rdquo; is my favorite hobby.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m fascinated by &lt;strong&gt;systems&lt;/strong&gt;, especially when they very directly involve&#xA;humans. I care a lot about &lt;strong&gt;keeping vulnerable populations safe&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>accomplishments</title>
      <link>https://klatz.co/accomplishments/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/accomplishments/</guid>
      <description>&lt;p&gt;things i had a hand in, often team efforts&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;2026 jan: moved to SF for a new security engineering role. cheapest plane ticket back from CCC was through Calgary so bought some fancy pants with a friend,&#xA;then hit the ground running at a new job.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;2025 dec: christmas in poland with family. chaos communication congress in hamburg, berlin NYE. met nadia heninger (cryptographer).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;2025 oct: three weeks in japan — stayed at a traditional ryokan (watei),&#xA;explored nagano, played piano in shin-okubo, hung out at a tokyo airbnb with&#xA;a cryptographer and a VPN company CEO.&lt;/p&gt;</description>
    </item>
    <item>
      <title>bike</title>
      <link>https://klatz.co/bike/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/bike/</guid>
      <description>&lt;h3&gt; seattle &lt;/h3&gt;&#xA;Rodriguez Steel Blue&#xA;&lt;ul&gt;&#xA;&#x9;&lt;li&gt;25-622 (28x1.00-700x25C) 6.0-8.0 bar, 85-115psi&lt;/li&gt;&#xA;&#x9;&lt;li&gt;ETRTO: 25-622&lt;/li&gt;&#xA;&#x9;&lt;li&gt;28 inch x 1 inch&lt;/li&gt;&#xA;&#x9;&lt;li&gt;700x25c (700mm outer diameter, 25mm width)&lt;/li&gt;&#xA;&#x9;&lt;li&gt;85-115psi&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt; sf &lt;/h3&gt;&#xA;Scott Speedster Gravel&#xA;&lt;ul&gt;&#xA;&#x9;&lt;li&gt;55cm frame&lt;/li&gt;&#xA;&#x9;&lt;li&gt;700c tires&lt;/li&gt;&#xA;&#x9;&lt;li&gt;ultegra groupset&lt;/li&gt;&#xA;&#x9;&lt;li&gt;hydraulic brakes&lt;/li&gt;&#xA;&#x9;&lt;li&gt;50-34 front chainring&lt;/li&gt;&#xA;&#x9;&lt;li&gt;11-34 rear casette&lt;/li&gt;&#xA;&#x9;&lt;li&gt;35mm WTB cross boss rear tire&lt;/li&gt;&#xA;&#x9;&lt;li&gt;37mm WTB riddler front tire&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;Giant Defy&#xA;&lt;ul&gt;&#xA;&#x9;&lt;li&gt;56cm frame (M/L)&lt;/li&gt;&#xA;&#x9;&lt;li&gt;700x32c tires&lt;/li&gt;&#xA;&#x9;&lt;li&gt;rival groupset&lt;/li&gt;&#xA;&#x9;&lt;li&gt;wireless shifters (SRAM AXS)&lt;/li&gt;&#xA;&#x9;&lt;li&gt;48-35 chainring&lt;/li&gt;&#xA;&#x9;&lt;li&gt;10-36 cassette&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt; to buy &lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&#x9;&lt;li&gt;Pinarello &lt;a href=&#34;https://spokeeasysf.com/search?q=pinarello&amp;options%5Bprefix%5D=last&#34;&gt;Spoke Easy SF&lt;/a&gt; &#34;Dogma, you&#39;re in between a 53 (5&#39;9&#34;-5&#39;10&#34;) and 54 (5&#39;10&#34;-5&#39;11&#34;)&#34;&#xA;&#34;&lt;/li&gt;&#xA;&#x9;&lt;li&gt;Canyon&lt;/li&gt;&#xA;&#x9;&lt;li&gt;Giant Defy &amp;#x2705;, Cervelo Caledonia, or Look Optimum 765&lt;/li&gt;&#xA;&#x9;&lt;li&gt;S-Works (Specialized)&lt;/li&gt;&#xA;&#x9;&lt;li&gt;Factor&lt;/li&gt;&#xA;&#x9;&lt;li&gt;Scott Solace 2014 (purely bc it is sexy and I saw a dude with it once)&lt;/li&gt;&#xA;&#x9;&lt;li&gt;Bike tube size: 700 35 / 43 (REI)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>ml-book-recs</title>
      <link>https://klatz.co/ml-book-recs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/ml-book-recs/</guid>
      <description>via &lt;a href=&#34;https://old.reddit.com/r/MachineLearning/comments/2xcyrl/i_am_j%C3%BCrgen_schmidhuber_ama/cp5c0py/&#34;&gt;this&lt;/a&gt;&#xA;&#xA;&lt;br&gt;&#xA;and &lt;a href=&#34;https://twitter.com/EmilWallner/status/1314581326209613826?s=20&#34;&gt;this&lt;/a&gt;&#xA;&#xA;&#xA;&lt;div style=&#34;color:#1A1A1B&#34; class=&#34;_292iotee39Lmt0MkQZ2hPV RichTextJSON-root&#34;&gt;&lt;p class=&#34;_1qeIAgB0cPwnLhDF9XSiJM&#34;&gt;Here is a very biased list of books and links that I found useful for students entering our lab (other labs may emphasize different aspects though):&lt;/p&gt;&lt;ul class=&#34;_33MEMislY0GAlB78wL1_CR&#34;&gt;&lt;li class=&#34;_3gqTEjt4x9UIIpWiro7YXz&#34;&gt;&lt;p class=&#34;_1qeIAgB0cPwnLhDF9XSiJM&#34;&gt;Sipser&#39;s broad &lt;a href=&#34;http://www.cs.virginia.edu/~robins/Sipser_2006_Second_Edition_Problems.pdf&#34; class=&#34;_3t5uN8xUmg0TOwRCOGQEcU&#34; rel=&#34;noopener nofollow ugc&#34; target=&#34;_blank&#34;&gt;Introduction to the Theory of Computation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&#34;_3gqTEjt4x9UIIpWiro7YXz&#34;&gt;&lt;p class=&#34;_1qeIAgB0cPwnLhDF9XSiJM&#34;&gt;A comprehensive &lt;a href=&#34;http://people.idsia.ch/~juergen/deep-learning-overview.html&#34; class=&#34;_3t5uN8xUmg0TOwRCOGQEcU&#34; rel=&#34;noopener nofollow ugc&#34; target=&#34;_blank&#34;&gt;Survey of Deep Learning&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&#34;_3gqTEjt4x9UIIpWiro7YXz&#34;&gt;&lt;p class=&#34;_1qeIAgB0cPwnLhDF9XSiJM&#34;&gt;Bishop&#39;s &lt;a href=&#34;http://research.microsoft.com/en-us/um/people/cmbishop/prml/&#34; class=&#34;_3t5uN8xUmg0TOwRCOGQEcU&#34; rel=&#34;noopener nofollow ugc&#34; target=&#34;_blank&#34;&gt;Pattern Recognition and Machine Learning&lt;/a&gt; (bible of traditional machine learning, probabilistic view)&lt;/p&gt;&lt;/li&gt;&lt;li class=&#34;_3gqTEjt4x9UIIpWiro7YXz&#34;&gt;&lt;p class=&#34;_1qeIAgB0cPwnLhDF9XSiJM&#34;&gt;Thesis of Graves (ex-IDSIA) on &lt;a href=&#34;http://www6.in.tum.de/pub/Main/Publications/Graves2008c.pdf&#34; class=&#34;_3t5uN8xUmg0TOwRCOGQEcU&#34; rel=&#34;noopener nofollow ugc&#34; target=&#34;_blank&#34;&gt;Supervised Sequence Labelling with Recurrent Networks&lt;/a&gt; (RNNs, not much of this in Bishop&#39;s book)&lt;/p&gt;</description>
    </item>
    <item>
      <title>projects</title>
      <link>https://klatz.co/projects/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/projects/</guid>
      <description>&lt;script type=&#34;module&#34; src=&#34;https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;p&gt;&lt;model-viewer&#xA;alt=&#34;&#34;&#xA;style=&#34;width:100%;height:400px;&#34;&#xA;src=&#34;https://klatz.co/files/arrow.glb&#34;&#xA;ar ar-modes=&#34;webxr scene-viewer quick-look&#34;&#xA;shadow-intensity=&#34;1&#34; exposure=&#34;0.5&#34; camera-controls enable-pan&gt;&#xA;&lt;/model-viewer&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;berlin-projects-20222025&#34;&gt;Berlin Projects (2022–2025)&lt;/h3&gt;&#xA;&lt;p&gt;A chat-app QR code social sharing augmented reality game&#xA;designed to encourage meeting new people at large events.&lt;/p&gt;&#xA;&lt;p&gt;An in-browser lightweight VRChat alternative personal memory palace.&lt;/p&gt;&#xA;&lt;img src=&#34;https://klatz.co/images/submarine/palace.png&#34;&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://klatz.co/blog/vr-fishtank&#34;&gt;VR puzzle competition&lt;/a&gt; connected to a real-life fishtank via&#xA;submersible webcam video stream, designed to train binary reverse&#xA;engineering skills.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://klatz.co/blog/vr-fishtank&#34;&gt;&lt;img src=&#34;https://klatz.co/images/submarine/0.gif&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;more fishtank photos/video&lt;/summary&gt;&#xA;&lt;video controls autoplay loop muted style=&#34;width: 100%&#34;&gt;&#xA;&#x9;&lt;source type=&#34;video/mp4&#34; src=&#34;https://klatz.co/images/submarine/1.mp4&#34;&gt;&#xA;&lt;/video&gt;&#xA;&lt;img src=&#34;https://klatz.co/images/submarine/2.jpg&#34;&gt;&#xA;&lt;img src=&#34;https://klatz.co/images/submarine/3.jpg&#34;&gt;&#xA;&lt;img src=&#34;https://klatz.co/images/submarine/4.jpg&#34;&gt;&#xA;&lt;img src=&#34;https://klatz.co/images/submarine/5.jpg&#34;&gt;&#xA;&lt;img src=&#34;https://klatz.co/images/submarine/6.png&#34;&gt;&#xA;&lt;video controls autoplay loop muted style=&#34;width: 100%&#34;&gt;&#xA;&#x9;&lt;source type=&#34;video/mp4&#34; src=&#34;https://klatz.co/images/submarine/demovid.mp4&#34;&gt;&#xA;&lt;/video&gt;&#xA;&lt;/details&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;python-tiny-cpu-emulator&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/python-lc3&#34;&gt;Python Tiny CPU Emulator&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;organizing-dance-game-tournaments&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/rip10&#34;&gt;Organizing Dance Game Tournaments&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;fpga-rhythm-game&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/fpga-stepmania&#34;&gt;FPGA Rhythm Game&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;thotcon-0x8-talk-student-privacy&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/con-postmortems-june-2017#thotcon-0x8&#34;&gt;THOTCON 0x8 Talk: Student Privacy&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;markov-text-generation-performance-measurement&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/linguistics-project&#34;&gt;Markov Text Generation Performance Measurement&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;virtual-reality-dance-game-prototype&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/vr-ddr&#34;&gt;Virtual Reality Dance Game Prototype&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;collaborative-college-keyboard-project&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/cckbp&#34;&gt;Collaborative College Keyboard Project&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;old-high-school&#34;&gt;old (high school)&lt;/h4&gt;&#xA;&lt;h3 id=&#34;building-a-cheap-valentine&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/building-a-cheap-valentines-day-card-audio-circuit&#34;&gt;Building a Cheap Valentine&amp;rsquo;s Day Card Audio Circuit&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;eagle-project-handicap-accessible-picnic-tables&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/eagle-project&#34;&gt;Eagle Project: Handicap-Accessible Picnic Tables&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;song-devocalizer-box&#34;&gt;&lt;a href=&#34;https://klatz.co/blog/devocalizer-box&#34;&gt;Song Devocalizer Box&lt;/a&gt;&lt;/h3&gt;</description>
    </item>
    <item>
      <title>qr</title>
      <link>https://klatz.co/qr/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/qr/</guid>
      <description>you solved it! thanks for playing ^^&#xA;&#xA;&lt;br&gt; &lt;br&gt;&#xA;&#xA;i don&#39;t have reporting set up, so you should ping me (iklatzco at gmail) or &lt;br&gt; &lt;a&#xA;href=&#34;https://twitter.com/ian5v&#34;&gt;twitter.com/ian5v&lt;/a&gt; to let me know that you &lt;br&gt;&#xA;succeeded c: &lt;br&gt;&#xA;&#xA;&lt;img src=&#34;https://klatz.co/xida-cat.png&#34;&gt;</description>
    </item>
    <item>
      <title>salary</title>
      <link>https://klatz.co/salary/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/salary/</guid>
      <description>I&#39;ve linked to these two blog posts so often that I wanted a short URL I could memorize: &lt;br&gt;&#xA;&#xA;&lt;a href=&#34;https://www.kalzumeus.com/2012/01/23/salary-negotiation/&#34;&gt;&#xA;  &lt;h3&gt;Salary Negotiation: Make More Money, Be More Valued&lt;/h3&gt;&#xA;&lt;/a&gt;&#xA;&#xA;tl;dr: This singlular blog post probably bumped my salary by 10-20%.&#xA;&lt;ul&gt;&#xA;  &lt;li&gt;Tech salaries are high.&lt;/li&gt;&#xA;  &lt;li&gt;Negotiate over email if you can.&lt;/li&gt;&#xA;  &lt;li&gt;Don&#39;t disclose your numbers until the very end of the process.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;a href=&#34;https://www.animstate.com/all-posts/negotiation-tips&#34;&gt;&#xA;  &lt;h3&gt;Negotiation Tips&lt;/h3&gt;&#xA;&lt;/a&gt;&#xA;Another one, targeted at animators but has broadly useful tips&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;a href=&#34;https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/&#34;&gt;&#xA;  &lt;h3&gt;Don&#39;t Call Yourself A Programmer, And Other Career Advice&lt;/h3&gt;&#xA;&lt;/a&gt;&#xA;&#xA;tl;dr: Programmers exist to create business value.&#xA;&lt;ul&gt;&#xA;  &lt;li&gt;Technical beauty does not have much place in the &#34;real world&#34;.&lt;/li&gt;&#xA;  &lt;li&gt;Understanding this can enable you to be a lot happier and effective at your job.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>songs</title>
      <link>https://klatz.co/songs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/songs/</guid>
      <description>&lt;ul&gt;&#xA;&#x9;&lt;li&gt;&lt;a href=&#34;https://tabs.ultimate-guitar.com/tab/bryan-adams/summer-of-69-chords-843137&#34;&gt;Summer of 69&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>thotcon</title>
      <link>https://klatz.co/thotcon/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/thotcon/</guid>
      <description>&lt;h4&gt;&#34;University Privacy: How to Doxx 60,000 Students&#34; - Ian Klatzco and Adam Ringwood&lt;/h4&gt;&#xA;&#xA;&lt;div&gt; Talk abstract (from &lt;a href=&#34;https://thotcon.org/archive/speakers-0x8.html&#34;&gt;conference website&lt;/a&gt;)&lt;/div&gt;&#xA;&#xA;&lt;br&gt;&#xA;&#xA;&lt;div&gt;Lightweight Directory Access Protocol (LDAP) is at the heart of most large universities. A student may use it to login into campus computers, access campus email, and use it as a single sign on provider for university services. LDAP servers also store a student&#39;s personal information. This data can have poorly-chosen security settings that reveal sensitive data. We will discuss the privacy and implementation details at two Illinois public universities with a combined population of above 60,000. The directories contain many individuals affiliated with the schools, including graduates and faculty. We found almost every student&#39;s major, year in school, email address, phone number, and home address, using just a single student&#39;s credentials. University officials didn&#39;t find this information to be terribly problematic, citing a law passed in the 70s called FERPA. FERPA protects student educational information such as grades, but gives the university the ability to release student directory information without individual user permission. We will discuss how FERPA outlines the process of opting out of directory information as a student, and its shortcomings, such as limiting employer ability to check university records. The risks aren&#39;t limited to just personal directory information though: we will discuss what information can be mined from a user&#39;s password changed timestamp and last login timestamp. We show that attacks against user privacy are being carried out using university directories: businesses on campus harvesting emails using LDAP for marketing, and an individual who was scammed using personal information probably gathered from the system (http://bit.ly/uiucredditscam). We will discuss how these attacks can be prevented by changing technical policy and educating users.&#34;&lt;/div&gt;&#xA;&#xA;&lt;br&gt;&lt;br&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;br&gt;&lt;br&gt;&#xA;&#xA;&lt;div&gt;Or if you prefer, a slightly more personal &lt;a href=&#34;https://klatz.co/blog/con-postmortems-june-2017#thotcon-0x8&#34;&gt;blog post&lt;/a&gt; reflecting on the experience of giving the talk.</description>
    </item>
    <item>
      <title>urldecode</title>
      <link>https://klatz.co/tools/urldecode/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/tools/urldecode/</guid>
      <description>&lt;h3&gt;references&lt;/h3&gt;&#xA;tldr: slightly different set of characters, one of them *might* need to be a URI that parses correctly?&#xA;&lt;br&gt;&#xA;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI&#34;&gt;encodeURI&lt;/a&gt;&#xA;&lt;br&gt;&#xA;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent&#34;&gt;encodeURIComponent&lt;/a&gt;&#xA;&#xA;&lt;h3&gt;input&lt;/h3&gt;&#xA;&lt;textarea id=&#34;input&#34; &gt;https://feedly.com/i/subscription/feed%2Fhttps%3A%2F%2Ffeeds.soundcloud.com%2Fusers%2Fsoundcloud%3Ausers%3A547443507%2Fsounds.rss&lt;/textarea&gt;&#xA;&#xA;&lt;br&gt;&lt;br&gt;&#xA;&#xA;&lt;h3&gt;decodeURIComponent&lt;/h3&gt;&#xA;&lt;textarea id=&#34;output1&#34;&gt;&lt;/textarea&gt;&#xA;&#xA;&lt;script type=&#34;text/javascript&#34;&gt;&#xA;&#x9;let d = document;&#xA;&#x9;let input_handle = d.querySelector(&#34;#input&#34;);&#xA;&#x9;let output_handle_1 = d.querySelector(&#34;#output1&#34;);&#xA;&#xA;&#x9;function update_outputs() {&#xA;&#x9;&#x9;let raw_url = input_handle.value;&#xA;&#x9;&#x9;output_handle_1.value = decodeURIComponent(raw_url);&#xA;&#x9;&#x9;output_handle_2.value = decodeURI(raw_url);&#xA;&#x9;&#x9;output_handle_3.value = encodeURIComponent(raw_url);&#xA;&#x9;&#x9;output_handle_4.value = encodeURI(raw_url);&#xA;&#x9;}&#xA;&#xA;&#x9;input_handle.addEventListener(&#34;input&#34;, update_outputs);&#xA;&#x9;update_outputs();&#xA;&lt;/script&gt;&#xA;&#xA;&lt;br&gt;&lt;br&gt;&#xA;&lt;h3&gt;decodeURI&lt;/h3&gt;&#xA;&lt;textarea id=&#34;output2&#34;&gt;&lt;/textarea&gt;&#xA;&#xA;&lt;br&gt;&lt;br&gt;&#xA;&lt;h3&gt;encodeURIComponent&lt;/h3&gt;&#xA;&lt;textarea id=&#34;output3&#34;&gt;&lt;/textarea&gt;&#xA;&#xA;&lt;br&gt;&lt;br&gt;&#xA;&lt;h3&gt;encodeURI&lt;/h3&gt;&#xA;&lt;textarea id=&#34;output4&#34;&gt;&lt;/textarea&gt;&#xA;&#xA;&lt;script type=&#34;text/javascript&#34;&gt;&#xA;&#x9;let output_handle_2 = d.querySelector(&#34;#output2&#34;);&#xA;&#x9;let output_handle_3 = d.querySelector(&#34;#output3&#34;);&#xA;&#x9;let output_handle_4 = d.querySelector(&#34;#output4&#34;);&#xA;&#x9;update_outputs();&#xA;&lt;/script&gt;</description>
    </item>
    <item>
      <title>urlparse</title>
      <link>https://klatz.co/tools/urlparse/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://klatz.co/tools/urlparse/</guid>
      <description>&lt;textarea id=&#34;input&#34; &gt;https://www.w3schools.com/tags/tag_input.asp?query=banana&amp;q2=apple&lt;/textarea&gt;&#xA;&#xA;&lt;br&gt;&lt;br&gt;&#xA;&#xA;&lt;textarea id=&#34;output&#34;&gt;&lt;/textarea&gt;&#xA;&#xA;&lt;script type=&#34;text/javascript&#34;&gt;&#xA;&#x9;let d = document;&#xA;&#x9;let input_handle = d.querySelector(&#34;#input&#34;);&#xA;&#x9;let output_handle = d.querySelector(&#34;#output&#34;);&#xA;&#xA;&#x9;function write_to_output()&#xA;&#x9;{&#xA;&#x9;&#x9;let raw_url = input_handle.value;&#xA;&#x9;&#x9;let url_obj = new URL(raw_url);&#xA;&#xA;&#x9;&#x9;// searchparams&#xA;&#x9;&#x9;let search_params_list = [];&#xA;&#x9;&#x9;for (const [key, value] of url_obj.searchParams)&#xA;&#x9;&#x9;{&#xA;&#x9;&#x9;&#x9;search_params_list.push(key + &#34;: &#34; + value);&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;let l = [&#xA;&#x9;&#x9;&#x9;url_obj.hostname,&#xA;&#x9;&#x9;&#x9;url_obj.pathname,&#xA;&#x9;&#x9;&#x9;search_params_list.join(&#34;\n&#34;)&#xA;&#x9;&#x9;]&#xA;&#xA;&#x9;&#x9;output_handle.value = l.join(&#34;\n\n&#34;);&#xA;&#x9;}&#xA;&#xA;&#x9;window.setInterval(write_to_output,10);&#xA;&lt;/script&gt;</description>
    </item>
  </channel>
</rss>
