<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Benny Simmonds</title>
    <link>https://www.bencode.io/posts/</link>
    <description>Recent content in Posts on Benny Simmonds</description>
    <generator>Hugo -- 0.149.1</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 10 Apr 2026 12:03:00 +1000</lastBuildDate>
    <atom:link href="https://www.bencode.io/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Claude Code Gems</title>
      <link>https://www.bencode.io/posts/claudecode/</link>
      <pubDate>Fri, 10 Apr 2026 12:03:00 +1000</pubDate>
      <guid>https://www.bencode.io/posts/claudecode/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#insight-report&#34;&gt;Insight Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#effort-level&#34;&gt;Effort level&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#remote-control&#34;&gt;Remote Control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#batch-tasks&#34;&gt;Batch tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#simplify&#34;&gt;Simplify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#recurring-work-loops&#34;&gt;Recurring work (loops)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#rewind-mode&#34;&gt;Rewind Mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hooks-and-automation&#34;&gt;Hooks and Automation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#btw-side-questions&#34;&gt;BTW side questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#agent-teams-and-parallel-work&#34;&gt;Agent Teams and Parallel Work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#danger-mode&#34;&gt;Danger Mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;insight-report&#34;&gt;Insight Report&lt;/h2&gt;
&lt;p&gt;Generates a structured report about your codebase and how you&amp;rsquo;ve been working with Claude Code. It analyses your conversation history, tool usage patterns, and the types of tasks you&amp;rsquo;ve been tackling. Useful for understanding your own workflow patterns — where you spend time, what types of tasks you delegate most, and where friction tends to occur. Think of it as a retrospective on your AI-assisted development habits.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude Code Gems</title>
      <link>https://www.bencode.io/posts/claudecode/</link>
      <pubDate>Fri, 10 Apr 2026 12:03:00 +1000</pubDate>
      <guid>https://www.bencode.io/posts/claudecode/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#insight-report&#34;&gt;Insight Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#effort-level&#34;&gt;Effort level&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#remote-control&#34;&gt;Remote Control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#batch-tasks&#34;&gt;Batch tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#simplify&#34;&gt;Simplify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#recurring-work-loops&#34;&gt;Recurring work (loops)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#rewind-mode&#34;&gt;Rewind Mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hooks-and-automation&#34;&gt;Hooks and Automation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#btw-side-questions&#34;&gt;BTW side questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#agent-teams-and-parallel-work&#34;&gt;Agent Teams and Parallel Work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#danger-mode&#34;&gt;Danger Mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;insight-report&#34;&gt;Insight Report&lt;/h2&gt;
&lt;p&gt;Generates a structured report about your codebase and how you&amp;rsquo;ve been working with Claude Code. It analyses your conversation history, tool usage patterns, and the types of tasks you&amp;rsquo;ve been tackling. Useful for understanding your own workflow patterns — where you spend time, what types of tasks you delegate most, and where friction tends to occur. Think of it as a retrospective on your AI-assisted development habits.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Do It Now - Brian Tracy</title>
      <link>https://www.bencode.io/posts/doitnow/</link>
      <pubDate>Tue, 16 Dec 2025 17:23:00 +1100</pubDate>
      <guid>https://www.bencode.io/posts/doitnow/</guid>
      <description>&lt;p&gt;Brian Tracy&amp;rsquo;s &amp;ldquo;Do It Now&amp;rdquo; philosophy is about overcoming procrastination by developing a sense of urgency, programming your subconscious with positive commands, setting clear goals, and acting quickly and consistently to achieve them, transforming thoughts into actions for success. He teaches that this mindset involves mental conditioning through repetition (like saying &amp;ldquo;Do it now&amp;rdquo;), focusing on goals, managing your environment, and cultivating a positive self-concept, leading to faster progress and a more fulfilling life.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing multiple SSH GitHub identities</title>
      <link>https://www.bencode.io/posts/multi-ssh/</link>
      <pubDate>Fri, 12 Dec 2025 08:07:00 +1100</pubDate>
      <guid>https://www.bencode.io/posts/multi-ssh/</guid>
      <description>&lt;p&gt;Now I&amp;rsquo;m involved in multiple businesses, I&amp;rsquo;m finding I need to frequently juggle multiple SSH key pairs (aka identities) with &lt;em&gt;choose your favourite git offering&lt;/em&gt; (e.g. GitHub). When I push and pull to origins on the same machine, I need to alternate the identities I use.&lt;/p&gt;
&lt;p&gt;The best approach is to use an &lt;strong&gt;SSH config file&lt;/strong&gt; to define host aliases. This lets you seamlessly use different keys without manually switching anything.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Entity Resolution and the Instability Problem</title>
      <link>https://www.bencode.io/posts/entity/</link>
      <pubDate>Tue, 02 Dec 2025 09:02:00 +1100</pubDate>
      <guid>https://www.bencode.io/posts/entity/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-problem&#34;&gt;The Problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#solution-1-make-the-api-recordcentric-not-entitycentric&#34;&gt;Solution 1: Make the API record‑centric, not entity‑centric&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#solution-2-introduce-your-own-stable-external-entity-id-and-map-it-to-senzing&#34;&gt;Solution 2: Introduce your own &lt;em&gt;stable&lt;/em&gt; external Entity ID and map it to Senzing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-public-vs-internal-ids&#34;&gt;2.1. Public vs internal IDs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-handling-merges&#34;&gt;2.2. Handling merges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-handling-splits&#34;&gt;2.3. Handling splits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24-pros--cons&#34;&gt;2.4. Pros / Cons&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#solution-3-provide-an-entity-change-feed-events-for-downstream-sync&#34;&gt;Solution 3: Provide an entity change feed (events) for downstream sync&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-why&#34;&gt;3.1. Why?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-event-model&#34;&gt;3.2. Event model&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#solution-4-treat-entity-ids-as-ephemeral-handles-with-ttl-semantics&#34;&gt;Solution 4: Treat entity IDs as &lt;em&gt;ephemeral handles&lt;/em&gt; with TTL semantics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#solution-5-eventsourcing--versioned-entities-for-heavy-complianceaudit-usecases&#34;&gt;Solution 5: Event‑sourcing / versioned entities (for heavy compliance/audit use‑cases)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#frankenres&#34;&gt;FrankenRes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#internals&#34;&gt;Internals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#api-surface&#34;&gt;API surface&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#detecting-splits-and-merges-with-senzing&#34;&gt;Detecting Splits and Merges with Senzing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#what-senzing-actually-provides-the-barebones&#34;&gt;What Senzing actually provides (the barebones)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#minimum-state-you-need-to-track&#34;&gt;Minimum state you need to track&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#robust-per-event-processing-pattern&#34;&gt;Robust per-event processing pattern&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#concurrency-safeguard&#34;&gt;Concurrency safeguard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#split-vs-merge-detection&#34;&gt;Split vs Merge Detection&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#detecting-splits&#34;&gt;Detecting splits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#detecting-merges&#34;&gt;Detecting merges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#a-simplier-way&#34;&gt;A simplier way&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#senzing-lifecycle-detector-c-implementation&#34;&gt;Senzing Lifecycle Detector C# Implementation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#single-file-example&#34;&gt;Single-file example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#usage&#34;&gt;Usage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tldr&#34;&gt;TL;DR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;
