Posts

Showing posts from October, 2022

[TSTIL] FDA Crawler

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2021 - FDA Crawler Some industries see a lot of competition even though there's not a lot of commercial traction yet. There the battles are fought not over customers and revenue, but over patents and certifications. With easee we were operating in a similar environment. It was very important for me as CTO / product person to figure out what our competitors were doing. One of the tools that I developed for this is the FDA crawler. It scrapes the FDA API for product and company registrations and serializes it in a git repository. Every week the script runs and with the git history you can see exactly if there are any created, updated or deleted listings. Any new company or product category is instantly visible. Well, sort of, because the database is only updated manually once every couple of weeks. We typically see news via a google alert weeks before i

[TSTIL] decrypt.py

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2012 - Decrypt.py With my new python skills I created a funny little program called decrypt.py. I had done some hard disk recovery for a friend, and found it a bit ironic that the end result was so bland. It just said "19783 files recovered". In movies it's always way more dramatic. My creation brings the drama back to boring things. It takes input, shows garbled text on the screen and slowly reveals the original content. You can view a demo on the  github page . It only took a couple of hours to build, but the main thing about decrypt.py is that it got me really hooked on Hacker News. I had discovered it a couple of months before, but had never posted anything. Now with this post I reached the top spot for a couple of hours (I think?) and saw the comments and upvotes coming in. It was very addictive. I've reached the top place a couple

[TSTIL] Snapp

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2010 - Snapp Stephanie's uncle Rob had a small design / marketing agency in Amersfoort, together with Bart. They contacted me to create a web-based "company personality test". A bit like 16 personalities / MBTI but then for companies. I liked the idea and could use the money, so I went ahead and said yes. The basic concept was to get companies back in touch with their core to brand themselves more effectively. E.g. you might discover that your company is a true "pioneer" or "peace keeper". If you're in touch with your personality, it should give you a sort of compass for your actions and for how to communicate more effectively. It was about 12 questions and you had to drag and drop your 3 favorite answers per question. Then you got 1 of 12 different personalities at the end. After the test they could help you create a

[TSTIL] QMS Integrity Checker

[ This is a part of "The Software That I Love", a series of posts about Software that I created or had a small part in ] 2020 - QMS Integrity Checker When we set out to get external certification for our product, we were in a bit of a bind. There's a whole bunch of international standards that have to be followed, and we had almost no experience with these. For Software Medical Devices there's at least ISO 13485, ISO 14971 and IEC 62304. The ISO 13485 is interesting, as it's a set up of requirements for forming a "Quality Management System" (QMS). Why is it interesting? Well, there's many ways of achieving high quality products, and I believe strongly in "move fast and break things". That's a good approach in general and many companies are successful with it (Facebook, SpaceX). It takes guts though. The failures will happen, and you need people with a high risk-tolerance to accept them. One of the reasons SpaceX can pull it off, but NAS

[TSTIL] Cowboy e-Bike Remote Control

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2022 - Cowboy e-Bike Remote Control In early 2021 I was a bit down. It was winter, some team members had just quit and I needed to distract myself. Due to covid lockdowns and boredom I gained more weight and drank more. I needed exercise (yes I had a water rower but I was too lazy to use it. I had to cycle every day so a bicycle would be a good idea). I started looking at e-bikes, because having experienced the rentals on a trip to Berlin I was sold. It makes cycling even more fun, and you end up taking the bike for most of your trips. The two options were the VanMoof S3 and the Cowboy V3. The Cowboy won. Less quality issues, sleeker look & minimalistic approach. I love this bike. It brings a smile to my face whenever I step on it. Sometimes the smile turned upside down because my phone would not connect to bluetooth though. Stephanie also uses the bi

[TSTIL] easee RemoteControl

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] easee RemoteControl The easee wizard engine was quite cool, and we used it to structure the code for our online eye exam. It executes whatever you see on your computer screen. It was not all good though. At some point in the exam your smartphone is paired using a websocket. The code for sending the phone what to display was a bit ugly. I had an inkling that there was a cleaner solution. We ended up with a special Vue component called "RemoteControl". This component has three props: - remoteComponent - remoteProps - callback When you use the RemoteControl component, a couple of store methods are called. These will serialize the remoteComponent, remoteProps and the callback and send them over the websocket. At the other side the specified component is displayed with the props. A special prop for the callback function is created too, so the user in

