<?xml version="1.0" encoding="utf-16"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Dane Balia</title>
    <link>https://danebalia.com</link>
    <description>Software developer sharing insights on tech, faith, and creativity</description>
    <language>en-us</language>
    <lastBuildDate>Mon, 10 Aug 2026 06:25:00 GMT</lastBuildDate>
    <generator>HappyFrogger v2.1.0</generator>
    <atom:link href="https://danebalia.com/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Human Is Not the Bottleneck. The Human Is the Missing Oracle</title>
      <link>https://danebalia.com/humman-bottleneck.html</link>
      <guid isPermaLink="true">https://danebalia.com/humman-bottleneck.html</guid>
      <pubDate>Wed, 02 Sep 2026 04:00:00 GMT</pubDate>
      <category>tech</category>
      <category>artificial-intelligence</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="images/bottleneck.png" alt="Bottleneck" /></p>
<p>We spent a year optimising the wrong bottleneck.</p>
<p>The <strong>harness discourse</strong> has been relentless - blueprints, schematics, thought leadership. Impressive engineering, most of it. But read the designs closely and you notice what they're all quietly aiming at: getting the developer out of the pipeline.</p>
<p>The logic seemed sound. Building dropped from days to minutes, and the human became the slow part. The bottleneck. So we designed the human out.</p>
<p>Then the <em>telemetry arrived</em>.</p>
<p>Faros AI instrumented 22,000 developers across 4,000+ teams. Moving from low to high AI adoption: task completion per developer up 34%, epics up 66%. Real gains. Also: bugs per developer up 54%, incidents per pull request up 243%, median review time up 5x, and 31% more PRs merging with no review at all.</p>
<p>Nobody decided to stop reviewing. Reviewers simply couldn't keep pace, and unread merges became normal. We knew this failure before AI. The 2,000-line PR lands in your inbox, and what follows is frustration, cognitive overload, and a silent rubber stamp. The difference is that it used to be the exception. Now it's the throughput model.</p>
<p>The bottleneck didn't disappear. It moved to review and integration - and we'd already removed the person who was supposed to be standing there when it arrived.</p>
<p>Two things worth saying plainly.</p>
<p><strong>First:</strong> the human was never the bottleneck. The human is the missing oracle.</p>
<p>We have fast, cheap oracles for correctness. Do the tests pass? Does it lint? Machine-verifiable in seconds. We have no oracle at all for maintainability, intent, or design - and no benchmark I'm aware of currently measures them. GitClear's analysis of 623 million code changes shows what fills that gap: duplication up 81%, refactoring down 70%, error-masking constructs up 47%. Code that looks right and is structurally wrong.</p>
<p>Designing the human out doesn't remove a cost. It removes the only sensor we have for the slowest and most expensive failure mode. &quot;Humans first&quot; isn't sentiment or ethics-washing. It's a claim about where verification capability actually resides right now.</p>
<p><strong>Second:</strong> we're borrowing against comprehension and calling it velocity.</p>
<p>Anthropic ran a controlled trial in January. Two groups, same unfamiliar library. The AI-assisted group finished marginally faster and scored 50% on comprehension. The manual group scored 67%. Seventeen points, on code they had written minutes earlier (this is a vendor publishing a result against it's own commercial interest).</p>
<p>That debt doesn't show up in your DORA metrics. It shows up at 2am when nobody on the call can reason about the system they shipped.</p>
<p>The industry response is to build faster agents. So I built the opposite experiment. A harness that puts the human at the centre - not to slow things down, but to make judgment cheap, timely and measurable rather than optional. You can check out the harness <a href="https://github.com/daneb/harness">here</a>.</p>
<p>Plain bash. Deliberately crude. Built to learn, not to scale.</p>
<p><strong>The rules:</strong></p>
<ol>
<li>Agents don't move artefacts through the SDLC. They hit mechanical gates.</li>
<li>Humans state intent, write the spec, define acceptance criteria, and read the diff.</li>
<li>Route every check to the cheapest reliable verifier - mechanical gates for what's machine-checkable, calibrated LLM judges only after validation against human labels with explicit thresholds, humans for intent and design.</li>
<li>Diff budget: 200 lines. (Which became 400, excluding tests). If it's more than 400 lines, the feature was scoped wrong. The gate fails and the work gets split.</li>
<li>Only iterate on the harness with confirmed evidence and root cause.</li>
</ol>
<p>Thirty minutes on an approved spec and a design sketch turns a six-hour adversarial review into a twenty-minute confirmation. The human isn't reviewing more. They're reviewing earlier, where a one-line correction prevents two thousand lines of rework.</p>
<p>237 minutes. 12 features. One engineer, no control group - an experiment, not evidence. I'm publishing the method so it can be argued with.</p>
<p>DORA's finding is that AI is an amplifier: it magnifies whatever your organisation already is. If your answer to a 243% rise in incidents per PR is to remove the last human who might have caught them, the amplifier is working exactly as designed.</p>
<p><strong>What are you actually measuring?</strong></p>
]]></description>
    </item>
    <item>
      <title>Harness Engineering Simplified</title>
      <link>https://danebalia.com/harness-engineering.html</link>
      <guid isPermaLink="true">https://danebalia.com/harness-engineering.html</guid>
      <pubDate>Tue, 01 Sep 2026 04:00:00 GMT</pubDate>
      <category>tech</category>
      <category>artificial-intelligence</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><strong>Two terms</strong> are rapidly entering the software vocabulary and they describe two very different answers to the same question: if AI agents write our code, what do we build around them to ensure quality, consistency and reliability?</p>
<h2 id="harness-engineering">Harness Engineering</h2>
<p><img src="images/harness.png" alt="Harness Engineering" /></p>
<p>A harness is defined as a piece of equipment with straps and belts, used to control or hold in place a person, animal or object. Some examples are a safety harness if you are doing bungee. Or a baby's harness. Historically, a harness was very much associated with draft animals such as horses, oxen, mules and cattle. An ox pulling a plow is typically yoked with a harness. The intent was to harness something effectively. That is: to direct, control, and use its power effectively for a purpose.</p>
<p>A harness in AI, is everything you put around an AI agent to shape how it works and to check what it produces. The discipline is broken into 3 parts. Guides steer the work forward. These are (a) rules and context files, (b) specs and prompts (c) skills and examples and (d) tools the agent may leverage. The second part is Boundaries - constraints for effective execution. These include sandboxes for isolation, permissions and token budgets. This ensures that the agent is constrained to run safely, but also run in a loop within some predefined resource limitations. The
final part is Sensors. These verify the result. This is done with compilers, linters, tests, security scans and increasingly AI reviewers.</p>
<p>Harness engineering is the craft of combining these deliberately. Early evidence suggests it reduces token consumption, makes output markedly more consistent, and that specific named instructions dramatically outperform general guidance. But there's a catch: the most effective harnesses appear to be those co-developed with their backing models. Harness and model trained and tested together. That's part of why Claude Code punches above its weight, and it raises an uncomfortable question for us around our own.</p>
<h2 id="software-factory">Software Factory</h2>
<p><img src="images/factory.png" alt="Software Factory" /></p>
<p>A factory is a set of buildings where large amounts of goods are made using machines. A software factory is the same idea, where a set of systems are integrated to build, verify and release software repeatedly and at scale, with AI agents as machinery.</p>
<p>The <strong>software factory</strong> is the harness taken to its logical extreme: remove the humans. A backlog of work items feeds an orchestrator. An orchestrator dispatches an agent swarm to do the various parts of the work. Automated checks gate the output - AI reviews the AI's work and merges it. Deployment is continuous. And telemetry or feedback generates the next tickets. The loop runs and closes without a person standing anywhere on the line of production. Its promise is throughput. Code generation around the clock at near-zero marginal human cost.</p>
<p><strong>Harness engineering</strong> will mature into a discipline - from individual craft to team practice and then platform capability, with shared harness components governed centrally and judgement federated back to the teams on the ground. Two problems will define these steps forward, sensor integrity. That is, how accurate, useful and reliable are the sensors we build. The second is, calibration - AI judges are proliferating faster than anyone is measuring them, and the harnesses that endure will be the ones that score their automated reviewers (AI) against human decisions over time and improve through it.</p>
<p>Software factories will find their niche and their ceiling. Factories are genuinely viable when correctness is cheap to verify, and errors are cheap to reverse - transactional back-ends, legacy rewrites governed by strong conformance test suites and internal tooling. The ceiling is structural. Today's models are trained against fast signals - does it compile, do tests pass, and are lint checks clean. However, what they do not cater for is design, maintainability, fidelity to intent and these things will surface over the months for which no automation checks. A factory has no station for slow signals, so it doesn't fail loudly. It instead accrues debt silently behind green checkmarks.</p>
<p><strong>Conclusion</strong>
The two concepts are not rivals so much as two settings of one dial: how much do we let an agent decide, and how we stay confident in what it does? The answer depends on the situation. If you can check the result cheaply and trust the check, the agent can be given more freedom. If checking is hard or mistakes are expensive, keep the leash short. We need to place human judgement where it matters most - saying what correct means at the start, and making the final call at the end. But we must also regularly test whether the automated judges in between can still be trusted.</p>
]]></description>
    </item>
    <item>
      <title>🔍 4 Pitfalls in using AI to build software</title>
      <link>https://danebalia.com/four-pitfalls-ai.html</link>
      <guid isPermaLink="true">https://danebalia.com/four-pitfalls-ai.html</guid>
      <pubDate>Wed, 08 Jan 2025 04:00:00 GMT</pubDate>
      <category>tech</category>
      <category>ai</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p>AI has evolved into a clear productivity multiplier for developers. Yet some remain skeptical, frustrated by its limitations. The issue often isn't the tool - it's misaligned expectations. Like any powerful technology, success comes from leveraging its strengths rather than fixating on what it can't do.</p>
<p>Through working extensively with AI, I've observed common patterns that hold developers back from realizing its full potential. By understanding these traps, we can better align our expectations and achieve more meaningful outcomes.</p>
<h2 id="pitfall-1-poor-problem-framing">🎯 Pitfall #1: Poor problem framing.</h2>
<p>Problem definition matters. Keywords play such a huge impact it can change the nature of the implementation with or without AI. For example, if I drew a circle, and I stated, <strong>what is this familiar object?</strong> You would immediately state it's a circle. But if I had instead asked, <strong>what is this object?</strong> Perhaps you would find it odd why I would be asking some a basic question, one I already know the answer to. Doubt would creep, perhaps some red flags, resulting in you perhaps asking more questions. Consider a third approach, what if I asked you instead, <strong>what is this unfamiliar object?</strong> This would certainly make you step back and think. How I framed the problem, impacted how you derived your outcome.</p>
<h3 id="how-to-identify">How to identify:</h3>
<ul>
<li>Not thinking through what you are asking, but just asking</li>
<li>Asking for complete solutions without breaking down complex problems</li>
<li>Jumping straight to implementation without discussing architecture</li>
<li>Being vague about edge cases</li>
</ul>
<h2 id="pitfall-2-over-reliance-on-ai">🏗️ Pitfall #2: Over-reliance on AI</h2>
<p>Picture a chef asking a kitchen assistant to &quot;just fix dinner service.&quot; Even with access to every ingredient and recipe, the assistant can't replace the chef's experience, judgment, and understanding of their kitchen's unique challenges. Similarly, feeding an AI your entire codebase won't magically solve architectural problems or replace developer intuition.</p>
<h3 id="how-to-identify-1">How to identify:</h3>
<ul>
<li>Expecting AI to understand under-stated requirements</li>
<li>Not reviewing generated code for best practices or logic flaws*</li>
<li>Blindly implementing without understanding</li>
<li>Using AI for critical security or data handling without review</li>
</ul>
<h2 id="pitfall-3-providing-insufficient-context">🤖 Pitfall #3: Providing insufficient context</h2>
<p>This is the equivalent of asking a construction company to quote you on building a 3 bedroom house, but forgetting to highlight that the location is on a hill, in a remote location with poor to little infrastructure. You just not going to get the right result.</p>
<h3 id="how-to-identify-2">How to identify:</h3>
<ul>
<li>Not sharing relevant dependencies or environment details</li>
</ul>
<ul>
<li>Omitting important business rules or constraints</li>
<li>Not explaining how the code fits into the larger system</li>
<li>Failing to specify performance requirements or scale</li>
</ul>
<h2 id="pitfall-4-ineffective-iteration">🔄 Pitfall #4: Ineffective iteration</h2>
<p>Fred is building his dream bathroom with a view of the mountains. Initially, he tells the builder &quot;Move the toilet to the left and bath to the right&quot; to capture that perfect vista. The builder does exactly that, rearranging the plumbing at considerable effort. The next day, Fred has another thought: &quot;Actually, what if we just kept everything where it was and moved the window instead?&quot; The builder, trying to accommodate, moves the window. But Fred had forgotten a crucial detail from his first design - the original window position had needed special tinted glass to manage the intense morning sun. When Fred visits the site, he finds a beautiful mountain view...and a bathroom that turns into a greenhouse every sunrise.</p>
<h3 id="how-to-identify-3">How to identify:</h3>
<ul>
<li>Not providing feedback on what worked/didn't work</li>
<li>Starting over instead of building on previous responses</li>
<li>Not clarifying misunderstandings in the AI's assumptions</li>
<li>Failing to narrow down issues when debugging</li>
</ul>
<h2 id="suggestions">Suggestions:</h2>
<h3 id="improve-your-prompt-engineering">Improve your prompt engineering</h3>
<p>One aspect of this is prompt engineering, and the second around structured communication. There is a plenitude of improvement and thinking around this on the internet, and a great resource in the <a href="https://www.promptingguide.ai/">Prompt Engineering Guide</a>.</p>
<h3 id="see-ai-as-a-collaborative-junior-developer">See AI as a collaborative junior developer</h3>
<p>The real power comes from treating AI as a collaborative junior developer - one who can suggest approaches, spot patterns, and help with implementation details, but needs your guidance and domain expertise to create truly effective solutions. Like any good mentoring relationship, success comes from clear communication, thoughtful questions, and combining both parties' strengths.</p>
<h3 id="improve-problem-definition">Improve Problem Definition</h3>
<p>Here's a simple template for an improved problem definition:</p>
<pre><code>Here's what I'm trying to achieve: [clear goal]
Current environment: [versions, dependencies]
Constraints: [performance, security, etc.]
What I've tried: [previous attempts]
Specific questions: [what you need help with]
</code></pre>
<p>For more complex problems:</p>
<pre><code class="language-text">// Context
System: [architecture, tech stack, scale]
Dependencies: [versions, integrations]
Constraints: [performance, security, compliance]

// Current State
Existing code: [relevant snippets]
Current behavior: [what's happening]
Error messages: [if applicable]

// Desired Outcome
Expected behavior
Success criteria
Non-functional requirements

// Attempted Solutions
Approaches tried
Results observed
Specific blockers

// Specific Questions
Targeted questions about implementation
Areas needing clarification
Potential concerns
</code></pre>
<p>Include diagrams or flow-charts as well.</p>
<h3 id="improving-iterative-development">Improving Iterative Development</h3>
<pre><code>Initial code: [code snippet]
Issues found: [specific problems]
Required changes: [clear modifications needed]
New requirements: [additional features]
</code></pre>
<h3 id="improving-development-experience">Improving development experience</h3>
<p>Keep AI and context awareness separate from your IDE. While mastering these fundamentals, limit in-IDE AI to Copilot for routine code completion. Use standalone AI tools like Claude (Project Mode) or ChatGPT externally. This separation offers three key advantages:</p>
<ol>
<li>Control over AI model quality</li>
<li>Better context management</li>
<li>Easier recovery from context-related mistakes</li>
</ol>
]]></description>
    </item>
    <item>
      <title>The King is Coming</title>
      <link>https://danebalia.com/the-king-is-coming.html</link>
      <guid isPermaLink="true">https://danebalia.com/the-king-is-coming.html</guid>
      <pubDate>Fri, 03 Jan 2025 08:16:00 GMT</pubDate>
      <category>creative</category>
      <category>poem</category>
      <author>Dane Balia</author>
      <description><![CDATA[<h1 id="the-king-is-coming">The King is Coming</h1>
<p>Up in the sky, the tempests rage,<br />
as the heaven's proclaim the coming age,<br />
where Jesus the Lamb, breaks vials of his own,<br />
as he pours out their tears all over his throne.<br />
His fury and wrath ascends to the highest,<br />
and shall descend to the deepest, where the darkest liest.</p>
<p>Down on the earth, in the land of men,<br />
The people dance and sing in their wicked den,<br />
Praising self, rejecting Him, denouncing the Cross<br />
Living their best life at great cost.<br />
They live to enjoy each new day,<br />
And steep themselves in comforts of rich array.</p>
<p>High up in heaven, the Lord mounts His horse,<br />
and prepares to descend and evil divorce,<br />
His Word like a sword proceeds from His mouth,<br />
As He commands his armies to gather out.<br />
Down to the earth they go,<br />
The righteous will avail with mighty bow.</p>
<p>In Sodom and Gomorrah, they see the signs,<br />
The earth is groaning but they remain benign.<br />
Flashes scatter across they sky,<br />
As the Lord breaks open every wretched lie.<br />
The fire and fury of His descendance unknown,<br />
As He comes to grant vengence to His very own.</p>
<p>Be-warned, be wary, murmur not and complain,<br />
For Jesus is coming, coming again,<br />
To rule and to reign,<br />
To scatter the rain,<br />
To dry up our tears,<br />
And wrestle all fears,<br />
Jesus, Jesus the King,<br />
Is coming again.</p>
]]></description>
    </item>
    <item>
      <title>2025 Reading List</title>
      <link>https://danebalia.com/2025-reading.html</link>
      <guid isPermaLink="true">https://danebalia.com/2025-reading.html</guid>
      <pubDate>Fri, 03 Jan 2025 08:16:00 GMT</pubDate>
      <category>creative</category>
      <category>reading</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="/images/classic_library.png" alt="2025 Reading List" /></p>