&lt;p&gt;The classic entity resolution gotcha: the thing that looks like a primary key (e.g. Senzing&amp;rsquo;s entity ID) is actually a volatile cluster ID that can legitimately change as the engine learns. Senzing explicitly says their resolved entity ID is &lt;strong&gt;not&lt;/strong&gt; a globally unique persistent identifier and that it&amp;rsquo;s just an identifier for a grouping that may be transient. (&lt;a href=&#34;https://senzing.zendesk.com/hc/en-us/articles/4415858978067-How-does-an-Entity-ID-behave&#34; title=&#34;How does an Entity ID behave&#34;&gt;senzing.zendesk.com&lt;/a&gt;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shadcn UI Quick Reference</title>
      <link>https://www.bencode.io/posts/shadcn/</link>
      <pubDate>Mon, 01 Dec 2025 17:45:00 +1100</pubDate>
      <guid>https://www.bencode.io/posts/shadcn/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#wat&#34;&gt;wat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#componentsjson&#34;&gt;components.json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-cn-helper&#34;&gt;The &lt;code&gt;cn()&lt;/code&gt; Helper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#globalscss--theming&#34;&gt;globals.css &amp;amp; Theming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dark-mode&#34;&gt;Dark Mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dependencies-explained&#34;&gt;Dependencies Explained&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#cva-example&#34;&gt;CVA Example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#blocks-vs-components&#34;&gt;Blocks vs Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#quick-start-workflow&#34;&gt;Quick Start Workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#forms-with-tanstack--shadcnui&#34;&gt;Forms with TanStack + shadcn/ui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#claude-code--mcp-tips&#34;&gt;Claude Code + MCP Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#essential-commands&#34;&gt;Essential Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mental-model&#34;&gt;Mental Model&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;wat&#34;&gt;wat&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;shadcn/ui is a set of beautifully-designed, accessible components and a code distribution platform. Works with your favorite frameworks and AI models. Open Source. Open Code.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;componentsjson&#34;&gt;components.json&lt;/h2&gt;
&lt;p&gt;Controls how CLI installs components, paths, and styling preferences.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI Dev Setup</title>
      <link>https://www.bencode.io/posts/aidev/</link>
      <pubDate>Sat, 18 Oct 2025 15:29:00 +1000</pubDate>
      <guid>https://www.bencode.io/posts/aidev/</guid>
      <description>&lt;p&gt;A place to document how I use AI to assist the development of software.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#context-is-king&#34;&gt;Context Is King&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#token-sizing-guidelines-pebble--boulder&#34;&gt;Token Sizing Guidelines (Pebble → Boulder)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#claude-code&#34;&gt;Claude Code&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#awesome-claude-level-ups&#34;&gt;Awesome Claude Level Ups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#claude-code-cheat-sheet&#34;&gt;Claude Code Cheat Sheet&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#basics&#34;&gt;Basics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#context-management&#34;&gt;Context Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#miscellaneous&#34;&gt;Miscellaneous&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#caching-codebase-knowledge&#34;&gt;Caching Codebase Knowledge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#claudemd-files-persistent-memory&#34;&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; Files (Persistent Memory)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#api-prompt-caching&#34;&gt;API Prompt Caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#async-subagents&#34;&gt;Async Subagents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#skills&#34;&gt;Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#plugins&#34;&gt;Plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hooks&#34;&gt;Hooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#teleport-sessions&#34;&gt;Teleport Sessions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#general-purpose-context-management&#34;&gt;General Purpose Context Management&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#vibe-rules&#34;&gt;vibe-rules&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;context-is-king&#34;&gt;Context Is King&lt;/h2&gt;
&lt;p&gt;Managing the context window for your model is &lt;strong&gt;the most&lt;/strong&gt; benefitial thing you can do as the human-in-the-loop.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Derivatives Trading</title>
      <link>https://www.bencode.io/posts/trading/</link>
      <pubDate>Sat, 11 Oct 2025 08:34:00 +1000</pubDate>
      <guid>https://www.bencode.io/posts/trading/</guid>
      <description>&lt;p&gt;This post captures foundational knowledge that will help master Australian derivates trading.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#options-fundamentals&#34;&gt;Options Fundamentals&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#call-option-analogy-renting-the-right-to-buy-a-house-later&#34;&gt;Call Option Analogy: Renting the Right to Buy a House Later&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#put-option-analogy-renting-the-right-to-sell-a-house-later&#34;&gt;Put Option Analogy: Renting the Right to Sell a House Later&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#american-vs-european&#34;&gt;American vs European&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#buyer-vs-seller&#34;&gt;Buyer vs Seller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#options-bring-flexibility&#34;&gt;Options Bring Flexibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-value-of-an-option&#34;&gt;The Value of an Option&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#call-value-example&#34;&gt;Call Value Example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#option-premiums&#34;&gt;Option Premiums&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#end-to-end-call-walkthrough&#34;&gt;End-To-End Call Walkthrough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#portfolio-strategies&#34;&gt;Portfolio Strategies&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#covered-calls&#34;&gt;Covered Calls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#covered-puts&#34;&gt;Covered Puts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#spread-trading&#34;&gt;Spread Trading&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#bull-call-debit&#34;&gt;Bull Call (debit)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bull-put-credit&#34;&gt;Bull Put (credit)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bear-put-debit&#34;&gt;Bear Put (debit)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bear-call-credit&#34;&gt;Bear Call (credit)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#condor-debit&#34;&gt;Condor (debit)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#iron-condor-credit&#34;&gt;Iron Condor (credit)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#indicators&#34;&gt;Indicators&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#stochastics&#34;&gt;Stochastics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bollinger-bands&#34;&gt;Bollinger Bands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#50-day-moving-average-50-dma&#34;&gt;50-Day Moving Average (50-DMA)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#volume&#34;&gt;Volume&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#options-trading-cheat-sheet&#34;&gt;Options Trading Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#faq&#34;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#glossary&#34;&gt;Glossary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;options-fundamentals&#34;&gt;Options Fundamentals&lt;/h2&gt;
&lt;p&gt;An option is a contract that gives you the right, but not the obligation, to buy or sell a stock at a specific price (called the strike price) before a certain date (the expiration date).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Business Cheat Sheet</title>
      <link>https://www.bencode.io/posts/biz/</link>
      <pubDate>Sun, 28 Sep 2025 11:52:00 +1000</pubDate>
      <guid>https://www.bencode.io/posts/biz/</guid>
      <description>&lt;p&gt;A glossary of the key terms, acronyms, and ratios commonly considered business basics.&lt;/p&gt;
&lt;h2 id=&#34;finance-and-metrics&#34;&gt;Finance and Metrics&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Term&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Accrual Accounting&lt;/td&gt;
          &lt;td&gt;Records revenue when earned and expenses when incurred, regardless of cash movement - gives a truer picture than cash accounting&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ARPU&lt;/td&gt;
          &lt;td&gt;Average Revenue Per User: Revenue ÷ total customers Useful in SaaS&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;B2B&lt;/td&gt;
          &lt;td&gt;Business to Business: Selling to other companies Often longer sales cycles, higher ticket&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;B2B2C&lt;/td&gt;
          &lt;td&gt;Business sells to another business that serves end consumers (eg, Shopify → merchants → buyers)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;B2C&lt;/td&gt;
          &lt;td&gt;Business to Consumer: Selling directly to end users Usually higher volume, lower ticket&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;BAMFAM&lt;/td&gt;
          &lt;td&gt;Book A Meeting From A Meeting: Sales discipline to never leave a conversation without scheduling the next step [100M Closing Playbook §Closes]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Bottom Line&lt;/td&gt;
          &lt;td&gt;Net profit after all expenses; the final measure of profitability.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;CAC&lt;/td&gt;
          &lt;td&gt;Customer Acquisition Cost: Total cost to acquire a new paying customer (ads + sales + marketing overhead ÷ new customers) [100M Leads p208]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Churn&lt;/td&gt;
          &lt;td&gt;% of customers who cancel in a given time period Inverse of retention [100M Retention Playbook §Churn Math]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Churn Rate&lt;/td&gt;
          &lt;td&gt;Percentage of customers lost over a specific period.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Close Rate&lt;/td&gt;
          &lt;td&gt;Percentage of leads or prospects that convert to paying customers.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;COGS&lt;/td&gt;
          &lt;td&gt;Cost of Goods Sold: The direct cost of purchasing the goods a company sells, and it is a key expense that directly impacts profit. It includes expenses like raw materials, direct labor, and manufacturing overhead, but not indirect costs like marketing or salaries.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Cost to Value&lt;/td&gt;
          &lt;td&gt;The perceived value must significantly exceed the price paid; customers buy when the benefit outweighs the cost&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;CRO&lt;/td&gt;
          &lt;td&gt;Conversion Rate Optimisation: Improving the percentage of visitors who take a desired action (e.g., purchase, sign up).&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;EBITDA&lt;/td&gt;
          &lt;td&gt;Earnings Before Interest, Taxes, Depreciation, and Amortization: A cleaner view of profitability before financial structuring&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;FCF&lt;/td&gt;
          &lt;td&gt;Free Cash Flow: Cash left after operating expenses + capital expenditures Critical because cash pays bills, not “profits” [100M Money Models p233]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Funnel&lt;/td&gt;
          &lt;td&gt;The stages a prospect moves through before becoming a customer (e.g., awareness, interest, decision, action).&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Grand Slam Offer&lt;/td&gt;
          &lt;td&gt;Offer so good people feel stupid saying no [100M Offers p22]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Gross Margin&lt;/td&gt;
          &lt;td&gt;(Revenue – Cost of Goods Sold) ÷ Revenue High gross margin = scalable business&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Gross Margin / Gross Profit&lt;/td&gt;
          &lt;td&gt;The revenue remaining after deducting the Cost of Goods Sold (COGS).&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Gross vs Net&lt;/td&gt;
          &lt;td&gt;Gross = before costs (top-line) Net = after costs (bottom-line)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Industry CAC Benchmark&lt;/td&gt;
          &lt;td&gt;Varies heavily Rule of thumb: aim for CAC ≤ 1/3 of LTGP [100M Leads p208]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Lead Magnet&lt;/td&gt;
          &lt;td&gt;A valuable piece of content or service (e.g., a free PDF guide, training video, or consultation) offered to a prospect in exchange for their contact information.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;LTGP&lt;/td&gt;
          &lt;td&gt;Lifetime Gross Profit: LTV × Gross Margin % More accurate than LTV since it accounts for cost of goods sold [100M Money Models p228]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;LTGP:CAC Ratio&lt;/td&gt;
          &lt;td&gt;Healthy is ~3:1 (spend $1 to acquire, get $3+ in gross profit) If &amp;lt;1:1, you’re losing money; if 10:1, you’re under-investing [100M Leads p208]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;LTV&lt;/td&gt;
          &lt;td&gt;Lifetime Value: The total revenue expected from a customer over their relationship with you [100M Money Models p226]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Marketplace&lt;/td&gt;
          &lt;td&gt;Connects buyers and sellers, takes a cut (Airbnb, Uber)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Net Margin&lt;/td&gt;
          &lt;td&gt;Net profit ÷ Revenue Bottom-line profitability after all costs&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Offer&lt;/td&gt;
          &lt;td&gt;The combination of a product or service, its price, payment terms, incentives (bonuses), and guarantees presented to a prospect.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Online Ads Attribution&lt;/td&gt;
          &lt;td&gt;The process of identifying which marketing touchpoints (e.g., specific ads, campaigns, or channels) were responsible for a customer&amp;rsquo;s conversion or purchase.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Outbound Outreach&lt;/td&gt;
          &lt;td&gt;Proactively reaching out to potential customers via calls, emails, or ads.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Recurring/Subscription&lt;/td&gt;
          &lt;td&gt;Predictable monthly revenue Gold standard for valuations&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Return on Ad Spend (ROAS)&lt;/td&gt;
          &lt;td&gt;The revenue generated for every dollar spent on advertising. Calculated as: (Revenue from Ads / Cost of Ads).&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Risk Reversal&lt;/td&gt;
          &lt;td&gt;Guarantees that shift risk from buyer to seller [Playbook – Guarantees §Hard Guarantees]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Sales Velocity&lt;/td&gt;
          &lt;td&gt;A measure of how quickly a business can move qualified leads through its sales pipeline and turn them into customers, and how much value those customers represent.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Scarcity/Urgency&lt;/td&gt;
          &lt;td&gt;Limiting supply or time to push action [100M Offers p113]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Ticket Price&lt;/td&gt;
          &lt;td&gt;The price paid for a product or service; often refers to average sale amount.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Top Line&lt;/td&gt;
          &lt;td&gt;Total revenue before any costs or expenses are deducted.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Transactional/One-off&lt;/td&gt;
          &lt;td&gt;One-time purchases, low predictability&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Value Equation&lt;/td&gt;
          &lt;td&gt;&lt;em&gt;(Dream Outcome × Perceived Likelihood of Achievement) ÷ (Time Delay × Effort &amp;amp; Sacrifice)&lt;/em&gt; [100M Offers p47]&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;healthy-business-ratios&#34;&gt;Healthy Business Ratios&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Ratio&lt;/th&gt;
          &lt;th&gt;Amount&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;LTGP:CAC&lt;/td&gt;
          &lt;td&gt;&amp;gt; 3:1&lt;/td&gt;
          &lt;td&gt;3:1 is the minimum healthy rule of thumb [100M Leads p208]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Churn&lt;/td&gt;
          &lt;td&gt;&amp;lt; 5% monthly&lt;/td&gt;
          &lt;td&gt;Strong retention [100M Retention Playbook §Churn Math]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Payback Period&lt;/td&gt;
          &lt;td&gt;≤ 12 months&lt;/td&gt;
          &lt;td&gt;CAC recovered within a year [100M Lifetime Value Playbook §Payback]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;EBITDA Margin&lt;/td&gt;
          &lt;td&gt;15–30%&lt;/td&gt;
          &lt;td&gt;Common range for service &amp;amp; SaaS businesses&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</description>
    </item>
    <item>
      <title>Entity Resolution with Senzing and the .NET SDK</title>
      <link>https://www.bencode.io/posts/senzing/</link>
      <pubDate>Fri, 19 Sep 2025 09:35:00 +1000</pubDate>
      <guid>https://www.bencode.io/posts/senzing/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#context&#34;&gt;Context&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#record-vs-entity-vs-relationship&#34;&gt;Record vs Entity vs Relationship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#data-quality-issues-er-addresses&#34;&gt;Data Quality Issues ER Addresses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#senzing&#34;&gt;Senzing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#repository&#34;&gt;Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#key-senzing-attributes&#34;&gt;Key Senzing Attributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resolution-concepts&#34;&gt;Resolution Concepts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#features&#34;&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#feature-scores&#34;&gt;Feature Scores&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#match-levels&#34;&gt;Match Levels&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#senzing-v4-sdk-setup-on-metal&#34;&gt;Senzing V4 SDK Setup on Metal&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#native-senzing-sdk-setup&#34;&gt;Native Senzing SDK Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#net-sdk-setup&#34;&gt;.NET SDK Setup&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#setup-local-nuget-source&#34;&gt;Setup Local NuGet Source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#senzing-v4-c-snippets&#34;&gt;Senzing V4 C# Snippets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#senzing-v4-cli-tools&#34;&gt;Senzing V4 CLI Tools&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#sz_configtool&#34;&gt;sz_configtool&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#listfeatures&#34;&gt;listFeatures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#listattributes&#34;&gt;listAttributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#listrules&#34;&gt;listRules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#listfragments&#34;&gt;listFragments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#principles&#34;&gt;principles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#sz_explorer&#34;&gt;sz_explorer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#get&#34;&gt;get&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#how-tree&#34;&gt;how (tree)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#senzing-weirdness&#34;&gt;Senzing Weirdness&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#typed-models-vs-loose-json-strings&#34;&gt;Typed models vs loose JSON strings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#todo&#34;&gt;TODO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#info-messages-aka-sz_with_info&#34;&gt;Info Messages aka SZ_WITH_INFO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#senzing-best-practices&#34;&gt;Senzing Best practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resources&#34;&gt;Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;context&#34;&gt;Context&lt;/h2&gt;
&lt;p&gt;The process of identifying and linking records that refer to the same real-world entity across different data sources, even when the records contain variations, errors, or incomplete information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Two Years Taught Us</title>
      <link>https://www.bencode.io/posts/retro25/</link>
      <pubDate>Fri, 20 Jun 2025 13:13:00 +1000</pubDate>
      <guid>https://www.bencode.io/posts/retro25/</guid>
      <description>&lt;p&gt;What worked, what didn&amp;rsquo;t, and concrete recommendations for future projects. My in the trenches opinions, observations and reflections of building a complex distributed software system across multiple geographically dispersed teams.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#key-successes&#34;&gt;Key Successes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#technical-achievements&#34;&gt;Technical Achievements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#process-improvements&#34;&gt;Process Improvements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#project-management-challenges&#34;&gt;Project Management Challenges&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#forgotten-agile-principle-1-individuals-and-interactions-over-processes-and-tools&#34;&gt;Forgotten Agile Principle 1: Individuals and Interactions over Processes and Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#forgotten-agile-principle-2-working-software-over-comprehensive-documentation&#34;&gt;Forgotten Agile Principle 2: Working Software over Comprehensive Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#forgotten-agile-principle-3-customer-collaboration-over-contract-negotiation&#34;&gt;Forgotten Agile Principle 3: Customer Collaboration over Contract Negotiation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#forgotten-agile-principle-4-responding-to-change-over-following-a-plan&#34;&gt;Forgotten Agile Principle 4: Responding to Change over Following a Plan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#challenges-and-learnings&#34;&gt;Challenges and Learnings&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#technical-challenges&#34;&gt;Technical Challenges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#team-and-communication&#34;&gt;Team and Communication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#architecture-decisions&#34;&gt;Architecture Decisions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#what-worked-well&#34;&gt;What Worked Well&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#technology-stack&#34;&gt;Technology Stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#team-dynamics&#34;&gt;Team Dynamics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#recommendations-for-future-projects&#34;&gt;Recommendations for Future Projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#personal-growth&#34;&gt;Personal Growth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#lessons-for-future-projects&#34;&gt;Lessons for Future Projects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;key-successes&#34;&gt;Key Successes&lt;/h2&gt;
&lt;h3 id=&#34;technical-achievements&#34;&gt;Technical Achievements&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Successfully built a big data horizontally scalable ingestion system using Kubernetes and leaned into cloud native approaches early on&lt;/li&gt;
&lt;li&gt;Established heavy use of Python type hints early on, which improved code quality and editor aid&lt;/li&gt;
&lt;li&gt;Evangelised Elasticsearch early in the design phase:
&lt;ul&gt;
&lt;li&gt;Led the adoption of Elasticsearch for read workloads, in the face of aprehension and inexperience in the broader team&lt;/li&gt;
&lt;li&gt;Implemented and tuned sophisticated text analysis pipelines&lt;/li&gt;
&lt;li&gt;Optimised search with ngram tokenizers, stemming, and asciifolds&lt;/li&gt;
&lt;li&gt;Designed efficient denormalised document structures and indexing strategies&lt;/li&gt;
&lt;li&gt;Lesson learned how important it is to make the the most appropriate data storage and management choices, make or break analytic solutions such as the one we collectively built. What consistency guarantees do are required? How fast? How are you going to calculate aggregations? What kind of read or write workloads need to be handled? Can these be separated and tackled as different problems?&lt;/li&gt;
&lt;li&gt;Elasticsearch is a HUGE reason why we were successful&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Created flexible hierarchy layering design, allowing differing customers to stamp the data with their own ways of doing things.&lt;/li&gt;
&lt;li&gt;Integrated OpenTelemetry for comprehensive observability&lt;/li&gt;
&lt;li&gt;Developed optimistic locking scheme and deep linking capabilities&lt;/li&gt;
&lt;li&gt;Automated deployments and quality verification with a gigantic test suite investment (unit and integration), linting, autoformatting, all orchestrated with a &lt;code&gt;Makefile&lt;/code&gt; frontend and Bamboo CI pipeline&lt;/li&gt;
&lt;li&gt;The team embraced containers heavily from day 1. From running local vendor infra containers (redis, mongo, elasticsearch, etc) to running repeatable build workloads.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;process-improvements&#34;&gt;Process Improvements&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Adopted &lt;code&gt;Make&lt;/code&gt; for development automation, significantly boosting productivity&lt;/li&gt;
&lt;li&gt;Leveraged code generation effectively for complex scenarios, an ever powerful technique&lt;/li&gt;
&lt;li&gt;Implemented comprehensive integration testing with containerization&lt;/li&gt;
&lt;li&gt;Successfully broke down the system into functional components early&lt;/li&gt;
&lt;li&gt;Established well-defined data schemas upfront, which provided stability&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;project-management-challenges&#34;&gt;Project Management Challenges&lt;/h2&gt;
&lt;p&gt;This project mangaged to defy every &lt;a href=&#34;https://agilemanifesto.org/principles.html&#34;&gt;Agile Manifesto Principle&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Win Friends and Influence People</title>
      <link>https://www.bencode.io/posts/how-to-win-friends/</link>
      <pubDate>Wed, 11 Jun 2025 20:10:00 +1000</pubDate>
      <guid>https://www.bencode.io/posts/how-to-win-friends/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#key-lessons&#34;&gt;Key Lessons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#fundamental-people-handling-techniques&#34;&gt;Fundamental People Handling Techniques&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#if-you-want-honey-dont-kick-the-beehive---avoid-criticism&#34;&gt;If you want honey, don&amp;rsquo;t kick the beehive - avoid criticism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-big-secret-of-people---appreciation&#34;&gt;The big secret of people - appreciation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#those-who-can-do-this-have-the-whole-world---arose-eagerness&#34;&gt;Those who can do this have the whole world - arose eagerness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#make-people-like-you&#34;&gt;Make People Like You&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#do-this-and-be-welcome-anywhere---be-interested-in-others&#34;&gt;Do this and be welcome anywhere - be interested in others&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#make-a-good-first-impression---smile&#34;&gt;Make a good first impression - smile&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#mini-essay-by-elbert-hubbard&#34;&gt;Mini essay by Elbert Hubbard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dont-be-headed-for-trouble---names&#34;&gt;Don&amp;rsquo;t be headed for trouble - names&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#become-a-good-conversationalist---listen&#34;&gt;Become a good conversationalist - listen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#how-to-interest-people---others-interests&#34;&gt;How to interest people - others interests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#how-to-make-people-like-you-instantly---make-others-feel-important&#34;&gt;How to Make People Like You Instantly - make others feel important&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#how-to-win-people-to-your-way-of-thinking&#34;&gt;How To Win People To Your Way Of Thinking&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#you-cant-win-an-argument---avoid-like-the-plague&#34;&gt;You Can&amp;rsquo;t Win an Argument - avoid like the plague&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#disagreement-handling-cheat-sheet&#34;&gt;Disagreement Handling Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#a-sure-way-of-making-enemies-and-avoiding-it---respect-others-opinions&#34;&gt;A Sure Way of Making Enemies and Avoiding It - respect others opinions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#if-youre-wrong-admit-it---admit-wrongs-quickly&#34;&gt;If You&amp;rsquo;re Wrong, Admit It - admit wrongs quickly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#a-drop-of-honey---be-friendly&#34;&gt;A Drop of Honey - be friendly&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-sun-and-the-wind&#34;&gt;The Sun and The Wind&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-secret-of-socrates---focus-on-agreeable-points-not-differences&#34;&gt;The Secret of Socrates - focus on agreeable points, not differences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#a-safety-value-in-handling-complaints---talk-less-listen-more&#34;&gt;A Safety Value in Handling Complaints - talk less, listen more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#how-to-get-cooperation---dont-take-credit-plant-seeds&#34;&gt;How to Get Cooperation - don&amp;rsquo;t take credit, plant seeds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#a-formula-that-will-work-wonders---see-things-from-others-perspective&#34;&gt;A Formula That Will Work Wonders - see things from others perspective&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#what-everybody-wants---sympathy&#34;&gt;What Everybody Wants - sympathy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#an-appeal-that-everybody-likes---nobler-motives&#34;&gt;An Appeal That Everybody Likes - nobler motives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hollywood-does-it---dramatize-ideas&#34;&gt;Hollywood Does It - dramatize ideas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#when-nothing-else-works---stimulate-competition&#34;&gt;When Nothing Else Works - stimulate competition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#leadership&#34;&gt;Leadership&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#if-must-find-fault-begin-this-way---sandwich-technique&#34;&gt;If Must Find Fault, Begin This Way - sandwich technique&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#how-to-criticise-and-not-be-hated&#34;&gt;How to Criticise and Not Be Hated&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#but-to-and---highlight-others-mistakes-indirectly&#34;&gt;But To And - highlight others mistakes indirectly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#talk-about-your-own-mistakes-first---start-with-your-own-shortcomings&#34;&gt;Talk About Your Own Mistakes First - start with your own shortcomings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#no-one-likes-to-take-orders---ask-questions&#34;&gt;No One Likes to Take Orders - ask questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#let-others-save-face---be-respectful-of-others-pride&#34;&gt;Let Others Save Face - be respectful of others pride&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#how-to-spur-people-on-to-success---praise-every-improvement&#34;&gt;How to Spur People on to Success - praise every improvement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#give-a-dog-a-good-name---give-others-a-grand-reputation-to-strive-for&#34;&gt;Give A Dog A Good Name - give others a grand reputation to strive for&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#make-the-fault-seem-easy-to-correct---encouragment&#34;&gt;Make The Fault Seem Easy to Correct - encouragment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#making-people-glad-to-do-what-you-want---empathy&#34;&gt;Making People Glad To Do What You Want - empathy&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#changing-peoples-attitudes-cheat-sheet&#34;&gt;Changing Peoples Attitudes Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dale Carnegie&amp;rsquo;s flagship &amp;ldquo;How to Win Friends and Influence People&amp;rdquo; is a foundational book on communication, relationship-building, and personal effectiveness. First published in 1936, its principles remain relevant for anyone seeking to improve their social skills, leadership, and influence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Self taught MBA</title>
      <link>https://www.bencode.io/posts/selfmba/</link>
      <pubDate>Mon, 02 Jun 2025 19:12:01 +1000</pubDate>
      <guid>https://www.bencode.io/posts/selfmba/</guid>
      <description>&lt;p&gt;This reading list covers the fundamentals of wealth building, personal development, income generation, business scaling, and inspiration from successful entrepreneurs. Each book offers practical insights and strategies for building business acumen and financial success.&lt;/p&gt;
&lt;h2 id=&#34;-personal-development&#34;&gt;🧠 Personal Development&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;How to Win Friends and Influence People&lt;/strong&gt; by Dale Carnegie&lt;br&gt;
Essential communication skills and understanding people&amp;rsquo;s motivations for effective interaction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/36072.The_7_Habits_of_Highly_Effective_People&#34;&gt;The 7 Habits of Highly Effective People&lt;/a&gt;&lt;/strong&gt; by Stephen R. Covey
Seven habits for increased efficiency and effectiveness, including &amp;ldquo;begin with the end in mind.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET Clean Architecture</title>
      <link>https://www.bencode.io/posts/cleanarch/</link>
      <pubDate>Thu, 29 May 2025 20:14:01 +1000</pubDate>
      <guid>https://www.bencode.io/posts/cleanarch/</guid>
      <description>&lt;p&gt;Domain centric architectures, like clean architecture, have inner architectural cores that model the domain. Dependency inversion is king, with inner layers defining abstractions and interfaces and outer layers implementing them. Clean architecture is a good fit when aligning to Domain Driven Design (DDD), dealing with complex business logic, high testability is desirable and/or working in a large team, as the architecture can enforce design policies.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#guiding-principles&#34;&gt;Guiding Principles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#clean-architecture-layers&#34;&gt;Clean Architecture Layers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#domain-layer&#34;&gt;Domain layer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#entities&#34;&gt;Entities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#value-objects&#34;&gt;Value Objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#domain-events&#34;&gt;Domain Events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#domain-services&#34;&gt;Domain Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#interfaces&#34;&gt;Interfaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#results-and-exceptions&#34;&gt;Results and Exceptions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#application-layer-the-use-case-orchestrator&#34;&gt;Application layer: The Use Case Orchestrator&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#application-layer-key-responsibilities&#34;&gt;Application Layer Key Responsibilities&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#use-case-orchestration&#34;&gt;Use Case Orchestration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#higher-order-business-logic&#34;&gt;Higher Order Business Logic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cross-cutting-concerns&#34;&gt;Cross Cutting Concerns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#exception-translation--handling&#34;&gt;Exception Translation &amp;amp; Handling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dependency-injection-hub&#34;&gt;Dependency Injection Hub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#what-the-application-layer-does-not-do&#34;&gt;What the Application Layer Does NOT Do&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#example-application-service&#34;&gt;Example Application Service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dependency-injection-and-mediatr-bootstrapping&#34;&gt;Dependency Injection and MediatR Bootstrapping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cqrs-abstractions&#34;&gt;CQRS Abstractions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#handling-domain-events&#34;&gt;Handling Domain Events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cross-cutting-concerns-with-mediatr-pipelines&#34;&gt;Cross Cutting Concerns with MediatR Pipelines&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#logging-pipeline&#34;&gt;Logging Pipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#validation-pipeline-with-fluentvalidation&#34;&gt;Validation Pipeline with FluentValidation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#infrastructure-layer&#34;&gt;Infrastructure layer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#infrastructure-layer-key-responsibilities&#34;&gt;Infrastructure Layer Key Responsibilities&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#data-persistence-and-access&#34;&gt;Data Persistence and Access&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#external-service-integration&#34;&gt;External Service Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cross-cutting-concerns-implementation&#34;&gt;Cross Cutting Concerns Implementation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#event-handling-infrastructure&#34;&gt;Event Handling Infrastructure&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#what-the-infrastructure-layer-does-not-do&#34;&gt;What the Infrastructure Layer Does NOT Do&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#example-concrete-provider-for-idatetimeprovider&#34;&gt;Example Concrete Provider for IDateTimeProvider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ef-core-setup&#34;&gt;EF Core Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#integrating-domain-entities-with-ef-core&#34;&gt;Integrating Domain Entities with EF Core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#publishing-domain-events-in-the-unit-of-work&#34;&gt;Publishing Domain Events in the Unit of Work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#handling-race-conditions-with-optimistic-concurrency&#34;&gt;Handling Race Conditions with Optimistic Concurrency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#distributed-cache-service&#34;&gt;Distributed Cache Service&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#presentation-layer&#34;&gt;Presentation layer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#presentation-layer-key-responsibilities&#34;&gt;Presentation Layer Key Responsibilities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#what-the-presentation-layer-does-not-do&#34;&gt;What the Presentation Layer Does NOT Do&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#api-controllers-and-endpoints&#34;&gt;API Controllers and Endpoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#seed-data-and-ef-migrations&#34;&gt;Seed Data and EF Migrations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#authentication-authn-with-keycloak&#34;&gt;Authentication (authn) with Keycloak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#authorization-authz&#34;&gt;Authorization (authz)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#role-based-authorization&#34;&gt;Role-based Authorization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#permission-based-policy-authorization&#34;&gt;Permission-based (Policy) Authorization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resource-based-authorization&#34;&gt;Resource-based Authorization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#structured-logging&#34;&gt;Structured Logging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#health-checks&#34;&gt;Health Checks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#net-implementation-tips&#34;&gt;.NET Implementation Tips&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#general-net-tips&#34;&gt;General .NET Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#domain-layer-net-tips&#34;&gt;Domain Layer .NET Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#application-layer-net-tips&#34;&gt;Application Layer .NET Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#infrastructure-layer-net-tips&#34;&gt;Infrastructure Layer .NET Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#presentation-layer-net-tips&#34;&gt;Presentation Layer .NET Tips&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#structured-logging-1&#34;&gt;Structured Logging&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#serilog&#34;&gt;Serilog&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#serilog-and-seq-setup-guide&#34;&gt;Serilog and Seq Setup Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#outbox-pattern&#34;&gt;Outbox Pattern&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-problem&#34;&gt;The Problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-solution&#34;&gt;The Solution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#key-benefits&#34;&gt;Key Benefits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#outbox-net-implementation&#34;&gt;Outbox .NET Implementation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#outbox-message-definition&#34;&gt;Outbox Message Definition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#transactionally-publish-domain-events-as-outbox-messages&#34;&gt;Transactionally Publish Domain Events as Outbox Messages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#background-worker-job-with-quartznet&#34;&gt;Background Worker Job with Quartz.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hookup-dependency-injection&#34;&gt;Hookup Dependency Injection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#aspnet-core-minimal-apis&#34;&gt;ASP.NET Core Minimal APIs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#controller-to-minimal-api-conversion-cookbook&#34;&gt;Controller to Minimal API Conversion Cookbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#centralising-route-opinions-with-route-groups&#34;&gt;Centralising Route Opinions with Route Groups&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#testing&#34;&gt;Testing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#domain-layer-unit-testing&#34;&gt;Domain Layer Unit Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#application-layer-unit-testing&#34;&gt;Application Layer Unit Testing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#mocking-with-nsubstitute&#34;&gt;Mocking with NSubstitute&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#application-layer-integration-testing-with-testcontainers&#34;&gt;Application Layer Integration Testing with TestContainers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#troubleshooting&#34;&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#accessing-internal-symbols&#34;&gt;Accessing Internal Symbols&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bonus-contemporary-net-gems&#34;&gt;Bonus: Contemporary .NET gems&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#primary-constructors&#34;&gt;Primary Constructors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#switch-expressions&#34;&gt;Switch Expressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#records&#34;&gt;Records&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#async-tips&#34;&gt;Async Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mediatr&#34;&gt;MediatR&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#irequest-and-irequesthandler---requestresponse&#34;&gt;IRequest and IRequestHandler - Request/Response&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#publishing&#34;&gt;Publishing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#inotification-and-inotificationhandler---pubsub&#34;&gt;INotification and INotificationHandler - Pub/Sub&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#publishing-1&#34;&gt;Publishing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mediatrcontracts-package&#34;&gt;MediatR.Contracts Package&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#visual-studio-and-roslyn-code-quality-level-ups&#34;&gt;Visual Studio and Roslyn Code Quality Level Ups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dotnet-cli-tips&#34;&gt;dotnet CLI Tips&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;guiding-principles&#34;&gt;Guiding Principles&lt;/h2&gt;
&lt;p&gt;High level qualities that a good software architecture should (and enforce) strive for; maintainability, testability and loose coupling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pro CSS</title>
      <link>https://www.bencode.io/posts/procss/</link>
      <pubDate>Sat, 10 May 2025 17:55:56 +1000</pubDate>
      <guid>https://www.bencode.io/posts/procss/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#modern-css-fundamentals&#34;&gt;Modern CSS Fundamentals&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#baseline&#34;&gt;Baseline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#progressive-enhancement&#34;&gt;Progressive Enhancement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#logical-properties-and-values&#34;&gt;Logical properties and values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#css-reset&#34;&gt;CSS Reset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#css-cascade-layers&#34;&gt;CSS Cascade Layers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#css-custom-properties-variables&#34;&gt;CSS Custom Properties (variables)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#colors&#34;&gt;Colors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#typography&#34;&gt;Typography&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#media-queries-and-custom-properties&#34;&gt;Media queries and custom properties&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#structured-custom-properties&#34;&gt;Structured custom properties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#base-styles&#34;&gt;Base styles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#meaningful-links&#34;&gt;Meaningful links&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#big-picture-design-system&#34;&gt;Big picture design system&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#wrappers&#34;&gt;Wrappers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#modifiers&#34;&gt;Modifiers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#option-1-bem-approach&#34;&gt;Option 1: BEM approach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#option-2-data-attributes&#34;&gt;Option 2: Data attributes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#landmark-regions&#34;&gt;Landmark regions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#gems&#34;&gt;Gems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resources&#34;&gt;Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;modern-css-fundamentals&#34;&gt;Modern CSS Fundamentals&lt;/h2&gt;
&lt;h3 id=&#34;baseline&#34;&gt;Baseline&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://web-platform-dx.github.io/web-features/&#34;&gt;Baseline&lt;/a&gt; features are ones that are supported by all the major browsers (Chrome, Edge, Safari, and Firefox). Both the &lt;a href=&#34;https://developer.mozilla.org/en-US/&#34;&gt;MDN web docs&lt;/a&gt; and &lt;a href=&#34;https://caniuse.com/&#34;&gt;caniuse&lt;/a&gt; show when a feature has reached either the Newly available or Widely available threshold.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zero to One: Notes on Startups and Building the Future</title>
      <link>https://www.bencode.io/posts/zero2one/</link>
      <pubDate>Sun, 09 Mar 2025 16:47:56 +1100</pubDate>
      <guid>https://www.bencode.io/posts/zero2one/</guid>
      <description>&lt;p&gt;&lt;em&gt;Zero to One&lt;/em&gt; is a book by Peter Thiel and Blake Masters about the value of true innovation made accessible to the masses through startups. It outlines several tenets that keen-minded business people should hold dear, including why technology trumps globalization, why we should be supporting monopolies instead of &amp;ldquo;healthy competition&amp;rdquo;, why successful innovators have the worldview of a &amp;ldquo;definite optimist&amp;rdquo; and why no one should be afraid of losing their job to a robot. &lt;em&gt;Zero to One&lt;/em&gt; also delivers unique business insights, such as the four most important things to pay attention to about your product (they&amp;rsquo;re not quantitative) and the seven questions every business must answer for itself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reflections on ElasticON Sydney 2025</title>
      <link>https://www.bencode.io/posts/elasticon25/</link>
      <pubDate>Fri, 07 Mar 2025 07:16:56 +1100</pubDate>
      <guid>https://www.bencode.io/posts/elasticon25/</guid>
      <description>&lt;p&gt;ElasticON in Sydney this March was a packed day, blending technical deep dives with executive-level discussions. The event featured interviews with partners and customers, but the real highlight was the keynote from Ken Exner and Baha Azarmi. Their presentation was slick, showcasing cutting edge GenAI features across the Elastic stack, including the new &lt;code&gt;semantic_text&lt;/code&gt; field type, RRF, BBQ, LogsDB mode, and the ability to ETL unstructured data onto ECS using an LLM. The introduction of the ESQL query engine with native joins was another game changer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Effective Study Techniques</title>
      <link>https://www.bencode.io/posts/study/</link>
      <pubDate>Sat, 01 Mar 2025 15:52:56 +1100</pubDate>
      <guid>https://www.bencode.io/posts/study/</guid>
      <description>&lt;p&gt;Studying effectively isn’t just about putting in the hours, it’s about using the right techniques. Research shows that some popular methods, like re-reading notes or highlighting, are far less effective than people assume. Instead, techniques that leverage how our brains naturally process and retain information yield far better results.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-problem-with-common-study-habits&#34;&gt;The Problem with Common Study Habits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#memory-palaces-the-ancient-greek-technique&#34;&gt;Memory Palaces: The Ancient Greek Technique&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-prot%C3%A9g%C3%A9-effect--the-feynman-technique&#34;&gt;The Protégé Effect &amp;amp; The Feynman Technique&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-zeigarnik-effect-why-unfinished-tasks-stick&#34;&gt;The Zeigarnik Effect: Why Unfinished Tasks Stick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#distributed-learning-the-power-of-spacing&#34;&gt;Distributed Learning: The Power of Spacing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;the-problem-with-common-study-habits&#34;&gt;The Problem with Common Study Habits&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ineffective techniques&lt;/strong&gt;: Reading over and over, highlighting, using mnemonics for simple memorization, starting early without a plan, reading notes before and after class, listening to music while studying.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stubborn Attachments: A Vision for a Society of Free, Prosperous and Responsible Individuals</title>
      <link>https://www.bencode.io/posts/stubborn/</link>
      <pubDate>Sat, 15 Feb 2025 11:55:56 +1100</pubDate>
      <guid>https://www.bencode.io/posts/stubborn/</guid>
      <description>&lt;p&gt;&lt;em&gt;Stubborn Attachments&lt;/em&gt; is a book by &lt;em&gt;Tyler Cowen&lt;/em&gt; that paints a picture of an altruistic and bright future for the human race. Cohen argues and highlights the importance of sustained economic growth, moral philosophy and consequentialism, radical uncertainty, rules-based ethics, that future generations matter deeply, and how we as a race must be stubbornly attached to certain core principles as the necessary pre-conditions for sustainable prosperity. To be honest I avoid books like this, because they are hard. I mean, where do you start pulling apart such a broad and complicated topic. I thank Cohen for expanding my thinking towards civilization and painting the broad brushstrokes of a future pathway our race must strive for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hiking Retrospectives</title>
      <link>https://www.bencode.io/posts/hikebetter/</link>
      <pubDate>Sun, 09 Feb 2025 15:38:01 +1100</pubDate>
      <guid>https://www.bencode.io/posts/hikebetter/</guid>
      <description>&lt;p&gt;Getting out on the trail is one my favourite things to do, especially long multi-day hikes. I&amp;rsquo;ve got into the habbit of reflecting after each adventure, what worked well, what didn&amp;rsquo;t, potential opportunities or tips I discovered from other more experienced hikers. In software, some agile methods refer to this act as a &lt;em&gt;retrospective&lt;/em&gt; and its a powerful way to get better at something.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly&amp;rdquo; - Agile Manifesto, 2001&lt;/p&gt;</description>
    </item>
    <item>
      <title>Certified Kubernetes Administrator (CKA)</title>
      <link>https://www.bencode.io/posts/cka/</link>
      <pubDate>Sun, 19 Jan 2025 20:14:01 +1100</pubDate>
      <guid>https://www.bencode.io/posts/cka/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#glossary&#34;&gt;Glossary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#certification-tips&#34;&gt;Certification tips&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#bookmarks&#34;&gt;Bookmarks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kubectl-imperative-commands&#34;&gt;kubectl imperative commands&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#docker-vs-containerd&#34;&gt;Docker vs containerD&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#ctr&#34;&gt;ctr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#nerdctl&#34;&gt;nerdctl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#crictl&#34;&gt;crictl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#etcd&#34;&gt;etcd&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#etcdctl&#34;&gt;etcdctl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kube-apiserver&#34;&gt;kube-apiserver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kube-controller-manager&#34;&gt;kube-controller-manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#replicasets&#34;&gt;ReplicaSets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#deployments&#34;&gt;Deployments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#services&#34;&gt;Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#namespaces&#34;&gt;Namespaces&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#working-with-namespaces&#34;&gt;Working with namespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#creating-a-new-namespace&#34;&gt;Creating a new namespace&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#declaratively&#34;&gt;Declaratively&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#imperatively&#34;&gt;Imperatively&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#namespace-less-objects&#34;&gt;Namespace-less objects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#gems&#34;&gt;Gems&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;glossary&#34;&gt;Glossary&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Term&lt;/th&gt;
          &lt;th&gt;Definition&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;cri&lt;/td&gt;
          &lt;td&gt;Container Runtime Interface, the contract between k8s and the container runtime&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;crictl&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ctr&lt;/td&gt;
          &lt;td&gt;Debugging tool for containerD&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;oci&lt;/td&gt;
          &lt;td&gt;Open Container Initiative, formalised the specification of an &lt;code&gt;imagespec&lt;/code&gt; and a &lt;code&gt;runtimespec&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;nerdctl&lt;/td&gt;
          &lt;td&gt;Docker like CLI experience for containerD&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;certification-tips&#34;&gt;Certification tips&lt;/h2&gt;
&lt;h3 id=&#34;bookmarks&#34;&gt;Bookmarks&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://kubernetes.io/docs/reference/kubectl/conventions/&#34;&gt;https://kubernetes.io/docs/reference/kubectl/conventions/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rubiks Cube Algo</title>
      <link>https://www.bencode.io/posts/rubiks/</link>
      <pubDate>Thu, 26 Dec 2024 17:15:01 +1000</pubDate>
      <guid>https://www.bencode.io/posts/rubiks/</guid>
      <description>&lt;p&gt;A fun memorable algorithm to teach my 5yo nephew how to tackle a 3 sided rubik&amp;rsquo;s cube.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#step-1-make-a-daisy&#34;&gt;Step 1: Make a Daisy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#step-2-fill-in-the-white-corners-chase-the-white-dogs&#34;&gt;Step 2: Fill in the White Corners (&amp;ldquo;Chase the White Dogs&amp;rdquo;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#step-3-solve-the-middle-row&#34;&gt;Step 3: Solve the Middle Row&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#step-4-the-yellow-cross&#34;&gt;Step 4: The Yellow Cross&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#step-5-the-yellow-face-feed-the-yellow-fish&#34;&gt;Step 5: The Yellow Face (&amp;ldquo;Feed the Yellow Fish&amp;rdquo;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#step-6-top-corners&#34;&gt;Step 6: Top Corners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#step-7-top-middles&#34;&gt;Step 7: Top Middles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;step-1-make-a-daisy&#34;&gt;Step 1: Make a Daisy&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Start by creating a white plus sign (the petals) on the yellow face (center).&lt;/li&gt;
&lt;li&gt;Align each white petal&amp;rsquo;s adjacent color with its matching middle-row center color.&lt;/li&gt;
&lt;li&gt;Once matched, rotate the petal 180° to move it to the bottom face.
&lt;ul&gt;
&lt;li&gt;Repeat this process for all petals until you form a white cross on the bottom face.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;step-2-fill-in-the-white-corners-chase-the-white-dogs&#34;&gt;Step 2: Fill in the White Corners (&amp;ldquo;Chase the White Dogs&amp;rdquo;)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Find any white corner pieces on the bottom layer (the &amp;ldquo;dogs&amp;rdquo;).&lt;/li&gt;
&lt;li&gt;Rotate the bottom layer to position a white corner directly below its matching color. For example, a white/green corner should be under the green side.&lt;/li&gt;
&lt;li&gt;Bring the corner into the white face by rotating the side it’s under downward, “scooping” the corner piece into place.
&lt;ul&gt;
&lt;li&gt;Repeat until the entire white face is completed, and the bottom row edges align with their center colors.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;step-3-solve-the-middle-row&#34;&gt;Step 3: Solve the Middle Row&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Looking at the bottom and sides (white layer is top), find middle cells on the bottom layer that &lt;strong&gt;don&amp;rsquo;t&lt;/strong&gt; contain any yellow (e.g., an orange/blue edge).&lt;/li&gt;
&lt;li&gt;Move the middle cell (e.g. orange/blue) by rotating the bottom axis, until its side face color matches (e.g. a cell with an orange side and blue bottom should sit below the mostly orange sided-side).&lt;/li&gt;
&lt;li&gt;Determine the &lt;strong&gt;target direction&lt;/strong&gt; the piece needs to move (e.g. for an orange/blue if the mostly blue sided-side is on the left, then the target direction is left): either left or right&lt;/li&gt;
&lt;li&gt;Follow this sequence to place it:
&lt;ul&gt;
&lt;li&gt;Turn the bottom layer &lt;strong&gt;away&lt;/strong&gt; from the &lt;strong&gt;target direction&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Looking at the bottom layer head on&lt;/em&gt;, rotate the bottom layer &lt;strong&gt;towards&lt;/strong&gt; the &lt;strong&gt;target direction&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Looking at the bottom layer head on&lt;/em&gt;, rotate the &lt;strong&gt;target direction&lt;/strong&gt; (e.g. left) column &lt;strong&gt;downward&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Looking at the bottom layer head on&lt;/em&gt;, rotate the middle (sandwich) layer &lt;strong&gt;toward&lt;/strong&gt; the &lt;strong&gt;target direction&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Looking at the bottom layer head on&lt;/em&gt;, rotate the &lt;strong&gt;target direction&lt;/strong&gt; (e.g. left) column &lt;strong&gt;upward&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Restore the white top face as needed.&lt;/li&gt;
&lt;li&gt;Repeat until all middle-row edges are in place.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;step-4-the-yellow-cross&#34;&gt;Step 4: The Yellow Cross&lt;/h3&gt;
&lt;p&gt;Use the &lt;strong&gt;FUR-RUF&lt;/strong&gt; sequence:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elasticsearch Performance and Tuning</title>
      <link>https://www.bencode.io/posts/esperf/</link>
      <pubDate>Fri, 07 Jun 2024 18:46:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/esperf/</guid>
      <description>&lt;p&gt;A dedicated performance course run by Matt Gregory from Elastic, an absolute legend with deep Elasticsearch expert.&lt;/p&gt;
&lt;p&gt;Contents&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#cool-takeaways&#34;&gt;Cool takeaways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tuning-for-index-speed&#34;&gt;Tuning for Index Speed&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#increase-the-refresh-interval&#34;&gt;Increase the refresh interval&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#index-architecting&#34;&gt;Index architecting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bulk&#34;&gt;Bulk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hardware-settings-to-improve-performance&#34;&gt;Hardware settings to improve performance&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#disable-swapping&#34;&gt;Disable swapping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#indexing-buffer-size&#34;&gt;Indexing Buffer size&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#best-practices-and-scaling&#34;&gt;Best practices and scaling&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#disable-replics-for-initial-loads&#34;&gt;Disable replics for initial loads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#use-auto-generated-ids&#34;&gt;Use auto-generated IDs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#use-cross-cluster-replication&#34;&gt;Use Cross Cluster Replication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#thread-pools&#34;&gt;Thread Pools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#memory-locking&#34;&gt;Memory Locking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#transforms&#34;&gt;Transforms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tuning-for-search&#34;&gt;Tuning for search&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#api-settings-and-data-modelling-to-improve-search-performance&#34;&gt;API settings and data modelling to improve search performance&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#search-as-few-fields-as-possible&#34;&gt;Search as few fields as possible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#one-big-copy_to-field-as-opposed-to-individual-text-multi-field&#34;&gt;One big copy_to field as opposed to individual text multi field&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#consider-mapping-identifiers-as-keywords&#34;&gt;Consider mapping identifiers as keywords&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#document-modeling&#34;&gt;Document modeling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#consider-mapping-numeric-fields-as-keyword&#34;&gt;Consider mapping numeric fields as keyword&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hardware-settings-to-improve-search&#34;&gt;Hardware settings to improve search&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#warm-up-global-ordinals&#34;&gt;Warm Up Global Ordinals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#warm-up-filesystem-cache&#34;&gt;Warm up filesystem Cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#use-index-sorting-to-speed-up-search&#34;&gt;Use index sorting to speed up search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ways-to-improve-searches&#34;&gt;Ways to improve searches&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#must-and-should-clauses&#34;&gt;must and should clauses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#filter-and-must-not-clauses&#34;&gt;filter and must not clauses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#node-query-cache&#34;&gt;node query cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#shard-request-cache&#34;&gt;shard request cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#aggregation-performance&#34;&gt;Aggregation performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#search-rounded-dates&#34;&gt;Search rounded dates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#force-merge-read-only-indices&#34;&gt;Force merge read only indices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#search-profiler-and-explain-api&#34;&gt;Search profiler and Explain API&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#search-profiler&#34;&gt;Search profiler&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#search-profiler-api-id&#34;&gt;Search profiler API ID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#query-section&#34;&gt;Query section&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#timing-breakdown&#34;&gt;Timing breakdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#collection-section&#34;&gt;Collection section&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#collectors-reasons&#34;&gt;Collectors reasons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#rewrite-section&#34;&gt;Rewrite section&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#explain-and-tasks-api&#34;&gt;Explain and Tasks API&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#explain-api&#34;&gt;Explain API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#score&#34;&gt;Score&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#field-length-normalization-and-coordindation&#34;&gt;Field length normalization and coordindation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#other-query-parameters&#34;&gt;Other Query Parameters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#api-settings-to-improve-indexing-performance&#34;&gt;API Settings to improve indexing performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hardware-settings-to-improve-performance-1&#34;&gt;Hardware settings to improve performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#best-practices-and-scaling-1&#34;&gt;Best Practices and scaling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#transforms-1&#34;&gt;Transforms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cool-takeaways&#34;&gt;Cool takeaways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Increase the &lt;code&gt;refresh_interval&lt;/code&gt; from default 1s to something higher, like 10s.&lt;/li&gt;
&lt;li&gt;Index typings should be set to &lt;code&gt;strict&lt;/code&gt; (default is dynamic)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;took&lt;/code&gt; param measures raw cluster operation speed, kibana will also reveal a roundtrip time which includes the HTTP layer.&lt;/li&gt;
&lt;li&gt;Auto generated id&amp;rsquo;s are always faster&lt;/li&gt;
&lt;li&gt;One of Matt&amp;rsquo;s favourite APIs &lt;code&gt;_cluster/allocation/explain&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ensure the heap is beefed up&lt;/li&gt;
&lt;li&gt;a &lt;code&gt;must&lt;/code&gt; clause is the first line of defence for scoring, &lt;code&gt;should&lt;/code&gt; is then used as the second pass of scoring&lt;/li&gt;
&lt;li&gt;always format queries as a &amp;lsquo;bool&amp;rsquo;&lt;/li&gt;
&lt;li&gt;Configuration management everywhere (Ansible, etc)&lt;/li&gt;
&lt;li&gt;dedicated monitoring cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tuning-for-index-speed&#34;&gt;Tuning for Index Speed&lt;/h2&gt;
&lt;p&gt;Cheatsheet:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elasticsearch Engineer 8.1</title>
      <link>https://www.bencode.io/posts/eseng8/</link>
      <pubDate>Sun, 02 Jun 2024 18:46:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/eseng8/</guid>
      <description>&lt;p&gt;Revised 2024 edition based on Elasticsearch 8.1.&lt;/p&gt;
&lt;p&gt;Recently the opportunity to attend the latest revision of the 4-day Elasticsearch engineer course, which I did in-person about 5 years ago in Sydney. Elasticsearch has often been an integral part of the data solutions I&amp;rsquo;ve been involved with and I&amp;rsquo;m quite fond of it. This time round the course only runs in a virtual class room format (using strigo.io) with our awesome trainers Krishna Shah and Kiju Kim.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kustomize</title>
      <link>https://www.bencode.io/posts/kustomize/</link>
      <pubDate>Fri, 03 May 2024 22:17:30 +0000</pubDate>
      <guid>https://www.bencode.io/posts/kustomize/</guid>
      <description>&lt;p&gt;Kustomize is built into &lt;code&gt;kubectl&lt;/code&gt; with &lt;code&gt;-k&lt;/code&gt;. Great samples on &lt;a href=&#34;https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/&#34;&gt;kubernetes.io/docs&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Kustomize provides a template-free way to customize kubernetes manifests&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Contents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#generating-resources&#34;&gt;Generating resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#setting-cross-cutting-fields&#34;&gt;Setting cross cutting fields&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#composing-and-customizing-resources&#34;&gt;Composing and customizing resources&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#composing&#34;&gt;Composing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#customizing&#34;&gt;Customizing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#patches&#34;&gt;Patches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#images&#34;&gt;Images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#replacements&#34;&gt;Replacements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reference&#34;&gt;Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In a nutshell provides 3 key features:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;generating resources from other sources&lt;/li&gt;
&lt;li&gt;setting cross-cutting fields for resources&lt;/li&gt;
&lt;li&gt;composing and customizing collections of resources&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;generating-resources&#34;&gt;Generating resources&lt;/h2&gt;
&lt;p&gt;To generate a ConfigMap from an &lt;code&gt;.env&lt;/code&gt; file, add an entry to the envs list in &lt;code&gt;configMapGenerator&lt;/code&gt;. Kustomize supports other formats such as &lt;code&gt;.properties&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Packaging (2024)</title>
      <link>https://www.bencode.io/posts/pythonpack/</link>
      <pubDate>Fri, 29 Dec 2023 17:29:33 +1100</pubDate>
      <guid>https://www.bencode.io/posts/pythonpack/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#sysconfig&#34;&gt;sysconfig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#project-structure&#34;&gt;Project Structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#setup-script&#34;&gt;Setup Script&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#distribution-archives&#34;&gt;Distribution Archives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#distribution&#34;&gt;Distribution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sysconfig&#34;&gt;sysconfig&lt;/h2&gt;
&lt;p&gt;The process of bundling Python code into a format that eases distribution and sharing. First up, I find it helps to get a concrete understanding of how the specific python distro I&amp;rsquo;m working with is configured, of paricular interest are the various system paths that will be visited for package dependencies. The built-in &lt;a href=&#34;https://docs.python.org/3/library/sysconfig.html&#34;&gt;sysconfig&lt;/a&gt; module neatly manages and surfaces this information.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;python -m sysconfig
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On a Windows system:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes Certified Administrator (CKA) 2024</title>
      <link>https://www.bencode.io/posts/cka/</link>
      <pubDate>Fri, 22 Dec 2023 20:11:30 +0000</pubDate>
      <guid>https://www.bencode.io/posts/cka/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#cka-topics&#34;&gt;CKA topics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kubernetes-in-a-nutshell&#34;&gt;Kubernetes in a nutshell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#lab-environment&#34;&gt;Lab environment&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#kubeadm-init-sample-output&#34;&gt;kubeadm init sample output&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#buliding-kubernetes-clusters&#34;&gt;Buliding kubernetes clusters&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#networking&#34;&gt;Networking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kubeadm&#34;&gt;kubeadm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kubectl&#34;&gt;kubectl&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#contexts&#34;&gt;Contexts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resources&#34;&gt;Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cka-topics&#34;&gt;CKA topics&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Cluster Architecture, Installation &amp;amp; Configuration: How to set up and configure a Kubernetes cluster, including how to install and configure a Kubernetes cluster using &lt;code&gt;kubeadm&lt;/code&gt;, how to upgrade your cluster version, how to backup and restore an &lt;code&gt;etcd&lt;/code&gt; cluster, and how to configure a pod to use secrets&lt;/li&gt;
&lt;li&gt;Workloads &amp;amp; Scheduling: How to deploy a Kubernetes application, create daemonsets, scale the application, configure health checks, use multi-container pods, and use config maps and secrets in a pod. You&amp;rsquo;ll also need to know how to expose your application using services&lt;/li&gt;
&lt;li&gt;Services &amp;amp; Networking: How to expose applications within the cluster or outside the cluster, how to manage networking policies, and how to configure ingress controllers&lt;/li&gt;
&lt;li&gt;Storage: How to create and configure persistent volumes, how to create and configure persistent volume claims, and how to expand persistent volumes&lt;/li&gt;
&lt;li&gt;Troubleshooting: How to troubleshoot common issues in a Kubernetes environment, including how to diagnose and resolve issues with pods, nodes, and network traffic&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;kubernetes-in-a-nutshell&#34;&gt;Kubernetes in a nutshell&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Control plane&lt;/strong&gt; management components that mother-hen nodes and pods. Key components:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python PR Checklist</title>
      <link>https://www.bencode.io/posts/pythonchecklist/</link>
      <pubDate>Mon, 30 Oct 2023 20:44:33 +1100</pubDate>
      <guid>https://www.bencode.io/posts/pythonchecklist/</guid>
      <description>&lt;p&gt;A modified version of excellent original checklist by &lt;a href=&#34;https://python-coding-guidelines.readthedocs.io/en/latest/code_review_checklist.html&#34;&gt;Paul Wolf&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;general&#34;&gt;General&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Code is blackened with &lt;code&gt;black&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;code&gt;ruff&lt;/code&gt; has been run with no errors&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;code&gt;mypy&lt;/code&gt; has been run with no errors&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Function complexity problems have been resolved using the &lt;em&gt;default&lt;/em&gt; complexity index of &lt;code&gt;flake8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Important core code can be loaded in iPython, ipdb easily.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; There is no dead code&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Comprehensions or generator expressions are used in place of for loops where appropriate&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Comprehensions and generator expressions produce state but they do not have side effects within the expression.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Use &lt;code&gt;zip()&lt;/code&gt;, &lt;code&gt;any()&lt;/code&gt;, &lt;code&gt;all()&lt;/code&gt;, &lt;code&gt;filter()&lt;/code&gt;, etc. instead of for loops where appropriate&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Functions that take as parameters and mutate mutable variables don’t return these variables. They return None.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Return immutable copies of mutable types instead of mutating the instances themselves when mutable types are passed as parameters with the intention of returning a mutated version of that variable.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Avoid method cascading on objects with methods that return &lt;code&gt;self&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Function and method parameters never use empty collection or sequence instances like list &lt;code&gt;[]&lt;/code&gt; or dict &lt;code&gt;{}&lt;/code&gt;. Instead they must use &lt;code&gt;None&lt;/code&gt; to indicate missing input&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Variables in a function body are initialised with empty sequences or collections by callables, &lt;code&gt;list()&lt;/code&gt;, &lt;code&gt;dict()&lt;/code&gt;, instead of &lt;code&gt;[]&lt;/code&gt;, &lt;code&gt;{}&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Always use the &lt;code&gt;Final&lt;/code&gt; type hint for class instance parameters that will not change.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Context-dependent variables are not unnecessarily passed between functions or methods&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; View functions either implement the business rules the view is repsonsible for or it passes data downstream to have this done by services and receives non-context dependent data back.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; View functions don’t pass &lt;code&gt;request&lt;/code&gt; to called functions&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Functions including class methods don’t have too many local parameters or instance variables. Especially a class’ &lt;code&gt;__init__()&lt;/code&gt; should not have too many parameters.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Profiling code is minimal&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Logging is the minimum required for production use&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; There are no home-brewed solutions for things that already exist in the PSL (python standard library)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;n00b-habbits&#34;&gt;n00b habbits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Bare &lt;code&gt;except&lt;/code&gt; clause, Python uses exceptions to flag system level interupts such as sigkills. Don&amp;rsquo;t do this.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Argument default mutatable arguments such as &lt;code&gt;def foo(bar=[])&lt;/code&gt; are defined when the function is defined, not when its run, and will result in a all function calls sharing the same instance of &lt;code&gt;bar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Checking for equality using &lt;code&gt;==&lt;/code&gt;. Due to inheritance this is not desirable as it pins to a concrete type and not potentially it descendents. In other words the Liskov substitution principle. Instead &lt;code&gt;isinstance(p, tuple)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Explicit bool or length checks, such as &lt;code&gt;if bool(x)&lt;/code&gt; or &lt;code&gt;if len(x) &amp;gt; 0&lt;/code&gt; is redundant, as Python has sane truthy evaluation.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Use of &lt;code&gt;range&lt;/code&gt; over the &lt;code&gt;for in&lt;/code&gt; idiom&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; If you really need the index, always use &lt;code&gt;enumerate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Not using items() on a dict &lt;code&gt;for k, v in dict.items()&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Using &lt;code&gt;time.time&lt;/code&gt; to measure code performance. Use &lt;code&gt;time.perf_counter&lt;/code&gt; instead.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Using &lt;code&gt;print&lt;/code&gt; statements over &lt;code&gt;logging&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Using &lt;code&gt;import *&lt;/code&gt; will normally liter the namespace with variable. Dont be lazy, be specific. &lt;code&gt;from itertools import count&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;imports-and-modules&#34;&gt;Imports and modules&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Imports are sorted by &lt;code&gt;isort&lt;/code&gt; or according to some standard that is consistent within the team&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Import packages or modules to qualify the use of functions or classes so that unqualified function calls can be assumed to be to functions in the current module&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;documentation&#34;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Modules have docstrings&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Classes have docstrings unless their purpose is immediately obvious&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Methods and functions have docstrings&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Comments and docstrings add non-obvious and helpful information that is not already present in the naming of functions and variables&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;general-complexity&#34;&gt;General Complexity&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Functions as complex as they need to be but no more (as defined by &lt;code&gt;flake8&lt;/code&gt;\ ’s default complexity threshold)&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Classes have only as many methods as required and have a simple hierarchy&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;context-freedom&#34;&gt;Context Freedom&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; All important functionality can be loaded easily in &lt;code&gt;ipython&lt;/code&gt; without having to construct dummy requests, etc.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; All important functionality can be loaded in pdb (or a variant, ipdb, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;types&#34;&gt;Types&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Use immutable types ()&lt;code&gt;tuple&lt;/code&gt;, &lt;code&gt;frozenset&lt;/code&gt;, &lt;code&gt;Enum&lt;/code&gt;, etc) over mutable types whenever possible&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;functions&#34;&gt;Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Functions are pure wherever possible, i.e. they take input and provide a return value with no side-effects or reliance on hidden state.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;modules&#34;&gt;Modules&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Module level variables do not take context-dependent values like connection clients to remote systems unless the client is used immediately for another module level variable and not used again&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;classes&#34;&gt;Classes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Every class has a single well-defined purpose. That is, the class does not mix up different tasks, like remote state acquisition, web sockets notification, data formatting, etc.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Classes manage state and do not just represent the encapsulation of behaviour&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; All methods access either &lt;code&gt;cls&lt;/code&gt; or &lt;code&gt;self&lt;/code&gt; in the body. If a method does not access &lt;code&gt;cls&lt;/code&gt; or &lt;code&gt;self&lt;/code&gt;, it should be a function at module level.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;code&gt;@classmethod&lt;/code&gt; is used in preference to &lt;code&gt;@staticmethod&lt;/code&gt; but only if the method body accesses &lt;code&gt;cls&lt;/code&gt; otherwise the method should be a module level function.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Constants are declared at module level not in methods or class level&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Constants are always upper case&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Abstract classes are derived from abc: &lt;code&gt;from abc import ABC&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Abstract methods use the &lt;code&gt;@abstractmethod&lt;/code&gt; decorator&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Abstract class properties use both &lt;code&gt;@abstractmethod&lt;/code&gt; and &lt;code&gt;@property&lt;/code&gt; decorators&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Classes do not use multiple inheritance&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Classes do not use mixins (use composition instead) except in rare cases&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Class names do not use the word “Base” to signal they are the single ancestor, like “BaseWhatever”&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Decorators are not used to replace classes as a design pattern&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;code&gt;__init__()&lt;/code&gt; does not define too many local variables. Use the Parameter Consolidation pattern instead.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; A factory class or function at module level is used for complex class construction (see Design Patterns) to achieve composition&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Classes are not dynamically created from strings except where forward reference requires this&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;design-patterns&#34;&gt;Design Patterns&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Do not use designs that cause a typical Python developer to have to learn new semantics that are unexpected in Python&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Classes primarily use composition in preference to inheritance&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Beyond a very small number of simple variables, a class’ purpose is to acquire state for another class or it uses another class to acquire state in particular if the state is from a remote service.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; If you use the Context Parameter pattern, it is critical that the state of the context does not change after calling its &lt;code&gt;__init__()&lt;/code&gt;, i.e. it should be immutable&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; If a class’ purpose is to represent an external integration, you probably want numerous classes to compose the service: &lt;code&gt;RemoteDataClient&lt;/code&gt;, &lt;code&gt;DomainManager&lt;/code&gt;, &lt;code&gt;ContextManager&lt;/code&gt;, &lt;code&gt;Factory&lt;/code&gt;, &lt;code&gt;NotificationController&lt;/code&gt;, &lt;code&gt;DomainResponse&lt;/code&gt;, &lt;code&gt;DataFormatter&lt;/code&gt; and so on.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Async Python</title>
      <link>https://www.bencode.io/posts/pythonasync/</link>
      <pubDate>Wed, 09 Aug 2023 21:12:33 +1100</pubDate>
      <guid>https://www.bencode.io/posts/pythonasync/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;
&lt;p&gt;Using &lt;code&gt;asyncio&lt;/code&gt; will not make your code multi-threaded. That is, it will not cause multiple Python instructions to be executed at the same time, and it will not in any way allow you to side step the so-called “global interpreter lock” (GIL).&lt;/p&gt;
&lt;p&gt;Some processes are CPU-bound: they consist of a series of instructions which need to be executed one after another until the result has been computed. Most of their time is spent making heavy use of the processor.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Type Annotations</title>
      <link>https://www.bencode.io/posts/pythontypes/</link>
      <pubDate>Wed, 09 Aug 2023 20:44:33 +1100</pubDate>
      <guid>https://www.bencode.io/posts/pythontypes/</guid>
      <description>&lt;p&gt;Start with the &lt;a href=&#34;https://docs.python.org/3/library/typing.html&#34;&gt;docs&lt;/a&gt; and the &lt;a href=&#34;https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html&#34;&gt;Type hints cheat sheet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Topics for consideration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;syntax shorthands e.g. &lt;code&gt;|&lt;/code&gt; for Union or Optional&lt;/li&gt;
&lt;li&gt;Self&lt;/li&gt;
&lt;li&gt;If you are using the typing library then there is an abstract type class provided for asynchronous context managers AsyncContextManager[T], where T is the type of the object which will be bound by the as clause of the async with statement.&lt;/li&gt;
&lt;li&gt;mypy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are using typing then there is an abstract class &lt;code&gt;Awaitable&lt;/code&gt; which is generic, so that &lt;code&gt;Awaitable[R]&lt;/code&gt; for some type R means &lt;em&gt;anything which is awaitable, and when used in an await statement will return something of type R&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Standard Libraries</title>
      <link>https://www.bencode.io/posts/pythonstdlib/</link>
      <pubDate>Fri, 04 Aug 2023 18:01:33 +1100</pubDate>
      <guid>https://www.bencode.io/posts/pythonstdlib/</guid>
      <description>&lt;p&gt;An important part of becoming &amp;ldquo;good&amp;rdquo; at a language is becoming familiar with its library eco-system.&lt;/p&gt;
&lt;p&gt;The official &lt;a href=&#34;https://docs.python.org/3/library/index.html&#34;&gt;Python Standard Library&lt;/a&gt; reference manual rocks.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Module&lt;/th&gt;
          &lt;th&gt;Category&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;argparse&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for parsing command line arguments&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;atexit&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;allows you to register functions for your program to call when it exits&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;bisect&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;bisection algorithms for sorting lists (see Chapter 10)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;calendar&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;a number of date-related functions&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;codecs&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for encoding and decoding data&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;collections&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;a variety of useful data structures&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;concurrent&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;asynchronous computation&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;copy&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for copying data&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;csv&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for reading and writing CSV files&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;datetime&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;classes for handling dates and times&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;fileinput&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;file access&lt;/td&gt;
          &lt;td&gt;iterate over lines from multiple files or input streams&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;fnmatch&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for matching Unix-style filename patterns&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;glob&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for matching Unix-style path patterns&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;io&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for handling I/O streams and StringIO, which allows you to treat strings as files.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;json&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for reading and writing data in JSON format&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;logging&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;access to Python’s own built-in logging functionality&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;multiprocessing&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;allows you to run multiple subprocesses, while providing an API that makes them look like threads&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;operator&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions implementing the basic Python operators, instead of writing your own lambda expressions&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;os&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;swiss army knife&lt;/td&gt;
          &lt;td&gt;access to basic OS functions&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;pprint&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;data types&lt;/td&gt;
          &lt;td&gt;data pretty printer&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;random&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for generating pseudorandom numbers&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;re&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;regular expression functionality&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;sched&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;an event scheduler without using multithreading&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;select&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;access to the select() and poll() functions for creating event loops&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;shutil&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;file access&lt;/td&gt;
          &lt;td&gt;access to high-level file functions&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;signal&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;functions for handling POSIX signals&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tempfile&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;file access&lt;/td&gt;
          &lt;td&gt;functions for creating temporary files and directories&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;threading&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;access to high-level threading functionality&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;urllib&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;provides functions for handling and parsing URLs&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;uuid&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;allows you to generate Universally Unique Identifiers (UUIDs)&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</description>
    </item>
    <item>
      <title>Objects in Python</title>
      <link>https://www.bencode.io/posts/pythonobjects/</link>
      <pubDate>Thu, 03 Aug 2023 16:28:33 +1100</pubDate>
      <guid>https://www.bencode.io/posts/pythonobjects/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#special-methods-dunders&#34;&gt;Special methods (dunders)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#foundational&#34;&gt;Foundational&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#iterators&#34;&gt;Iterators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#compariable-classes&#34;&gt;Compariable classes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#serializable-classes&#34;&gt;Serializable classes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#classes-with-computed-attributes&#34;&gt;Classes with computed attributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#classes-that-are-callable&#34;&gt;Classes that are callable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#classes-that-act-like-sets&#34;&gt;Classes that act like sets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#classes-that-act-like-dictionaries&#34;&gt;Classes that act like dictionaries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#classes-that-act-like-numbers&#34;&gt;Classes that act like numbers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#classes-that-can-be-used-in-a-with-block&#34;&gt;Classes that can be used in a with block&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#esoteric-behavior&#34;&gt;Esoteric behavior&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#design-patterns&#34;&gt;Design Patterns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As I learn more about Pythons idioms reflect on its unique approach to object based programming. In combination with duck typing its approach to objects feels distrubingly flexible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing in Python</title>
      <link>https://www.bencode.io/posts/pythontesting/</link>
      <pubDate>Thu, 03 Aug 2023 16:28:33 +1100</pubDate>
      <guid>https://www.bencode.io/posts/pythontesting/</guid>
      <description>&lt;p&gt;There are many ways to write unit tests in Python.&lt;/p&gt;
&lt;h2 id=&#34;unittest&#34;&gt;unittest&lt;/h2&gt;
&lt;p&gt;Here the focus is living off the land with built-in &lt;a href=&#34;https://docs.python.org/3/library/unittest.html&#34;&gt;unittest&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;unittest&lt;/code&gt; is both a framework and test runner, meaning it can execute your tests and return the results. In order to write &lt;code&gt;unittest&lt;/code&gt; tests, you must:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Write your tests as methods within classes&lt;/li&gt;
&lt;li&gt;These &lt;code&gt;TestCase&lt;/code&gt; classes must subclass &lt;code&gt;unittest.TestCase&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Names of test functions must begin with &lt;code&gt;test_&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Import the code to be tested&lt;/li&gt;
&lt;li&gt;Use a series of built-in assertion methods&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;basic-example&#34;&gt;Basic example&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;unittest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;TestStringMethods&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unittest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TestCase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_upper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;foo&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;upper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;FOO&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_isupper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertTrue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;FOO&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isupper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertFalse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Foo&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isupper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hello world&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertEqual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;world&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# check that s.split fails when the separator is not a string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertRaises&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;TypeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;unittest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;assertions&#34;&gt;Assertions&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;TestCase&lt;/code&gt; class provides several assert methods to check for and report failures.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Digital Forensics</title>
      <link>https://www.bencode.io/posts/digitalforensics/</link>
      <pubDate>Sat, 22 Jul 2023 16:13:36 +1100</pubDate>
      <guid>https://www.bencode.io/posts/digitalforensics/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s semester 2 2023 and time for my final subject in the UNSW Cyber Security Masters course, &lt;a href=&#34;https://legacy.handbook.unsw.edu.au/postgraduate/courses/2018/ZEIT8028.html&#34;&gt;digtital forensics&lt;/a&gt; run by &lt;a href=&#34;seth.enoka@adfa.edu.au&#34;&gt;Seth Enoka&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I got to venture deep into Windows internals, including core Windows memory structures, subsystems such as prefetch and shimcache, NTFS file system internals and mechanicsm including MFT analysis and much more. All this analysis was conducting using the following Linux analysis tools:&lt;/p&gt;
&lt;h2 id=&#34;tools&#34;&gt;Tools&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Tools&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Yara&lt;/td&gt;
          &lt;td&gt;A pattern-matching tool used in malware research and forensic analysis to identify and classify files based on defined rules and signatures.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Volatility 2 &amp;amp; 3&lt;/td&gt;
          &lt;td&gt;Open-source memory forensics frameworks used to extract and analyze digital artifacts from volatile memory (RAM) in a memory dump to investigate cyber incidents and malware.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Volatility USNParser Plugin&lt;/td&gt;
          &lt;td&gt;A Volatility plugin specifically designed to parse and extract information from the USN journal on Windows systems, aiding in file activity analysis.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SCCA Tools&lt;/td&gt;
          &lt;td&gt;SCCA (Source Code Control System Analysis) Tools assist in examining version control system repositories to identify code changes, contributors, and track project history.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ESEDB Tools&lt;/td&gt;
          &lt;td&gt;These tools provide access to Extensible Storage Engine (ESE) Database files, commonly used in Windows applications, for analysis and recovery purposes.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;analyzeMFT&lt;/td&gt;
          &lt;td&gt;A tool used in digital forensics to parse and analyze the Master File Table (MFT) entries from NTFS filesystems, revealing information about files and directories.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Oletools&lt;/td&gt;
          &lt;td&gt;A collection of Python-based tools for analyzing and extracting data from OLE (Object Linking and Embedding) files, such as Microsoft Office documents, often used in malware analysis.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Wireshark&lt;/td&gt;
          &lt;td&gt;A widely-used network protocol analyzer that captures and inspects data packets on a network, helping with network troubleshooting, security analysis, and protocol reverse engineering.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;The Sleuth Kit (TSK)&lt;/td&gt;
          &lt;td&gt;An open-source digital forensic toolkit that includes various CLI tools (&lt;code&gt;mmls&lt;/code&gt;, &lt;code&gt;fls&lt;/code&gt;, &lt;code&gt;icat&lt;/code&gt;) for file system analysis and data recovery from different operating systems.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Plaso&lt;/td&gt;
          &lt;td&gt;An open-source Python-based tool used for super timeline creation and log analysis, helping to reconstruct events and activities from various data sources for forensic investigations.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Advanced Forensics Format Library (afflib) Tools&lt;/td&gt;
          &lt;td&gt;Tools for working with the Advanced Forensics Format (AFF), an extensible open file format used in computer forensics to store disk images and related metadata.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;wxHexEditor&lt;/td&gt;
          &lt;td&gt;A hexadecimal editor with a graphical user interface, used for low-level data inspection and editing in forensic analysis and reverse engineering.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Gnumeric&lt;/td&gt;
          &lt;td&gt;A spreadsheet application, similar to Microsoft Excel, used for data analysis and visualization, including data manipulation and statistical functions.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Personal Folder File Tools (pfftools)&lt;/td&gt;
          &lt;td&gt;Tools designed to work with Personal Folder File (PFF) formats, commonly used by Microsoft Outlook to store emails, calendars, and other personal data. These tools aid in email forensics and analysis.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;resources&#34;&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows shellbags&lt;/li&gt;
&lt;li&gt;8 timestamps on an NTFS file system, an attacker can fairly easily mutate 4 of them, hard to convincingly adjust nano-second level&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;&#34;&gt;Eric Zimmermans Windows Forensics Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sans.org/posters/hunt-evil/&#34;&gt;SANS Hunt Evil Poster&lt;/a&gt; Knowing what’s normal on a Windows host helps cut through the noise to quickly locate potential malware. Use this information as a reference to know what’s normal in Windows and to focus your attention on the outliers.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://attack.mitre.org/matrices/enterprise/&#34;&gt;MITRE ATT&amp;amp;CK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://attack.mitre.org/matrices/ics/&#34;&gt;MITRE ATT&amp;amp;CK for ICS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.lockheedmartin.com/en-us/capabilities/cyber/cyber-kill-chain.html&#34;&gt;Cyber Kill Chain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sans.org/white-papers/36297/&#34;&gt;Industrial Cyber Kill Chain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Locard%27s_exchange_principle&#34;&gt;Locard&amp;rsquo;s Exchange Principle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-86.pdf&#34;&gt;NIST Guide to Forensics in Incident Response&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dragos.com/threat-groups/&#34;&gt;Dragos Threat Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://adversary.crowdstrike.com/en-US/&#34;&gt;Crowdstrike Adversary Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dragos.com/resource/the-diamond-model-an-analysts-best-friend/&#34;&gt;Diamond Model for Intrusion Analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dragos.com/wp-content/uploads/The_Four_Types-of_Threat_Detection.pdf&#34;&gt;The Four Types of Threat Detection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://downloads.volatilityfoundation.org/releases/2.4/CheatSheet_v2.4.pdf&#34;&gt;Volatility v2.4 cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;module-0---intro&#34;&gt;Module 0 - Intro&lt;/h2&gt;
&lt;p&gt;Locards Principle (Edmond Locard aka Sherlock Holmes of France)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 3.11</title>
      <link>https://www.bencode.io/posts/python/</link>
      <pubDate>Mon, 17 Jul 2023 21:07:33 +1100</pubDate>
      <guid>https://www.bencode.io/posts/python/</guid>
      <description>&lt;p&gt;Cool new features in 3.11.&lt;/p&gt;
&lt;h2 id=&#34;performance&#34;&gt;Performance&lt;/h2&gt;
&lt;p&gt;1.2x faster generally, thanks to an adaptive interpreter (PEP659) that optimises byte-code based on observed behaviour and usage.&lt;/p&gt;
&lt;p&gt;Take for example the &lt;code&gt;LOAD_ATTR&lt;/code&gt; instruction, which under 3.11 can be replaced by &lt;code&gt;LOAD_ATTR_ADAPTIVE&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This will replace the call to the most optimised instruction based on what is being done, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LOAD_ATTR_INSTANCE_VALUE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LOAD_ATTR_MODULE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LOAD_ATTR_SLOT&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Disassembling some code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;feet_to_meters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.3048&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feet&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;10.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;100.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1000.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;2000.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3000.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;4000.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feet&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;7.1f&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; feet = &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feet_to_meters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;7.1f&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; meters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;dis&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;dis&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feet_to_meters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;adaptive&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  1           0 RESUME                   0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  2           2 LOAD_CONST               1 (0.3048)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#              4 LOAD_FAST                0 (feet)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#              6 BINARY_OP                5 (*)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#             10 RETURN_VALUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;However, when the interpreter is given more concrete to work with its able to optimise. For example, outside the loop context when given a float, floating point instructions are put to work:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Information Assurance</title>
      <link>https://www.bencode.io/posts/infoassurance/</link>
      <pubDate>Sat, 04 Mar 2023 13:22:36 +1100</pubDate>
      <guid>https://www.bencode.io/posts/infoassurance/</guid>
      <description>&lt;p&gt;Kicking off the 2023 University year I continue my journey into the Cybersecurity Masters program with unit &lt;a href=&#34;https://legacy.handbook.unsw.edu.au/postgraduate/courses/2018/ZEIT8021.html&#34;&gt;Infomation Assurance and Security&lt;/a&gt; run by &lt;a href=&#34;m.mcgarity@adfa.edu.au&#34;&gt;Michael McGarity&lt;/a&gt; and &lt;a href=&#34;huadong.mo@adfa.edu.au&#34;&gt;Huadong Mo&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Provides students with a deep understanding of the technical, management and organisational aspects of Information Assurance within a holistic legal and social framework.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The course is essentially modelled off the &lt;a href=&#34;https://www.isc2.org/Certifications/CISSP#&#34;&gt;CISSP certification&lt;/a&gt;, which dives into the following subjects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;make a realistic assessment of the needs for information security in an organisation&lt;/li&gt;
&lt;li&gt;discuss the implications of security decisions on the organisation&amp;rsquo;s information systems&lt;/li&gt;
&lt;li&gt;understand the principles of writing secure code&lt;/li&gt;
&lt;li&gt;show an understanding of database and network security issues&lt;/li&gt;
&lt;li&gt;demonstrate an understanding of encryption techniques&lt;/li&gt;
&lt;li&gt;understand foundations of the tools and techniques in computer forensics&lt;/li&gt;
&lt;li&gt;show an appreciation of the commercial, legal and social context in which IT security is implemented&lt;/li&gt;
&lt;li&gt;apply knowledge gained to business and technical IA scenarios&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;
&lt;p&gt;Not a one size fits all approach. Too many factors and seemingling chaotic variables, such as risk appetites, country legislation, the business vertical (mining vs banking vs government), acceditation frameworks that apply to certain industries, tolerances, technology limitations, and so on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vue</title>
      <link>https://www.bencode.io/posts/vue/</link>
      <pubDate>Thu, 02 Mar 2023 20:45:36 +1100</pubDate>
      <guid>https://www.bencode.io/posts/vue/</guid>
      <description>&lt;p&gt;A bunch of (scattered) tips and resources as I experiment with Vue.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basics: &lt;a href=&#34;#general-wisdom&#34;&gt;&lt;code&gt;General wisdom&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#anatomy&#34;&gt;&lt;code&gt;Anatomy&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#events&#34;&gt;&lt;code&gt;Eventhandling&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#watchers&#34;&gt;&lt;code&gt;Watchers&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#computed&#34;&gt;&lt;code&gt;Computed props&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Components: &lt;a href=&#34;#components&#34;&gt;&lt;code&gt;Components&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#props&#34;&gt;&lt;code&gt;Props&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#lifecycle-hooks&#34;&gt;&lt;code&gt;Lifecycle hooks&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#emitting-events&#34;&gt;&lt;code&gt;Emitting events&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#slots&#34;&gt;&lt;code&gt;Slots&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fetching Data: &lt;a href=&#34;#fetching-data&#34;&gt;&lt;code&gt;Calling APIs in hooks&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#unique-identifiers&#34;&gt;&lt;code&gt;Unique identifiers&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Styling Components: &lt;a href=&#34;#styling&#34;&gt;&lt;code&gt;Global vs scoped styles&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#css-modules&#34;&gt;&lt;code&gt;CSS modules&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#css-v-bind&#34;&gt;&lt;code&gt;CSS v-bind&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Composition API: &lt;a href=&#34;#composition-api&#34;&gt;&lt;code&gt;Composition API&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#reactive-refs&#34;&gt;&lt;code&gt;Reactive references&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#script-setup&#34;&gt;&lt;code&gt;script setup&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#composables&#34;&gt;&lt;code&gt;Composables&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Routing and Deployment: &lt;a href=&#34;#vue-router&#34;&gt;&lt;code&gt;Vue Router&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#history&#34;&gt;&lt;code&gt;History&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#dynamic-routes&#34;&gt;&lt;code&gt;Dynamic routes&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#deployment&#34;&gt;&lt;code&gt;Deployment&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Advanced: &lt;a href=&#34;#preprocessors&#34;&gt;&lt;code&gt;Pre-processors&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#pinia-state-management&#34;&gt;&lt;code&gt;Pinia State Management&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;What is Vue?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;an open-source model–view–viewmodel front end JavaScript framework for building user interfaces and single-page applications, created by Evan You&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Helpful resouces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://vuejs.org/guide/quick-start.html#using-vue-from-cdn&#34;&gt;Read the offical docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://vuejs.org/examples/#hello-world&#34;&gt;Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://boussadjra.github.io/vue-cheat-sheet/guide/&#34;&gt;Vue cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/vuejs/awesome-vue&#34;&gt;Awesome Vue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd?hl=en&#34;&gt;Vue.js devtools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=Vue.volar&#34;&gt;Volar VSCode extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://vuejs.org/api/built-in-directives.html&#34;&gt;Built-in Directives&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;general-wisdom&#34;&gt;General wisdom&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s best to stick to conventions of the web and use &lt;code&gt;camelCase&lt;/code&gt; in your script and &lt;code&gt;kebab-case&lt;/code&gt; in your template&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t pass functions as &lt;code&gt;props&lt;/code&gt;, instead &lt;code&gt;emit&lt;/code&gt; events&lt;/li&gt;
&lt;li&gt;&lt;code&gt;props&lt;/code&gt; couples components to each other, for broad or deep cross cutting state, level up to state management&lt;/li&gt;
&lt;li&gt;Test data sources: &lt;a href=&#34;https://jsonplaceholder.typicode.com/&#34;&gt;JSON Placeholder&lt;/a&gt; &lt;a href=&#34;https://pokeapi.co/&#34;&gt;PokeAPI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;anatomy&#34;&gt;Anatomy&lt;/h2&gt;
&lt;p&gt;Here is a bare bones vue app. There are literally 3 blocks for &lt;code&gt;script&lt;/code&gt;, &lt;code&gt;template&lt;/code&gt; (markup) and &lt;code&gt;style&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kinesis 360 Pro keyboard</title>
      <link>https://www.bencode.io/posts/kinesis/</link>
      <pubDate>Sun, 26 Feb 2023 14:44:36 +1100</pubDate>
      <guid>https://www.bencode.io/posts/kinesis/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Kinesis is a company based near Seattle that offers computer keyboards with ergonomic designs as alternatives to the traditional keyboard design. Most widely known among these are the contoured Advantage line, which features recessed keys in two bucket-like hollows to allow the user&amp;rsquo;s fingers to reach keys with less effort&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The Advantage 360 line was released in 2022 and is still insanely popular and challenging to get hold of. The pro edition allows you to customise the firmware, which is ZMK based. Kinesis have outsourced the actual job of compiling the firmware to GitHub Actions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Books</title>
      <link>https://www.bencode.io/posts/books/</link>
      <pubDate>Fri, 27 Jan 2023 20:42:36 +1100</pubDate>
      <guid>https://www.bencode.io/posts/books/</guid>
      <description>&lt;h2 id=&#34;2023&#34;&gt;2023&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;To Kill a Mockingbird by &lt;strong&gt;Lee, Harper&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Own the Day, Own Your Life: Optimised practices for waking, working, learning, eating, training, playing, sleeping and sex by &lt;strong&gt;Marcus, Aubrey&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2022&#34;&gt;2022&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The Dream Machine by &lt;strong&gt;Waldrop, M. Mitchell&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Absolute FreeBSD by &lt;strong&gt;Lucas, Michael W.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Deep Work: Rules for Focused Success in a Distracted World by &lt;strong&gt;Newport, Cal&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2021&#34;&gt;2021&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Revolution in The Valley: The Insanely Great Story of How the Mac Was Made by &lt;strong&gt;Hertzfeld, Andy&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Kingpin: How One Hacker Took Over the Billion-Dollar Cybercrime Underground by &lt;strong&gt;Poulsen, Kevin&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The New New Thing: A Silicon Valley Story by &lt;strong&gt;Lewis, Michael&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Ghost in the Wires: My Adventures as the World&amp;rsquo;s Most Wanted Hacker by &lt;strong&gt;Mitnick, Kevin D.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Bonhoeffer: Pastor, Martyr, Prophet, Spy by &lt;strong&gt;Metaxas, Eric *&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;1984 by &lt;strong&gt;Orwell, George&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Atomic Habits: An Easy and Proven Way to Build Good Habits and Break Bad Ones by &lt;strong&gt;Clear, James *&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Vagabonding: An Uncommon Guide to the Art of Long-Term World Travel by &lt;strong&gt;Potts, Rolf&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;American Kingpin: The Epic Hunt for the Criminal Mastermind behind the Silk Road Drugs Empire by &lt;strong&gt;Bilton, Nick *&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The God Delusion by &lt;strong&gt;Dawkins, Richard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2020&#34;&gt;2020&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Into the Wild (Ebook) by &lt;strong&gt;Krakauer, Jon *&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The Last Wish (The Witcher, #0.5) by &lt;strong&gt;Sapkowski, Andrzej&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Do Androids Dream of Electric Sheep? by &lt;strong&gt;Dick, Philip K.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Alan Turing: The Enigma by &lt;strong&gt;Hodges, Andrew&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2019&#34;&gt;2019&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Harry Potter and the Philosopher&amp;rsquo;s Stone (Harry Potter, #1) by &lt;strong&gt;Rowling, J.K.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Ultralight Backpackin&amp;rsquo; Tips: 153 Amazing &amp;amp; Inexpensive Tips for Extremely Lightweight Camping by &lt;strong&gt;Clelland, Mike *&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Turn The Ship Around! by &lt;strong&gt;Marquet, L. David&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2018&#34;&gt;2018&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Microserfs by &lt;strong&gt;Coupland, Douglas *&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Autobiography: The Story of My Experiments with Truth by &lt;strong&gt;Gandhi, Mahatma&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Influence: The Psychology of Persuasion by &lt;strong&gt;Cialdini, Robert B. *&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The Mythical Man-Month: Essays on Software Engineering by &lt;strong&gt;Brooks Jr., Frederick P.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2017&#34;&gt;2017&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The Cuckoo&amp;rsquo;s Egg: Tracking a Spy Through the Maze of Computer Espionage by &lt;strong&gt;Stoll, Clifford&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Savaged by Systemd: an Erotic Unix Encounter by &lt;strong&gt;Lucas, Michael Warren&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Kinetic workouts</title>
      <link>https://www.bencode.io/posts/workouts/</link>
      <pubDate>Tue, 27 Dec 2022 19:55:30 +1100</pubDate>
      <guid>https://www.bencode.io/posts/workouts/</guid>
      <description>&lt;p&gt;Categorises the gym workout by these kinetic systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Power (3 mins)&lt;/li&gt;
&lt;li&gt;Strength (5 mins)&lt;/li&gt;
&lt;li&gt;Endurance (8 mins)&lt;/li&gt;
&lt;li&gt;Cardio (10 mins)&lt;/li&gt;
&lt;li&gt;Durability (15 mins)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every 50 minute workout includes each of them. This is really just a catalogue of kettlebell and/or body weight exercises.&lt;/p&gt;
&lt;h2 id=&#34;basic-program-1&#34;&gt;Basic program 1&lt;/h2&gt;
&lt;p&gt;Cardio (10 mins) of choice run, bike, row, stair mill, jump jop&lt;/p&gt;
&lt;p&gt;Mobility (10 mins) circuit of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=ITSmgn_BQgY&#34;&gt;Kettlebell windmills&lt;/a&gt; (5 reps each side)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=wJcmanVh5EE&#34;&gt;Kettlebell halos&lt;/a&gt; (5 reps each side) variation options include lunges or squats&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Power (3 mins) &lt;a href=&#34;https://www.youtube.com/watch?v=jnjz305tOYw&#34;&gt;Kettlebell sumo squat&lt;/a&gt; 6 sets of 10 secs on, 20 secs rest&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python quick reference</title>
      <link>https://www.bencode.io/posts/python/</link>
      <pubDate>Sun, 05 Jun 2022 13:57:33 +1100</pubDate>
      <guid>https://www.bencode.io/posts/python/</guid>
      <description>&lt;p&gt;Forked from &lt;a href=&#34;https://gist.github.com/101t/55012e46fc5746d074d7bf5de00acf2f&#34;&gt;101t/python-cheatsheet.md&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;rtfm&#34;&gt;RTFM&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.python.org/3/library/index.html&#34;&gt;The Python Standard Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.python.org/3/library/functions.html#repr&#34;&gt;Built-in Functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://peps.python.org/&#34;&gt;Python Enhancement Propsoals (PEPs)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://peps.python.org/pep-0020/&#34;&gt;The Zen of Python&lt;/a&gt; never far away in the REPL &lt;code&gt;import this&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;contents&#34;&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Getting started: &lt;a href=&#34;#cpython&#34;&gt;&lt;code&gt;CPython&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#easter-eggs&#34;&gt;&lt;code&gt;Easter eggs&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#import-paths&#34;&gt;&lt;code&gt;Import paths&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#venv&#34;&gt;&lt;code&gt;venv&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Collections: &lt;a href=&#34;#list&#34;&gt;&lt;code&gt;List&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#dictionary&#34;&gt;&lt;code&gt;Dictionary&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#set&#34;&gt;&lt;code&gt;Set&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#tuple&#34;&gt;&lt;code&gt;Tuple&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#range&#34;&gt;&lt;code&gt;Range&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#enumerate&#34;&gt;&lt;code&gt;Enumerate&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#iterator&#34;&gt;&lt;code&gt;Iterator&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#generator&#34;&gt;&lt;code&gt;Generator&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Functions: &lt;a href=&#34;#functions&#34;&gt;&lt;code&gt;Functions&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#modules&#34;&gt;&lt;code&gt;Modules&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Types: &lt;a href=&#34;#type&#34;&gt;&lt;code&gt;Type&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#string&#34;&gt;&lt;code&gt;String&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#regex&#34;&gt;&lt;code&gt;Regular_Exp&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#format&#34;&gt;&lt;code&gt;Format&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#numbers&#34;&gt;&lt;code&gt;Numbers&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#combinatorics&#34;&gt;&lt;code&gt;Combinatorics&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#datetime&#34;&gt;&lt;code&gt;Datetime&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Syntax: &lt;a href=&#34;#arguments&#34;&gt;&lt;code&gt;Args&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#splat&#34;&gt;&lt;code&gt;Splat&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#inline&#34;&gt;&lt;code&gt;Inline&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#closure&#34;&gt;&lt;code&gt;Closure&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#decorator&#34;&gt;&lt;code&gt;Decorator&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#class&#34;&gt;&lt;code&gt;Class&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#duck-types&#34;&gt;&lt;code&gt;Duck_Type&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#enum&#34;&gt;&lt;code&gt;Enum&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#exceptions&#34;&gt;&lt;code&gt;Exception&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;System: &lt;a href=&#34;#exit&#34;&gt;&lt;code&gt;Exit&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#print&#34;&gt;&lt;code&gt;Print&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#input&#34;&gt;&lt;code&gt;Input&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#command-line-arguments&#34;&gt;&lt;code&gt;Command_Line_Arguments&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#open&#34;&gt;&lt;code&gt;Open&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#path&#34;&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#oscommands&#34;&gt;&lt;code&gt;OS_Commands&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Data: &lt;a href=&#34;#json&#34;&gt;&lt;code&gt;JSON&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#pickle&#34;&gt;&lt;code&gt;Pickle&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#csv&#34;&gt;&lt;code&gt;CSV&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#sqlite&#34;&gt;&lt;code&gt;SQLite&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#bytes&#34;&gt;&lt;code&gt;Bytes&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#struct&#34;&gt;&lt;code&gt;Struct&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#array&#34;&gt;&lt;code&gt;Array&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#memory-view&#34;&gt;&lt;code&gt;Memory_View&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#deque&#34;&gt;&lt;code&gt;Deque&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Advanced: &lt;a href=&#34;#threading&#34;&gt;&lt;code&gt;Threading&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#operator&#34;&gt;&lt;code&gt;Operator&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#introspection&#34;&gt;&lt;code&gt;Introspection&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#metaprograming&#34;&gt;&lt;code&gt;Metaprograming&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#eval&#34;&gt;&lt;code&gt;Eval&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#coroutines&#34;&gt;&lt;code&gt;Coroutines&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Libraries: &lt;a href=&#34;#progress-bar&#34;&gt;&lt;code&gt;Progress_Bar&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#plot&#34;&gt;&lt;code&gt;Plot&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#table&#34;&gt;&lt;code&gt;Table&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#curses&#34;&gt;&lt;code&gt;Curses&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#logging&#34;&gt;&lt;code&gt;Logging&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#scraping&#34;&gt;&lt;code&gt;Scraping&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#web&#34;&gt;&lt;code&gt;Web&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#profiling&#34;&gt;&lt;code&gt;Profile&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#numpy&#34;&gt;&lt;code&gt;NumPy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Packaging and Tools: &lt;a href=&#34;#real-app&#34;&gt;&lt;code&gt;Real app&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#bytecode-disassembler&#34;&gt;&lt;code&gt;Bytecode disassembler&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#poetry&#34;&gt;&lt;code&gt;Poetry&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#gems&#34;&gt;&lt;code&gt;Gems&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;#resources&#34;&gt;&lt;code&gt;Resources&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cpython&#34;&gt;CPython&lt;/h2&gt;
&lt;p&gt;Most distros lag behind the latest releases of python. Its quite a pleasant experience to just build CPython from source, as per &lt;a href=&#34;https://devguide.python.org/getting-started/setup-building/#linux&#34;&gt;the docs&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install build-essential gdb lcov pkg-config &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      lzma lzma-dev tk-dev uuid-dev zlib1g-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo python3 -m pip install --upgrade pip setuptools wheel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;easter-eggs&#34;&gt;Easter eggs&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import this
import antigravity
from __future__ import braces
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;import-paths&#34;&gt;Import paths&lt;/h2&gt;
&lt;p&gt;When importing modules, Python relies on a list of paths to know where to look for the module. This list is stored in the &lt;code&gt;sys.path&lt;/code&gt; variable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PowerShell cheat sheet</title>
      <link>https://www.bencode.io/posts/powershell/</link>
      <pubDate>Sun, 08 May 2022 16:35:04 +1100</pubDate>
      <guid>https://www.bencode.io/posts/powershell/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#help-and-context&#34;&gt;Help and context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#execution-policy&#34;&gt;Execution policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#operators&#34;&gt;Operators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#regex&#34;&gt;Regex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#flow-control&#34;&gt;Flow Control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#variables&#34;&gt;Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#functions&#34;&gt;Functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#modules&#34;&gt;Modules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#module-management&#34;&gt;Module Management&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#good-modules-to-run&#34;&gt;Good modules to run&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#filesystem&#34;&gt;Filesystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hashtables-dictionary&#34;&gt;Hashtables (Dictionary)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#windows-management-instrumentation-wmi&#34;&gt;Windows Management Instrumentation (WMI)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#async&#34;&gt;Async&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#filesystem-events&#34;&gt;Filesystem events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#timers&#34;&gt;Timers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#powershell-drives&#34;&gt;PowerShell drives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#data-crud-management&#34;&gt;Data (CRUD) management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#damn-handy&#34;&gt;Damn handy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A work in progress.&lt;/p&gt;
&lt;p&gt;Credits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gitlab.com/JamesHedges/notes/-/wikis/Powershell/PowerShell-Cheat-Sheet&#34;&gt;https://gitlab.com/JamesHedges/notes/-/wikis/Powershell/PowerShell-Cheat-Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gist.github.com/pcgeek86/336e08d1a09e3dd1a8f0a30a9fe61c8a&#34;&gt;https://gist.github.com/pcgeek86/336e08d1a09e3dd1a8f0a30a9fe61c8a&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;help-and-context&#34;&gt;Help and context&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$PSVersionTable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;PSVersion&lt;/span&gt;         &lt;span class=&#34;c&#34;&gt;# what version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-Command&lt;/span&gt;                       &lt;span class=&#34;c&#34;&gt;# list commands available&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-Command&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Microsoft&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;*&lt;/span&gt;    &lt;span class=&#34;c&#34;&gt;# list commands exported from modules named Microsoft*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-Command&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;           &lt;span class=&#34;c&#34;&gt;# wildcard search commands&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-Help&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-Help&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Name&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;about_Variables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-Help&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Name&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Get-Command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-Help&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Name&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Get-Command&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Parameter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Module&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;execution-policy&#34;&gt;Execution policy&lt;/h2&gt;
&lt;p&gt;Levels = {Restricted,Remote Signed,All Signed,Unrestricted}&lt;/p&gt;</description>
    </item>
    <item>
      <title>A tour of FreeBSD in 2022</title>
      <link>https://www.bencode.io/posts/bsd/</link>
      <pubDate>Sun, 17 Apr 2022 16:18:25 +1100</pubDate>
      <guid>https://www.bencode.io/posts/bsd/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#why&#34;&gt;Why&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#handy-resources&#34;&gt;Handy resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#talks&#34;&gt;Talks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#factoids&#34;&gt;Factoids&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#things-that-feel-different&#34;&gt;Things that feel different&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#software-management-and-ports&#34;&gt;Software management and ports&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#ports-patching&#34;&gt;Ports patching&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#init-system&#34;&gt;init system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#coreutils&#34;&gt;coreutils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#scheduling&#34;&gt;Scheduling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#block-devices&#34;&gt;Block devices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#my-setup&#34;&gt;My setup&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#nfs&#34;&gt;NFS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#xorg&#34;&gt;xorg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dwm&#34;&gt;dwm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#st&#34;&gt;st&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#powerd&#34;&gt;powerd++&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ntp&#34;&gt;ntp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#fonts&#34;&gt;fonts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;why&#34;&gt;Why&lt;/h2&gt;
&lt;p&gt;Mostly curiosity. I&amp;rsquo;ve been a GNU/Linux and free software enthuiatist since the late 90&amp;rsquo;s and that&amp;rsquo;s not about to change. More concrete reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GNU/Linux won the war. However&amp;hellip;&lt;/li&gt;
&lt;li&gt;The Berkeley Software Distributions are family of open UNIX-like operating systems with lineage back to AT&amp;amp;T UNIX&lt;/li&gt;
&lt;li&gt;They come as complete and cohesive systems, not a distribution of disparate pieces&lt;/li&gt;
&lt;li&gt;The BSD license is wonderfully permissive&lt;/li&gt;
&lt;li&gt;Bill Joy (the father of Sun, BSD, &lt;code&gt;vi&lt;/code&gt;, RISC)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.mckusick.com/courses/&#34;&gt;Marshall Kirk McKusick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ZFS, DTrace and Clang&lt;/li&gt;
&lt;li&gt;It feels so damn neat, tidy and robust&lt;/li&gt;
&lt;li&gt;It wont be my daily driver, however it&amp;rsquo;s nice to be aware of what &lt;em&gt;{Free,Open,Net}BSD&lt;/em&gt; each bring to the table&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;handy-resources&#34;&gt;Handy resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.freebsd.org/en/books/handbook/basics/&#34;&gt;FreeBSD Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.freebsd.org/en/books/porters-handbook&#34;&gt;FreeBSD Porters Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.freebsd.org&#34;&gt;FreeBSD Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.freshports.org/&#34;&gt;Freshports&lt;/a&gt; the place for ports and most recent commits&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bsd-hardware.info/?view=computers&amp;amp;type=Notebook&amp;amp;vendor=Lenovo&amp;amp;model=ThinkPad+X260+%28All%29&#34;&gt;bsd-hardware.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://papers.freebsd.org/&#34;&gt;papers.freebsd.org&lt;/a&gt; the collected works of the FreeBSD community as presented at various conferences and summits&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;talks&#34;&gt;Talks&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://papers.freebsd.org/2018/eurobsdcon/allanjude-bootenv_at_scale/&#34;&gt;Using boot environments at scale - by Allan Jude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Hjpqa_kjCOI&#34;&gt;The ZFS Filesystem workshop - by Philip Paeps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;factoids&#34;&gt;Factoids&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The term daemon comes from Greek mythology and represents an entity that is neither good nor evil, and which invisibly performs useful tasks. This is why the BSD mascot is the cheerful-looking daemon with sneakers and a pitchfork.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;things-that-feel-different&#34;&gt;Things that feel different&lt;/h2&gt;
&lt;p&gt;My Linux biases are deep rooted. It&amp;rsquo;s so fascinating to learn how the BSD&amp;rsquo;s have gone about things differently.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Conscience of a Hacker (1986)</title>
      <link>https://www.bencode.io/posts/hackermanifesto/</link>
      <pubDate>Wed, 13 Apr 2022 17:24:04 +1100</pubDate>
      <guid>https://www.bencode.io/posts/hackermanifesto/</guid>
      <description>&lt;p&gt;This is an amazing piece of hacker folklore was created on January 8, 1986 by &lt;em&gt;The Mentor&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&#34;http://phrack.org/issues/7/3.html&#34;&gt;http://phrack.org/issues/7/3.html&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
The following was written shortly after my arrest...

                       \/\The Conscience of a Hacker/\/

                                      by

                               +++The Mentor+++

                          Written on January 8, 1986
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

        Another one got caught today, it&amp;#39;s all over the papers.  &amp;#34;Teenager
Arrested in Computer Crime Scandal&amp;#34;, &amp;#34;Hacker Arrested after Bank Tampering&amp;#34;...
        Damn kids.  They&amp;#39;re all alike.

        But did you, in your three-piece psychology and 1950&amp;#39;s technobrain,
ever take a look behind the eyes of the hacker?  Did you ever wonder what
made him tick, what forces shaped him, what may have molded him?
        I am a hacker, enter my world...
        Mine is a world that begins with school... I&amp;#39;m smarter than most of
the other kids, this crap they teach us bores me...
        Damn underachiever.  They&amp;#39;re all alike.

        I&amp;#39;m in junior high or high school.  I&amp;#39;ve listened to teachers explain
for the fifteenth time how to reduce a fraction.  I understand it.  &amp;#34;No, Ms.
Smith, I didn&amp;#39;t show my work.  I did it in my head...&amp;#34;
        Damn kid.  Probably copied it.  They&amp;#39;re all alike.

        I made a discovery today.  I found a computer.  Wait a second, this is
cool.  It does what I want it to.  If it makes a mistake, it&amp;#39;s because I
screwed it up.  Not because it doesn&amp;#39;t like me...
                Or feels threatened by me...
                Or thinks I&amp;#39;m a smart ass...
                Or doesn&amp;#39;t like teaching and shouldn&amp;#39;t be here...
        Damn kid.  All he does is play games.  They&amp;#39;re all alike.

        And then it happened... a door opened to a world... rushing through
the phone line like heroin through an addict&amp;#39;s veins, an electronic pulse is
sent out, a refuge from the day-to-day incompetencies is sought... a board is
found.
        &amp;#34;This is it... this is where I belong...&amp;#34;
        I know everyone here... even if I&amp;#39;ve never met them, never talked to
them, may never hear from them again... I know you all...
        Damn kid.  Tying up the phone line again.  They&amp;#39;re all alike...

        You bet your ass we&amp;#39;re all alike... we&amp;#39;ve been spoon-fed baby food at
school when we hungered for steak... the bits of meat that you did let slip
through were pre-chewed and tasteless.  We&amp;#39;ve been dominated by sadists, or
ignored by the apathetic.  The few that had something to teach found us will-
ing pupils, but those few are like drops of water in the desert.

        This is our world now... the world of the electron and the switch, the
beauty of the baud.  We make use of a service already existing without paying
for what could be dirt-cheap if it wasn&amp;#39;t run by profiteering gluttons, and
you call us criminals.  We explore... and you call us criminals.  We seek
after knowledge... and you call us criminals.  We exist without skin color,
without nationality, without religious bias... and you call us criminals.
You build atomic bombs, you wage wars, you murder, cheat, and lie to us
and try to make us believe it&amp;#39;s for our own good, yet we&amp;#39;re the criminals.

        Yes, I am a criminal.  My crime is that of curiosity.  My crime is
that of judging people by what they say and think, not what they look like.
My crime is that of outsmarting you, something that you will never forgive me
for.

        I am a hacker, and this is my manifesto.  You may stop this individual,
but you can&amp;#39;t stop us all... after all, we&amp;#39;re all alike.

                               +++The Mentor+++
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Talks that changed The way I think about programming</title>
      <link>https://www.bencode.io/posts/hackertalks/</link>
      <pubDate>Mon, 14 Mar 2022 16:34:20 +1100</pubDate>
      <guid>https://www.bencode.io/posts/hackertalks/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.opowell.com/&#34;&gt;Oliver Powell&lt;/a&gt; put &lt;a href=&#34;http://www.opowell.com/post/talks-that-changed-the-way-i-think-about-programming/&#34;&gt;this amazing original list&lt;/a&gt; together in 2016. While I didn&amp;rsquo;t appreciate the gravity of the list at the time, the talks have actually changed how I think about programming. Each of the presenters is not only incredibly intelligent but they have some serious credentials and achievements behind them. They in essence have much wisdom to impart. For example Rich Hickey, the creator of Closure, is brilliantly articulate and thought provoking.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cyber Defence Operations</title>
      <link>https://www.bencode.io/posts/blueteam/</link>
      <pubDate>Fri, 04 Mar 2022 17:41:11 +1100</pubDate>
      <guid>https://www.bencode.io/posts/blueteam/</guid>
      <description>&lt;p&gt;Semester 1 2022 has snuck up on me again. This semester as part of the UNSW and ADFA run &lt;a href=&#34;https://www.unsw.adfa.edu.au/study/postgraduate-coursework/master-cyber-security&#34;&gt;Master of Cyber Security&lt;/a&gt; degree, I&amp;rsquo;m taking the &lt;a href=&#34;https://en.wikipedia.org/wiki/Blue_team_%28computer_security%29&#34;&gt;blue team&lt;/a&gt; core unit &lt;em&gt;ZEIT8026 Cyber Defence - Network Security Operations (SecOps)&lt;/em&gt; lectured by &lt;a href=&#34;https://www.linkedin.com/in/dr-waqas-haider-6a47b91b/&#34;&gt;Dr Waqas Haider&lt;/a&gt; and &lt;a href=&#34;https://www.linkedin.com/in/dr-nour-moustafa-0a7a7859/&#34;&gt;Dr Nour Moustafa&lt;/a&gt;. Unlike its sister &lt;a href=&#34;https://en.wikipedia.org/wiki/Red_team&#34;&gt;red team&lt;/a&gt; unit &lt;em&gt;ZEIT8020 Cyber Offense - Cyber Network Operations (CNO)&lt;/em&gt; which I took in 2018, ZEIT8026 aims to lay the foundational knowledge of cyber defence operations:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Default programs based on MIME type with XDG</title>
      <link>https://www.bencode.io/posts/xdgmime/</link>
      <pubDate>Tue, 01 Feb 2022 18:12:29 +1100</pubDate>
      <guid>https://www.bencode.io/posts/xdgmime/</guid>
      <description>&lt;p&gt;From an ancient post I previously did&amp;hellip;I need to refresh my mind on this topic often enough thought it worthy of breaking it out.&lt;/p&gt;
&lt;h2 id=&#34;how-linux-systems-figure-out-what-program-should-open-a-file&#34;&gt;How Linux systems figure out what program should open a file&lt;/h2&gt;
&lt;p&gt;Programs that handle arbitrary files (e.g. web browsers, irc clients, file managers) delegate to a general purpose resource handler. &lt;em&gt;XDG MIME Applications&lt;/em&gt; is the ubiquitous option here, and is not only an implementation, but a full blown specification.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Migrating off Google Workspaces (Google Apps or G Suite)</title>
      <link>https://www.bencode.io/posts/google/</link>
      <pubDate>Sun, 30 Jan 2022 15:42:47 +1000</pubDate>
      <guid>https://www.bencode.io/posts/google/</guid>
      <description>&lt;h1 id=&#34;google-workspace-formally-google-apps-formally-g-suite&#34;&gt;Google Workspace (formally Google Apps, formally G Suite)&lt;/h1&gt;
&lt;p&gt;After years of frustration in the Google platform, specifically &lt;em&gt;G Suite&lt;/em&gt; (also known as &lt;em&gt;Google Apps&lt;/em&gt; or &lt;em&gt;Google Workspace&lt;/em&gt;) it all recently came to a head for me after I received a couple of Google Nest cameras as gifts last Christmas.&lt;/p&gt;
&lt;p&gt;Having been a strong Google proponent since the late 90&amp;rsquo;s, when Google was a cool startup bucking the trend with their famous &lt;em&gt;do not be evil&lt;/em&gt; mission, Googles brand within the technical community rose to dizzying heights. Ever since the Google brand has always had a strong influence on me and I have happily recommended their products to people I care about.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DVD backups on GNU/Linux</title>
      <link>https://www.bencode.io/posts/dvds/</link>
      <pubDate>Fri, 21 Jan 2022 16:44:23 +0000</pubDate>
      <guid>https://www.bencode.io/posts/dvds/</guid>
      <description>&lt;p&gt;This is how I like to create digital copies (i.e., backups) of my physical DVD collection, which I own legitimately. I don&amp;rsquo;t condone piracy or theft.&lt;/p&gt;
&lt;h1 id=&#34;backup-instructions&#34;&gt;Backup instructions&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Rip physical DVD media &lt;code&gt;makemkv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Transcode &lt;code&gt;mkv&lt;/code&gt; to &lt;code&gt;m4v&lt;/code&gt; container using &lt;em&gt;Fast 1080p30&lt;/em&gt; preset in handbrake. Passthrough UTF-8 subtitles if you like those.&lt;/li&gt;
&lt;li&gt;Copy to media backup server &lt;code&gt;rsync --protect-args -av --progress Season8 &amp;quot;shnerg@172.16.1.32:/data/TV/Penn &amp;amp; Teller Bullshit/&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;software&#34;&gt;Software&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.makemkv.com/forum/viewtopic.php?f=3&amp;amp;t=224&#34;&gt;MakeMKV&lt;/a&gt; transcoder that deals with proprietary (and usually encrypted) disc into a set of MKV files&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://handbrake.fr/&#34;&gt;Handbrake&lt;/a&gt; general video transcoder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The C source is available as tarballs &lt;code&gt;makemkv-bin-1.16.5.tar.gz&lt;/code&gt; and &lt;code&gt;makemkv-oss-1.16.5.tar.gz&lt;/code&gt;. The Linux release includes full source code for MakeMKV GUI, libmakemkv multiplexer library and libdriveio MMC drive interrogation library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Glorious GMMK Pro 75% custom keyboard</title>
      <link>https://www.bencode.io/posts/gmmk/</link>
      <pubDate>Thu, 13 Jan 2022 20:25:50 +0000</pubDate>
      <guid>https://www.bencode.io/posts/gmmk/</guid>
      <description>&lt;p&gt;Last year I decided in addition to my amazing &lt;a href=&#34;https://ergodox-ez.com/&#34;&gt;ErgoDox EZ&lt;/a&gt; to look for a 75% layout keyboard (think a more minimal version of ten-keyless).&lt;/p&gt;
&lt;p&gt;After wasting far too much time on &lt;a href=&#34;https://www.reddit.com/r/MechanicalKeyboards/&#34;&gt;r/MechanicalKeyboards&lt;/a&gt; the &lt;a href=&#34;https://www.pcgamingrace.com/products/glorious-gmmk-pro-75-barebone-black&#34;&gt;Glorious GMMK PRO&lt;/a&gt; hit my radar. Short for Glorious Modular Mechanical Keyboard, the pro version cuts the previous full sized keyboard version down to a 75% design with a digital rotary dial.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GMMK PRO is an ultra premium, gasket-mounted 75% layout keyboard built for enthusiasts, gamers, and professionals.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rust cheat sheet (2022)</title>
      <link>https://www.bencode.io/posts/rust/</link>
      <pubDate>Sat, 11 Dec 2021 22:21:47 +1100</pubDate>
      <guid>https://www.bencode.io/posts/rust/</guid>
      <description>&lt;p&gt;Please refer to Don Bright&amp;rsquo;s original &lt;a href=&#34;https://github.com/donbright/rust-lang-cheat-sheet&#34;&gt;rust-lang-cheat-sheet&lt;/a&gt; which I based much of this content off, as I work through &lt;a href=&#34;https://doc.rust-lang.org/book/&#34;&gt;The Book&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#rust-in-a-nutshell&#34;&gt;Rust in a nutshell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#documentation&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#toolchain&#34;&gt;Toolchain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mutability-basic&#34;&gt;Mutability basic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#types-and-variables&#34;&gt;Types and variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#operators&#34;&gt;Operators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#run-time-errors-crashing-panic-except-unwrap-option-result&#34;&gt;Run time errors, Crashing, panic, except, unwrap, Option, Result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#printing&#34;&gt;Printing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#loop-while-and-for&#34;&gt;loop, while and for&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#concurrency-parallel-processing&#34;&gt;Concurrency, parallel processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#functions-and-closures&#34;&gt;Functions and closures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#unit-tests-integration-tests&#34;&gt;Unit tests, integration tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#documentation-1&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#if-conditionals-patterns-match-control-flow&#34;&gt;If, conditionals, patterns, match, control flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ownership-borrowing-references-lifetimes&#34;&gt;Ownership, Borrowing, References, Lifetimes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#arrays-slices-ranges&#34;&gt;Arrays, Slices, Ranges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#structs&#34;&gt;Structs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#enums&#34;&gt;Enums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#collections-key-value-pairs-sets&#34;&gt;Collections, Key-value pairs, Sets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#macros&#34;&gt;Macros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#little-programs&#34;&gt;Little programs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#guess-a-number&#34;&gt;Guess a number&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cool-references&#34;&gt;Cool references&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;rust-in-a-nutshell&#34;&gt;Rust in a nutshell&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Syntax similar to C&lt;/li&gt;
&lt;li&gt;Ownership of memory enforced at compile time&lt;/li&gt;
&lt;li&gt;Statically linked&lt;/li&gt;
&lt;li&gt;Functional-ish, generic-ish, not so objecty&lt;/li&gt;
&lt;li&gt;Control flow using patterns, &lt;code&gt;match&lt;/code&gt; keyword&lt;/li&gt;
&lt;li&gt;Packages: &amp;lsquo;cargo&amp;rsquo; command, &lt;a href=&#34;https://crates.io&#34;&gt;https://crates.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Testing: cargo test, &lt;code&gt;#[test]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Concurrency: ownership, mutability, channels, mutex, crossbeam + Rayon packages&lt;/li&gt;
&lt;li&gt;Auto formatter: &lt;code&gt;rustfmt filename.rs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Compiler engine: LLVM&lt;/li&gt;
&lt;li&gt;Raw pointers, low level: &lt;code&gt;unsafe{}&lt;/code&gt; keyword&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;documentation&#34;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rustup doc&lt;/code&gt; for offline docs!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://doc.rust-lang.org/std/&#34;&gt;doc.rust-lang.org&lt;/a&gt; standard library, primitive types, standard macros&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.rs/&#34;&gt;docs.rs&lt;/a&gt; for package documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;toolchain&#34;&gt;Toolchain&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ rustup.sh               &lt;span class=&#34;c1&#34;&gt;# install rust, see rust-lang.org for details&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo new myproj        &lt;span class=&#34;c1&#34;&gt;# start new executable project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo new --bin myproj  &lt;span class=&#34;c1&#34;&gt;# as above&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo new --lib myproj  &lt;span class=&#34;c1&#34;&gt;# start new library project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; myproj               &lt;span class=&#34;c1&#34;&gt;# cd into the new directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ls -lR                  &lt;span class=&#34;c1&#34;&gt;# list our skeleton of files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;src/main.rs               &lt;span class=&#34;c1&#34;&gt;# main.rs, has main() entry point&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cargo.toml                &lt;span class=&#34;c1&#34;&gt;# Cargo.toml defines packaging&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; Cargo.toml      &lt;span class=&#34;c1&#34;&gt;# add dependencies and other details&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo build             &lt;span class=&#34;c1&#34;&gt;# downloads dependencies + builds main.rs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo build --release   &lt;span class=&#34;c1&#34;&gt;# release build&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo check             &lt;span class=&#34;c1&#34;&gt;# make sure code compiles, without binary outputs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo update            &lt;span class=&#34;c1&#34;&gt;# ignore Cargo.lock and figure out latest versions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo run               &lt;span class=&#34;c1&#34;&gt;# runs program created from main.rs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo doc --open        &lt;span class=&#34;c1&#34;&gt;# local web based doc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;              &lt;span class=&#34;c1&#34;&gt;# runs tests (in parallel by default)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; -- --test-threads&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# run tests one at a time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; -- --nocapture       &lt;span class=&#34;c1&#34;&gt;# run tests, show output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cargo run --example fundemo -- --argtodemo &lt;span class=&#34;c1&#34;&gt;# run example with argument&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ rustc --explain E0384   &lt;span class=&#34;c1&#34;&gt;# eli5 what an error code means&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;mutability-basic&#34;&gt;Mutability basic&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// all variable bindings are immutable by default
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// compile error: can&amp;#39;t change an immutable binding
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// &amp;#34;mut&amp;#34; designates a binding as mutable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// ok, mutable binding can change;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;types-and-variables&#34;&gt;Types and variables&lt;/h2&gt;
&lt;p&gt;Rust provide two compound types; arrays and tuples.&lt;/p&gt;</description>
    </item>
    <item>
      <title>st emoji support with libXft BGRA glyph patch</title>
      <link>https://www.bencode.io/posts/libxft-bgra/</link>
      <pubDate>Tue, 07 Dec 2021 21:09:34 +0000</pubDate>
      <guid>https://www.bencode.io/posts/libxft-bgra/</guid>
      <description>&lt;h1 id=&#34;the-problem&#34;&gt;The Problem&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://st.suckless.org/&#34;&gt;st&lt;/a&gt; crashes whenever an emoji needs to be rendered.&lt;/p&gt;
&lt;p&gt;It turns out to be an issue with the underlying font rendering library &lt;code&gt;libXft&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;libXft is the client side font rendering library, using libfreetype, libX11, and the X Render extension to display anti-aliased text.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;the-solution&#34;&gt;The Solution&lt;/h1&gt;
&lt;p&gt;In its current offical mainline form &lt;code&gt;libXft&lt;/code&gt; does not support rendering images.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&#34;https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1&#34;&gt;patch&lt;/a&gt; by Maxime Coste exists to add support for BGRA glyphs and scaling, effectively enabling emoji rendering support.&lt;/p&gt;</description>
    </item>
    <item>
      <title>dotnet worker kubernetes health probe</title>
      <link>https://www.bencode.io/posts/k8s-worker/</link>
      <pubDate>Thu, 18 Nov 2021 16:48:40 +0000</pubDate>
      <guid>https://www.bencode.io/posts/k8s-worker/</guid>
      <description>&lt;h1 id=&#34;the-problem&#34;&gt;The Problem&lt;/h1&gt;
&lt;p&gt;You have a (headless) background worker process that needs to communicate its readiness to kubernetes.&lt;/p&gt;
&lt;h1 id=&#34;the-solution&#34;&gt;The Solution&lt;/h1&gt;
&lt;p&gt;ASP.NET Core provides a decent &lt;a href=&#34;https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/health-checks&#34;&gt;approach&lt;/a&gt; to performing a series of agnostic health checks. There are &lt;a href=&#34;https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks/tree/master/src&#34;&gt;hundreds&lt;/a&gt; of health probes available such as &lt;code&gt;Network&lt;/code&gt;, &lt;code&gt;Elasticsearch&lt;/code&gt;, &lt;code&gt;Kafka&lt;/code&gt; and &lt;code&gt;NpgSql&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;However being part of ASP.NET Core, does mean that some of these dependencies, such as &lt;a href=&#34;https://www.nuget.org/packages/Microsoft.AspNetCore.Diagnostics.HealthChecks&#34;&gt;Microsoft.AspNetCore.Diagnostics.HealthChecks&lt;/a&gt; package, will bleed into the worker as a needed dependency. The plus side is that you can avoid reinventing the wheel.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenShift NginX 13: permission denied /var/cache/nginx/client_temp</title>
      <link>https://www.bencode.io/posts/2021-08-26-openshift-nginx-clienttemp-failed/</link>
      <pubDate>Thu, 26 Aug 2021 16:36:19 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2021-08-26-openshift-nginx-clienttemp-failed/</guid>
      <description>&lt;p&gt;Trying to deploy an NGINX container to an OpenShift cluster today, ran into:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;nginx: [emerg] mkdir() &amp;#34;/var/cache/nginx/client_temp&amp;#34; failed (13: Permission denied)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To do some investigating spun up a new &lt;em&gt;Pod&lt;/em&gt; an attached an interactive shell using &lt;code&gt;oc&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;oc run --rm -i -t frontend --image=artifactory.evilcorp.com/frontend:1.0.0 --restart=Never --command -- /bin/sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Indeed a quick &lt;code&gt;ls -la /var/cache&lt;/code&gt; revealed that the &lt;code&gt;nginx&lt;/code&gt; subdirectory is writtable by &lt;code&gt;root&lt;/code&gt;. No good for OpenShift, which by default is non-root:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes Secrets encoding gotcha</title>
      <link>https://www.bencode.io/posts/k8s-secrets/</link>
      <pubDate>Wed, 25 Aug 2021 14:17:32 +0000</pubDate>
      <guid>https://www.bencode.io/posts/k8s-secrets/</guid>
      <description>&lt;p&gt;Kubernetes provides a neat concept for managing sensitive pieces of data, the &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/&#34;&gt;Secret&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A Secret is an object that contains a small amount of sensitive data such as a password, a token, or a key. Such information might otherwise be put in a Pod specification or in a container image. Using a Secret means that you don&amp;rsquo;t need to include confidential data in your application code.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Secret text is by default base64 encoded. For this reason it&amp;rsquo;s recommended that secret definitions are not published to git.&lt;/p&gt;</description>
    </item>
    <item>
      <title>React environment variables in an nginx container</title>
      <link>https://www.bencode.io/posts/react-build/</link>
      <pubDate>Sat, 21 Aug 2021 22:05:15 +0000</pubDate>
      <guid>https://www.bencode.io/posts/react-build/</guid>
      <description>&lt;p&gt;Your React app is ready to ship. Congratulations!&lt;/p&gt;
&lt;p&gt;Packaging for production is (and should) be different from your development configuration.&lt;/p&gt;
&lt;p&gt;In the case of &lt;a href=&#34;https://create-react-app.dev/&#34;&gt;Create React App&lt;/a&gt; the toolchain is rich, includes development productivity conveniences such as hot reloading, source maps and &lt;a href=&#34;https://create-react-app.dev/docs/adding-custom-environment-variables/&#34;&gt;custom environment variables&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This toolchain is mind blowingly productive as you develop the app, &lt;code&gt;npm start&lt;/code&gt; and watch the magic unfold.&lt;/p&gt;
&lt;p&gt;At this point, its possible to put the React app one big (~1.7GB) happy container:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debian install notes</title>
      <link>https://www.bencode.io/posts/debian/</link>
      <pubDate>Sun, 11 Jul 2021 11:55:08 +0000</pubDate>
      <guid>https://www.bencode.io/posts/debian/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m moving lots of my machines back to Debian in the yearning for rock solid stability and a complete distribution that just works. Debian was the first GNU/Linux I ever used as a teenager back in late 90s and I&amp;rsquo;ve fond memories of it.&lt;/p&gt;
&lt;p&gt;Starting with the official &lt;a href=&#34;https://www.debian.org/releases/stable/amd64/&#34;&gt;amd64 install guide&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;preparation&#34;&gt;Preparation&lt;/h1&gt;
&lt;h2 id=&#34;make-usb-key&#34;&gt;Make USB key&lt;/h2&gt;
&lt;p&gt;I quickly &lt;a href=&#34;https://unix.stackexchange.com/questions/458038/load-missing-firmware-from-removable-media-debian&#34;&gt;discovered&lt;/a&gt; I want the &lt;a href=&#34;https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/&#34;&gt;image&lt;/a&gt; that includes proprietary firmware, so I can get my (nasty) wifi card working as quickly as possible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notes from the book Atomic Habits</title>
      <link>https://www.bencode.io/posts/habits/</link>
      <pubDate>Sat, 12 Jun 2021 18:57:37 +0000</pubDate>
      <guid>https://www.bencode.io/posts/habits/</guid>
      <description>&lt;p&gt;I just read the kindle edition of &lt;a href=&#34;https://jamesclear.com/atomic-habits&#34;&gt;Atomic Habits by James Clear&lt;/a&gt;. Its worth the time investment, giving practical ways for building desired habbits and more importantly, breaking bad ones.&lt;/p&gt;
&lt;h1 id=&#34;the-habit-loop&#34;&gt;The habit loop&lt;/h1&gt;
&lt;p&gt;The four stages of habit are an endless cycle. This &lt;em&gt;habit loop&lt;/em&gt; is continually scanning the environment, predicting what will happen next, trying out different responses, and learning from the results.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The cue triggers a craving&lt;/li&gt;
&lt;li&gt;That motivates a response&lt;/li&gt;
&lt;li&gt;That provides a reward&lt;/li&gt;
&lt;li&gt;That satisfies the craving and, ultimately, becomes associated with the cue&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;4-laws-of-behavior-change&#34;&gt;4 laws of behavior change&lt;/h1&gt;
&lt;p&gt;The pillars of the book, are the four stages of the habit building process:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Binary Similarity Analysis Technical Paper</title>
      <link>https://www.bencode.io/posts/binhunt/</link>
      <pubDate>Sat, 29 May 2021 22:46:47 +0000</pubDate>
      <guid>https://www.bencode.io/posts/binhunt/</guid>
      <description>&lt;p&gt;An academic paper I authored in May 2019, as part of studying &lt;em&gt;Reverse Engineering&lt;/em&gt; at UNSW.&lt;/p&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;Extracting meaningful semantic differences between software binaries without source code is difficult. This is a challenging problem due to the overwhelming amount of syntactic noise that small changes can result in at the assembly level. Curiously when it comes to program semantics the &amp;ldquo;signal from the noise&amp;rdquo; can be distilled in a manner that is both static and processor agnostic, through the application of control flow and graph isomorphism analysis, symbolic execution and theorem proving. The graph isomorphism problem has no known polynomial time algorithm (i.e. is NP) making brute force approaches computationally infeasible. By blending various static analysis techniques and applying some generalisations, consider a novel approach to overcoming the computationally infeasibility of this problem domain with a view to binary difference analysis.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hiking pack system</title>
      <link>https://www.bencode.io/posts/pack/</link>
      <pubDate>Sat, 29 May 2021 22:46:49 +1100</pubDate>
      <guid>https://www.bencode.io/posts/pack/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#stacked-packing-system&#34;&gt;Stacked packing system&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#inner-pack&#34;&gt;Inner pack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#side-pockets&#34;&gt;Side pockets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#front-pocket&#34;&gt;Front pocket&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#options&#34;&gt;Options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ditty-bag&#34;&gt;Ditty bag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#food&#34;&gt;Food&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#cold-soak-meal-recipes&#34;&gt;Cold soak meal recipes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#refried-beans&#34;&gt;Refried beans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pinto-beans&#34;&gt;Pinto beans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cous-cous&#34;&gt;Cous Cous&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#veggies&#34;&gt;Veggies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#oil-wrap&#34;&gt;Oil wrap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#potato-bomb&#34;&gt;Potato Bomb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#rice-bomb&#34;&gt;Rice Bomb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#oatmeal&#34;&gt;Oatmeal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cereal&#34;&gt;Cereal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#useful-resources&#34;&gt;Useful resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#lessons-learned&#34;&gt;Lessons learned&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#april-2021&#34;&gt;April 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#november-2021&#34;&gt;November 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Over the last year I have been experimenting with reducing the weight of my hiking pack when out on track.&lt;/p&gt;
&lt;p&gt;Reading &lt;a href=&#34;https://www.amazon.com.au/Ultralight-Backpackin-Tips-Mike-Clelland/dp/0762763841&#34;&gt;books&lt;/a&gt; on ultralight hiking, has me with some strategies for doing so.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gentoo Linux</title>
      <link>https://www.bencode.io/posts/gentoo/</link>
      <pubDate>Mon, 22 Feb 2021 21:29:55 +0000</pubDate>
      <guid>https://www.bencode.io/posts/gentoo/</guid>
      <description>&lt;p&gt;The next step in my minimalist computing journey.&lt;/p&gt;
&lt;p&gt;Enter Gentoo, my first source based GNU/Linux distro. Pre-packaged binaries, which is the approach most other (binary based) distros take, must often cater for the lowest common denominator to ensure packages can run on lots of differing setups out in the wild. On a source based distro, I can articulate my specific needs (USE flags on Gentoo) to finely tune the binaries to my system. For example, as I plan to steer clear of software like systemd, kde and gnome, I can ensure support for these packages is NOT built into other program binaries I build for my system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>KVM virtualisation</title>
      <link>https://www.bencode.io/posts/kvm/</link>
      <pubDate>Sat, 31 Oct 2020 20:56:23 +0000</pubDate>
      <guid>https://www.bencode.io/posts/kvm/</guid>
      <description>&lt;p&gt;The Kernel Virtual Machine is a hypervisor for Linux on hardware with virtualization extensions (Intel VT or AMD-V). It is deployed as a loadable kernel modules, &lt;code&gt;kvm.ko&lt;/code&gt;, and either &lt;code&gt;kvm-intel.ko&lt;/code&gt; or &lt;code&gt;kvm-amd.ko&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://wiki.debian.org/KVM&#34;&gt;KVM Debian Wiki&lt;/a&gt; rocks, and provides details on the basics including a great performance tuning section.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#install&#34;&gt;Install&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#administration-tasks&#34;&gt;Administration tasks&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#user-specific-vs-system-wide-vms&#34;&gt;User specific vs system wide VMs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#list-vms&#34;&gt;List VMs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#start-vm&#34;&gt;Start VM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#shutdown-vm&#34;&gt;Shutdown VM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#murder-hung-vm&#34;&gt;Murder (hung) VM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#autostart-default-nated-bridged-network&#34;&gt;Autostart default NATed bridged network&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#what-if-the-default-network-interface-is-not-listed&#34;&gt;What if the &lt;code&gt;default&lt;/code&gt; network interface is not listed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#how-to-extend--increase-a-partition&#34;&gt;How to extend / increase a partition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#use-network-iso-source-for-new-vms&#34;&gt;Use network ISO source for new VMs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#windows-vm-disk-driver&#34;&gt;Windows VM disk driver&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;install&#34;&gt;Install&lt;/h1&gt;
&lt;p&gt;Easy instructions to get QEMU/KVM and virt-manager up and running on Arch.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes</title>
      <link>https://www.bencode.io/posts/k8s/</link>
      <pubDate>Tue, 18 Aug 2020 20:11:30 +0000</pubDate>
      <guid>https://www.bencode.io/posts/k8s/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;The name Kubernetes originates from Greek, meaning helmsman or pilot.&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#terminology&#34;&gt;Terminology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#essentials&#34;&gt;Essentials&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#help&#34;&gt;Help&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bash-kubectl-completion&#34;&gt;Bash kubectl completion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#web-ui-dashboard&#34;&gt;Web UI dashboard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pods&#34;&gt;Pods&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#creating-a-pod&#34;&gt;Creating a pod&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#option-1-imperatively-with-the-cli&#34;&gt;Option 1: Imperatively with the CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#option-2-declaratively-with-yaml&#34;&gt;Option 2: Declaratively with YAML&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#port-forwarding&#34;&gt;Port forwarding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#managing-pods&#34;&gt;Managing pods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pod-health&#34;&gt;Pod Health&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#deployments-and-replicasets&#34;&gt;Deployments and ReplicaSets&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#replicaset&#34;&gt;ReplicaSet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#deployment&#34;&gt;Deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#deployments-with-kubectl&#34;&gt;Deployments with kubectl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#deployment-options&#34;&gt;Deployment Options&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#rolling-updates&#34;&gt;Rolling updates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#blue-green&#34;&gt;Blue Green&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#canary&#34;&gt;Canary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#rollbacks&#34;&gt;Rollbacks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#statefulsets&#34;&gt;StatefulSets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#services&#34;&gt;Services&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#service-types&#34;&gt;Service Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#port-forwarding-take-2&#34;&gt;Port forwarding take 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#services-yaml&#34;&gt;Services YAML&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#nodeport-example&#34;&gt;NodePort example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#externalname-example&#34;&gt;ExternalName example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#testing-service-and-pod-with-curl&#34;&gt;Testing Service and Pod with curl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#storage&#34;&gt;Storage&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#volumes&#34;&gt;Volumes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#volume-types&#34;&gt;Volume Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#viewing-a-pods-volumes&#34;&gt;Viewing a Pods volumes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#emptydir-volume-example&#34;&gt;emptyDir volume example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#peristentvolumes-and-peristentvolumesclaims&#34;&gt;PeristentVolumes and PeristentVolumesClaims&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#storageclasses&#34;&gt;StorageClasses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#managing-configuration-with-configmaps-and-secrets&#34;&gt;Managing configuration with ConfigMaps and Secrets&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#defining-configmaps&#34;&gt;Defining ConfigMaps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#consuming-configmaps&#34;&gt;Consuming ConfigMaps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#secrets&#34;&gt;Secrets&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#secret-best-practices&#34;&gt;Secret best practices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#storing-secrets&#34;&gt;Storing Secrets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#using-secrets&#34;&gt;Using Secrets&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#secrets-as-environment-variables&#34;&gt;Secrets as environment variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#secrets-as-files&#34;&gt;Secrets as files&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#troubleshooting&#34;&gt;Troubleshooting&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#logs&#34;&gt;Logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#configuration-verification&#34;&gt;Configuration verification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#shell-into-pod-container&#34;&gt;Shell into Pod container&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-api&#34;&gt;The API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#general-kubectl&#34;&gt;General kubectl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#waaay-cool&#34;&gt;Waaay cool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#samples&#34;&gt;Samples&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#nodejs-app&#34;&gt;node.js app&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#microk8s&#34;&gt;microk8s&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#shell-improvements&#34;&gt;Shell improvements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#persistentvolume-storage-location&#34;&gt;PersistentVolume storage location&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resources&#34;&gt;Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;terminology&#34;&gt;Terminology&lt;/h1&gt;
&lt;p&gt;k8s is two concepts; the control plane and nodes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing Arch Linux on the Pinebook Pro</title>
      <link>https://www.bencode.io/posts/pinebook/</link>
      <pubDate>Mon, 27 Jul 2020 20:27:23 +0000</pubDate>
      <guid>https://www.bencode.io/posts/pinebook/</guid>
      <description>&lt;p&gt;&lt;em&gt;Updated 2022-04-11: Installed a minimal version of Manjaro, a SLICK flavour of Arch&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://www.pine64.org/pinebook-pro/&#34;&gt;pinebook pro&lt;/a&gt; is a beautiful 64-bit ARM based laptop, that reminds me of the form factor of a modern macbook air, shipping with a premium magnesium alloy shell, 64GB eMMC and a 10,000 mAH battery. All this for $200.&lt;/p&gt;
&lt;p&gt;As a NIX machine, I&amp;rsquo;ve found Manjaro to be delightful. I have dreams of one day installing OpenBSD.&lt;/p&gt;</description>
    </item>
    <item>
      <title>8-bit CPU build</title>
      <link>https://www.bencode.io/posts/8bit/</link>
      <pubDate>Sun, 12 Jul 2020 20:08:55 +0000</pubDate>
      <guid>https://www.bencode.io/posts/8bit/</guid>
      <description>&lt;p&gt;This material is based on the high quality &lt;em&gt;build your own CPU&lt;/em&gt; guide by &lt;a href=&#34;https://eater.net/8bit&#34;&gt;Ben Eater&lt;/a&gt;. Ben cites the SAP-1 CPU architecture as the design inspiration for the CPU, which originated from the book &lt;a href=&#34;https://www.amazon.com.au/Digital-Computer-Electronics-Albert-Malvino/dp/0028005945&#34;&gt;Digital Computer Electonics&lt;/a&gt; by Albert Paul Malvino.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The SAP (Simple As Possible) computer has been designed for you, the beginner. Its purpose, to introduce the crucial ideas behind a CPUs operation without burying you in unnecessary detail.&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#architecture&#34;&gt;Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#general-electonics&#34;&gt;General Electonics&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dirty-power&#34;&gt;Dirty power&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resistors&#34;&gt;Resistors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#capacitors&#34;&gt;Capacitors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#latch-vs-flip-flop&#34;&gt;Latch vs flip flop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#d-flip-flop&#34;&gt;D flip flop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-clock&#34;&gt;The clock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-registers&#34;&gt;The registers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#arithmetic-and-logic-unit-alu&#34;&gt;Arithmetic and Logic Unit (ALU)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#design&#34;&gt;Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#implementation&#34;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#representing-negative-numbers---signing-bit-1s-and-2s-complement&#34;&gt;Representing negative numbers - signing bit, 1&amp;rsquo;s and 2&amp;rsquo;s complement&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#ones-complement&#34;&gt;Ones complement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#two-complement&#34;&gt;Two complement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#program-counter-pc&#34;&gt;Program Counter (PC)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#pc-module-problem-1-counter-clearing&#34;&gt;PC module problem 1: counter clearing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pc-module-problem-2-dirty-clock-signal&#34;&gt;PC module problem 2: dirty clock signal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#output-register&#34;&gt;Output register&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#arduino-nano-eeprom-programmer&#34;&gt;Arduino Nano EEPROM programmer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#binary-to-decimal-7-segment-decoder&#34;&gt;Binary to decimal 7-segment decoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#multiplexing-four-7-segment-displays-with-a-single-eeprom&#34;&gt;Multiplexing four 7-segment displays with a single EEPROM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#handy-resources&#34;&gt;Handy resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;
&lt;p&gt;The SAP-1 defines a number of logical CPU modules which are capable of integrating to form a working CPU and ultimately computer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Redux</title>
      <link>https://www.bencode.io/posts/redux/</link>
      <pubDate>Wed, 29 Apr 2020 12:04:16 +0000</pubDate>
      <guid>https://www.bencode.io/posts/redux/</guid>
      <description>&lt;p&gt;Once you start working with &lt;a href=&#34;https://www.bencode.io/posts/react/&#34;&gt;React&lt;/a&gt; in anger, there is a tipping point to be aware of where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the complexity of data flows piles up&lt;/li&gt;
&lt;li&gt;the same data is being rendered in multiple places&lt;/li&gt;
&lt;li&gt;the number of state changes blow out&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Being able to tackle these problems in a single place is where Redux fits in.&lt;/p&gt;
&lt;h1 id=&#34;contents&#34;&gt;Contents&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#contents&#34;&gt;Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-problem&#34;&gt;The Problem&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#option-1-lift-the-state&#34;&gt;Option 1 lift the state&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#option-2-react-context&#34;&gt;Option 2 react context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#option-3-redux&#34;&gt;Option 3 Redux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#a-chat-with-redux&#34;&gt;A chat with redux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#container-vs-presentation-components&#34;&gt;Container vs Presentation Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-redux-principles&#34;&gt;The Redux Principles&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#actions&#34;&gt;Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-store&#34;&gt;The Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#immutability&#34;&gt;Immutability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reducers&#34;&gt;Reducers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#react-redux&#34;&gt;React-Redux&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#react-redux-provider&#34;&gt;React-Redux Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#react-redux-connect&#34;&gt;React-Redux Connect&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#mapstatetoprops&#34;&gt;mapStateToProps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mapdispatchtoprops&#34;&gt;mapDispatchToProps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#redux-setup&#34;&gt;Redux Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#async-and-apis&#34;&gt;Async and APIs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#mock-api&#34;&gt;Mock API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#api-client-wrappers&#34;&gt;API Client Wrappers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#redux-middleware&#34;&gt;Redux Middleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#redux-async-libraries&#34;&gt;Redux Async Libraries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#thunks&#34;&gt;Thunks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#conditional-mapstatetoprops&#34;&gt;Conditional mapStateToProps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#polish-the-finer-things&#34;&gt;Polish (the finer things)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#spinner-component&#34;&gt;Spinner component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#status-api-and-feedback&#34;&gt;Status API and feedback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#server-side-validation&#34;&gt;Server side validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#client-side-validation&#34;&gt;Client side validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#optimistic-deletes&#34;&gt;Optimistic deletes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#testing&#34;&gt;Testing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#redux-connected-components&#34;&gt;Redux Connected Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#action-creators&#34;&gt;Action Creators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#thunks-1&#34;&gt;Thunks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reducers-1&#34;&gt;Reducers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#store&#34;&gt;Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;the-problem&#34;&gt;The Problem&lt;/h1&gt;
&lt;p&gt;Imagine a fairly deep component hierarchy, starting with your top level &lt;code&gt;App&lt;/code&gt; component. Deep down the tree, there are two child components that need to access a common piece of data (e.g. customer data). How should these components access the data they require?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Suckless programs</title>
      <link>https://www.bencode.io/posts/suckless/</link>
      <pubDate>Wed, 08 Apr 2020 10:54:45 +0000</pubDate>
      <guid>https://www.bencode.io/posts/suckless/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://suckless.org/&#34;&gt;suckless&lt;/a&gt; project values simplicity, clarity and frugality in software.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our philosophy is about keeping things simple, minimal and usable. We believe this should become the mainstream philosophy in the IT sector.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;As a user of most of their programs including the infamous &lt;a href=&#34;https://dwm.suckless.org/&#34;&gt;dwm&lt;/a&gt; (a tiling window manager), &lt;a href=&#34;https://tools.suckless.org/dmenu/&#34;&gt;dmenu&lt;/a&gt; (launcher), &lt;a href=&#34;https://st.suckless.org/&#34;&gt;st&lt;/a&gt; (terminal emulator) and others &lt;a href=&#34;https://tools.suckless.org/&#34;&gt;tools&lt;/a&gt;, I can attest to benefits of using minimal and efficient software.&lt;/p&gt;
&lt;h2 id=&#34;patching&#34;&gt;Patching&lt;/h2&gt;
&lt;p&gt;Programs are customised by &lt;a href=&#34;https://dwm.suckless.org/patches/&#34;&gt;patching&lt;/a&gt; the C source code. However, unlike typical open source projects, suckless source code is quite readable and hackable, a by-product of the philosophy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing wifi on Arch</title>
      <link>https://www.bencode.io/posts/2020-03-16-wifi-cheatsheet/</link>
      <pubDate>Mon, 16 Mar 2020 17:47:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2020-03-16-wifi-cheatsheet/</guid>
      <description>&lt;p&gt;See &lt;a href=&#34;https://wiki.archlinux.org/index.php/NetworkManager#nmcli_examples&#34;&gt;archwiki&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nmcli device wifi list&lt;/code&gt; sniff currently available wifi ssids in range&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmcli connection show&lt;/code&gt; show active connection/s&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmcli device wifi connect Jeneffer password S3CR3T&lt;/code&gt; connect to ssid&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmcli device wifi connect Jeneffer password S3CR3T hidden yes&lt;/code&gt; connect to hidden ssid&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmcli connection up uuid UUID&lt;/code&gt; reconnect a disconnected interface&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmcli device&lt;/code&gt; list all interfaces and their state&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcli device disconnect wlp3s0&lt;/code&gt; disconnect an interface&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmcli radio wifi off&lt;/code&gt; disable wifi radio&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Exploiting Heap Allocators Technical Paper</title>
      <link>https://www.bencode.io/posts/heap/</link>
      <pubDate>Sat, 19 Oct 2019 18:31:14 +1000</pubDate>
      <guid>https://www.bencode.io/posts/heap/</guid>
      <description>&lt;p&gt;An academic paper I authored in October 2019, as part of studying &lt;em&gt;Modern Exploit Development&lt;/em&gt; at UNSW.&lt;/p&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;Heap oriented exploits continue to be an ongoing threat, and have gained popularity post the stack smashing frenzy of the 90&amp;rsquo;s and early 00&amp;rsquo;s. Even so called safe languages (e.g. JavaScript, Java) remain vulnerable due to their underlying C/C++ implementations. Heap allocator designs and implementations, of which there are many, struggle to strike the balance between performance and security, performance often winning out to keep programs running as fast as possible. Two ingredients are needed for a successful heap exploit, the first a memory management error in the target program, and second an exploitable heap allocator implementation. Many countermeasures in mainstream allocators seen to date are often the result of knee-jerk reactions to exploits of the past, with patching occurring to existing designs. A large body of research exists around detecting, preventing or mitigating heap attacks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Go Programming Lang</title>
      <link>https://www.bencode.io/posts/go/</link>
      <pubDate>Sat, 05 Oct 2019 19:02:44 +0000</pubDate>
      <guid>https://www.bencode.io/posts/go/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#gopath&#34;&gt;GOPATH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#run-build-and-install&#34;&gt;Run, build and install&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dependencies&#34;&gt;Dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#formatting&#34;&gt;Formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#documentation&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#structuring-a-source-tree&#34;&gt;Structuring a source tree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-lang&#34;&gt;The lang&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#variables&#34;&gt;Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#control-structures-if-switch-and-for&#34;&gt;Control structures (if, switch and for)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#if&#34;&gt;if&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#switch&#34;&gt;switch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#for&#34;&gt;for&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#io&#34;&gt;I/O&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#fmt&#34;&gt;fmt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cli&#34;&gt;CLI&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#args&#34;&gt;Args&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#flags&#34;&gt;Flags&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#basic-data-types&#34;&gt;Basic Data Types&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#type-conversion&#34;&gt;Type conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#strings&#34;&gt;Strings&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#unicode&#34;&gt;Unicode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#string-literals&#34;&gt;String literals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#numbers&#34;&gt;Numbers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#integers&#34;&gt;Integers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bitwise-operations&#34;&gt;Bitwise operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#floating-point&#34;&gt;Floating point&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#constants&#34;&gt;Constants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pointers&#34;&gt;Pointers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#functions&#34;&gt;Functions&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#grouped-parameters-types&#34;&gt;Grouped parameters types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#variadic-functions&#34;&gt;Variadic functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#multiple-return-values&#34;&gt;Multiple return values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#named-return-values&#34;&gt;Named return values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#recursion&#34;&gt;Recursion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#deferred-functional-calls&#34;&gt;Deferred functional calls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#functions-as-values&#34;&gt;Functions as values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#function-literals-anonymous-functions&#34;&gt;Function literals (anonymous functions)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#passing-functions-to-functions&#34;&gt;Passing functions to functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#closures&#34;&gt;Closures&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#error-handling&#34;&gt;Error Handling&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#error-handling-strategies&#34;&gt;Error handling strategies&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#propagate-to-caller&#34;&gt;Propagate to caller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#retry&#34;&gt;Retry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#log-and-continue&#34;&gt;Log and continue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#log-and-exit&#34;&gt;Log and exit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pkgerrors&#34;&gt;pkg/errors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#panic-and-recover&#34;&gt;Panic and Recover&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#packages-and-libraries&#34;&gt;Packages and Libraries&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#package-aliases&#34;&gt;Package aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#imported-unused-packages-for-side-effects&#34;&gt;Imported unused packages for side effects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#inspecting-a-package-api&#34;&gt;Inspecting a package API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#advanced-data-types&#34;&gt;Advanced Data Types&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#arrays&#34;&gt;Arrays&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#slices&#34;&gt;Slices&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#extending-slices&#34;&gt;Extending slices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#creating-a-slice-with-make&#34;&gt;Creating a slice with make&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#byte-slices&#34;&gt;Byte slices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#maps&#34;&gt;Maps&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#creating-maps&#34;&gt;Creating maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#crud-create-retrieve-update-delete-operations-with-maps&#34;&gt;CRUD (create retrieve update delete) operations with maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#named-types-user-defined-types&#34;&gt;Named types (user defined types)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#function-named-type&#34;&gt;Function named type&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#type-aliases&#34;&gt;Type aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#struct&#34;&gt;Struct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#struct-embedding&#34;&gt;Struct embedding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#field-tags&#34;&gt;Field tags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#struct-methods&#34;&gt;Struct methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#receiver-method-sets&#34;&gt;Receiver Method Sets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#interfaces&#34;&gt;Interfaces&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#interface-internals&#34;&gt;Interface internals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#warning---dont-assign-nil-variables-to-interfaces&#34;&gt;WARNING - dont assign nil variables to interfaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#type-assertion&#34;&gt;Type assertion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#type-switches&#34;&gt;Type switches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cool-cool-cool&#34;&gt;Cool cool cool&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#stdlib&#34;&gt;stdlib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tools&#34;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#make&#34;&gt;Make&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#vim-setup&#34;&gt;Vim setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#libraries&#34;&gt;Libraries&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#data&#34;&gt;Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#middleware&#34;&gt;Middleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#web&#34;&gt;Web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://golang.org/doc/effective_go.html&#34;&gt;Effective Go&lt;/a&gt; is a howto on writing idiomatic Go.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technical Analysis of ImageTragick (CVE-2016-3714)</title>
      <link>https://www.bencode.io/posts/2019-09-27-imagetragick/</link>
      <pubDate>Fri, 27 Sep 2019 20:14:11 +1000</pubDate>
      <guid>https://www.bencode.io/posts/2019-09-27-imagetragick/</guid>
      <description>&lt;p&gt;ImageMagick is a widely deployed, general purpose image processing library written in C. Over the past few years hundreds of security related issues have been identified. This paper considers one such instance of a remote code execution vulnerability discovered in 2016 under CVE-2016-3714.&lt;/p&gt;
&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;ImageMagick&lt;/em&gt; is a widely deployed, general purpose image processing library written in C, most commonly used to resize, transcode or annotate user supplied images on the web. Originally developed in 1987 and open sourced in 1990, with a large ecosystem of bindings for most programming languages, has established an enormous user base over the last 3 decades.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ROP (return oriented programming) chains</title>
      <link>https://www.bencode.io/posts/2019-09-07-rop-chain/</link>
      <pubDate>Sat, 07 Sep 2019 20:14:11 +1000</pubDate>
      <guid>https://www.bencode.io/posts/2019-09-07-rop-chain/</guid>
      <description>&lt;p&gt;An evolution on basic stack smashing, return oriented programming (or ROP) was first presented by Solar Designer in 1997, as an innovative solution to crafting a complete program by daisy chaining up instructions that already exist within the address space of the program.&lt;/p&gt;
&lt;p&gt;Because existing legitimate executable instructions are chained together, is an effective way of bypassing non-executable stack (DEP) and code signing mitigations employed by most modern OS&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;An attacker gains control of the IP by overflowing the stack (i.e. buffer overflow or stack smash), to hijack program control flow and then executes carefully chosen machine instruction sequences that are already present programs address space. The individual pieces are known as &lt;em&gt;gadgets&lt;/em&gt;. Each gadget typically ends in a return (&lt;code&gt;RET&lt;/code&gt;) instruction. Chained together, these gadgets allow an attacker to perform arbitrary operations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stack Canaries</title>
      <link>https://www.bencode.io/posts/2019-08-20-stack-canaries/</link>
      <pubDate>Tue, 20 Aug 2019 20:12:11 +1000</pubDate>
      <guid>https://www.bencode.io/posts/2019-08-20-stack-canaries/</guid>
      <description>&lt;p&gt;A popular buffer overflow prevention technique employed by some programs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Used to detect a stack buffer overflow before execution of malicious code can occur, by placing a small integer, the value of which is randomly chosen at program start, in memory just before the stack return pointer. Most buffer overflows overwrite memory from lower to higher memory addresses, so in order to overwrite the return pointer, the canary value must also be overwritten. This value is checked to make sure it has not changed before a routine uses the return pointer on the stack. This technique can greatly increase the difficulty of exploiting a stack buffer overflow because it forces the attacker to gain control of the instruction pointer by corrupting other important variables on the stack.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smashing the Stack</title>
      <link>https://www.bencode.io/posts/2019-08-04-stack-smash/</link>
      <pubDate>Sun, 04 Aug 2019 08:40:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-08-04-stack-smash/</guid>
      <description>&lt;p&gt;What&amp;rsquo;s a buffer overflow, and they can be exploited. Cover some prerequistite knowledge of (Intel x86) assembly and how a Von-Neumann machine works is needed. Attacking the stack is only one category of control flow attack, there are many others including heap allocators, race conditions, root exploits, ELF, networking, viruses, etc.&lt;/p&gt;
&lt;p&gt;The end game is to gain control of the instruction pointer (IP), and as a result contol flow of the program. But to set the scene, need to understand how this is even possible in the first place. All general purpose binary computers are bound by the laws of the turing machine, and its implementation architecture, the &lt;em&gt;Von-Neumann&lt;/em&gt; design.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GNU/Linux x86 platform support</title>
      <link>https://www.bencode.io/posts/2019-07-30-linux-x86-on-x64/</link>
      <pubDate>Tue, 30 Jul 2019 10:28:34 +1000</pubDate>
      <guid>https://www.bencode.io/posts/2019-07-30-linux-x86-on-x64/</guid>
      <description>&lt;p&gt;When you want to build and experiment with x86 (32-bit) based binaries on an x64 based linux kernel. This is often useful for reverse engineering and exploit proof of concepts, as x86 offers a number of simplicities over x64.&lt;/p&gt;
&lt;p&gt;On Kali (or I assume anything else debian based) add overall subsystem support with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dpkg --add-architecture i386
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then to get a working development environment:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt update
apt install libc-dev-i386-cross gdb-multiarch execstack gdb-peda lib32tinfo6 lib32ncurses6 lib32ncurses-dev gcc-7
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should be good to start compiling for an x86 target. Make sure to add &lt;code&gt;-m32&lt;/code&gt; to any &lt;code&gt;CFLAGS&lt;/code&gt; and &lt;code&gt;LDFLAGS&lt;/code&gt; parameters in the &lt;code&gt;Makefile&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exploit Development</title>
      <link>https://www.bencode.io/posts/2019-07-29-exploitdev/</link>
      <pubDate>Mon, 29 Jul 2019 09:04:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-07-29-exploitdev/</guid>
      <description>&lt;p&gt;A fundamental primer on exploit development on both Windows and Linux based OS&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;The classical classes of vulnerablilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;buffer overflow&lt;/li&gt;
&lt;li&gt;stack overflow&lt;/li&gt;
&lt;li&gt;heap overflow&lt;/li&gt;
&lt;li&gt;use after free&lt;/li&gt;
&lt;li&gt;out of bounds read&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;integer-overflow-and-netbsd&#34;&gt;Integer Overflow and NetBSD&lt;/h1&gt;
&lt;p&gt;Considered concrete &lt;a href=&#34;http://blog.infosectcbr.com.au/2018/01/netbsd-kernel-wscons-ioctl-vulnerable.html&#34;&gt;example&lt;/a&gt; in the NetBSD kernel, based on an incorrect coding style that is exposed to integer overflow during input validation.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;static int
set_cursor(struct tfb_softc *sc, struct wsdisplay_cursor *p)
{
#define cc (&amp;amp;sc-&amp;gt;sc_cursor)
        u_int v, index = 0, count = 0, icount = 0;
        uint8_t r[2], g[2], b[2], image[512], mask[512];
        int error, s;

        v = p-&amp;gt;which;
        if (v &amp;amp; WSDISPLAY_CURSOR_DOCMAP) {
                index = p-&amp;gt;cmap.index;
                count = p-&amp;gt;cmap.count;
                if (index &amp;gt;= 2 || (index + count) &amp;gt; 2)
+++ integer overflow
                        return (EINVAL);
                error = copyin(p-&amp;gt;cmap.red, &amp;amp;r[index], count);
                if (error)
                        return error;
                error = copyin(p-&amp;gt;cmap.green, &amp;amp;g[index], count);
                if (error)
                        return error;
                error = copyin(p-&amp;gt;cmap.blue, &amp;amp;b[index], count);
                if (error)
                        return error;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note the overflow, about 1/2 way down. Just imagine if &lt;code&gt;index&lt;/code&gt; was a really large value that overflowed 32 bits. A more robust way to code the validation check, can be seen in the OpenBSD code:&lt;/p&gt;</description>
    </item>
    <item>
      <title>My LaTeX, Pandoc and Makefile workflow for writing papers in 2022</title>
      <link>https://www.bencode.io/posts/latex/</link>
      <pubDate>Sun, 26 May 2019 17:48:10 +1100</pubDate>
      <guid>https://www.bencode.io/posts/latex/</guid>
      <description>&lt;p&gt;Contents&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#install-base-tex-system&#34;&gt;Install base Tex system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pandoc&#34;&gt;Pandoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#author-paper&#34;&gt;Author paper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#create-bibliography-(bibtex)&#34;&gt;Create bibliography (BibTeX)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#render-the-paper-as-pdf&#34;&gt;Render the paper as PDF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#use-git&#34;&gt;Use Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resources&#34;&gt;Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;LaTeX is a high-quality typesetting system; features are designed for the production of technical and scientific documentation. It’s the de-facto standard for the communication and publication of scientific documents, and available as free software. LaTeX is actually built on the TeX typesetting system created by the legendary &lt;a href=&#34;https://en.wikipedia.org/wiki/Donald_Knuth&#34;&gt;Donald Knuth&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;LaTeX is nothing more than a series of TeX macros, providing ready made commands for common formatting and layout needs, such as section headings, footnotes, bibliographies and cross references.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Digital Signatures</title>
      <link>https://www.bencode.io/posts/2019-05-24-signatures/</link>
      <pubDate>Fri, 24 May 2019 21:17:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-05-24-signatures/</guid>
      <description>&lt;p&gt;The sequence of tasks undertaken that make digital signatures possible. This does have a slight XML flavour to it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A digital signature is a mathematical scheme for verifying the authenticity of digital messages.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The concept of digital signature completely hinges on assymetric cryptography (such as DSA or RSA).&lt;/p&gt;
&lt;h2 id=&#34;to-validate-a-signature&#34;&gt;To validate a signature&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;First the message can be normalised, and in the case of XML will use something like the &amp;ldquo;Exclusive XML Canonicalization&amp;rdquo; (XML-C14N), so we&amp;rsquo;re comparing apples with apples. This will disgard things like usage of white space.&lt;/li&gt;
&lt;li&gt;Using the normalised representation, compute a hash (e.g. SHA1) of the timestamp (contained WS-Security header) and entire message payload (the SOAP body).&lt;/li&gt;
&lt;li&gt;Using the public key from the partner organisation certificate, RSA decrypt the hash computed by partner organisation.&lt;/li&gt;
&lt;li&gt;If the two hashes are identical, we know the message has not been tampered with.&lt;/li&gt;
&lt;li&gt;(optional) Validate the timestamp (TTL) defined by partner organisation (typically 7 minutes from the original transmission time by the sender). To mitigate possible damage caused by replay attacks.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;to-create-a-signature&#34;&gt;To create a signature&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Wraps the response message in a SOAP envelope, which includes some WS-Security related headers including a timestamp.&lt;/li&gt;
&lt;li&gt;The timestamp is set to a configurable number of minutes (e.g. 10 minutes) in the future.&lt;/li&gt;
&lt;li&gt;Normalises the message using the &amp;ldquo;Exclusive XML Canonicalization&amp;rdquo; (XML-C14N)&lt;/li&gt;
&lt;li&gt;Using the normalised message form, compute a (e.g. SHA1) hash of the timestamp (WS-Security header) and entire response message payload (e.g. the SOAP body).&lt;/li&gt;
&lt;li&gt;Uses the private key of signing certificate, RSA signs the computed hash, and stores the result in the relevant security header (the SignatureValue header).&lt;/li&gt;
&lt;li&gt;The message is then delivered to partner organisation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For the above to work, there needs to be some established agreement as to the specific cipher suites and canonicalisation method used. This is all&lt;/p&gt;</description>
    </item>
    <item>
      <title>React v19</title>
      <link>https://www.bencode.io/posts/react/</link>
      <pubDate>Sun, 05 May 2019 22:08:10 +1000</pubDate>
      <guid>https://www.bencode.io/posts/react/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#react&#34;&gt;React&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#react-no-frills&#34;&gt;React No Frills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tools&#34;&gt;Tools&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#npm&#34;&gt;npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#prettier&#34;&gt;Prettier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#eslint&#34;&gt;ESLint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#vite&#34;&gt;Vite&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#vite-proxy&#34;&gt;Vite Proxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#typescript&#34;&gt;TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bleeding-edge-and-alternative-tools&#34;&gt;Bleeding Edge and Alternative Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#jsx&#34;&gt;JSX&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dom-control&#34;&gt;DOM control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#styling&#34;&gt;Styling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#rendering-lists&#34;&gt;Rendering Lists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#handling-events&#34;&gt;Handling Events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#passing-parameters-to-event-handlers&#34;&gt;Passing Parameters to Event Handlers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#passing-jsx-as-props&#34;&gt;Passing JSX as Props&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#react-hooks&#34;&gt;React Hooks&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#usestate&#34;&gt;useState&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#useeffect&#34;&gt;useEffect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#custom-hooks&#34;&gt;Custom Hooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#usecontext&#34;&gt;useContext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#useref&#34;&gt;useRef&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#forms-and-user-input&#34;&gt;Forms and User Input&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#push-cart-to-server&#34;&gt;Push Cart to Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#react-ecosystem&#34;&gt;React Ecosystem&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#tanstack-router&#34;&gt;TanStack Router&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#vite-setup&#34;&gt;Vite Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#routetreegents&#34;&gt;routeTree.gen.ts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#router-setup&#34;&gt;Router Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tanstack-query&#34;&gt;TanStack Query&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resources&#34;&gt;Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;react&#34;&gt;React&lt;/h2&gt;
&lt;p&gt;React is a JavaScript &lt;em&gt;library&lt;/em&gt; for building component based interactive UI&amp;rsquo;s.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Web Apps</title>
      <link>https://www.bencode.io/posts/2019-04-28-go-web/</link>
      <pubDate>Sun, 28 Apr 2019 17:13:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-04-28-go-web/</guid>
      <description>&lt;p&gt;A quick tour of doing web with golang, all living off the land with Go&amp;rsquo;s built-in &lt;a href=&#34;https://golang.org/pkg/&#34;&gt;standard library&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;packages&#34;&gt;Packages&lt;/h1&gt;
&lt;p&gt;Working example, where the web server and templating code in source file &lt;code&gt;$GOPATH/src/github.com/bm4cs/gotime/web/server.go&lt;/code&gt;. It does lots of things, but exports function &lt;code&gt;StartServer&lt;/code&gt; (upper case first character means publically exported).&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;StartServer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The main func in &lt;code&gt;$GOPATH/src/github.com/bm4cs/gotime/myapp/app.go&lt;/code&gt; can import the web package:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;github.com/bm4cs/gotime/web&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;StartServer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;handling-requests&#34;&gt;Handling Requests&lt;/h1&gt;
&lt;p&gt;The &lt;a href=&#34;https://golang.org/pkg/net/http/&#34;&gt;http&lt;/a&gt; package from the standard library, provides a ton a out of the box functionality. &lt;a href=&#34;https://golang.org/doc/articles/wiki/&#34;&gt;Writing Web Applications&lt;/a&gt; on golang.org is a very pragmatic guide.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arch Linux</title>
      <link>https://www.bencode.io/posts/arch/</link>
      <pubDate>Sat, 06 Apr 2019 11:32:10 +1100</pubDate>
      <guid>https://www.bencode.io/posts/arch/</guid>
      <description>&lt;p&gt;After witnessing insane minimalism paired with a tiler (tiling window manager), knew it was my time to take the pilgrimage to Arch Linux.&lt;/p&gt;
&lt;p&gt;Some characteristics that make Arch unique:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/index.php/Arch_terminology#The_Arch_Way&#34;&gt;The Arch Way&lt;/a&gt; embody the principles behind Arch Linux; simplicity, modernity, pragmatism, user centrality and versatility.&lt;/li&gt;
&lt;li&gt;Forces one to build the system up by hand.&lt;/li&gt;
&lt;li&gt;This encourages you to question the role of each component of the system, and available options to satisfy that component (e.g. the terminal emulator).&lt;/li&gt;
&lt;li&gt;The result is a highly tailored and minimal system that meets precisely your needs.&lt;/li&gt;
&lt;li&gt;Practical and pragmatic documentation. The &lt;a href=&#34;https://wiki.archlinux.org/&#34;&gt;Arch Wiki&lt;/a&gt; is the gold standard when it comes to documentation.&lt;/li&gt;
&lt;li&gt;The Arch User Repository (AUR) is a treasure chest of pre-packaged useful recent software. Somehow every program I&amp;rsquo;ve ever needed has been available on AUR.&lt;/li&gt;
&lt;li&gt;Rolling upgrades.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Arch was born in 2001, when Canadian programmer Judd Vinet, inspired by the elegance of systems such as Slackware and the BSD&amp;rsquo;s, set out to build his own distro based on a similar ethos. The first formal release, 0.1, dropped on March 11, 2002.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Black belt Elasticsearch</title>
      <link>https://www.bencode.io/posts/2019-03-27-elastic-blackbelt/</link>
      <pubDate>Wed, 27 Mar 2019 08:44:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-03-27-elastic-blackbelt/</guid>
      <description>&lt;p&gt;Some more advanced Elasticsearch wisdom I gleaned from Jason Wong and Mark Laney from Elastic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contents&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#environment-with-config&#34;&gt;Environment with Config&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#x-pack-security-the-1337-way&#34;&gt;X-Pack Security (the 1337 way)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#roles&#34;&gt;Roles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#built-in-query-web-ui-batteries-included&#34;&gt;Built-in Query Web UI (batteries included)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#internals&#34;&gt;Internals&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#lucene&#34;&gt;Lucene&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#segments&#34;&gt;Segments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#elasticsearch-indexing&#34;&gt;Elasticsearch Indexing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#transaction-log-and-flushing&#34;&gt;Transaction Log and Flushing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#doc-values&#34;&gt;Doc Values&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#caching&#34;&gt;Caching&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#field-modelling&#34;&gt;Field Modelling&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#typing&#34;&gt;Typing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#denormalising&#34;&gt;Denormalising&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#range-types&#34;&gt;Range Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mapping-parameters&#34;&gt;Mapping Parameters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#fixing-data&#34;&gt;Fixing Data&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#painless&#34;&gt;Painless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reindexing-apis&#34;&gt;Reindexing API&amp;rsquo;s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#picking-up-mapping-changes&#34;&gt;Picking up Mapping Changes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#multi-fields&#34;&gt;Multi-fields&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#custom-marker-flag-field&#34;&gt;Custom Marker (flag) Field&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#fixing-fields&#34;&gt;Fixing Fields&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#advanced-search-and-aggregations&#34;&gt;Advanced Search and Aggregations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#patterns&#34;&gt;Patterns&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#wildcard-query&#34;&gt;Wildcard Query&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#regexp-qury&#34;&gt;Regexp Qury&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#null&#34;&gt;Null&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#script-painless-query&#34;&gt;Script (painless) Query&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#script-field&#34;&gt;Script Field&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#performance-considerations&#34;&gt;Performance Considerations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#search-templates&#34;&gt;Search Templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#aggregations&#34;&gt;Aggregations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#percentile&#34;&gt;Percentile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#top-hits&#34;&gt;Top Hits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#scripted-painless-aggregations&#34;&gt;Scripted (painless) Aggregations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#significant-terms-aggregation&#34;&gt;Significant Terms Aggregation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pipeline-aggregations&#34;&gt;Pipeline Aggregations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cluster-management&#34;&gt;Cluster Management&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dedicated-nodes&#34;&gt;Dedicated Nodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hot-warm-architecture&#34;&gt;Hot Warm Architecture&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#tags&#34;&gt;Tags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#verify-shard-allocation&#34;&gt;Verify Shard Allocation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#forced-awareness&#34;&gt;Forced Awareness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#capacity-planning&#34;&gt;Capacity Planning&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#shard-allocation&#34;&gt;Shard Allocation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#litmus-test&#34;&gt;Litmus Test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#primary-shards&#34;&gt;Primary Shards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#scaling-with-indices&#34;&gt;Scaling with Indices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#scaling-with-replicas&#34;&gt;Scaling with Replicas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resources&#34;&gt;Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#time-based-data&#34;&gt;Time Based Data&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#apis-for-managing-indices&#34;&gt;API&amp;rsquo;s for Managing Indices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#document-modelling&#34;&gt;Document Modelling&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#nested-objects&#34;&gt;Nested Objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#nested-aggregations&#34;&gt;Nested Aggregations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#parent-child-relationships&#34;&gt;Parent Child Relationships&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#argh-which-technique-is-best&#34;&gt;Argh Which Technique is Best?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kibana-considerations&#34;&gt;Kibana Considerations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#monitoring&#34;&gt;Monitoring&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#task-management-api&#34;&gt;Task Management API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-cat-api&#34;&gt;The cat API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#performance-issues&#34;&gt;Performance Issues&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#thread-pool-queues&#34;&gt;Thread Pool Queues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hotthreads-api&#34;&gt;hot_threads API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#indexing-slow-log&#34;&gt;Indexing Slow Log&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#search-slow-log&#34;&gt;Search Slow Log&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-profile-api&#34;&gt;The Profile API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#x-pack-monitoring&#34;&gt;X-Pack Monitoring&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#alerting&#34;&gt;Alerting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#from-dev-to-production&#34;&gt;From Dev to Production&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#disabling-dynamic-indices&#34;&gt;Disabling Dynamic Indices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#production-mode&#34;&gt;Production Mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#best-practices&#34;&gt;Best Practices&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#network-best-practices&#34;&gt;Network Best Practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#storage-best-practices&#34;&gt;Storage Best Practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#hardware-selection&#34;&gt;Hardware Selection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#throttles&#34;&gt;Throttles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#jvm&#34;&gt;JVM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#poor-query-performance&#34;&gt;Poor Query Performance&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#always-filter&#34;&gt;Always Filter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#aggregating-too-many-docs&#34;&gt;Aggregating Too Many Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#denormalise-first&#34;&gt;Denormalise First&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#too-many-shards&#34;&gt;Too many shards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#unnecessary-scripting&#34;&gt;Unnecessary Scripting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cross-cluster-replication&#34;&gt;Cross Cluster Replication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#upgrades&#34;&gt;Upgrades&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#rolling-upgrade&#34;&gt;Rolling Upgrade&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;environment-with-config&#34;&gt;Environment with Config&lt;/h1&gt;
&lt;p&gt;Can use environment variables within &lt;code&gt;elasticsearch.yml&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elasticsearch Basics</title>
      <link>https://www.bencode.io/posts/2019-03-25-elastic-basics/</link>
      <pubDate>Mon, 25 Mar 2019 09:26:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-03-25-elastic-basics/</guid>
      <description>&lt;p&gt;Some Elasticsearch wisdom I gleaned from Jason Wong and Mark Laney from Elastic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contents&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#use-cases&#34;&gt;Use cases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#log-stash-vs-beats&#34;&gt;Log stash vs Beats?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#time-series-vs-static-data&#34;&gt;Time Series vs Static Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#logstash&#34;&gt;Logstash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#installation&#34;&gt;Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#starting-and-stopping-elasticsearch&#34;&gt;Starting and Stopping Elasticsearch&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#killing&#34;&gt;Killing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#communication&#34;&gt;Communication&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#discovery-module-networking&#34;&gt;Discovery module (networking)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#security&#34;&gt;Security&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#read-only&#34;&gt;Read-only&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#enabling-x-pack-elasticsearch-security&#34;&gt;Enabling X-Pack (Elasticsearch Security)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#crud&#34;&gt;CRUD&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#ingestion&#34;&gt;Ingestion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reading&#34;&gt;Reading&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#search&#34;&gt;Search&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#query-and-filter-contexts&#34;&gt;Query and Filter Contexts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mapping&#34;&gt;Mapping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#inverted-index&#34;&gt;Inverted Index&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#multi-fields-keyword-fields&#34;&gt;Multi Fields (keyword fields)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#anatomy-of-an-analyzer&#34;&gt;Anatomy of an Analyzer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#custom-analyzer&#34;&gt;Custom Analyzer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-reindex-api&#34;&gt;The reindex API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#node-types&#34;&gt;Node Types&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#cluster-state&#34;&gt;Cluster state&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#shards&#34;&gt;Shards&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#anatomy-of-search-shards&#34;&gt;Anatomy of Search (Shards)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#troubleshooting&#34;&gt;Troubleshooting&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#configuration&#34;&gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#responses&#34;&gt;Responses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cluster-and-shard-health&#34;&gt;Cluster and Shard Health&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#diagnosing-issues&#34;&gt;Diagnosing Issues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#improving-search-results&#34;&gt;Improving Search Results&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#multi-field-search&#34;&gt;Multi-field Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#boosting&#34;&gt;Boosting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#fuzziness&#34;&gt;Fuzziness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#exact-terms&#34;&gt;Exact Terms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#sorting&#34;&gt;Sorting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#paging&#34;&gt;Paging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#highlighting&#34;&gt;Highlighting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#aggregations&#34;&gt;Aggregations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#best-practices&#34;&gt;Best Practices&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#index-aliases&#34;&gt;Index Aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#index-templates&#34;&gt;Index Templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#scroll-search&#34;&gt;Scroll Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cluster-backup&#34;&gt;Cluster Backup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;use-cases&#34;&gt;Use cases&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Search&lt;/li&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;li&gt;Metrics - unlike logs, are typically not in a text format.&lt;/li&gt;
&lt;li&gt;Business analytics - the aggregation and analysis of patterns (e.g. bucketing aggregations, ML jobs)&lt;/li&gt;
&lt;li&gt;Security analytics -&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;log-stash-vs-beats&#34;&gt;Log stash vs Beats?&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Beats&lt;/em&gt; are lightweight data shippers, but are not appropriate for ETL type stashing.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Logstash&lt;/em&gt; on the other hand, can take handle these concerns. But requires a much heavier runtime (JVM).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An official SIEM solution is currently under development.&lt;/p&gt;</description>
    </item>
    <item>
      <title>roff</title>
      <link>https://www.bencode.io/posts/2019-03-15-groff/</link>
      <pubDate>Fri, 15 Mar 2019 12:51:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-03-15-groff/</guid>
      <description>&lt;p&gt;&lt;em&gt;Update 2019-05-26&lt;/em&gt;: While having some familarity with roff is useful, since the time of originally have discovered &lt;a href=&#34;https://pandoc.org/&#34;&gt;Pandoc&lt;/a&gt; which can convert between many document formats, such as from &lt;em&gt;markdown&lt;/em&gt; to &lt;em&gt;roff&lt;/em&gt;. Writing documentation in markdown is just hard to beat.&lt;/p&gt;
&lt;p&gt;As the first text formatting program built for UNIX in 1970 running on a PDP-7, &lt;code&gt;roff&lt;/code&gt; was a port of the BCPL program &lt;code&gt;RUNOFF&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Over the years &lt;code&gt;roff&lt;/code&gt; has evolved into &lt;code&gt;troff&lt;/code&gt; and the excellent GNU version &lt;code&gt;groff&lt;/code&gt;. Similar to other formatting systems, such as LaTeX, &lt;code&gt;groff&lt;/code&gt; features a macro system, targetted at authoring certain types of text documents. In spite of its old age, &lt;code&gt;roff&lt;/code&gt; is still in wide spread use today, for producing text such as UNIX manual pages, software books, system documentation and standards documents.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kibana</title>
      <link>https://www.bencode.io/posts/2019-01-24-kibana/</link>
      <pubDate>Thu, 24 Jan 2019 18:23:05 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-01-24-kibana/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#intro&#34;&gt;Intro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#install&#34;&gt;Install&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#package-yum-or-deb&#34;&gt;Package (yum or deb)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#x-pack&#34;&gt;X-Pack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#configuration&#34;&gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#verify&#34;&gt;Verify&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#index-patterns&#34;&gt;Index Patterns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;intro&#34;&gt;Intro&lt;/h1&gt;
&lt;p&gt;Elastics node.js web frontend in the stack, and (by default) runs on port 5601. It&amp;rsquo;s wise to install Kibana on its own infrastructure (i.e. isolated from the Elasticsearch cluster). The node process is light (compared to the JVM anyway) consuming hundreds of MB.&lt;/p&gt;
&lt;h1 id=&#34;install&#34;&gt;Install&lt;/h1&gt;
&lt;h2 id=&#34;package-yum-or-deb&#34;&gt;Package (yum or deb)&lt;/h2&gt;
&lt;p&gt;While available as a tarball, the nicest option is to go with a package, takes care of plumbing such as &lt;code&gt;systemd&lt;/code&gt;, and general system integration such as &lt;code&gt;/etc/kibana&lt;/code&gt; for configuration, logs and data files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Packet Analysis Basics</title>
      <link>https://www.bencode.io/posts/2019-01-15-packets/</link>
      <pubDate>Tue, 15 Jan 2019 21:29:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-01-15-packets/</guid>
      <description>&lt;p&gt;An evolving list of resources around packet analysis tips and tricks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#terminology&#34;&gt;Terminology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cheat-sheets&#34;&gt;Cheat sheets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#anatomy-of-a-packet&#34;&gt;Anatomy of a Packet&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#osi-model-layers&#34;&gt;OSI Model Layers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#link-layer&#34;&gt;Link Layer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#ether-type-fields&#34;&gt;Ether Type Fields&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#network-layer&#34;&gt;Network layer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#transport-layer&#34;&gt;Transport layer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tools&#34;&gt;Tools&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#wireshark-and-tshark&#34;&gt;Wireshark (and tshark)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tcpdump&#34;&gt;tcpdump&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#useful-switches&#34;&gt;Useful switches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#examples&#34;&gt;Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#real-world-use-cases&#34;&gt;Real world use-cases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#netsniff-ng&#34;&gt;netsniff-ng&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#analysis&#34;&gt;Analysis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;terminology&#34;&gt;Terminology&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;SOC&lt;/em&gt;, or Security Operations Center, is a central location composed of leading edge tools, technology and peeps (intel gatherers, analysts) that deals with security issues at an organisational and technical level.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;IDS&lt;/em&gt;, or Intrusion Detection System, is a device that monitors network traffic for threats to the environment, proactively alert the SOC analyst of potential problems.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;IPS&lt;/em&gt;, or an Intrusion Prevention System, is more sits inline, and can take active or passive mitigation actions.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;SIEM&lt;/em&gt;, or Security Information and Event Management, is all about the collection and aggregation of alerts and logs for event tracking, retention and correlation from multiple hosts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;cheat-sheets&#34;&gt;Cheat sheets&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sans.org/security-resources/tcpip.pdf&#34;&gt;SANS TCP/IP and tcpdump Pocket Reference Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tools.ietf.org/html/rfc790&#34;&gt;RFC 790 Assigned Internet Protocol Numbers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tools.ietf.org/html/rfc791&#34;&gt;RFC 791 Internet Protocol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;anatomy-of-a-packet&#34;&gt;Anatomy of a Packet&lt;/h1&gt;
&lt;h2 id=&#34;osi-model-layers&#34;&gt;OSI Model Layers&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;7: application: HTTP, FTP, DNS&lt;/li&gt;
&lt;li&gt;6: presentation: SSL, JPEG&lt;/li&gt;
&lt;li&gt;5: session: SQL, SCP, NetBIOS, SOAP&lt;/li&gt;
&lt;li&gt;4: transport: TCP, UDP&lt;/li&gt;
&lt;li&gt;3: network: IPv4, IPv6, ICMP&lt;/li&gt;
&lt;li&gt;2: data-link: PPP, ARP, CDP&lt;/li&gt;
&lt;li&gt;1: physical: Ethernet, Bluetooth&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Layers 2-4 will be of primary interest.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSO with Active Directory</title>
      <link>https://www.bencode.io/posts/2019-01-04-directory-services/</link>
      <pubDate>Fri, 04 Jan 2019 11:10:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-01-04-directory-services/</guid>
      <description>&lt;p&gt;Providing SSO by integrating Linux (or FreeBSD) with a directory service, like Microsoft Active Directory (AD), is no where as daunting as it once was, and highlights some fascinating subsystems that enable users to be defined from a variety of data sources (such as LDAP) other than just the traditional &lt;code&gt;/etc/passwd&lt;/code&gt; file.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#initial-setup&#34;&gt;Initial setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kerberos&#34;&gt;Kerberos&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#create-service-keytab-on-ad&#34;&gt;Create service keytab on AD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#system-security-services-daemon-sssd&#34;&gt;System Security Services Daemon (sssd)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#name-service-switch-nss&#34;&gt;Name Service Switch (nss)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pam-pluggable-authentication-module&#34;&gt;PAM (Pluggable Authentication Module)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#testing&#34;&gt;Testing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#listing-users&#34;&gt;Listing Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#listing-groups&#34;&gt;Listing Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#id&#34;&gt;id&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#troubleshooting&#34;&gt;Troubleshooting&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#samba-smbd-join-issues&#34;&gt;Samba (smbd) Join Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#clock-synchronisation-issues&#34;&gt;Clock Synchronisation Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#clearing-sssd-cache&#34;&gt;Clearing SSSD Cache&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#end-to-end-script-for-ansible&#34;&gt;End to end script (for Ansible)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;initial-setup&#34;&gt;Initial setup&lt;/h1&gt;
&lt;p&gt;Update &lt;code&gt;/etc/resolv.conf&lt;/code&gt; to bind to the AD DNS server. This will enable &lt;code&gt;realmd&lt;/code&gt; to discover and join the active directory domain (i.e. kerberos realm).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Logstash</title>
      <link>https://www.bencode.io/posts/2018-12-07-logstash/</link>
      <pubDate>Fri, 07 Dec 2018 20:51:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-12-07-logstash/</guid>
      <description>&lt;p&gt;A quick walkthrough of Logstash, the ETL engine offered by the Elastic Stack.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Logstash is an open source, server-side data processing pipeline that ingests data from a multitude of sources simultaneously, transforms it, and then sends it to your favorite &lt;strong&gt;stash&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Logstash gained its initial popularity with log and metric collection, such as &lt;code&gt;log4j&lt;/code&gt; logs, Apache web logs and &lt;code&gt;syslog&lt;/code&gt;. Its application has broadened, to all kinds of data sources like large scale event streams, webhooks, database and message queue integration. Once data is transformed and cleaned up is routed to a final destination (i.e. the stash), Elasticsearch is one option, but lots of other choices are there (mongo, S3, Nagios, IRC, email).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elasticsearch</title>
      <link>https://www.bencode.io/posts/2018-11-11-elastic/</link>
      <pubDate>Sun, 11 Nov 2018 20:31:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-11-11-elastic/</guid>
      <description>&lt;h1 id=&#34;contents&#34;&gt;Contents&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#basic-terminology&#34;&gt;Basic terminology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#installation&#34;&gt;Installation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#java&#34;&gt;Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#distribution&#34;&gt;Distribution&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#package-yum-or-deb&#34;&gt;Package (yum or deb)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tarball&#34;&gt;tarball&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#configuration&#34;&gt;Configuration&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#core&#34;&gt;Core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#memory&#34;&gt;Memory&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#verify&#34;&gt;Verify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#firewall&#34;&gt;Firewall&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#rhelcentos-7&#34;&gt;RHEL/Centos 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-rest-api&#34;&gt;The REST API&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#health&#34;&gt;Health&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#statistics&#34;&gt;Statistics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#list-indicies&#34;&gt;List Indicies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#list-nodes&#34;&gt;List Nodes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#document-operations&#34;&gt;Document Operations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#create-index&#34;&gt;Create Index&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#with-mappings&#34;&gt;With Mappings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#index-naming-conventions&#34;&gt;Index Naming Conventions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#populating-an-index&#34;&gt;Populating an Index&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#auto-document-identifiers&#34;&gt;Auto Document Identifiers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#retreiving-documents&#34;&gt;Retreiving Documents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#existance-checking&#34;&gt;Existance Checking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#updating-documents&#34;&gt;Updating Documents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#deleting-documents&#34;&gt;Deleting Documents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#deleting-an-index&#34;&gt;Deleting an Index&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reindexing-an-index&#34;&gt;Reindexing an Index&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#aliasing-an-index&#34;&gt;Aliasing an Index&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-mapping-api&#34;&gt;The Mapping API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-multi-get-api&#34;&gt;The Multi Get API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-bulk-api&#34;&gt;The Bulk API&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#bulk-loading-from-json-file&#34;&gt;Bulk Loading from JSON File&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#searching&#34;&gt;Searching&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#background&#34;&gt;Background&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-tfidf-algorithm&#34;&gt;The TF/IDF Algorithm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-query-dsl&#34;&gt;The Query DSL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#query-context&#34;&gt;Query Context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#filter-context&#34;&gt;Filter Context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#stateful-vs-stateless&#34;&gt;Stateful vs Stateless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#searching-multiple-indices&#34;&gt;Searching Multiple Indices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#searching-with-query-string-params&#34;&gt;Searching with Query String Params&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#search-multiple-indexes&#34;&gt;Search Multiple Indexes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#searching-using-the-request-body&#34;&gt;Searching using the Request Body&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#term-search&#34;&gt;Term Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#full-text-search&#34;&gt;Full Text Search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#boolean-compound-queries&#34;&gt;Boolean Compound Queries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#aggregations&#34;&gt;Aggregations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#metric-aggregations&#34;&gt;Metric Aggregations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#cardinality-aggregation&#34;&gt;Cardinality Aggregation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#fielddata-with-the-mapping-api&#34;&gt;FieldData with The Mapping API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bucketing-aggregations&#34;&gt;Bucketing Aggregations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#nested-aggregations&#34;&gt;Nested Aggregations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#filter-aggregation&#34;&gt;Filter Aggregation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#x-pack&#34;&gt;X-Pack&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#security&#34;&gt;Security&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#kerberos-with-active-directory&#34;&gt;Kerberos with Active Directory&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#krb5conf&#34;&gt;krb5.conf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kerberos-principals-keytab-fun&#34;&gt;Kerberos Principals (keytab fun)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#msktutil&#34;&gt;msktutil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ktpass&#34;&gt;ktpass&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#elasticsearch-configuration&#34;&gt;Elasticsearch Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#x-pack-setup-users&#34;&gt;X-Pack Setup Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kibana-configuration&#34;&gt;Kibana Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#create-users&#34;&gt;Create Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#test-it&#34;&gt;Test it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#troubleshooting&#34;&gt;Troubleshooting&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#gss-context-negotiation-failure&#34;&gt;gss context negotiation failure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#defective-token-detected&#34;&gt;Defective token detected&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kerberos-clock-skew&#34;&gt;Kerberos clock skew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#logon-name-already-exists-in-the-enterprise&#34;&gt;Logon name already exists in the enterprise&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#creating-test-data&#34;&gt;Creating Test Data&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;basic-terminology&#34;&gt;Basic terminology&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Node&lt;/em&gt; is a single server within a &lt;em&gt;cluster&lt;/em&gt;. Nodes perform the actual indexing and search work. Each node has a unique id and name.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Cluster&lt;/em&gt; a collection of nodes that work together to achieve a shared goal. Is assigned a unique name, which by default is &lt;code&gt;elasticsearch&lt;/code&gt;. This name is used to join nodes.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Index&lt;/em&gt; is a collection of similar (not the same) documents, and is uniquely identified by name. By default every index is given 5 shards and 1 replica.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Types&lt;/em&gt; represents an entity with a similar set of characteristics, and in essence are a way of partitioning documents up. For example book reviews and book comments could each be modelled as types.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Document&lt;/em&gt; is the unit of information to be indexed. Represented as JSON. Every document must have a type and an index it belongs to.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Shards&lt;/em&gt; are the division of an index across nodes. This enables the cluster to parallise the work of index store and retreival operations.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Replicas&lt;/em&gt; clone shards across other nodes one or more times, providing high availability (in the event an individual shard node fails) and increasing search throughput.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;/h1&gt;
&lt;h2 id=&#34;java&#34;&gt;Java&lt;/h2&gt;
&lt;p&gt;Make sure an Oracle 8 or 10 JVM is available. Elastic 6.4.x interestingly &lt;a href=&#34;https://www.elastic.co/support/matrix#matrix_jvm&#34;&gt;JVM support matrix&lt;/a&gt; only supports four JVM&amp;rsquo;s.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CNO Attackers Strategy Essay</title>
      <link>https://www.bencode.io/posts/2018-09-18-cno-essay/</link>
      <pubDate>Tue, 18 Sep 2018 18:51:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-09-18-cno-essay/</guid>
      <description>&lt;p&gt;A paper I prepared as part of the &lt;a href=&#34;https://www.unsw.adfa.edu.au/degree/postgraduate-coursework/master-cyber-security-8628&#34;&gt;UNSW Master of Cyber Security&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alternately available as &lt;a href=&#34;https://github.com/bm4cs/junkyard/blob/master/latex/essays/201809-cybersec-cno-strategy/cybersec-cno-strategy-essay.tex&#34;&gt;LaTeX&lt;/a&gt; and &lt;a href=&#34;https://www.bencode.io/images/cybersec-cno-strategy-essay.pdf&#34;&gt;PDF&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;This paper discusses the motivations behind computer network exploitation, the general lifecycle of an attack operation, and the frictions and asymmetries that exist between both the attacker and the efender. One of the greatest challenges is fitting the ever-increasing and changing amount of information into a whole plan or framework to develop the right strategies to prevent such attacks. Armed with his knowledge seek out the creation of a structured general purpose framework for developing offensive strategies, the components described within it, its design philosophy, and how it can be used. It is eant to provide a concrete and structured approach to CNO strategy development.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git</title>
      <link>https://www.bencode.io/posts/2018-08-11-git/</link>
      <pubDate>Sat, 11 Aug 2018 18:43:19 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-08-11-git/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#aliases&#34;&gt;Aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#common-tasks&#34;&gt;Common tasks&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#undo-ing&#34;&gt;Undo-ing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#diff-ing&#34;&gt;Diff-ing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pushing-and-pulling&#34;&gt;Pushing and pulling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#patches&#34;&gt;Patches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#uncommon-tasks&#34;&gt;Uncommon tasks&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#branch-name-in-bash-prompt-ps1&#34;&gt;Branch name in Bash prompt (PS1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#discover-large-commits-in-history&#34;&gt;Discover large commits in history&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#concepts&#34;&gt;Concepts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#rebase-vs-merge&#34;&gt;Rebase vs Merge&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#merge&#34;&gt;Merge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#rebase&#34;&gt;Rebase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#interactive-rebasing--i&#34;&gt;Interactive rebasing (-i)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#submodules&#34;&gt;Submodules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#detached-head&#34;&gt;Detached Head&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;aliases&#34;&gt;Aliases&lt;/h2&gt;
&lt;p&gt;From my &lt;a href=&#34;https://github.com/bm4cs/dotfiles/blob/master/git/gitconfig&#34;&gt;.gitconfig&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[alias]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;config --get-regexp &amp;#39;^alias.*&amp;#39; # list available aliases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# add and commit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;add
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    aa = add --all
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    ac = !git add . &amp;amp;&amp;amp; git commit -am
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    ap = add -p
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    c = commit --verbose
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    ca = commit -a --verbose
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    cm = commit -m
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    cam = commit -a -m
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    m = commit --amend --verbose
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    uncommit = reset --soft HEAD~1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# branching&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;ba&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;branch -a
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    bd = branch -d
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    bD = branch -D
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    branches = branch --all
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    branchrename = branch --move
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    branchesdiffed = !git branch | grep -i &amp;#34;indiff&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    branchesundiffed = !git branch | grep -v -i &amp;#34;indiff&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    cleanmerged = !git branch --merged | grep -v \&amp;#34;\\*\&amp;#34; | xargs -n 1 git branch -d # remove merged branches
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    co = checkout
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    cob = checkout -b
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    wipelocal = checkout .&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# diff&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;d&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;diff
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    ds = diff --stat
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    dc = diff --cached
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    f = fetch -p&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# remote&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;push
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    pr = pull --rebase
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    pushitgood = push -u origin --all
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    rao = remote add origin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# rebase&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;rb&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;rebase
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    rba = rebase --abort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    rbc = rebase --continue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    rbs = rebase --skip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;st&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;status -sb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    plog = log --graph --pretty=&amp;#39;format:%C(red)%d%C(reset) %C(yellow)%h%C(reset) %ar %C(green)%aN%C(reset) %s&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    tlog = log --stat --since=&amp;#39;1 Day Ago&amp;#39; --graph --pretty=oneline --abbrev-commit --date=relative
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    lg = log --color --graph --pretty=format:&amp;#39;%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)&amp;lt;%an&amp;gt;%Creset&amp;#39; --abbrev-commit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    out = log --pretty=oneline --abbrev-commit --graph @{u}..
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    in = !git fetch &amp;amp;&amp;amp; git log --pretty=oneline --abbrev-commit --graph ..@{u}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    rank = shortlog -sn --no-merges
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    winning = shortlog --summary --numbered --email
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    totalcommits = !git log --all --pretty=oneline | wc -l
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    commitslastmonth = !git log --author=\&amp;#34;`git config user.name`\&amp;#34; --before={`date &amp;#34;+%Y-%m-01&amp;#34;`} --after={`date --date=\&amp;#34;$(date +%Y-%m-1) -1 month\&amp;#34; \&amp;#34;+%Y-%m-01\&amp;#34;`} --reverse --pretty=format:\&amp;#34;%cd %h  %s\&amp;#34; --date=short
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    commitsthismonth = !git log --author=\&amp;#34;`git config user.name`\&amp;#34; --before=now --after={`date &amp;#34;+%Y-%m-1&amp;#34;`} --reverse --pretty=format:\&amp;#34;%cd %h  %s\&amp;#34; --date=short
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    commitstoday = !git log --author=\&amp;#34;`git config user.name`\&amp;#34; --since=\&amp;#34;6am\&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    rank = shortlog -sn --no-merges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;common-tasks&#34;&gt;Common tasks&lt;/h2&gt;
&lt;h3 id=&#34;undo-ing&#34;&gt;Undo-ing&lt;/h3&gt;
&lt;p&gt;Dump all uncommitted changes and baseline the local files based on the latest committed change (HEAD):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Boot to Root</title>
      <link>https://www.bencode.io/posts/2018-08-10-cyber-cno-boot2root/</link>
      <pubDate>Fri, 10 Aug 2018 20:24:48 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-08-10-cyber-cno-boot2root/</guid>
      <description>&lt;p&gt;Some fun I hacking on a &lt;em&gt;boot to root&lt;/em&gt; challenge I did with a mate recently.&lt;/p&gt;
&lt;h1 id=&#34;enumeration&#34;&gt;Enumeration&lt;/h1&gt;
&lt;h3 id=&#34;os-fingerprint&#34;&gt;OS Fingerprint&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;root@kali:~/boot2root# nmap -O 192.168.0.102

Starting Nmap 7.60 ( https://nmap.org ) at 2018-07-26 22:44 EDT
Nmap scan report for 192.168.0.102
Host is up (0.00022s latency).
Not shown: 986 closed ports
PORT      STATE SERVICE
21/tcp    open  ftp
80/tcp    open  http
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
3389/tcp  open  ms-wbt-server
8009/tcp  open  ajp13
8080/tcp  open  http-proxy
49152/tcp open  unknown
49153/tcp open  unknown
49154/tcp open  unknown
49155/tcp open  unknown
49156/tcp open  unknown
49157/tcp open  unknown
MAC Address: 00:50:56:A3:B7:92 (VMware)
Device type: general purpose
Running: Microsoft Windows 2008|Vista|7
OS CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1 cpe:/o:microsoft:windows_vista::sp1:home_premium     cpe:/o:microsoft:windows_7
OS details: Microsoft Windows Server 2008 R2 SP1, Microsoft Windows Vista Home Premium SP1, Windows 7, or Windows     Server 2008
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 66.26 seconds
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A Windows box, running a bunch of services like &lt;code&gt;ftp&lt;/code&gt;, two &lt;code&gt;http&lt;/code&gt; servers, &lt;code&gt;smb&lt;/code&gt; and &lt;code&gt;ajp&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CNO Presentation</title>
      <link>https://www.bencode.io/posts/2018-07-27-cyber-cno-presentation-containers/</link>
      <pubDate>Fri, 27 Jul 2018 08:47:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-07-27-cyber-cno-presentation-containers/</guid>
      <description>&lt;h1 id=&#34;intro&#34;&gt;Intro&lt;/h1&gt;
&lt;p&gt;Containers, and specifically Docker are attracting a crazy amount of industry attention, particularly, I&amp;rsquo;m finding the software dev space.&lt;/p&gt;
&lt;h1 id=&#34;slide-1&#34;&gt;Slide 1&lt;/h1&gt;
&lt;p&gt;OK, just quickly what is Docker.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Docker is a computer program that performs operating-system-level virtualization also known as containerization. Docker is used to run software packages called &amp;ldquo;containers&amp;rdquo;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Build once, configure once, and run anywhere.”&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;slide-2&#34;&gt;Slide 2&lt;/h1&gt;
&lt;p&gt;In a containerised world, the container becomes the standard unit of management and deployment. Containers provide a safe and consistent space for processes to run in. A container for example, could contain an Apache web server and all the dependencies it requires. Containers can in theory run all sorts of workloads&amp;hellip;webapps, database servers, desktop processes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CNO Day 4 Metasploitable</title>
      <link>https://www.bencode.io/posts/2018-07-26-cyber-cno-day4/</link>
      <pubDate>Thu, 26 Jul 2018 08:54:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-07-26-cyber-cno-day4/</guid>
      <description>&lt;p&gt;Awesome tip #1: In metasploit console (&lt;code&gt;msfconsole&lt;/code&gt;), once you have loaded up an exploit, take &lt;code&gt;show payloads&lt;/code&gt; for a spin. This will show all payloads that are compatible with the given exploit. Awesome!&lt;/p&gt;
&lt;p&gt;Today we got the chance to work on &lt;a href=&#34;https://github.com/rapid7/metasploitable3&#34;&gt;Metasploitable 3&lt;/a&gt;, a Windows VM with a number of vunerability and flags (15ish of them).&lt;/p&gt;
&lt;p&gt;Its a great way to take this knowledge and apply it to an actual machine. I wont detail a full walkthrough, as there are already plenty, and I don&amp;rsquo;t want to ruin the learning experience.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CNO Day 3 PrivEsc</title>
      <link>https://www.bencode.io/posts/2018-07-25-cyber-cno-day3/</link>
      <pubDate>Wed, 25 Jul 2018 08:54:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-07-25-cyber-cno-day3/</guid>
      <description>&lt;p&gt;Privilege Escalation.&lt;/p&gt;
&lt;h1 id=&#34;basics&#34;&gt;Basics&lt;/h1&gt;
&lt;p&gt;On Windows, &lt;code&gt;SYSTEM&lt;/code&gt; is the highest privilege possible. Local Administrators can effectively get SYSTEM privileges.&lt;/p&gt;
&lt;p&gt;On Linux, &lt;code&gt;root&lt;/code&gt; (uid=0) is the highest privilege possible. Regular users can escalate to root privileges on demand (i.e. sudo).&lt;/p&gt;
&lt;h1 id=&#34;techniques&#34;&gt;Techniques&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Kernel exploits - leverage a flaw in the OS. Vunerabilty is determined by researching kernel version, patch levels. Tend to be patched quickly.&lt;/li&gt;
&lt;li&gt;High privileged programs - get a program running at a higher privilege to execute your code. Often things are unnessarily run with high privileges for convenience sake. For example, JBoss running on TomCat, running as root. Deploy a WAR to JBoss with an embedded reverse shell.&lt;/li&gt;
&lt;li&gt;Credential theft - leverage techniques to compromise a user with higher privileges. The primary method of lateral movement within organisations. Dumping of hashes, such as responder, SCF files on writab shares, UNC requests (when a user attempts to &lt;code&gt;\\server&lt;/code&gt; an auth request is sent and can be captured), network sniffing. Password reuse. &lt;a href=&#34;https://www.bleepingcomputer.com/news/security/you-can-steal-windows-login-credentials-via-google-chrome-and-scf-files/&#34;&gt;SCF to steal credentials&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Insecure configurations - abuse incorrectly services or programs. Service paths with whitespace is a great example e.g. &lt;em&gt;C:\anti-virus\virus definition\bin\update.exe&lt;/em&gt;, Windows path probing will attempt to find and run &lt;em&gt;C:\anti-virus\virus.exe&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On Linux in the &lt;code&gt;/etc/shadow&lt;/code&gt; file, the prefix e.g. &lt;code&gt;$6&lt;/code&gt; indicates the hash function and salt, for example, this entry:&lt;/p&gt;</description>
    </item>
    <item>
      <title>CNO Day 2 Exploitation</title>
      <link>https://www.bencode.io/posts/2018-07-24-cyber-cno-day2/</link>
      <pubDate>Tue, 24 Jul 2018 08:47:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-07-24-cyber-cno-day2/</guid>
      <description>&lt;h1 id=&#34;exploitation&#34;&gt;Exploitation&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;An exploit is some software which leverages a vunerability to perform an  action.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Important to differientiate the &lt;em&gt;payload&lt;/em&gt; from the &lt;em&gt;exploit&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A payload is something executed via an exploit.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;finding-exploits&#34;&gt;Finding Exploits&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.exploit-db.com&#34;&gt;Exploit DB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Google&lt;/li&gt;
&lt;li&gt;SearchSploit - a local mirror of exploit-db; useful for local cached copies.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example &lt;em&gt;CVE-2008-4250&lt;/em&gt;, maybe assigned different vendor specific labels. In this case &lt;em&gt;MSE08-067&lt;/em&gt;, by searching Google and heading to the Microsoft security bullitin:&lt;/p&gt;</description>
    </item>
    <item>
      <title>CNO Day 1 Enumeration</title>
      <link>https://www.bencode.io/posts/2018-07-23-cyber-cno-day1/</link>
      <pubDate>Mon, 23 Jul 2018 09:26:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-07-23-cyber-cno-day1/</guid>
      <description>&lt;p&gt;Covers basics starting with enumeration.&lt;/p&gt;
&lt;p&gt;There is a process to exposing vunerabilities. Not a linear process. Imposter syndrome is huge in this field, due to the complexity of the field, and how many domains it covers.&lt;/p&gt;
&lt;p&gt;The anatomy of a hack (EEE); Enumeration, Exploitation, Escalation&lt;/p&gt;
&lt;p&gt;There are multiple ways to do one thing, for example to figure out if  the &lt;code&gt;sshd&lt;/code&gt; daemon is running you could:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check if port 22 is listening &lt;code&gt;netstat -tlp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check if the sshd process is running&lt;/li&gt;
&lt;li&gt;Try to ssh connect to the daemon&lt;/li&gt;
&lt;li&gt;List the running services through systemd&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;tools&#34;&gt;Tools&lt;/h1&gt;
&lt;p&gt;Tools to grok:&lt;/p&gt;</description>
    </item>
    <item>
      <title>PostgreSQL</title>
      <link>https://www.bencode.io/posts/psql/</link>
      <pubDate>Sat, 14 Jul 2018 20:42:10 +1000</pubDate>
      <guid>https://www.bencode.io/posts/psql/</guid>
      <description>&lt;p&gt;PostgreSQL (&lt;em&gt;postgres&lt;/em&gt; or &lt;code&gt;pgsql&lt;/code&gt;) is a powerful open source relational database known for reliability, extensibility, and standards compliance. It features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Advanced SQL support (window functions, CTEs, JSON, full-text search)&lt;/li&gt;
&lt;li&gt;ACID compliance and strong transactional integrity&lt;/li&gt;
&lt;li&gt;Rich indexing (B-tree, GIN, GiST, BRIN, hash, SP-GiST)&lt;/li&gt;
&lt;li&gt;Extensible with custom types, operators, and functions&lt;/li&gt;
&lt;li&gt;MVCC for high concurrency and performance&lt;/li&gt;
&lt;li&gt;Robust security, authentication, and role management&lt;/li&gt;
&lt;li&gt;Active community, frequent releases, and excellent documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ideal for everything from small apps to large-scale, mission-critical systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Apache Spark</title>
      <link>https://www.bencode.io/posts/2018-07-02-spark/</link>
      <pubDate>Mon, 02 Jul 2018 19:41:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-07-02-spark/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve had the opportunity to dig into Apache Spark, thanks to some training from Brian Bloechle from Cloudera.&lt;/p&gt;
&lt;p&gt;What is spark?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Fast, flexible, and developer friendly, Apache Spark is the leading platform for large scale SQL, batch processing, stream processing, and machine learning.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://spark.apache.org/docs/2.3.0/api/java/&#34;&gt;Java&lt;/a&gt;, &lt;a href=&#34;https://spark.apache.org/docs/2.3.0/api/scala/#package&#34;&gt;Scala&lt;/a&gt;, &lt;a href=&#34;https://spark.apache.org/docs/2.3.0/api/python/pyspark.html&#34;&gt;Python&lt;/a&gt; and &lt;a href=&#34;https://spark.apache.org/docs/2.3.0/api/R/&#34;&gt;R&lt;/a&gt; are first class citizens when its comes to consuming the various Spark API&amp;rsquo;s. I&amp;rsquo;ll cover PySpark in more detail.&lt;/p&gt;
&lt;p&gt;Spark is an agnostic processing engine, that can target a number of cluster managers including Spark Standalone, Hadoop&amp;rsquo;s YARN, Apache Mesos and Kubernetes. In the context of Spark, some useful surrounding ecosystem to be aware of:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beyond Compare</title>
      <link>https://www.bencode.io/posts/2018-04-21-bcompare/</link>
      <pubDate>Sat, 21 Apr 2018 22:01:01 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2018-04-21-bcompare/</guid>
      <description>&lt;p&gt;Installation on Linux is well &lt;a href=&#34;https://www.scootersoftware.com/download.php?zz=kb_linux_install&#34;&gt;documented&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://www.scootersoftware.com/bcompare-4.2.4.22795.x86_64.rpm
su
rpm --import https://www.scootersoftware.com/RPM-GPG-KEY-scootersoftware
yum install bcompare-4.2.4.22795.x86_64.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On my Fedora 27 box, I found the launcher bash &lt;code&gt;/usr/bin/bcompare&lt;/code&gt; exits with a return code of 1, if the linker cannot resolve all dependencies.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;BC_LIB=/usr/lib64/beyondcompare
export BC_LIB
EXEC=$BC_LIB/BCompare

#check to see if we have all of the shared libraries.
CHECK=`ldd $EXEC | grep &amp;quot;not found&amp;quot; | wc -l`

if [ &amp;quot;$CHECK&amp;quot; -ne  &amp;quot;0&amp;quot; ]; then
   echo Some Shared Libraries were not found
   ldd $EXEC
   exit 1
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dumping out the shared libs &lt;code&gt;BCompare&lt;/code&gt; depends on:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