[TSTIL] The easee Diff Viewer

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2019 - The easee Diff Viewer Medical Devices need an IFU document. The "Instructions For Use". It's called the User Manual in the normal world. The consumerisation and digitalization of healthcare blurs the contrast between the Medical Device world and the normal world. When is the last time you looked at the user manual for an app on your phone? Do most apps even have one? Probably not. The User Interface should be be self-explanatory. Why would it be different for a healthcare app? Having an IFU is kind of a ridiculous requirement if no one will ever look at it. As far as I know, even the regulators won't take more than a cursory glance for low-risk healthcare solutions. With easee we decided that the UI is the IFU, and for purely regulatory reasons we needed to create a PDF document out of it to show to the regulators. But how? Doing

[TSTIL] Packing all mxruntimes in git

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2016 - Packing all mxruntimes in git One of the things that made the buildpack slow, was that it had to download and unpack the whole Mendix Client and Mendix Runtime when building the container image. Over time these got dependencies got bigger and bigger. The images were bloated and needed time to transfer over the network. We needed a way to add a "cache" to our Cloud Foundry clusters, so that the buildpack could just copy the files from disk. We would not even have to include the dependencies in the final image. That would be a lot faster because the apps themselves were usually pretty small. Storing all the hundreds of runtime versions in the cache of every server was going to take up a lot of disk space though, we needed something more clever. I realized that most versions were minor updates and that a lot of files were shared between mult

[TSTIL] Stacky Bird

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2013 - Stacky Bird The year 2013 was tumultuous. We were doing lots of projects at work, we moved to a fancier office on the Gedempte Zalmhaven, and I was secretly interviewing at Facebook. My personal life was about to be upended too, as we figured out that Stephanie was pregnant in February/March. Coming home one Friday night there was a surprise pregnancy test on my desk. Two thoughts fired like rocket ships in my brain, in opposite directions. One was happy and excited, the other scared of the responsibility and the stress. My facial expression was switching between them for a couple of seconds. Then I realized the nice thing to do for Stephanie was to focus on the first rocket. She must have seen the hint of horror in my eyes though, and it makes sense. Any good parent should be at least a bit afraid about having kids and it is a giant responsibility

[TSTIL] newnode.py

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2011 - newnode.py At Utrecht University I had done a dual BSc. degree in Computer Science and Cognitive Artificial Intelligence. Most if it was technical but I had done plenty of courses in the humanities as well. Some psychology, history of philosophy and Arabic. I was also lucky enough to have joined a book club where we read the classics. I made great friends there. One of them invited me to an honours program in Rhetoric in Amsterdam. That class had about 30 students, and Alexander Klöpping was one of them. I remember that he flew to NYC to get the first iPad and then talked about it on national television in "De Wereld Draait Door". He was in a very different world from all the other students and it was really cool to see.  When I started working life I knew I was going to miss the humanities. I registered for an evening program for a BA in

[TSTIL] Access2Mendix

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2012 - Access2mendix I'm not sure how this project got handed to me. Maybe we were a bit desperate to find new revenue, and in that search, someone had realized that a lot of enterprises used mini-apps built on Microsoft Access. Microsoft Access was installed on most systems because it was bundled with Office, and it allowed mildly technical users to build apps. Going through proper IT processes involved layers of red-tape so lots of people had built lots of solutions with Access. As I hated red-tape too I understood those people very well. They were what was called "shadow-IT". These apps were stored on some shared folder which only a couple of people knew about, and no one knew how to maintain it. Lots of processes were going through these "unofficial" apps and this was seen as a problem, because IT was not in control. With Mendi

[TSTIL] The too clever scheduling service

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2016 - The too clever scheduling service In Mendix Cloud v4 we only wanted to use fault-tolerant services. So no single VMs, but "services" that were "web-scale", "clustered" and "horizontally scalable". Most services we created were request based. So a request would come in, and the service would respond. Simple. We built everything according to the 12-factor app architecture and ran apps on Cloud Foundry. On the AWS side we used lambda and SQS. This was our toolbox for the new architecture. One service that was not request-based was the backup service. Every night we had to create backups. Users didn't trigger this backup creation, we had to trigger it ourselves. If you use a traditional VM, you'd set up a cron job and you're done. In our new world this was somehow considered bad, but we had no tools i

