Lifehack: Reducing the Temperature in your Rabbit Warren

More than 30° Celcius (ie. more than 86° Fahrenheit) is quite hot if you are a rabbit. As we keep some handtame rabbits in an outdoor rabbit warren, we thought of how it could be possible to reduce the temperature in an open area. This is a problem probably not being solved with electronics or software at all unless you plan to include liquid nitrogen in your solution.

Very Hot Rabbit Warren

Eventually, we found this awesome cooling set from Gardena (Amazon affiliate link). I was pointed to it last year by Clemens as he tweeted about it in his rabbit warren.

Gardena Cooling System

Originally designed for the convenience of human beings, it turns out, this is quite relaxing for rabbits as well. The system creates a very fine mist cooling down the sprinkled are several degrees.

Relaxed and Cooled Down Rabbits

Being an astronaut?

Check out https://www.astronaut-test.com/ if you want to know if you would be an astronaut candidate. Being fascinated by space, I think I missed the right direction at one point. I only do fit 50% into the required scheme.

What’s the test about?

Astronaut Aptitude Test asks a series of lifestyle and knowledge questions based on official NASA Astronaut Candidate requirements to determine how suited you are to space. The quiz also includes visual tests based on psychological studies to analyse your spatial visualisation, mechanical comprehension and abstract reasoning – the essential qualities that NASA first tested in 1959.

So what I am missing? The results of the questionnaire are broken down on the website:

The good point: I would fit into space based on my personality. I did not do well in the physics and astronomy questions, therefore I really really failed in knowledge and education. Actually, I did not know in which whatever “sphere” satellites do fly.

Said that I think I have to read some astronomy books and I will come to the test back at a later point. Give it a try. It might surprise you as well.

Link: https://www.astronaut-test.com

Just another ToDo App

I assume I have written a dozen of ToDo apps myself and I have tried out at least twice the number of apps, however, I never used one of these apps more than a few days or weeks. Mostly because the apps had some major lack of functionality, such as mailing todos, syncing over various platforms and so on.

Eventually, I ended up with Todoist. I was not aware of this tool, but I am highly pleased with it since I used it.

It comes with Browser integration (i.e. I can use it on my Macbook as well as on my Windows PC), it comes with an easy to use iOS app and it has some quite nice features:

Gamification

Works always. It is called Karma in the app. I gained a lot. I plan to gain more. This is ridiculous but it works. If you don’t finish tasks you lose Karma, if you fulfill your tasks, you gain. If you accomplish repeating tasks your Karma raises. It works for me – and it’s simple without putting pressure on you.

Easy Syntax

What really works well for me ist the super simple syntax of creating tasks.

Wash the car tomorrow#home

will schedule the task for tomorrow (other things like next week works as well) and sort the task into your project home. It really saves you a lot of clicks in the app.

Mailing

Each project can have its own mail recipient. I simply keep them in my address book and send emails to <ToDo Home> . That’s much better than keeping the todos in your inbox as I did until recently.

Create todo from Webpages

This is one of the killer features for me. I often end up reading a webpage thinking, I have to follow up on this topic. Eventually, I send myself an email. You get the idea where it usually ends.

I guess I haven’t figured out all the features, yet. However, the features mentioned above I just used by exploring the apps without reading any documentation. Therefore the tool is a big yes in my opinion. I hope they keep it up this way, as I have seen many great apps suddenly being torn down by feature creep.

Link: https://todoist.com/

Animated Icons

As you might know, I subscribed The Noun Project as my ultimate source for icons. I use them for presentations, lectures and sometimes web sites. It’s a lifesaver for me.

Recently I received a newsletter which pointed me to a tutorial on how to create animated icons. It’s quite a good tutorial and if you are in the need to create animated icons this might be something for you. As I am not very gifted with these tools, I just leave it here in case I need it at a point later in time.

Link: https://blog.thenounproject.com/how-to-create-animated-gif-with-icons-a9eb757948b3

The differences in Teaching to Code

