Posts

Wordle

Image
Programmers: first they ruined chess, now they ruin ... Wordle (Okay, so ruining chess is a bit harder) Step 4 was a sacrifice move I got stuck yesterday doing Wordle and I couldn't think of a single word that might work.  So... I wrote a short script to prompt me with suggestions.  I've noted that, so far, the solution has never been a plural.  So it's probably a good idea to take the first suggestion that doesn't end in 's'. And here it is:

Guesstimating the distance to the moon

Image
Here's a neat trick for estimating the distance to objects.  Stick out your thumb and look at it with just one eye open, then with just the other eye open.  The distance to the object is the distance it appears to jump multiplied by 10 .  This works because the distance from your eyes to your thumb on your outstretched arm is about 10 times the distance between your eyes.   I thought I'd have a go at using this to measure the distance to the moon

Higher dimensional shoelace theorems

Image
Here's a nice theorem by Gauss The (2D) shoelace theorem Suppose $\mathbf{x_1},\mathbf{x_2},...,\mathbf{x_n}$ are ordered vertices of a polygon.  Let $x_i, y_i$ be the coordinates of $\mathbf{x_i}$ and define $\mathbf{x_{n+1}}$ to be $\mathbf{x_1}$.   Then the area of the polygon is plus or minus $$ \frac{1}{2}\sum_i{x_iy_{i+1} - x_{i+1}y_i} $$ This formula gives rise to the name of the theorem as shown by the illustration below Proof We're going start off by proving the simple case where the polygon is a triangle.  The first thing to notice is that if you take any two adjacent vertices, .e.g. $\mathbf{x_1}$ and $\mathbf{x_3}$, they form a triangle with the origin.  This has an area equal to half of the parallelpiped formed by the two vertices (treated as vectors from the origin). And the area of the parallelpiped is plus or minus $det(\mathbf{x_1}\vert \mathbf{x_3})$, with the sign being positive if the columns taken in order produce an anti-clockwise motion around the origin.

Limits to Economic Growth

Atmospheric methane per head of cattle

Image
Rough and ready order of magnitude calculation: Cows burp 100kg methane each year, which lasts 10 years before decaying in the atmosphere, and has about 100x the warming potential of carbon dioxide while it's up there. Cows (and other ruminants such as sheep) continuously burp CH$_4$, a powerful greenhouse gas.  In fact, gram for gram methane warms the planet 87 times more than carbon dioxide .  However, CH$_4$ reacts in the atmosphere so that the carbon atom eventually finds itself in a CO$_2$ molecule.  We can think of it as having an atmospheric half life of about 8.6 years .  For this reason, the Global Warming Potential (GWP) of methane is sometimes averaged over 100 years to give a GWP100 figure of 27-30, i.e. twenty seven to thirty times as powerful (over 100 years) as carbon dioxide. Methane enters the atmosphere from a number of sources.  Two significant ones are biogenic sources such as cows, and fossil sources, such as when unwanted methane is flared by oil rigs, or when

mpool

Image
An overhead free aligned memory allocator (Well, almost overhead free)      I designed this memory allocator for a Linux device driver I wrote 20 years ago .  It has the property that if you ask for 64 bytes you get a 64 byte aligned block; if you ask for 128, you get a 128 byte aligned block; and so on.  The other nice thing about it is that it automatically defragments, which is to say that if, for example, a 128 byte aligned 128 byte block is free then it can be allocated as a 128 byte block, even if it one or both halves have previously been allocated as 64 byte blocks and later freed. The key to the design is the data structure.  Each free block has a 64 byte header consisting of 16 pointers (I wrote this for a 32-bit architecture, although it could easily be ported).  For this reason 64 bytes is the smallest block size that can be allocated.  The pointers are all either NULL or point to another free block of the same size, forming a 16-ary tree of equal-sized free blocks.  At th

Everything, Everywhere, All At Once

Image
What's going on right now, 70,000 light years away on the nearest galaxy to our own, Canis Major?  Or put it another way, if we're at $x = y = z = t = 0$, what's happening at $y = z = t = 0$ and $x$ = 70,000 light years? According to Einstein's special theory of relativity it depends who you ask.  The most natural coordinates to use depend on your inertial frame.  Sitting in frame $S$, I may use the coordinates $x,y,z,t$ but someone in frame $S'$ would need to use $x',y',z',t'$ in order to observe the universe operating according to the same physical laws.  To make it more concrete, imagine $S$ and $S'$ share their $y$ and $z$ axes, and $S'$ is moving at velocity $v$ along the $x$ axis of $S$.  In this case the transform for converting between the two reference frames is $$ \begin{align} x' &= \frac{x - vt}{\sqrt{1-\frac{v^2}{c^2}}} \\ y' &= y \\ z' &= z \\ t' &= \frac{t - \frac{vx}{c^2}}{\sqrt{1-\frac{v^2}{c^