[TSTIL] Mendix2Java

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2015 - Mendix2java Roald called me up one day and said we had a problem. We were about to close a major deal with a large company that I can't name here, but the sales process was stuck at the last stage. Roald was co-founder and pretty important and he never called me, so that was interesting. He's an interesting character: driven, business focused, and very smart. He's unbeatable at the interplay of tech and sales. He's very confrontational, so I had to get used to him in the first couple of years, but after that I deeply respected him. He's confrontational because he cares. I think the respect was mutual because he called me in this crisis, and we worked together quite a bit when I was a PM. This almost-customer was stuck on vendor lock-in. Building things on any platform is risky because it's expensive to migrate off of it. The

[TSTIL] Certinator

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2015 - Certinator My brain is different from that of most people. This is a bit exaggerated, but I either understand something completely or I'm very confused. A coworker recently said that I somehow "know what I don't know". This is a blessing and a curse. A blessing because when I get it I am able to see bugs or solutions in the blink of an eye. A curse because I'm kind of useless and doubt everything until I understand a topic 100%. Both `git` and SSL/TLS were topics that I didn't get for a long time. When I learned the git commands I was useless, but once I learned the data structures I became a git expert overnight. It's a beautiful idea brilliantly executed. SSL/TLS was the same. In the Mendix Cloud, customers needed to add custom domains for their apps. As we were enterprisey, this had to be HTTPS but no low-code devel

[TSTIL] mxplient

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2012 - mxplient The Mendix core had three parts: - The MxModeler (IDE) - The MxClient (Powering the app in the browser) - The MxRuntime (Powering the back-end and managing the database) I was in the Cloud team and used a Mendix app for the Cloud Portal. As we needed to automate a lot with external scripts, I needed an API in the app. Mendix had no REST functionality yet, and being Python fanatics we didn't want to touch XML WebServices. Then I realized the app already had an API. In the browser UI, I was doing all these actions I needed to automate, and those actions went to the Runtime as HTTP requests. Using the browser debugger I discovered the undocumented API that the MxClient and MxRuntime used. I proposed just making this API public, but the Mendix core teams were very against this. Who did this junior engineer think he was? Michiel Kalkman was

[TSTIL] easee TeleVisus

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2020 - easee TeleVisus Early 2020 was a strange time. I remember seeing some videos of sick people in China around January 1st, but my memory might be off. By late January it was clear we were in for trouble. In February it got closer and closer. One coworker next to me actually got covid, and I might have been infected too but did not have a lot of symptoms, I still don't know. At the end of February we went for a pubquiz with easee, and I told my coworkers "In two weeks time this won't be possible anymore". Indeed. Two weeks later to the day, all non-essential businesses had to close their doors. As a medical device company we technically were an essential business, but we decided not to play that card. Some other software companies in our sector did, just because they wanted butts in seats. Bastards. We had just had our first audit in

[TSTIL] Instadeploy

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2015 - InstaDeploy When we launched "Free Apps" at Mendix I was pretty proud. It was basically "Sandboxes V2 + WebModeler". Under the hood we had this whole new architecture with all kinds of clever "cloud-scale" solutions. It turned out that users were not so happy. Every time you changed something in your app you had to deploy it. We wanted people to use Free Apps so we hid the old "local deployment" option. The Free Apps deployment service was buggy and slow. Local deployment used to take 10 seconds. The old sandboxes took 1 minute, the Free Apps took 4. On bad days it took 8. The cloud team had launched the deployment service without any SLAs or basic explanation of the limitations to the other teams. A bit immature. The WebModeler and Modeler teams just had to use it and see how it worked. In testing it was alr

[TSTIL] Sandboxes

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2014 - Sandboxes Derek had a dream for the Mendix trial and he kept talking about it. Sandboxes. You could already try Mendix for free, create an app and run it on your own PC. But you couldn't share your apps to your colleagues. We needed a trial environment in the cloud. Derek was an excellent CEO because he had a clear vision which he kept repeating. He said what users needed and didn't micromanage the solutions. For all I know the higher-ups might have experienced a different side of him, but being at the bottom of the food chain this was my perspective. I have tremendous respect for him. We could not have thousands of free apps running on our infrastructure, costs would go through the roof. Serverless didn't exist and the Mendix runtime was quite heavy. The only remaining solution was what Heroku did: stop the app when not active and resu