Some weeks ago I started to live code using my Twitch project. I use this mainly to spend a few hours a week to get (again) familiar with .NET and C#. I stopped using it (in a professional way) when .NET was available as version 3.5. Indeed, my very last project was a migration project from 3.5 to 4.0.

While I was in the role of a dev/Sr. dev I used to code mostly in pair programming. Great experience. Not for everyone. I loved it. I learned a lot. Every time you stuck, you pair helped. EIther you thought and explained and he/she coded or the other way around. A major element of the secret is that you learn most when you explain.

Live Coding

The same seems to be true for live coding. Live coding is some kind of horror if you do new things. And it probably is utterly boring for all others seeing you looking up documentation and examples. However, there is quite a lot you learn while you are explaining – or at least while you try to explain. Probably, because you are trying to explain, i.e. you try to understand.

Said that I tried to implement an exercise from a recent programming course. I wanted to see, what the students face.

Problem 1: No documentation of the code

Part of the exercise was: Try to understand what the code does. In other words: reverse engineer. That’s some discipline not everybody is good in. Others are way better than me. I do need a lot of silence and time to understand what the intention of the author was when writing the code. Doing this live is quite q lot of stress. Remember, you try to talk at the same time. Anyway, I think it is a very bad example to give to students. I should try to avoid this in the future.

Problem 2: The exercise was about how to do things not what to achieve

I never thought of this before about exercises. It was about implementing a Delegate and an Interface, an Indexer and o on. Implement a subclass and use the base constructor the same way. No words about what to achieve. I think it took me two hours just to get half of the exercise done. Would I have learned how the concepts work? Have I understood the new features of the language? No way.

Problem 3: The artifacts

I really think about what I have created. Some code. No added value. Meh.

The Post-Show: How things worked much better

Afterward, there was something I had on my todo list. As we started out podcast recently, I want to generate episode covers automatically. I am a big fan of letting things being done by the robotic overlord.

Difference 1: How I started

I thought about the requirements:

  • needs to run on Windows and macOS
  • needs to be called from the command line to be used in scripts
  • needs to put some text on an existing image
  • needs to be accomplished before 1 a.m.

Difference 2: How I proceeded

I did some research (aka Googling). I was looking for some articles about how to deal with image processing in .NET. I found an article from Scott. I had a look at the different frameworks mentioned by him and decided to check out the capabilities of ImageSharp. I checked out the examples and I wrote the piece of code.

Difference 3: What’s different

I had to figure out how to do what I wanted to accomplish. I learned about at least three existing frameworks. I figured out how to use one of these frameworks. I had to figure out how to use NuGet to get the packages. I had to fiddle with some command line magic in Visual Studio projects. I learned about one new öanguage feature.

Conclusion

I have to go on with live coding because I want to become much better in it. It is quite challenging, especially if you haven’t written code for years. And it forces me to face challenges. So if you want to see me fail writing code, feel free to join the live stream in the future.

The more important fact is, that I have to re-think how we teach programming. Yes, you need to explain concepts. But one should not enforce them to be used. If doing it feels like pushing a developer in some direction. Do it with delegates and interfaces and so on. There are probably 100 different ways to accomplish your goal. Let them try out some of these ways. The might end up with the ideal solution – or not. If there is one at all.

The Open Source Issue

After working several years for Microsoft (before MSFT started to open source code), I already used quite a lot of open-source software. I run my own Linux server in the cloud internet and used a whole bunch of free and open-source software. Actually, I also open-sourced quite a bit of my code as well as contributed to various open-source projects, such as the openHAB project.

I have quite a fan of Ubuntu and nevertheless how much I would like to, I probably never will find time to contribute in a meaningful manner until I retire. Also, I have an endless list of ideas of things, I would like to write, code and probably open-source, I eventually will never get along with that list. Even worse, there is a whole list of abandoned projects I would like to claim and push forwards, but again this will never happen.

Quite some time ago, I had a friend who wrote open source. At one day, he said farewell to the community with the word “Sorry guys, however, I now have to work for real money.”, which actually point out the issue quite well.

I haven’t thought about this friend for quite a while until I meanwhile started using my very own OwnCloud server. I started browsing the addons and apps and was faced a quite frustrating situation.

For one of the plugins, I was looking for I found the following announcement

Due to the massive testing effort and the problem of nearly no donations I’m going to stop the further development. If anyone wants to step in, feel free

For another plugin in Firefox, I heavily used on for years I got the notification the project will not be continued in the future.

I am absolutely aware that maintaining OSS need quite a lot of effort and dedication. Especially if the OSS is created and maintained by private persons. Therefore, I was very disappointed by one comment recently made at on one of my projects:

..but in our org we cannot just sit and wait until someone fixes the issue.

You could still bay the author to fix the issue. This would instantly address the point made by my former colleague mentioned above. And here we go, I realized that sometimes companies doe use OSS as it does not cost money, but also the are not willing to pay to get things fixed or to fix these issues and contribute to the project due to company policies. Been there. Seen it.

I hope there will be a mind shift towards OSS and fewer comments as the one above.

Change what Terminal to open in Windows Terminal (Preview)

While using Windows terminal (Preview) for quite some time, I always opened up the Terminal and then opened a second Tab with my WLS instance. Doing this multiple times a day, this ends up in many many unnecessary clicks.

To change the default behaviour open the Settings (can be found at the right drop-down arrow of the Terminal tabs).

This will open up the settings JSON file. Look up for the defaultProfile entry and search for the corresponding GUID (the string behind this setting) in your document.

Change the GUID in the defaultProfile to the one identifying your prefered terminal.

Save it, close the file and save a lot of clicks.

Visual Studio Code – Auto Time Stamp

While organizing most of my information in Markdown files meanwhile, I like to have some metadata in each file to see e.g. when files have been created and/or updated.

The Auto Time Stamp extension is a small extension that doe exactly this for you. By adding Created: and/or Last modified: the extension will update these fields automatically when the file is saved.

// Created: 2018/02/04 12:24:41
// Last modified: 2018/02/09 11:41:41

This extension is going into my must-have toolbox for VS Code.

Link: (GitHub): https://github.com/lpubsppop01/vscode-auto-timestamp
Link (VS Marketplace): https://marketplace.visualstudio.com/items?itemName=lpubsppop01.vscode-auto-timestamp

Raspberry Pi – Setting a static IPv4 address

It run me mad, as I tried to change the IP address of my Raspberry to a static one. I changed literally everything in  /etc/network/interfaces and reloaded, restarted and reboot the device over and over.

iface eth0 inet static
address 192.168.0.207
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.

As the above configuration did not help a lot, I figured out that based on the Raspberry model, you need to change settings on various places.

First run

cat /proc/cpuinfo

to determine you model. While getting something like

pi@raspberrypi:~ $ cat /proc/cpuinfo
processor    : 0
model name    : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS    : 2.00
Features    : half thumb fastmult vfp edsp java tls
CPU implementer    : 0x41
CPU architecture: 7
CPU variant    : 0x0
CPU part    : 0xb76
CPU revision    : 7

Hardware    : BCM2708
Revision    : 0004
Serial        : 000000004715b608

you need to use the hardware revision and

Model and Pi Revision 256MB Hardware Revision Code from cpuinfo
Model B Revision 1.0 256MB 0002
Model B Revision 1.0 + ECN0001 (no fuses, D14 removed) 256MB 0003
Model B Revision 2.0
Mounting holes
256MB 0004
0005
0006
Model A
Mounting holes
256MB 0007
0008
0009
Model B Revision 2.0
Mounting holes
512MB 000d
000e
000f
Model B+ 512MB 0010
Compute Module 512MB 0011
Model A+ 256MB 0012
Pi 2 Model B 1GB a01041 (Sony, UK)
a21041 (Embest, China)
PiZero 512MB 900092

Based on this information you need

Model a

Static IP addresses in /etc/network/interfaces is not the “prefered” way,as it is an old way and DHCPCD5 is installed.

Model b

Static IP addresses are configured in the /etc/dhcpcd.conf and it is  required that /etc/network/interfaces is set to manually.

iface eth0 inet manual

That’s all…