Climate crisis at home

Before I moved to the UK, I heard of the rainy, foggy weather here. Typical English weather. But I have to say, that is not at all my experience. During the cycle commutes to and from work I got wet rarely and only at the a similar rate as in Germany. Although, these cycles are slightly biased, as I check the rain radar and have stayed half an hour longer to let rain pass, or left work a bit earlier to get home before the rain clouds arrived.

Deep cracks in the soil in the garden, less than 10 cm of the 30 cm ruler stick out. At least some grass is still green, and we hope for rain before all died back.
Deep cracks in the soil in the garden on 17 July 2022. Less than 10 cm of the 30 cm ruler stick out of the crack. At least some grass is still green, and we hope for rain before all dies back.

Now it has been a very long time since I last was out in the rain. And that’s not because I haven’t been out. While most of June was relatively cool with many days below 20°C, it didn’t rain much. So far July was very dry as well, at higher temperatures. The really hot days, however, are still ahead.

The dry weather is definitely visible now. On my recent cycles I saw so many brown meadows or village greens. And the cracks in the soil in our garden get bigger and bigger. I never have seen such deep cracks in soil with vegetation on it.

In future these droughts are likely to occur more often, the last IPCC report is very clear about this. And there are things we can do. Like planting some trees in the garden (and maybe on fields?). From my experience in Germany and the UK, people don’t like trees in the garden (all this work with the leaves, …) but in our garden there is a clear difference in the number and size of the cracks in the shade of the tree and in the grass area. And huge difference in grass colour. I hope we can convince our landlord, to get the approval for a few more trees.

The reason for the climate crisis now, is however the behaviour of the generations from the 1960 up to mine. An economy was build on cheap oil and gas, without paying the true costs (and now people complain, when they have to pay prices closer to the real costs). All the work that needs to go in moving cities away from the coast, to repair infrastructure after it was hit by a heat wave (or much heavier/frequent storms/floods), all the lives lost in heat waves and other severe weather. We are paying now for the living standard of our grandparents (And poor countries for the wealth of rich countries, the colonialism still continues). And a further problem is the inflexibility for change in these generations (don’t take away my petrol car or the 200 km/h on a German motorway, I want to drive everywhere, why do I need to see wind farms or solar parks in my neighbourhood, one day a week without meat? – How dare you!). Unfortunately, these are the people that make politics and decisions. And they (and me) will be dead when we reach the 4°C average warming by the end of the century (that is the scenario our current goals announced by the politics head to), and future generations will have to deal with that. Parents usually say they love their children, but somehow their actions feel different.

So what can I do:

  • do I need to use a car, or can I spent a few minutes longer on the public transport (less stress) or use an (electric) bicycle (saves the gym visit)?
  • can I eat more plant based products? (lentil burger/bolognese, oat milk, bean based spread instead of salami)
  • do I need to take the plane, or can I spent a bit longer, but use the train? (challenging)

Racism in the middle of society

Actually I wanted to meet a friend tonight who has his job at the university in Central Europe and wanted to go to a friends wedding at the weekend and wanted to see some other friends before then. But as the meetup didn’t work, I can write a little bit about racism. Racism is the reason why he cannot enter the UK. He has the wrong passport and therefore does not have the privileges that one has with a Western European, North American, and probably also Australian, New Zealand, or Japanese passport: You can get into almost any other country without a visa. He only got as far as the check-in counter at the airport, where he was told that he was not allowed to go to England and would need a visa to enter the country. It’s just not on the British Border Control website, so he didn’t apply for one. And for many years he could easily travel without a visa.

At least the airline was kind enough to put him on a later flight so that he could make a few phone calls to the British Embassy and his nationality’s embassies in the capital and in London, as well as British border control. And there seems to be this rule with the visas, but not officially, because the British are too cowardly to cancel the mutual agreement on visa free entry, and instead have only an internal rule for their own border protection. After seven hours of phone calls, it was clear that the trip would not work out.

And of course nobody is responsible either, there is nothing official, so that he will still have to pay his own expenses.

And all because he was born in a country on the African continent. And that’s the racism of the white western world. This is not only a British problem, also in France, Denmark, Germany, Spain, Austria, Sweden, other European countries we treat certain groups of people as second class citizens. Every day.

Programming improvements

A few things of the many things I learned last week in Python.

My draft when a new optional dictionary was added to the method:

def method(self, arg1, options={}):

