Saturday, September 24th, 2016 at 1:51 pm - - Flightlogger

I’ve been flying around with my data logger for two years now and I have only this week developed a theory of how to process the temperature data. I might have got to it sooner had I known enough physics or bothered to test the actual response time of my Dallas temperature sensor, which was so abysmal I had to start doing something about it. To be fair, it did take me over a year to even shelter it from the sunlight.

Part 1: The responsiveness of the temperature sensor is 0.09

The apparatus involved running a vacuum cleaner against the sensor housing to create a fast airflow while drawing the air either from the room or down a tube containing a bag of ice.

vacuumapparatus

This was the graph it made, holding the intake near the ice and away from the ice for about 40seconds at a time
temptubeiceupdown1

The curves you see are exponential decay curves, as the temperature sensor cools to the air cold temperature, then warms to the room air temperature, quickly at first, and then slowly as it converges.

(more…)

Tuesday, September 13th, 2016 at 8:25 am - - Uncategorized

Sensible Code

It’s at the Sensible Code Company whose webpage URL is actually sensiblecode.io, even though it’s not in the Indian Ocean.

Company was formerly called Scraperwiki of scraperwiki.com

Nobody ever called my coding Sensible. Things have obviously got to change.

Sunday, September 4th, 2016 at 8:52 pm - - Canyon, Hang-glide

A bit of a bonus holiday slotted in here, with not much time or care to waste on the internet.

With three of us in the car, first we went down to a campsite near Perpignan and picked a 3.6/4 grade canyon of Llech, which was an absolute hit with all of us. There were jumps and toboggans galore, including one called the pistol that shot you up in the air 5m over a deep pool. We need to go back to that area and do the others.

llech2

Then I snuck in three days of hang-gliding off Ager with the bonus help of a retrieve driver. On day2 I tried to go behind the ridge, and it didn’t go well. I don’t know how I pulled it down into the field not of my choice without busting something more than the skin of my knee, but I got away with it.

It should have scared me more than it did. Instead my worst moments of terror were on the K5 rated via ferrata Cast Urquiza Olmo to the west of Ager by the lake.

On the third day up the hill I got an amazingly detailed briefing from some visiting British hang-glider named Al about where to go and what to expect (a huge zone of downwash behind the ridge which you can confidently get through if you start with 7000feet of altitude). It worked wonderfully on my third attempt.

tremp

Then I let myself down by nearly parking my glider on a rebar fence by curving round too wide and falling short of the field I was aiming for.
tremp2
But before that happened, the feeling came over me again where my wings became part of me for those few hours up in the sky. The joy was existential. A lot of the time I was circling with vultures. There are a lot of them about.

In the evening we picked up Becka from Lleida and then went to Torla-Ordesa to see the scenery. Unfortunately the morning buses were all full, and you’re not allowed to cycle up the tarmac road which carries the diesel buses because it’s a Spanish national park, so everything is banned even if it doesn’t make any sense. So we walked in until my foot-soles wore out on the way back and I had to catch the bus.

ordessa

Then, on the way back to France, we dropped in on the 3.2/4 rated Neste de Saux canyon, which wasn’t that great, but we were pleased because we proved we were still up to it.

Now we’re in a gite in Aspet with a bunch of cavers. Everyone is going out to run around the maze known as Felix Trombe, while I have carried on working on the ground window software, where I have implemented a real hack to create flat shading within a the GLSL GPU shading framework:

