RSSAmplifier

Blog

Home on ben.land

Recent content in Home on ben.land

ben.landRSS feed ↗54 posts

Latest posts

Simulating and visualizing the double slit experiment with Python

Several years ago I wrote a post on simulation the Schrodinger Equation that had a brief intro to Quantum Mechanics paired with a simple Python simulation and visualization.
That ended up being one of my more popular pages, despite the follow up post with 2D visualizations being arguably more visually appealing.
Probably down to the titles in the end — people love a Python…

Deep-sky images vol. 3: a refined technique for higher quality results

It’s been a bit over a year since my last astrophotography post highlighting galaxies and a bit over two years doing serious astrophotography.
Even though my rig 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…

Receiving and decoding transmissions from weather satellites

I’ve always been a bit fascinated by radio and wireless communication, so I decided to get some commodity SDR dongles like the RTL-SDR blog V4 and see what I could hear , if you know what I mean.
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.
That led me…

BeeLogger, an ESP32-based sensor platform for monitoring a beehive


 Hive One sitting on the first BeeLogger platform after surviving the 2024-2025 Winter. 
 
 

 With the success of my beehive livefeed and bee-counting neural network in monitoring bee activity, I decided last year it was time to augment my data collection capabilities.
Beyond the general activity of the bees that I can already assess, there are several aspects of bee…

Deep-sky images vol. 2: galaxy edition

The last astrophotography post covered all the details on the technique for capturing deep-sky images and went into some detail about precisely how to interpret these images.
Check it out if you’re not sure what you’re seeing below.
The only downside of the last post is that it only showcased the “best” images of various different types.
Unfortunately, the…

Several ways to "add two number strings"

I was presented with an anecdote from a guy doing software development job interviews that went like this: 
 Interviewer: Show me how you would add two big numbers represented as strings?
 Candidate: How about `adder = lambda a,b: return int(a)+int(b)`?
 Interviewer: No, the numbers are too big `int(a)` would fail.
 Candidate: ...
 First off, Python is a bit unique among modern…

Deep-sky images vol. 1: from the Philadelphia suburbs


 None of the images here were taken with this rig, but its where I started in 2010. 
 
 

 It’s been a while since my last post, largely due to time spent on beekeeping and astrophotograpy .
So, to move the needle, I’ve pulled together some of the best images of deep-sky (meaning: far away) objects I’ve taken at night from the relatively light polluted…

Astrophotography from light polluted skies


 I’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" with a ZWO ASI120MM on a Svbony 60mm F/4 106SV guide scope. Living the dream.

Counting bees in a video feed with a neural network


 Technically not from the BeeCam , but about the same perspective. 
 
 

 After the previous post where I setup a live stream for my beehive, I decided I wanted a quantitative measure of the bee activity going into the winter.
The most straightforward thing to start with was simply identifying and counting the bees in each frame of the feed.
While not directly…

Hacking together a live stream video feed for a beehive


 A still frame from the BeeCam . The carnage on the front is a rogue black cherry. The bees are friendly. 
 
 

 This post is begging for an initial post on how I ended up with bees, but as this isn’t a beekeeping blog (yet), I’ll first go into some detail on the live stream I setup to watch the bees come and go.
There are a lot of live streaming guides…

Low level concepts in quantum computing

This post will try to give a grounded conceptual (with a side of mathematical) understanding of quantum computing by comparing it to classical computing.
This can be a bit tricky, since robust quantum computers are still a nascent technology, but I’ll stick to the low level concepts here instead of getting into the esoteric science that is programming quantum computers.
Primarily I…

Special Relativity, conceptually speaking

When people learn that I have a physics degree, they typically reveal that they have a question about physics they’ve always wanted to have answered.
Often it’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…

DIY smart plug with integration to Home Assistant

Motivation 
 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 Home Assistant . 
 While there are many good commercial options for smart plugs for home devices, and there are many industrial options for controlling heavy machinery, there’s a bit…

Photorealistic rendering with global illumination from scratch

In a previous post I discussed the development and capabilities of the sdfray package , which represents scene geometries as signed distance functions (SDFs), and supports several rendering approaches.
In this post, I’ll be discussing the rendering approach I previously called true optics , which tries to realistically simulate most commonly observed properties of light, to achieve a…

Raytracing and Raycasting with Signed Distance Functions

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.
Unlike more standard CAD processes for 3D printers, which tends to boil down to triangular meshes, SDFs are mathematical functions that can…

Visualizing complex numbers and wavefunctions in one and two dimensions


 The HSV colorspace, matching angle to hue around the circle, and saturation to the radius. 
 
 

 In a previous post on simulating quantum mechanics , I visualized the complex numbers in the wavefunctions by plotting their real, imaginary, and magnitude (square root of probability) separately.
As I mentioned briefly in that post, this is a bit lacking compared to the more…

Simulating quantum mechanics with Python