However, a better version was suggested to me:

def method(self, arg1, options=None):
options = (options or {})

And the other big learning through code review was, when constructing a string from a dictionary. My complicated code:

for key1, value1 in options.items():
    if key1 == "searchString":
        for key, value in value1.items():
            result_string = f"someString.{key}.{value}"

The suggested version is so much neater:

for key, value in options.get("searchString", {}).items():
    result_string += f"someString.{key}.{value}"

While I still feel, it would have been nice, if I’d have learned these little things before (which comes from the thought I would be liked more, and from the expectation of perfectionism by me and because of that I also think others expect perfectionism from me – which is just not achievable), it is nice to pick new things up now. While I thought in my 20s that in many areas of life I can stop learning at some point, in the last years I learned that learning will never end in any part of life, and that is good! Because if I stop being willing to learn, I will go backwards.

Moon halo (22° halo)

The moons 22° halo, as seen in a March night. This photo was taken by Ronny Errmann in his garden.
The moons 22° halo, as seen in a March night.

Recently I was made aware about an impressive moon halo, also know as moon dog. I have seen light versions of it before, but not as clear.

It happens when a layer of ice crystals forms high in the atmosphere. Each of the crystals then acts as a prism, refracting the light into a certain way. It’s a similar (and yet not) effect like when a rainbow forms. And actually a moon halo also has a colour gradient, the inner bit is red, the outer bit is blue. However, in my image that is not visible, a longer exposure time would have been good. Next time 🙂

Instead, what I did was recording a time lapse for 30 minutes:

30 Minute time lapse of a moon halo

While some clouds move very quickly, the only apparent change of the halo is caused by earth’s rotation (the moon and halo moving along the image). This also made clear, what are stars and what are optical effects/defects from the lens. Right to the moon are Castor and Pollux of constellation Gemini, and below the moon, next to the tree, is Procyon. All stars fainter than magnitude 2 are invisible due to the scattered moon light (which itself is just reflected sun light).

More information can be found on the Wikipedia article about moon halos:

Two and a half years earlier a got a glimpse of a sun halo:

Shitty sun halo (see small area below)
Shitty sun halo (see small area below)
Sun halo, seen from a moving train, which is just not ideal
Sun halo, seen from a moving train, which is just not ideal

Nicer examples of sun halos can be found on Wikipedia:

Create a time lapse from individual images:

Carbon responsible travel

After the pandemic situation became better again, I started looking into travelling from the UK to Germany. Preferably by train, as flying is just not good in a climate crisis. And I travelled by train before several times a year. With the German DB “Super Sparpreis EU” one could book a ticket from London St Pancras to, lets say Dresden or return. Depending on how busy the trains were, I spent something between 70€ and 120€ per direction, maybe a bit more during Christmas. That was 2018.

When I checked this year to travel a month in advance, no public holidays, Prices ware around £75 for the leg London to Brussels and then another £60 to £80 from Brussels to Dresden. I don’t know if that is expensive, it’s definitely over 50% more expensive than 4 years ago.

And then I made the mistake and checked flights. It was shocking to see that they started at £7 for each way. And that was only 2.5 weeks in advance. Luggage adds another £21, and I would need another 17€ for the local train to my final destination. But that is still cheaper than any of the two parts of the train trip for the whole distance.

I understand that these plane ticket prices are not the real costs, the airline will make the money with the people who by tickets at a later stage (although, even for the flight tomorrow the price is still only £18, so probably they need to subsidise from other flights). And yet, I find it astonishing that the climate damaging travel is still cheaper than the more responsible travel.

Experiment: Melting a dyed ice cube in salt water and fresh water – which one melts first?

In a podcast I listened to yesterday the experiment was discussed, using normal ice cubes. And they suggested to repeat the experiment with dyed ice cubes or dyed water. Yesterday I prepared the ice cubes and today did the experiment.

Some words about the preparation: Dissolving salt creates heat, hence I allowed for time so that the water could reach room temperature again. Therefore, the interesting bit only starts after a minute into the time lapse, or 20 minutes in real time.

The ice cubes start melting immediately, both distribute a bit of blue water to their glasses. However, the difference becomes visible very quickly: In the fresh water a constant stream of blue water flows to the bottom of the glass. In the salt water glass the blue melt water from the ice cube creates a layer on the top of the glass. The ice cube swims in this cold water, is isolated from the warm water, and hence survives about twice as long.

The reason of the different behaviour is related to density. A cold liquid has a higher density than a warm liquid, and hence sinks to the bottom (in the same way that a piece of metal has a higher density than water, or humans have a higher density than air). However, dissolving salt in water increases the density of that water, and the saltwater has a higher density than the cold water from the ice cube.

When the experiment was described, I guessed wrong. Using salt to melt ice on streets, I thought the ice cube in the salt water will melt quicker, due to a chemical reactions. However, as the salt is already dissolved, no heat can come from destroying the crystal structure (and that would be a physical reaction and not a chemical reaction anyway).

I didn’t want to show an hour long video on youtube, hence speed up certain parts of the video. For this I used the free ffmpeg tool on a Ubuntu 20 laptop. Running the code below took about 10 Minutes on my Laptop:

ffmpeg -i ../orig.mp4 -ss 00:00:00 -to 00:00:05 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.10*PTS" output_01.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:00:05 -to 00:00:27 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.50*PTS" output_02.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:00:27 -to 00:00:54 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.10*PTS" output_03.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:00:54 -to 00:01:12 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.50*PTS" output_04.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:01:12 -to 00:03:05 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.10*PTS" output_05.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:03:05 -to 00:03:12 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.33*PTS" output_06.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:03:12 -to 00:03:20 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.10*PTS" output_07.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:03:20 -to 00:19:50 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.01*PTS" output_08.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:19:50 -to 00:20:10 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.10*PTS" output_09.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:20:10 -to 00:20:40 -c copy output_80.mp4
ffmpeg -i ../orig.mp4 -ss 00:20:40 -to 00:21:00 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.15*PTS" output_81.mp4 && rm temp.mp4
ffmpeg -i ../orig.mp4 -ss 00:21:00 -to 00:27:11 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.05*PTS" output_82.mp4 && rm temp.mp4
ffmpeg -i ../orig_02.mp4 -ss 00:00:00 -to 00:07:20 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.05*PTS" output_83.mp4 && rm temp.mp4
ffmpeg -i ../orig_02.mp4 -ss 00:07:20 -to 00:07:27 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.15*PTS" output_84.mp4 && rm temp.mp4
ffmpeg -i ../orig_02.mp4 -ss 00:07:27 -to 00:07:42 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.50*PTS" output_85.mp4 && rm temp.mp4
ffmpeg -i ../orig_02.mp4 -ss 00:07:42 -to 00:07:50 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.15*PTS" output_86.mp4 && rm temp.mp4
ffmpeg -i ../orig_02.mp4 -ss 00:07:50 -to 00:27:11 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.05*PTS" output_87.mp4 && rm temp.mp4
ffmpeg -i ../orig_03.mp4 -ss 00:00:00 -to 00:05:11 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.05*PTS" output_88.mp4 && rm temp.mp4
ffmpeg -i ../orig_03.mp4 -ss 00:05:11 -to 00:05:33 -c copy temp.mp4 && ffmpeg -i temp.mp4 -r 16 -filter:v "setpts=0.20*PTS" output_89.mp4 && rm temp.mp4

for f in $(ls output*.mp4); do
ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.ts
CONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")
ffmpeg -i "concat:$CONCAT" -c copy -bsf:a aac_adtstoasc VID_20220224_094623206.mp4
rm *.ts

Don’t look up (my personal thoughts)

(by Ronny Errmann)

I finally watched the movie “Don’t look up”. First thought I had at the beginning was how nice that the research environment was shown quite realistic. Not in everything (calculations on a white board instead of using computer programs and knowing it will hit earth with just few hours of position data), but hey, it’s a movie. And second thought was, why is everyone reacting so crazy to the threat.

I really could connect with the feelings of the main characters to get the public and politics react to the threat. In that sense it was quite a stressful movie for me, getting too much involved.

In terms of the climate crisis I feel the same situation as shown in the movie is happening in our real lifes and I wonder if scientists from that field feel like that for years or decades. The impact of humans on the climate is know for over 70 years, and we see the rising temperatures clearly for 40 years. And yet, only slow action is being taken and the things decided are not enough for a 1.5 C limit. If we, the world, keep creating the same amount of CO2, that we created in each of the previous years, then in 8 years will have used up all the budget to keep within the global average of 1.5 C temperature increase. If we use produce more, than we will raise the temperature more than 1.5 C, which will create much more severe effects. And I can’t see any chance that the global emissions will decrease, on the contrary, every year we produce more CO2 than the year before.