[TSTIL] Porting an Atari tax program to Delphi

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2005 - Porting an Atari tax program to Delphi My mom made me take side-jobs from age 13 and that's something that I'm really grateful for. It gave me a good work ethic and plenty of money for a kid, but I always spent it right away and was never able to save any. I started delivering newspapers, and then graduated to baking bread at the Jumbo supermarket. I got fired after a year because I overslept one too many times, and had to find something new. My friend Marijke from school had a neighbor, George, who was 18 and was starting a computer repair business. He was entrepreneurial and studied next to this full-time job. He also played in a band. He had so much energy. She recommended me to him because I was doing things with computers all the time. I was 15. The pay was terrible but I loved the work. I started with 4 hours per week, but by the time

[TSTIL] The easee Wizard Engine

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2018 - The easee Wizard Engine After almost 7 years at Mendix I got a bit restless. My product Mendix Cloud v4 had launched, the big engineering behind it was done and the endless on-call duty was tiring me out. I felt ready for something new. Being addicted to Hacker News I badly wanted to join or start a real startup. A lot was happening. My friend Erik was going to start Soulpicks. Mohsen had some idea with luggage tracking. Rik left for a crazy eye testing startup. Dennis was starting Blockbax with Roy. I talked to some of them about starting something together, but nothing panned out. I had a family and a mortgage, and being the sole breadwinner my personal burn-rate was quite high. Then I got a message from Rik, who was now the lead unicorn engineer at easee. "We're looking for a CTO. Do you maybe know anyone?" Well, no, but I was inte

[TSTIL] The Reaper

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2017 - The Reaper We launched Mendix Cloud v4 by starting the new Free Apps tier on it. These apps without SLA allowed us to take more risks and learn to operate Cloud Foundry. The Mendix Free Apps cluster had enough RAM for about 100 concurrent apps. It could scale up and down, but we wanted to keep the costs reasonable. An app would run as long as there was HTTP traffic to it. If an app did not have any traffic for 30 minutes, we killed it. If an HTTP request would come in, we'd serve a "loading" page while the app was spinning back up. We had a small app (The Resumer) that would catch all traffic for apps that were not running & serve the loading page. I believe Xiwen wrote most of it, but my memory is failing me. It would fire a request to the CF API to find and start the app.  The Reaper was its counterpart. It would talk to the CF

[TSTIL] cf-mendix-buildpack

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2014 - cf-mendix-buildpack The 12-factor app manifesto made an enormous impact on the world of cloud. If you didn't do 12-factor apps, you were stuck in the stone age. At Mendix we were stuck in the stone age, and we wanted out. I believe it was in 2013 that Johan, the CTO, spent a weekend on getting Mendix to run on Heroku. He was still close enough to the Java code that he could compile his custom runtime for this purpose. I think this is the last serious programming I saw him do. He's a fantastic CTO and unlike me learned to let go of coding. We never pursued Heroku again, but a year later Mark Rogers, who was leading Business Development, discovered Pivotal and their Cloud Foundry offering. This was an enterprise platform that targeted the same market as us. Cloud Foundry was Heroku for the Enterprise, and it was awesome. It would take us out

[TSTIL] Mendix WebModeler v0.1

[ This is a part of " The Software That I Love ", a series of posts about Software that I created or had a small part in ] 2012 - Mendix WebModeler v0.1 Mendix was (and is) a fantastic platform. Most Mendix developers use the Desktop Modeler / Mendix Studio Pro to create apps. Back in 2013 this was the only option. I had a different vision for the product. Maybe because I had no love for Windows apps, maybe because my stack was the browser, maybe because of the actual user needs. In any case, I wanted a web-based app creator. No installers, no friction. It would need a lot of difficult front-end engineering and a complete revamp of the codebase.  Think of how much effort Microsoft had to put in Visual Studio Code. Add another re-architecture for client-server and you get the idea.  No one within Mendix was crazy enough to try it. Being young and unhindered by wisdom or experience, I spent a couple of nights on creating v0.1. It was a PHP + jQuery based application that could