2010s in Review: From Eating Raspberries, to Working out in the Alps and Hacking on Amazing Software
This decade has been truly amazing from a technological point of view. Bridging the gap between sports and technology by introducing e-bikes, drones and fitness gadgets. Pushing the maker community forward with the introduction of the Raspberry Pi. Changing how we work with software thanks to containers and other extremely clever innovations. Let’s have a look at some of these achievements.
– Cover Image: Electric MTBs in the Isartal (Tirol/Austria, Photo by Julian Hochgesang/Unsplash)
At this time very few people would disagree with the statement that batteries will have a significant part in the future of mobility. A major part of the current vision discussions are electric cars and more recently scooters. While scooters in my opinion could just be next the big thing pushed by venture capitalists, electric cars have already had an effect on our society. It is likely that they will become more common and might even replace their gasoline counter-parts in the decades to come. It will be interesting to see more affordable cars like the VW ID series pushing forward the industry as a whole.
That said especially here in central Europe, one form of mobility has already been changed significantly by powerful lithium based batteries. MTBs like the ones in the cover image have made it possible to use bicycles as a way to get to work, even if they work-place is a few kilometres further away. They have made the Alps and other mountainous regions more accessible for less trained people and older generations. Riding through the alps with my own (although non-electric) mountain-bike, I noticed the increase of older generations doing sports and enjoying nature. Altogether I think electric bicycles are one of those inventions which have had a positive influence on our quality of life. Even the environment benefits from people using their bicycles instead of the car whenever possible.
Admittedly we often think that the maker community is something rather new, which does not do all past efforts justice. I remember seeing micro-controllers sold by the likes of Conrad (an electronics store), which one could program using some variant of BASIC. Later a few Italian engineers have created the amazing Arduino platform. But in my opinion the real push for this community came from a project released in 2012 in the UK. The Raspberry Pi! A single board computer running a full linux distribution for only ~35€. Good documentation, a consistent software experience and an almost indefinite amount of extensions have contributed the rest of what was necessary to become successful. To this day more than 30 million units have been sold and are used in a wide range of different projects. Controlling a 3d printer, building a media center or a simple NAS are just a few of its applications.
Especially the newest version of the Raspberry Pi has been a huge upgrade. It is available with up to 4GiB of memory (instead of the 1GiB) and the 1GBit/s-Ethernet is not limited by an internal USB2.0 controller anymore. It also offers two USB 3.0 ports. (Tip: you can get the 2GiB version sometimes for 39chf in Switzerland). Additionally there is now very good support by the likes of Ubuntu and Fedora for the Raspberry Pi. They even provide arm64 variants for those boards. Ubuntu 19.10 is even already available for the RPI 4b, whereas Fedora will likely follow some time in the future as well. I’ve been running the arm64 version of Fedora on the RPI 3b for some time and was very satisfied. My RPI 4b is now running Ubuntu 19.10 arm64 instead. The only thing I had to do was upgrade the USB firmware. It not only adds power management to the usb controller, but also fixes a few other issues. (Note: Stay tuned for another blog post about my home “automation” project, based on the RPI 4b. I promise it won’t take me another seven years to write yet another blog post ;) ).
Competition on the CPU Market
Starting with the first generation of the the Zen architecture AMD has changed the market for PC hardware. Finally higher core counts are available on mainstream platforms. The improved Zen2 architecture has built upon this and has improved in almost all areas: power efficiency, core count, IPC and clock rate. The Ryzen 7 3700X / 9 3900X and Ryzen 9 3950X chips have all received recommendations from major tech sites. Not only this, but with Threadripper 3000 there is a 32-core (and if rumours are right soon a 64-core) chip for the high-end desktop available. The lower prizes are covered by the still very good previous generation chips (My own NAS is powered by a Ryzen 3 2200G).
This year we will also see AMD processors based on Zen 2 paired with an iGPU, which should be available for desktop as well as notebooks. The Zen/Zen+ based chips have already been built into some interesting devices: Thinkpad T495s and Surface Laptop 3. Although Intel still has some performace/power efficiency advantages in this space, with Zen 2 this could change.
Last but not least Zen 3 should also be available this year in some products and will offer further improvements compared to Zen 2.
Since writing software using C++ is what I do for a living, this of course had a significant effect on my work. In the beginning of this decade the first version of what we call Modern C++ had been released. Nowadays most developers will be familiar with those improvements but lambda expressions, move semantics, built-in multi-threading, smart pointers and similar have changed the way C++ software is written. Newer releases have iterated upon these improvements and have further expanded the functionality. Recently the decision has been made to include concepts, modules and stack-less co-routines into the next release (c++20).
Python has become an extremely versatile language which is today used not only for scripting, but also for machine learning, research, web development and others. Continuous releases have also made sure that the feature set is continuously expanded. One I personally find very useful are type hints as this significantly improves code completion in IDEs.
During this decade some new interesting languages have been introduced. Android and iOS development experiences have become better thanks to Kotlin, Swift and Dart. Nevertheless I think that another language is more exciting: Rust. Developed by Mozilla for the use in their browser engine. It is focused on memory and thread safety and should avoid many pitfalls compared to C/C++, while still being suitable for system programming. Some projects already using Rust are Servo (Mozillas experimental browser engine) and Redox (a micro kernel).
Programming languages also require an ecosystem in which they are used. This includes drivers, compilers and frameworks. One of the compiler frameworks used in many projects is LLVM and its C/C++ frontend clang. During the last decade LLVM/clang has received many improvements. It now reaches performance equivalence with gcc in many scenarios, compiles the linux kernel and is used in several other projects due to its flexible architecture. The newly introduced Vulkan graphics and compute standard uses LLVM in many of its implementations and tools. MoltenVK and Google’s shaderc are just some of the examples.
Most people are probably tired of reading about security issues, data leaks and zero-level exploits. There have been many of those in in recent years. Remember “heartbleed”? That said there have been positive news about cryptography and security as well. One amazing new technology is the wireguard vpn protocol. To sum it up briefly: It offers high performance, good cryptography, roaming and is hidden from port scans. Fortunately it has also finally been merged into the net-next branch of the linux kernel, which should ensure that it will land in Linux 5.6.
Speaking of the linux kernel, Microsoft has finally made the exfat specification available and promised to make the corresponding patents available as part of the previous contributions to the Open Innovation Network.
Of course listing all the changes of the linux kernel would be out of the scope of this document but there are of course more improvements added in the last decade. Just to mention a few: upstream support for many ARM devices like the Raspberry PI and improvements for container technology (linux namespaces and cgroups).
AV1 Video Codec
The AV1 codec specification has finally been completed. Several open source projects now exist which are working on implementing this specification. A good decoder is already available with dav1d (although it only provides optimised decoding for non-hdr content atm.). Encoders are still rather slow but continuously improve: rav1e and svt-av1. Also hardware support is being worked on and the codec is used by platforms like Youtube.
I probably missed a lot of technologies which had been important during this decade, but this might also mean that there is an opportunity for future blog posts ;).
Looking back at this summary makes me also wish for a few things to happen in the 2020s!
Wishes for the 2020s
Even so that this is a technical blog post, the I also want to mention a few of the obvious more general wishes. The reduction of hate speech, fake news and racism should be a major goal for the next decade. Right next to supporting democratic values and finally protecting the environment. Check out the cute turtle in the picture above, it agrees with everything said ;).
Hopefully European car manufacturers take electric cars more seriously and finally deliver a car that beats Tesla. Not just in quality, range or price, but in all of those! The Volkswagen ID 3 looks promising when it comes to range but it still has to proof whether it can keep up those promises.
Another wish is for the industry to move back to native software. In my opinion applications have not improved by many projects being based on Electron. Most of them have responsiveness issues and use up huge amount of resources. VScode and Spotify might be great, but they could be significantly better if they were native applications.