Commands to create (time lapse) videos from individual frames

12 Feb 2022 – Ronny Errmann

Some of the time lapses can be found on youtube: Youtube Channel Ronny Errmann, for example an 8 hour time lapse of the night sky over La Palma. If you modify your images before creating a video, creating a working directory and copying the images into that will safe you from accidentally destroying the originals.

Create a Video from images:

mencoder mf://*.jpg -mf fps=24:type=jpg -noskip -vf scale=1156:868 -of lavf -lavfopts format=mp4 -ovc x264 -sws 9 -x264encopts nocabac:level_idc=30:bframes=0:bitrate=16384:threads=auto:turbo=1:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh -o output.mp4

The following settings should be adapted to your images:

  • fps=24 : if the framerate of the pictures is not high enough a lower number might be better
  • scale=1156:868 : The pictures of my camera are 3 times bigger along each dimension than the values here, be sure to downsize your images without stretching one axis
  • bitrate=16384 : That bitrate gives reasonable results for my time lapses, however, you might consider larger values (better quality) or smaller values (less storage space needed)

Modify images before creating a video from them:

mogrify -resize 1156x868 IMG_20220212*.jpg

Rotate the images:

mogrify -rotate 90 -background black *.jpg

Crop the images:

To remove useless bits from the image, the values are the new size + start positions

mogrify -crop 3515x2541+142+199 *.jpg

Add exif information to the image, e.g. the time:

Sometimes it’s nice to see the real time running in the time lapse, for this the exif information can be used. In the example the modified images will be copied into “prefix_<original name>”

for img in *jpg; do convert "$img" -gravity SouthEast -pointsize 70 -fill white -annotate +30+30  %[exif:DateTimeOriginal] "prefix_""$img"; done

The following options can be changed:

  • gravity : this gives the corner in which the text should appear. Use geography, e.g. Northwest, South
  • pointsize : size of the text, probably worth to test on a subset of images first (copy images into a subfolder)
  • fill : text colour
  • annotate : distance from the chosen corner

Increase the brightness of the images:

For example, when taking night images and the video is too dark.

mogrify -modulate 200 *.jpg

Video modification for time lapse videos

6 Feb 2022 – Ronny Errmann – last modified on 31 March 2022

Some useful bits which helped me to make the time lapse videos I recorded ready to be published on youtube: Youtube Channel Ronny Errmann

Rotate an mp4 video:

For when the phone was upside down during the recording.

ffmpeg -i input.mp4 -c copy -metadata:s:v rotate="180" output.mp4

Crop an mp4 video:

When personal information is in an area of the video.

1. Get the video resolution:

ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4

2. Modify the video:

ffmpeg -i input.mp4 -filter:v "crop=1280:600:0:120" output.mp4

Cut an mp4 video:

To keep 00:00:00 to 00:01:22, because afterwards only night was recorded as work had to be finished first.

ffmpeg -i input.mp4 -ss 00:00:00 -to 00:01:22 -c copy output.mp4

Merge/concatenate mp4 videos:

When you notice at the end of a time lapse that the sky is still amazing and you recorded a second one. Several lines of shell script, run with sh.

for f in $(ls input*.mp4); do
ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.ts
CONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")
ffmpeg -i "concat:$CONCAT" -c copy -bsf:a aac_adtstoasc output.mp4
rm *.ts

Change the speed of mp4 videos:

You took a time lapse, but the viewers are bored, because changes are too small. Time to speed the video up.

ffmpeg -i input.mp4 -r 16 -filter:v "setpts=0.50*PTS" output.mp4

0.5*PTS mean twice the speed, 0.1*PTS would mean ten times the speed, and 2*PTS would mean half the speed.

How to code, an additional note

(by Ronny Errmann)

My last post could be read quite negatively, in the way that I didn’t make any progress. So I wanted to add some notes to counteract that feeling. When I looked into new methods actively, because I had a problem, I learned a lot. And I easily remember a few bits from the last years:

  • Replacing loops and conditions with numpy operations on the whole array or part of the array. This made execution so much faster. For example using
array[array > 0] = numpy.average(another_array, axis=1)
  • Making my program compatible to Windows. It’s just a few things to keep Python code compatible to different operating systems.
  • Adding multiprocessing to the program.

All of these helped me to learn new concepts and improve.