<h2 id="didnt-complete">Didn't complete</h2>
<ol>
<li><a href="https://www.amazon.com/Never-Split-Difference-Negotiating-Depended-ebook/dp/B014DUR7L2">Never Split the Difference - Chris Voss</a></li>
<li><a href="https://martinfowler.com/boilerplate/Refactoring.html">Refactoring - Martin Fowler</a></li>
<li><a href="https://www.amazon.com/No-Asshole-Rule-Building-Civilized/dp/0446526568">The No Asshole Rule - Robert Sutton</a></li>
<li><a href="https://leanpub.com/cloudstrategy">Cloud Strategy - Gregor Hohpe</a></li>
<li><a href="https://www.amazon.com/AI-Engineering-Chip-Huyen/dp/1098103243">AI Engineering - Chip Huyen</a></li>
</ol>
<h2 id="read">Read</h2>
<ol>
<li><a href="https://www.goodreads.com/book/show/3.Harry_Potter_and_the_Sorcerer_s_Stone">The Philosopher's Stone - JK Rowling</a></li>
<li><a href="https://www.goodreads.com/book/show/106692.The_Sword_in_the_Stone">The Sword in the Stone - T.H. White</a></li>
<li><a href="https://www.amazon.com/Angular-Design-Patterns-Best-Practices/dp/1786461725">Angular Design Patterns and Best Practices - Alvaro Camillo Neto</a></li>
<li><a href="https://www.amazon.com/New-Age-Bible-Version-Riplinger/dp/0932762213">New Age Bible Version - Gail Riplinger</a></li>
<li><a href="https://www.amazon.com/Faith-More-Than-You-Think/dp/1616441380">Faith: More than you think - Mike Pearl</a></li>
<li><a href="https://www.goodreads.com/book/show/68428.Mistborn">Mistborn - Brandon Sanderson</a></li>
<li><a href="https://www.goodreads.com/book/show/68429.The_Well_of_Ascension">The Well of Ascension - Brandon Sanderson</a></li>
<li><a href="https://www.amazon.com/Exploring-Minor-Prophets-John-Phillips/dp/0802412015">Exploring the Minor Prophets - John Phillips</a></li>
<li><a href="https://www.amazon.com/AI-Driven-Leader-Harnessing-Smarter-Decisions/dp/B0DB8QL3ZK">The AI-Driven Leader - Geoff Wood</a></li>
<li><a href="https://www.goodreads.com/book/show/68430.Elantris">Elantris - Brandon Sanderson</a></li>
<li><a href="https://www.amazon.com/New-Age-Bible-Version-Riplinger/dp/0932762213">New Age Bible Versions - Gail Riplinger</a></li>
</ol>
<h2 id="planned">Planned</h2>
<ol>
<li><a href="http://craftinginterpreters.com/">Robert Nystrom - Crafting Intepreters</a></li>
<li><a href="https://www.goodreads.com/book/show/15842786-understanding-computation">Tom Stuart - Understanding Computation</a></li>
<li><a href="https://geraldmweinberg.com/Site/QSM_vol_1.html">Gerald Weinberg - Quality Software Management, Vol 1: Systems Thinking</a></li>
<li><a href="https://www.amazon.com/Thinking-Systems-Donella-H-Meadows/dp/1603580557">Donella Meadows - Thinking in Systems</a></li>
<li><a href="https://www.amazon.com/dp/1491983647?tag=bbookshub-20&amp;linkCode=ogi&amp;th=1&amp;psc=1">Brendan Burns - Designing Distributed Systems</a></li>
<li><a href="https://www.larkinestate.com/books/dispensational-truth.html">Clarence Larking - Dispensational Truth</a></li>
<li><a href="https://sre.google/books/">Betsy Beyer - Site Reliability Engineering</a></li>
<li><a href="https://bookshop.org/books/rationality-what-it-is-why-it-seems-scarce-why-it-matters/9780525561996">Steven Pinker - Rationality: What It Is, Why It Seems Scarce, Why It Matter</a></li>
<li><a href="https://www.amazon.com/Lies-My-Govt-Told-Me-ebook/dp/B09R4Y6YKJ/ref=sr_1_1?keywords=lies+my+government+told+me+robert+malone&amp;qid=1673239997&amp;s=digital-text&amp;sprefix=lies%2Cdigital-text%2C455&amp;sr=1-1">Lies My Gov't Told Me: And the Better Future Coming</a></li>
<li><a href="https://www.amazon.com/gp/product/B09PZ9X17W/ref=ppx_yo_dt_b_d_asin_title_o00?ie=UTF8&amp;psc=1">Traced: Human DNA's Big Surprise</a></li>
<li><a href="https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations-ebook/dp/B07B9F83WM">Jez-Humble, Gene Kim - Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations</a></li>
<li><a href="https://www.brendangregg.com/blog/2020-07-15/systems-performance-2nd-edition.html">Brendan Gregg - Systems Performance</a></li>
<li><a href="https://sre.google/books/">Site Reliability Engineering</a></li>
<li><a href="https://sre.google/books/">Building secure &amp; reliable systems</a></li>
<li><a href="https://www.oreilly.com/library/view/building-evolutionary-architectures/9781492097532/">Neal Ford, Rebecca Parsons - Building Evolutionary Architectures</a></li>
<li><a href="https://www.amazon.com/Hard-Thing-About-Things-Building/dp/0062273205">The Hard Thing About Hard Things - Ben Horowitz</a></li>
<li><a href="https://www.amazon.com/Introduction-General-Systems-Thinking-ebook/dp/B004VS9AUS/?_encoding=UTF8&amp;pd_rd_w=ceglc&amp;content-id=amzn1.sym.cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_p=cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_r=138-2750200-6069238&amp;pd_rd_wg=RcZwU&amp;pd_rd_r=680c1234-d2b8-45bc-a398-8acb35ad454c&amp;ref_=aufs_ap_sc_dsk">Introduction to General Systems Thinking - Gerald Weinberg</a></li>
<li><a href="https://www.amazon.com/Return-God-Hypothesis-Compelling-Scientific/dp/0062071505">Return of the God Hypothesis - Dr. Stephen Meyer</a></li>
<li><a href="https://www.amazon.com/Building-LLMS-Scratch-Practical-Approach-ebook/dp/B09QZQZQZQ">Building LLMS from scratch </a></li>
</ol>
]]></description>
    </item>
    <item>
      <title>2026 Reading List</title>
      <link>https://danebalia.com/2026-reading.html</link>
      <guid isPermaLink="true">https://danebalia.com/2026-reading.html</guid>
      <pubDate>Wed, 01 Jan 2025 08:16:00 GMT</pubDate>
      <category>creative</category>
      <category>reading</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="/images/classic_library.png" alt="2026 Reading List" /></p>
<h2 id="read">Read</h2>
<ol>
<li><a href="https://www.amazon.com/Never-Split-Difference-Negotiating-Depended-ebook/dp/B014DUR7L2">Never Split the Difference - Chris Voss</a></li>
<li><a href="https://www.amazon.com/AI-Engineering-Chip-Huyen/dp/1098103243">AI Engineering - Chip Huyen</a></li>
<li><a href="https://www.amazon.com/Kettlebell-Simple-Sinister-Revised-Updated/dp/0989892433">Kettlebell: Simple and Sinister - Pavel Tsatsouline</a></li>
<li><a href="https://www.amazon.co.za/Hero-Ages-Mistborn-Book-Three/dp/0575089946/ref=asc_df_0575089946?mcid=a605ceab764c3fb89f7d2a83a578dd29&amp;tag=zashopgode-21&amp;linkCode=df0&amp;hvadid=712407257191&amp;hvpos=&amp;hvnetw=g&amp;hvrand=15286820236000809874&amp;hvpone=&amp;hvptwo=&amp;hvqmt=&amp;hvdev=c&amp;hvdvcmdl=&amp;hvlocint=&amp;hvlocphy=9208177&amp;hvtargid=pla-464920498454&amp;psc=1&amp;language=en_ZA&amp;gad_source=1">The Hero of Ages = Brandon Sanderson</a></li>
<li><a href="https://www.amazon.co.za/Endurance-Soldier-Adventurer-Decorated-Leader/dp/1529031737/ref=sr_1_1?crid=1FQTOR4OM3SZT&amp;dib=eyJ2IjoiMSJ9.eZ15pP2ncW7O3k_5iIcZNA.nvi2ozsuPmKHnsQsJqN52NW2-6ZVCy6bzTvuh800Ymg&amp;dib_tag=se&amp;keywords=sas+louis+rudd&amp;qid=1784387389&amp;s=books&amp;sprefix=sas+louis+r%2Cstripbooks%2C478&amp;sr=1-1">Endurance: SAS Soldier - Louis Rudd</a></li>
<li><a href="https://leanpub.com/cloudstrategy">Cloud Strategy - Gregor Hohpe</a></li>
<li><a href="https://en.wikipedia.org/wiki/Bravo_Two_Zero">Bravo Two Zero - Andy McNab</a></li>
</ol>
<h2 id="currently-reading">Currently Reading</h2>
<ol>
<li><a href="https://martinfowler.com/boilerplate/Refactoring.html">Refactoring - Martin Fowler</a></li>
<li><a href="https://www.amazon.com/No-Asshole-Rule-Building-Civilized/dp/0446526568">The No Asshole Rule - Robert Sutton</a></li>
<li><a href="https://www.amazon.com/Platform-Strategy-Leveraging-Ecosystems-Business/dp/1492076893">Platform Strategy - Gregor Hohpe</a></li>
<li><a href="https://www.amazon.com/Fundamentals-Data-Engineering-Joe-Reis/dp/1492062575">Fundamentals of Data Engineering - Joe Reis &amp; Matt Housley</a></li>
<li><a href="https://www.amazon.com/Designing-Machine-Learning-Systems-Chip/dp/109810827X">Designing Machine Learning Systems - Chip Huyen</a></li>
<li><a href="https://www.amazon.com/Exploring-Gospel-John-Phillips-Commentary/dp/0825434890">Exploring Gospel of John - John Phillips</a></li>
<li><a href="https://www.amazon.com/Build-Large-Language-Model-Scratch/dp/1633437167">Building an LLM from Scratch - Sebastian Raschka</a></li>
<li><a href="https://www.amazon.com/Intentional-Father-Practical-Courage-Character/dp/0801018684">The Intentional Father - Jon Tyson</a></li>
<li><a href="https://www.larkinestate.com/books/dispensational-truth.html">Dispensational Truth - Clarence Larkin</a></li>
<li><a href="https://www.amazon.com/Why-Machines-Learn-Elegant-Behind/dp/0593185749">Why Machines Learn - Anil Anantaswamy</a></li>
</ol>
<h2 id="planned">Planned</h2>
<ol>
<li><a href="http://craftinginterpreters.com/">Robert Nystrom - Crafting Intepreters</a></li>
<li><a href="https://www.goodreads.com/book/show/15842786-understanding-computation">Tom Stuart - Understanding Computation</a></li>
<li><a href="https://geraldmweinberg.com/Site/QSM_vol_1.html">Gerald Weinberg - Quality Software Management, Vol 1: Systems Thinking</a></li>
<li><a href="https://www.amazon.com/Thinking-Systems-Donella-H-Meadows/dp/1603580557">Donella Meadows - Thinking in Systems</a></li>
<li><a href="https://www.amazon.com/dp/1491983647?tag=bbookshub-20&amp;linkCode=ogi&amp;th=1&amp;psc=1">Brendan Burns - Designing Distributed Systems</a></li>
<li><a href="https://www.larkinestate.com/books/dispensational-truth.html">Clarence Larking - Dispensational Truth</a></li>
<li><a href="https://sre.google/books/">Betsy Beyer - Site Reliability Engineering</a></li>
<li><a href="https://bookshop.org/books/rationality-what-it-is-why-it-seems-scarce-why-it-matters/9780525561996">Steven Pinker - Rationality: What It Is, Why It Seems Scarce, Why It Matter</a></li>
<li><a href="https://www.amazon.com/Lies-My-Govt-Told-Me-ebook/dp/B09R4Y6YKJ/ref=sr_1_1?keywords=lies+my+government+told+me+robert+malone&amp;qid=1673239997&amp;s=digital-text&amp;sprefix=lies%2Cdigital-text%2C455&amp;sr=1-1">Lies My Gov't Told Me: And the Better Future Coming</a></li>
<li><a href="https://www.amazon.com/gp/product/B09PZ9X17W/ref=ppx_yo_dt_b_d_asin_title_o00?ie=UTF8&amp;psc=1">Traced: Human DNA's Big Surprise</a></li>
<li><a href="https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations-ebook/dp/B07B9F83WM">Jez-Humble, Gene Kim - Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations</a></li>
<li><a href="https://www.brendangregg.com/blog/2020-07-15/systems-performance-2nd-edition.html">Brendan Gregg - Systems Performance</a></li>
<li><a href="https://sre.google/books/">Site Reliability Engineering</a></li>
<li><a href="https://sre.google/books/">Building secure &amp; reliable systems</a></li>
<li><a href="https://www.oreilly.com/library/view/building-evolutionary-architectures/9781492097532/">Neal Ford, Rebecca Parsons - Building Evolutionary Architectures</a></li>
<li><a href="https://www.amazon.com/Hard-Thing-About-Things-Building/dp/0062273205">The Hard Thing About Hard Things - Ben Horowitz</a></li>
<li><a href="https://www.amazon.com/Introduction-General-Systems-Thinking-ebook/dp/B004VS9AUS/?_encoding=UTF8&amp;pd_rd_w=ceglc&amp;content-id=amzn1.sym.cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_p=cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_r=138-2750200-6069238&amp;pd_rd_wg=RcZwU&amp;pd_rd_r=680c1234-d2b8-45bc-a398-8acb35ad454c&amp;ref_=aufs_ap_sc_dsk">Introduction to General Systems Thinking - Gerald Weinberg</a></li>
<li><a href="https://www.amazon.com/Return-God-Hypothesis-Compelling-Scientific/dp/0062071505">Return of the God Hypothesis - Dr. Stephen Meyer</a></li>
<li><a href="https://www.amazon.com/Building-LLMS-Scratch-Practical-Approach-ebook/dp/B09QZQZQZQ">Building LLMS from scratch</a></li>
</ol>
]]></description>
    </item>
    <item>
      <title>Guideposts to Measuring Developers</title>
      <link>https://danebalia.com/measuring-developers.html</link>
      <guid isPermaLink="true">https://danebalia.com/measuring-developers.html</guid>
      <pubDate>Mon, 05 Aug 2024 04:00:00 GMT</pubDate>
      <category>tech</category>
      <category>leadership</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="images/MeasuringDevelopers.png" alt="MeasuringDevs" /></p>
<p>Measuring developer productivity is a hot and controversial topic, and there have been many contributions from the likes
of McKinsey, Kent Beck, Dan North, Gergely Orosz that deal with the subject matter from both sides (we can measure
accurately vs. measuring is hard). My intent is to rather provide guideposts to the leader placed in a position to
measure developer productivity. What should he or she do if the request is part of compliance with business executives?
Or how can they get comfortable with the idea, and how can they take the next steps?</p>
<h2 id="the-driving-forces">The Driving Forces</h2>
<p>Now the need to measure can come from two forces: an external request from business or an internal demand to improve. In
the former case, where an executive team or manager is requesting metrics, we will call this compliance. In the second
case, where a leader and member of the delivery team want to improve, we will call this autonomy. Autonomy because there
are fewer constraints and a greater ability to succeed in measuring relative to the context of the team and its
practices.</p>
<h3 id="guidepost-1-why">Guidepost 1: Why?</h3>
<p>But before we begin any journey, we must ask: Why? This seems like an obvious question, but in some organizations, it is
a very difficult question to get the answer to. Some organizations may require it with the solid intent of improving
continuous delivery. Or executives might pursue it to create some sense of tangible measure of performance (like that
seen in sales/manufacturing). Another might be an engineering manager frustrated with an inability to generate impact
from a highly skilled team of developers. Both require different strategies, but ultimately, it's important to
understand why they're being done.</p>
<ol>
<li>What is the perceived outcome of measuring developer productivity?</li>
<li>Why is this outcome necessary?</li>
<li>Could the outcome be a side-effect or is it a root-cause?</li>
</ol>
<h2 id="compliance">Compliance:</h2>
<h3 id="guidepost-2-behavioral-change">Guidepost 2: Behavioral Change</h3>
<p>In terms of compliance, acceptance initially is key to granting you the room and space to be effective in communicating,
inquiring, and sharing potential concerns. A fundamental question to ask is: if we did measure or leverage a set of
measures and their results were negative; would they result in a change of behavior? More specifically, would business,
management, or leadership invest to create the change they want. Is the lemon worth the squeeze?</p>
<h3 id="guidepost-3-define">Guidepost 3: Define</h3>
<p>In compliance, it's very important to clarify terminology. One such word is <strong>productivity</strong>. We want more productive
developers, sure, but what does that mean? Stable systems less features; unstable systems, rapid features. Iron out the
terminology and be sure both parties are talking about the same thing.</p>
<h3 id="guidepost-4-devise">Guidepost 4: Devise</h3>
<p>In compliance, and if available, distill your concerns into well-articulated thoughts. When I was presented with the
requirement to measure my teams, my first thought was DON'T. Inherently, all my years of experience as a developer and
in leading teams had created a mental and abstract gate on my pre-frontal cortex that raised a red flag, but I was
unable to articulate it effectively to others. Particularly business executives.</p>
<p>Recently, I sat down and did so, and these are my concerns/challenges to measuring developers:</p>
<ol>
<li><strong>Misuse</strong>: loss of understanding of individual teams and how they operate, thus enforcing behavior that does not
align with or correlate to the team's practices.</li>
<li><strong>Misinterpretation</strong>: Strategic decisions taken with generalized data across many teams that lead to large shifts in
investments (time and money)</li>
<li><strong>Misalignment</strong>: Metrics in isolation are not silver bullets. Meetings may be considered the No. 1 hindrance to deep
work. But in viciously addressing it, we could see strong declines in company culture and collaboration.</li>
<li><strong>Misplaced</strong>: A set of metrics is applied to achieve an outcome, but despite the positive nature of those metrics,
it has little to no effect on that outcome.</li>
<li><strong>Misdirection</strong>: The metrics give the business a false sense that all teams are delivering well and equally because
of their numeric compliance (Goodhart's Law).</li>
</ol>
<h3 id="guidepost-5-derive">Guidepost 5: Derive</h3>
<p>If you do have the ability to aid in the metrics that can be leveraged to measure developers' performance, don't depend
on any single metric. There are no silver bullets. Secondly, try making it a three-tier set of measures.</p>
<ol>
<li>With a people-based focus, this is about perceptions of how people feel or experience things.</li>
<li>With a system-based focus, this is about attaining more factual or hard truths about the performance of systems.3.
With a user-centric focus, this is about deciphering and honing in on the right outcomes of the consumed output.</li>
</ol>
<h3 id="guidepost-6-partnership">Guidepost 6: Partnership</h3>
<p>This is a crucial part, don't become the enemy of business or management. Rather, partner and see the journey as an
experiment. Partnerships are a great mechanism for achieving the right outcomes, as they enable you to communicate
concerns with a-lot more ease.</p>
<h2 id="autonomy">Autonomy</h2>
<p>With autonomy, the journey should be the same: why and to what outcome, and how will measuring productivity attain it.
It could often be an experiment to understand different measures and assess their worth and impact. But the worst thing
you could do is to have metrics or measures for the sake of having them.</p>
<h3 id="guidepost-7-mental-frameworks">Guidepost 7: Mental Frameworks</h3>
<p>If you are clear on your outcome, there are three strongly supported mental frameworks for measuring developer
productivity. I won't go into the details of each here, but they are worth reading up on. That is the problem each is
trying to address and the value you could derive from leaning on them.</p>
<h3 id="d.o.r.a">D.O.R.A</h3>
<h4 id="use-case">Use case</h4>
<p>If you are interested in migrating teams towards small changes, frequently deployed. This is great for teams that are
still largely waterfall. DORA is meant to track delivery practices and measure them, not the productivity of people.</p>
<h3 id="s.p.a.c.e">S.P.A.C.E</h3>
<h4 id="use-case-1">Use case</h4>
<p>The focus of SPACE is to clarify developer productivity, but to also focus on more than just systems, but how people
consume those systems. It's more of a holistic view of the software development lifecycle by not only improving how
software is produced, but also optimizing how it is consumed within the organization.</p>
<h3 id="devex">DEVEX</h3>
<h4 id="use-case-2">Use case</h4>
<p>DevEx is concerned with the overall experience of developers. The problems it addresses are:</p>
<ol>
<li>Tooling and infrastructure</li>
<li>Processes and Practices</li>
<li>Culture and feedback</li>
</ol>
<p>DevEx focuses on making the development process more enjoyable and productive, which can lead to faster development
cycles, higher quality software, and more innovation.</p>
<p>A helpful analogy for understanding the aims of these 3 studies is the following:</p>
<p><img src="images/pizza.png" alt="alt text" /></p>
<p>Hope that helps :)</p>
]]></description>
    </item>
    <item>
      <title>Reverse Engineering Chaos Through Blackholes</title>
      <link>https://danebalia.com/blackholes.html</link>
      <guid isPermaLink="true">https://danebalia.com/blackholes.html</guid>
      <pubDate>Wed, 24 Jul 2024 04:00:00 GMT</pubDate>
      <category>tech</category>
      <category>leadership</category>
      <author>Dane Balia</author>
      <description><![CDATA[<h3 id="what-do-i-mean-by-chaos">1. What do I mean by &quot;chaos&quot;?</h3>
<p>Chaos surrounds us; it’s ubiquitous. Just consider the second law of thermodynamics, which asserts that everything tends toward disorder. Whether in our personal lives through imbalances, tragedies, or simply the daily pressures of work, chaos is a thread that connects us all. We may not experience chaos at the same time, in the same way, or in the same place, but inevitably, it will appear, as surely as sparks fly upward.</p>
<p>Reflecting on my own life and the challenges I’ve faced over a lengthy career in various roles—Linux Administrator, Development Manager, Developer, and now Team Lead—I sought to apply a new dimension of thought to these challenges. What am I not seeing? What can I learn better? So, I turned my gaze to outer space and the most powerful chaotic entity in our known universe: black holes. If this entity epitomizes all things disorganized, disruptive, and destructive, what can I learn from its design and nature? More importantly, how can I apply those lessons to the chaos that surrounds us? This introspection led me to black holes.</p>
<h3 id="terminology">2. Terminology</h3>
<p>Let's build up to what a blackhole is by going through some grounding in terms of terminology that we will use later.</p>
<p><img src="images/gravity.jpg" alt="Gravity" /></p>
<p><strong>Gravity</strong>: The force that attracts objects with mass towards one another. In black holes, gravity is incredibly strong, distorting space-time.</p>
<p><strong>Space-time</strong>: Space-time is the four-dimensional fabric that combines space and time, shaping how objects move and interact under the influence of gravity. Or said differently, space-time is often referred to as the fabric of space because it combines the three dimensions of space and the one dimension of time into a single, interconnected framework that can be warped by mass and energy.</p>
<p><img src="images/blackhole.jpg" alt="Blackhole" /></p>
<p><strong>Blackhole</strong>: A region of space where the gravitational field is so strong that nothing, not even light, can escape from it.</p>
<p><strong>Singularity:</strong> The singularity of a black hole is a point at its very center where gravity is so strong that it crushes all matter into an infinitely small space with infinite density.</p>
<p><strong>Accretion Disk</strong>: is a swirling ring of gas, dust, and other material that forms around a black hole</p>
<p><strong>Event Horizon</strong>: The boundary surrounding a black hole beyond which no light or other information can escape.</p>
<p><strong>Tidal Forces:</strong> Tidal forces are the differences in gravitational pull on different parts of an object, stretching it when near a massive body like a black hole.</p>
<p><strong>Spaghettification</strong>: The process by which an object would be stretched and elongated as it falls into a black hole due to extreme tidal forces. Your head and your feet would experience different forces as your feet would get pulled into long strands spaghetti-like that would stretch you towards the singularity.</p>
<p><strong>Hawking Radiation</strong>: The theoretical radiation predicted by Stephen Hawking that black holes can emit due to quantum effects, potentially causing them to lose mass and evaporate over time.</p>
<ol>
<li><p><strong>Quantum Effects</strong>:</p>
<ul>
<li>Near the event horizon of a black hole, quantum mechanics predicts that particle-antiparticle pairs can spontaneously form.</li>
</ul>
</li>
<li><p><strong>Particle Pairs</strong>:</p>
<ul>
<li>Normally, these pairs annihilate each other quickly. However, at the event horizon, one particle can fall into the black hole while the other escapes.</li>
</ul>
</li>
<li><p><strong>Energy Loss</strong>:</p>
<ul>
<li>The escaping particle takes energy away from the black hole. This energy loss appears as radiation emitted by the black hole.</li>
</ul>
</li>
<li><p><strong>Black Hole Evaporation</strong>:</p>
<ul>
<li>Over a very long time, this process causes the black hole to lose mass and energy, potentially leading to its eventual evaporation.</li>
</ul>
</li>
</ol>
<p><img src="images/relativity.jpg" alt="Relativity" /></p>
<p><strong>Special relativity:</strong> (1905) Einstein’s theory dealing with the physics of objects moving at constant speeds, especially near the speed of light, and how time and space are relative.</p>
<p><strong>General relativity:</strong> (1915) Einstein’s theory describing how gravity affects the fabric of space-time, predicting phenomena like black holes (mass and energy)</p>
<p><img src="images/minkowski.jpg" alt="Minkowski" /></p>
<p><strong>Minkowski diagram:</strong> is a space-time diagram used in special relativity to visualize events. It typically includes two axes: time (vertical) and space (horizontal).Light cones represent the paths light would take, forming a 45-degree angle with the axes.</p>
<p><strong>Penrose diagram:</strong> also known as a conformal diagram. Is a way of representing spacetime that simplifies the structure of infinity to a finite distance, allowing the entire infinite spacetime to be depicted in a finite diagram. This very similar to a picture of the earth, Mercator diagram, where the sizes of the continents are obscured or compromised so the angles can be protected. The intent is to allow for navigation and moving around the earth as a ship for example. In the Penrose, it is the same concept but to the effect where infinity is compromised (reduced) so we can reason about infinite spacetime.</p>
<h3 id="quiz-of-misconceptions">3. Quiz of Misconceptions?</h3>
<p><img src="images/fall.jpg" alt="Fall" /></p>
<p>3.1 What would happen if you fell into a blackhole?</p>
<ul>
<li>If you fell into a black hole, you’d experience extreme tidal forces stretching you out (<strong>spaghettification</strong>) as you approach the <strong>event horizon,</strong> the point of no return. Time would slow down for you compared to outside observers, making you appear to freeze at the horizon. Once inside, you’d continue falling towards the <strong>singularity</strong>, where gravity becomes infinitely strong, and space-time curvature is infinite, like an ultimate crash point where all known physics breaks down. This journey into the black hole would be a one-way trip with no escape.</li>
<li>Another theory is that you would hit some kind of fire wall, and just explode.</li>
<li>Either way, you die.</li>
</ul>
<p><img src="images/firewall.jpg" alt="Explode" /></p>
<p>3.2 A blackhole is a vacuum</p>
<ul>
<li>A blackhole is not a vacuum. A vacuum by definition is empty space. A blackhole on the other hand as witnessed by accretion disk contains matter and gases, facing extreme pressure of gravity.</li>
</ul>
<h2 id="chaos-in-software-development">4. Chaos in Software Development</h2>
<h3 id="lesson-chaos-has-a-hidden-order">4.1  Lesson: Chaos has a Hidden Order</h3>
<p><img src="images/poller.jpg" alt="Poller" /></p>
<h4 id="the-elegant-solution-gone-bad">4.1.1 The Elegant Solution Gone Bad</h4>
<p>If there is one clear guarantee, it is that in whatever role you are in, you will face a situation that presents a problem impacting someone, yet on the surface makes no sense or is complex and potentially challenges reason. Developers commonly encounter this when troubleshooting software defects. I faced one such situation with our high-throughput, highly multi-threaded monitoring architecture. We were polling over 12,000 devices and extracting about 60 billion data points a month, using nearly 40 MySQL servers to gather real-time metrics about machine health so we could notify customers when their machines were in jeopardy.</p>
<p>Unfortunately, we hit an issue where we were losing data for new devices with long names because we used the device name, customer name, and date as table names for storing data. MySQL has a table name limit of 64 characters. I implemented a fix, which was just three lines of code to generate a hash of the name. It felt like an ideal, simple, and highly effective solution. I was so proud. All testing indicated it worked and integrated beautifully across our systems. It went live, and the process was smooth. I had followed the system through two proven examples, and I now had confirmation it had worked. YAY!</p>
<p>A week later, the key nodes responsible for flushing data to the database from memory broke. They refused to flush any data to our databases, effectively breaking our data persistence layer. I spent hours trying to reproduce or understand the problem, reading and re-reading the code. Nothing made sense. The code was largely untouched. I sat down with the team and walked them through the problem. I spoke to our Director, a seasoned developer with over 20 years of experience, and he too was stumped. I re-read the code repeatedly, even reviewing my change. Three lines to generate a hash couldn't possibly be the problem. We were so confused. I started developing conspiracy theories about what was happening, delving into the internals of the GC, looking for bugs in the JVM, you name it. Reason didn't apply, so I was now delving into the land of the impossible.</p>
<p>Eventually, we made a judgment call to contact the author of the persistent layer who had immigrated. We granted him access to the systems, and in a few hours, he found the problem and gave me a call. The first thing he opened was my three lines of code. I hadn't put a lock around the three lines of code; simplistically, it wasn't thread-safe.</p>
<h4 id="black-holes-have-a-hidden-order">4.1.2 Black Holes Have a Hidden Order</h4>
<p>When I think about black holes, I envision an unimaginable force of destruction—able to swallow planets and destroy galaxies. They are the epitome of chaos. But just like the chaos that resulted from my seemingly illogical code change, there is an actual hidden order. A system of dysfunction still based on the realities and physics of our world.</p>
<p>If we were physicists studying black holes, how would we even begin to understand them? How could we think about their nature and design, and more so, if their singularity collapses into infinity, how can we even think about its effects, draw theories, and conclusions? How do we reason about them? But even chaos has a hidden order. And we don't have to make up new rules to govern our understanding; special and general relativity are sufficient. In fact, this problem was solved earlier. Let's revisit our Penrose Diagram.</p>
<h4 id="penrose-diagrams">4.1.3 Penrose Diagrams</h4>
<p><img src="images/penrose.jpg" alt="Penrose" /></p>
<p>Penrose diagrams assist in understanding the causal structure of black holes and are a powerful tool in theoretical physics. They simplify the infinite regions, visualize the causal structure, analyze interior regions, study black hole dynamics, and help understand global properties.</p>
<p><img src="images/mercator.jpg" alt="Mercator" /></p>
<p>What are Penrose diagrams? Well their like mercator projections. You know the picture of the continents. As you know, they have several incorrect distortions, one of which is large land masses stretched out at the poles. Why is this done? To preserve the angles for navigation. So to the Penrose diagrams are able to take the complexity of blackholes and provide insights around it's causal structure, it's infinite regions and much more. If you review the diagram, you will see, on a finite space, it collapses infinity. It creates an infinite future vertically, a infinite past at the bottom, infinite space that moves from right to left.</p>
<h4 id="even-blackholes-have-a-hidden-order">4.1.4 Even Blackholes have a hidden order</h4>
<p>Referring back to my experience with those simple 3 lines of code that caused disaster. There was an order to the chaos that initially looked in-comprehensible. As we look at blackholes, despite physicists continual struggle to understand it's chaos, in roads have been made with leaps by Sir Roger Penrose to push the field forward with Penrose Diagrams. In all this, and even in our own lives, there is a pattern of taking the realities and constraints of what we know, and applying it to the unknown. We shouldn't start with chaos, with the unknowns, but start from the realities of what we do know slowly breaking down and navigating the chaos. To every chaos, there is an order. A system, and it's not beyond the realms of our reality.</p>
<p>&quot;No problem can withstand the assault of sustained thinking&quot;</p>
<h2 id="chaos-with-soft-skills">5. Chaos with Soft Skills</h2>
<h3 id="lesson-dont-be-afraid-of-chaos">5.1 Lesson: Don't be afraid of chaos</h3>
<p><img src="images/hawking.jpg" alt="Hawking" /></p>
<h3 id="a-brief-history-of-time">5.1.1 A Brief History of Time</h3>
<p>This is not so much about black holes but a lesson in one of the most intriguing theories surrounding them, proposed by Stephen Hawking in 1974. Hawking Radiation predicts that black holes decay, combining two previously separate realms of physics: Quantum Mechanics and General Relativity.</p>
<p>However, not long ago, there was an article on Forbes where another PhD physicist completely dismantled the theory. Since then, there has been much debate about its correctness and legitimacy. Some even say that Hawking Radiation is nothing more than a theory or narrative Hawking put together as a way to help readers of his book &quot;A Brief History of Time&quot; understand black holes better, suggesting that real physicists know the truth.</p>
<h3 id="lesson">5.1.2 Lesson</h3>
<p>Regardless of the debate, Stephen Hawking took a bold step in putting forward this theory. Remember, he released this along with his book &quot;A Brief History of Time&quot; in 1974, when there was no internet or large language models, and black hole theory was significantly less advanced. He knew it was controversial because it challenged established views around general relativity and quantum mechanics. Whether to be hailed as an Einstein or much later an idiot, he put forth his theory.</p>
<p>Often, as technical people, ideas, potential solutions, and designs may be lost because of what is established and a lack of belief or confidence. Solutions should be judged on their merit and put forth with conviction. They should not be lost because we fear what is, or are enveloped by a lack of confidence in our own insights.</p>
<p>“True innovation often requires the courage to challenge the impossible. Embrace your ideas and let them shine, for they may shape the future.”</p>
<h2 id="chaos-in-life">6. Chaos in Life</h2>
<h3 id="life-through-the-lens-of-your-chaos">6.1 Life through the lens of your chaos</h3>
<p><img src="images/batman.jpg" alt="Batman" /></p>
<h3 id="hosting-company-experience">6.1.1 Hosting Company Experience</h3>
<p>I joined a hosting company with great expectations. In fact, the architect took a liking to me and believed I could help him transform the business to a service-oriented architecture or TOGAF. Unfortunately, instead of collaborating with others and him, I tried to solve difficult problems alone, thinking I alone was sufficient for success. My efforts soon led him to incorrectly micro-manage me, and our relationship started to deteriorate. He had his own personal demons, and I wasn't helping, and soon he tried to force me out of the company. I feared him. Thankfully, I was offered a rotation to another team. Eventually, despite his best efforts to transform the organization, he ended up leaving. But that's not where the story ends. It ends with me struggling to escape the darkness of that experience. I was so hurt, I felt so incompetent, and in every interaction in that organization, I applied that lens. I felt everyone around me thought I was a fraud, useless and ill-equipped. Reaching this epiphany took a bit of work, but the place I was in was dark like a black hole; that one event caused an infinite collapse, further and further into darkness.</p>
<h3 id="lesson-1">6.1.2 Lesson</h3>
<p>A black hole is a dark unknown. Its event horizon is the first contact with its power and destruction. As mentioned when we covered spaghettification, on entry, there is no escape. No information escapes, not even light itself. Its darkness is all-encompassing. Today, you may be faced with a similar challenge or have been through one. The darkness can be overwhelming. Some event or situation has marred your ability to function optimally. Some set of circumstances has damaged your brand, reputation, or confidence in yourself.</p>
<p>My advice to you is, don't be scared of the dark. Sometimes you may try your best to push against the inevitability of the event horizon. It's an impossible task. Light and information never escape. All that's left is to push through the darkness, accept what is, learn from it what you can, and follow the infinite. Don't allow the lens of past experiences, pain, or darkness to destroy today.</p>
<p>Embrace the dark, and rise up. Deshi Basara, Deshi Basara!</p>
]]></description>
    </item>
    <item>
      <title>C4 Level Diagrams &amp; Git</title>
      <link>https://danebalia.com/wiltw-8.html</link>
      <guid isPermaLink="true">https://danebalia.com/wiltw-8.html</guid>
      <pubDate>Wed, 28 Feb 2024 04:00:00 GMT</pubDate>
      <category>creative</category>
      <category>wiltw</category>
      <author>Dane Balia</author>
      <description><![CDATA[<h1 id="uml-diagrams-from-typescript">UML Diagrams from Typescript</h1>
<p>I was recently putting together <a href="https://c4model.com/">C4 Model diagrams</a> and when I got to the last-level, I needed code level-views.
This is where I stumbled onto the following automation to assist with TypeScript to UML.
Automatic generation of UML from typrscript.</p>
<p><a href="https://github.com/demike/TsUML2">TsUML2</a></p>
<p>There is also a good option for C# users:</p>
<p><a href="https://github.com/dotMorten/DotNetOMDGenerator">Generate OMD</a></p>
<h1 id="git-editorconfig-and-darn-windows-users">Git, EditorConfig and Darn Windows Users</h1>
<p>If you in a team and the only Linux/Mac user and using Git. This is the setting you need for you git config.</p>
<pre><code>core.autocrlf=false
</code></pre>
<h1 id="git-access-multiple-accounts">Git access multiple accounts</h1>
<p>Adapt this and add to your ~/.ssh/config</p>
<pre><code class="language-yaml"># Enterprise account
Host github.com-enterprise
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_github_enterprise
  IdentitiesOnly yes

# Personal account
Host github.com-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_github_personal
  IdentitiesOnly yes
</code></pre>
<p>Make sure for each repo you set the following to match:</p>
<pre><code class="language-sh">git config user.name &quot;Your Enterprise Username&quot;
git config user.email &quot;your_enterprise_email@example.com&quot;
</code></pre>
<p>Then define your remote origin:</p>
<pre><code>git remote set-url origin git@github.com-enterprise:Organization/repo.git
</code></pre>
<h1 id="high-fidelity-tests">High Fidelity Tests</h1>
<p>This is an absolutely well articulated blog post on Testing.
It emphasizes to pursue high fidelity tests. That is tests, that are closest to reality.
It suggested a three-fold approach, of starting with (1) use the real thing (2) use a fake, and worst-case (3) use a mock.</p>
<p>I find this salient advice, tying directly to my experience.</p>
<p><a href="https://testing.googleblog.com/2024/02/increase-test-fidelity-by-avoiding-mocks.html">Read it here</a></p>
]]></description>
    </item>
    <item>
      <title>Github Dependabot API &amp; Dumpify</title>
      <link>https://danebalia.com/wiltw-9.html</link>
      <guid isPermaLink="true">https://danebalia.com/wiltw-9.html</guid>
      <pubDate>Wed, 28 Feb 2024 04:00:00 GMT</pubDate>
      <category>creative</category>
      <category>wiltw</category>
      <author>Dane Balia</author>
      <description><![CDATA[<h2 id="using-dumpify-for-neovim-debugging-in-c">Using Dumpify for Neovim debugging in C#</h2>
<p>This is a great aid if you looking to get insight into debug information via console, while not using a debugger. DAP sucks.</p>
<p><a href="https://github.com/MoaidHathot/Dumpify">Dumpify</a></p>
<h2 id="retrieving-dependadot-alerts-from-github-api">Retrieving dependadot alerts from Github API</h2>
<pre><code class="language-python">import csv
import requests

OWNER = 'your_owner_name'  # GitHub Owner name
REPOSITORIES = ['repo1', 'repo2']  # List of repositories
PAT = 'your_personal_access_token'  # GitHub Personal Access Token
CSV_FILE = 'dependabot_alerts.csv'  # Output CSV file name

session = requests.Session()
session.headers.update({
    &quot;Accept&quot;: &quot;application/vnd.github+json&quot;,
    &quot;Authorization&quot;: f&quot;Bearer {PAT}&quot;,
    &quot;X-GitHub-Api-Version&quot;: &quot;2022-11-28&quot;
})

def fetch_dependabot_alerts(owner, repo):
    &quot;&quot;&quot;Fetch Dependabot alerts for a specific repository using the session.&quot;&quot;&quot;
    url = f&quot;https://api.github.com/repos/{owner}/{repo}/dependabot/alerts?state=open&amp;severity=critical&amp;per_page=100&quot;
    response = session.get(url)
    if response.status_code == 200:
        return response.json()
    else:
        print(f&quot;Failed to fetch alerts for {repo}: {response.status_code}&quot;)
        return []

def process_alerts(alerts, repo):
    &quot;&quot;&quot;Process each alert to extract relevant fields, including the repository name.&quot;&quot;&quot;
    processed_alerts = []
    for alert in alerts:
        processed_alert = {
            &quot;repository&quot;: repo,
            &quot;number&quot;: alert.get(&quot;number&quot;),
            &quot;state&quot;: alert.get(&quot;state&quot;),
            &quot;dependency_ecosystem&quot;: alert.get(&quot;dependency&quot;, {}).get(&quot;package&quot;, {}).get(&quot;ecosystem&quot;, &quot;&quot;),
            &quot;dependency_name&quot;: alert.get(&quot;dependency&quot;, {}).get(&quot;package&quot;, {}).get(&quot;name&quot;, &quot;&quot;),
            &quot;security_advisory_description&quot;: alert.get(&quot;security_advisory&quot;, {}).get(&quot;description&quot;, &quot;&quot;)
        }
        processed_alerts.append(processed_alert)
    return processed_alerts

def write_to_csv(data):
    &quot;&quot;&quot;Write the processed alert data to a CSV file.&quot;&quot;&quot;
    with open(CSV_FILE, mode='w', newline='') as file:
        writer = csv.DictWriter(file, fieldnames=data[0].keys())
        writer.writeheader()
        for row in data:
            writer.writerow(row)

def main():
    &quot;&quot;&quot;Main function to orchestrate the fetching, processing, and writing of Dependabot alert data.&quot;&quot;&quot;
    all_alerts = []
    for repo in REPOSITORIES:
        alerts = fetch_dependabot_alerts(OWNER, repo)
        if alerts:
            processed_alerts = process_alerts(alerts, repo)
            all_alerts.extend(processed_alerts)
    if all_alerts:
        write_to_csv(all_alerts)
        print(f&quot;Data written to {CSV_FILE}&quot;)
    else:
        print(&quot;No data to write.&quot;)

if __name__ == &quot;__main__&quot;:
    main()


</code></pre>
]]></description>
    </item>
    <item>
      <title>InnerSource. SPACE. DORA. DEVEX.</title>
      <link>https://danebalia.com/wiltw-10.html</link>
      <guid isPermaLink="true">https://danebalia.com/wiltw-10.html</guid>
      <pubDate>Wed, 28 Feb 2024 04:00:00 GMT</pubDate>
      <category>creative</category>
      <category>wiltw</category>
      <author>Dane Balia</author>
      <description><![CDATA[<h2 id="query-agic-rules-service-endpoints">Query AGIC rules (service endpoints)</h2>
<h3 id="query-the-data">Query the data</h3>
<pre><code class="language-sh"> kubectl --kubeconfig ~/.kube/my-config get ingress --all-namespaces -o json &gt; ingresses.json
</code></pre>
<h3 id="pretty-print">Pretty Print</h3>
<pre><code class="language-sh">cat ingresses.json | jq -r '
.items[] |
{
  namespace: .metadata.namespace,
  name: .metadata.name,
  rules: .spec.rules[]
} |
&quot;Ingress Name: \(.name),Host: \(.rules.host),Paths: \(.rules.http.paths[] | &quot;Path: \(.path), Service Name: \(.backend.service.name), Service Port: \(.backend.service.port.number)&quot;)&quot;'
</code></pre>
<h2 id="innersource">InnerSource</h2>
<blockquote>
<p>What is InnerSource?
Simplistically it's nothing more then when a company tries to do open-source but in a closed space.</p>
</blockquote>
<p><a href="https://www.youtube.com/watch?v=tfPhkZ87bEY">3 minute video I found helpful</a></p>
<blockquote>
<p>InnerSource is enabled by tools and processes, but it is also a change
to the culture. The biggest change is allowing mistakes, talking
about them, and learning from them.</p>
</blockquote>
<p><img src="innersource.png" alt="alt text" /></p>
<h2 id="dora-vs-space-vs-devex">DORA vs SPACE vs DEVEX</h2>
<p>I found this really great analogy:</p>
<p><img src="Compare.jpg" alt="Linked" /></p>
<h2 id="raci-matrix">RACI Matrix</h2>
<p>A RACI chart, also called a RACI matrix, is a type of responsibility assignment matrix (RAM) in project management. In
practice, it’s a simple spreadsheet or table that lists all stakeholders on a project and their level involvement in
each task, denoted with the letters R, A, C or I. Once these roles are defined, assignments can be attributed to the
roles and work can begin.</p>
<p>R, A, C, I stands for:</p>
<p>Responsible
Accountable
Consulted
Informed</p>
<p><a href="https://www.forbes.com/advisor/business/raci-chart/#What_Is_A_Raci_Chart?">Forbes Link</a></p>
<h2 id="team-topologies">Team Topologies</h2>
<h4 id="team-topologies-overview">1. Team Topologies Overview</h4>
<p>Team Topologies, as described by Matthew Skelton and Manuel Pais in their book “Team Topologies,” focuses on optimizing
team interactions and alignments with business goals. The core team types and interaction modes are key concepts in this
framework.</p>
<h4 id="core-team-types">2. Core Team Types</h4>
<p><strong>a. Stream-Aligned Teams</strong></p>
<p>• <strong>Definition</strong>: Teams aligned to a flow of work from a segment of the business domain.
• <strong>Purpose</strong>: Delivering valuable increments of work to end-users continuously.
• <strong>Example</strong>: A team dedicated to a specific product feature, such as the user onboarding process or payment gateway.</p>
<p><strong>b. Enabling Teams</strong></p>
<p>• <strong>Definition</strong>: Teams that assist other teams to overcome obstacles and adopt new technologies or practices.
• <strong>Purpose</strong>: Providing specialized knowledge and facilitating the adoption of best practices.
• <strong>Example</strong>: A team focused on helping other teams implement CI/CD pipelines or adopt cloud technologies.</p>
<p><strong>c. Complicated-Subsystem Teams</strong></p>
<p>• <strong>Definition</strong>: Teams responsible for building and maintaining complex subsystems that require specialized knowledge.
• <strong>Purpose</strong>: Handling parts of the system that require deep expertise and cannot be easily managed by stream-aligned
teams.
• <strong>Example</strong>: A team dedicated to developing a high-performance database engine or a sophisticated machine learning
model.</p>
<p><strong>d. Platform Teams</strong></p>
<p>• <strong>Definition</strong>: Teams that build and maintain platforms used by other teams to deliver work.
• <strong>Purpose</strong>: Providing self-service APIs, tools, and services to enable other teams to deliver software efficiently.
• <strong>Example</strong>: A team managing the internal cloud infrastructure, CI/CD tools, or authentication services.</p>
<h4 id="interaction-modes">3. Interaction Modes</h4>
<p><strong>a. Collaboration</strong></p>
<p>• <strong>Description</strong>: Teams work together for a defined period to achieve a specific outcome.
• <strong>Use Case</strong>: When multiple teams need to work together to deliver a complex feature that spans different domains.</p>
<p><strong>b. X-as-a-Service</strong></p>
<p>• <strong>Description</strong>: One team provides a service that other teams can consume independently.
• <strong>Use Case</strong>: Platform teams offering CI/CD pipelines as a service to stream-aligned teams.</p>
<p><strong>c. Facilitating</strong></p>
<p>• <strong>Description</strong>: Enabling teams facilitate and assist other teams to overcome specific challenges.
• <strong>Use Case</strong>: An enabling team helping a stream-aligned team adopt a new testing framework.</p>
<h4 id="common-practices-for-organizing-delivery-teams">4. Common Practices for Organizing Delivery Teams</h4>
<p><strong>a. Define Clear Team Boundaries and Responsibilities</strong></p>
<p>• <strong>Clarity</strong>: Ensure each team has a clear mission and well-defined responsibilities to avoid overlaps and confusion.
• <strong>Autonomy</strong>: Empower teams to make decisions within their domain to increase accountability and efficiency.</p>
<p><strong>b. Optimize for Flow</strong></p>
<p>• <strong>Stream Alignment</strong>: Align teams to the flow of work that delivers value to customers. Avoid organizing teams around
rigid component boundaries.
• <strong>Value Streams</strong>: Identify and organize around value streams to ensure teams can deliver end-to-end features.</p>
<p><strong>c. Promote Cross-Functional Collaboration</strong></p>
<p>• <strong>Skills Diversity</strong>: Ensure teams have the necessary skills to deliver complete solutions, including development, QA,
UX, and operations.
• <strong>Collaboration Tools</strong>: Use tools and practices that facilitate seamless communication and collaboration, such as
agile boards, chat platforms, and video conferencing.</p>
<p><strong>d. Facilitate Continuous Improvement</strong></p>
<p>• <strong>Feedback Loops</strong>: Establish regular feedback loops through retrospectives, reviews, and one-on-one meetings to
identify areas for improvement.
• <strong>Learning Culture</strong>: Encourage continuous learning and improvement by providing access to training, conferences, and
knowledge-sharing sessions.</p>
<p><strong>e. Balance Stability and Innovation</strong></p>
<p>• <strong>Stable Base</strong>: Maintain a stable platform and set of practices for the majority of the work while allowing for
innovation and experimentation in a controlled manner.
• <strong>Innovation Time</strong>: Allocate time for teams to explore new ideas and technologies that can drive future improvements.</p>
<h4 id="practical-implementation-tips">5. Practical Implementation Tips</h4>
<p><strong>a. Start Small and Scale Gradually</strong></p>
<p>• Pilot new team structures with a small group before scaling across the organization.
• Gather feedback and adjust based on what works and what doesn’t.</p>
<p><strong>b. Use Metrics to Guide Decisions</strong></p>
<p>• Measure team performance using relevant metrics such as lead time, deployment frequency, and defect rates.
• Use these metrics to identify bottlenecks and areas for improvement.</p>
<p><strong>c. Encourage Ownership and Accountability</strong></p>
<p>• Foster a sense of ownership by allowing teams to take full responsibility for their services or components.
• Implement practices like DevOps where teams are responsible for both development and operations.</p>
<p><strong>Conclusion</strong>
Organizing delivery teams effectively requires a thoughtful approach that aligns with business goals and fosters
collaboration, autonomy, and continuous improvement. By leveraging the principles of Team Topologies, organizations can
create an environment where teams are empowered to deliver high-quality software efficiently and adapt to changing
needs.</p>
<h2 id="what-to-do-if-you-blank-in-an-interview">What to do if you blank in an interview?</h2>
<p>It’s natural to occasionally lose your train of thought or feel flustered during an interview. Here’s a structured
approach to handle such situations gracefully:</p>
<p><strong>1. Pause and Take a Breath</strong></p>
<p>• <strong>Stay Calm</strong>: Take a deep breath to calm your nerves. It’s okay to take a moment to collect your thoughts.
• <strong>Pause</strong>: Use a brief pause to compose yourself. This can also give the impression that you are considering your
answer carefully.</p>
<p><strong>2. Ask for Clarification</strong></p>
<p>• <strong>Clarify the Question</strong>: If you’re uncertain about the question, politely ask the interviewer to repeat or clarify
it. This can give you additional time to think and ensure you’re addressing the right topic.
• Example: “Could you please repeat the question? I want to make sure I address it correctly.”</p>
<p><strong>3. Acknowledge and Redirect</strong></p>
<p>• <strong>Acknowledge the Pause</strong>: If you’ve forgotten your point mid-answer, acknowledge it briefly and redirect the
conversation.
• Example: “I apologize, I seem to have lost my train of thought. Let me start again.”
• <strong>Restart or Pivot</strong>: Either restart your answer or pivot to a related point that you can speak about confidently.</p>
<p><strong>4. Use Filler Phrases</strong></p>
<p>• <strong>Filler Phrases</strong>: Use phrases like “That’s a great question” or “Let me think about that for a moment” to buy
yourself a few seconds to regain your composure.
• Example: “That’s a great question. I think the key point here is…”</p>
<p><strong>5. Summarize and Simplify</strong></p>
<p>• <strong>Summarize Your Key Points</strong>: If you’re struggling with a detailed response, summarize your key points and then
expand on them.
• Example: “In summary, my approach would focus on collaboration, continuous improvement, and leveraging best practices.
To elaborate…”</p>
<p><strong>6. Be Honest</strong></p>
<p>• <strong>Admit if You Don’t Know</strong>: If you genuinely don’t know the answer, it’s better to admit it than to fumble through an
uncertain response.
• Example: “I’m not sure about the exact details, but I would approach it by doing XYZ…”</p>
<p><strong>7. Offer to Follow Up</strong></p>
<p>• <strong>Follow-Up</strong>: If applicable, offer to follow up with a more detailed answer after the interview.
• Example: “I don’t have the exact information on hand, but I’d be happy to follow up with a detailed response after the
interview.”</p>
]]></description>
    </item>
    <item>
      <title>Story Telling, BDD</title>
      <link>https://danebalia.com/wiltw-7.html</link>
      <guid isPermaLink="true">https://danebalia.com/wiltw-7.html</guid>
      <pubDate>Tue, 13 Feb 2024 04:00:00 GMT</pubDate>
      <category>creative</category>
      <category>wiltw</category>
      <author>Dane Balia</author>
      <description><![CDATA[<h2 id="the-power-of-story-telling">The Power of Story Telling</h2>
<p>It allows an organization to remember.
It is easier to remember that which is tied to emotion then that which is pure fact.
Speak in stories.</p>
<p><a href="https://boz.com/articles/speak-in-stories">Speak In Stories</a></p>
<h2 id="the-power-of-behaviour-driven-development">The Power of Behaviour Driven Development</h2>
<p>Testing meets story-telling in BDD.</p>
<ol>
<li>TDD vs BDD</li>
</ol>
<p><img src="/images/BDD1.png" alt="TDD vs BDD" /></p>
<ol start="2">
<li>BDD is about Communication</li>
</ol>
<p><img src="/images/BDD2.png" alt="Communication" /></p>
<ol start="3">
<li>BDD is about shared understanding</li>
</ol>
<p><img src="/images/BDD3.png" alt="Shared Understanding" /></p>
<ol start="4">
<li>BDD is another shift left</li>
</ol>
<p><img src="/images/BDD4.png" alt="Shift Left" /></p>
]]></description>
    </item>
    <item>
      <title>Build your own AI code-reviewer</title>
      <link>https://danebalia.com/ai-code-reviewer.html</link>
      <guid isPermaLink="true">https://danebalia.com/ai-code-reviewer.html</guid>
      <pubDate>Sat, 27 Jan 2024 04:00:00 GMT</pubDate>
      <category>tech</category>
      <category>diy</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="images/copilot.jpg" alt="CoPilot" /></p>
