Home > Portfolio > NSX-EV Dashboard
This is an ongoing project. This post was last updated 8 May 2023.
Designed to look like an F16 fighter jet, the first Honda/Acura NSX is often lauded as one of the worlds best sports cars. It’s Japanese precision made to beat Ferrari, perfected by Ayrton Senna himself.
Client | Jeff |
URL | https://www.instagram.com/red_goes_green/ |
Expertises | Embedded systems UX/UI JavaScript CSS |
Initially I came into contact with the car through this video with almost half a million views.
It fascinated me how this legendary sports car was now combined with a modern, clean and electric drivetrain. This car had no engine in it and at over 200.000 miles, it’s the perfect update.
Determined to find out more, I found the cars Instagram page. When I saw this post of a web browser displaying the cars information, I knew I could make this look and feel like it came from the factory with this setup. I reached out to Jeff and we came to an understanding about his goals and my capabilities.
With the car being in California, it meant there was 8766km of distance between us. There would be no hands-on time for me to tweak things. I had to find normal words to explain what I was doing and what I needed Jeff to try for me. We also adopted an iterative approach: every little feature and detail would be tried by Jeff. It would be used in the real world and evaluated, which meant I had to find efficient ways of rolling out updates which were quick yet consistent.
After some deliberation, we found Jeff wanted to include things from Honda’s heritage, like the S2000 digital gauge cluster. He also pointed me to some other EV’s. I identified Honda’s fonts, gained inspiration from Honda’s current offerings (2nd NSX, Civic Type R…) and came up with a basic concept.
The dash runs on a Raspberry Pi connected to a 7″ screen. The design consists of the top black bar, which is a permanent fixture displaying the current power output, drivemode and warning lights. The space below displays several “pages”, which the user can navigate through to display other information like raw data and errors pulled from the control hardware.
Home > Portfolio > vrijstaat.net stakepool
Cardano is a decentralized proof of stake (PoS) blockchain designed to be a more efficient alternative to proof of work (PoW) networks like Bitcoin. Cardano’s cryptocurrency is named Ada.
Cardano stakepools help to expand and secure the network while generating rewards/blocks. A pool consists of a nodes, which fulfill the roles of a block producer and relays. Every node must run on its own network at a different location.
Client | Mextro Media |
Expertises | Infrastructure sourcing, installation & maintenance Disaster prevention & recovery planning User training |
Problems | Bad performance, no rewards Neglected infrastructure incapable of running node software Insecure management access |
Solutions | Upgraded existing and deployed new infrastructure Switched from Ubuntu Server to FreeBSD Improved security with industry best practices |
Results | 99.99% uptime Actively generating rewards Ransomware attack thwarted |
Downtime means missed blocks and thus less rewards. Uptime and security are key, with high availability failover impossible. Reliability and recoverability are also important as certain aspects of a block producer are not reproducible data. Nodes that underperform do not amortize the investment, meaning optimization is also necessary.
Originally the pool ran on Ubuntu Server 18 and 20. Version 18 is at end of support, so I decided to tackle the servers running that first. Looking at the upgrade path, I realized there was a lot of work involved getting the things I like to see in these kinds of applications. I also took Cardano’s decentralization mission to heart and decided to practice operating system decentralization: roll out an alternative OS. If there’s an attack for Linux, it probably won’t work on FreeBSD, and the other way around. Since the absolute vast majority runs pools on Linux, this is an inherent advantage, as it will be more likely that hackers develop attacks for Linux run pools.
BSD has been powering the world since the 1970’s, and FreeBSD since 1993. It has better network performance, rock solid reliability, less security issues and more security features in the base system. It’s also the first containerization platform. Finetuning the base system to suit your needs is also trivial.
Normally one has to compile the Cardano node software on every machine for every update, which takes many hours. This time required scales linearly with with every deployment. FreeBSD is the only OS with node software available natively, cutting maintenance hours by massive margins. It also runs it inside of a container by default, aiding security.
To help manage nodes I created the cnodectl
tool, similar to apachectl. It was also contributed to the CardanoBSD project.
Through the native ZFS filesystem, I was able to guarantee data integrity for the nodes while also improving performance.
Software ZFS RAID is industry standard because it allows for losing physical disks without losing data, while also checking for data integrity and making snapshots.
The node database (~152GB), through native Zstandard compression, fits in only 80GB (1.9x ratio). This means that we can use a smaller and cheaper disk for longer before it fills up. It also improves performance as less physical data has to be read from or written to the disks.
This will be a bit of a read, but in 2020 I had a burnout which lasted until early 2022. I got interested in cryptocurrencies and the stock market as I didn’t have the energy to apply myself to real full-time work. After I got released from my contract in 2021 I started writing this crypto bot to help me understand what is going on behind the flashy charts.
Karura was a bot that could pull info from a crypto exchange, run calculations and then spit the results out on Telegram. It never progressed to the point where it could buy and sell on its own. But writing it was a trip! I learned about indicators and API’s and subtle intricacies of certain coins.
The source code can be found on my GitHub.
Like Majorak, Karura was written in PHP. The goal was to learn and to get back into the swing of things after not doing much for close to one-and-a-half years. I decided not to use a framework, as I figured that it wouldn’t be needed. In hindsight it was probably easier to go with one.
Pulling info from Kraken, my exchange at the time, turned out to be very difficult as they went down often. After realizing this I even implemented an automatic reconnect feature to help remedy this. It wasn’t enough and I switched to Binance, which never skipped a beat.
Likewise I also did not use PHP’s trader extension… Preferring instead to dig deep into the algorithms behind the indicators like RSI or support & resistance. This turned out to be a good decision as I learned a lot about optimizing and even multithreading (which was overkill and never made it in!) Other madness soon followed. I realized that looking at a screen is really boring and I’d like to take it on the go…
Deciding on Telegram, I had rough prototype code running and sending messages to my phone in intervals decided on by me.
It worked! Really well! It ran for over 4 months without pause. Eventually I learned to do what I had told the bot to do so it became obsolete. To this day I find the code to be written really well. I can take bits out and plop them in other projects and it still works flawlessly.
Home > Portfolio > rockylinux.org
Rocky Linux is a free and open source operating system meant to be bug-for-bug compatible with Red Hat Enterprise Linux®. It is under intensive development by the community. It’s a brilliant project and I decided to give something back.
Beneficiary | Rocky Enterprise Software Foundation |
URL | rockylinux.org |
Expertises | Gatsby Tailwind CSS |
In this issue, which was open for about 4 months, a suggestion for a dark mode for the website was made. Consequently, I decided to pick it up to research Gatsby and Tailwind CSS and put it into practice at the same time. It was done on April 27th and with minor changes was merged on May 5th 2022. You can see the small changes made by comparing it from here and the Rocky site.
In addition, I noticed was that at the time there were no Dutch translations. I took it upon myself to contribute nearly all of them, with some other people chiming in afterwards.
Before Rocky Linux existed there was an operating system called CentOS (Community ENTerprise Operating System), a free enterprise OS built from the same source code as RHEL. It exists downstream of the paid license RHEL. In other words, the code it incorporates has already been tested thoroughly and run in production environments.
CentOS was more reliable and stable than the real product, costing nothing with commercial support generally less expensive. Most importantly, hundreds of thousands of projects, people and companies relied on it.
After Red Hat took over CentOS in January 2014. After that, they decided to kill the project in late 2020. They replaced it with CentOS Stream. Therefore, countless users of CentOS who had recently upgraded to the latest version, expecting updates for years to come now had no new security updates coming…
Gregory Kurtzner, the original founder of CentOS, decided to step up and create Rocky Linux to fill the void. Rocky not the only alternative, similarly Alma Linux exists, but Rocky Linux above all is the purest and the most neutral one.
Majorak is a custom built templating PHP framework built on ADR principles. This will be a quite technical read so it is perhaps better to know what MVC is. It’s also noteworthy that as of 19/10/2022, this software is not production ready or feature complete.
Regular frameworks, like Symfony or Laravel, are built on MVC principles: Model, View and Controller. Those three are originally meant for GUI applications like the browser you are using to read this, where Model, View and Controller may interact with each other, passing on information. It doesn’t really fit neatly into the space of a web application.
In short, ADR consists of Action, Domain and Responder. The Action is the entry point, and does nothing other than pass on the information it receives to the Domain. The Domain may manipulate that information, interact with a database, or invoke other Actions to receive more information. Then, it passes an object, the DomainPayload, on to the Responder. That in turn will render the app.
It follows the World Wide Webs request ➝ response in a much neater way. This makes building these web applications much simpler and effective although creating traditional GUI programs is probably ill-advised with it.
Majorak is currently fully working in terms of ADR. However, running a real modern website or web app is still impossible.
One of the benefits of being a freelance webdeveloper is that I am endlessly more flexible in the technologies I choose for specific projects. Majorak has become a bit of a pet project, as I would eventually like to really put it to work for API’s, web apps or even convert my own website. If you are interested in helping develop it, you can have a gander on GitHub. If you wish to know more about ADR, you can look here.