I grew up during the home computer revolution in the early 1980s, learning to program on machines such as the ZX81, VIC-20, and Commodore 64. I later went to university to study computer science, but my fundamental knowledge of computers and programming was formed during those years in the 80s.
During my 30 odd years in the software industry I have worked in roles such as programmer, lead developer, team lead, architect, and CTO. I have worked as an employee, I have founded my own companies, I have served on the board of directors, and for the last five years I have worked as an independent consultant/freelancer. My heart has always been with the act of programming, which in my book include everything from understanding the problem to be solved, through design, implementation, testing, and finally deployment.
My work areas have varied, from telecoms, to internet services, protocols and networking, finance, media streaming, web, and lately embedded and IoT.
One of the things I still enjoy a lot, even though I have spent large parts of my career not doing this, is relatively close to the metal programming, protocols, and networking.
Another area I have been researching lately is the execution of Deep Learning models on plain MCUs, Google EdgeTPU, and NVidia Jetson Nano.
I also like learning new things, both technical and other, and I like combining technologies in novel (and sometimes unanticipated) ways to solve real problems. I like discussing and describing technologies and their possible use and meaning, hopefully inspiring others to investigate, learn, and innovate.
Having said this, maybe even more important is the problem solving, system design, and realization in an open, sharing, curious, knowledgeable, eager to learn, and agile team.
I am primarily a UNIX guy. I run Linux on my laptop, I do most of my
work from the command line, my primary editor is Vim (switched from
Emacs a few years ago), I still like make
, I prefer Python for quick
hacks (and sometimes for real systems), I like Erlang (even though I
have not worked much with it), I use git
for version control, I write
my documents in Markdown, I like LISP (but I can not find any paying
jobs there), I currently program mostly in C/C++, Python, and assembler, but I have started to move to Go and possibly Scala.
Apr 2015 – Present
Castlerock offer consultancy services in programming, software architecture, and coaching in software engineering practices. We also perform technical pre-studies and technical due diligence. We prefer Free Software or Open Source software whenever possible, and an agile mindset to solve interesting problems.
During my time with Castlerock, I have been working with a major video streaming platform. I have also worked with a system for distance measurement, positioning, and general sensor data over sub-GHz (ISM) radio. The project involved hardware, firmware, and backend/cloud functionality. I worked primarily with firmware for the TI CC13xx line of MCUs in C on the Contiki-NG operating system, and with the backend, which initially was built using Node-RED, but later was moved to Python and Google Cloud Platform. The project also included a Linux based gateway between the 6LoWPAN based radio network and the internet, for which I wrote some application level proxy services (CoAP/MQTT and CoAP/HTTP).
Currently, I am working on an in-house project involving Machine Learning (TensorFlow) models on MCUs and Google EdgeTPU running on an autonomous drone platform.
Current buzzwords: Go, Scala, Rust, Category Theory, functional programming, C/C++, ARM/Cortex-M
Recent buzzwords: Machine Learning, Deep Learning, Google EdgeTPU, NVidia Jetson, TensorFlow for MCUs, IoT, LPWAN, ARM/Cortex-M, autonomous drones, C/C++, MicroPython, Forth, 6LoWPAN, Contiki-NG, TI-RTOS, Ubuntu Core, Snapcraft, Node.js/Node-RED, AWS, GCP, ISM Radio
Oct 2019 – Present
Development of operating system drivers and control software for MPEG-4 encoding/decoding in media transmission equipment.
Buzzwords: C/C++, H.222, MPEG-4, drivers, make/cmake, git, Linux
Sep 2016 – Aug 2019
Performed a due diligence on Wittra from a business- and technology perspective. After the due diligence, I stayed on, working with business strategy, product management, and development of embedded software and cloud based backend systems.
Buzzwords: Time-of-Flight, sub-GHz/ISM radio, Contiki/Contiki-NG, TI-Rtos, C/C++, git, Linux, GCP, AWS, Ubuntu Core/Snapcraft, ARM/Cortex-M, 6LoWPAN, CoAP, DTLS, Node-RED, product management
Apr 2015 – Jul 2016
Development of large, digital, interconnected whiteboards. The whiteboards utilize short throw projectors and touch technology (we started out using digital pens, but moved to only use touch). You can use one to four projectors for wall sizes from about two meters to about eight meters (even larger installations are possible, we haven’t really tested the upper limit). Several geographically distributed systems can be connected, and participants in the different locations can see real-time updates of what the other participants are drawing. There will also be desktop and mobile versions of the system, and all different versions can be interconnected in real-time.
The whiteboard is driven by an appliance box running Linux and our whiteboard application.
We started out building the system on Electron and JavaScript, but have now moved to Qt/C++, as we want something much less resource demanding than Electron/JavaScript, so that we can keep the appliance box as small and cheap as possible. Using Qt/C++ also means that we will be able to use the same basic components both for the appliance, desktop application, and mobile apps.
As a fun fact, it is possible to run the system on a Raspberry Pi 3 with excellent performance, but only driving one projector. However, we also developed a distributed protocol based on Raft, allowing us to build larger systems by having several RPi:s working together, each driving their own projector.
We are a small team, and thus my role spans everything from product definition to system design and implementation.
Buzzwords: C/C++, Qt, Yocto, ClojureScript, JavaScript, CoffeeScript, Node.js, Paper.js, Electron, Om, React, HTML5/Canvas, Python, Java, ZeroMQ, Bluetooth, multi-touch, iOS, Android, digital smart pens, digital printing, short throw projection, Linux.
Oct 2011 – Mar 2015
Development of an internet based platform for delivery of live (linear) TV, as well as recorded TV, packaged as a subscription service for TV consumers.
I was the first employee of Magine, the lead developer, and CTO. I was also the technical lead of the team that launched Magine (then TVoli), that developed the initial prototype showing it was actually possible to stream live TV over the internet.
At Magine, I lead the work of developing the Magine streaming system, consisting essentially of two major parts, one part doing injection of TV signals, transcoding, and DRM, the other part dealing with meta data around programs, different clients (e.g. web, mobile phones), and streaming.
I also worked extensively with the development organization processes, together with the head of engineering, and I was part of the Magine management team.
Buzzwords: Scala, Finagle, Cassandra, Zookeeper, Kafka, Avro, Node.js, CoffeeScript, JavaScript, Clojure, Python, AWS, Linux, OpenBSD.
Nov 2010 – Oct 2011
Development of real-time web services and video chat solutions.
Glactic was sort of an incubator for interesting projects, with the idea of doing prototypes or initial versions of systems and services, and then potentially spinning them out to separate businesses.
When I came on board, the project we started was an online dating platform, which may not have been completely original at the time, as there already existed several well established such services. The twist was that in addition to the normal profile matching, we would also offer online, real time speed dating, including chat, voice, and video.
The basic service, including profiles and matching was not that tricky. The real problem was in the voice and video parts. We wanted real time performance, and very good quality for both voice and video, or the speed dating would not work. We investigated several products and services for voice and video that existed on the market, but none met our requirements. In the end, we implemented the whole voice and video solution ourselves, using an open source, Erlang based voice and video server, our own Flash based web client, and a JavaScript based signaling plane to setup and tear down communication sessions.
At the point where the service was up and running and all fundamental features where in place, the project was handed over to another group of developers, and the original team turned to work on a prototype streaming platform for live (linear) TV. The project was called TVoli, and was spun out into a new company with the same name. The development team joined the new company, that later was renamed Magine (and even later MagineTV).
Buzzwords: Python, Erlang, CoffeeScript, MySQL, MongoDB, Linux, git, Lucene
Sep 2010 – Nov 2010
Team Leader and developer of web based payment services.
Klarna was a truly wonderful experience, where I got to lead an awesome team of five (including me), in a very developer friendly environment. The reason I stayed such a short time was the Glactic opportunity; I could not say no to joining a startup again.
Buzzwords: Erlang, OTP, Mnesia, Linux
Apr 2009 – Aug 2010
Development of web based financial services for handling OTC derivatives. I was part of the development team for one of the services, primarily working with development of the Python/Django based web interface for the customers, and the underlying database. I was also leading a project to improve how to package and deploy new versions of the service together with members of the Operations team.
Buzzwords: Python, Django, MySQL, RabbitMQ, JQuery, Git, Linux
Feb 2008 – Present
Responsible for platform evaluation and selection, as well as system architecture and design for an internet-based software-as-a-service solution. Responsible for implementing the solution, as well as guiding and helping the other developers.
Buzzwords: Python, Django, Apache, memcached, Javascript, JQuery, CSS, (X)HTML, Bazaar, Linux, Trac, Scrum
Apr 2006 – Feb 2008
Responsible for the system architecture of a J2EE-based highly available and scalable communications platform (VoIP, presence, instant messaging) in a team of about 20 developers based in Sweden and San Francisco. Team leader for the Swedish development team. Instrumental in introducing an agile, Scrum-based project steering structure. Scrum master for the Swedish development team and project coordinator between the teams in Sweden and San Francisco.
Buzzwords: Java, J2EE, JBoss, OC4J, JDBC, Ant/Maven, JGroups, MySQL, SIP, TCP/UDP/IP, SIP, CVS, F5 BigIP, Linux, Scrum
Dec 1999 – Apr 2006
Responsible for the technical side of the products developed by Hotsip, including a Java-based highly available and scalable SIP (VoIP, presence, instant messaging) server integrated with the JBoss application server, as well as a SIP soft phone. Responsible for driving the architecture and design of the Hotsip products, including software architecture and network topology. Lead developer and team leader on the SIP Server. Responsible for standardization work, primarily within the IETF and 3GPP. Part of the Hotsip management team, as well as the Hotsip Board of Directors. Initially responsible for the internal Hotsip IT infrastructure, including fixed and wireless network, routing, firewalls, file servers, and backups.
Buzzwords: Java, J2EE, JBoss, JDBC, Ant/Maven, Python, C/C++, MySQL, SIP, TCP/UDP/IP, SIP, CVS, F5 BigIP, Linux, OpenBSD, FreeBSD, PF, Bind, Samba
1997 – Dec 1999
Researcher in the field of Internet services. Worked with several different services, including position based services for the mobile network, and communications services based on SIP.
Buzzwords: Java, Python, Tcl/Tk, KIF/KQLM, AI/Intelligent Agents, Scheme, Erlang, C/C++
1989 – 1997
Initially worked as developer on the MD110 PBX (about 2 years), responsible for number analysis and route optimization. Then moved to work on development support systems, such as SCM systems and processes for handling product information (including both code and documentation) for large, distributed projects.
Buzzwords: Plex, C++, Perl, shell scripting, CVS, Metaphase
1994 – 1995
Plan and develop course material for a course in C++ and OOP. Teach classes and tutor project groups in the analysis and design project that was part of the course. Evaluate and grade the projects.
Fun fact, the first year I was teaching was when I myself took the course.
Buzzwords: C/C++, OOA, OOD, OOP
1991 – 1995
1984 – 1988
2008 – 2011
2007 – 2008
1999 – 2006
1988 – 1989
Johan Liseborn
email: johan@castlerock.se