<h2 id="build-your-own-ai-code-reviewer">Build Your Own AI Code-Reviewer</h2>
<p>In this journey, I embarked on creating a plugin for my IDE, designed to highlight code snippets and provide insights on their function, quality improvement, and refactoring potential.</p>
<h3 id="why-build-your-own">Why Build Your Own?</h3>
<p>Here are compelling reasons to consider:</p>
<ol>
<li>A local LLM (Large Language Model) guarantees your privacy.</li>
<li>The absence of a suitable plugin for your specific IDE.</li>
<li>Desire to customize the LLM's role and focus.</li>
<li>Interest in leveraging open-source LLMs for experimentation.</li>
<li>Curiosity to explore various LLMs.</li>
</ol>
<p>If these resonate with you, prepare for a rewarding endeavor!</p>
<h3 id="the-steps-involved">The Steps Involved</h3>
<ol>
<li><strong>Choosing the Right LLM</strong></li>
<li><strong>Setting Up the LLM</strong></li>
<li><strong>Mastering LLM Interactions</strong></li>
<li><strong>Crafting Your IDE Plugin</strong></li>
<li><strong>Refining the Outcome</strong></li>
</ol>
<h3 id="choosing-the-right-llm">Choosing the Right LLM</h3>
<p>Limited by my hardware, I sought LLMs that were compact, efficient, and specialized in coding. I discovered a helpful list by <a href="https://github.com/continuedev/what-llm-to-use">continuedev</a> and chose <a href="https://deepseek.com/">Deepseek Coder</a>.</p>
<h3 id="setting-up-the-llm">Setting Up the LLM</h3>
<p>My go-to was <a href="https://lmstudio.ai/">LM Studio</a>. Keep these points in mind:</p>
<ul>
<li>LLMs come in Base and Instruct types: Base excels in completing code, while Instruct is adept at writing from scratch.</li>
<li><a href="https://lmstudio.ai/quantization">Quantization</a> affects the LLM's performance, balancing inference quality, speed, and resource usage.</li>
</ul>
<blockquote>
<p>Tip: For a 7B model, a q4_K_S quantization is recommended.</p>
</blockquote>
<h3 id="interacting-with-the-llm">Interacting with the LLM</h3>
<p>LM Studio facilitates interactions similarly to the OpenAI API. Here's a sample interaction using curl or <a href="https://httpie.io">Httpie</a>:</p>
<pre><code class="language-json">{ 
  &quot;messages&quot;: [ 
    { &quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;Review my code as an expert senior developer. Be critical. Focus on readability and maintainability. Refactor if needed.&quot; },
    { &quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &lt;code snippet&gt; }
  ], 
  &quot;temperature&quot;: 0.7, 
  &quot;max_tokens&quot;: -1,
  &quot;stream&quot;: false
}
</code></pre>
<p>Define the LLM's behavior as 'system' and input your code snippets as 'user'.</p>
<blockquote>
<p>Note: Code must be properly escaped for POST HTTP requests.</p>
</blockquote>
<h3 id="building-your-ide-plugin">Building Your IDE Plugin</h3>
<p>I developed a plugin for LazyVim using <a href="https://neovim.io">neovim</a>. Here's the process:</p>
<ul>
<li>Initialize your plugin on GitHub.</li>
<li>Start with a simple echo function.</li>
<li>Install the plugin in LazyVim (<code>~/.config/nvim/lua/plugins/</code>).</li>
</ul>
<pre><code class="language-lua"># reviewer.lua
return {
  {
    &quot;daneb/reviewer.nvim&quot;,
  },
}
</code></pre>
<ul>
<li>Enhance the plugin functionality (see <a href="https://github.com/daneb/reviewer.nvim">Reviewer.nvim</a>).</li>
<li>Use LazyVim to sync plugin updates.</li>
<li>Implement keymapping (located in <code>~/.config/nvim/lua/config/keymaps.lua</code>).</li>
</ul>
<pre><code class="language-lua">vim.api.nvim_set_keymap(
  &quot;v&quot;,
  &quot;&lt;leader&gt;lm&quot;,
  ':lua require(&quot;reviewer&quot;).main_function()&lt;CR&gt;',
  { noremap = true, silent = true, desc = &quot;AI Reviewer&quot; }
)
</code></pre>
<h3 id="tweaking-the-result">Tweaking the Result</h3>
<p><img src="/images/reviewer.jpg" alt="Result" /></p>
<p>Your plugin, now functional in your IDE, can be aesthetically enhanced with features like window sizing, colors, and borders.</p>
<p>Challenges remain, such as ensuring proper code snippet escape, particularly with regex. Initially, I used a curl call instead of the built-in neovim HTTP API.</p>
<p>It's a work in progress, but it's an accessible, enjoyable, and fulfilling project!</p>
]]></description>
    </item>
    <item>
      <title>2024 Reading List</title>
      <link>https://danebalia.com/2024-reading.html</link>
      <guid isPermaLink="true">https://danebalia.com/2024-reading.html</guid>
      <pubDate>Sun, 14 Jan 2024 08:16:00 GMT</pubDate>
      <category>creative</category>
      <category>reading</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="/images/library.jpg" alt="2024 Reading List" /></p>
