<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.3">Jekyll</generator><link href="https://techblog.bagu.uk/feed.xml" rel="self" type="application/atom+xml" /><link href="https://techblog.bagu.uk/" rel="alternate" type="text/html" /><updated>2023-03-08T12:15:08+00:00</updated><id>https://techblog.bagu.uk/feed.xml</id><title type="html">IT Pro Turned Amateur</title><subtitle>30+ years as a software developer, architect, consultant and  lecturer; now meddling with software and electronics for fun.</subtitle><entry><title type="html">Nocmig: Are two mics better than one?</title><link href="https://techblog.bagu.uk/update/nocmig/2020/11/11/nocmig-stereo-or-mono.html" rel="alternate" type="text/html" title="Nocmig: Are two mics better than one?" /><published>2020-11-11T00:00:00+00:00</published><updated>2020-11-11T00:00:00+00:00</updated><id>https://techblog.bagu.uk/update/nocmig/2020/11/11/nocmig-stereo-or-mono</id><content type="html" xml:base="https://techblog.bagu.uk/update/nocmig/2020/11/11/nocmig-stereo-or-mono.html">&lt;p&gt;&lt;img src=&quot;http://techblog.bagu.uk/assets/dish-with-two-mics.jpg&quot; alt=&quot;Parabolic dish with two microphones&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We’ve been recording nocturnal bird migration sounds for a year, using two mics near the focal point of a parabolic dish to make a stereo recording. But neither mic is precisely at the focal point of the parabola. Would we be better to make a mono recording with a more accurately positioned single mic?&lt;/p&gt;

&lt;p&gt;While helping someone to chose equipment to start their own nocmig journey, &lt;a href=&quot;https://twitter.com/tomjbirding&quot;&gt;Tom&lt;/a&gt; asked me whether we have a stereo or a mono microphone. The answer is that we have &lt;a href=&quot;https://micbooster.com/clippy-microphones/99-xlr-stereo-clippy-em172-microphone.html&quot;&gt;a pair of capsule mics&lt;/a&gt;, which we record as two channels of a stereo pair. The two mics are positioned as near as possible to the focal point of &lt;a href=&quot;https://parabolicmicrophone.co.uk/&quot;&gt;a parabolic dish&lt;/a&gt;. But, it’s clearly impossible to position both mics precisely at the focal point. With a foam wind shield, the diameter of the mic is around 2.5 cm, so – if each is positioned as close as possible to the focal point – both will be at least 1.25 cm distant from the focal point in the horizontal plane (assuming the dish to be horizontal). Moreover, the arrangement of the mic clips on the central column of the dish imposes some more constraints; they can’t both be clipped at the exact same point, so there will also be a small error in the vertical plane.&lt;/p&gt;

&lt;p&gt;Does it matter? I’ve always had a mild concern about this, but just blundered on, trying to position each mic as near as possible to the focus. After all, two mics must be better than one, right? I naïvely assumed that the extra signal we get from having two mics, would make up for any inaccuracy. And, we’d likely get a ‘richer’ recording, with some impression of passage as a bird moves across the stereo field.&lt;/p&gt;

&lt;p&gt;Well, Tom’s question prompted an experiment, and some further reading.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.wildtronics.com/parabolicaccuracy.html&quot;&gt;This paper&lt;/a&gt; from Wildtronics addresses the effect of inaccurate placement of mics relative to the focal point of the parabola. As they explain, the focus of the parabola is the point at which reflected sounds from all over the dish have travelled an equal distance from the sound source, and so should arrive simultaneously. If they arrive synchronously like this, the sound waves will be in-phase, and add together to make a louder sound. This is the whole point of the parabolic dish, it amplifies distant sounds by focusing these reflections.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://wildtronics.com/images/articles/parabolic%20reflector.jpg&quot; alt=&quot;Parabolic mic&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(&lt;em&gt;Thanks to &lt;a href=&quot;https://www.wildtronics.com&quot;&gt;Wildtronics&lt;/a&gt; for the diagram.&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;But at a point slightly distant from the focus, waves will arrive out-of-phase, and so cancel one another out, reducing the volume of the sound.&lt;/p&gt;

&lt;p&gt;I wasn’t certain how significant would this cancelling effect be, given two mics positioned with an inaccuracy of about 2 cm.&lt;/p&gt;

&lt;p&gt;The Wildtronics paper clarifies this. It’s frequency-related (higher-pitched sounds require greater accuracy than lower), but in short, an 8  kHz sound, such as the ubiquitous Redwing, will be seriously impaired by an inaccuracy of even 1 cm. The 1  kHz sound of a Tawny Owl will not suffer major loss unless the mic is off by 7.5 cm.&lt;/p&gt;

&lt;p&gt;So, to the experiment. Last night I removed one of the mics, and placed the remaining one as close as possible to the focus. I would estimate that it is within 0.5 cm, assuming the focus is correctly marked on the column (and I have great faith in Andrew at &lt;a href=&quot;parabolicmicrophone.co.uk&quot;&gt;parabolicmicrophone.co.uk&lt;/a&gt;, who seems to have done his homework).&lt;/p&gt;