Principal Component Analysis - A Geometric Approach

Image
Overview Principal Component Analysis is a neat statistical trick, with a simple bit of linear algebra backing it up.  Imagine you've got a dependent, or response variable, $Y$ and a large number of independent, a.k.a. explanatory, variables $X_1, ... X_p$.  You also have $n$ measurements of each, giving you a matrix $$ \begin{align} X = & \begin{pmatrix} x_{11} & x_{12} & ... & x_{1n}\\ \vdots & & & \\ x_{p1} & x_{p2} & ... & x_{pn}\\ \end{pmatrix} \\ = & \begin{pmatrix} -\mathbb{x_1}- \\ \vdots \\ -\mathbb{x_p}- \\ \end{pmatrix} \\ \end{align} $$ You want to build a model explaining how $Y$ depends on the $X_i$, perhaps a linear model like $$ Y = \beta_0 + \sum_{i=1}^p \beta_i X_i $$ but first you need to check that the $X_i$ are more or less independent of each other, otherwise there's no way of uniquely setting the $\beta_i$ values and the stats package is likely to produce an unreliable output.  In general the $X_i$ are not inde

Ubuntu hack

Image
Getting the faffing auto-suspend feature working properly I use Ubuntu on all my computers and it always works 99% well.  But there's always one minor issue that I could live with, were it not for my pathological perfectionism.  On this one it's the auto-suspend, which just wasn't working at all.  This computer lives in the living room and I don't like any noise pollution there, or the idea of pointlessly consuming power.  I think the ethernet card was continuously keeping the machine awake, even if auto suspend was enabled in System Settings -> Power Management .  Eventually I found a solution Add a startup program via Preferences -> Startup Applications Disable auto suspend Log out and back in again (or reboot) For the disabling of auto-suspend I actually just removed the power manager altogether with sudo apt remove mate-power-manager .  If you're using gnome instead it's probably sudo apt remove gnome-power-manager .  The one-line startup program was

Taking Liberties

Image
This Go problem was presented to me by my Tsumego Pro mobile app this morning.  It's not particularly difficult, but I think it nicely demonstrates some ideas about liberties. It's Black's turn to go, and it's pretty obvious that a race is on, and the winner is going to take some stones.  If Black wins it'll take the 3 white stones in a row, and if White wins it'll take the six connected black stones just below. A connected group of stones is taken prisoner when the other player removes it's last "liberty", i.e. the last place into which that connected group can grow.  At the moment White has 4 liberties and Black has 3.  So it would seem Black is on to a loser, since the players can just take turns removing one liberty at a time from each other's stones.  However, it's not quite as simple as that. Black's move can leave White's liberties unchanged or reduce them by one. It can also leave it's own liberties unchanged or reduce t

Integral Identities

Image

Hutchinson's Theorem (1981)

Image
See below for code This was the most up to date thing we proved in my maths degree.  It's a lovely little theorem in the field of Fractal Geometry that enables you to create images like the ones above.  But first some primers.... A fixed point of any map $f:X\to X$ is a point $x\in X$ such that $f(x) = x$.  If $X=\mathbb{R}^N$ we can define a contraction as a map $f$ which brings pairs of points closer together, i.e. we can say $f$ is a contraction if there's some $\lambda < 1$ such that for any $x_1,x_2$ we have  $|f(x_1)-f(x_2)| < \lambda |x_1-x_2|$.  Now, it's easy to see that if $f$ is a contraction then it has a unique fixed point.  All you have to do is note that for any $x$ the following sequence converges $$ x, f(x), f^2(x), f^3(x), ... $$ Why's that?  Well if we let $\epsilon = |x-f(x)|$ then $\epsilon\lambda^{n-1}$ is an upper bound for the distance between the $n^{th}$ and $n+1^{th}$ members of the sequence.  Since $\sum \epsilon\lambda^n$ converges

Simple model that gets you in spitting distance of a reasonable estimate of Equilibrium Climate Sensitivity

Image
Background ECS - Equilibrium Climate Sensitivity - is the temperature change on Earth as a result of a doubling of atmospheric CO2.  That means going from 280 ppm (the level prior to the industrial revolution) past 420 (where we are now) and on to 560 ppm.  Most people probably understand why this would increase temperatures by now, but I'm going to repeat the argument briefly anyway, for completeness

Why is it so difficult to untangle a knot?