<h2 id="currently-reading">Currently Reading</h2>
<ol start="2">
<li><a href="https://martinfowler.com/boilerplate/Refactoring.html">Refactoring - Martin Fowler</a></li>
</ol>
<h2 id="read">Read</h2>
<ol>
<li><a href="https://www.amazon.com/Atlas-Management-Thinking-Edward-Bono-ebook/dp/B01MF6ANHI/ref=sr_1_1?crid=1K9QDZ8HPD6HU&amp;keywords=atlas+of+management+thinking&amp;qid=1705258470&amp;s=books&amp;sprefix=atlas+of+management%2Cstripbooks-intl-ship%2C300&amp;sr=1-1">Atlas of Management Thinking - Edward De Bono</a></li>
<li><a href="https://www.amazon.com/Radical-Candor-KIM-SCOTT/dp/1509845380/ref=sr_1_2?crid=12ZKWI70B0RL5&amp;keywords=radical+candor&amp;qid=1705258557&amp;s=books&amp;sprefix=radical+cando%2Cstripbooks-intl-ship%2C287&amp;sr=1-2">Radical Candour - Kim Scott</a></li>
<li><a href="https://www.goodreads.com/book/show/10784.The_Lion_The_Witch_And_The_Wardrobe">The Lion, The Witch, and The Wardrobe - C.S. Lewis</a></li>
<li><a href="https://www.amazon.com/Think-Again-Power-Knowing-What/dp/1984878107">Think Again - Adam Grant</a></li>
<li><a href="">The Fellowship of the Rings - JRR Tolkien</a></li>
<li><a href="https://www.goodreads.com/book/show/10133624-black-holes">Black Holes - The key to understanding the Universe</a></li>
<li><a href="https://www.amazon.com/Think-Like-Software-Engineering-Manager/dp/1633438430/ref=cm_cr_arp_d_product_top?ie=UTF8">Think Like an Engineering Manager</a></li>
<li><a href="https://www.amazon.com/Are-Your-Lights-Figure-Problem/dp/0932633161">Are your lights on? - Gerald Weinberg</a></li>
<li><a href="https://livebook.manning.com/book/automate-everyday-work-tasks-with-chatgpt/">Elevate Your Productivity: Automate Everyday Work Tasks with ChatGPT</a></li>
<li><a href="https://www.amazon.com/Tidy-First-Kent-Beck-ebook/dp/B0CL7ZMLWH?crid=8HK9HS1B8F2M&amp;dib=eyJ2IjoiMSJ9.kgF7tsQPvYl47LL64DcX0OX3MEJL6K9rhHU8UI5C_ONJ--Jw2e14BzNsinzOLaC0Q2H-hEmajOrHmdHlqUK66xsIpnHjTFSE08NNjC_ia0HdcZfAR6RZWRYIhtcYjT2UZBiMU9arJ0Q7l0c5oQ9rl-Ultledcr-DfSMB5iaVeo3vNWOen8f-YytyjnQNWFNNXa4b5lSPSuDLmW4fsv-qR-oJmoBZyAAKWuarKHvdmkw.GGK58Zb_YAg9_WBxmpnC3c5xObu0REr8WUw-Ivd8kh4&amp;dib_tag=se&amp;keywords=tidy+first&amp;qid=1728289492&amp;sprefix=tidy+first,aps,397&amp;sr=8-1">Tidy First - Kent Beck</a></li>
<li><a href="https://www.amazon.com/dp/1492043451/?bestFormat=true&amp;k=fundamentals%20of%20software%20architecture&amp;crid=3I3HWUVCWW81N&amp;sprefix=fundamentals%20archite">Fundamentals of Software Architecture: An Engineering Approach</a></li>
<li><a href="https://www.amazon.com/Daniel-Commentary-Bible-Believers-ebook/dp/B01N6F478T?crid=1AQ8T6AMNJUY9&amp;dib=eyJ2IjoiMSJ9.HsV_4HaLfMCQZudhHKogg04fYUhefefur0DCcehY1_87jFZbYhNJ39vcUUu3SqcM.miYzJLqtVEGULdm89ve2WnmmpRI6jQgV8g55g1XS0oQ&amp;dib_tag=se&amp;keywords=daniel+dr.ruckman&amp;qid=1732263911&amp;sprefix=daniel+dr.ruckman,aps,293&amp;sr=8-1">The Book of Daniel - Dr. Ruckman</a></li>
<li><a href="https://www.amazon.com/Secrets-Consulting-Gerald-M-Weinberg/dp/0932633013">The Secrets of Consulting Vol 1</a></li>
<li><a href="https://www.amazon.com/Book-Three-Prydain-Chronicles/dp/0805080481">The Book of Three - Lloyd Alexandar</a></li>
<li><a href="https://www.amazon.com/Things-Architect-Knows-Transformation-Pragmatic/dp/1680502887">37 Things one architect knows about IT Transformation - Gregor Hohpe</a></li>
<li><a href="https://www.amazon.com/Worst-Class-Trip-Ever/dp/1484708497">The Worst Class Trip ever - Dave Barry</a></li>
</ol>
<h2 id="planned">Planned</h2>
<ol>
<li><a href="http://craftinginterpreters.com/">Robert Nystrom - Crafting Intepreters</a></li>
<li><a href="https://www.goodreads.com/book/show/15842786-understanding-computation">Tom Stuart - Understanding Computation</a></li>
<li><a href="https://geraldmweinberg.com/Site/QSM_vol_1.html">Gerald Weinberg - Quality Software Management, Vol 1: Systems Thinking</a></li>
<li><a href="https://www.amazon.com/Thinking-Systems-Donella-H-Meadows/dp/1603580557">Donella Meadows - Thinking in Systems</a></li>
<li><a href="https://www.amazon.com/dp/1491983647?tag=bbookshub-20&amp;linkCode=ogi&amp;th=1&amp;psc=1">Brendan Burns - Designing Distributed Systems</a></li>
<li><a href="https://www.larkinestate.com/books/dispensational-truth.html">Clarence Larking - Dispensational Truth</a></li>
<li><a href="https://sre.google/books/">Betsy Beyer - Site Reliability Engineering</a></li>
<li><a href="https://bookshop.org/books/rationality-what-it-is-why-it-seems-scarce-why-it-matters/9780525561996">Steven Pinker - Rationality: What It Is, Why It Seems Scarce, Why It Matter</a></li>
<li><a href="https://www.amazon.com/Lies-My-Govt-Told-Me-ebook/dp/B09R4Y6YKJ/ref=sr_1_1?keywords=lies+my+government+told+me+robert+malone&amp;qid=1673239997&amp;s=digital-text&amp;sprefix=lies%2Cdigital-text%2C455&amp;sr=1-1">Lies My Gov't Told Me: And the Better Future Coming</a></li>
<li><a href="https://www.amazon.com/gp/product/B09PZ9X17W/ref=ppx_yo_dt_b_d_asin_title_o00?ie=UTF8&amp;psc=1">Traced: Human DNA's Big Surprise</a></li>
<li><a href="https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations-ebook/dp/B07B9F83WM">Jez-Humble, Gene Kim - Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations</a></li>
<li><a href="https://www.brendangregg.com/blog/2020-07-15/systems-performance-2nd-edition.html">Brendan Gregg - Systems Performance</a></li>
<li><a href="https://sre.google/books/">Site Reliability Engineering</a></li>
<li><a href="https://sre.google/books/">Building secure &amp; reliable systems</a></li>
<li><a href="https://www.oreilly.com/library/view/building-evolutionary-architectures/9781492097532/">Neal Ford, Rebecca Parsons - Building Evolutionary Architectures</a></li>
<li><a href="https://www.amazon.com/Hard-Thing-About-Things-Building/dp/0062273205">The Hard Thing About Hard Things - Ben Horowitz</a></li>
<li><a href="https://www.amazon.com/Introduction-General-Systems-Thinking-ebook/dp/B004VS9AUS/?_encoding=UTF8&amp;pd_rd_w=ceglc&amp;content-id=amzn1.sym.cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_p=cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_r=138-2750200-6069238&amp;pd_rd_wg=RcZwU&amp;pd_rd_r=680c1234-d2b8-45bc-a398-8acb35ad454c&amp;ref_=aufs_ap_sc_dsk">Introduction to General Systems Thinking - Gerald Weinberg</a></li>
<li><a href="https://www.amazon.com/Return-God-Hypothesis-Compelling-Scientific/dp/0062071505">Return of the God Hypothesis - Dr. Stephen Meyer</a></li>
</ol>
]]></description>
    </item>
    <item>
      <title>Build your own static web site generator</title>
      <link>https://danebalia.com/static-website-gen.html</link>
      <guid isPermaLink="true">https://danebalia.com/static-website-gen.html</guid>
      <pubDate>Sun, 14 Jan 2024 04:00:00 GMT</pubDate>
      <category>tech</category>
      <category>diy</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="images/happyfrogger.jpg" alt="HappyFrogger" /></p>
