About this site
These are just some thoughts about this and that in the software industry, and elsewhere, by a long-time coder/hacker.
Privacy
This site does not track you. There are no cookies, no javascript tracking, no loading of icons or images from third party sites like Facebook, Linkedin or Google. The sites does not use Google Analytics or any other similar services. It's just you and the content you read. Noone is watching. I respect your privacy and your integrity 100%.
Except - for demonstration purposes i have added Disqus comments to an article showing how to enable disqus in stbl. If you open this article, disqus will track you, add cookies and try to make profit from that information. I have also added IntenseDebate comments to one article, where I show how to enable that for stbl. This will also add some tracking. IntenseDebate is a free service from the company behind Wordpress.
Code of Conduct
I speak my mind. I respect people who are honest. I change my mind when I realize I am wrong. I never change my mind to please bullies. I believe good people are those to are more concerned about their own conduct. I believe bad people are those who are more concerned about others conduct.
Credits
All pictures are either taken by me or friends of mine, or they are released with permissive licenses for republishing and changes (Wikipedia Commons).
About me
I am a Norwegian expat, currently living in a small village in Bulgaria with my 9 dogs and my computers.
Over the years I have worked with many programming languages. My preferred programming language since 1996 is C++. The code I write for my own projects usually runs on Linux, Windows and macOS.
Unlike many software developers, I have never had any desire to "move on" in my career and become a manager. I guess I love solving problems and writing code too much. I have worked in tiny startups, medium size startups, and for two years as a senior C++ developer in a giant software company. I have declined senior staff positions in two of the largest software / IT companies in the world. I treasure my personal and professional freedom more.
I am not a "Full Stack" or "Front End" or "Back End" developer. I have a wide surface of experience that makes it hard to put a simple label on it. I know how to make web sites, of course. I also know how to make native GUI applications for Linux, Windows, macOS, Android and IOS. I am best known for some of the servers and libraries I have written (most for the War FTP Daemon I guess). I have spent months optimizing a new thread-pool written in portable C++ for a sever application used by almost all medium to large companies in the world. I have written - and optimized - C++ database libraries, using sqlite, Microsoft SQL Server, MySQL, and Postgres. Even Oracle (although I prefer not to talk about that). I have written hundreds of command-line programs.
Today lot's of people are embracing micro-services and REST. I am familiar with both. That is; splitting complex functionality into micro-services (which is hard to get right), and making components talk to each others. The talking part with REST I have used for quite some time - both on the client end and at the server side. I have also played with Googles more efficient alternative, grpc. And before that I used Zeroc's ICE and Corba. I have even used Sun's legacy RPC protocol over UDP for client/server communication.
In the last few years I have dived deep into kubernetes. Beside designing, optimizing, enhancing and maintaining cloud and edge micro-services and Large Data distributed applications, I have also worked extensively on deployments. In the process, I have developed a open source deployment app k8deployer with the aim to make it much, much simpler than helm to use, especially for developers in the development phase of a project. I am one of those crazy people who have a kubernetes bare metal cluster in my basement.
Besides being a senior software architect / developer, I have been:
- IT consultant
- IT Security consultant
- IT technician (that's where it all started)
- Sales manager, hardware, software and services (I had an insane sales-score, but I was not happy)
- Journalist (at two local radios in Norway)
- Radio technician (at three local radios in Norway)
- Manager for a team of software developers (I sucked at it!)
- Flipping burgers at KFC
- Bouncer at two night clubs in Norway
- Disk Jockey
- Manager for a night club
- Preschool teacher
- Assistant at a large institution for mentally disabled people
Programming languages I am actively using:
- C++ 20, C++ 17
- Rust
- Python
- JavaScript
- Kotlin
Programming languages I have used professionally over the past 10 years:
- C++ 03, C++11, C++14
- C
- C# (.net Core)
- Swift
- Objective C
- Java (I hate it!)
- Ruby
- php (You will find my name in the C source code for one of the standard libraries)
- Lua
Operating systems I have written software for
- Linux (since 1997)
- macOS
- Windows (from 3.0 to 11)
- Android
- IOS
- QNX (3 and 4)
- SCO Unix
- Interactive Unix
- Minix
- MS-DOS
- Digital VAX
- CP/M
C++ technologies and libraries I use a lot today
- Modern C++ 11, 14, 17, 20
- boost libraries, asio
- QT (both widgets and QML)
- CMake
- g++
- clang
- msvc
Other programs / technologies I use often these days
- Kubernetes
- Docker, docker-compose
- Jenkins
- Ansible
- ssh
- nginx
- bash
- Visual Studio Code
- kdevelop
- QT Creator
- Visual Studio Professional
- vim
- Android Studio
- Wireshark (They used to use my adns library port for their Windows version)
Some things I have designed and implemented
2024
- Stated Next-app - a GTD application / Personal Organizer for desktop and mobile. It use QT QML on the client side and just standard C++20 in the server. Communication between the client and the server is handled by gRPC.
- Started mysqlpool-cpp - a lightweight async connection-pool library in C++20, built on top of boost.mysql.
2023
- Released mkres - a utility to embed files in C++ projects. Supports embedding the contents of directories, and compression of the embedded content.
- Released a smart asynchronous object-cache in C++ as the first item in the Glad project.
- Started The Glad Project. My intention is to create and implement a handful of useful algorithms in C++ 20.
- Re-booted my open source DNS server, nsblast, written in "modern" C++, to have something interesting and mildly complex to work on while I recover from the burn-out.
- Wrote a generic HTTP server library yahat-cpp, primarily to handle API/REST requests in servers written in C++ (like nsblast).
2022
- Worked almost exclusively on a commercial, globally distributed Active/Active SAAS database running on fat Cloud VM's.
- Had a really severe work burn-out and quit commercial work in October.
2021
- k8deployer - A simple to use alternative to Helm, written in C++. Can deploy to many kubernetes clusters in parallel. Aimed primarily at developers.
- purech - Cluster and replication validation for global deployments of Apache Pulsar.
- asio-async-model-perftest - Performance test to measure the relative performance between Boost asio's different async handlers.
- pulsar-test-consumer-scale - Trivial test for Apache Pulsar to test how many subscribers it can handle on one stream.
2020
- Various applications to test the state and performance end-to-end on a globally distributed Big Data database and events processor.
- Performance optimizations on the big database
- Performance test for strands/threads for Boiost asio - I wanted to know what's the best choice for some future projects
- Test cli for Apache Pulsar - I wanted to take Apache Pulsar to it's limits in some areas
- Ratelimit POC for Ambassador k8s ingress - Implemented a simple Token buckets rate limiter in C++ that works with Ambassador's rate-limiting gRPC interface.
2019
- Performance optimizations, stabilization for a globally distributed Big Data database.
- Twitter like Android app. Simple Backend in nopde.js. Internal Proof Of Concept using some features of the distributes database.
2018
- nginx-swarm-proxy - Docker container to use stock Nginx as an adaptable front-end for Docker Swarm services
- vUberdns - Simple, ultrafast DNS server.
- f-crm - Customer Relations Management for Freelancers and Individual Contractors
- whid - "What Have I Done" - Time Tracker for Freelancers and Individual Contractors
2017
- stbl (the software that I use to build this site)
2016
- restc-cpp - A small and very fast REST HTTP[S] client library in C++14
2015
- shinysocks - A small, ultra-fast SOCKS proxy server.
- DarkSpeak - IM client over the TOR network for Linux, Windows and macOS
- SmsRelay - Android app that forwards SMS messages to XMPP
Older
- FTP Server (War FTP Daemon)
- vUbercool - a http/dns server to host 1 billion websites on a laptop
- HTMGen32 - The software I used to build my homepages in 1997
- WarCMS - Full featured CMS / Social network application in php - later with a core engine in C++, interacting with the PHP code over object oriented RPC (ICE).
- VikingGTD - Simple "Getting Things Done" App for Android
- WarLib - A tiny C++ library providing some basic building blocks to modern C++ applications; like logging, threadpool, tasks, etc.
- wfde - A Full featured modern C++ library implementing the server side FTP protocol (and HTTP).
- Older WarLib (Large legacy C++ library, solving many of the same problems as the ACE library - plus more)
- Numerous small utilities and libraries for Linux and Windows
- A commercial APN (Apple Push) gateway / microservice
- A commercial VoIP library built on Sofia SIP and Googles VoiceEngine (part of WebRTC)
- Video Conferencing client library and UI for Windows in C++ (using a commercial low-level video library for C).
- Commercial firewall (based on Linux and IP Tables)
- Commercial instance manager for Amazon AWS (Cloud Orchestration - before I ever knew that phrase)
- NNTP server (just for fun)
- NFS server (I needed it)
- Basic interpreter (just for fun)
- Spread Sheet (using curses from lack of a windowing system - just for fun)
- Website for a Norwegian energy provider - with aggregated data from hundred of thousands of on-line power meters, broken down to house holds, buildings, campus, city, corporation or enterprise. It provided customers with the ability to generate reports from any time-period and any selection of facilities - usually - in seconds. (This was before Big Data came on the radar - I did it using MySQL, C++, PHP and some hard thinking)
- Shipyards management software (an overall system that planned and scheduled repairs of ships, including naval ships, and integrated deeply with the organizations other IT systems)
- Truck yard management software (for a while used by most of the Volvo truck yards in Norway)
- Network over serial gateway (to connect a Token Ring based QNX network with Unix machines on a TCP/IP network)
- DaRe - Database replication utility
- ssft- Simple and secure file transfers over SSL. (Like scp, but designed to be more constrained and secure)
- WarSetup - Windows installer. Initially written because Microsoft's setup library had too many bugs, later rewritten to use WIX conveniently with advanced options from a very simple GUI interface.
- War Support - A software support site written in php with issue tracking, version tracking, downloads, etc.
- Full featured Word Processor (network distributed architecture for QNX, Interactive Unix and SCO Unix, running on terminal, X/Motif and the QNX graphical UI (at that time)). (We were actually two developers on this project, so I can only claim 50% credit).
Internet protocols I have implemented from scratch
- FTP (servers and clients)
- NFS (server)
- HTTP (servers and clients)
- NNTP (server)
- SMTP (clients)
- POP3 (client)
- DNS (server)
- SOCKS (server and clients)
- REST (not really a RFC thing but... - I made a C++ library for it anyway)
- SNMP (client with a nice GUI browser interface)
General Internet servers I have implemented singlehandedly from scratch
- FTP server
- HTTP Server
- DNS server
- NFS server
- NNTP (usenet) server
- SOCKS server
Internet / telecom protocols have I worked with at a low level
- SIP
- RTP
- MM4
- SMPP
A handful of other technologies I have used over the years
- ArangoDB
- Apache Pulsar
- Docker Swarm
- Minikube
- MySQL
- Postgres
- sqlite
- Microsoft SQL Server
- Corba
- Zeroc ICE
- PHP Modules
- Apache Modules
- IIS Modules
- Scons
- git, subversion, cvs, rcs
- tomcat
- apache web server
- nginx (with and without lua)
- ACE C++ libraries (I never liked it)
- MFC, WTL, wxWidgets
- inn (news server)
- bind (dns server)
- Maven
- protobuf
- grpc
- vmWare, libvirt, Virtual Box, vserver, lxc
Some of the things I have ported between operating systems
- ONC / Sun RPC (I ported the command-line code generator and the binary packing/unpacking libraries to Windows)
- adns (to windows, implementing epoll() for Windows in the process)
- openssh (to windows - long before cygwin and putty came along)
- zmodem (to QNX)
- kermit (to QNX)
What people say about me
I've never seen so much passion for programming in one person until I met you :) Калин Благоев, Senior Software Developer