The trick is to note that the passage tube structures are made from quads which you can colour with 8 colours {-1,1,-2,2,-3,3,-4,4} such that no quad shares a colour with any of its neighbours (edge or corner otherwise). Choose the brightness factor on each quad (say it’s 0which goes:

float flatfac = max(0.0, max(max(abs(vflat4.x), abs(vflat4.y)), 
                         max(abs(vflat4.z), abs(vflat4.w))) - 510.0); 
gl_FragColor = mix(gl_FragColor, vec4(0.0, 0.0, 0.0, 1.0), flatfac); 

groundview3

(I’m now fed up with fighting with this crappy internet connection. It’s probably why I’m getting so much work done.)

Wednesday, August 24th, 2016 at 9:16 am - - Hang-glide

I spent the last three days at the washout known as the British Open Series 3 where one day out of five was flyable. This was yesterday from a hill called Camlo which is a “little flown hill, especially for hang gliders, as there is not a suitable bottom landing field”

Numpty here took off first with everyone watching and waiting because there were no clouds, and I got thrown about a bit. Luckily there were no other gliders in the air to dodge.

Then I came in and landed when things got full up like a zoo (orange glider on the 39th second of the vid).

Then I un-redeemed myself by sitting on takeoff for most of the next video until the launch window was about to close.

Most of the big boys got away during that time until I was one of just two gliders left in the air. I went in and landed just as the other one got away to a big cloud. Grumble.

Once you’ve tasted XC flying, nothing is ever good enough again.

Monday, August 15th, 2016 at 9:20 pm - - Cave

This one has been on our minds since we were caving novices in CUCC (back in 1987) when some of the big boys went to dive the sumps in Rowten Pot and had a bit of an epic. Twenty-nine years later Becka and I used the rigging put in for the Eurospeleo conference, took a small pony cylinder and checked it out.

It was lovely with masks, warm hood, bright LED lights, proper wetsuits (much better than what they had in the bad old days). We went back and forth a couple of times without the tank, and then exited through Valley Entrance — with some complaining at the short pitch from the streamway, which I climbed out and she whinged at, in spite of the fact that she goes bouldering most weeks, and I don’t because I hate it.

Saturday, August 13th, 2016 at 12:23 pm - - Machining

I’ve been getting some machining done, found out what worn out tools are like when you try to use them, and bought a whole load more.

We’ve also been doing some important work controlling servos directly from the Beagleboard through an H-bridge which will allow us to bypass the conventional servo motor drive setup that prevents all positional feedback information.

You can see the varying width modulations on the scope here:

prupwm

The code, compiled from C and deployed on the programmable realtime unit, varies the pulse width every cycle thus modulates the amplitude like a class D amplifier.

The music, in the second half of the above video, isn’t well picked up by the phone microphone, although it sounded surprisingly good in reality.

This is almost all the PRU code responsible for reading the channels (pairs of numbers that are wavelength and amplitude) and setting the PWM width per cycle.

#define NOTECHANNELS 12
struct Commondata {  unsigned int notes[NOTECHANNELS*2];  };
volatile near struct Commondata commondata __attribute__((cregister("PRU_DMEM_0_1", near), peripheral));

int main() 
{
  CT_ECAP.ECCTL2 = 0x02C0;
  CT_ECAP.CAP1 = 4096;    // PWM clock period
  CT_ECAP.ECCTL2 |= 0x0010;

  long channelcounts[NOTECHANNELS];
  for (int i = 0; i < NOTECHANNELS; i++) 
    	channelcounts[i] = 0;

  int mid50 = CT_ECAP.CAP1/2;
  int guardlo = mid50/8;   // clock range safe to change
  int maxamplitude = mid50 - guardlo;

  while(1){

    int waveamp = 0;
    for (i = 0; i < NOTECHANNELS; i++) {
      if ((pid.notes[i*2] == 0) || (pid.notes[i*2+1] == 0))
        continue;
      channelcounts[i] -= 16;  // granularity of steps per PWM cycle
      if (channelcounts[i] < 0)  // countdown crosses zero, set wave back up
        channelcounts[i] += pid.notes[i*2];

      // calculate sawtooth wave amplitude within period
      int amp = (pid.notes[i*2+1] * channelcounts[i]) / pid.notes[i*2] - pid.notes[i*2+1] / 2;
      waveamp += amp;   // sum up the amplitudes
    }

    // attenuate rather than truncate
    waveamp = waveamp*maxamplitude/(abs(waveamp) + maxamplitude);

    // wait till we are outside of the lower values of the clock
    while (CT_ECAP.TSCTR < guardlo)
      ;
    // wait till the clock has ticked over (but hasn't counted above 100)
    while (!(CT_ECAP.TSCTR < guardlo))
      ;

    // set the next duty cycle length (safe as value greater than guardlo)
    CT_ECAP.CAP2 = waveamp + mid50;
  }
}

It's about 50 times less code and effort than I thought it was going to be, mainly due to the use of the PWM subsystems, rather than attempting to generate timed PWM in realtime from the PRU code. This could only have been possible were I authoring the assembly code directly instead of using a compiler, because only that way can you count the cycles. This is a good move because, while it would have been fun to write carefully hand-coded division routines that used a fixed amount of processor cycles, it would have been a waste of my time. This way we're simply using the PRUs as co-processors that we assume are running fast enough to service those other subsystems in the chip.

The other subsystem we need to read are the quadrature encoders in order to drive the motors to a given position -- and read what position they have been dragged to by other forces (like human hands).

This is the current state of the project plan to get to a milling machine that responds to cutting forces with changes in toolpath trajectory (which requires the abolition of G-code).
projectplan

It's all about us keeping an eye on where we are trying to get to, picking the route to it that takes us across the known unknowns in a way that exposes us to maximum learning, and then cutting corners (eg by further bodging the circuits we already have).

I couldn't do this if I had to explain, repeat and clear every change of plan with a boss who was remote to the project.

On the other hand, if we did have a boss maybe we'd get there at the same rate on account of a lot fewer holidays per year.

Thursday, July 28th, 2016 at 11:25 am - - Flightlogger, Hang-glide

I don’t know which direction to go now, so I did a quick bit of video editing of a flight in Italy. I got plans to write this story up in more detail if I can get over the writers block that’s making it difficult even to complete my logbook.

I am losing control over direction. I should be running the machine tool on something, to keep it oiled. But then there is the GroundWindow app that I’m converting to work in Yorkshire with the cave data we have there. And also analyzing my flight logger data, which I seem to put hundreds of lines of code into a week, but continues to get nowhere. It’s strange.

The WebGL situation with GroundWindow is diving into a real rabbit hole. I have long known I needed to learn how to code GPUs, but could never find a way in. GPU technology, as I have observed, makes much of the software engineering I have done over the years entirely redundant.

Last week I spotted that the genius who made the early webgl water demo I’ve been hawking around to prove my point finally written a blogpost about one small aspect of the demo.

In it he referred to another blog about the GPU graphics pipeline (written in 13 parts), that I am trying to work through. I’m getting about 50% of it at most.

The question then comes down to whether there are any meaningful new machining algorithms that can be built based on this technology, using OpenCL or whatever, because that’s one of the few things I am uniquely qualified to research better than most — even if I can’t persuade someone with a budget to pay for it.

That’s just normal stupidity and mis-allocation of capital by those in control of developmental budgets.

For example, let’s take the massive public engineering program called Trident just authorized by Parliament this month to build four nuclear powered submarines to provide that essential round-the-clock service of threatening indiscriminate annihilation to targets unknown at a few minutes notice.

Now some MPs believe that investing in high technology is good merely for the sake of it, like Toby Perkins, who said in the debate:

The most depressing exchange was with representatives of the GMB union in Barrow [where the submarines are built], when… [the MP] for Islington South and Finsbury suggested that they might like to make wind turbines instead. They politely but firmly informed her that they were involved in designing and producing one of the most complex pieces of technology on the face of the earth, and that wind turbines had already been invented.

Setting aside the fact that nuclear submarines have already been invented too, the difference is that wind turbines produce electricity, which has value. Military nuclear submarines, on the other hand, have no return on investment. They are not put for up sale as part of the international arms market to foreign dictators (and you won’t get away with selling used ones to Canada again). The subs are not applicable to a modern resource war, like the invasion of Iraq where the plan was to win the wealth back by stealing their oil, because the victims don’t have navies. And there is no program for technology transfer, given that the nuclear power industry has been entirely outsourced to France on a strategic level

In fact all the engineering being budgeted for this program is wasted and will be subtracted from the engineering brains available nationally, just when we need them most and the availability of immigrant engineers is going to be choked off.

Nuclear war, in terms of the way the politicians handle it, is worse than low-grade Science Fiction. So at this time I picked up the 1964 Heinlein post-apocalyptic novel Farnham’s Freehold, where an all-out nuclear war blasted the Goldwater republican right-wing Americans (with the same mind-set as the author) two thousand years into the future from their private fall-out shelter. Here’s one of the characters in the future civilization looking back at the recorded history trying to interpret the events:

The war itself he didn’t find hard to believe. He had experienced only a worm’s-eye view of the first hours, but what the scrolls related matched the possibilities: a missile-and-bomb holocaust that escalated in its first minutes into ‘brilliant first strike’ and ‘massive retaliation’ and smeared cities from Peking to Chicago, Toronto to Smolensk; fire storms that had done ten times the damage the bombs did; nerve gas and other poisons that had picked up where the fire left off; plagues that were incubating when the shocked survivors where picking themselves up and beginning to hope–plagues that were going strong when the fallout was no longer deadly.

Yes, he could believe that. The bright boys had made it possible, and the dull boys they worked for had not only never managed to make the possibility unlikely but had never really believed it when the bright boys delivered what the dull boys ordered.

Not, he reminded himself, that he had believed in ‘Better red than dead’–or believe in it now. The aggression had been one-sided as hell–and he did not regret a megaton of the ‘massive retaliation’. [Chapter 14 p190]

Two things: Being ‘red’ is actually a temporary phenomenon (unlike radioactive and dead). Just ask the East Germans.

Secondly, the Cold War was stoked and prolonged by the dull boys in America, from their endless lies about the missile gap, to their intrusive U2 surveillance flights across Soviet airspace that utterly wrecked the four powers peace summit that had been scheduled to de-escalate the Cold War in 1960.

Ironically, those U2 flights were collecting intelligence that proved there was no missile gap whatsoever, yet the President and Presidential candidates continued to lie about Soviet capabilities to paint their political opponents as “weak on defense” in the forthcoming election.

It’s the old game of elites clinging to power by scaring the bejeezus out of the public, and then offering dangerous answers that don’t work, and successfully displacing consideration of the real problems at hand that require solutions they don’t want anything to do with.

The problem with our thinking is that future exists only in the human mind, and we are not carefully discriminating between the challenges ahead that are entirely within the various states of mind, such as the threat of war and the causes and consequences of property distribution and financial debt– and challenges out there in the physical world that are not going respond to any of our puny beliefs, like climate change and the polluting energy systems in the modern world.

In a sane world the Committee on Climate Change would get the £200billion engineering budget to start building the stuff we need now, like tidal barrages and CCS, and the nuclear warriors would instead sit in smoky committee rooms writing strategic reports on paper and getting sent off to international conferences to sign treaties– in other words do the sorts of things that would solve those problems completely.

That’s the way round it should be. But it’s like we think we’re looking through a window on the future, and instead it’s just a mirror reflecting the past behind us. And this would be fine, if it weren’t for the point of reality that time does not in fact run backwards.

Thursday, July 14th, 2016 at 7:57 am - - Cave

To distract myself on the underground camp of terror I stripped down my hang-glider logging device and took it down with a string of temperature sensors, barometer, humidity sensor and light cell and stuck it in a box in the corner with the string dallas temperature sensors extending out along the clothes line some ways from the tent.

tentdatalogger

The tent was a home made affair designed to be light and sleep four people. The fabric was slightly water resistant. There was immediately a condensation problem with cavers waking up in the morning with the sleeping bags soaking.

As a consequence people began leaving the front door to the tent wide open which meant that it was not a lot warmer inside than out.

analysispic2

Key: The red vertical lines are in increments of 5 hours, horizontal lines are increments of 1 deg C (when applicable). Cyan lines are the temperature measuring devices, some inside and some outside. Cave temperature was around 2.9degrees, while inside the tent it got to 5degrees in the early part of the night.

The four lumps of yellow on the lower line are from the light sensor and represent: (1) first arrival at camp and setting up the logger, (2) return to the camp after an afternoon of caving, (3) waking up in the morning, (4) returning back to the camp for packing up and leaving.

There is a sudden spike up in temperature when I dropped some of my spare clothes onto a sensor that I took off ready for the long climb out.

The upper red trace is the humidity x 0.1 and varies between 95% and 88%. The middle white trace is the temperature logged by the humidity sensor itself. The lower white line below the zero is the barometric reading, which spends its time around 88000millibars corresponding to about 1200m altitude.

Finally the yellow line is the dewpoint temperature, which varies between 2degrees and 4degrees.

Some condensation was briefly encountered when we first got into the tent slightly sweaty (and the yellow and white lines crossed over). For the first half of the night the dewpoint temperature differential was at about 1degree. Then someone woke in the middle of the night and pulled the tent door much wider open which dropped the humidity by 2% and the inside temperature by 0.75degrees, but the differential widened slightly.

I don’t know why the temperature varies so much during the night. Maybe it’s overall constant, but there are slight changes in convection currents that vary this. I should string the sensors all round the inside to see how it cross-varies.

It takes at least an hour for stability to resume when we leave the camp. Humidity rises as the temperature decreases.

Would the story have been different with a more porous tent fabric that could let out the water rather than one designed to be impermeable to liquids? If this was used we may have been able to raise the temperature inside the tent high enough to be clear of the dewpoint value, even though there is not much room below the 100% mark.

There should be a calculation of number of breathing and sweating bodies, the inside temperature and the and rate of exchange of air that provides for an optimal size and location of vent holes for the night. However, it’s difficult to find anywhere in the world that is this cold, humid and miserable for any experiments.

There are constant drafts around the cave which leave their mark in the rock formations. A set of barometers carefully synchronized, both outside and inside the cave, could produce an account of the total volume of the cave and its effective entrance surface area by modeling the flow of air molecules between these different reservoirs. This would tell you what percentage of the cave has been found. Experiments could be done on man-made tunnels whose dynamics are simple and volumes known. Higher frequency induced pressure changes might also be detected given that the bluefly is measuring at 50Hz.

Wednesday, July 13th, 2016 at 8:54 am - - Cave, Uncategorized

The weather turned caving, so I went underground two times. The first was to the shallow Balconyhohle (60m entrance pitch, then run around horizontal passages). There is a snow slope going up towards the surface that Andrew had a poke up.
balconsnow

Then someone showed me a demo of virtual reality using WebGL on a smartphone in a webpage, and I spent a couple of days coding the obvious idea I’d had years ago of putting all the cave data into a 3D model, using the GPS position and screen orientation to project it so that your phone acts like some kind of X-ray vision through the ground.

ssgroundview2

We used this to find a corresponding hole above the ground, which had a snow slope in it going down. It was a known hole in the database (identified by the metal tag drilled into the rock beside it) but with no record of exploration. Andrew looked at it the next day and couldn’t get down through. Later on he went underground again with a shovel and dug upwards as far as he could reach, but it still remained plugged.

Maybe if we rigged up some kind of a shelter over the hole to stop more snow falling into it, it could melt out in a few years. Something like some metal bars and planks of wood higher up to keep the new snow from getting out of reach of the sun so that the spring meltwater pours down and erodes away a bit of the snow plug each year.

Then, because I didn’t want to do much caving, I decided to go on the deep underground camping trip, which was far, far too deep with a lot of nasty scary rope rigging on the way down and up that kept me in a state of terror for hours on end. This is not as illogical as it sounds. Caving is horrible, and it takes many days for the memory of how horrible it is to wear off (like the memory of a very painful hang-over) before I am prepared to do it again. But once I’m down there I haven’t got a lot of choice.

Becka took her phone down to the camp (at -600m in Kraken chamber) and it took considerably better pictures than the fuzzy gopro I had.
camptent
There was a cross-over with the previous camping group, which is why there’s so many people in this image.

wookonkraken
This is one of them starting up the big loose pitch out of the chamber, which begins with a 60m freehang, and then lots of rebelays on a blank rock above a soily bouldery slope that you keep kicking stuff down from. As a consequence only one person can be on the rope at a time and it takes ages.

bigtunnel
The passages were enormous and we explored and surveyed about a kilometer of cave.

helicmud
There were some surprising formations, including this pickled gherkin sized helictite with a drip on the end that never quite fell from it, because the mud was untouched below it.

When we three finished our two days and one night stint, the next team came down and met us at the tent while we were stoking up on food for the horrendous climb out (lots of pathetic whimpering from me) and overdosing on our salt quota (according to the packet, the instant risotto meal for two I ate contained 11g of salt). Somehow on our ascent one of us pulled the rope up after us and accidentally hooked it over an isolated rock ledge well out of reach, which meant that this team were trapped underground until the full-expedition rescue was called out owing to them being overdue.

griefcloud
Luckily, Becka and me were miles away in Griefenburg by this time, with her on her new road bike, and me playing in the low clouds. The sad thing was my favourite pizza joint in town had closed since last summer, and the restaurant we went to instead was a bit crap.

Back at the expo the next day, Becka went straight up the hill while I attempted to get in another flight. It didn’t go too well, and I nearly crashed off the ramp, probably because I’d kept the nose too high without a headwind to guide with wing position. I barely got away with it and haven’t dared look at the photos yet. Not good memories to leave this place with.

I calmed my nerves for a couple of days by coding the groundwindow application and getting to know something about writing GLSL shader technology. It’s pretty stunning, and it makes the phone quite hot from all the computational power.

Saturday, June 25th, 2016 at 8:38 am - - Hang-glide 2 Comments »

I did it! I f***ing did! The mission to fly from the Loser to the Dachstein and back as mentioned in my Skywings article last year.

It was third day lucky. First day was a practice day, which somehow got me to Grimming and back in a four hour flight.

Second day I went for it because of a very good alptherm prediction, and fell out of the sky from 3000m to ground level in Bad Mitterndorf in a matter of minutes by attempting to punch through huge valleys of sink on my Sport2 due to stupidity, ignorance and nothing else. I misjudged the winds and there were no clouds to remind me where the thermals were — ie not in the valley.

On the third day alptherm gave an even crazier thermal forecast, the like of which I’ve never seen for this place.

alptherm2

I wonder what that german writing at the bottom says. Probably nothing important.*

I held back as two topless gliders took off at 12:30 and one of them went down. I knew 1:30pm was my magic time. The alptherm values are in UTC (add 2 hours for local time), so it really only starts cooking on at hour 1pm, before which it feels like there is a pause in activity.

And I went straight up to 3000m where the valleys and mountains are just minor details and threaded my way from cloud to cloud.

The sky gods sent the cunimbs onto massifs beyond all four corners of the flight and while the Dachstein gruppe remained miraculously clear.

Then it was off the the Grimming, arrived from the thermal hotspot to the east but unfortunately below its peak and was too intimidated to do any circling near this blasted mountain.
grimming

Luckily there were paragliders flying here and there to guide me and stop me from wussing out whenever it was feeling too extreme.
dachapproach
Was it a bad idea to go higher? There was a speck of a floppy paraglider up there in front of the cloud. Is it okay to fly over the 3000m peak of the Dachstein? There were two paragliders right down low over it.

How is it possible for something this amazing to continue? Just a set of simple wings on my back in this crazy place. This is an enactment Niven’s third law including commentary, which may predate the invention of hang-gliding:

3) Mother Nature doesn’t care if you’re having fun.
You will not be stopped! There are things you can’t do because you burn sugar with oxygen, or your bones aren’t strong enough, or you’re a mammal, or human. Funny chemicals may kill you slow or quick, or ruin your brain … or prolong your life. You can’t fly like an eagle, nor yet like Daedalus, but you can fly. You’re the only earthly life-form that can even begin to deal with jet lag. You can cheat. Nature doesn’t care, but don’t get caught.

I got there. There were big anvil clouds to the south darkening the whole horizon. This is the way I am going, across this sea of rock and snow back to Altaussee.
dachpoint

It was like a solid glide for 20 minutes, then a thermal off a corner buttress so I didn’t have to squeak through the Obertraun valley, then another 20 minute straight glide to the Trisslewand that had a huge cloud hat on that worked. There was nothing else between.

fromcampsite2
I decided to come down before anything went wrong and was actually able to phone the cavers sitting in base camp to tell them to look to the sky. They couldn’t hear me, so I texted them instead. Texting while flying is about as dumb as texting while driving, but the air was quite open at 2200m.

campdig
Becka cycled up and helped me carry down from my favourite landing field behind the campsite. I celebrated with a beer. It still gave me a headache. Back to earth. This is now the state of the campsite. The noise is awful.

* Translation: At the moment thunderstorm and precipitation symbols can’t be shown due to technical reasons.