<h1 id="how-i-built-my-own-static-site-generator-for-a-personal-blog">How I Built My Own Static Site Generator for a Personal Blog</h1>
<p>In the ever-evolving landscape of web development, the allure of simplicity often leads to innovative solutions. This
was precisely my experience as I ventured into creating my own static site generator for my personal blog. It definitely
doesn't have everything, but it's enough, done across 2 days and is only 132 lines of C#. Here’s
a <a href="https://github.com/daneb/happyfrogger">glimpse into my journey</a>, offering insights and practical steps that might
inspire your own custom project.</p>
<h2 id="step-1-embracing-markdown-and-c-for-content-and-processing">Step 1: Embracing Markdown and C# for Content and Processing</h2>
<p>The cornerstone of my project was the utilization of Markdown for content creation, chosen for its simplicity and
flexibility. Coupled with C#, a language I was already comfortable with, I used the <code>Markdig</code> library to process
Markdown files into HTML. This setup provided a straightforward way to write and transform blog content.</p>
<h2 id="step-2-implementing-templating-with-razor">Step 2: Implementing Templating with Razor</h2>
<p>Consistency in appearance is key to any blog's identity. Leveraging the power of the Razor templating engine, commonly
used in ASP.NET, I could craft dynamic templates. These templates ensured a uniform layout and style across various blog
posts, embedding the essence of the blog’s personality into every page.</p>
<h2 id="step-3-styling-with-tailwind-css">Step 3: Styling with Tailwind CSS</h2>
<p>Aesthetic appeal and responsive design are non-negotiable in today’s web. Tailwind CSS was my choice for its
utility-first approach, enabling me to elegantly style the blog. The integration of Tailwind CSS guaranteed not only
functionality but also visual appeal, ensuring the blog's seamless presentation on diverse devices.</p>
<h2 id="step-4-front-matter-parsing-with-yamldotnet">Step 4: Front Matter Parsing with YamlDotNet</h2>
<p>A crucial feature for any blog is the ability to categorize and manage metadata for each post. YamlDotNet came to the
rescue, allowing me to parse Front Matter in Markdown files. This addition enabled me to define properties like title,
date, and categories directly within the Markdown, greatly enhancing content manageability and organization.</p>
<h2 id="step-5-embedding-github-gists">Step 5: Embedding GitHub Gists</h2>
<p>To enrich the technical aspect of the blog, embedding code snippets was essential. GitHub Gists provided a simple yet
effective way to incorporate these snippets. By placing placeholders in the Markdown content, which were later replaced
with Gist embed codes during HTML generation, I could seamlessly integrate dynamic code examples into the posts.</p>
<h2 id="step-6-deployment-on-github-pages">Step 6: Deployment on GitHub Pages</h2>
<p>The final piece of the puzzle was deploying the blog. GitHub Pages offered an efficient and straightforward hosting
solution. After setting up a repository and configuring the GitHub Pages settings, I pushed the static HTML files,
bringing the blog to life on the web.</p>
<h2 id="overcoming-challenges">Overcoming Challenges</h2>
<p>The journey wasn’t without its challenges. Ensuring that Tailwind CSS properly styled the dynamically generated HTML
content required some tweaking, solved by configuring the JIT Compiler and the correct loading sequence. Deploying the
site with a custom domain on GitHub Pages needed careful DNS configuration and repository setup, including a <code>.nojekyll</code>
file to bypass Jekyll processing.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Crafting a static site generator from scratch was not only immensely satisfying but also provided a tailor-made solution
for my blogging needs. It allowed complete control over the design, functionality, and content, resulting in a unique
and personal blogging platform. For those inspired to embark on a similar endeavor, remember to keep things simple,
leverage familiar tools, and enjoy the creative process. Your perfect blogging platform might just be a few code lines
away.</p>
<p>Happy coding and blogging!</p>
]]></description>
    </item>
    <item>
      <title>Behold the Lamb of God</title>
      <link>https://danebalia.com/behold-the-lamb.html</link>
      <guid isPermaLink="true">https://danebalia.com/behold-the-lamb.html</guid>
      <pubDate>Wed, 27 Dec 2023 22:30:00 GMT</pubDate>
      <category>faith</category>
      <category>sermon</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="images/lamb.jpg" alt="Behold the Lamb" /></p>
