About
Born in the 1970s, yet ageless, this is the place where I share my notes, thoughts (occasional rants) and tutorials about free software, BSD, GNU/Linux, system administration, programming, and other stuff - the pragmatic way.
Please forgive any shortcomings and mistakes on this website. Also, English is not my native language.
I am the author of the OpenBSD Router Guide, PHP The Wrong Way and lots of other stuff.
I started programming in BASIC on the Sharp MZ-800 when I was about 12 and I have been passionately interested in computers and programming since then :)
I had my first tech related job when I was only 15 years old in a Danish security and communications company working primarily with modems and 10BASE2 Ethernet systems. There I learned a lot about electronics, soldering, and programming in machine code. It was a real dream job for a 15 year old kid :)
I almost became an electronic engineer, but I never finished the last part of my studies because I was too busy working. Therefore I am mostly self-taught.
A lot of my work has been as a system and network administrator and programmer, both as an employee, as an independent business owner, and as a freelance consultant.
I am a passionate proponent of free software, and of making systems simple, user friendly, well documented, secure and performant.
I am strongly allergic to sheeple, groupthink, hype and trends.
Whenever I am involved in a project I try to follow good software engineering principles such as:
- Simplicity: The system should always be as simple and small as possible. When software projects grow, so do errors and bugs. Techniques such as line-by-line inspection of software, relevant unit testing, and physical examination of hardware that implements protection mechanisms are great. For such techniques to be successful a small and simple design is essential. This is sometimes described as the KISS principle and YAGNI.
- Least privilege: Each user and program should operate using the fewest privileges possible.
- Open design: In order for a system to be secure it must never depend on attacker ignorance. Instead the design should be based upon technology that depend upon public scrutiny - whenever possible.
- Complete mediation: Every access attempt must be checked and validated.
- Easy to use: The human interface must be as easy and intuitive to use as possible. Easy and simple is always better than smart and fancy. Simple user testing is a great way to get valuable feedback.
- Usability: Well known usability standards should be met if required.
- Discrimination: User discrimination is never good. User discrimination is when an application only works for a limited amount of systems or setups, like when a website only works with JavaScript enabled even though it doesn't provide any functionality that really requires JavaScript.
- Documentation: Lacking or inadequate documentation is a bug. Everything needs to be adequately documented from the very beginning, it is an integrate part of software development.