I was reading an article 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 “simple” atoms or molecules.
Some quick exploration into the topic indicates that’s a fairly difficult problem , not to mention an area of active research for…

A possible optimal solution to Wordle

At this point, probably everyone has heard of the game Wordle where one has six guesses to determine a secret five letter word.
Each time you guess, the letters are colored to represent the following: 
 
 Gray — the letter is not in the word. 
 Orange — the letter is in the word, but not at this position. 
 Green — the letter is in the word at this position.…

Adding client-side search for a statically generated Hugo website

Statically generated sites, like this blog and other sites built with tools like Hugo , are great for simple deployment and fast serving pages, but they lack some features like live editing and other dynamically generated content.
Fortunately, most of these shortcomings have been sorted out by the community.
Here, I’ll focus on search functionality. 
 Typically, when searching…

Beginnings of a low frequency RF receiver with a MicroZed FPGA board

My initial motivation was to build a device that could receive and decode the WWVB time code broadcast from Fort Collins, CO at 60 kHz, and used to synchronize so-called atomic clocks seen on people walls or on their wrists.
These clocks really just decode the broadcasts on the WWVB station, which is synchronised to actual atomic clocks co-located with the radio broadcast.
The protocol is…

Raspberry Pi IPv4/IPv6 router for a dual WAN household

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.
Xfinity includes a lot of streaming features, which require being on Xfinity’s network to utilize.
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…

Do-it-yourself dimmable LED patio lights

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 enjoy this investment after dusk.
Instead of hiring an electrician and contractor to remedy this, I decided to flex my handyman skills, and do it myself. 
 The design goal was overhead string lights, approximately 10 feet off the…

Leaving academia for industry: from physics to data science

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.
I have had the opportunity to develop a lot of very marketable skills in particle physics research.
The chance to manipulate and analyze some of the biggest datasets in big data is itself a great resume…

Deconvolving photon detector signals with convolution to count photons

Neutrino detector often detect neutrino indirectly by recording information about photons produced in the neutrino interaction .
 Simulations 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.
 Many techniques can be exploited to maximize the amount of information…

GDML importer for simulating DUNE in Chroma

Photon simulations for DUNE 
 The DUNE experiment is nominally a time projection chamber (TPC), which records the paths of high energy charged particles by collecting the ionized electrons left in their wake.
Studying the paths of these particles gives information on the particular type of physical interaction responsible for creating them.
DUNE is particularly interested in the…

Automating computer games with a contemporary software stack

A historical perspective on automation 
 As I’ve mentioned before , the desire to automate (cheat, bot, macro, …) games like RuneScape was the primary reason I learned to program at such a young age.
Back in 2002, there was no Stack Overflow to rely on for code snippets, no Reddit to connect me with like-minded individuals in the niche of game automation, and (thankfully) no…

Physics posters from graduate school and beyond

One could argue that the goal of a physicist is to write and publish peer-reviewed papers , which incidentally require enough research, novelty, and scientific merit to pass peer-review at some major journal.
There are, however, a lot of papers out there, so some advertising is necessary in the form of conference talks to generate interest in the physics community or public talks to inform the…

Setting up a large Synology NAS for particle physics simulations

Particle physics is the original big data field, and science in general produces some of the largest datasets in the world .
The desire to store, transfer, and process particle physics data has driven the development of large, distributed computer clusters and the internet itself .
Underpinning all of this is the ability to store and access the data produced by experiments and…

WindMouse, an algorithm for generating human-like mouse motion

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.
The algorithm, called WindMouse, has been used in many different places , as a quick google search will show, and often appears unattributed in stackoverflow questions , despite being licensed under the GPL.
Since it’s seen rather wide use, and…

Unbinned maximum likelihood fitting with kernel density estimation

I have previously posted 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).
For context, and a gentler introduction to the math, I’d suggest skimming the previous post.
In summary, maximum likelihood fitting is a method of statistically determining the makeup of some…

Computing π to many digits with a custom math library

In previous posts I implemented a math library that can do perform computations on arbitrarily large (or small) numbers.
First came algorithms to manipulate lists of symbols as integer numbers , 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…

Floating point math algorithms without float datatypes or math-specific hardware

Following the previous post on implementing integer math without utilizing some lower-level math implementation, this post will extend the functionality to approximate real numbers using the building blocks for representing integers.
As before, this is targeted for the simple LISP-like language L2 but will be done with Python code first, using only functionality present in L2. 
…

Integer math algorithms without integer datatypes or math-specific hardware

I previously posted about simple, programmable, Turing-complete machines .
That post discussed a programmable machine that optimized ease-of-programming and ease-of-implementation while still being able to run any program.
With those goals in mind I put together a Python package L2 which emulates such a simple machine in software.
For the L2 emulator, I used math operations and…

Spectral photon sorting for neutrino detection