<h2 id="introduction">Introduction</h2>
<p>Good morning brothers and sisters.
If we reflect on the period or time of Covid, we consider it was a  scary and dark time for us all. A time when people where in search of answers. For some this was science, but sadly science became the control of governments to dictate their narratives and propagate their outcomes. Studies once reliable were shown to be easily polluted, easily accepted and the community that were supposed to gate was thin.</p>
<p>An example was 3 people who wrote 20 hoax papers about gender-identity, group-identity and sexuality etc. 6 of their papers were rejected. 7 were under serious peer reviews and the rest were progressing to approval. Another random sample of 5000 papers in one field alone, Neuroscience, revealed 34% of papers were plagiarized or just made up in 2020.</p>
<p>During Covid we also saw a divisions in society, as there were those against vaccines and those for. People were ostracized. Society and people turned on each other. The media took sides and pushed agendas from governments right or wrong. What was clear, was that truth was relative. It was cheap. Easy to deny, easy to twist. Information was censored. People were scared. People were confused. They were looking for truth, but deceived or unable to discern truth. It was a dark time.</p>
<p>Not only where we fighting a diseases, government intervention, but there was a mindset being proliferated and that of gender-politics (still making it's rounds today). Men could call themselves women, trans individuals wanted to be called by specific pronouns, people could be whoever they wanted to be. A women could label themselves man, and a man label themselves a woman despite their clear physical design. This thinking continues today in America and now in Europe. Again, truth is not based on reality but is not defined from the figments of peoples imaginations.</p>
<p>But amidst these dark times, where truth is relative and controlled, there are some truths no man can alter.</p>
<ol>
<li>Our God is true. Basic human reasoning could tell you that.</li>
<li>And the second, the focus for the message today, The Gospel is true and is the worlds only hope.</li>
</ol>
<blockquote>
<p>READ 2 Corinthians 4:1-6</p>
</blockquote>
<h2 id="may-blindness-be-removed">May blindness be removed</h2>
<p>This morning, that light has shone out of darkness, for today there be some seated here whose blindness has been removed. But there are also others who remind blind. Darkness is upon you, but you believe you are in the light. Be warned friend, it is easy for darkness to appear as light, when darkness is all you know. May the Lord awaken you this morning, may your eyes open, may the glorious light of the gospel shine and may it give you the light of the knowledge of the glory of God.</p>
<p>Let's turn to the Lord in prayer.</p>
<h3 id="pray-for-someone-to-get-saved.for-the-darkness-to-be-removed">Pray for someone to get saved. For the darkness to be removed</h3>
<h2 id="body">Body</h2>
<h3 id="hell-matters-are-you-going-there">1. Hell matters, are you going there?</h3>
<h4 id="hell-is-real">1.1 Hell is real</h4>
<h5 id="i.the-logical-argument">i. The logical argument</h5>
<ul>
<li>I just want to say this morning, if it's not immediately clear, hell is real.</li>
<li>Look out at the very basics mechanics and patterns of the our world.</li>
<li>There is a very definitive law embedded in all things. You reap what you sow. You sit around and do nothing and well you will be without a job. You don't study for exams and you will fail. You break the law, you are punished. Why should the fundamental mechanic be any different when it comes to eternity when this is our reality?</li>
</ul>
<h5 id="ii.the-biblical-evidence">ii. The biblical evidence</h5>
<ul>
<li>But perhaps if the logical argument doesn't suffice how about the truth, accuracy and reliability of scripture. There are 54 verses in scripture that tell us of hell (Deut 32:22, Isa 5:14, Luke 12:5, 2 Peter 2:4).</li>
</ul>
<blockquote>
<p>Deu 32:22  For a fire is kindled in mine anger, and shall burn unto the lowest hell, and shall consume the earth with her increase, and set on fire the foundations of the mountains.</p>
</blockquote>
<blockquote>
<p>Isa 5:14  Therefore hell hath enlarged herself, and opened her mouth without measure: and their glory, and their multitude, and their pomp, and he that rejoiceth, shall descend into it.</p>
</blockquote>
<blockquote>
<p>Luk 12:5  But I will forewarn you whom ye shall fear: Fear him, which after he hath killed hath power to cast into hell; yea, I say unto you, Fear him.</p>
</blockquote>
<blockquote>
<p>2Pe 2:4  For if God spared not the angels that sinned, but cast them down to hell, and delivered them into chains of darkness, to be reserved unto judgment;</p>
</blockquote>
<h5 id="iii.call-out-the-guilty">iii. Call out the guilty</h5>
<ul>
<li>Hell is a place of eternal torment. A place of darkness. A place suitable enough for the bounds of evil. A place filled with those who have murdered, killed, raped, stolen, cheated, lied and had evil thoughts. Jesus says in the book of Mark,</li>
</ul>
<blockquote>
<p>And he said, That which cometh out of the man, that defileth the man. For from within, out of the heart of men, proceed evil thoughts, adulteries, fornications, murders, Thefts, covetousness, wickedness, deceit, lasciviousness, an evil eye, blasphemy, pride, foolishness: All these evil things come from within, and defile the man.</p>
</blockquote>
<blockquote>
<p>Rev 21:8  But the fearful, and unbelieving, and the abominable, and murderers, and whoremongers, and sorcerers, and idolaters, and all liars, shall have their part in the lake which burneth with fire and brimstone: which is the second death.</p>
</blockquote>
<ul>
<li>Note scripture says, &quot;all liars&quot;, not some. All liars shall have their part in the lake of fire. If you have lied before, you stand condemned before a Holy God!</li>
<li>How clean are your thoughts?</li>
<li>As sure as the Sun will rise tomorrow, we have all fallen short of God's glory. Do you see it brother, do you see it sister?</li>
</ul>
<h5 id="iv.hell-is-scary">iv. Hell is scary</h5>
<ul>
<li>You think the challenges in this life are hard, there are nothing in comparison to come for the torment, pain, affliction and burning that awaits you in hell. In fact, hell will be cast into the lake of fire. There will be no respite. There will be no momentary relief. There will be no joy, there will be no laughter, only pain, only death, only destruction and continual evil.</li>
<li>Not for one lifetime, not for two, but for all eternity. All you will know is PAIN. All you will know is suffering. You have broken God's law and God in His Holiness has defined the judgement. If God was so creative to create a world as beautiful as this earth, imagine when He applies His mind to creating an eternal prison for those who have murdered, raped, blasphemed, lied and rejected Him.</li>
</ul>
<h4 id="death-and-hell-ride-together">1.2 Death and Hell ride together</h4>
<h5 id="i.what-hell-is">i. What hell is?</h5>
<blockquote>
<p>Rev 6:8  And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him.</p>
</blockquote>
<ul>
<li>Hell accompanies Death. They ride together.</li>
<li>If you have to die today, if you had to step out of this church and meet you death, where would you go?</li>
</ul>
<h5 id="ii.have-you-broken-the-law">ii. Have you broken the law?</h5>
<ul>
<li>If you have broken but just one of God's laws, you have failed to meet God's requirement for heaven.</li>
<li>Being in church, attending church does not redeem a sin committed.</li>
<li>Popes, men, money, good deeds cannot undo breaking God's law.</li>
<li>Your father, your mother, your family cannot redeem you from the judgement to come.</li>
<li>No ordinary man, no woman can stand as substitute.</li>
<li>Where are you going when you die? Have you met God's standard?</li>
</ul>
<h3 id="jesus-matters-do-you-believe-in-the-right-jesus">2. Jesus matters, do you believe in the right Jesus?</h3>
<h4 id="jesus-is-god-john-129">2.1 Jesus is God (John 1:29)</h4>
<h5 id="i.the-many-jesus">i. The many Jesus</h5>
<ul>
<li>Turn your Bibles to John, and read verse 29.</li>
<li>We see John gaze out and say a most prophetic thing.</li>
</ul>
<h5 id="ii.exposit-verse">ii. Exposit verse</h5>
<ol>
<li>Behold, gaze with intent, pay attention</li>
<li>Jesus &quot;taketh away the sin of the world&quot; (how amazing, the disciples and those closest to Him could have learnt much from these simple words of John). Yet for them they were awaiting the literal kingdom, and missed God's plan. Jesus was going to take away sin.</li>
<li>But John the Baptist, is not called the greatest prophet without reason by Jesus (Matthew 11:11). Not only is it revealed what God would do with sin, but also &quot;how&quot; He would do it.</li>
</ol>
<h5 id="iii.jesus-the-sacrifice">iii. Jesus the Sacrifice</h5>
<ul>
<li>&quot;Lamb of God&quot; - Jesus would be that way, He would be the means by which sin would be atoned. He was pointing to the cross. He was talking to Jesus being God's son. The creator dying for His creation. The son dying for the atonement of sin.</li>
<li>Does this not reflect the Holiness of God, by the payment required.</li>
<li>Does this not reflect the extreme cost for sin, God needed a payment for your sin and mine, and He His son, to be beaten, to be pierced, to walk this earth and be mocked, and to be crucified, so you and I can have freedom from sin, atonement from sin, and life eternal.</li>
</ul>
<h4 id="the-real-jesus-john-11-3-14-1-john-57">2.2 The real Jesus (John 1:1-3, 14; 1 John 5:7)</h4>
<h5 id="i.the-jehovah-witness">i. The Jehovah Witness</h5>
<ul>
<li>I've run into the JW's many times, had some great conversations through the years.</li>
<li>And while I was growing up, being in an Indian school, had many muslims try to convert me.</li>
<li>But what was interesting and common hooks both used in their conversion process as a form of gateway to their religions was Jesus. Both see Jesus as a great prophet and that's it.</li>
</ul>
<blockquote>
<p>Mar 13:22  For false Christs and false prophets shall rise, and shall shew signs and wonders, to seduce, if it were possible, even the elect.</p>
</blockquote>
<h5 id="ii.not-the-same-jesus">ii. Not the same Jesus</h5>
<ul>
<li>Their Jesus is not our Jesus. Their Christ is not our Christ of the Bible. Their Jesus is a prophet, our's is God</li>
</ul>
<h5 id="iii.why-does-this-matter">iii. Why does this matter?</h5>
<ul>
<li>How can sins of the world be atoned for by the death of a man, even if he were perfect. Perhaps he would pay for 1 or 2. But to be the atonement for all sin, for all men and women since the dawn of time. This is significant. The payment has to be great, and the only thing that makes sense is that Christ himself, God himself becomes that payment, that atonement. Jesus MUST BE GOD FOR THE PAYMENT TO BE SUFFICIENT.</li>
<li>Only an ETERNAL PAYMENT, can stand for an ETERNAL JUDGEMENT.</li>
<li>Only an ETERNAL PAYMENT, can stand for ETERNAL SECURITY.</li>
<li>Only an ETERNAL PAYMENT, can redeem you from HELL.</li>
<li>That PAYMENT has to be Jesus Christ as GOD.</li>
</ul>
<h5 id="iv.the-supporting-verses">iv. The supporting verses</h5>
<ul>
<li><p>The verses that are irrefutable to the fact that Jesus is God is in John 1:1-3, 14-15, 1 John 5:7.</p>
</li>
<li><p>Please turn to John 1:1</p>
<ol>
<li>So we see there is the Word. This word was in the beginning with God (the Word is eternal)</li>
<li>The Word was also creator.</li>
<li>In v14, 15 we learn His identity.</li>
<li>Another irrefutable verse is 1 John 5:6-7 as it affirms Jesus is a part of the Trinity.</li>
</ol>
</li>
<li><p>Jesus part of the Trinity, and He is God, and He is your Savior, and He is the ONLY atonement for sin.</p>
</li>
<li><p>This is the TRUE JESUS. There is NONE OTHER.</p>
</li>
</ul>
<h3 id="the-romans-road">3. The Romans Road</h3>
<h4 id="romans-323">3.1 Romans 3:23</h4>
<h5 id="i-we-are-all-guilty">i We are all guilty</h5>
<ul>
<li><p>The Bible says that all have sinned. That mean's you and I. We are sinners.</p>
</li>
<li><p>And have fallen short of God's glory.</p>
<blockquote>
<p>Romans 3:10, As it is written, there is none righteous, no not one.</p>
</blockquote>
</li>
<li><p>Do you see it friend? Your good works can't help. You could save 50 million lives but it would be insufficient to atone for the sin you have already committed in your thoughts, with your body or in your actions.</p>
</li>
</ul>
<h4 id="romans-623-a">3.2 Romans 6:23 (a)</h4>
<h5 id="i.our-sin-brings-death">i. Our sin brings death</h5>
<ul>
<li>What does sin bring?</li>
<li>Well two things,
<ol>
<li>it destroys your life. Sin separates from you God, but it also pushes you further into darkness. But it can also accelerate God's judgement. If you reject His word, the Gospel and continue to pursue your own, the Lord may choose to end it.</li>
<li>secondly, sin brings the second death.</li>
</ol>
</li>
</ul>
<blockquote>
<p>Rev 20:14  And death and hell were cast into the lake of fire. This is the second death.
And whosoever was not found written in the book of life was cast into the lake of fire.</p>
</blockquote>
<p>This morning, do you see your destination?</p>
<h4 id="romans-58">3.3 Romans 5:8</h4>
<h5 id="i.god-made-a-way">i. God made a way</h5>
<ul>
<li>Death hangs of you sinner, death hangs over you. Eternal torment and condemnation.</li>
<li>But friend, but for Jesus.</li>
<li>Read Romans 5:8.</li>
<li>How amazing is our Lord, while we were yet sinners, while we were still sinful.</li>
<li>It's not about being clean and then coming, but about being contrite, being convicted of your sin, and seeing the need for you Saviour.</li>
<li>Jesus has made a way.</li>
</ul>
<h4 id="romans-109">3.4 Romans 10:9</h4>
<h5 id="i.you-can-be-saved">i. You can be saved</h5>
<ul>
<li>But how can I be saved you ask? How can I be rescued from the fire?</li>
<li>Read Romans 10:9.</li>
<li>But it is not enough to confess, to speak or to think in one's mind.</li>
<li>The devil understands the scriptures. We see how he referenced it when He tried to tempt Jesus. He believes in a God, He knows God exists.</li>
<li>But that is insufficient. You have to confess and believe in thine heart. It has to be down to your core, to your innermost parts.</li>
<li>And when you have thou shalt be saved.</li>
</ul>
<h4 id="romans-810">3.5 Romans 8:10</h4>
<h5 id="i.free-from-condemnation">i. Free from condemnation</h5>
<ul>
<li>The Bible says in Roman 8:1, there is no condemnation to those who are in Christ Jesus.</li>
<li>When you are saved, you are free from God's wrath, you are free from His eternal judgement.</li>
<li>Oh praise the Lord, for His work, for His redemption for you and I.</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>READ Spurgeons PLEA</p>
<p>Take a moment now, and you speak to the Lord. If your heart has been convicted by the light of the gospel, call upon the Lord.
After a short moment, I will pray.</p>
]]></description>
    </item>
    <item>
      <title>The Less Talked about area of Success</title>
      <link>https://danebalia.com/less-talked-about-area.html</link>
      <guid isPermaLink="true">https://danebalia.com/less-talked-about-area.html</guid>
      <pubDate>Mon, 08 May 2023 13:10:00 GMT</pubDate>
      <category>tech</category>
      <category>leadership</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="/images/happymarriage.jpg" alt="Marriage" /></p>