&lt;p&gt;This morning I collected the recordings and was immediately struck by just how much louder they are. For comparison, I analysed recordings between 00:00 and 03:59 (when the metaphorical night owls of Winchester have mostly disappeared from the streets), and compared them to two recent nights with similar weather (dry, light breeze Beaufort=2). We split recordings into chunks of one minute, so this data reflects the average of 240 individual clips.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Date&lt;/th&gt;
      &lt;th&gt;Left channel (dB)&lt;/th&gt;
      &lt;th&gt;Right channel (dB)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;11/11/2020&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;mean: -28.4, σ: 3.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;09/11/2020&lt;/td&gt;
      &lt;td&gt;mean: -37.5, σ: 2.3&lt;/td&gt;
      &lt;td&gt;mean: -40.0, σ: 2.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;07/11/2020&lt;/td&gt;
      &lt;td&gt;mean: -31.3, σ: 2.7&lt;/td&gt;
      &lt;td&gt;mean: -34.3, σ: 2.4&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Notice that last night’s mono recordings are, on average, between 3 and 12 dB louder than the recordings from either stereo channel, on either of the two comparison nights. That is to say between 40% and 200% louder (the decibel scale is logarithmic, and 6 dB corresponds to a doubling in volume). I haven’t touched the gain on the recording device in between these recordings, so any difference is purely due to mic positioning.&lt;/p&gt;

&lt;p&gt;Notice also that the standard deviation between recordings last night is slightly larger. One might draw a conclusion that the new, mono recordings also distinguish louder and quieter sounds more effectively.&lt;/p&gt;

&lt;p&gt;I find this very interesting and consequential. It’s convinced me that two mics are not better than one. Or maybe we should buy a second dish!&lt;/p&gt;

&lt;p&gt;Let’s finish off with a honking great Redwing passage, recorded in mono, of course.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/GbA60fORg7Y&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;</content><author><name>Rob</name></author><category term="update" /><category term="nocmig" /><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://techblog.bagu.uk/assets/dish-with-two-mics.jpg" /><media:content medium="image" url="http://techblog.bagu.uk/assets/dish-with-two-mics.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Curious about GPS module signal timings?</title><link href="https://techblog.bagu.uk/update/gps/cycling/2020/10/11/curious-about-gps-module-signal-timings.html" rel="alternate" type="text/html" title="Curious about GPS module signal timings?" /><published>2020-10-11T00:00:00+00:00</published><updated>2020-10-11T00:00:00+00:00</updated><id>https://techblog.bagu.uk/update/gps/cycling/2020/10/11/curious-about-gps-module-signal-timings</id><content type="html" xml:base="https://techblog.bagu.uk/update/gps/cycling/2020/10/11/curious-about-gps-module-signal-timings.html">&lt;p&gt;A short note for the record.&lt;/p&gt;

&lt;p&gt;I’ve &lt;a href=&quot;http://www.jordan-maynard.org/2018/03/a-gps-tracker-for-ultra-endurance-cyclists/&quot;&gt;built a few GPS devices&lt;/a&gt;, motivated by desire to track my bike rides. Battery life is an issue, and the general pattern of the firmware design in the controlling processor is pretty standard:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Wait for a message from the GPS module.&lt;/li&gt;
  &lt;li&gt;Decode and store the message.&lt;/li&gt;
  &lt;li&gt;Put the controller into a battery-saving sleep state for a period just less than the interval between GPS messages.&lt;/li&gt;
  &lt;li&gt;Wake up when a timer expires.&lt;/li&gt;
  &lt;li&gt;Go to step 1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Part of the battery efficiency consideration is to minimise the time waiting in step 1. Since the controller is in full battery-consuming mode during that period, spending too long in that step will waste battery capacity.&lt;/p&gt;

&lt;p&gt;GPS modules generally also output a timing signal, generally known as PPS, for pulse-per-second. A possible tiny efficiency improvement might be possible if the controller could be woken, not by expiry of a timer, but by the hardware signal provided by the PPS.&lt;/p&gt;

&lt;p&gt;I’ve looked at the datasheets for several GPS modules and never found a clear indication of the relationship between the PPS signal, and the output of GPS tracking messages on the Transmit (TX) pin. It would be convenient if the PPS signal occurred just before messages appear on TX, with just enough time to arm the UART to receive the data.&lt;/p&gt;

&lt;p&gt;Now I have an oscillosope I can finally answer the question, at least for one GPS module. I conducted an experiment with a Chinese module, ostensibly based on a U-blox NEO-7N GPS receiver. Most likely the chip is a fake, but perhaps the findings hold true for genuine U-blox receivers.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/gps-neo-7n.jpg&quot; alt=&quot;NEO-7N GPS module&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As the images below show, the signals are organised as follows. The PPS signal, normally low, goes high for about 100ms every second. As it happens, in these traces, GPS location messages are transmitted every two seconds. This is configurable. The GPS messages commence about 50ms after the rising edge of the PPS signal. So it does seem there is some possibility to use the PPS as a trigger to wake the controller. Whether this is practical will depend on a number of factors including:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;the time a particular controller takes to wake from deep sleep and ready its UART to receive, and&lt;/li&gt;
  &lt;li&gt;whether the specific application wants to receive GPS location information every second.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A roughly three second trace, showing PPS (pink, normally low) and TX (yellow, normally high).
&lt;img src=&quot;https://techblog.bagu.uk/assets/SDS00001.png&quot; alt=&quot;A 3 second trace, showing PPS (pink) and TX (yellow)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Zooming in, 54ms between PPS rising edge and TX commencing.
&lt;img src=&quot;https://techblog.bagu.uk/assets/SDS00002.png&quot; alt=&quot;54ms between PPS rising edge and TX commencing&quot; /&gt;&lt;/p&gt;