Detecting neutrinos 
 
 Neutrino interactions produce energetic electrons which in turn produce Cherenkov (directional) and scintillation (isotropic) photons in scintillators. 
 
 

 
 Rare processes like neutrinoless double beta decay, which produces two energetic electrons, can also be studied by neutrino detectors.

SNO+ experiment nearly full of scintillator

The SNO+ experiment will eventually search for neutrinoless double beta decay ( 0 ν β β 0\nu\beta\beta ) by loading Tellurium metal into the organic liquid scintillator Linear alkylbenzene (LAB) and precisely measuring the energy of electrons produced by double beta decay of Te 130 ^{130} .
The amount scintillation light produced by the double beta decay electrons is proportional to their…

Implementing exponentiation without a standard math library

Exponentiation, or x y x^y , is typically provided by a standard math library on the system you are using as the function pow(x,y) , or similar.
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.
Of course, you could look…

Reinforcement learning puzzle solving with a "Deep Q-Learning" neural network

Solutions to the puzzle 
 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.
 
I wrote a depth first search (DFS) solver that is able to find the best…

Machine learning puzzle solving with a deep neural network

Previous solutions 
 Previously I wrote a depth first search (DFS) solver for the dust matching game pictured below, and have since done some thinking on how it might be solved more efficiently.
 
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…

fastjson library for reading/writing JSON in C++

The case for a fast JSON database 
 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.
This can vary from the mundane, such as how many events to simulate for this particular run, to the exotic, such as the neutron capture…

Depth first search puzzle solving with heuristics

The dust matching game 
 I was presented with a simple puzzle minigame from the MMORPG Nodiatis , which I had never heard of and know nothing about.
I have quite a history of automating computer games with tedious mechanics (looking at you, RuneScape ), so I couldn’t resist taking a stab at this one.
The minigame consists of a 8x6 grid of five different colored piles of stuff…

L2, a Python emulation of a machine to execute LISP-like code

Programming a machine 
 Von Neumann machines, such as a typical desktop computer or smartphone, can (in principle) have programs written for them by hand using the machine’s assembly language .
In practice, program compilers have been constructed to transform high level languages (like C or C++ , which are even easier to write) into assembly language programs.
Still, there is a…

Basic maximum likelihood fitting with two (or more) event classes in Python

Context 
 In a particle physics experiment, a lot of data is produced and must be analyzed to extract useful information.
This data typically consists of many independent observations of a “physics event” inside of some detector, which records information about the event.
Often the analysis boils down to classifying a large dataset of events into a few categories, with the…

Rule 110 Cellular Automatons and Universality in Minecraft Redstone

Introduction 
 
 Home sweet home on the Direwolf20 1.16 server. 
 
 

 I have played a lot of Minecraft and continue to enjoy the game because it is very open ended and every world is unique.
For those that don’t know, Minecraft is a world made of blocks, and all the blocks can be moved or changed by the player.
It starts off as a procedurally generated…

Prioritize network traffic by IP in Linux

I have a server on a residental internet connection with relatively limited upload bandwidth.
That server hosts this website along with several services for personal use including: 
 
 A Jellyfin media server for streaming my own video content 
 A Booksonic-Air audiobook streaming server 
 Automated full-system backups using rclone to Google Drive with borgbackup 
 
 If…

Mouse mover program for "working" from home

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.
Apparently some workplaces monitor your work-from-home habits based entirely on whether your status on these messaging applications is “Active.”
This is decently effective, since you have to be moving your mouse and/or…

Reconstructing neutrino interactions with Machine Learning and Likelihood methods

Introduction 
 
 A Chroma model of the Theia25 detector with PMTs and LAPPDs as photon detectors. 
 
 

 Neutrino detectors like SNO+ and Theia don’t detect neutrinos directly.
Instead they detect optical signals (light/photons) produced by high energy charged particles present after neutrinos interact in the medium.
Detectors like these are typically large…

Machine learning from scratch in Python with Numpy

Early in the Covid19 pandemic I decided to take a deep dive into the math and implementation of neural networks (NNs) .
Instead of treating NNs as a black box and using state-of-the-art packages like Tensorflow and Keras , 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.
Historically this…

DUNE Warm Interface Board (WIB) Software


The DUNE 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.
Sitting in the middle of this infrastructure is the Warm Interface Board…

Simulating optical physics with Chroma

Introduction 
 
 Chroma is a simulation package for optical photon raytracing that aims to be physically accurate and very fast.
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.
It’s built on PyCUDA and contains CUDA kernels for propagating photons in triangular mesh geometries.
This…

New website is live!

I finally got around to buying an actual domain and benland.us now points to my server. When I discovered the top level domain .land existed, I couldn’t resist, and ben.land is setup identically. Previously my website was a MediaWiki instance, now archived in the Internet Archive, and may contain useful information, but I have switched to using the statically generated site you see here,…