<p>One of the lesser-discussed facets of a successful career is the health and joy of one's marriage. Though it is undeniably a personal and private matter, can we not consider it as a fundamental ingredient, or at the very least a significant factor, in cultivating an effective mindset to deliver our best work?</p>
<p>Assuming you have a special someone in your life, turmoil at home doesn't lend itself to efficiency at work. Struggles at home, at work, or within your socio-economic context can amalgamate into a high-stress cocktail. Consider, for instance, the impact buying a house can have on an employee's productivity during the process. I've witnessed this in myself and in team members I've guided. It often results in mental distractions, slower delivery, and interruptions. The impact is even more profound when you and your closest companion are embroiled in heated conflict.</p>
<p>While I'm no expert, I believe we should at least initiate the conversation and grow together. I've been in the industry for over 20 years, and for most of that time, I've been married. Ever since tying the knot, I've been intentional about ensuring the success of my home and marriage. We're joyously celebrating 13 years of matrimony this year, and it's been the best journey of my life.</p>
<p>When chaos descends on the world, it's comforting to find solace in the warm, loving embrace of your partner at night. This is someone who loves you unconditionally. Moreover, in your spouse, you often discover your most effective critic for self-improvement. They possess deep insights into your behavior and are able to communicate them effectively.</p>
<p>To stimulate this conversation, I'd like to share some high-level strategies that have been instrumental for us:</p>
<ol>
<li><p><strong>Your spouse must be your best friend.</strong> Friends and family are essential, but they take second place to my wife. She is always a top priority.</p>
</li>
<li><p><strong>Your spouse must come before your kids.</strong> The unique love of a child is a given, but it doesn't supersede the bond and priority of a husband and wife. This bond forms the foundation of our family structure.</p>
</li>
<li><p><strong>Cleave to your spouse.</strong> I don't require breaks from my wife. Instead, I seek her out, inviting her closer to me. We are partners, finding courage, strength, and love in each other.</p>
</li>
<li><p><strong>Align on your mission.</strong> Our life goals, including those for our kids, family, and careers, are in harmony. Much of this was defined and articulated before we got married, during our courtship. It's crucial to address the difficult topics first.</p>
</li>
<li><p><strong>Don't use work as an excuse.</strong> It's all too easy to let work become a priority at the expense of being present in your relationship. Stay mindful of this.</p>
</li>
<li><p><strong>Make the time.</strong> Be present when your spouse speaks. Engage them not only on your concerns and frustrations, but ask about theirs. Show curiosity about their evolving interests.</p>
</li>
</ol>
<p>These are some of the guiding principles we adhere to, although individual experiences will naturally vary.</p>
<p>Even if you forget everything else from this article by tomorrow, I urge you to remember this: Be intentional in nurturing your relationship with the person with whom you've chosen to walk life's path.</p>
<p>Marriage is a beautiful journey, and its beauty is largely a function of what you invest into it.</p>
]]></description>
    </item>
    <item>
      <title>Building a Home Firewall</title>
      <link>https://danebalia.com/building-home-firewall.html</link>
      <guid isPermaLink="true">https://danebalia.com/building-home-firewall.html</guid>
      <pubDate>Thu, 23 Mar 2023 13:10:00 GMT</pubDate>
      <category>tech</category>
      <category>diy</category>
      <author>Dane Balia</author>
      <description><![CDATA[<h2 id="the-problem">The Problem</h2>
<p>For about 3 years I've been running a D-Link DIR-825, a fibre and wireless router provided by my ISP. And here to begins my woe.
I've been struggling with it's maintenance and software patching, it's long aged and become a dinosaur with no more firmware upgrades.
With the increasing attacks worldwide on networks, I wanted deeper insight to the hardware and software used to defend and connect my home network.</p>
<p>So I decided to poke around my router, and discovered that publicly visible to the world, and not by my configuration, was an SSH service.
It was running with admin privilege and with the default password set by D-Link themselves (which I guessed by the way).</p>
<p>Correlation is not necessarily causation of course, but the abstraction has paid a price.</p>
<p><img src="/images/DIR-825.png" alt="Router" /></p>
<h3 id="but-first-interesting-hack">But first, interesting hack</h3>
<p>If you want your router to shutdown daily at a set time. Instead of using cron, you can use the scheduler built into the shutdown command.</p>
<pre><code class="language-bash"># This will shutdown daily at 22:00
echo &quot;shutdown -h 22:00&quot; &gt;&gt; /etc/sysconfig/rc.local
</code></pre>
<p>The beauty of this is that you can interrupt the shutdown with:</p>
<pre><code class="language-bash">shutdown -c
</code></pre>
<p>And to confirm if the command has fired on startup</p>
<pre><code>ps -ef | grep shutdown
</code></pre>
<h2 id="back-to-the-home-firewall-setup">Back to the Home Firewall setup</h2>
<p>My first step to correcting the problem was to try identify a physical firewall that I could purchase.
I live in South Africa so choice is limited, but I wanted something entirely cost effective, ability to deep dive into network traffic and
something not made in China. That was the D-Link and it's support was horrible. Sadly, the closest thing was R5000 (Ubiquity) and it didn't seem practical
with the current economic climate.</p>
<p>That sparked an old idea, why not try a Raspberry PI 4. I attempted this before using Ubuntu server but ran into challenges with the wifi speed when it was used a Wireless hotspot.
But I was on holiday now and well, why not. I had a incremental 2 phase plan.</p>
<h2 id="what-where-some-alternatives-to-ipfire">What where some alternatives to IpFire?</h2>
<ol>
<li>I could have stuck with the DLink and overwritten it with <a href="https://openwrt.org">OpenWrt</a>. But sadly it wasn't supported.</li>
<li>As mentioned the <a href="https://scoop.co.za/products/wireless-networking/ubiquiti-unifi/">Unify</a> was R4800.</li>
<li>Just use vanilla Linux (Ubuntu etc). This is covered below in the Q&amp;A.</li>
</ol>
<h2 id="why-this-may-be-valuable-to-do">Why this may be valuable to do?</h2>
<ol>
<li>Fine grained control of your network</li>
<li>More transparency around what is coming in and out</li>
<li>Increase learning in network design and security</li>
<li>You don't trust your existing device (it's out of firmware upgrades or really old)</li>
</ol>
<h3 id="phase-1-proof-of-concept">Phase 1 - Proof of Concept</h3>
<ul>
<li>Retain the D-Link for speedy wifi access, but sufficiently limit it's capability.</li>
<li>Use the Pi4 as the gateway and firewall with Raspbian 64</li>
<li>Get basic masquerading working for everything on the D-Link - basically all wifi connected devices routing through the firewall to the internet.</li>
</ul>
<h3 id="phase-2-implement-with-ipfire">Phase 2 - Implement with IpFire</h3>
<ul>
<li>Once that proved itself, I would replace Raspbian with something more enterprise - IpFire.</li>
<li>Ensure the networking between the two devices and my home computers internet access functions correctly</li>
<li>Try get rid of the D-Link and use the Pi4 as a Wireless Hotspot as well and gauge its performance</li>
</ul>
<h3 id="my-current-configuration">My Current Configuration</h3>
<ol>
<li>Fibre CPE that provides access through Ethernet cable</li>
<li>Fibre Service Provider: Coolideas</li>
<li>D-Link DIR 825 with the WAN port connected to the CPE and Wifi Hotspot</li>
<li>Raspberry Pi4</li>
</ol>
<ul>
<li>8GB Internal memory</li>
<li>32 GB SSD</li>
<li>USB Broadcom NIC</li>
<li>Internal WLAN NIC</li>
<li>Internal Ethernet NIC</li>
</ul>
<p><img src="/images/Pi4.jpg" alt="Pi4" /></p>
<h3 id="my-target-configuration">My Target Configuration</h3>
<ol>
<li>No more D-Link router (unless providing access to guests)</li>
<li>Raspberry Pi4 running <a href="http://ipfire.org">IpFire</a></li>
<li>Fibre CPE direct into Pi4 for Internet Access (<span style="color: red">RED</span>)</li>
<li>Second USB NIC connected to D-Link router for guest access (<span style="color: green">GREEN</span>)</li>
<li>Pi4 as a wireless hotspot (<span style="color: blue">BLUE</span>)</li>
</ol>
<h2 id="the-result">The Result</h2>
<p>Well success of course. But perhaps let me talk through some of the challenges.</p>
<h2 id="challenges-in-phase-1">Challenges in Phase 1</h2>
<h4 id="should-i-use-the-wan-port-to-connect-the-pi4-and-d-link">Should I use the WAN port to connect the Pi4 and D-Link?</h4>
<ul>
<li>This is firstly not supported as the expectation that both the WAN IP is not the same as the WLAN.</li>
<li>I used a standard port.</li>
</ul>
<h4 id="do-i-have-to-do-any-port-forwarding-or-masquerading-on-the-d-link-and-should-the-two-devices-share-a-subnet">Do I have to do any port forwarding or masquerading on the D-Link and should the two devices share a subnet?</h4>
<ul>
<li>No, there was no configuration needed on the D-Link.</li>
<li>Yes, I used the USB NIC of the Pi4 (GREEN Zone) I used to link up to the D-Link</li>
</ul>
<h4 id="how-should-i-configure-the-pi4-raspbian-os">How should I configure the Pi4 Raspbian OS?</h4>
<ul>
<li>I plugged the Cat 6 from the Fibre CPE into it the internal Pi4 Nic allowing DHCP to configure the internet IP address through the provider.</li>
</ul>
<h4 id="did-you-masquerade">Did you masquerade?</h4>
<ul>
<li>Yes, I added a simple rule to masquerade the GREEN zone (link between two devices)</li>
</ul>
<pre><code># sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
</code></pre>
<h4 id="why-did-i-not-stop-here">Why did I not stop here?</h4>
<ul>
<li>It was insecure. I would need to spend a significant amount of time setting the firewall rules and debugging.</li>
<li>Not to mention, installation a ton of software to calibrate network statistics.</li>
</ul>
<h2 id="challenges-in-phase-2">Challenges in Phase 2</h2>
<p>Now that we have a proof of concept, let's move onto IpFire.</p>
<h4 id="any-tips-for-initial-setup-of-image-onto-sd-card">Any tips for initial setup of Image onto SD-Card?</h4>
<ul>
<li>In writing the IpFire image to your SD-card ensure to disable the serial cable requirement so you can set it up easily with HDMI and USB keyboard - you need to edit the uENV.txt file
on the flashed SD Card:</li>
</ul>
<pre><code># From
SERIAL-CONSOLE=ON 
# To
SERIAL-CONSOLE=OFF
</code></pre>
<h4 id="how-did-you-define-the-zones">How did you define the zones?</h4>
<ul>
<li>I used <span style="color: red">RED</span> for the Internet access (internal nic of Pi4)</li>
<li><span style="color: green">GREEN</span> for all traffic from the D-Link router (USB nic to D-Link)</li>
<li><span style="color: blue">BLUE</span> for wireless traffic using the Pi4 itself</li>
<li>Be advised for access from GREEN to RED I used the transparent proxy included with IpFire</li>
</ul>
<h3 id="it-works">It works</h3>
<p><img src="/images/ipfire.png" alt="IpFire" /></p>
<p>It's been an amazing experience thus far, by no means an enterprise grade user interface or corporate backing for sexy bells and whistles.
But it's a Toyota Corolla that does the job and well.</p>
<h4 id="supported-features-i-am-getting-a-ton-of-value-around-is">Supported features I am getting a ton of value around is:</h4>
<ol>
<li>Hardware graphing performance (memory, cpu, load)</li>
<li>Firewall logs by country, port and IP</li>
<li>Tcpdump on console for troubleshooting and viewing low-level packets</li>
<li>Built-in proxy</li>
<li>Easy support for multiple networks</li>
<li>Wireless Hotspot easy configuration</li>
<li>Proxy reports and logs</li>
<li>Intrusion detection (multi-provider support)</li>
<li>IP Address black lists</li>
<li>Pakfire enables safe package installation and in-built plugin support</li>
<li>DNS resolution and configuration</li>
</ol>
<h2 id="tip">Tip</h2>
<p>It may be worthwhile when you are done to review this helpful guide around best practices from <a href="https://blog.ipfire.org/post/firewall-configuration-recommendations-for-ipfire-users">IpFire Blog</a>
A helpful tutorial that may <a href="https://www.hendgrow.com/ugs/HowTo-install-IPFire-on-a-Raspberry-Pi.pdf">guide</a> your journey.</p>
]]></description>
    </item>
    <item>
      <title>What I learned this week</title>
      <link>https://danebalia.com/wiltw-2023-01-11.html</link>
      <guid isPermaLink="true">https://danebalia.com/wiltw-2023-01-11.html</guid>
      <pubDate>Wed, 11 Jan 2023 05:10:00 GMT</pubDate>
      <category>creative</category>
      <category>wiltw</category>
      <author>Dane Balia</author>
      <description><![CDATA[<h3 id="quotes">Quotes:</h3>
<h4 id="tiny-thought">Tiny Thought</h4>
<blockquote>
<p>If you wait until you're motivated, you’ve already lost.
Surgeons don’t always feel like doing surgery. Teachers don’t always feel like teaching. Parents don’t always feel
like cooking. Firemen don’t always feel like rushing into a burning building.
If you let motivation dictate your actions, inertia conspires to keep you in place.</p>
</blockquote>
<blockquote>
<p>Action creates progress. Progress creates momentum. Momentum creates motivation.</p>
</blockquote>
<h3 id="cap-theorem">CAP Theorem</h3>
<p>Your two choices: you have to choose between consistency or availability. You cannot have both.
This assumes 100% availability but you could have degrees of consistency along with availability (or vice versa).</p>
<h3 id="list.foreach-is-not-foreach-c">List.ForEach is not foreach (C#)</h3>
<p>List.foreach will create isolated clojures that run Actions independently without side-affects.
foreach is synchronous and mutates.
<a href="https://learn.microsoft.com/en-us/archive/blogs/ericlippert/foreach-vs-foreach">Eric Lippert</a></p>
<h3 id="redis-use-cases-blog.bytebytego.com">Redis Use Cases (blog.bytebytego.com)</h3>
<p><img src="/images/redis.jpg" alt="Use cases" /></p>
<h3 id="playwright">Playwright</h3>
<ul>
<li>For Playwright tests in .NET, there is no need to use Playwright directly. But you can use Playwright.NUnit to
implement and use Page.</li>
</ul>
<h3 id="adding-a-user-to-sql-server-some-crucial-steps-to-connect-from-docker-with">Adding a User to SQL Server (some crucial steps) to connect from Docker with</h3>
<ol>
<li>Ensure you checkout SQL Configuration Manager - Is it running via TCP as a protocol?</li>
<li>Don't forget to enable TCP listening on the IP you require</li>
<li>User gets added to Sql Server</li>
<li>User then get's given permission in database with Securables (schemas)</li>
</ol>
<h3 id="team-lead-tid-bit">Team Lead Tid-bit:</h3>
<blockquote>
<p>Never forget to keep your eye on the big picture when leading a team. It's easy when fighting fires and trust is low
to get stuck in the trenches.
In the trenches, strategy is missed and often times that leads to a disconnect in what business needs and what is
visible to business.</p>
</blockquote>
<h3 id="measuring-team-performance">Measuring team performance:</h3>
<ul>
<li>When it comes to measuring a teams performance and reporting back to business, don't build your own metrics.</li>
<li>Often times the metrics that drives a team internally are not the same metrics that provide business the value they
need.</li>
<li>How to start measuring a team for yourself? Start by figuring out how you would measure yourself.</li>
</ul>
]]></description>
    </item>
    <item>
      <title>2023 Reading List</title>
      <link>https://danebalia.com/2023-reasding.html</link>
      <guid isPermaLink="true">https://danebalia.com/2023-reasding.html</guid>
      <pubDate>Sun, 08 Jan 2023 08:16:00 GMT</pubDate>
      <category>creative</category>
      <category>reading</category>
      <author>Dane Balia</author>
      <description><![CDATA[<p><img src="/images/library.jpg" alt="2023 Reading List" /></p>
<h2 id="read">Read:</h2>
<ol>
<li><a href="https://www.amazon.co.uk/Relentless-Unstoppable-Tim-S-Grover/dp/1476714207">Relentless - Tim Grover</a></li>
<li><a href="https://www.amazon.co.uk/Thinking-Fast-Slow-Daniel-Kahneman/dp/0141033576/ref=sr_1_1?keywords=thinking+fast+and+slow+by+daniel+kahneman&amp;qid=1679229120&amp;s=books&amp;sprefix=thinking+f%2Cstripbooks%2C255&amp;sr=1-1">Thinking Fast and Slow - Daniel Kahneman</a></li>
<li><a href="https://www.gladwellbooks.com/titles/malcolm-gladwell/blink/9780316172325/">Blink - Malcolm Gladwell</a></li>
<li><a href="https://www.amazon.com/Peace-Child-Unforgettable-Primitive-Treachery/dp/0830737847">Peace Child - Don Richardson</a></li>
<li><a href="https://www.amazon.com/Magicians-Nephew-C-S-Lewis/dp/0064405052/ref=sr_1_1?keywords=the+magician%27s+nephew&amp;qid=1681327854&amp;s=books&amp;sprefix=the+magician%27s+ne%2Cstripbooks-intl-ship%2C346&amp;sr=1-1">The Magician's Nephew - C.S.Lewis</a></li>
<li><a href="https://www.amazon.com/Mobile-Solar-Power-Made-yourself/dp/1546567119/ref=sr_1_10?crid=1EXTPF818YF33&amp;keywords=diy+solar+power+for+beginners+book&amp;qid=1681327911&amp;s=books&amp;sprefix=diy+solar+power+for+beginners+bo%2Cstripbooks-intl-ship%2C327&amp;sr=1-10">Mobile Solar Power Made Easy - William Prowse</a></li>
<li><a href="https://en.wikipedia.org/wiki/Elon_Musk:_Tesla,_SpaceX,_and_the_Quest_for_a_Fantastic_Future">Elon Musk - Ashlee Vance</a></li>
<li><a href="https://www.penguinrandomhouse.com/books/563882/calling-bullshit-by-carl-t-bergstrom-and-jevin-d-west/">Calling Bullshit</a></li>
<li><a href="https://www.wordsworth.co.za/products/surrounded-by-idiots-the-four-types-of-human-behaviour-or-how-to-understand-those-who-cannot-be-understood?_pos=2&amp;_sid=7def83557&amp;_ss=r">Surrounded by Idiots: The Four Types of Human Behaviour - Thomas Erikson</a></li>
<li><a href="https://www.amazon.com/dp/0735211299/ref=s9_acsd_ri_bw_c2_x_2_t?pf_rd_m=ATVPDKIKX0DER&amp;pf_rd_s=merchandised-search-10&amp;pf_rd_r=K4AABKRFED653GK6369A&amp;pf_rd_t=101&amp;pf_rd_p=ec1034ac-997c-47fd-8075-3a3a4b4c3aa3&amp;pf_rd_i=283155">Atomic Habits - James Clear</a></li>
<li><a href="https://www.amazon.com/Surrounded-Psychopaths-Yourself-Manipulated-Exploited/dp/1250763886">Surrounded By PsychoPaths - Thomas Erikson</a></li>
<li><a href="https://www.amazon.com/Elegant-Puzzle-Systems-Engineering-Management/dp/1732265186">An Elegant Puzzle: Systems of Engineering Management</a></li>
<li><a href="https://www.amazon.com/Hidden-Treasures-Biblical-Chuck-Missler/dp/1578211271">Hidden Treasures - Chuck Missler</a></li>
<li><a href="https://www.amazon.com/Mystery-Godliness-Experiencing-Christ-Us/dp/1619581868/ref=sr_1_1?crid=1LCLBQBBRHG79&amp;keywords=the+mystery+of+godliness&amp;qid=1700115624&amp;s=books&amp;sprefix=the+mystery+of+godli%2Cstripbooks-intl-ship%2C310&amp;sr=1-1">The Mystery of Godliness - W. Ian Thomas</a></li>
<li><a href="https://www.amazon.com/Hobbit-J-R-R-Tolkien/dp/0618260307/ref=sr_1_3?crid=1Y6AT4E83LI9I&amp;keywords=the+hobbit&amp;qid=1703755872&amp;s=books&amp;sprefix=the+hobb%2Cstripbooks-intl-ship%2C474&amp;sr=1-3">The Hobbit - JRR Tolkien</a></li>
<li><a href="https://www.amazon.com/Psychology-Money-Timeless-lessons-happiness/dp/0857197681">The Psychology of Money</a></li>
<li><a href="https://livebook.manning.com/book/think-like-a-software-engineering-manager">Thinking like an Engineering Manager</a></li>
<li><a href="https://www.amazon.com/How-Make-Best-Coffee-Home/dp/1784727245">How to make the best coffee at home - James Hoffman</a></li>
</ol>
<h2 id="planned">Planned:</h2>
<ol>
<li><a href="http://craftinginterpreters.com/">Robert Nystrom - Crafting Intepreters</a></li>
<li><a href="https://www.goodreads.com/book/show/15842786-understanding-computation">Tom Stuart - Understanding Computation</a></li>
<li><a href="https://geraldmweinberg.com/Site/QSM_vol_1.html">Gerald Weinberg - Quality Software Management, Vol 1: Systems Thinking</a></li>
<li><a href="https://www.amazon.com/Thinking-Systems-Donella-H-Meadows/dp/1603580557">Donella Meadows - Thinking in Systems</a></li>
<li><a href="https://www.amazon.com/dp/1491983647?tag=bbookshub-20&amp;linkCode=ogi&amp;th=1&amp;psc=1">Brendan Burns - Designing Distributed Systems</a></li>
<li><a href="https://www.larkinestate.com/books/dispensational-truth.html">Clarence Larking - Dispensational Truth</a></li>
<li><a href="https://sre.google/books/">Betsy Beyer - Site Reliability Engineering</a></li>
<li><a href="https://www.amazon.com/Think-Again-Power-Knowing-What/dp/1984878107">Adam Grant - Think Again</a></li>
<li><a href="https://bookshop.org/books/rationality-what-it-is-why-it-seems-scarce-why-it-matters/9780525561996">Steven Pinker - Rationality: What It Is, Why It Seems Scarce, Why It Matter</a></li>
<li><a href="https://www.amazon.com/Lies-My-Govt-Told-Me-ebook/dp/B09R4Y6YKJ/ref=sr_1_1?keywords=lies+my+government+told+me+robert+malone&amp;qid=1673239997&amp;s=digital-text&amp;sprefix=lies%2Cdigital-text%2C455&amp;sr=1-1">Lies My Gov't Told Me: And the Better Future Coming</a></li>
<li><a href="https://www.amazon.com/gp/product/B09PZ9X17W/ref=ppx_yo_dt_b_d_asin_title_o00?ie=UTF8&amp;psc=1">Traced: Human DNA's Big Surprise</a></li>
<li><a href="https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations-ebook/dp/B07B9F83WM">Jez-Humble, Gene Kim - Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations</a></li>
<li><a href="https://www.brendangregg.com/blog/2020-07-15/systems-performance-2nd-edition.html">Brendan Gregg - Systems Performance</a></li>
<li><a href="https://sre.google/books/">Site Reliability Engineering</a></li>
<li><a href="https://sre.google/books/">Building secure &amp; reliable systems</a></li>
<li><a href="https://www.oreilly.com/library/view/fundamentals-of-software/9781492043447/">Neil Ford - Fundamentals of Software Architecture: An Engineering Approach</a></li>
<li><a href="https://www.oreilly.com/library/view/building-evolutionary-architectures/9781492097532/">Neal Ford, Rebecca Parsons - Building Evolutionary Architectures</a></li>
<li><a href="https://www.amazon.com/Hard-Thing-About-Things-Building/dp/0062273205">The Hard Thing About Hard Things - Ben Horowitz</a></li>
<li><a href="https://www.amazon.com/Are-Your-Lights-Figure-Problem/dp/0932633161/?_encoding=UTF8&amp;pd_rd_w=ceglc&amp;content-id=amzn1.sym.cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_p=cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_r=138-2750200-6069238&amp;pd_rd_wg=RcZwU&amp;pd_rd_r=680c1234-d2b8-45bc-a398-8acb35ad454c&amp;ref_=aufs_ap_sc_dsk">Are your lights on - Gerald Weinberg</a></li>
<li><a href="https://www.amazon.com/Introduction-General-Systems-Thinking-ebook/dp/B004VS9AUS/?_encoding=UTF8&amp;pd_rd_w=ceglc&amp;content-id=amzn1.sym.cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_p=cf86ec3a-68a6-43e9-8115-04171136930a&amp;pf_rd_r=138-2750200-6069238&amp;pd_rd_wg=RcZwU&amp;pd_rd_r=680c1234-d2b8-45bc-a398-8acb35ad454c&amp;ref_=aufs_ap_sc_dsk">Introduction to General Systems Thinking - Gerald Weinberg</a></li>
<li><a href="https://martinfowler.com/books/refactoring.html">Refactoring - Martin Fowler</a></li>
</ol>
]]></description>
    </item>
  </channel>
</rss>