<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>writing on jonah vairon</title>
    <link>https://58e1b19d.site-bk0.pages.dev/writing/</link>
    <description>Recent content in writing on jonah vairon</description>
    <generator>Hugo</generator>
    <language>en-uk</language>
    <copyright>© 2025 Jonah Vairon</copyright>
    <lastBuildDate>Sat, 20 Sep 2025 00:00:00 +0100</lastBuildDate>
    <atom:link href="https://58e1b19d.site-bk0.pages.dev/writing/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>running unsloth llms locally</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/running-unsloth-llms-locally/</link>
      <pubDate>Sat, 20 Sep 2025 00:00:00 +0100</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/running-unsloth-llms-locally/</guid>
      <description>&lt;p&gt;After running &lt;a href=&#34;https://jonahv.com/writing/local-llms-in-emacs-with-strix-halo/&#34;&gt;local llms in emacs with strix halo&lt;/a&gt;, I realised &lt;a href=&#34;https://unsloth.ai/&#34;&gt;unsloth&lt;/a&gt; provides&#xA;documentation on running their quantised models, e.g.:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.unsloth.ai/models/qwen3-how-to-run-and-fine-tune&#34;&gt;Qwen3: How to Run &amp;amp; Fine-tune&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.unsloth.ai/models/gemma-3-how-to-run-and-fine-tune&#34;&gt;Gemma 3: How to Run &amp;amp; Fine-tune&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With the docs, I can set the recommended values for model temperature, context&#xA;size, and sampling.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s also great guidance on offloading parts of a model to the CPU,&#xA;particularly useful in the case of MoE models like &lt;a href=&#34;https://docs.unsloth.ai/models/qwen3-how-to-run-and-fine-tune#running-qwen3-235b-a22b&#34;&gt;Qwen3&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;With only 64Gb of memory, this wouldn&amp;rsquo;t apply to me so much. But&#xA;&lt;a href=&#34;https://huggingface.co/unsloth/Qwen3-Next-80B-A3B-Instruct&#34;&gt;Qwen3-Next-80B-A3B-Instruct&lt;/a&gt; seems likely to change that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>local llms in emacs with strix halo</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/local-llms-in-emacs-with-strix-halo/</link>
      <pubDate>Thu, 21 Aug 2025 00:00:00 +0100</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/local-llms-in-emacs-with-strix-halo/</guid>
      <description>&lt;h2 id=&#34;problem&#34;&gt;problem&lt;/h2&gt;&#xA;&lt;p&gt;I got an &lt;a href=&#34;https://www.hp.com/us-en/workstations/zbook-ultra.html&#34;&gt;HP ZBook Ultra G1a&lt;/a&gt; for a new laptop. The main draw being the strix halo&#xA;processor it comes with. My particular machine has the &lt;a href=&#34;https://www.amd.com/en/products/processors/laptop/ryzen-pro/ai-max-pro-300-series/amd-ryzen-ai-max-plus-pro-395.html&#34;&gt;AMD Ryzen™ AI Max+ PRO&#xA;395&lt;/a&gt; and 64Gb of unified RAM. The idea being to run some relatively large local&#xA;LLMs at a usable speed.&lt;/p&gt;&#xA;&lt;p&gt;But, while powerful on paper, the software stack isn&amp;rsquo;t quite there yet to take&#xA;advantage of the strix halo hardware. The latest versions of &lt;a href=&#34;https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/quick-start.html&#34;&gt;ROCm&lt;/a&gt;, for example,&#xA;don&amp;rsquo;t support the processor line and aren&amp;rsquo;t readily available on &lt;a href=&#34;https://github.com/ROCm/ROCm/issues/4899&#34;&gt;Fedora 42&lt;/a&gt;&#xA;(which works perfectly on the Zbook Ultra).&lt;/p&gt;</description>
    </item>
    <item>
      <title>towards fully-automated citation screening</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/towards-fully-automated-citation-screening/</link>
      <pubDate>Tue, 19 Aug 2025 00:00:00 +0100</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/towards-fully-automated-citation-screening/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;abstract&lt;/h2&gt;&#xA;&lt;p&gt;Citation screening is one of the most resource intensive stages of conducting a&#xA;systematic review, making it ripe for automation. And while machine learning&#xA;tools have been developped over the years to try and assist researchers during&#xA;the screening stage, these have predominantly been semi-automated solutions&#xA;relying on part of the screening process to still be performed manually by&#xA;experts. The most promising attempts at fully-automating the process have been&#xA;in the form of classifier models, with most recent approaches trying to&#xA;incorporate large language models (LLMs) into the process. However, research as&#xA;of yet has been largely exploratory, producing complex systems that rely on&#xA;abnormal candidate citation features and varying degrees of expert input, that&#xA;are optimised with manual prompts and benchmarked on small, ad-hoc datasets.&#xA;This paper leverages advancements in language model (LM) prompting and AI&#xA;engineering to create the the first fully-automated LLM-driven pipeline for&#xA;biomedical citation screening. Designed with simplicity and minimisation of&#xA;expert input in mind, the pipeline was automatically optimised and benchmarked&#xA;on the CLEF2019 dataset, producing state-of-the-art results in key&#xA;classification metrics such as: recall, F1, F3, and WSS, outperforming&#xA;previous works in the field.&lt;/p&gt;</description>
    </item>
    <item>
      <title>loading SSL certs and keys from memory for httpx</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/loading-ssl-certs-and-keys-from-config-for-httpx/</link>
      <pubDate>Sat, 16 Aug 2025 00:00:00 +0100</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/loading-ssl-certs-and-keys-from-config-for-httpx/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;the problem&lt;/h2&gt;&#xA;&lt;p&gt;If you store your keys and certificates in a unified config file that&amp;rsquo;s&#xA;loaded into your Python app on start, like we do at work,  then you&amp;rsquo;ll face some&#xA;trouble creating ssl contexts for your &lt;code&gt;httpx&lt;/code&gt; clients.&lt;/p&gt;&#xA;&lt;p&gt;The heart of the problem is you can&amp;rsquo;t load certificates and keys from in&#xA;memory strings when creating SSL contexts &amp;ndash; &lt;a href=&#34;https://github.com/hbldh/pybankid/issues/51&#34;&gt;you have to pass file paths&#xA;to be read from&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;And while &lt;code&gt;httpx&lt;/code&gt; has a &lt;a href=&#34;https://github.com/encode/httpx/discussions/3508&#34;&gt;workaround&lt;/a&gt;, in so far as a way to load certificates and&#xA;keys from the environment through &lt;code&gt;SSL_CERT_FILE&lt;/code&gt; and &lt;code&gt;SSL_CERT_DIR&lt;/code&gt;, it doesn&amp;rsquo;t&#xA;really solve our problem; we would have to break apart our application config.&lt;/p&gt;</description>
    </item>
    <item>
      <title>the consistency of arithmetic is unknowable</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/the-consistency-of-arithmetic-is-unknowable/</link>
      <pubDate>Wed, 21 May 2025 00:00:00 +0100</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/the-consistency-of-arithmetic-is-unknowable/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;introduction&lt;/h2&gt;&#xA;&lt;p&gt;We are concerned with answering whether it is possible for us to know that&#xA;arithmetic is consistent, i.e. whether we can know the consistency of a theory&#xA;of true arithmetic. I will argue that:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If we want our true theory of arithmetic to be axiomatizable and consistent.&lt;/li&gt;&#xA;&lt;li&gt;And if we want provability in a formal system as our standard for knowledge&#xA;concerning facts about arithmetic.&lt;/li&gt;&#xA;&lt;li&gt;Then, for all intents and purposes, we cannot satisfiably know that&#xA;arithmetic is consistent.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I will argue that because of Gödel&amp;rsquo;s second incompleteness theorem, we cannot&#xA;construct a theory of true arithmetic that can satisfy both our conditions&#xA;(i.e. 1. and 2.). Largely because Gödel&amp;rsquo;s theorem restricts the ability of&#xA;consistent, axiomatizable theories of a certain strength from internally proving&#xA;their own consistency by way of a canonical consistency sentence. Forcing us, as&#xA;a result, to compromise either on the properties we would want of a theory of&#xA;true arithmetic (i.e. 1.) or, on our standard for knowledge concerning the&#xA;consistency of theories (i.e. 2.) &amp;ndash; neither of which is desirable/satisfying.&lt;/p&gt;</description>
    </item>
    <item>
      <title>minimum passports for worldwide visa free travel</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/minimum-passports-for-worldwide-visa-free-travel/</link>
      <pubDate>Sat, 11 May 2024 00:00:00 +0100</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/minimum-passports-for-worldwide-visa-free-travel/</guid>
      <description>&lt;h2 id=&#34;the-idea&#34;&gt;the idea&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.henleyglobal.com/&#34;&gt;Henley &amp;amp; Partners&lt;/a&gt; released their &lt;a href=&#34;https://www.henleyglobal.com/passport-index/ranking&#34;&gt;2024 passport rankings&lt;/a&gt; earlier this year.&lt;/p&gt;&#xA;&lt;p&gt;But I have more than one passport and I wanted to know the combined power of my&#xA;passports, not just the power of a single nationality.&lt;/p&gt;&#xA;&lt;p&gt;And it turns out that on the road to answering that question we can also figure&#xA;out what the strongest pair and trio of passports are, just for fun.&lt;/p&gt;&#xA;&lt;p&gt;We can even go so far as to try and answer the question: what&amp;rsquo;s the smallest&#xA;number of passports you would need to travel to every destination in the world&#xA;without a visa?&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;rm -rf&#39; sftp python script</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/rm-rf-sftp-python-script/</link>
      <pubDate>Tue, 12 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/rm-rf-sftp-python-script/</guid>
      <description>&lt;h2 id=&#34;problem&#34;&gt;problem&lt;/h2&gt;&#xA;&lt;p&gt;Why does &lt;a href=&#34;https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol&#34;&gt;SFTP&lt;/a&gt; not allow for a simple &lt;code&gt;rm -rf&lt;/code&gt;?&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a rhetorical question because there&amp;rsquo;s probably a reason.&lt;/p&gt;&#xA;&lt;p&gt;But that doesn&amp;rsquo;t help me, because I need to be able to clear out and remove&#xA;directories when updating this blog over &lt;em&gt;SSH File Transfer Protocol&lt;/em&gt; and&#xA;doing so manually is tedious.&lt;/p&gt;&#xA;&lt;p&gt;So the task is simple: write a script to clear out and remove a particular&#xA;directory over SFTP à la &lt;code&gt;rm -rf&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>the best fibonacci implementation?</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/the-best-fibonacci-implementation/</link>
      <pubDate>Sat, 09 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/the-best-fibonacci-implementation/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been meaning to write about this ever since I came across it in Abelson &amp;amp;&#xA;Sussman&amp;rsquo;s &lt;a href=&#34;https://mitp-content-server.mit.edu/books/content/sectbyfn/books_pres_0/6515/sicp.zip/index.html&#34;&gt;wizard book&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I mean, Fibonacci is &lt;strong&gt;the&lt;/strong&gt; classic example of a recursive function. And it&amp;rsquo;s often&#xA;just implemented as:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#c099ff&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#82aaff&#34;&gt;fib&lt;/span&gt;(n):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c099ff&#34;&gt;if&lt;/span&gt; n &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ffc777&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;or&lt;/span&gt; n &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ffc777&#34;&gt;1&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#c099ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ffc777&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c099ff&#34;&gt;return&lt;/span&gt; fib(n&lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ffc777&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;+&lt;/span&gt; fib(n&lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ffc777&#34;&gt;2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#c3e88d&#34;&gt;print&lt;/span&gt;(fib(&lt;span style=&#34;color:#ffc777&#34;&gt;5&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And while this seems all well and good on the surface, it turns out that this&#xA;is far from an efficient implementation of the sequence. In particular, we end up&#xA;computing calls to &lt;code&gt;fib&lt;/code&gt; that we&amp;rsquo;ve already computed. In other words, we&#xA;perform a lot of redundant computation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>three ways to check for anagrams</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/three-ways-to-check-for-anagrams/</link>
      <pubDate>Thu, 07 Mar 2024 00:00:00 +0100</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/three-ways-to-check-for-anagrams/</guid>
      <description>&lt;h2 id=&#34;problem&#34;&gt;problem&lt;/h2&gt;&#xA;&lt;p&gt;Given 2 strings, check that they are anagrams.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solutions&#34;&gt;solutions&lt;/h2&gt;&#xA;&lt;h3 id=&#34;worst&#34;&gt;worst&lt;/h3&gt;&#xA;&lt;p&gt;Perhaps the most intuitive approach: look at each character in the first&#xA;string and check it&amp;rsquo;s in the second string by iterating through its&#xA;characters. If a character in the first string isn&amp;rsquo;t present in the first,&#xA;return &lt;code&gt;False&lt;/code&gt;. Otherwise, remove the matched character from the second string so&#xA;it isn&amp;rsquo;t matched again going forward.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#c099ff&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#82aaff&#34;&gt;are_anagrams&lt;/span&gt;(s1: &lt;span style=&#34;color:#c3e88d&#34;&gt;str&lt;/span&gt;, s2: &lt;span style=&#34;color:#c3e88d&#34;&gt;str&lt;/span&gt;) &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#c3e88d&#34;&gt;bool&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#444a73;font-style:italic&#34;&gt;# no point proceeding if the strings aren&amp;#39;t even of the same length&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c099ff&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#c3e88d&#34;&gt;len&lt;/span&gt;(s1) &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#c3e88d&#34;&gt;len&lt;/span&gt;(s2):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#c099ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ffc777&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c099ff&#34;&gt;for&lt;/span&gt; ch1 &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;in&lt;/span&gt; s1:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        in_s2 &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ffc777&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#c099ff&#34;&gt;for&lt;/span&gt; i, ch2 &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#c3e88d&#34;&gt;enumerate&lt;/span&gt;(s2):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#c099ff&#34;&gt;if&lt;/span&gt; ch1 &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;==&lt;/span&gt; ch2:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                in_s2 &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ffc777&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#c099ff&#34;&gt;break&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#c099ff&#34;&gt;if&lt;/span&gt; in_s2:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#444a73;font-style:italic&#34;&gt;# remove matched char from s2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            s2 &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;=&lt;/span&gt; s2[:i] &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;+&lt;/span&gt; s2[i&lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ffc777&#34;&gt;1&lt;/span&gt;:]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#c099ff&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#c099ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ffc777&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c099ff&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ffc777&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;x &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#c3e88d&#34;&gt;&amp;#39;fried&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;y &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#c3e88d&#34;&gt;&amp;#39;fired&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;z &lt;span style=&#34;color:#c3e88d;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#c3e88d&#34;&gt;&amp;#39;fixed&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#c3e88d&#34;&gt;print&lt;/span&gt;(are_anagrams(x,y))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#c3e88d&#34;&gt;print&lt;/span&gt;(are_anagrams(x,z))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#c8d3f5;background-color:#222436;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;True&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;False&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;While straightforward, it&amp;rsquo;s the worst approach because its \(O(n^{2})\).&lt;/p&gt;</description>
    </item>
    <item>
      <title>recreating nyt games&#39; spelling bee</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/recreating-nyt-games-spelling-bee/</link>
      <pubDate>Wed, 27 Dec 2023 00:00:00 +0100</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/recreating-nyt-games-spelling-bee/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been spending enough time playing NYT&amp;rsquo;s &lt;a href=&#34;https://www.nytimes.com/puzzles/spelling-bee&#34;&gt;Spelling Bee&lt;/a&gt; puzzle game to be&#xA;compelled to reproduce it in Python; especially seeing how straightforward it&#xA;seems to be.&lt;/p&gt;&#xA;&lt;p&gt;All I need is a list of English words and the alphabet, no?&lt;/p&gt;&#xA;&lt;p&gt;Without any clever workarounds the creation of a game just requires the&#xA;following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;randomly select 7 letters from the alphabet, without replacement.&lt;/li&gt;&#xA;&lt;li&gt;take the first letter as the center letter in the bee hive (hexagon grid).&lt;/li&gt;&#xA;&lt;li&gt;get the set of English words that can be formed from our letters (most&#xA;finicky part)&lt;/li&gt;&#xA;&lt;li&gt;if that set includes a word containing all 7 letters (i.e. a &lt;em&gt;pangram&lt;/em&gt;), then&#xA;we have a valid spelling bee game!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;random-letters&#34;&gt;random letters&lt;/h2&gt;&#xA;&lt;p&gt;Easy! Python has the &lt;code&gt;random&lt;/code&gt; package:&lt;/p&gt;</description>
    </item>
    <item>
      <title>causal theories of reference solve informative identity</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/causal-theories-of-reference-solve-informative-identity/</link>
      <pubDate>Fri, 21 Apr 2023 00:00:00 +0100</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/causal-theories-of-reference-solve-informative-identity/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;introduction&lt;/h2&gt;&#xA;&lt;p&gt;We are concerned with the informative identity puzzle: explaining the&#xA;substantive quality of non-trivial identity statements with coreferring names.&#xA;In particular, how true sentences of the form &amp;ldquo;\(a\) is \(b\)&amp;rdquo;, for two &lt;strong&gt;different&lt;/strong&gt;&#xA;names \(a\) and \(b\), can be in any way informative if \(a\) and \(b\) share the same&#xA;reference. I will argue that causal theories of reference, as Kripke conceived&#xA;them, can do away with this problem while remaining reductive, by representing&#xA;the informative content of such identity statements as an expression of a&#xA;non-trivial identity relation between &lt;strong&gt;distinct&lt;/strong&gt; causal chains that corefer. For&#xA;it is possible to understand &lt;em&gt;causal chains&lt;/em&gt; as different from &lt;em&gt;causal networks&lt;/em&gt;,&#xA;where a &lt;em&gt;causal chain&lt;/em&gt; is a &lt;strong&gt;specific&lt;/strong&gt; path through an object&amp;rsquo;s (referent) &lt;em&gt;causal&#xA;network&lt;/em&gt;, causally linking the use of a name to the object it was originally&#xA;baptised to. Hence showing that there may exist multiple causal chains in the&#xA;same causal network, whose relationship is not necessarily made obvious to a&#xA;speaker using coreferring names.&lt;/p&gt;</description>
    </item>
    <item>
      <title>a generalised evolutionary theory of knowledge</title>
      <link>https://58e1b19d.site-bk0.pages.dev/writing/a-generalised-evolutionary-theory-of-knowledge/</link>
      <pubDate>Fri, 21 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://58e1b19d.site-bk0.pages.dev/writing/a-generalised-evolutionary-theory-of-knowledge/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;introduction&lt;/h2&gt;&#xA;&lt;p&gt;The concept of &lt;em&gt;evolution&lt;/em&gt; originally arose in Biology, yet, it has managed to&#xA;find its way into a particular branch of contemporary epistemic&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; thought&#xA;known as Evolutionary Epistemology (EE) (&lt;a href=&#34;#citeproc_bib_item_1&#34;&gt;Bradie and Harms 2020&lt;/a&gt;).&#xA;Having breached its disciplinary boundary by finding application within the&#xA;domain of Philosophy, evolution as a concept, has been elevated to the rank of&#xA;&lt;em&gt;superconcept&lt;/em&gt;, according to Wilson (&lt;a href=&#34;#citeproc_bib_item_18&#34;&gt;Wilson 2010&lt;/a&gt;). And rightfully so, having&#xA;proven valuable to &amp;ldquo;one of the greatest philosophers of science of the twentieth&#xA;century&amp;rdquo; (&lt;a href=&#34;#citeproc_bib_item_17&#34;&gt;Thornton 2021&lt;/a&gt;), Karl Popper, as evidenced by works such as &amp;ldquo;Objective&#xA;Knowledge: an evolutionary approach&amp;rdquo; (&lt;a href=&#34;#citeproc_bib_item_12&#34;&gt;Popper 2012&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