Image
Short answer: If there were a simple formula to follow there would also be one for proving or disproving any mathematical statement. Before setting out a sketch of a proof I need to be more clear about the problem.  I want to rule out the trivial method of untangling where you simply thread one end backwards through the tangle till it meets the other end.  So we're going to imagine it's a loop of string that's knotted, and "untangling" means getting back to a simple loop, without magically passing one bit through another. For most closed loops it's not possible to untangle to a loop.  For example if you look at the Trefoil Knot above (a.k.a. Granny Knot) it's obvious that no amount of fiddling with it is going to get rid of the knotty bit and leave just a loop.  But if your loop $L$ can be deformed into a simple loop then it follows that the complement in 3D space $\mathbb{R}^3 - L$ can be deformed continuously into the complement of the simple loop $\

Spinning Tops - by Professor J Perry FRS

Image
  I picked up this fantastic little book in Cambridge market a few days ago.  Published in 1908 by the Society for the Promotion of Christian Knowledge , it summarizes a lecture performed by Professor J Perry in 1890 in Leeds. The theme of the Romance of Science series is that remarkable and unexpected things can be discovered from the study of the apparently mundane.  In this lecture Professor Perry performs a series of experiments on various designs of spinning top and shows i.) What causes the precessional motion of a spinning top ii.) That a subterranean race could determine that we live on a spinning planet without ever seeing the stars iii.) Why the precessional motion of a top is in the same orientation as the spin, but the precessional motion of the Earth is in the opposite orientation iv.) Why some spinning tops stand up when you spin them on their side and even v.) A model of how a magnetic field might cause the observed rotation of plane polarized light The qualitative exp

1 gallon of fuel

Image
  Sometimes it helps to express things in human scales

64

Image
  I'm getting arty now. Following my previous post on greyscale, I wondered whether the numbers 0..63 can be made to look pretty too.  So I ran this in a terminal and then rotated and stretched the result in an image manipulation program. for i in range(64): s = f "{i:06b}" print(s.replace( '0' , ' ' ).replace( '1' , '\u2588' )) Mesmerizing!

Lord Greyscale

Image
  Posting a pretty picture of some greyscale in which the fractal nature of it is clearly visible.  Black rectangles represent zeros and white rectangles represent ones. Read it as an array of columns going from left to right.  In each column exactly one bit changes relative to the previous, making it an ideal scheme for a head to determine its position. An $n$-bit greyscale sequence has $2^n$ members, and the last member always differs from the first in just 1 bit position.  This makes greyscale ideal for determining position around a cylinder. Here's the code: #!/usr/bin/env python3 def __greyscale_fwd(nbits, preset_bits): if nbits == 1: yield 0 + preset_bits yield 1 + preset_bits else : for x in __greyscale_fwd(nbits-1, preset_bits): yield x for x in __greyscale_rev(nbits-1, preset_bits | (1 << (nbits-1))): yield x def __greyscale_rev(nbits, preset_bits): if nbits == 1: yield 1 + preset_bits yi

Lightweight building material seen in Devs

Image
Quantum physics slash Silicon Valley drama Devs features an interesting architectural idea, namely a floating laboratory.  In order make a laboratory float you need very lightweight construction materials and it seems that they've solved this problem by using Menger Sponge bricks, which are very lightweight indeed. A Menger Sponge is a 3D version of this To make a Menger Sponge you need to perform an iteration.  Start with any shape, then make 8 copies each scaled down by a factor of 3, and use them to construct the perimeter of a square.  Then take that shape and do the same operation, and keep repeating.  The picture above shows that you end up with the same thing whether you start with a solid square or a hollow square.  But actually it doesn't matter what shape you start off with (as long as it's bounded). So, what's the area $A$ of the 2D version Menger Sponge shown above?  We can see from the first row in the picture that it's made up of 8 copies of itself,

Fossil Fuel Free Pensions

Image
Fossil Fuels are dragging your pension down!   At the end of last year I finally managed to switch to a fossil fuel free pension.  The journey wasn't completely straightforward, but it was worth it and hopefully this will become a lot easier in the near future. Why do this? There's a bunch of things you can do to reduce your carbon footprint including giving up flying and eating less meat, and I recommend all of them.  But right at the top has to be to stop investing in fossil fuel companies.  A typical pension pot in the UK is around £88,000 of which - typically - 4% is invested in oil, gas, and coal.  That's three and half grand of your money going directly to the likes of ExxonMobil.  If you simply spent this much on tax free petrol it would buy you about 8.8 tons of fuel which would create about 29 tons of CO2, or about 5x the annual emissions of an average Brit.  But investing probably results in an order of magnitude more emissions $^\dagger$ . But it's worse t