Well, before I write anything else, here's the trail camera links for my Dad, since he complained this week that it was too hard to find them on my blog.
Thanks to Dan, you can see this week's video and this week's photos.
The photos feature a great tit and other woodland animals frozen in motion. The video shows how much the vegetation in the wood is growing, and how many rabbits and hares are around. The deer appearing in the video now have a deep red coat rather than the shaggier greyer coat from winter. The difference is so noticable that it's hard to imagine they are the same deer, though I think I'd know those antlers anywhere, though I'd have expected them to grow a bit more by now.
The Campark camera is ticking now, just like Jamie's. The word on the net is that it's not from the shutter, but the infrared lens filter that's necessary in a camera with a single lens. The filter drops and raises when the ambient light level drops in the evening and rises in the morning. When I was opening the Campark up to replace the batteries, I got this click continually. It's pretty loud on the Campark, definitely enough to alert wildlife. My hand was covering the light sensor and the filter was moving repeatedly. Dual lens cameras are available and we'll look out for these when the time comes to replace ours. Don't buy Campark!
Last week I wrote the blog plost aboard my first train taken in months, the 08:11 from Leeds bound for its long journey to the South. Rick and Ⓤ very kindly gave me a lift to the main station and, masked and fully sanitised, I hid away in the corner of the endmost car. It worked to some extent in that the train was almost empty nearly the whole way. Despite this, I spent most of the week with a low-level cold which took days to get rid of. I guess that our immune system works best when we get constant exposure to microbes. If I don't really get that for a year and then we take a four-hour train journey, the millions of microbes on every surface make sure that immune system gets a kick-start again.
Not that any of this matters too much. I was on a ten-day bubble-changing period of self-isolation anyway. I guess it's just novel to get an actual cold these days. So, it's late May, and the weather is crazy. Wind, continuous rain, sunny, and then huge hailstones. I'm in an even more introverted mood than usual. Yesterday I forewent the usual woodland adventures, meeting friends for lunch or an offer to watch the Eurovision Song Contest second-screened with WhatsApp. Instead I went for a viewing of the soothing, sardonic, skilled and seasoned Big Clive live and a couple of mugs of Lemsip. Given this isolation, it's mostly some updates from more solitary interests this week.
What better thing to do on a summer's evening than computational geometry? I have the sort of mind that gets stuck onto little problems, often without any real application, just for the fun of solving them. You may have noticed browsing this site that I've attempted not waste bandwidth. Everything that can be minified without impedence to the user has been. The colophon for this site goes into more depth about why, but it's essentially partly a technical challenge and partly a reponse to web bloat. I'm happy with the text side of things for now, but I'd like to introduce graphics. I've been working on this lately, starting from the absolute fundamentals.
Compared to the other data on this site, bitmaps are huge. Even JPEG images. I suspect that a lot of graphics which will appear here will be more basic than a bitmap image, possibly in the form of diagrams, visual representations of information. Up until now I've been playing with using graphics primitives like polygons, line segments, ellipses and text. With these, it's possible to make nice stuff, so I just extended the language I specify this site in to include these primitives and output inline SVG when the primitives are encountered. SVG is pretty bandwidth-efficient. High-level graphics language converted into a tiny, well-supported graphics format. Simples.
And this is where it becomes slightly obsessive. And reflecting on this, maybe its the kind of obsession you see in the demoscene. Maybe it's often possible to get those diagrams in fewer bytes. Just like when I trim off the protocol from the URLs or refactor the CSS automatically or try to convert display mathematics into Unicode, maybe I can squash the size of those vector graphics down. What bag of tricks can we use to make this happen at site-generation time while making these tiny graphics files as expressive as possible?
So this leads us into the world of computational geometry, since the problem is not just about hacking the SVG format, but also about learning about tricks involving Boolean operations on polygons, efficient clipping or recognising and grouping equivalent or similar shapes in a diagram. Algorithms like the Ramer-Douglas-Peucker algorithm decimate polylines to a curve with fewer points in O(n log n), simplifying a diagram in situations where that might be useful and take not much away, for example where the polygon is a map outline. Doing this stuff, you repeatedly come across fundamental operations in computational geometry like finding all k intersections in a set of n line segments e.g. using the Bentley-Ottmann algorithm in O((n + k) log n). Recreational programming for me is about finding a problem that progressively reveals many smaller, graded problems, and this is a great example of that. Not only do the problems build on top of each other but often language or type system features reveal themselves in how the libraries have been implemented.
Among the Haskell geometry packages is hgeometry. It's been engaging this week to use the basic ingredients of hgeometry and its toolbox of well-implemented algorithms to develop my own approaches to this. I was surprised to learn that it doesn't (yet) support Boolean operations on arbitrary polygons. What suprised me even more is learning from lemmih that the common algorithms for this, the ones that handle all the tricky corner cases resulting from overlapping or whatever, are only from the last decade:
- Erich L. Foster, Kai Hormann, Romeo Traian Popa, Clipping simple polygons with degenerate intersections.
- Francisco Martínez, Carlos Ogayar, Juan R. Jiménez, Antonio J. Rueda, A simple algorithm for Boolean operations on polygons.
Playing with geometry has a long tradition of helping people to learn to code. Back when I was in school, I remember using the Logo language. If you are in your forties and went to school in the UK, you might too. The output of a Logo program was a line or vector drawing, and the fun of it was controlling a cursor, or 'turtle', to make cool or pretty pictures. Some schools even had a robotic turtle, which would draw designs on the floor with a pen. Seymour Papert, who was the co-creator of Logo (and whose work has been a major influence on construals, another favourite topic of mine), called programming in this style 'body-syntonic reasoning'. This refers to the idea that children and other Logo learners could understand the cursor's behaviour by imagining how they would behave, were they a robotic turtle.
My diagram-generating code is a bit like turtle graphics. At least, it 'compiles' to miniature turtle graphics programs as an intermediate step before being written as SVG. I suppose all this messing about boils down to optimising the description length of a program in a subset of Logo, at least for now.
I spent Monday evening messing about with the radio with Kipz 2E0KZP. I now use a white stick antenna raised high above the roof of my house. Even though it's just an omnidirectional antenna, I managed to hear Kipz fairly clearly on a 2m simplex channel, though he couldn't hear me. Neither of us could hear the other on a 70cm simplex channel, though. We also managed to chat on GB3WR as well as GB3BS. GB3WR is in Cheddar, near where I'm from, but to get out here it has to have impressive range. I put out a call to see if anyone could hear me, and I got a reponse from a handheld station in Caldicot (Cil-y-coed) over on the other side of the Bristol Channel (Môr Hafren). Pretty nice coverage, especially for communicating with people back home.
Despite intermittent rain, the antenna went up on Saturday again for a JS8Call session, to be screenshared over Zoom. The plan was to put up the mast, get connected into the JS8 network and maybe get a QSO going with Mikel EA5IYL. Although the mast went up, the connection with other stations didn't work and it's really not clear why not. Aside from the usual magical reasons associated with antennas and propagation, I suppose one issue is how the trees through whose branches I run my antenna wires are now covered with leaves. Maybe the way the wire touches leaves and branches is an issue now summer's here, and now the touching is pretty unavoidable from the angles introduced by my DX Commander antenna support being part of the system. I'm now less convinced that JS8 or indeed my shortwave setup will be much use in the apocalypse. Anyway, had it not been raining since I woke up today, my plan would have been to make an inverted vee antenna for the 20m band. At just over 5m in length per dipole, it'd fit into the area outside my cottage a bit more nicely than an antenna two or four times its length, and it'd not have to compete with the local plant population.
Speaking of which...
Shortwave furtling day
Kipz and I have been talking about having a bit of a shortwave day near my 'QTH' in a couple of months when things have settled down. The overall goal will be to build an antenna, analyse it with his NanoVNA v2, hook it up to an HF transceiver, and see if we can get some voice contacts and data traffic on various modes. I'd like to make a magnetic loop antenna (and a magnetic loop antenna tuner) one day, or a Yagi antenna, or anything that's not a dipole or a variant of one. Or maybe a dipole after all, but one that's a kilometre long for the 2200m band or something daft like that. Maybe I need to borrow a field...
We could also try soldering together some stuff too. A few weeks ago, I was complaining about tuning my antennas with a manual antenna tuner and Sam M0SKF recommended I get a N7DDC ATU-100 antenna tuner. Together with the NanoVNA I think we could get a decent standing wave ratio with this setup.
Both local geeks and radio friends far away are welcome to join us, in person or over the air. If you'd like to join in, and it's before midday on Friday 28 May 2021, click on the poll link below, log in, and choose some good dates. All the dates are for Saturday; if conditions or weather or whatever mean the Saturday is a bad plan we'll meet on the Sunday instead.
Update: Lines have closed. We chose Saturday 21 August 2021 as the date, or Sunday 22 August if we need to postpone because of weather or conditions.
If there are people who want to join in remotely, get in touch and we'll set up an IRC channel or something to coordinate.
We've used Doodle for the Hemsby Dining Club in the past, but having seen what it looked like when I accidentally disabled my ad blocker one day, I thought I'd try something a bit less spammy. So thanks to the TU Dresden for Dudle, the improved alternative. Particularly, I really like how you can sign your vote with your PGP/GPG key, though that's not been enabled for this poll.
A happy Towel Day for Tuesday and let's hope for dryer days and happy hikes (or rainy days and happy hacking).