• Business values From Mathematics

    Designing system architectures from first principles. Training for the next trail marathon in the mountains to clear my head in between.

    "Johan has done a great job in building the first version of [[a novel deep learning model for virtual chat agents]] that will be significant in augmenting our Reinforcement Learning paradigm in future." - [24]7.ai, a leader in virtual chat agents

  • My favourite *DD

    Behaviour Driven Development,
    aka TDD done right

  • Number crunching and stuff

    Here are some of the projects I've worked on:

    Continuous wavelet transform of EEG data from a rat

    Machine learning

    Signal processing on EEG data

    About finding potential electroencephalography parameters for identifying clinical depression. My report describes the process of using visualisation in Freq to understand the shape of the signal which helps with interpreting results and helps with the development of model parameters. The project also improved Freq to cope with the size of the weeklong EEG datasets.

    Pikkoserver Architecture

    Massive multiplayer server architecture

    I designed the server architecture of a game winning a Guinness World Record for the largest online first-person shooter battle (MMOFPS). The video shows the server architecture in action.


    See this other video for more details on the server architecture.

    Freq - Visualisation of music


    Shaders, big data, signal processing, multicore processing, C++, Cross platform, Qt and QML

    Freq is a modern approach to frequency analysis. It is a cross-platform application that makes it easy to explore the contents of long and detailed time-series.


    WebGL, javascript and shaders

    I made an invitation demo to the computer festival Birdie in Uppsala, Sweden. It is a javascript demo where most effects are rendered in WebGL through ray marching written in the OpenGL Shader Language. You can run sevendeadlysins.js in your own browser.


    I'm also a member of the Birdie Scene Crew who organises the creative competions at Birdie.


    Manycore processing

    GPGPU Computing, Big Data, Internet of things, Realtime Cloud Computing, Heterogeneous Computing

    Many of the projects I've worked on have been about pushing through hardware limitations. Sometimes I design a brand new architecture to juggle tons of simultaneous communication channels. Other times I redesign the code flow to better suit the underlying architecture and carefully consider bandwidth versus latency to decide what to precompute and what to recompute, where in one assignment I was able to deliver a 3000x speed-up. Yet other times I use mathematical transformations to find alternate ways of computing the same results with fewer operations.

    C++ runtime backtrace

    C++ exception backtraces

    Runtime info

    My Backtrace class wraps compiler specific calls for traversing the call stack and translating it to symbol names. It is typically used together with boost exceptions or when catching segmentation fault signals in order to log the complete call stack upon unexpected behaviour.

    Screenshot of a opening a javascript demo


    A javascript-in-png trick, ray marching and metaballs.

    I did my own implementation of a neat png trick. It uses the .png image format to compress the source code of a small javascript demo. The final source code was 7 kB, which was minified to 4 kB and then compressed with png to a final self-contained demo size of only 2 kB.


    The animation is a webgl shader with a procedurally generated annoying tune. The whole javascript-in-png trick might not work in all browsers.

    Using a C++ smart pointer monitor that guards objects from being used simultaneously by multiple threads.


    C++ smart pointer and mutex monitor

    shared_state<T> is a smart pointer in C++ that acts as an object monitor. For objects shared between threads shared_state ensures that the object is always protected with mutually exclusive access while being syntactically similar to a regular C pointer.



    Feel like doing creative number crunching together?