&lt;p&gt;100ms duration of PPS.
&lt;img src=&quot;https://techblog.bagu.uk/assets/SDS00003.png&quot; alt=&quot;100ms duration of PPS&quot; /&gt;&lt;/p&gt;</content><author><name>Rob</name></author><category term="update" /><category term="gps" /><category term="cycling" /><summary type="html">A short note for the record.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://techblog.bagu.uk/assets/gps-neo-7n.jpg" /><media:content medium="image" url="http://techblog.bagu.uk/assets/gps-neo-7n.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Based on your recent activity, we thought you might be interested…</title><link href="https://techblog.bagu.uk/update/audio/2020/10/01/behringer.html" rel="alternate" type="text/html" title="Based on your recent activity, we thought you might be interested…" /><published>2020-10-01T08:46:46+00:00</published><updated>2020-10-01T08:46:46+00:00</updated><id>https://techblog.bagu.uk/update/audio/2020/10/01/behringer</id><content type="html" xml:base="https://techblog.bagu.uk/update/audio/2020/10/01/behringer.html">&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/amazon-based-on-your-recent-activity.png&quot; alt=&quot;Amazon email&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Damn right I’m interested. I’m having the weirdest experience with Amazon. Let me tell you about it.&lt;/p&gt;

&lt;p&gt;Two years ago I got interested in buying one or more PA speakers. I’m involved with &lt;a href=&quot;https://cyclewinchester.org.uk&quot;&gt;Cycle Winchester&lt;/a&gt;; we campaign to make Winchester better by bike, and, as part of that, we organise mass cycle rides around the city a couple of times a year (&lt;a href=&quot;https://cyclewinchester.org.uk/category/rides/ntmr/&quot;&gt;but not this year, obviously&lt;/a&gt;). We’ve found that having music on the ride really helps build a joyous mood. Fun, but challenging the dominance of motor vehicles on the road.&lt;/p&gt;

&lt;p&gt;Never passing up an opportunity to make a project into a &lt;em&gt;technology&lt;/em&gt; project, I designed and built some battery-powered amplifiers, packed inside little lunchboxes. I’ll tell you more about those another time!&lt;/p&gt;

&lt;p&gt;But speakers are more of a problem. I read a great article (&lt;a href=&quot;https://www.instructables.com/id/Battery-Powered-Mobile-Party-Sound-Systems/&quot;&gt;Off-Grid Party Sound Systems&lt;/a&gt;) that recommended some Behringer speakers and they seemed ideal. But I didn’t feel like splashing out well over £100 a go for an occasional bit of fun. So we made do with domestic speakers filched from our various home stereo systems, awkwardly wrapped in polythene against the elements (we have terrible luck with the weather on our rides!).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/bike-speaker.jpg&quot; alt=&quot;Speaker on bike rack&quot; /&gt; &lt;img src=&quot;https://techblog.bagu.uk/assets/lunchbox-amplifier.jpg&quot; alt=&quot;Amplifier&quot; /&gt;&lt;/p&gt;

&lt;p&gt;“Maybe one day those PA speakers will be cheaper”, I thought, and added them to a subscription in &lt;a href=&quot;https://camelcamelcamel.com/&quot;&gt;camelcamelcamel&lt;/a&gt;. In case you don’t know, it’s a website that will alert you when your chosen product falls below a certain price. “If they get below £80, I’m interested”.&lt;/p&gt;

&lt;p&gt;Two years later, out of the blue I get an email. &lt;em&gt;“The Amazon Price for Behringer EuroLive B212XL 800-Watt 2-Way, Passive PA Speaker has dropped at Amazon and is now £1.35 below your desired price.”&lt;/em&gt; “Hmm, interesting”, I think, but it’s still a lot.&lt;/p&gt;

&lt;p&gt;Then two days later, &lt;em&gt;“the price has dropped at Amazon and is now £17.70 below your desired price.”&lt;/em&gt; Two more days and it’s £21 below. This continues for four weeks, by which time, the price is £41 and I can’t resist any longer. Onto Amazon, nine items available, hit &lt;em&gt;Buy Now&lt;/em&gt;, but I get this.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/amazon-delivery-error.png&quot; alt=&quot;Amazon delivery error&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Can’t be delivered to my selected address. Seems odd; we live in a regular urban street, in Southern England, not on a Scottish island or anything (though sometimes that idea appeals). I tried a couple of other addresses of family members, with the same result.&lt;/p&gt;

&lt;h3 id=&quot;amazon-customer-support&quot;&gt;Amazon customer support&lt;/h3&gt;

&lt;p&gt;It took me a while to find a way to contact Amazon customer support, but eventually I got onto their live chat.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Hi this is Aditi, how can I help you?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“I really want to buy this speaker, but your site says you can’t deliver it to me. I wondered if you can tell me why not; maybe I could then find a friend or family member to receive it.”&lt;/p&gt;

&lt;p&gt;Aditi retired hurt almost immediately. &lt;em&gt;“I’m going to hand you on to my colleague Dhruv”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“I really want to buy this speaker, but your site says you can’t deliver it to me. I wondered if you can tell me why not; maybe I could then find a friend or family member to receive it.”&lt;/p&gt;

&lt;p&gt;Dhruv: &lt;em&gt;“There are many reasons why we may not be able to deliver but I can’t tell you why. Let me delete all of the delivery addresses on your account, then you can add them again and see if the problem magically goes away.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I accede to this procedure, but to no avail. Dhruv further suggests clearing my cache, to no avail. I volunteer to try a different browser which has never visited this product, to no avail.&lt;/p&gt;

&lt;p&gt;Dhruv: &lt;em&gt;“Have you tried getting it delivered to a friend or family member?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“Yes, I have tried a couple but let me try everyone I can think of”. I try five or six different addresses in various major urban centres, with the same result in every case.&lt;/p&gt;

&lt;p&gt;Dhruv: &lt;em&gt;“Why don’t you buy a different speaker?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This suggestion doesn’t go down well with me for obvious reasons, but - out of curiosity - I try putting into my basket a similar speaker from the same manufacturer: both sold by: &lt;em&gt;Amazon EU S.a.r.L.&lt;/em&gt;, similar size and weight. “OK, that works no problem, but I don’t want to buy that speaker as it costs four times as much.”&lt;/p&gt;

&lt;p&gt;Dhruv: &lt;em&gt;“I understand you might not want to buy this speaker but blah, blah, blah, Amazon policy.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By this point I’m 90% sure this product is configured incorrectly in the product catalogue, and that it’s not orderable by anyone. “Can you escalate this to someone who could look into the product configuration?”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Yes, I can transfer you to my supervisor but I must tell you, Amazon policy, blah, blah, blah.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I wait a while and am connected with Krishna.&lt;/p&gt;

&lt;p&gt;“I’m pretty sure this product is configured incorrectly, so that no-one can order it.”&lt;/p&gt;

&lt;p&gt;Krishna: &lt;em&gt;“Have you tried delivering to a friend or family member?”&lt;/em&gt; “Yes, I have tried almost everyone in my address book.&lt;/p&gt;

&lt;p&gt;Krishna: &lt;em&gt;“I suggest you change your address.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Wondering if he seriously wants me to move house. And if I did, what chance that my new residence happens to be the sole address in the UK where Amazon can deliver this item.&lt;/p&gt;

&lt;p&gt;I try a different tack, since Krishna doesn’t seem to have much sympathy with my plight; maybe he will respond better to a suggestion about Amazon’s bottom line. “For Amazon’s sake, you have nine items here, that I’m somewhat certain nobody in the UK can buy. If you ever want to be able to sell this inventory, you might want to take a look at the product configuration to see why it can’t be purchased.”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Thank you for your feedback, Sir, which I assure you we will take into account. Goodbye.”&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;behringer&quot;&gt;Behringer&lt;/h3&gt;

&lt;p&gt;Maybe I’m a glutton for punishment, but the thought of these nine speakers, priced well under half RRP, but trapped in an Amazon warehouse, is driving me a little bit nuts. In desperation I tweet a DM to &lt;em&gt;@behringer&lt;/em&gt;. “… I think Amazon will find it really hard to sell the nine items they say are in stock. Maybe you can help???”&lt;/p&gt;

&lt;p&gt;I experience a little flicker of excitement as a reply comes back: &lt;em&gt;“Hi Rob, hmm, this seems to be a really tricky problem. I will try to pass this along internally…”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But days pass without further response and my excitement fades.&lt;/p&gt;

&lt;h3 id=&quot;ebay&quot;&gt;Ebay&lt;/h3&gt;

&lt;p&gt;A curious thing I noticed while the Amazon price was plummeting earlier in September: Ebay prices for the product were also falling at a similar rate, though always roughly £10 more than Amazon. I sensed something slightly fishy, but - with Amazon’s products out of reach, and not wishing to cut off nose to spite face - I reluctantly stumped up the extra £10 to buy a new item from an Ebay seller. “At least that nightmare is over”, I thought, and settled back to await delivery.&lt;/p&gt;

&lt;p&gt;Two days later:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“I’m very sorry to tell you this but the item you have purchased has been reported as
damaged, so we’ve had to start a process of getting that investigated. Unfortunately, at this time we cannot say how long that might take. We will send you your money back immediately and cancel the order.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hmm, the fishy smell just became absolutely acrid. As I might have suspected, this Ebayer appears to be advertising Amazon stock, but with a markup, and they just hit the same problem that I had when they tried to fulfil my order. It’s unorderable. I don’t like being lied to.&lt;/p&gt;

&lt;p&gt;Expecting the worst, I moved down the list of Ebay sellers to the second lowest priced and placed another order. This time the response was almost immediate:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“… we are pulling all of our orders for quality checks before shipping to customers. Unfortunately upon this quality check the product has not matched our standards due to some dysfunctions and therefore is not suitable for shipping. The product cannot be swapped as it was the last we had in our stock…”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’m yelling “mendacity, mendacity, always mendacity”, like &lt;a href=&quot;https://www.youtube.com/watch?v=fTWqUhvqXx8&quot;&gt;Burl Ives in Cat on a Hot Tin Roof.&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;based-on-your-recent-activity&quot;&gt;Based on your recent activity…&lt;/h3&gt;

&lt;p&gt;This is where we came in. Today Amazon emailed me: &lt;em&gt;“Based on your recent activity, we thought you might be interested in this.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Aaaarggghhh!&lt;/p&gt;</content><author><name></name></author><category term="update" /><category term="audio" /><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://techblog.bagu.uk/assets/bike-speaker-square.jpg" /><media:content medium="image" url="http://techblog.bagu.uk/assets/bike-speaker-square.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">DIY Dummy Speaker Load</title><link href="https://techblog.bagu.uk/update/audio/2020/08/29/dummy-load.html" rel="alternate" type="text/html" title="DIY Dummy Speaker Load" /><published>2020-08-29T23:00:00+00:00</published><updated>2020-08-29T23:00:00+00:00</updated><id>https://techblog.bagu.uk/update/audio/2020/08/29/dummy-load</id><content type="html" xml:base="https://techblog.bagu.uk/update/audio/2020/08/29/dummy-load.html">&lt;p&gt;I recently finished a build of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Squeezebox_(network_music_player)&quot;&gt;Squeezebox&lt;/a&gt; with integrated class D amplifier (of which I hope to write more later).&lt;/p&gt;

&lt;p&gt;While I still had it on the bench, before putting it into production use, I wanted to run some simple tests, inspired by the great YouTube channel of &lt;a href=&quot;https://www.youtube.com/user/JohnAudioTech&quot;&gt;JohnAudioTech&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A dummy speaker load replaces a speaker with a resistor of similar impedance, so that an amplifier can be run at high volume against a consistent load.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/dummy-load-finished.jpg&quot; alt=&quot;A pair of dummy loads.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Although I tinker a little bit with cheap amplifier boards, I don’t expect to be doing this sort of thing often, so I didn’t want to go overboard with a sophisticated design. I still hoped to a create a nice, simple and usable tool though.&lt;/p&gt;

&lt;p&gt;The type of power resistors used in dummy loads can generate a lot of heat when used at high power. I chose &lt;a href=&quot;https://uk.farnell.com/arcol/hs50-8r-f/resistor-wirewound-8r-1-axial/dp/2678707&quot;&gt;8Ω 50 Watt resistors by Arcol&lt;/a&gt;. They are not the special low-inductance resistors that some audio users demand, but I was convinced by various YouTube videos that this would be overkill. I also wanted to be able to test at 4Ω, so I bought four resistors, two for each dummy load. By connecting the two 8Ω resistors in parallel, the resulting resistance would be 4Ω.&lt;/p&gt;

&lt;p&gt;Though rated for 50 Watts, &lt;a href=&quot;https://4donline.ihs.com/images/VipMasterIC/IC/OMIT/OMIT-S-A0004284475/OMIT-S-A0004284475-1.pdf?hkey=52A5661711E402568146F3353EA87419&quot;&gt;the datasheet&lt;/a&gt; shows that the resistors are only rated for 14W without a heatsink, and that a heatsink of 535 cm&lt;sup&gt;2&lt;/sup&gt; is required to support the full rating. As a heatsink, I purchased for each resistor a 250x250mm sheet of 1.2mm Aluminium. Each dummy load is therefore a sandwich of two aluminium sheets, with a resistor bolted to each sheet on the inside of the sandwich. One resistor is permanenly in circuit across the binding post terminals for an 8Ω load, with the second resistor switchable into circuit for a 4Ω load. It should also be possible to put two resistors in series for a 16Ω test, but it would require a fairly exotic switch to cater for all three alternatives, so I left that possibility out of the design.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/dummy-load-internal.jpg&quot; alt=&quot;A pair of dummy loads.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/dummy-load-internal-closeup.jpg&quot; alt=&quot;A pair of dummy loads.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/dummy-load-top-view.jpg&quot; alt=&quot;A pair of dummy loads.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/dummy-load-connectors.jpg&quot; alt=&quot;A pair of dummy loads.&quot; /&gt;&lt;/p&gt;</content><author><name></name></author><category term="update" /><category term="audio" /><summary type="html">I recently finished a build of a Squeezebox with integrated class D amplifier (of which I hope to write more later).</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://github.com/robjordan/techblog/raw/gh-pages/assets/dummy-load-finished.jpg" /><media:content medium="image" url="https://github.com/robjordan/techblog/raw/gh-pages/assets/dummy-load-finished.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Experiences buying and burning replacement EPROMs for 2716-type devices</title><link href="https://techblog.bagu.uk/update/retrocomputing/2020/08/27/eproms.html" rel="alternate" type="text/html" title="Experiences buying and burning replacement EPROMs for 2716-type devices" /><published>2020-08-27T23:00:00+00:00</published><updated>2020-08-27T23:00:00+00:00</updated><id>https://techblog.bagu.uk/update/retrocomputing/2020/08/27/eproms</id><content type="html" xml:base="https://techblog.bagu.uk/update/retrocomputing/2020/08/27/eproms.html">&lt;p&gt;I’m restoring my first home computer, a 1979 &lt;a href=&quot;https://en.wikipedia.org/wiki/Exidy_Sorcerer&quot;&gt;Exidy Sorcerer&lt;/a&gt;. I discovered a fault with one of the 2KB programmable read-only memory (PROM) chips; it had lost its memory and become blank. Terry Stewart had an identical problem, so I won’t describe the &lt;a href=&quot;https://www.classic-computers.org.nz/blog/2011-06-25-sorcerer-rom-pac-fix-part-1.htm&quot;&gt;fault diagnosis process that he has documented so thoroughly&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/rom-pac.jpg&quot; alt=&quot;Exidy Sorcerer BASIC ROM Pac.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The result was that I needed to source EPROMs, more-or-less compatible with the 2716 pin layout, as well as a UV EPROM eraser and an EPROM programmmer. I researched numerous articles, and watched many videos, and while I learned a lot, I was also left with the feeling this is a minefield. Because 2716-type devices have not been manufactured for many years, there is great suspicion in the marketplace. Which chips are genuine and which are fake? Which chips are compatible with which programmers?&lt;/p&gt;

&lt;p&gt;I won’t add to the ethical and economic debate about the veracity of the available chips, but simply relate my experiences which were less painful than I feared.&lt;/p&gt;

&lt;h3 id=&quot;programmer&quot;&gt;Programmer&lt;/h3&gt;
&lt;p&gt;I bought a &lt;a href=&quot;http://xgecu.com/TL866_main.html&quot;&gt;TL866 II Plus Universal Programmer&lt;/a&gt; from a UK-based ebay seller named &lt;a href=&quot;https://www.ebay.co.uk/usr/yourcartmax&quot;&gt;yourcartmax&lt;/a&gt; for £41. It was the cheapest UK-based offering. There are claims that these devices have been conterfeited, but also that the presence of a label on the bottom of the machine is suggestive of a genuine item. Here’s the label on mine. I have no reason to doubt its authenticity.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/tl866II-plus-label.jpg&quot; alt=&quot;TL866 II Plus bottom label.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The programmer comes with software for Windows on a CD, but more recent updates are available via the &lt;a href=&quot;http://xgecu.com/&quot;&gt;xgecu website&lt;/a&gt;. At the time of writing the latest is 10.31. You are instructed to install the software before plugging in the programmer to a USB port, so that drivers are available. Once again the fear, uncertainty and doubt is rife regarding this software. &lt;a href=&quot;https://www.eevblog.com/forum/beginners/tl866ii-plus-tl866acs-open-source-software-(oem-software-has-malware)/&quot;&gt;An EEVblog thread&lt;/a&gt; indicates that six different anti-virus products detect malware. I checked it with Avast, and nothing untoward was detected.&lt;/p&gt;

&lt;p&gt;I used a rear USB port on the elderly Dell desktop machine on which I run Windows, on hearsay grounds that the rear ports deliver more current to USB. Programming EPROMs does demand higher voltages than USB’s 5V, so the programmer may be impacted by current-limited USB ports. Some people recommend a powered USB hub but I don’t have one. More on this high-voltage programming later.&lt;/p&gt;

&lt;h3 id=&quot;eraser&quot;&gt;Eraser&lt;/h3&gt;
&lt;p&gt;EPROMs can be erased and reprogrammed. Erasure requires exposure to light in the UVC range, ideally 254nm. There are cheap Chinese-origin plastic boxes containing a mercury vapour tube, and a little electronics, which promise to do the job. There is also lots of chatter on the boards about erasing with sunlight (you can but it takes weeks instead of minutes), toothbrush santisers, UV LEDs at close range (the lowest wavelength available from LEDs at this time seems to be 365nm, so less effective), and the usual claim that the Chinese devices are crap and you really need a used, turn-of-the-century device from ebay. With my head spinning from all the options, I ended up buying a &lt;a href=&quot;https://uk.banggood.com/NEW-High-Speed-Ultraviolet-Eraser-UV-EPROM-Eraser-Ultraviolet-Light-Erasable-Timer-p-1532425.html&quot;&gt;cheap Chinese device from Banggood&lt;/a&gt; for $22. It’s the one labelled ‘Big Moon’ which seems to be slightly less common than the darker grey unit labelled ‘AY’; though the difference is probably just cosmetic. Banggood seem to get things to me a bit quicker than Aliexpress, and my biggest worry was receiving a box full of broken glass and mercury droplets &lt;a href=&quot;https://www.youtube.com/watch?v=Zn3kWy_5kWU&quot;&gt;like this poor fellow&lt;/a&gt;. Luckily all arrived intact nine days after ordering.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/big-moon-eprom-eraser.jpg&quot; alt=&quot;Big Moon EPROM eraser.&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;chips&quot;&gt;Chips&lt;/h3&gt;
&lt;p&gt;Here’s where things get really interesting(!). The original memory device in the Sorcerer BASIC cartridge was a masked ROM. It means the memory was one-time programmed by the chip manufacturer. EPROMs, as we’ve discussed, are user-erasable. As far as I can tell, &lt;a href=&quot;http://www.sycelectronica.com.ar/semiconductores/2716.pdf&quot;&gt;the original 2716 was an Intel device&lt;/a&gt; which is rarely found these days. Subsequently other manufacturers copied the pattern and produced a variety of devices with similar-sounding names. It’s named ‘27’ because (I don’t know) and ‘16’ because it has 16k bits of storage capacity, ie 2K bytes. In the user-programmable device, pin 21 is used to supply a high voltage when programming the memory, and +5V in normal operation. Clearly a programming voltage wasn’t necessary in the masked ROM, so pin 21 in the Sorcerer ROM Pac is wired to Ground. This means, assuming we are successful programming a replacement EPROM, we’ll have to do some jiggery-pokery to get the chip working in the Sorcerer.&lt;/p&gt;

&lt;p&gt;As I mentioned, many manufacturers followed Intel in offering 2716-style devices and these other manufacturer device types can easily be found on ebay and AliExpress. Fakes? Probably. Does it matter at this point when no western manufacturer offers new chips of this type? For my money, no. Two devices that seem commonly offered are:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;ST Microelectronics M2716-1F1 (&lt;a href=&quot;https://techblog.bagu.uk/assets/M2716-1-F-1.pdf&quot;&gt;datasheet&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Fairchild NMC27C16B (&lt;a href=&quot;https://techblog.bagu.uk/assets/NMC27C16B.pdf&quot;&gt;datasheet&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both parts have the same pinout as the original Intel 2716. The letter C in between 27 and 16 indicates that the Fairchild NMC27C16 is a CMOS device. The chief benefit of CMOS technology is lower power consumption than NMOS. The active power consumption of the Fairchild NMC27C16 chip is advertised as 55mW vs 525mW for the ST M2716 part. Not that this matters much in the context of the Sorcerer which is already cooking with tens of Watts burning off in the power supply.&lt;/p&gt;

&lt;p&gt;But more significant in the present exercise is the voltage required on pin 21 to program the memory (V&lt;sub&gt;pp&lt;/sub&gt;). M2716 requires 25V whereas NMC27C16 only needs 12.5-13.0V. The TL866 II plus can supply a maximum of 18V programming voltage. &lt;a href=&quot;https://www.youtube.com/watch?v=F9ADB7ImSwc&quot;&gt;Cunning schemes can be used&lt;/a&gt; to externally-power pin 21 in order to program an M2716. I have successfully used this technique. But note that there is a specific warning against this in the TL866 II plus manual. In bold: &lt;strong&gt;Do not use the external power supply to enhance the programming voltage for forced programming, when the chip is damaged, 21V / 25V high voltage may go back to the programmer’s internal, will damage the programmer hardware.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The NMC27C16, by contrast, is easily-programmed with the TL866 II plus.&lt;/p&gt;

&lt;p&gt;I bought both types of chip, from AliExpress sellers, due to inexperience and the fear and doubt instilled by all of those scary discussion board posts.&lt;/p&gt;

&lt;h4 id=&quot;programming-the-m2716&quot;&gt;Programming the M2716&lt;/h4&gt;

&lt;p&gt;The M2716 came from &lt;a href=&quot;https://www.aliexpress.com/store/1157182&quot;&gt;Shop1157182 Store&lt;/a&gt;. They cost $0.95 a piece, plus a little extra for shipping. I bought four chips. Three came blank, one needed erasing for 15 minutes or so, in the Big Moon eraser. The pins were a bit higgledy-piggledy, as if they had been removed from a prior installation. I only tested programming one of them because of the shenanigans with external voltage. I installed the EPROM in a socket, bent pin 21 of the socket out to one side, and inserted the socket into the programmer. Thus pin 21 of the chip was isolated from the programmer’s own V&lt;sub&gt;pp&lt;/sub&gt;, which was set at 18V. I then crocodile-clipped +25V to the splayed leg of pin 21, and the ground of the external power supply to the metal shield of the USB type B connector. For M2716, the programmer defaults to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Vpp&lt;/em&gt;: 18.0V&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Vcc verify&lt;/em&gt;: 5.0V&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Vdd write&lt;/em&gt;: 5.0V&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Pulse delay&lt;/em&gt;: 1000us&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last confuses me, because the datasheet suggests the programming pulse should be between 45ms and 55ms, but 1000us, or 1ms, is the highest value allowed. Nonetheless, the chip programmed and verified successfully with external power in a few seconds. The TL866 software warns about a failed pin check (because we’ve bent pin 21 out of the socket) but you can ignore the warning and programme regardless.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/M716-programming.jpg&quot; alt=&quot;Programming the M2716 with external 25V&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;programming-the-nmc27c16&quot;&gt;Programming the NMC27C16&lt;/h4&gt;

&lt;p&gt;The NMC27C16 came from &lt;a href=&quot;https://www.aliexpress.com/item/4001292774346.html&quot;&gt;Shop900249433 Store&lt;/a&gt;. I paid $12.54 for a lot of 10 pieces, with free shipping. They arrived quite nicely packed, with pins pressed into foam, and wrapped in clingfilm inside a jiffy bag. All the chips had pre-existing contents, and I erased them with a blast of about 12 minutes in the Big Moon eraser. The programmer pulled in default programming parameters when I told it the chip type:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Vpp&lt;/em&gt;: 13.0V&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Vcc verify&lt;/em&gt;: 5.0V&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Vdd write&lt;/em&gt;: 5.5V&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Pulse delay&lt;/em&gt;: 200us&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I changed the last to 100us as that is what is stipulated in the datasheet. The chips all programmed and verified successfully in a few seconds.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/nmc27c16.jpg&quot; alt=&quot;NMC27C16BQ&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;the-verdict&quot;&gt;The Verdict&lt;/h4&gt;

&lt;p&gt;The verdict is: choose the NMC27C16 for trouble-free programming without external power shenanigans. My seller provided a nice package of 10 chips for not much more than $1 each and they all worked.&lt;/p&gt;

&lt;h3 id=&quot;installing-the-programmed-eprom-in-the-sorcerer&quot;&gt;Installing the programmed EPROM in the Sorcerer&lt;/h3&gt;
&lt;p&gt;You’ll remember I started down this rabbit hole simply to replace a failed PROM in my BASIC cartridge. Expecting trouble, I bought lots of EPROMs, of two  different types, but really, one would have sufficed. As I mentioned earlier, and Tezza recounts in his similar repair story, we need to isolate pin 21 of the reprogrammed EPROM from the GND connection in the corresponding socket of the Sorcerer’s ROM Pac. I snipped off the thin part of the leg of pin 21, and soldered a small piece of enameled copper wire between the stump of pin 21 and pin 24 (+5V). (First time around, I did this surgery on a socket, to save the leg of the EPROM, but the combined height of two sockets and an EPROM prevented the ROM Pac cover from fitting back on). &lt;a href=&quot;https://www.classic-computers.org.nz/blog/2011-06-25-sorcerer-rom-pac-fix-part-2.htm&quot;&gt;Tezza did the surgery&lt;/a&gt; on the ROM Pac PCB, but I like my solution, which only damages a cheap and replaceable EPROM.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://techblog.bagu.uk/assets/sorcerer-eprom-rewiring.jpg&quot; alt=&quot;Rewiring the EPROM for installation in the Sorcerer&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The fix was successful. BASIC loads just fine, and I celebrated with the obligatory 10 PRINT “HELLO WORLD”.&lt;/p&gt;

&lt;p&gt;Thanks to Tezza for the original guide and to the &lt;a href=&quot;http://www.vcfed.org/&quot;&gt;Vintage Computer Federation&lt;/a&gt; for resources and help, especially ROM archives.&lt;/p&gt;</content><author><name></name></author><category term="update" /><category term="retrocomputing" /><summary type="html">I’m restoring my first home computer, a 1979 Exidy Sorcerer. I discovered a fault with one of the 2KB programmable read-only memory (PROM) chips; it had lost its memory and become blank. Terry Stewart had an identical problem, so I won’t describe the fault diagnosis process that he has documented so thoroughly.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://github.com/robjordan/techblog/raw/gh-pages/assets/rom-pac.jpg" /><media:content medium="image" url="https://github.com/robjordan/techblog/raw/gh-pages/assets/rom-pac.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Digitising 35mm slides quickly using a projector, DSLR camera and a microcontroller</title><link href="https://techblog.bagu.uk/update/photography/arduino/microcontrollers/esp8266/2020/01/19/digitising-35mm-slides.html" rel="alternate" type="text/html" title="Digitising 35mm slides quickly using a projector, DSLR camera and a microcontroller" /><published>2020-01-19T23:00:00+00:00</published><updated>2020-01-19T23:00:00+00:00</updated><id>https://techblog.bagu.uk/update/photography/arduino/microcontrollers/esp8266/2020/01/19/digitising-35mm-slides</id><content type="html" xml:base="https://techblog.bagu.uk/update/photography/arduino/microcontrollers/esp8266/2020/01/19/digitising-35mm-slides.html">&lt;p&gt;We have a large collection of 35mm photo slides. Some were taken by my father-in-law in the 1950s, 60s, 70s and 80s. Some were taken by me or my wife in the 80s and 90s.&lt;/p&gt;

&lt;p&gt;I want to digitise these, and I took inspiration from various projects documented on the web, the common approach being to use a DSLR camera and a Kodak Carousel slide projector. I used an ESP8266 microcontroller to trigger the projector to advance form slide to slide, and trigger the camera to take photos.&lt;/p&gt;

&lt;p&gt;The project is &lt;a href=&quot;https://robjordan.github.io/projector-control/&quot;&gt;documented more fully here&lt;/a&gt;. With my rather ancient Panasonic G1 camera, and a class 10 memory card, I found I could take process one slide (with three bracketed images) in around 6 seconds. Thus a full, 80-slide carousel can be processed, unattended, in about 8 minutes.&lt;/p&gt;</content><author><name></name></author><category term="update" /><category term="photography" /><category term="arduino" /><category term="microcontrollers" /><category term="esp8266" /><summary type="html">We have a large collection of 35mm photo slides. Some were taken by my father-in-law in the 1950s, 60s, 70s and 80s. Some were taken by me or my wife in the 80s and 90s.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://github.com/robjordan/projector-control/raw/master/images//overhead-sm.jpg" /><media:content medium="image" url="https://github.com/robjordan/projector-control/raw/master/images//overhead-sm.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Investigating the Tracking Accuracy of GPS devices</title><link href="https://techblog.bagu.uk/update/cycling/gps/python/2019/12/18/gps-accuracy.html" rel="alternate" type="text/html" title="Investigating the Tracking Accuracy of GPS devices" /><published>2019-12-18T23:00:00+00:00</published><updated>2019-12-18T23:00:00+00:00</updated><id>https://techblog.bagu.uk/update/cycling/gps/python/2019/12/18/gps-accuracy</id><content type="html" xml:base="https://techblog.bagu.uk/update/cycling/gps/python/2019/12/18/gps-accuracy.html">&lt;p&gt;I’m a cyclist, and I take part in long-distance events such as the 2016 Transcontinental Race (4,000km, unsupported, from Belgium to Turkey or Greece), Paris-Brest-Paris, and long Audax events up to 600km. At the end of such a long event, I want a GPS track to document my route. Sometimes it’s just for interest and posterity, but in some events, the GPS track is required to validate completion.&lt;/p&gt;

&lt;p&gt;As a result I’ve developed a mild obsession with designing and building a simple GPS tracker with very long battery life, that could be used alongside more functional navigation devices. Belt and braces if you like.&lt;/p&gt;

&lt;p&gt;The motivation for this piece of work was to discover whether there is any significant difference in the ability of GPS devices to acccurately track a planned route. The devices include popular dedicated GPS devices from Garmin and Lezyne, several Android phones, and two home-built GPS devices. I had some concerns about the accuracy of my home-built devices, and also one of my Android phones, and therefore wanted an objective way to evaluate their accuracy. To this end, I developed a Python script.&lt;/p&gt;

&lt;p&gt;The project is &lt;a href=&quot;https://robjordan.github.io/gps-accuracy/&quot;&gt;documented more fully here&lt;/a&gt;  and the findings are &lt;a href=&quot;https://robjordan.github.io/gps-accuracy/findings&quot;&gt;reported here&lt;/a&gt;.&lt;/p&gt;</content><author><name></name></author><category term="update" /><category term="cycling" /><category term="gps" /><category term="python" /><summary type="html">I’m a cyclist, and I take part in long-distance events such as the 2016 Transcontinental Race (4,000km, unsupported, from Belgium to Turkey or Greece), Paris-Brest-Paris, and long Audax events up to 600km. At the end of such a long event, I want a GPS track to document my route. Sometimes it’s just for interest and posterity, but in some events, the GPS track is required to validate completion.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://github.com/robjordan/gps-accuracy/raw/master/images/error-visualisation.png" /><media:content medium="image" url="https://github.com/robjordan/gps-accuracy/raw/master/images/error-visualisation.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>