<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Home on ben.land</title>
    <link>https://ben.land/</link>
    <description>Recent content in Home on ben.land</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <atom:link href="https://ben.land/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Simulating and visualizing the double slit experiment with Python</title>
      <link>https://ben.land/post/2026/01/31/double-slit-simulation/</link>
      <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2026/01/31/double-slit-simulation/</guid>
      <description>&lt;p&gt;Several years ago I wrote &lt;a href=&#34;https://ben.land/post/2022/03/09/quantum-mechanics-simulation/&#34;&gt;a post on simulation the Schrodinger Equation&lt;/a&gt; that had a brief intro to Quantum Mechanics paired with a simple Python simulation and visualization.&#xA;That ended up being one of my more popular pages, despite the &lt;a href=&#34;https://ben.land/post/2022/03/17/complex-wavefunction-visualization/&#34;&gt;follow up post with 2D visualizations&lt;/a&gt; being arguably more visually appealing.&#xA;Probably down to the titles in the end &amp;mdash; people love a Python simulation.&#xA;After that I was following up on trying to do 3D simulations on the GPU, which diverted me down the path &lt;a href=&#34;https://ben.land/post/2022/08/15/raycasting-raytracing-sdf/&#34;&gt;raytracing&lt;/a&gt; and &lt;a href=&#34;https://ben.land/post/2022/08/22/photorealistic-global-illumination/&#34;&gt;photorealistic rendering&lt;/a&gt;, then I got into &lt;a href=&#34;https://ben.land/beecam&#34;&gt;beekeeping&lt;/a&gt; and &lt;a href=&#34;https://ben.land/post/2025/12/30/deep-sky-images-vol-three/&#34;&gt;astrophotography&lt;/a&gt; and just didn&amp;rsquo;t get back to this&amp;hellip; until now!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deep-sky images vol. 3: a refined technique for higher quality results</title>
      <link>https://ben.land/post/2025/12/30/deep-sky-images-vol-three/</link>
      <pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2025/12/30/deep-sky-images-vol-three/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been a bit over a year since my &lt;a href=&#34;https://ben.land/post/2024/10/13/deep-sky-images-vol-two/&#34;&gt;last astrophotography post highlighting galaxies&lt;/a&gt; and a bit over two years doing serious astrophotography.&#xA;Even though &lt;a href=&#34;https://ben.land/post/2024/09/28/deep-sky-images-vol-one/#the-astrophotography-rig&#34;&gt;my rig&lt;/a&gt; has been nearly static, with the exception of adding an Antlia ALP-T 5nm Ha+Oiii filter to retire the Svbony and its impressive Oiii halos and replacing my flexible spider vane with a rigid one including better adjustment screws for the secondary mount, I have learned a lot about how to handle the raw data to produce more impressive results.&#xA;Now it&amp;rsquo;s your turn, or you can skip to the end and just enjoy the images.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Receiving and decoding transmissions from weather satellites</title>
      <link>https://ben.land/post/2025/05/31/receiving-weather-satellites/</link>
      <pubDate>Sat, 31 May 2025 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2025/05/31/receiving-weather-satellites/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve always been a bit fascinated by radio and wireless communication, so I decided to get some commodity SDR dongles like the &lt;a href=&#34;https://www.rtl-sdr.com/v4/&#34;&gt;RTL-SDR blog V4&lt;/a&gt; and &lt;em&gt;see what I could hear&lt;/em&gt;, if you know what I mean.&#xA;Several DIY antennas and long distance receptions later, I started to wonder what else (beyond communication with other enthusiasts) easy access to an SDR receiver could unlock.&#xA;That led me down the path of amateur satellite reception &amp;mdash; a relatively niche corner of the already niche amateur radio hobby.&lt;/p&gt;</description>
    </item>
    <item>
      <title>BeeLogger, an ESP32-based sensor platform for monitoring a beehive</title>
      <link>https://ben.land/post/2025/04/06/beelogger-beehive-sensors/</link>
      <pubDate>Sun, 06 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2025/04/06/beelogger-beehive-sensors/</guid>
      <description>&lt;figure class=&#34;rightsmall&#34;&gt;&lt;img src=&#34;https://ben.land/images/bees/hive1_beelogger.jpg&#34;&#xA;    alt=&#34;Hive One sitting on the first BeeLogger platform after surviving the 2024-2025 Winter.&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;Hive One sitting on the first BeeLogger platform after surviving the 2024-2025 Winter.&lt;/p&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;With the success of my &lt;a href=&#34;https://ben.land/post/2023/06/20/hacking-together-beecam/&#34;&gt;beehive livefeed&lt;/a&gt; and &lt;a href=&#34;https://ben.land/post/2023/12/15/bee-counting-neural-network/&#34;&gt;bee-counting neural network&lt;/a&gt; in monitoring bee activity, I decided last year it was time to augment my data collection capabilities.&#xA;Beyond the general activity of the bees that I can already assess, there are several aspects of bee health that can be addressed with off the shelf sensor technology:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deep-sky images vol. 2: galaxy edition</title>
      <link>https://ben.land/post/2024/10/13/deep-sky-images-vol-two/</link>
      <pubDate>Sun, 13 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2024/10/13/deep-sky-images-vol-two/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://ben.land/post/2024/09/28/deep-sky-images-vol-one/&#34;&gt;last astrophotography post&lt;/a&gt; covered all the details on the technique for capturing &lt;a href=&#34;https://ben.land/astro/&#34;&gt;deep-sky images&lt;/a&gt; and went into some detail about precisely how to interpret these images.&#xA;Check it out if you&amp;rsquo;re not sure what you&amp;rsquo;re seeing below.&#xA;The only downside of the last post is that it only showcased the &amp;ldquo;best&amp;rdquo; images of various different types.&#xA;Unfortunately, the &amp;ldquo;best&amp;rdquo; criteria ruled out a lot of what I consider to be more interesting images: other galaxies.&#xA;I did get the Whirlpool and Triangulum galaxies in, but these are among the brightest.&#xA;The Leo Triplet image is more typical of the majority of galaxies to image: small enough to be near typical resolution limits, pretty dim, and perhaps a bit hard to appreciate if you don&amp;rsquo;t know what you&amp;rsquo;re looking at.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Several ways to &#34;add two number strings&#34;</title>
      <link>https://ben.land/post/2024/09/29/add-two-number-strings/</link>
      <pubDate>Sun, 29 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2024/09/29/add-two-number-strings/</guid>
      <description>&lt;p&gt;I was presented with an anecdote from a guy doing software development job interviews that went like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-plaintext&#34; data-lang=&#34;plaintext&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Interviewer: Show me how you would add two big numbers represented as strings?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Candidate:   How about `adder = lambda a,b: return int(a)+int(b)`?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Interviewer: No, the numbers are too big `int(a)` would fail.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Candidate:   ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;First off, Python is a bit unique among modern languages in that it does support integers of arbitrary size out of the box with no special fiddling.&#xA;It generally uses native size integers but transparently supports integers as large as will fit in the system&amp;rsquo;s memory, and has since at least Python 2.5.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deep-sky images vol. 1: from the Philadelphia suburbs</title>
      <link>https://ben.land/post/2024/09/28/deep-sky-images-vol-one/</link>
      <pubDate>Sat, 28 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2024/09/28/deep-sky-images-vol-one/</guid>
      <description>&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://ben.land/images/astro/first_rig.jpg&#34;&#xA;    alt=&#34;None of the images here were taken with this rig, but its where I started in 2010.&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;None of the images here were taken with this rig, but its where I started in 2010.&lt;/p&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;It&amp;rsquo;s been a while since my last post, largely due to time spent on &lt;a href=&#34;https://ben.land/beecam&#34;&gt;beekeeping and astrophotograpy&lt;/a&gt;.&#xA;So, to move the needle, I&amp;rsquo;ve pulled together some of the best images of deep-sky (meaning: far away) objects I&amp;rsquo;ve taken at night from the relatively light polluted (Bortle 7) Philadelphia suburbs.&#xA;I&amp;rsquo;ve included with each image some notes about the acquisition, general information about the target (distance, type of object, etc), and a pretty thorough description of the visible objects (&lt;em&gt;what am I seeing?&lt;/em&gt;).&#xA;All of these images are from my yard, with streetlights and porch lights nearby, using &lt;a href=&#34;https://ben.land/post/2023/12/24/astrophotography-with-light-pollution/&#34;&gt;a technique I described in a previous post&lt;/a&gt; to collect calibrated data for fighting light pollution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Astrophotography from light polluted skies</title>
      <link>https://ben.land/post/2023/12/24/astrophotography-with-light-pollution/</link>
      <pubDate>Sun, 24 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2023/12/24/astrophotography-with-light-pollution/</guid>
      <description>&lt;figure class=&#34;rightsmall&#34;&gt;&lt;img src=&#34;https://ben.land/images/astro/rig.jpg&#34;&#xA;    alt=&#34;I&amp;rsquo;m now the proud owner of a Sky Watcher Quattro 200P on a EQ6-R Pro mount. Currently paired with a Sony α7C and coma corrector, along with the occasional OSC filter. Guiding to 0.6&amp;quot; with a ZWO ASI120MM on a Svbony 60mm F/4 106SV guide scope. Living the dream.&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;I&amp;rsquo;m now the proud owner of a Sky Watcher Quattro 200P on a EQ6-R Pro mount. Currently paired with a Sony α7C and coma corrector, along with the occasional OSC filter. Guiding to 0.6&amp;quot; with a ZWO ASI120MM on a Svbony 60mm F/4 106SV guide scope. Living the dream.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Counting bees in a video feed with a neural network</title>
      <link>https://ben.land/post/2023/12/15/bee-counting-neural-network/</link>
      <pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2023/12/15/bee-counting-neural-network/</guid>
      <description>&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://ben.land/images/bees/activity.jpg&#34;&#xA;    alt=&#34;Technically not from the BeeCam, but about the same perspective.&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;Technically not from the &lt;a href=&#34;https://ben.land/beecam/&#34;&gt;BeeCam&lt;/a&gt;, but about the same perspective.&lt;/p&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;After the &lt;a href=&#34;https://ben.land/post/2023/06/20/hacking-together-beecam/&#34;&gt;previous post&lt;/a&gt; where I setup a &lt;a href=&#34;https://ben.land/beecam/&#34;&gt;live stream&lt;/a&gt; for my beehive, I decided I wanted a quantitative measure of the bee activity going into the winter.&#xA;The most straightforward thing to start with was simply identifying and counting the bees in each frame of the feed.&#xA;While not directly measuring anything particularly interesting, this should be well correlated with foraging activity at any time.&#xA;One might imagine going a step further and identifying attributes about the bees in the image, but I&amp;rsquo;ll consider that a future improvement for now.&#xA;A lot of time has passed since the initial development (the year flew by!), but now that I have decent backlog of data, it&amp;rsquo;s a good time to document my process for counting bees in a video feed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hacking together a live stream video feed for a beehive</title>
      <link>https://ben.land/post/2023/06/20/hacking-together-beecam/</link>
      <pubDate>Tue, 20 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2023/06/20/hacking-together-beecam/</guid>
      <description>&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://ben.land/images/bees/beecam.png&#34;&#xA;    alt=&#34;A still frame from the BeeCam. The carnage on the front is a rogue black cherry. The bees are friendly.&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;A still frame from the &lt;a href=&#34;https://ben.land/beecam/&#34;&gt;BeeCam&lt;/a&gt;. The carnage on the front is a rogue black cherry. The bees are friendly.&lt;/p&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;This post is begging for an initial post on how I ended up with bees, but as this isn&amp;rsquo;t a beekeeping blog (yet), I&amp;rsquo;ll first go into some detail on the &lt;a href=&#34;https://ben.land/beecam/&#34;&gt;live stream&lt;/a&gt; I setup to watch the bees come and go.&#xA;There are a lot of live streaming guides targeted at social media enthusiasts, but these gloss over the weatherproofing and power difficulties of outdoor deployments, as well as assume some app (Youtube, Twitch, &amp;hellip;) is going to be involved (via a mobile phone).&#xA;So, I started to piece together bits of tech to arrive at something robust and self-hosted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Low level concepts in quantum computing</title>
      <link>https://ben.land/post/2023/02/12/quantum-computing-concepts/</link>
      <pubDate>Sun, 12 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2023/02/12/quantum-computing-concepts/</guid>
      <description>&lt;p&gt;This post will try to give a grounded conceptual (with a side of mathematical) understanding of quantum computing by comparing it to classical computing.&#xA;This can be a bit tricky, since robust quantum computers are still a nascent technology, but I&amp;rsquo;ll stick to the low level concepts here instead of getting into the esoteric science that is &lt;em&gt;programming&lt;/em&gt; quantum computers.&#xA;Primarily I want to motivate why quantum computing is fundamentally different from classical computing, and how it is the same.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Special Relativity, conceptually speaking</title>
      <link>https://ben.land/post/2023/01/29/special-relativity-conceptually/</link>
      <pubDate>Sun, 29 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2023/01/29/special-relativity-conceptually/</guid>
      <description>&lt;p&gt;When people learn that I have a physics degree, they typically reveal that they have &lt;em&gt;a question&lt;/em&gt; about physics they&amp;rsquo;ve always wanted to have answered.&#xA;Often it&amp;rsquo;s something along the lines of trying to understand time dilation in relativity: the phenomenon where observers at different velocities disagree about the amount of time between events (in other words, the rate of time).&#xA;To address that question, here&amp;rsquo;s a refined version of what I usually sketch out on a napkin.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DIY smart plug with integration to Home Assistant</title>
      <link>https://ben.land/post/2023/01/12/diy-smart-plug/</link>
      <pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2023/01/12/diy-smart-plug/</guid>
      <description>&lt;h2 id=&#34;motivation&#34;&gt;Motivation&lt;/h2&gt;&#xA;&lt;p&gt;In this post, I will run through the construction of a 30A 125V smart plug based on the ESP32 platform that can be either controlled from a simple webpage, or integrated into a system like &lt;a href=&#34;https://www.home-assistant.io/&#34;&gt;Home Assistant&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;While there are many good commercial options for smart plugs for home devices, and there are many industrial options for controlling heavy machinery, there&amp;rsquo;s a bit of a gap in the market for easy to use smart plugs for more heavy-duty workloads.&#xA;By &amp;ldquo;heavy-duty&amp;rdquo; here, I mean larger than 15A @ 125V to be switched.&#xA;This is (likely) because the standard &amp;ldquo;three prong&amp;rdquo; plug (&lt;a href=&#34;https://en.wikipedia.org/wiki/NEMA_connector#NEMA_5&#34;&gt;NEMA 5-15&lt;/a&gt;) is only rated for 15A.&#xA;Devices with &lt;a href=&#34;https://en.wikipedia.org/wiki/NEMA_connector#NEMA_5&#34;&gt;NEMA 5-20&lt;/a&gt; or better may exist, but one of the loose design constraints here will be supporting a NEMA 5-15 plug, at least in an initial phase, while being able to switch large currents.&#xA;(Note: I am no expert here, and following any of my advice is done at your own risk!)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Photorealistic rendering with global illumination from scratch</title>
      <link>https://ben.land/post/2022/08/22/photorealistic-global-illumination/</link>
      <pubDate>Mon, 22 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2022/08/22/photorealistic-global-illumination/</guid>
      <description>&lt;p&gt;In a &lt;a href=&#34;https://ben.land/post/2022/08/15/raycasting-raytracing-sdf/&#34;&gt;previous post&lt;/a&gt; I discussed the development and capabilities of the &lt;a href=&#34;https://github.com/BenLand100/sdfray&#34;&gt;&lt;code&gt;sdfray&lt;/code&gt; package&lt;/a&gt;, which represents scene geometries as signed distance functions (SDFs), and supports several rendering approaches.&#xA;In this post, I&amp;rsquo;ll be discussing the rendering approach I previously called &lt;em&gt;true optics&lt;/em&gt;, which tries to realistically simulate most commonly observed properties of light, to achieve a maximally realistic image.&#xA;This falls under the umbrella of &lt;a href=&#34;https://en.wikipedia.org/wiki/Global_illumination&#34;&gt;global illumination&lt;/a&gt; as it can accurately reproduce caustics and the effects of intra-illumination, which I would say is a bold enough claim to warrant some evidence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Raytracing and Raycasting with Signed Distance Functions</title>
      <link>https://ben.land/post/2022/08/15/raycasting-raytracing-sdf/</link>
      <pubDate>Mon, 15 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2022/08/15/raycasting-raytracing-sdf/</guid>
      <description>&lt;p&gt;I stumbled onto the concept of using signed distance functions (SDFs) to represent a three dimensional geometry almost by accident when looking up ways to generate 3D models (for 3D printers) programatically, as opposed to using traditional CAD software.&#xA;Unlike more standard CAD processes for 3D printers, which tends to boil down to triangular meshes,  SDFs are mathematical functions that can represent exact surface curvature.&#xA;As I also have a &lt;a href=&#34;https://ben.land/post/2020/12/07/optical-physics-chroma/&#34;&gt;background in physics-accurate optics&lt;/a&gt; I realized this property made SDFs ideal for high precision optical simulations, which is essentially the same thing as  photo realistic rendering.&#xA;It was immediately apparent with some quick googling that other people had previously explored the same ideas &lt;a href=&#34;https://www.shadertoy.com/results?query=sdf&#34;&gt;to great effect&lt;/a&gt;, but was interested enough that I got hooked, and decided to play around with writing &lt;a href=&#34;https://github.com/BenLand100/sdfray&#34;&gt;my own rendering engine&lt;/a&gt; based on SDFs, and learn a bit along the way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visualizing complex numbers and wavefunctions in one and two dimensions</title>
      <link>https://ben.land/post/2022/03/17/complex-wavefunction-visualization/</link>
      <pubDate>Thu, 17 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2022/03/17/complex-wavefunction-visualization/</guid>
      <description>&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://ben.land/images/hsv.png&#34;&#xA;    alt=&#34;The HSV colorspace, matching angle to hue around the circle, and saturation to the radius.&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;The HSV colorspace, matching angle to hue around the circle, and saturation to the radius.&lt;/p&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;In &lt;a href=&#34;https://ben.land/post/2022/03/09/quantum-mechanics-simulation/&#34;&gt;a previous post on simulating quantum mechanics&lt;/a&gt;, I visualized the &lt;a href=&#34;https://ben.land/post/2021/10/31/fpga-rf-receiver/#an-aside-on-complex-numbers&#34;&gt;complex numbers&lt;/a&gt; in the wavefunctions by plotting their real, imaginary, and magnitude (square root of probability) separately.&#xA;As I mentioned briefly in that post, this is a bit lacking compared to the more intuitive way to think of complex numbers: as a magnitude and phase (angle).&#xA;The magnitude was accounted for, but the real and imaginary parts can obfuscate the phase.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simulating quantum mechanics with Python</title>
      <link>https://ben.land/post/2022/03/09/quantum-mechanics-simulation/</link>
      <pubDate>Wed, 09 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2022/03/09/quantum-mechanics-simulation/</guid>
      <description>&lt;p&gt;I was reading &lt;a href=&#34;https://www.quantamagazine.org/most-complete-simulation-of-a-cell-probes-lifes-hidden-rules-20220224/&#34;&gt;an article&lt;/a&gt; about scientists who created an accurate simulation of the behavior of simple cells, to really understand their dynamics, and I wondered whether it would be possible to do the same for &amp;ldquo;simple&amp;rdquo; atoms or molecules.&#xA;Some quick exploration into the topic indicates that&amp;rsquo;s a &lt;a href=&#34;https://en.wikipedia.org/wiki/Molecular_Hamiltonian&#34;&gt;fairly difficult problem&lt;/a&gt;, not to mention an area of active research for multi-electron atoms and simple molecules alike.&#xA;That said, I can certainly take a stab at some simpler simulations and see how far it can scale up, which should result in some interesting visualizations at the very least.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A possible optimal solution to Wordle</title>
      <link>https://ben.land/post/2022/02/11/optimal-wordle-solution/</link>
      <pubDate>Fri, 11 Feb 2022 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2022/02/11/optimal-wordle-solution/</guid>
      <description>&lt;p&gt;At this point, probably everyone has heard of the game &lt;a href=&#34;https://www.nytimes.com/games/wordle/index.html&#34;&gt;Wordle&lt;/a&gt; where one has six guesses to determine a secret five letter word.&#xA;Each time you guess, the letters are colored to represent the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Gray &amp;mdash; the letter is not in the word.&lt;/li&gt;&#xA;&lt;li&gt;Orange &amp;mdash; the letter is in the word, but not at this position.&lt;/li&gt;&#xA;&lt;li&gt;Green &amp;mdash; the letter is in the word at this position.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There are lots of strategies floating around for how to play this game optimally, from looking at character distributions at different positions and picking words with common characters in those positions, to using good old-fashioned intuition.&#xA;Here, I&amp;rsquo;ll describe a solution that can be summarized as follows: the optimal word to guess is the word that results in the fewest possible words remaining, on average.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding client-side search for a statically generated Hugo website</title>
      <link>https://ben.land/post/2021/12/02/hugo-search-functionality/</link>
      <pubDate>Thu, 02 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/12/02/hugo-search-functionality/</guid>
      <description>&lt;p&gt;Statically generated sites, like this blog and other sites built with tools like &lt;a href=&#34;&#34;&gt;Hugo&lt;/a&gt;, are great for simple deployment and fast serving pages, but they lack some features like live editing and other dynamically generated content.&#xA;Fortunately, most of these shortcomings have been sorted out by the community.&#xA;Here, I&amp;rsquo;ll focus on search functionality.&lt;/p&gt;&#xA;&lt;p&gt;Typically, when searching some website, the query will be sent to a server, which will perform some internal scan of its database, and build a page containing results that match the query.&#xA;This dynamically generated page will then be sent to the client to be shown on the browser.&#xA;In a statically generated site, this is simply not an option.&#xA;There is no database to query, no framework on the server to search anything, and no concept of generating pages on the fly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beginnings of a low frequency RF receiver with a MicroZed FPGA board</title>
      <link>https://ben.land/post/2021/10/31/fpga-rf-receiver/</link>
      <pubDate>Sun, 31 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/10/31/fpga-rf-receiver/</guid>
      <description>&lt;p&gt;My initial motivation was to build a device that could receive and decode the &lt;a href=&#34;https://en.wikipedia.org/wiki/WWVB&#34;&gt;WWVB time code&lt;/a&gt; broadcast from Fort Collins, CO at 60 kHz, and used to synchronize so-called atomic clocks seen on people walls or on their wrists.&#xA;These clocks really just decode the broadcasts on the WWVB station, which is &lt;em&gt;synchronised&lt;/em&gt; to actual atomic clocks co-located with the radio broadcast.&#xA;The protocol is simple, well understood, and certainly commercial receivers exist, which means a DIY solution has a high likelihood of actually working.&#xA;The idea here was to build a &lt;a href=&#34;https://en.wikipedia.org/wiki/Direct-conversion_receiver&#34;&gt;direct conversion receiver&lt;/a&gt; in the style of &lt;a href=&#34;https://en.wikipedia.org/wiki/Software-defined_radio&#34;&gt;software defined radio (SDR)&lt;/a&gt; on a &lt;a href=&#34;https://en.wikipedia.org/wiki/Field-programmable_gate_array&#34;&gt;field programmable gate array (FPGA)&lt;/a&gt;.&#xA;This was a great intersection of my interest in FPGAs and SDR, with some mildly practical application, and without having to invest in specialized hardware capable of receiving higher frequencies typical shortwave amateur ratio or FM/AM audio transmissions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Raspberry Pi IPv4/IPv6 router for a dual WAN household</title>
      <link>https://ben.land/post/2021/10/28/raspberry-pi-router/</link>
      <pubDate>Thu, 28 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/10/28/raspberry-pi-router/</guid>
      <description>&lt;p&gt;When I ended up with a second connection to the internet (courtesy of being a Comcast employee), there was a potentially painful decision to make.&#xA;Xfinity includes a lot of streaming features, which require being &lt;em&gt;on Xfinity&amp;rsquo;s network&lt;/em&gt; to utilize.&#xA;Key here is the ability to turn many streaming devices (including a Roku) into a live and on-demand streaming platform for TV with the Xfinity Stream app.&#xA;So, do I convert the entire home network over to Comcast&amp;rsquo;s asymmetric cable network, or do I keep the symmetric gigabit fiber connection already in place and miss out on streaming?&#xA;Fortunately, there is a third option: connect the streaming devices to the Xfinity network, and maintain the symmetric gigabit fiber for the rest of the machines.&#xA;What&amp;rsquo;s better is that it&amp;rsquo;s totally possible to accomplish this with consumer networking devices, without having to purchase (much) new hardware.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Do-it-yourself dimmable LED patio lights</title>
      <link>https://ben.land/post/2021/10/10/diy-led-patio-lights/</link>
      <pubDate>Sun, 10 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/10/10/diy-led-patio-lights/</guid>
      <description>&lt;p&gt;We recently had a new large patio put in to replace the old, broken one, but there was no outdoor lighting or even outdoor power, so it was quite difficult to &lt;em&gt;enjoy&lt;/em&gt; this investment after dusk.&#xA;Instead of hiring an electrician and contractor to remedy this, I decided to flex my handyman skills, and do it myself.&lt;/p&gt;&#xA;&lt;p&gt;The design goal was overhead string lights, approximately 10 feet off the ground, so that patio-goers were unlikely to hit them, even with raised arms.&#xA;The string should zigzag across the patio, requiring around 140ft of lights.&#xA;Edison bulbs were an option, for aesthetics, but LED options were more attractive, since the lower temperatures and heat allow for shatter-proof plastic bulbs.&#xA;The longer life, and lower energy usage were anther plus.&#xA;Modern LED bulbs can have an extended &amp;lsquo;filament&amp;rsquo; similar to the Edison style, though this can increase cost.&#xA;The other main factor here is bulb spacing.&#xA;Cheaper options tend to be 2+ feet apart, which significantly reduces the appeal (and brightness) of string lights.&#xA;We opted for some round, clear, plastic LED bulbs spaced at one foot intervals on 50&amp;rsquo; strands &lt;a href=&#34;https://www.amazon.com/gp/product/B07KC941GF/&#34;&gt;found on Amazon&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Leaving academia for industry: from physics to data science</title>
      <link>https://ben.land/post/2021/09/20/academia-to-data-science/</link>
      <pubDate>Mon, 20 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/09/20/academia-to-data-science/</guid>
      <description>&lt;p&gt;This post is a (likely one-off) departure from the technical themes of previous posts to focus a bit on the career trajectory and prospects of academia compared to industry.&#xA;I have had the opportunity to develop a lot of very marketable skills in particle physics research.&#xA;The chance to manipulate and analyze some of the biggest datasets in big data is itself a great resume booster.&#xA;Combine that with the programming, analytical, and mathematical skills one needs to excel in particle physics, and potential industry jobs are plentiful.&#xA;Toss in a bit of machine learning, and the ability to distill and convey information effectively, and you&amp;rsquo;re quite marketable indeed.&#xA;Top it off with a Ph.D. and a track record of mentoring students, and suddenly you&amp;rsquo;re a bit of a &lt;a href=&#34;https://hdsr.mitpress.mit.edu/pub/t37qjoi7/release/3&#34;&gt;datascience unicorn&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deconvolving photon detector signals with convolution to count photons</title>
      <link>https://ben.land/post/2021/06/24/deconvolving-with-convolution/</link>
      <pubDate>Thu, 24 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/06/24/deconvolving-with-convolution/</guid>
      <description>&lt;p&gt;Neutrino detector often detect neutrino indirectly by recording information about &lt;a href=&#34;https://ben.land/post/2020/12/14/reconstructing-neutrino-interactions/&#34;&gt;photons produced in the neutrino interaction&lt;/a&gt;.&#xA;&lt;a href=&#34;https://ben.land/post/2020/12/07/optical-physics-chroma/&#34;&gt;Simulations&lt;/a&gt; are used to understand how light propagates through the detector, and this allows one to understand the kinds of optical signals produced by different types of interactions.&#xA;&lt;a href=&#34;https://ben.land/post/2021/03/16/spectral-photon-sorting/&#34;&gt;Many techniques&lt;/a&gt; can be exploited to maximize the amount of information detected, but ultimately the data boils down to the time at which photons are detected on light-sensitive elements in the detector.&#xA;These light sensitive elements could be &lt;a href=&#34;https://en.wikipedia.org/wiki/Photomultiplier_tube&#34;&gt;photomultiplier tubes&lt;/a&gt; (PMTs), &lt;a href=&#34;https://ben.land/post/2021/05/11/physics-posters/#prototype-lappd-characterization&#34;&gt;large area picosecond photodetectors&lt;/a&gt; (LAPPDs), &lt;a href=&#34;https://en.wikipedia.org/wiki/Silicon_photomultiplier&#34;&gt;silicon photomultipliers&lt;/a&gt; (SiPMs), or something more exotic.&#xA;All ultimately produce some electrical pulse, which is measured as a time-varying voltage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GDML importer for simulating DUNE in Chroma</title>
      <link>https://ben.land/post/2021/06/02/gdml-import-chroma/</link>
      <pubDate>Wed, 02 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/06/02/gdml-import-chroma/</guid>
      <description>&lt;h2 id=&#34;photon-simulations-for-dune&#34;&gt;Photon simulations for DUNE&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://dunescience.org&#34;&gt;DUNE experiment&lt;/a&gt; is nominally a &lt;a href=&#34;https://en.wikipedia.org/wiki/Time_projection_chamber&#34;&gt;time projection chamber&lt;/a&gt; (TPC), which records the paths of high energy charged particles by collecting the ionized electrons left in their wake.&#xA;Studying the paths of these particles gives information on the particular type of physical interaction responsible for creating them.&#xA;DUNE is particularly interested in the particles produced by &lt;a href=&#34;https://en.wikipedia.org/wiki/Neutrino&#34;&gt;neutrino&lt;/a&gt; interactions, and will be constructed in a high intensity neutrino beam to make those interactions much more common.&#xA;The energy deposited by the high energy particles as they travel through the liquid argon does more than just ionize the argon atoms, it also produces &lt;a href=&#34;https://en.wikipedia.org/wiki/Scintillation_(physics)&#34;&gt;scintillation&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Cherenkov_radiation&#34;&gt;Cherenkov&lt;/a&gt; light.&#xA;These optical signals can provide complimentary information to the tracks from the TPC, and are especially interesting for lower energy physics, like &lt;a href=&#34;https://en.wikipedia.org/wiki/Solar_neutrino&#34;&gt;solar neutrino&lt;/a&gt; interactions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating computer games with a contemporary software stack</title>
      <link>https://ben.land/post/2021/05/21/automating-computer-games/</link>
      <pubDate>Fri, 21 May 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/05/21/automating-computer-games/</guid>
      <description>&lt;h2 id=&#34;a-historical-perspective-on-automation&#34;&gt;A historical perspective on automation&lt;/h2&gt;&#xA;&lt;p&gt;As I&amp;rsquo;ve &lt;a href=&#34;https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/#context&#34;&gt;mentioned before&lt;/a&gt;, the desire to automate (cheat, bot, macro, &amp;hellip;) games like &lt;a href=&#34;https://runescape.com&#34;&gt;RuneScape&lt;/a&gt; was the primary reason I learned to program at such a young age.&#xA;Back in 2002, there was no &lt;a href=&#34;https://en.wikipedia.org/wiki/Stack_Overflow&#34;&gt;Stack Overflow&lt;/a&gt; to rely on for code snippets, no &lt;a href=&#34;https://reddit.com&#34;&gt;Reddit&lt;/a&gt; to connect me with like-minded individuals in the niche of game automation, and (thankfully) no &lt;a href=&#34;https://youtube.com&#34;&gt;YouTube&lt;/a&gt; to host poorly-edited video tutorials.&#xA;The one saving grace was that &lt;a href=&#34;https://google.com&#34;&gt;Google&lt;/a&gt;, at least, had been around for four years, so twelve-year-old-me could google for &amp;ldquo;runescape cheats&amp;rdquo; and find utilities people had designed to make the game less monotonous.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Physics posters from graduate school and beyond</title>
      <link>https://ben.land/post/2021/05/11/physics-posters/</link>
      <pubDate>Tue, 11 May 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/05/11/physics-posters/</guid>
      <description>&lt;p&gt;One could argue that the goal of a physicist is to write and publish &lt;a href=&#34;https://ben.land/resume/#publications&#34;&gt;peer-reviewed papers&lt;/a&gt;, which incidentally require enough research, novelty, and scientific merit to pass peer-review at some major journal.&#xA;There are, however, a lot of papers out there, so some advertising is necessary in the form of &lt;a href=&#34;https://ben.land/resume/#conferences&#34;&gt;conference talks&lt;/a&gt; to generate interest in the physics community or public talks to inform the masses.&#xA;Sometimes a more interactive discussion is a good idea, especially when discussing new approaches or preliminary results, or when a funding agency wants to show off the ongoing research to &lt;em&gt;a bunch of suits&lt;/em&gt; who really don&amp;rsquo;t want to sit through physics talks.&#xA;This is the realm of the poster, which is really just a prop to point to when talking about ideas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up a large Synology NAS for particle physics simulations</title>
      <link>https://ben.land/post/2021/05/04/synology-nas-for-physics-sims/</link>
      <pubDate>Tue, 04 May 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/05/04/synology-nas-for-physics-sims/</guid>
      <description>&lt;p&gt;Particle physics is the original &lt;a href=&#34;https://en.wikipedia.org/wiki/Big_data&#34;&gt;big data&lt;/a&gt; field, and science in general produces some of the &lt;a href=&#34;https://en.wikipedia.org/wiki/Big_data#Science&#34;&gt;largest datasets in the world&lt;/a&gt;.&#xA;The desire to store, transfer, and process particle physics data has driven the development of &lt;a href=&#34;https://en.wikipedia.org/wiki/Worldwide_LHC_Computing_Grid&#34;&gt;large, distributed computer clusters&lt;/a&gt; and &lt;a href=&#34;https://home.cern/science/computing/birth-web&#34;&gt;the internet itself&lt;/a&gt;.&#xA;Underpinning all of this is the ability to store and access the data produced by experiments and simulations.&#xA;Many technologies exist to facilitate this, including &lt;a href=&#34;https://en.wikipedia.org/wiki/Tape_drive&#34;&gt;tape drives&lt;/a&gt; for long-term archival, &lt;a href=&#34;https://en.wikipedia.org/wiki/Solid-state_drive&#34;&gt;solid-state drives&lt;/a&gt; for high-bandwidth data storage, and the venerable &lt;a href=&#34;https://en.wikipedia.org/wiki/Hard_disk_drive&#34;&gt;hard disk drive&lt;/a&gt; that falls somewhere in between tape and solid-state.&#xA;To store large, petabyte-sized datasets, thousands and thousands of individual drives are used together to provide redundancy for failure of individual drives, fast access to any particular part of a dataset, and enough raw storage to hold entire datasets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WindMouse, an algorithm for generating human-like mouse motion</title>
      <link>https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/</link>
      <pubDate>Sun, 25 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/</guid>
      <description>&lt;p&gt;This is a post about an algorithm I developed over a decade ago to generate mouse movements that could be mistaken for actual human input.&#xA;The algorithm, called WindMouse, has been used in &lt;a href=&#34;https://www.npmjs.com/package/windmouse&#34;&gt;many&lt;/a&gt; &lt;a href=&#34;https://dreambot.org/forums/index.php?/topic/21147-windmouse-custom-mouse-movement-algorithm/&#34;&gt;different&lt;/a&gt; &lt;a href=&#34;https://github.com/AndyFeiLi/osrsBottedtoMax_SimbaScripts/blob/e3f422c4faaf1995c925884049a4ace8ab5f917c/episode%202/Level6.simba#L6&#34;&gt;places&lt;/a&gt;, as a quick google search will show, and often appears unattributed in &lt;a href=&#34;https://stackoverflow.com/questions/913646/c-sharp-moving-the-mouse-around-realistically&#34;&gt;stackoverflow questions&lt;/a&gt;, despite being licensed under the GPL.&#xA;Since it&amp;rsquo;s seen rather wide use, and was presented by a much-younger me with little explanation, I figured it would perhaps be beneficial to provide some context and insight into the algorithm.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unbinned maximum likelihood fitting with kernel density estimation</title>
      <link>https://ben.land/post/2021/04/18/kernel-density-estimation-unbinned-likelihood/</link>
      <pubDate>Sun, 18 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/04/18/kernel-density-estimation-unbinned-likelihood/</guid>
      <description>&lt;p&gt;I have &lt;a href=&#34;https://ben.land/post/2021/01/09/maximum-likelihood-python/&#34;&gt;previously posted&lt;/a&gt; about the basics of maximum likelihood fitting, and how to perform such a fit using binned histograms for both the data and the probability density functions (PDFs).&#xA;For context, and a gentler introduction to the math, I&amp;rsquo;d suggest skimming the previous post.&#xA;In summary, maximum likelihood fitting is a method of statistically determining the makeup of some dataset under the assumption that all possible types of data are described by a finite set of PDFs.&#xA;Each of the PDFs represent a particular type or class of events in the dataset and describe how the events in that class are distributed along some observable quantities.&#xA;Observable quantities are things that can be measured for each event, such as energy or position, and different classes of events should have distinct distributions for the maximum likelihood technique to work well.&#xA;When these PDFs are weighted by a number of events in the class it describes and added together, the resulting distribution can be compared to the total dataset.&#xA;The correct weighted sum of the PDFs will be maximally similar to the dataset, and an optimization algorithm can be used to find the correct weights.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Computing π to many digits with a custom math library</title>
      <link>https://ben.land/post/2021/04/06/precise-pi-custom-math-lib/</link>
      <pubDate>Tue, 06 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/04/06/precise-pi-custom-math-lib/</guid>
      <description>&lt;p&gt;In previous posts I implemented a math library that can do perform computations on arbitrarily large (or small) numbers.&#xA;First came &lt;a href=&#34;https://ben.land/post/2021/03/31/math-as-an-algorithm/&#34;&gt;algorithms to manipulate lists of symbols as integer numbers&lt;/a&gt;, which represented signed numbers in a little endian binary format with an arbitrarily large number of bits, along with the mathematical operations of addition, subtraction, multiplication, and division.&#xA;Then this was &lt;a href=&#34;https://ben.land/post/2021/04/05/real-math-as-an-algorithm/&#34;&gt;extended to approximate real numbers&lt;/a&gt; in the form &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;a2^b&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt; where &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;a&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt; and &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;b&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt; are integers using the representation and manipulations from the earlier post.&#xA;The ultimate goal here was to implement a math library for the emulation of a simple Turing-complete programmable machine &lt;a href=&#34;https://ben.land/post/2021/01/21/l2-lisp-machine-python/&#34;&gt;L2&lt;/a&gt;, but so far has only been implemented in Python using language features of L2 (except for a &lt;a href=&#34;https://ben.land/post/2021/03/31/math-as-an-algorithm/#next-steps&#34;&gt;teaser of L2 code for integer math&lt;/a&gt;).&#xA;But now that I have a custom math library capable of arbitrarily precise floating point calculations, given enough time, I might as well use it for something interesting, like calculating &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;π&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\pi&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Floating point math algorithms without float datatypes or math-specific hardware</title>
      <link>https://ben.land/post/2021/04/05/real-math-as-an-algorithm/</link>
      <pubDate>Mon, 05 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/04/05/real-math-as-an-algorithm/</guid>
      <description>&lt;p&gt;Following the &lt;a href=&#34;https://ben.land/post/2021/03/31/math-as-an-algorithm/&#34;&gt;previous post on implementing integer math&lt;/a&gt; without utilizing some lower-level math implementation, this post will extend the functionality to approximate &lt;a href=&#34;https://en.wikipedia.org/wiki/Real_number&#34;&gt;real numbers&lt;/a&gt; using the building blocks for representing integers.&#xA;As before, this is targeted for the simple LISP-like language &lt;a href=&#34;https://ben.land/post/2021/01/21/l2-lisp-machine-python/&#34;&gt;L2&lt;/a&gt; but will be done with Python code first, using only functionality present in L2.&lt;/p&gt;&#xA;&lt;h2 id=&#34;representation&#34;&gt;Representation&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Rational_number&#34;&gt;Rational numbers&lt;/a&gt; can always be represented exactly as ratios of integers, or a &lt;a href=&#34;https://en.wikipedia.org/wiki/Fraction&#34;&gt;fraction&lt;/a&gt;.&#xA;Many rational number can be represented exactly as a &lt;a href=&#34;https://en.wikipedia.org/wiki/Decimal#Decimal_fractions&#34;&gt;decimal fraction&lt;/a&gt; that terminates (has a finite number of digits), and the remaining rational numbers can be represented as decimal fractions with repeating patterns at the end.&#xA;To work with only rational numbers, a representation that stores the numerator and denominator can exactly represent any possible calculation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integer math algorithms without integer datatypes or math-specific hardware</title>
      <link>https://ben.land/post/2021/03/31/math-as-an-algorithm/</link>
      <pubDate>Wed, 31 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/03/31/math-as-an-algorithm/</guid>
      <description>&lt;p&gt;I previously posted about &lt;a href=&#34;https://ben.land/post/2021/01/21/l2-lisp-machine-python/&#34;&gt;simple, programmable, Turing-complete machines&lt;/a&gt;.&#xA;That post discussed a programmable machine that optimized ease-of-programming and ease-of-implementation while still being able to run any program.&#xA;With those goals in mind I put together a Python package &lt;a href=&#34;https://github.com/BenLand100/L2&#34;&gt;L2&lt;/a&gt; which emulates such a simple machine in software.&#xA;For the L2 emulator, I used math operations and datatypes that were simply provided by Python to create the mathematical functionality.&#xA;This is a bit of a cop out, because mathematical operations are a very important part of computing, and a machine that simply borrows them from Python, which uses the CPUs math operations, cannot really said to be simple.&#xA;With that in mind, and in light of a recent post about &lt;a href=&#34;https://ben.land/post/2021/02/24/power-without-math-lib/&#34;&gt;implementing &lt;code&gt;exp&lt;/code&gt; and other functions&lt;/a&gt; without using some standard library, I thought it would be neat to try to bootstrap mathematical operations from the &lt;a href=&#34;post/2021/01/21/l2-lisp-machine-python/#cells&#34;&gt;cells&lt;/a&gt;, &lt;a href=&#34;post/2021/01/21/l2-lisp-machine-python/#symbols&#34;&gt;symbols&lt;/a&gt;, and &lt;a href=&#34;https://ben.land/post/2021/01/21/l2-lisp-machine-python/#special-primitive-operations&#34;&gt;primitive operations&lt;/a&gt; of L2.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Spectral photon sorting for neutrino detection</title>
      <link>https://ben.land/post/2021/03/16/spectral-photon-sorting/</link>
      <pubDate>Tue, 16 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/03/16/spectral-photon-sorting/</guid>
      <description>&lt;h2 id=&#34;detecting-neutrinos&#34;&gt;Detecting neutrinos&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://ben.land/images/neutrino_interactions.png&#34;&#xA;    alt=&#34;Neutrino interactions produce energetic electrons which in turn produce Cherenkov (directional) and scintillation (isotropic) photons in scintillators.&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;Neutrino interactions produce energetic electrons which in turn produce Cherenkov (directional) and scintillation (isotropic) photons in scintillators.&lt;/p&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;figure class=&#34;right&#34;&gt;&lt;a href=&#34;https://ben.land/post/2021/03/01/snop-nearly-full/&#34;&gt;&lt;img src=&#34;https://ben.land/images/rare_processes.png&#34;&#xA;    alt=&#34;Rare processes like neutrinoless double beta decay, which produces two energetic electrons, can also be studied by neutrino detectors.&#34;&gt;&lt;/a&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;Rare processes like neutrinoless double beta decay, which produces two energetic electrons, can also be studied by neutrino detectors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SNO&#43; experiment nearly full of scintillator</title>
      <link>https://ben.land/post/2021/03/01/snop-nearly-full/</link>
      <pubDate>Mon, 01 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/03/01/snop-nearly-full/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://falcon.phy.queensu.ca/SNO+/index.html&#34;&gt;SNO+&lt;/a&gt; experiment will eventually search for &lt;a href=&#34;https://en.wikipedia.org/wiki/Double_beta_decay#Neutrinoless_double_beta_decay&#34;&gt;neutrinoless double beta decay&lt;/a&gt; (&lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mi&gt;ν&lt;/mi&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;0\nu\beta\beta&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;) by loading Tellurium metal into the organic liquid scintillator &lt;a href=&#34;https://en.wikipedia.org/wiki/Linear_alkylbenzene&#34;&gt;Linear alkylbenzene&lt;/a&gt; (LAB) and precisely measuring the energy of electrons produced by &lt;a href=&#34;https://en.wikipedia.org/wiki/Double_beta_decay&#34;&gt;double beta decay&lt;/a&gt; of Te&lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;/mrow&gt;&lt;mn&gt;130&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;^{130}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;.&#xA;The amount scintillation light produced by the double beta decay electrons is proportional to their energy, and the energy distribution of the electrons encodes the physical process that resulted in the double beta decay.&#xA;Usually, two electrons and two neutrinos are emitted, and the neutrinos carry away a fraction of the energy, resulting in electrons with &lt;em&gt;less&lt;/em&gt; energy than the nuclear transition (about 2.6 MeV).&#xA;However, if neutrinos and anti-neutrinos are the same thing (that is, if neutrinos are &lt;a href=&#34;https://en.wikipedia.org/wiki/Majorana_fermion&#34;&gt;Majorana particles&lt;/a&gt;) the neutrinos could be &lt;a href=&#34;https://en.wikipedia.org/wiki/Virtual_particle&#34;&gt;virtual particles&lt;/a&gt; of the interaction, and only electrons would be emitted.&#xA;These electrons would have the full energy of the nuclear transition, about 2.6 MeV.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing exponentiation without a standard math library</title>
      <link>https://ben.land/post/2021/02/24/power-without-math-lib/</link>
      <pubDate>Wed, 24 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/02/24/power-without-math-lib/</guid>
      <description>&lt;p&gt;Exponentiation, or &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;x^y&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;, is typically provided by a standard math library on the system you are using as the function &lt;code&gt;pow(x,y)&lt;/code&gt;, or similar.&#xA;However, if you are programming on some embedded system without standard libraries, or have some externally imposed constraints preventing you from using standard math libraries, it is possible to implement it yourself.&#xA;Of course, you could look up existing implementations, copy them, and call it a day, but where&amp;rsquo;s the fun in that?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reinforcement learning puzzle solving with a &#34;Deep Q-Learning&#34; neural network</title>
      <link>https://ben.land/post/2021/02/15/reinforcement-learning-puzzle-solving/</link>
      <pubDate>Mon, 15 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/02/15/reinforcement-learning-puzzle-solving/</guid>
      <description>&lt;h2 id=&#34;solutions-to-the-puzzle&#34;&gt;Solutions to the puzzle&lt;/h2&gt;&#xA;&lt;p&gt;This is (perhaps?) the final post in the series about solving a dust-matching puzzle pictured below, where the whole cluster of similar-colored piles are removed when one in the cluster is clicked, and the piles the fall down and towards the center to fill any voids that are created.&#xA;&lt;img src=&#34;https://ben.land/images/dust-game.png&#34; alt=&#34;The inspiration image for the minigame.&#34;&gt;&#xA;I wrote a &lt;a href=&#34;https://ben.land/post/2021/01/25/dfs-puzzle-solving/&#34;&gt;depth first search (DFS) solver&lt;/a&gt; that is able to find the best solution, given enough time, and have also written a &lt;a href=&#34;https://ben.land/post/2021/02/10/machine-learning-puzzle-solving/&#34;&gt;deep neural network (NN) solver&lt;/a&gt; that can be trained to approximate the DFS solutions, to solve puzzles faster.&#xA;Both of these methods effectively relied on brute force enumeration of possible results to find a good answer, which is arguably not a very &amp;ldquo;intelligent&amp;rdquo; way of approaching a problem.&#xA;The benefit here is that an exhaustive brute force search is guaranteed to find the shortest solution, while the downside is that a lot of computation has to go into finding these solutions.&#xA;Indeed, the NN solution took several days to train to reliably reproduce the DFS approach, but this was only done for a time-limited DFS approach, which required the DFS solution finder to terminate within 15 seconds, and therefore rarely finding the actual shortest solution.&#xA;It could take months (or more!) to produce enough training data for a neural network to reliably find the best solution with this approach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Machine learning puzzle solving with a deep neural network</title>
      <link>https://ben.land/post/2021/02/10/machine-learning-puzzle-solving/</link>
      <pubDate>Wed, 10 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/02/10/machine-learning-puzzle-solving/</guid>
      <description>&lt;h2 id=&#34;previous-solutions&#34;&gt;Previous solutions&lt;/h2&gt;&#xA;&lt;p&gt;Previously I wrote a &lt;a href=&#34;https://ben.land/post/2021/01/25/dfs-puzzle-solving/&#34;&gt;depth first search (DFS) solver&lt;/a&gt; for the dust matching game pictured below, and have since done some thinking on how it might be solved more efficiently.&#xA;&lt;img src=&#34;https://ben.land/images/dust-game.png&#34; alt=&#34;The inspiration image for the minigame.&#34;&gt;&#xA;As a reminder, the rules of the game were that any similar color pile touching a pile of dust that is clicked are removed from the board, then the piles fall down and towards the center.&#xA;The DFS solver relied on a brute force method which would (eventually) find the ideal order in which to click dust clusters such that the board is cleared in a minimal number of moves.&#xA;The issue with this is that there are often more than 15 steps in the solution for a randomly generated board, and it can take an intractably long time for the solver to find the best solution, even with the help of several heuristics and shortcuts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>fastjson library for reading/writing JSON in C&#43;&#43;</title>
      <link>https://ben.land/post/2021/01/28/fastjson-library/</link>
      <pubDate>Thu, 28 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/01/28/fastjson-library/</guid>
      <description>&lt;h2 id=&#34;the-case-for-a-fast-json-database&#34;&gt;The case for a fast JSON database&lt;/h2&gt;&#xA;&lt;p&gt;Simulation programs and data acquisition (DAQ) systems for physics experiments are typically driven by databases which contain the numerous parameters that can be changed to control the behavior of the simulation.&#xA;This can vary from the mundane, such as how many events to simulate for this particular run, to the exotic, such as the &lt;a href=&#34;https://en.wikipedia.org/wiki/Neutron_capture#Capture_cross_section&#34;&gt;neutron capture cross-section&lt;/a&gt; of hundreds of isotopes present in a detector.&#xA;Historically each set of input data will define its own format in some contrived &lt;a href=&#34;https://en.wikipedia.org/wiki/ASCII&#34;&gt;ASCII&lt;/a&gt; file that, while perhaps not difficult to parse, requires dedicated code to read that specific format.&#xA;That&amp;rsquo;s not ideal, and a large push has been made in the last decade to normalize these formats.&#xA;Fortunately, some modern simulation toolkits, like &lt;a href=&#34;https://github.com/rat-pac/rat-pac/&#34;&gt;RAT-PAC&lt;/a&gt; have opted to adopt industry standard serialization formats like &lt;a href=&#34;https://www.json.org/json-en.html&#34;&gt;JSON&lt;/a&gt; to serialize their databases.&#xA;I have opted to take a similar approach for DAQ systems I have written, as seen in the &lt;a href=&#34;https://github.com/benland100/WbLSdaq/&#34;&gt;WbLSdaq&lt;/a&gt; program I designed to read out &lt;a href=&#34;https://www.caen.it/sections/digitizer-families/&#34;&gt;CAEN&lt;/a&gt; digitizers to &lt;a href=&#34;https://www.hdfgroup.org/solutions/hdf5/&#34;&gt;HDF5&lt;/a&gt; files for the CHESS experiment at UC Berkeley.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Depth first search puzzle solving with heuristics</title>
      <link>https://ben.land/post/2021/01/25/dfs-puzzle-solving/</link>
      <pubDate>Mon, 25 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/01/25/dfs-puzzle-solving/</guid>
      <description>&lt;h2 id=&#34;the-dust-matching-game&#34;&gt;The dust matching game&lt;/h2&gt;&#xA;&lt;p&gt;I was presented with a simple puzzle minigame from the MMORPG &lt;a href=&#34;https://nd1.nodiatis.com/&#34;&gt;Nodiatis&lt;/a&gt;, which I had never heard of and know nothing about.&#xA;I have &lt;a href=&#34;https://github.com/BenLand100/SMART/&#34;&gt;quite&lt;/a&gt; &lt;a href=&#34;https://villavu.com/forum/showthread.php?t=61521&#34;&gt;a history&lt;/a&gt; of &lt;a href=&#34;https://github.com/BenLand100/srbot&#34;&gt;automating&lt;/a&gt; computer games with tedious mechanics (looking at you, &lt;a href=&#34;https://runescape.com/&#34;&gt;RuneScape&lt;/a&gt;), so I couldn&amp;rsquo;t resist taking a stab at this one.&#xA;The minigame consists of a 8x6 grid of five different colored piles of stuff (dust?) randomly selected for each position.&#xA;&lt;img src=&#34;https://ben.land/images/dust-game.png&#34; alt=&#34;The inspiration image for the minigame.&#34;&gt;&#xA;In a mechanic reminiscent of Bejewled or Candy Crush, one selects a particular pile, and any similarly colored connected tiles are removed from the grid.&#xA;Then any piles above a void fall down, and tiles are pulled towards the center to remove other voids.&#xA;Or so I&amp;rsquo;m told&amp;hellip; at any rate, the goal here is to clear the board in as few moves as possible, where 10-12 moves is really good (gets you stuff), and &amp;gt;16 is not so good (gets you no stuff).&#xA;So the question becomes: given a board and the rules of this game, what is the optimal solution?&lt;/p&gt;</description>
    </item>
    <item>
      <title>L2, a Python emulation of a machine to execute LISP-like code</title>
      <link>https://ben.land/post/2021/01/21/l2-lisp-machine-python/</link>
      <pubDate>Thu, 21 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/01/21/l2-lisp-machine-python/</guid>
      <description>&lt;h2 id=&#34;programming-a-machine&#34;&gt;Programming a machine&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Von_Neumann_architecture&#34;&gt;Von Neumann&lt;/a&gt; machines, such as a typical desktop computer or smartphone, can (in principle) have programs written for them by hand using the machine&amp;rsquo;s &lt;a href=&#34;https://en.wikipedia.org/wiki/Assembly_language&#34;&gt;assembly language&lt;/a&gt;.&#xA;In practice, program compilers have been constructed to transform high level languages (like &lt;a href=&#34;https://en.wikipedia.org/wiki/C_(programming_language)&#34;&gt;C&lt;/a&gt; or &lt;a href=&#34;https://en.wikipedia.org/wiki/C%2B%2B&#34;&gt;C++&lt;/a&gt;, which are even easier to write) into assembly language programs.&#xA;Still, there is a very close correspondence between the high level code and machine code, which can be explored with tools like &lt;a href=&#34;https://godbolt.org/&#34;&gt;Compiler Explorer&lt;/a&gt;.&#xA;A von Neumann machine like this is very (very) complicated to build, with modern CPUs requiring billions of elements in addition to the rest of the supporting hardware necessary for the machine to function.&#xA;They are also conceptually complicated, containing large swaths of addressable memory, and many hundreds of possible operations, which are encoded to and read from that memory, and modify the memory in predetermined ways.&#xA;Much simpler &lt;a href=&#34;https://en.wikipedia.org/wiki/Turing_completeness&#34;&gt;Turing-complete&lt;/a&gt; machines exist, such as &lt;a href=&#34;https://ben.land/post/2021/01/03/rule-110-minecraft-redstone/&#34;&gt;Rule 110 automatons&lt;/a&gt;, but &lt;a href=&#34;http://www.complex-systems.com/pdf/15-1-1.pdf&#34;&gt;the proof&lt;/a&gt; that these are Turing-complete (meaning that they can execute any program any other Turing-complete machine could execute) is complicated enough that one would not want to attempt to program anything useful into these by hand.&#xA;It would also be quite difficult to write a compiler for any high level language into the &lt;a href=&#34;https://en.wikipedia.org/wiki/Glider_(Conway%27s_Life)#Importance&#34;&gt;glider&lt;/a&gt; language that runs on such machines.&#xA;Bonafide &lt;a href=&#34;https://en.wikipedia.org/wiki/Turing_machine&#34;&gt;Turing machines&lt;/a&gt; are somewhat of a middle ground here, being Turing-complete, reasonably programmable, not not (conceptually) too difficult to construct.&#xA;They are a bit esoteric, however, and there aren&amp;rsquo;t really any simple schemes for programming simple-to-build Turing machines.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basic maximum likelihood fitting with two (or more) event classes in Python</title>
      <link>https://ben.land/post/2021/01/09/maximum-likelihood-python/</link>
      <pubDate>Sat, 09 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/01/09/maximum-likelihood-python/</guid>
      <description>&lt;h2 id=&#34;context&#34;&gt;Context&lt;/h2&gt;&#xA;&lt;p&gt;In a particle physics experiment, a lot of data is produced and must be analyzed to extract useful information.&#xA;This data typically consists of many independent observations of a &amp;ldquo;physics event&amp;rdquo; inside of some detector, which records information about the event.&#xA;Often the analysis boils down to classifying a large dataset of events into a few categories, with the most simple example having only &amp;lsquo;signal&amp;rsquo; and &amp;lsquo;background&amp;rsquo; types of events.&#xA;For instance, in a &lt;a href=&#34;https://en.wikipedia.org/wiki/Double_beta_decay#Neutrinoless_double_beta_decay&#34;&gt;neutrinoless double beta decay&lt;/a&gt; (&lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mi&gt;ν&lt;/mi&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;0\nu\beta\beta&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;) experiment, the &amp;lsquo;signal&amp;rsquo; would be the &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mi&gt;ν&lt;/mi&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;0\nu\beta\beta&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt; events, while everything else (radioactive decay, solar neutrinos, &lt;a href=&#34;https://en.wikipedia.org/wiki/Double_beta_decay&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;ν&lt;/mi&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;2\nu\beta\beta&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href=&#34;https://arxiv.org/abs/1712.00455&#34;&gt;self destructing dark matter&lt;/a&gt;, etc.) would be backgrounds.&#xA;Once the events have been classified, it is straightforward to turn numbers of events into (relative) rates or probabilities of each event class by taking ratios of the different classes.&#xA;This higher level information can be be used to constrain (or disprove) theoretical models for how particles interact.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rule 110 Cellular Automatons and Universality in Minecraft Redstone</title>
      <link>https://ben.land/post/2021/01/03/rule-110-minecraft-redstone/</link>
      <pubDate>Sun, 03 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2021/01/03/rule-110-minecraft-redstone/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://ben.land/images/mc_base.jpg&#34;&#xA;    alt=&#34;Home sweet home on the Direwolf20 1.16 server.&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;Home sweet home on the Direwolf20 1.16 server.&lt;/p&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I have played a lot of Minecraft and continue to enjoy the game because it is very open ended and every world is unique.&#xA;For those that don&amp;rsquo;t know, Minecraft is a world made of blocks, and all the blocks can be moved or changed by the player.&#xA;It starts off as a &lt;a href=&#34;https://en.wikipedia.org/wiki/Procedural_generation&#34;&gt;procedurally generated&lt;/a&gt; &amp;ldquo;infinite&amp;rdquo; world for the player to explore and develop however they see fit.&#xA;There is a lot of content in the vanilla game: monsters to fight, crops to grow, tools to build, etc.&#xA;Minecraft also supports third party modifications which add new blocks with new functionality to the game.&#xA;I tend to play on heavily modded minecraft servers (with 100+ mods), and the content decribed here was created on a &lt;a href=&#34;https://www.feed-the-beast.com/modpack/ftb_presents_direwolf20_1_16&#34;&gt;Direwolf20 1.16&lt;/a&gt; server, which adds a couple of orders of magnitude more complicated blocks to the vanilla game.&#xA;A lot of these mods add content that turns Minecraft into more of a Logistics/&lt;a href=&#34;https://en.wikipedia.org/wiki/4X&#34;&gt;4X&lt;/a&gt; game like &lt;a href=&#34;https://rimworldgame.com/&#34;&gt;Rimworld&lt;/a&gt; or &lt;a href=&#34;https://factorio.com/&#34;&gt;Factorio&lt;/a&gt; (other favorites of mine).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prioritize network traffic by IP in Linux</title>
      <link>https://ben.land/post/2020/12/28/network-traffic-priority/</link>
      <pubDate>Mon, 28 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2020/12/28/network-traffic-priority/</guid>
      <description>&lt;p&gt;I have a server on a residental internet connection with relatively limited upload bandwidth.&#xA;That server hosts this website along with several services for personal use including:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &lt;a href=&#34;https://jellyfin.org/&#34;&gt;Jellyfin&lt;/a&gt; media server for streaming my own video content&lt;/li&gt;&#xA;&lt;li&gt;A &lt;a href=&#34;https://github.com/popeen/Booksonic-Air&#34;&gt;Booksonic-Air&lt;/a&gt; audiobook streaming server&lt;/li&gt;&#xA;&lt;li&gt;Automated full-system backups using &lt;a href=&#34;https://rclone.org/&#34;&gt;rclone&lt;/a&gt; to Google Drive with &lt;a href=&#34;https://www.borgbackup.org/&#34;&gt;borgbackup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If I&amp;rsquo;m listening to an audio book or streaming some other media to myself, I certainly don&amp;rsquo;t want to buffer if someone else wants to download a large file or its time to ship regularly scheduled backups off to the Google Panopticon (encrypted, of course).&#xA;Fortunately, there is built-in functionality in Linux that allows upload packets to be prioritized and reserve some fraction of the available bandwidth.&#xA;This functionality can also limit the total upload rate from a particular linux machine such that there is always bandwidth left over for other machines on the same network.&#xA;Much more complicated behavior is possible, but I decided to stick with something simple for now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mouse mover program for &#34;working&#34; from home</title>
      <link>https://ben.land/post/2020/12/19/mouse-mover-work-from-home/</link>
      <pubDate>Sat, 19 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2020/12/19/mouse-mover-work-from-home/</guid>
      <description>&lt;p&gt;I was commissioned to solve a critical problem during the Covid-19 pandemic: staying active on Slack / Microsoft Teams / etc while not actually at your computer.&#xA;Apparently some workplaces monitor your work-from-home habits based entirely on whether your status on these messaging applications is &amp;ldquo;Active.&amp;rdquo;&#xA;This is decently effective, since you have to be moving your mouse and/or typing to remain active, which nominally ensures you are at your work computer.&#xA;However, you could be browsing Facebook looking at cat pictures instead, or other non-work activities, and if that flies, I think you should probably be allowed to go into the kitchen to make a tasty snack without the corporate panopticon realizing you&amp;rsquo;re not &amp;ldquo;Active.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reconstructing neutrino interactions with Machine Learning and Likelihood methods</title>
      <link>https://ben.land/post/2020/12/14/reconstructing-neutrino-interactions/</link>
      <pubDate>Mon, 14 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2020/12/14/reconstructing-neutrino-interactions/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://ben.land/images/chroma_theia25.jpg&#34;&#xA;    alt=&#34;A Chroma model of the Theia25 detector with PMTs and LAPPDs as photon detectors.&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;p&gt;A &lt;a href=&#34;https://ben.land/post/2020/12/07/optical-physics-chroma/&#34;&gt;Chroma&lt;/a&gt; model of the Theia25 detector with PMTs and LAPPDs as photon detectors.&lt;/p&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Neutrino detectors like &lt;a href=&#34;https://snoplus.phy.queensu.ca/&#34;&gt;SNO+&lt;/a&gt; and &lt;a href=&#34;https://theia.berkeley.edu/index.php/Main_Page&#34;&gt;Theia&lt;/a&gt; don&amp;rsquo;t detect neutrinos directly.&#xA;Instead they detect optical signals (light/photons) produced by high energy charged particles present after neutrinos interact in the medium.&#xA;Detectors like these are typically large volumes (1 kt - 100 kt) of &lt;a href=&#34;https://en.wikipedia.org/wiki/Scintillation_(physics)&#34;&gt;scintillating&lt;/a&gt; liquid for neutrinos to interact in (&amp;ldquo;target material&amp;rdquo;), and are surrounded by very sensitive light detectors to record the optical signals from the interaction.&#xA;Scintillating liquids are preferred because they produce (relatively) large quantities of photons when charged particles move through them, and more photons means more information about the interaction.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Machine learning from scratch in Python with Numpy</title>
      <link>https://ben.land/post/2020/12/10/machine-learning-from-scratch/</link>
      <pubDate>Thu, 10 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2020/12/10/machine-learning-from-scratch/</guid>
      <description>&lt;p&gt;Early in the Covid19 pandemic I decided to take a deep dive into the math and implementation of &lt;a href=&#34;https://en.wikipedia.org/wiki/Neural_network&#34;&gt;neural networks (NNs)&lt;/a&gt;.&#xA;Instead of treating NNs as a black box and using state-of-the-art packages like &lt;a href=&#34;https://www.tensorflow.org/&#34;&gt;Tensorflow&lt;/a&gt; and &lt;a href=&#34;https://keras.io/&#34;&gt;Keras&lt;/a&gt;, which make NNs as accessible as LEGOs, I wanted to start from scratch and build the algorithms that Tensorflow (or any NN package) is based on.&#xA;Historically this hands-on deep-dive learning style has worked quite well for me, and has resulted in some interesting projects like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>DUNE Warm Interface Board (WIB) Software</title>
      <link>https://ben.land/post/2020/12/07/dune-wib/</link>
      <pubDate>Mon, 07 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2020/12/07/dune-wib/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://ben.land/images/lbne_sketch.png&#34; alt=&#34;DUNE experiment overview&#34;&gt;&#xA;The &lt;a href=&#34;https://www.dunescience.org/&#34;&gt;DUNE&lt;/a&gt; experiment will transfer a massive amount of digitized analog signals from the wire planes, which collect electrons ionized by high energy particles produced in neutrino interactions, to software that decides whether or not the current state of the detector is interesting enough to store for future analysis.&#xA;Sitting in the middle of this infrastructure is the Warm Interface Board (WIB) which controls and configures the front end electronics (responsible for digitizing the analog signals), aggregates data from a segment of the front end via electrical signals over copper cables, and transfers this data over 40gbps optical links to the upstream data acquisition system (responsible for storing the interesting data).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simulating optical physics with Chroma</title>
      <link>https://ben.land/post/2020/12/07/optical-physics-chroma/</link>
      <pubDate>Mon, 07 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2020/12/07/optical-physics-chroma/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://ben.land/images/100MeV_e-_inv.png#left&#34; alt=&#34;Chroma electron event detected with dichroicons&#34;&gt;&#xA;&lt;a href=&#34;https://github.com/BenLand100/chroma&#34;&gt;Chroma&lt;/a&gt; is a simulation package for optical photon raytracing that aims to be physically accurate and very fast.&#xA;In fact, an instance of Chroma running on a single GPU can propagate photons up to 200x faster than similar methods on a single CPU.&#xA;It&amp;rsquo;s built on &lt;a href=&#34;https://documen.tician.de/pycuda/&#34;&gt;PyCUDA&lt;/a&gt; and contains &lt;a href=&#34;https://en.wikipedia.org/wiki/CUDA&#34;&gt;CUDA&lt;/a&gt; kernels for propagating photons in triangular mesh geometries.&#xA;This allows photons to be propagated in parallel on GPUs, which are increasingly available at high performance compute sites, with their applications to machine learning.&#xA;The overall idea here is that Chroma can be used to simulate the optical response of neutrino detectors, which ultimately detect flashes of light produced by the high energy particles resulting from neutrino interactions within a detector.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New website is live!</title>
      <link>https://ben.land/post/2020/12/06/new-website/</link>
      <pubDate>Sun, 06 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://ben.land/post/2020/12/06/new-website/</guid>
      <description>&lt;p&gt;I finally got around to buying an actual domain and &lt;a href=&#34;https://benland.us&#34;&gt;benland.us&lt;/a&gt; now points to my server. When I discovered the top level domain .land existed, I couldn&amp;rsquo;t resist, and &lt;a href=&#34;https://ben.land&#34;&gt;ben.land&lt;/a&gt; is setup identically. Previously my website was a &lt;a href=&#34;https://web.archive.org/web/20161020025855/http://benland.us/index.php/Main_Page&#34;&gt;MediaWiki instance, now archived in the Internet Archive,&lt;/a&gt; and may contain useful information, but I have switched to using the statically generated site you see here, built with &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt;. The source repository is available &lt;a href=&#34;https://github.com/BenLand100/benland&#34;&gt;on my GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Me</title>
      <link>https://ben.land/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ben.land/about/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://ben.land/images/phdone.jpg#right&#34; alt=&#34;PhDone!&#34;&gt;&#xA;&lt;img src=&#34;https://ben.land/images/gatech.png#leftsupersmall&#34; alt=&#34;gatech!&#34;&gt;&#xA;I received my Ph.D. in Physics at UC Berkeley in 2019 after receiving a B.S. in Physics from Georgia Tech in 2013, and generally was a nerd before that as well.&#xA;Going from undergrad to graduate school, I pivoted research interests from &lt;a href=&#34;https://en.wikipedia.org/wiki/Atomic,_molecular,_and_optical_physics&#34;&gt;atomic molecular and optical physics&lt;/a&gt;, with &lt;a href=&#34;https://chapmanlabs.gatech.edu/&#34;&gt;a research group Georgia Tech&lt;/a&gt; studying &lt;a href=&#34;https://en.wikipedia.org/wiki/Bose%E2%80%93Einstein_condensate&#34;&gt;Bose-Einstein condensates&lt;/a&gt;), to &lt;a href=&#34;https://en.wikipedia.org/wiki/Weak_interaction&#34;&gt;weakly interacting physics&lt;/a&gt;, with a group at UC Berkeley studying &lt;a href=&#34;https://en.wikipedia.org/wiki/Neutrino&#34;&gt;neutrinos&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://ben.land/images/berkeley.png#rightsupersmall&#34; alt=&#34;berkeley!&#34;&gt;Ultimately &lt;a href=&#34;https://ben.land/files/thesis_final.pdf&#34;&gt;my thesis&lt;/a&gt; was about using measurements of &lt;a href=&#34;https://en.wikipedia.org/wiki/Solar_neutrino&#34;&gt;solar neutrinos&lt;/a&gt; to understand fundamental properties of neutrinos, and developing new neutrino detection techniques.&#xA;During graduate school, I was a member of the &lt;a href=&#34;https://sno.phy.queensu.ca/&#34;&gt;SNO&lt;/a&gt;, &lt;a href=&#34;https://snoplus.phy.queensu.ca/&#34;&gt;SNO+&lt;/a&gt;, and &lt;a href=&#34;https://nino.lbl.gov/eos/detector.html&#34;&gt;Theia/EOS&lt;/a&gt; collaborations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact Info</title>
      <link>https://ben.land/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ben.land/contact/</guid>
      <description>&lt;p&gt;Connect with me on LinkedIn: &lt;a href=&#34;https://www.linkedin.com/in/benland100/&#34;&gt;linkedin.com/in/benland100&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Contact me via E-mail. I usually have the username &lt;code&gt;benland100&lt;/code&gt;, unless otherwise noted, and you can find me &lt;code&gt;@&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GMail (primary/personal) &lt;code&gt;gmail.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;This server (secondary/personal) &lt;code&gt;ben.land&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Comcast (professional - &lt;code&gt;benjamin_land@&lt;/code&gt;) &lt;code&gt;comcast.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;UC Berkeley (academic) &lt;code&gt;berkeley.edu&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Georgia Tech (academic) &lt;code&gt;gatech.edu&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;UPenn (academic - &lt;code&gt;bland100@&lt;/code&gt;) &lt;code&gt;sas.upenn.edu&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Fermi National Accelerator Laboratory (academic - &lt;code&gt;bjland@&lt;/code&gt;) &lt;code&gt;fnal.gov&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;SNOLAB (academic - &lt;code&gt;bland@&lt;/code&gt;) &lt;code&gt;snolab.ca&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Otherwise I&amp;rsquo;m often on IRC as &lt;code&gt;benland100&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LiberaChat &lt;code&gt;libera.chat&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Rizon &lt;code&gt;rizon.net&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Resume/CV</title>
      <link>https://ben.land/resume/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ben.land/resume/</guid>
      <description>&lt;h2 id=&#34;education&#34;&gt;Education&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;PhD Physics&lt;/strong&gt;, May 2019&lt;br&gt;&#xA;&lt;em&gt;University of California, Berkeley&lt;/em&gt;, CA&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;M.A. Physics&lt;/strong&gt;, May 2015&lt;br&gt;&#xA;&lt;em&gt;University of California, Berkeley&lt;/em&gt;, CA&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;B.S. Physics&lt;/strong&gt;, May 2013 (GPA 4.0/4.0)&lt;br&gt;&#xA;&lt;em&gt;Georgia Institute of Technology&lt;/em&gt;, Atlanta, GA&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;experience&#34;&gt;Experience&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Director - Enterprise Analytics &amp;amp; Data Science&lt;/strong&gt; (March 2026 - present)&lt;br&gt;&#xA;Enterprise Business Intelligence, &lt;em&gt;Comcast&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sr. Manager - Data Science&lt;/strong&gt; (April 2023 - March 2026)&lt;br&gt;&#xA;Enterprise Business Intelligence, &lt;em&gt;Comcast&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Lead Data Scientist&lt;/strong&gt; (September 2021 - April 2023)&lt;br&gt;&#xA;Enterprise Business Intelligence, &lt;em&gt;Comcast&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Search</title>
      <link>https://ben.land/search/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ben.land/search/</guid>
      <description></description>
    </item>
  </channel>
</rss>
