Morten Johan Sørvig

Hello! I'm a software developer located in the Oslo area, Norway. This page contains links to some of the projects I'm currently working on. My professional interests include Qt and WebAssembly. github.com/msorvig

Current Projects (age of agentic coding)

Qt

WebAssembly

Other

Previous projects

[2010 area; preserved here has a time capsule]

Many software research projects end up in the great virtual desk drawer once interest is lost, the key technical issues have been solved, or a general lack of practical utility has been demonstrated.

I'm documenting some of my projects here as a record for myself and others who might be interested. Reach me at msorvig at gmail.com.

Qt for Google Native Client

The Qt Quick Web Runtime (source)

The Qt Quick Playground (source)

Git Project History Statistics

Created by parsing the output of "git log", running that through SQL, and then visualizing with jqPlot.

Commits are counted against the first branch they appear in. Patch size is not accounted for. The branch names are from the perspective of today — Qt 4.7 was of course developed in the "master" branch at some point but is charted as "4.7".

QWebClient

QWebClient was a thin client for Qt programs, implemented in pure JavaScript that ran in any modern [2009] browser. No plugins were required.

Blog: qt-in-the-cloud-with-qwebclient

Source code: qt.gitorious.org/qt-labs/webclient/

Technical highlights include duplicating Qt's widget hierarchy with DOM nodes, and representing each widget with an image or a real DOM node of the correct type (e.g. QLineEdit → <input type=text>). Event handling was implemented via long polling: dual XmlHttpRequests were made to a QTcpSocket-based event dispatcher on the server. One request/socket was always kept open on the server, allowing it to push events to the client.

Main issues were performance (lots of image data going out) and subtle text layout issues. Layout metrics were calculated on the server, but the actual size of the rendered text on the client would often not match.

Trivia: