18 April 2021

One more week of CfP

Från Johan Thelin 18 April 2021 19:08

Usually foss-north takes place ~April. This year, foss-north 2021 will be virtual. We shifted the date to the end of May to try to make it possible to at least go hybrid and have some sort of conference experience, but in light of the current COVID-19 situation and the pace of the roll-out of the vaccination programmes, we decided for a virtual event.

One of the benefits of going virtual is that it is a lot easier to attend – both as a speaker and as audience. For those of you who want to speak, you have one week left to submit a talk proposal to the Call for Papers.

To register a talk requires you to log in using oauth via either github or google. We are working on adding more login alternatives, but as with many volunteer run efforts, time is the current limiting factor. If you feel that this is a blocker, please reach out to me over email and we can sort it out.

11 April 2021

NEWS 210411 about AndEX Pie 9.0 with GAPPS
A new build of AndEX Pie is ready. It has GAPPS (Google Play Store etc), Aurora Store, Netflix, Spotify and many other apps pre-installed. I’ve replaced Pie Launcher with Launcher for Mac OS Style. The best launcher I’ve ever tried.

MORE NEWS 210411 about AndEX Pie 9.0
My first build of AndEX Pie is from 190912. In this new build I’ve upgraded all included apps and added Spotify. My upgraded build of Android x86_64 – andex-pie-x86_64-gapps-aurora-netflix-spotify-1580mb-210411.iso – can be installed to hard drive or on a USB stick. You can also run the system live. I.e. from a DVD or a USB stick. On some computers you’ll have to start up AndEX 9.0 in compatibility mode (VESA) though. The sound and video performance is generally very very good. Google Play Store works very well in this build of AndEX Pie. So does the Netflix and Spotify app. If you have a touchscreen you can also (for example) run CarX Drift Racing 2, Hunting Clash, Nova Empire and Bowling Crew Clash.

Upgrade from previous versions of AndEX Pie?
If you already have AndEX Pie Build 190912 or 200301 up and running there is no need to acquire the newest version from 210411. Just upgrade all apps to the latest version of today and you’re done! Use Google Play Store for that. You can of course also install for example Google Maps, Google Earth, YouTube, Aurora Store, Spotify, Mint Browser and Google Play Games yourself if you want.

Screenshot – AndEX Pie Build 210411 – the Desktop with many (extra) nice apps installed.

Screenshots – Build 210411
Screenshot 1 – AndEX Pie Desktop 210411 with GAPPS
Screenshot 2 – AndEX Pie Desktop 2 210411 with GAPPS

Screenshot 3 – AndEX Pie – first screen after boot
Screenshot 4 – AndEX Pie – showing all pre-installed apps
Screenshot 5 – AndEX Pie – running Netflix
Screenshot 6 – AndEX Pie – running Spotify
Screenshot 7 – AndEX Pie – running Hunting Clash
Screenshot 8 – AndEX Pie – running CarX Drift Racing 2


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (with GAPPS) and RaspAnd Oreo 8.1 (also with GAPPS)!

2 April 2021

NEWS 210402 – A new version of AndEX 10 is ready!
I’ve uploaded a new version of AndEX 10 – andex-10-x86_64-gapps-aurora-spotify-1150mb-210402.iso. All included apps have been updated to the latest version. Also Google Play Services and Google Play Store.

Upgrade from previous versions of AndEX 10?

If you already have AndEX 10 version 201027, 200108, 200218, 200225 or 200604 up and running there is no need to acquire the newest version from 210402. Just upgrade all apps to the latest version of today and you’re done! Use Google Play Store for that. You can of course also install for example Google Maps, Google Earth, YouTube, Gmail, Aurora Store, Spotify, Mint Browser and Google Play Games yourself (if you are running the AndEX 10 mini version of 200225).

NEWS 210402 about AndEX 10 with GAPPS
My fifth build of AndEX 10 is ready. It has GAPPS (Google Play Store etc), Google Maps, Google Earth, YouTube, Gmail, Aurora Store, Spotify, Mint Browser. Launcher for Mac OS Style and many other apps pre-installed. This build of Android x86_64 10 – andex-10-x86_64-gapps-aurora-spotify-1150mb-210402.iso – can be installed to hard drive or on a USB stick. You can also run the system live. I.e. from a DVD or a USB stick. On some computers you’ll have to start up AndEX 10 in compatibility mode (VESA) though. The sound and video performance is generally very very good. Google Play Store works very well in this build of AndEX 10. So does the YouTube and Spotify app. I’ve also included one extra app store – Aurora Store. Use it if you can’t find the app you’re looking for using Google Play Store.

My new compiled Android-x86_64 system (10) can run and be installed on almost all newer laptops (and some Desktop computers). For example Acer (Aspire), HP, Samsung, Dell, Toshiba, Lenovo, Thinkpad, Fujitsu, Panasonic and Asus laptops. You can also run AndEX 10 in VirtualBox and/or VMware. I can also mention that I could run my new 10 version on a HP All-in-One PC (with a touch screen), HP Pavilion 500-317no Desktop Computer and on a Lenovo ThinkStation C30. You can very easy do a “normal” or manual installation to hard drive. A manual installation can also be done to a drive where you already have another Linux system (for example Ubuntu 20.04.2) installed. Read more about how to install AndEX 10 on the INFO site.

Screenshot 1 – AndEX 10 Desktop 210402 with GAPPS + extra apps
Screenshot 2 – AndEX 10 first Desktop after boot
Screenshot 3 – AndEX 10 showing some pre-installed apps
Screenshot 4 – AndEX 10 – Desktop after boot in VirtualBox
Screenshot 5AndEX 10 – Running Google Play Store
Screenshot 6 – AndEX 10 – Running Aurora Store
Screenshot 7 – AndEX 10 – AIDA64 running


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (with GAPPS) and RaspAnd Oreo 8.1 (also with GAPPS)!

21 March 2021

ABOUT RaspAnd 11 – Build 210321 – with GAPPS
RaspAnd 11 runs very well on a Raspberry Pi 4. I.e. the system is pretty responsive if you use a micro SD card of good quality. RaspAnd 11 has the following apps pre-installed: GAPPS (Google Play Store and other Google apps), Netflix, Spotify, Midori Browser, Aurora Store, Clash of Clans and AIDA64.

ABOUT Android 11, which was released 200908…

PLEASE NOTE that you must be aware of the fact that the Raspberry Pi 4 computer has its limitations and that Android 11 is a very advanced Linux system. Having said that I must also say that the apps I have included in this Build (see above) work very well. The max screen resolution is 1680×1050. With higher resolutions Netflix won’t work.

NOTE also that you’ll have to register “your device” (i.e. your Rpi4) before you can log in to Google Play Store. Please read my instructions at the INFO site about how to register so that your device will be Play Protect Certified.

About Raspberry Pi 4
This build (RaspAnd 11 210321) works very well on the new Raspberry Pi 4. I used the latest model with 8GB RAM, but you can of course use the other models too.

1. The Desktop with GAPPS, Netflix and Spotify pre-installed
2. The Desktop using Microsoft Launcher – not pre-installed
3. The Desktop using Galaxy 21 Launcher – not pre-installed
4. Asphalt 9 running – not preinstalled
5. Google Play Store running
6. Netflix running
7. Spotify running
8. Running Hunting Clash – not pre-installed
9. The Desktop using Computer Launcher – not pre-installed


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (with GAPPS) and RaspAnd Oreo 8.1 (also with GAPPS)!

9 March 2021

ABOUT RaspAnd 11 – Build 210309
RaspAnd 11 runs very well on a Raspberry Pi 4. I.e. the system is pretty responsive if you use a micro SD card of good quality. RaspAnd 11 has the following apps pre-installed: Netflix, Spotify, SVTPlay, Termux, Firefox, F-Droid, and Aida64. Unfortunately not Google Play Store, but F-Droid works as good replacement for it. You can also download APK files (Android packages) and install them. Normally without problems.

ABOUT Android 11, which was released 200908…

About Raspberry Pi 4
This build (RaspAnd 11 210309) works very well on the new Raspberry Pi 4. I used the latest model with 8GB RAM, but you can of course use the other models too.

MORE NEWS 210309 ABOUT RaspAnd 11
RaspAnd 11 can be installed to a Micro SD card (preferable a class 10 card) in Windows 10 using Rufus, Win32 Disk Imager or Etcher. You can alternatively (of course) use the dd-command in a Linux system.

1. The Desktop with Netflix and Spotify installed
2. Aida64 running showing the system info
3. YouTube running in Firefox
4. Netflix running
5. Spotify running
6. Clash of Clans running (the app is not pre-installed)


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (without GAPPS) and RaspAnd Oreo 8.1 (with GAPPS)!

5 March 2021

NEWS about ArchEX 210305
A new version of ArchEX (Arch Linux Live) is ready! In this new version, which I call ArchEX 2021, I have added the Deepin 20.1 (latest) Desktop environment. Deepin (made in China!) is devoted to providing a beautiful, easy to use, safe and reliable system for global users. I came to like Deepin very much when I installed it in ExTiX 21.1. So I thought why not install Deepin also in ArchEX?

This version (210305) of ArchEX replaces version 200930. I’ve replaced Yaourt with YayYet Another Yogurt – An AUR Helper Written in Go. I came to know that Yaourt is dead. I.e. Yaourt is not being developed anymore. So in the new version of ArchEX I have upgraded all included packages, installed a new kernel (5.11.2 – second latest stable kernel by 210305) and replaced Yaourt with Yay.

Study all installed packages in ArchEX 2021 Deepin/LXQt.

ArchEX Deepin Desktop
ArchEX Deepin full Desktop running in VMware Workstation 16 Player with VMware Tools installed
ArchEX showing a WiFi connection
Calamares running/started in VMware in Windows


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (without GAPPS) and RaspAnd Oreo 8.1 (with GAPPS)!

1 March 2021

NEWS 210301 about RaspEX Kodi
I’ve made a new extra version of RaspEX Kodi 32-bit. This version is based on Raspbian (Raspberry Pi OS) and Debian Bullseye (upcoming Debian 11). The LXDE Desktop is replaced with LXQt 0.16.0 which has a more “modern look” than LXDE. Historically, LXQt is the product of the merge between LXDE-Qt, an initial Qt flavour of LXDE, and Razor-qt, a project aiming to develop a Qt based desktop environment with similar objectives as the current LXQt. In RaspEX Kodi Build 210301 I’ve upgraded Kodi to version 19.0 Matrix since it has reached the “stable stage” . It was therefore now possible to install the Netflix addon among many other addons. You can now also much easier install extra repositories. Read about the best Kodi repos 2021.

Boot problems as regards RaspEX Kodi Build 210301

If you can’t boot up the system after installing to the SD card using Rufus 3.13 in Windows it’s because the files /boot/cmdline.txt and /etc/fstab has the wrong content. I.e. the PARTUUID for the card is wrong. Then you’ll have to edit said files. Do it like this.
1. Start up a Linux system (Ubuntu or…).
2. Insert your SD card with RaspEX Kodi installed. It will be seen as /dev/sdb1 (boot partition) and /dev/sdb2 (root filesystem).
3. To find out the correct PARTUUID for /dev/sdb1 and /dev/sdb2 run the command blkid /dev/sdb1 respectively blkid /dev/sdb2
4. Now change to the correct PARTUUID in /boot/cmdline.txt and /etc/fstab on the SD card. Use Leafpad or Mousepad for that. Never LibreOffice writer!

The file cmdline.txt can look like this:
console=serial0,115200 console=tty1 root=PARTUUID=347a28ab-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

The file fstab can look like this:
proc /proc proc defaults 0 0
PARTUUID=347a28ab-01 /boot vfat defaults 0 2
PARTUUID=347a28ab-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that

Study all installed packages in Build 210301…

Log in to LXQt or Kodi
After the boot process is ready you will end up at LightDM‘s login screen. It will look like this – see below. Log in as pi with password raspberry or as root (“other”) with password root. You can log in to Kodi directly from LightDM if you want. While inside LXQt you can change to the Kodi Desktop environment. You can run Kodi on the LXQt Desktop like any other program or run it in full screen. Just change Kodi’s Settings from Windowed to Fullscreen. Watch this screenshot.

Expand the filesystem on the SD card
If you install many new big programs and/or download large files (for example videos) you may run out of space on the SD card. That is best fixed by running the following command: sudo raspi-config. Click on “Advanced Options” and choose A1 Expand Filesystem.
NOTE: That’s all you have to do. Just wait for the script to fix everything. If you use a SD card of 64 GB all the space on it will be used afterwards. Watch a screenshot when raspi-config is running.
1. Screenshot showing filesystem size before resizing
2. Screenshot showing filesystem size after resizing

Used kernels
5.10.17-exton-v7l+ (for Rpi 4) and 5.10.11-v7+ (for Rpi 3 and 2).

1. The LXQt Desktop running as user pi
2. The LXQt Desktop running as root

3. Kodi 19.0 system info
4. Kodi running on/within the LXQt Desktop
5. Kodi showing some addons
6. NBC Sport addon running
7. NASA addon running
8. Netflix addon running
9. Kodi running using a special skin


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (without GAPPS) and RaspAnd Oreo 8.1 (with GAPPS)!

26 February 2021

The PinePhone has Arrived

Från Johan Thelin 26 February 2021 11:49

So DHL rang the door bell to hand me a nice device. This is a pretty little phone! Will come back with more updates as I have more time to poke around.

20 February 2021

NEWS 210220 ABOUT ExTiX LXQt Mini 21.2, Build 210220
I’ve made a new “mini” version of ExTiXThe Ultimate Linux System. It is based on Ubuntu 20.04.2 LTS Focal Fossa. The ISO file is of only 980 MB, which is good if you want to run the system super fast from RAM. It should be enough with 2GB RAM. When the boot process is ready you can eject the DVD or USB stick. Use Boot alternative 2. The best thing with ExTiX 21.2 is that while running the system live (from DVD/USB) or from hard drive you can use Refracta Snapshot (pre-installed) to create your own live installable Ubuntu 20.04.2 system. So easy that a ten year child can do it! ExTiX 21.2 uses kernel 5.10.15-exton. Kernel 5.10 is a LTS kernel supported until 2026. Ubuntu 20.04 LTS will be supported until April 2025.

Study all pre-installed packages in ExTiX 21.2.

More about ExTiX 21.2
This ExTiX version uses LXQt as Desktop environment. LXQt is the Qt port and the upcoming version of LXDE, the Lightweight Desktop Environment. It is the product of the merge between the LXDE-Qt and the Razor-qt projects: A lightweight, modular, blazing-fast and user-friendly desktop environment. NOTE: This ExTiX LXQt Build is for older non-UEFI-enabled computers and VirtualBox/VMware. When running ExTiX 21.2 in VirtualBox you can do it in full screen since VirtualBox Guest Additions are pre-installed. Watch this screenshot.

ExTiX version 210220 LXQt Desktop
ExTiX LXQt running Refracta Installer – 1

ExTiX LXQt running Refracta Installer – 2


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (without GAPPS) and RaspAnd Oreo 8.1 (with GAPPS)!

15 February 2021

NEWS 210216 about DebEX KDE Plasma – a Refracta Build
I have made a new version of DebEX KDE Plasma Live DVDefi. It replaces version 200228. It’s a pure Debian system. (Unstable/Experimental). I.e.: There are no Ubuntu or Kubuntu elements involved. DebEX KDE Plasma uses the KDE Plasma Desktop 5:20 as Desktop environment.

Kernel 5.11.0-exton is used. (Kernel 5.11 was released by Kernel.org 210214). I have replaced Wicd with NetworkManager. It works better. I have replaced Google Chrome with Iceweasel (Firefox) 52.9 (for Netflix). I’ve also added SMPlayer – an alternative to Vlc. (SMPlayer is a free media player for Windows and Linux with built-in codecs that can play virtually all video and audio formats. It doesn’t need any external codecs. Just install SMPlayer and you’ll be able to play all formats without the hassle to find and install codec packs). All other installed packages have also been updated to the latest version of 210216. Study the full packages list.

What’s new in kernel 5.11?

I have added Calamares Installer Framework. Now you can choose language when the installation starts. When it’s ready everything will be in your chosen language! You can even use Calamares in VirtualBox and VMware – i.e. non-efi computers if you follow my INSTRUCTION for non-efi computers. NOTE: You can also use Refracta Installer. Preferably in VirtualBox/VMware. NOTE ALSO: When running DebEX KDE in VirtualBox you can do it in full screen since VirtualBox Guest Additions are pre-installed. Watch this screenshot. You can also run DebEX KDE in full screen in VMware since VMware Tools are pre-installed. It is a bit of a hassle to install VMware Tools so I did it for you in Build 210216. Watch this screenshot.

Important about Refracta

You can use the Refracta Snapshot (pre-installed in all four versions of DebEX) to create your own installable Debian Live DVD once you have installed DebEX to hard drive. I mean change everything and then create a whole new Debian live system. When you start Refracta Snapshot it will look like this. You don’t even have to install DebEX to hard drive before you can use the Refracta Snapshot. If you have plenty of RAM you can create a new (your own!) Debian system while running DebEX from a DVD or a USB stick. On one of my computers with 32GB RAM the Refracta process was done in 10 minutes! So please note that the whole Refracta process (creating your new ISO) will only take 10 – 50 min! (Depending on how fast your computer is). You’ll find the (new) ISO in /home/snapshot.

DebEX is a pure Debian system. I.e. no traces of Ubuntu, Kubuntu etc. New releases of Ubuntu are always based on Debian. So is DebEX.

1. The Desktop logged in as user with Calamares running
2. Running in VirtualBox with VirtualBox Guest Additions
3. Running in VMware with VMware Tools installed
4. Running Spotify (pre-installed)


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (without GAPPS) and RaspAnd Oreo 8.1 (with GAPPS)!

11 February 2021

NEWS 210211 about RaspEX Kodi
I’ve made a new extra version of RaspEX Kodi 32-bit. This version is based on Raspbian (Raspberry Pi OS) and Debian Bullseye (upcoming Debian 11). The LXDE Desktop is replaced with LXQt, which has a more “modern look” than LXDE. Historically, LXQt is the product of the merge between LXDE-Qt, an initial Qt flavour of LXDE, and Razor-qt, a project aiming to develop a Qt based desktop environment with similar objectives as the current LXQt. In RaspEX Kodi Build 210211 I’ve kept Kodi at version 18.7 (stable). It was therefore possible to install the Netflix addon among many other addons. With Kodi 18.7 it is also easier to install extra repositories. Read about the best Kodi repos 2021.

Study all installed packages in Build 2102111…

Used kernels
5.10.14-exton-v7l+ (for Rpi 4) and 5.10.13-exton-v7+ (for Rpi 3 and 2).

1. The LXQt Desktop
2. Kodi 18.7 system info
3. Showing extra repos (not pre-installed)


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (without GAPPS) and RaspAnd Oreo 8.1 (with GAPPS)!

8 February 2021

RaspEX Kodi Build 210205 (32-bit) and 210208 (64-bit) with LXDE/LXQt/Kodi Desktops Both systems can be downloaded from SourceForge.net for free. The systems are made especially for the new Raspberry Pi 4 (8GB, 4GB and 2GB). RaspEX Kodi is based on Debian 11 Bullseye (Build 210208) respectively Debian 10 Buster (Build 210205), Raspberry Pi OS (previously called Raspbian) and Kodi Media Center. In RaspEX Kodi I’ve added the LXDE/LXQt Desktop with many useful applications such as VLC Media Player and NetworkManager. Makes it easy to configure your wireless network. I’ve also upgraded Kodi to version 18.7 Leia, which makes it possible to include useful addons such as Netflix and Amazon Video. Which I’ve done in Build 210205. RaspEX Kodi Build 210208 uses the LXQt Desktop and Kodi 19.0 Matrix. Study all included packages in RaspEX Kodi Build 210205 respectively Build 210208.

NOTE1: RaspEX Kodi Build 210208 64-bit is only for Raspberry Pi 4 computers.

NOTE2: Build 210208 (64-bit) is missing the Netflix addon. Widevine CDM (which is necessary for Netflix to work) is not available natively on ARM64.

More about RaspEX Kodi 64-bit Build 210208
The previous 64-bit build is from 200726. In this new build I’ve replaced LXDE with LXQt, which have a more “modern” look. I’ve also upgraded Kodi to version 19.0 Matrix (BETA). It works very well.

1. Running Kodi 18.7 in Build 210205
2. Running Kodi 19.0 in Build 210208
3. The LXDE Desktop logged in as the ordinary user pi in Build 210205
4. The LXQt Desktop logged in as the ordinary user pi in Build 210208
5. Kodi system info re. Build 210205
6. Kodi system info re. Build 210208


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (without GAPPS) and RaspAnd Oreo 8.1 (with GAPPS)!

Exton Linux YouTube Videos

Från Arne Exton 8 February 2021 12:54

I’ve discovered that people (not me!) have published a lot of YouTube videos about my different Linux builds. Below is a list of the most recent ones.
1. ChromX OS (Chrome OS Alternative) – Install ChromX on PC – 200912
2. ExTiX 20.1 – The Ultimate Linux System? Installation and Review – 200111
3. SlackEX: Distro (de Arne Exton) basada en Slackware 14.2 con Enlightenment 0.24.2 (in Spanish) – 201115
4. Linux distros of 2021 – 1 best linux distros for everyone 2020 | 2021 – extix 21.1 – 210106
5. RaspEX Raspberry Pi 4 Media Centre Netflix, YouTube – 200113
6. ExLight 07/2020 ( basda en Debian Bullseye con Enlightenment 0.23.1) ideal para equipos antiguos – 200710
7. Exlight 01.2021: Debian Bullseye + Enlightenment 0.24.2 (la última “obra” de Arne Exton) – 210130
Here is a complete list of all Exton Linux builds: http://www.exton.se/?page_id=2

5 February 2021

RaspEX Kodi Build 210205 (32-bit) and 200726 (64-bit) with LXDE/Kodi Desktops
Both systems can be downloaded from SourceForge.net for free. The systems are made especially for the new Raspberry Pi 4 (8GB, 4GB and 2GB). RaspEX Kodi is based on Debian 11 Bullseye respectively Debian 10 Buster, Raspberry Pi OS (previously called Raspbian) and Kodi Media Center. In RaspEX Kodi I’ve added the LXDE Desktop with many useful applications such as VLC Media Player and NetworkManager. Makes it easy to configure your wireless network. I’ve also upgraded Kodi to version 18.7 Leia, which makes it possible to include useful addons such as Netflix and Amazon Video. Which I’ve done in Build 210205. Study all included packages in RaspEX Kodi Build 210205 respectively Build 200726.

NOTE: Build 200726 (64-bit) is missing the Netflix and YouTube add-ons. You can (possibly) install them yourself. Without the YouTube add-on many other add-ons can’t run. Read about how to create and setup your YouTube API Key, ID and Secret for Kodi.

Used kernels
1) 5.10.12-exton-v7l+ (for Rpi4) in Build 210205
2) 5.10.12-exton-v7+ (for Rpi3 and Rpi2) in Build 210205
3) 5.4.51-v8+ (for Rpi4) in Build 200726
4) 5.4.51-v7+ (for Rpi3 and 2) in Build 200726
The system will automatically determine which Raspberry Pi you are using and load the correct kernel.

RaspEX Kodi performance
RaspEX Kodi is a very fast and responsive Rpi4 system. Much due to very low memory (RAM) usage. About 200 MB as this screenshot shows. I’ve said that RaspEX LXDE Build 210101 is very fast. RaspEX Kodi is even faster. The video and sound quality is also very very good. Even while running RaspEX Kodi on big TV screens. I.e. you can really enjoy Netflix and YouTube running on your Rpi4 mini computer!

1. Running Kodi in Build 210205
1b. Running Kodi in Build 200726
2. The LXDE Desktop logged in as the ordinary user pi in Build 210205
2b. The LXDE Desktop logged in as the ordinary user pi in Build 200726
3. Netflix running showing very good video quality
4. YouTube running showing very good video quality


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (without GAPPS) and RaspAnd Oreo 8.1 (with GAPPS)!

3 February 2021

EXTON OpSuS Tumbleweed is based on openSUSE Tumbleweed, which is a rolling distribution. I.e. no need for new installations. Just run the command zypper dup and you will always get the latest stable packages/kernels. The ISO file is only of 657 MB so you will run the system very fast from a CD or a USB stick. Even in VirtualBox/VMware directly from the ISO file.

Run EXTON OpSuS with PERSISTENCE from a USB stick! You can install new programs and/or change the whole system to you liking. Everything you do will be saved directly on the USB stick.

EXTON OpSuS Tumbleweed with LXQt 0.16.1 uses kernel 5.10.9-1. Installed programs: Among many other programs, Firefox, NetworkManager, GParted and Calamares Installer. You’ll run the system as root from the beginning. Root’s password is linux. EXTON OpSuS can easily be installed to hard drive (of those who so desire). For that you shall use Calamares Installer. All programs have been updated to the latest available version as of February 3, 2021. The system language is English.

Installing to a USB stick with persistence and then to hard drive
After installing EXTON OpSuS Tumbleweed to a USB stick, you can change the system completely and then install the system to a hard drive (if you like). You can also continue to have it only on the USB stick. You will enjoy persistence if you use openSUSE Imagewriter for the USB installation. You can also use Etcher (and possibly also Rufus if you install in dd-mode) in Windows for the USB installation. If you install EXTON OpSuS on a large enough (and fast) USB stick, you can go ahead and install for example KDE, Mate or Xfce4 Desktop environments. All your system changes are automatically saved to the USB stick. Note that you’ll have to use a different/new USB stick if you want to run EXTON OpSuS on another computer. That’s because certain files necessary for the configuration will be destroyed after the first boot. I.e.: You’ll have to use the same USB stick on the same computer all the time. If you later on decide to install EXTON OpSuS to hard drive using Calamares all your system changes will follow.

Installation of EXTON OpSuS from a USB stick (or CD) to hard drive using Calamares Installer
Read about how to do that on the INFO site.

Is EXTON OpSuS LXQt Build 210203 unique?
If you have a look at openSUSE’s official Download site you can see that there is no live LXQt version available. Furthermore OpenSUSE’ live versions should not be used to install or upgrade Tumbleweed.

1. The LXQt Desktop
2. Running in VirtualBox in full screen
3. Showing YaST Control Center
4. Calamares has started in VirtualBox
5. Running Netflix in Google Chrome (not pre-installed)


Read about my Android-x86 Systems – 10, Pie, Oreo, Nougat, Marshmallow, Lollipop and KitKat at
andex.exton.net – latest is AndEX 10 (with GAPPS) and AndEX Pie 9.0 (also with GAPPS)!

about my Android 11, 10, Pie, Oreo, Nougat, Marshmallow and Lollipop versions for Raspberry Pi 4 and 3/2 at
– latest is RaspAnd 11 (without GAPPS) and RaspAnd Oreo 8.1 (with GAPPS)!

2 January 2021

Some Vue + Django tips

Från Johan Thelin 2 January 2021 12:11

As I wrote last time, I currently develop a web app based on Django and Vue using the django-compressor-parceljs. I’d like to mention some small things that I’ve learned since last.

Vue in development mode

I found it interesting that parceljs described how to get Vue into development mode for several bundlers, but failed to mention parcel. After some digging around, I figured out that parcel respects the NODE_ENV environment variable, so starting the django server with NODE_ENV=development ./manage.py runserver does the trick. Now I get proper error messages from Vue.

Constantly rebundling

Another annoyance with the default configuration of the compressor, was that it compiles (bundles / compresses) the Vue files once every time the server is started. This really lengthened the change-build-test cycle time, so something needed to be done. It turns out that the solution is to set the COMPRESS_REBUILD_TIME to a really low value in the django settings, and the contents is compressed every time. I set it to one second on my development machine.

Disabling compression would break the Vue files, as the browser cannot run the Vue files natively, i.e. they need a compression to be possible to run.

The consequence of this configuration is that loading a view based on Vue takes a bit longer, but it takes way shorter time than restarting the django server, recreating the backend state and so on.

Exposing Django context to Javascript

Django exposes a set of context variables when loading a view. This avoids an unnecessary round-trip over the server to asynchronously request the info that I already know the view will need. I’ve developed a small convention for this.

In the Django template, I add something along these lines:

var context_title = '{{ title }}';
var context_actors = [
{% for actor in actors %}'{{ actor }}',
{% endfor %} ];

This copies the django context into Javascript space with the variable name prefix of context_. I then consume these in the Vue app’s mounted method, e.g.:

    mounted() {
        this.title = context_title;
        this.actors = context_actors;

This copies the state into the state of the app, which means that it is now a part of what the Vue interface is reactive to.

25 December 2020

Looking at Vue

Från Johan Thelin 25 December 2020 16:30

All applications are more or less connected today. The time of files on a disk, or moving them with a USB stick (or floppy) are over. Even file based programs are often synced using Nextcloud, dropbox, google drive, etc.

At Eperoto I’m busy building a backend for a React frontend, but there I stay in my comfort zone at the backend. It is Python, databases and files, just as I know and like things to be. I also have my normal toolbox for debugging and know how to execute a rich set of unit and integration tests to ensure that things stay sane over time.

However, I have another side project. Finally I’ve reached a point where have to do take a dip in the sea of web frontend. I don’t mean messing about with the odd Javascript snippet or fighting the windmil^Wcss.

The choices I was looking at where React, Angular and Vue. I did not do a deep analysis when picking a framework to try. Instead my reasoning was a long these lines:

  • React, I can pick this up from Manos at Eperoto.
  • Angular, requires npm and a setting up an environment to get started.
  • Vue, just needs a script to be included into your web page.

So, me being lazy, I choose to view Vue, which is pronounced view. It seems that I like a bit of pronunciation ambiguity in my frameworks.

Starting Slow

The reason for choosing Vue was the ability to run right in the browser. The strength of today’s browsers is the easy of deployment, but a hidden strength takes me back to the 1980s and 90’s. Everyone has a development environment sitting right in front of them. However, instead of being used to load programs like with the C64, you now I have to look for the development tools to bring up the console.


I’m building a tool that is currently in closed alpha stage, so I cannot tell you too much about it. What I can show is one of my first Vue components. It is a text element, that when clicked turns into a text edit. I made two of these, one for editing a line, and one for editing a paragraph. It also sports a placeholder text if it is empty.

Vue.component('editable-text', {
     props: ['value', 'placeholder'],
     data: function() { return { editing: false, } },
     template: '{{value}}' + 
               '{{placeholder}}' +
     methods: {
         on_start_editing: function(e) {
             this.editing = true;
         on_end_editing: function() {
             this.editing = false;
     directives: {
         focus: {
             inserted(el) {

The code above makes it possible to use an editable-text tag. In order to be able to use the new tag, a Vue app needs to be created and mounted into the DOM of the web page. That means making it take over a div somewhere in the page, and let Vue manage its contents.

This is partially done in the Javascript file:

var app = Vue({
     el: '#app',
     data: [ text: '' ]

And the other half goes into the html:

<div id="app">
<editable-text v-model="text" placeholder="enter text"></editable-text>

<script src="js/vue-test.js"></script>

Finally I sprinkled some css on top of this to make it look sane. For instance, defining a placeholder class.

.placeholder {
     color: #999999;

Now we have something that works! I can include a development version of Vue into my page, which provides helpful feedback and point me in the right direction when I make mistakes. And then I can point this to a minified production build of Vue once I’m done.

Bring on the Django

For my backend needs I choose to go with Django. It might because I know Python, it might because of the extensive docs, the great intro tutorial (no damn video – text that I can read back and forth in my own order and pace), or maybe it is just because I’m old.

I like Django. Django plays nice. It is my choice of backend framework. End of discussion.

So, how do we make Vue and Django play nice?

First up, the index.html needs to be served from Django, and the CSRF cookie needs to be served along with it:

from django.views.decorators.csrf import ensure_csrf_cookie
def my_view(request):
     context = { … }
     return render(request, 'app/index.html', context=context)

Then the index.html needs to be adapted, e.g. use {% static 'app/index.html' %} instead of direct URLs and such. Then I place the js files in the app/static directory tree and run migrate.py collectstatic to get it all in the correct location for nginx to serve it on the production server.

There is, of course, more to the app. I provide a REST-ish API passing JSON around via a set of views served under /api/…. I could probably have used the Django REST Framework here, but I tend to have to adapt things as the API isn’t really proper REST. I just picked out the convenient bits from it, so I roll my own for now. To make these requests, I use Axios, which plays nicely with the Django CSRF cookie.

What is the Point?

When using Vue like this, the question is really what the point is. For smaller stuff I’ve rolled this in plain Javascript. Including the AJAX (AJAJ?) calls and updating the DOM. What Vue helps me with is that I can share a single JSON state between the server and client, and Vue reactively renders it as needed on the client side.

Still, writing Vue as shown above kind of sucks. The template part of a component is html wrapped into a Javascript string. This means loads of fun when handing various string enclosing chars – ” and ‘, I’m looking at you two! Also, just stuffing everything in to a Javascript map makes everything a bit clumsy. It is really had to misspell something and it just stops working.

So, it was time to take it to the next level. Vue can handle single file components. This sounds a lot like classes to an old C++ guy like me, so bring it on!

The Computer Says No

Vue might know what a *.vue file is, but Firefox sure does not. It does not know what an include is either. It has lots of interesting errors about it, so it knows about a similar concept, but not what I needed it to know. Instead, I need a compiler and linker, or what the webistas call a bundler.

When mucking about with npm to get React or Vue things to work, I always ended up with webpack. But apparently web pack is old, boring, and slow (a bit like me). Having asked a friend, I learned that all the new kids use Parcel – a project that has an icon next to every heading on the whole site. Amazing…

What Parcel (and webpack or any other bundler) does is that it transform assets into Javascript, HTML and CSS, that the browser understands. It also combines the assets into fewer files, e.g. one js-file instead of a pile of them, thus reducing the number of files the browser has to request, thus making things a bit quicker.

If this sounds a lot like what a compiler (or transpiler) and linker would do – it is exactly what it is.

So, with a bundler like Parcel, I can build my *.vue files into Javascript, which I then can run in my Browser.

What is the Point – part 2

So, what does a Vue file look like?

    <span v-if="(!editing) && (!!value)" @click="on_start_editing()" >{{value}}</span>

    <span v-else-if="(!editing) && (!(!!value))" @click="on_start_editing()" class="placeholder">{{placeholder}}</span>

    <span v-else-if="editing">
        <input v-focus="" :value="value" @input="$emit('input', $event.target.value)" @keydown.enter="on_end_editing()" @blur="on_end_editing()" type="text" class="form-control">

export default {
    name: "editable-text",
    components: {},
    props: ['value', 'placeholder'],
    data: function() { return { editing: false, } },
    methods: {
        on_start_editing: function(e) {
            this.editing = true;
        on_end_editing: function() {
            this.editing = false;
    directives: {
        focus: {
            inserted(el) {

Apparently you can stuff some css in there as well. But still, the whole script part is just the same mess as before. Why, when making a transpiler, didn’t anyone come up with a sane syntax for properties, data, methods and directives?

Django and the Modern Frontend

Ignoring my annoyances with the the single file Vue components, it is still an improvement, so let’s continue.

I would like to build my frontend and backend in one go. I’d like a single git hash and know that the frontend and backend there fits together. At the same time, I don’t want to deploy my entire development toolchain to the production server. What I want is:

  • The Django stuff running an an uwsgi application.
  • All static files served directly from nginx.
  • All the frontend stuff to be a set of static files.

Enter: django-compressor-parceljs. Using this Django extension I can have parceljs do it’s work on the fly, in the Django app – and it allows me to build for production as well. More on this later.

However, going for parceljs took me one step beyond what I could do with simply including scripts into my web pages, I needed to install npm. I have a lot to say about this tool. To some extent it feels like it is trying to solve a problem with tooling more complex than the system, but let’s get to some specifics:

  • parceljs (and lots of command line tools) wants to get installed globally. This will collide head on with the distro, so it is a no-go for me.
  • When installing locally (in your dev tree) with npm, the executables end up in node_modules/.bin. A hidden directory. Thanks. Still, fixable by updating PATH.
  • The number of dependencies pulled in for a fairly small project is quite astonishing. The number of dependencies is huge. My package-lock.json clocks in at 6243 lines… That is for Vue, Axios and Parcel.
  • Many dependencies likes to not install their dependencies, but instead to tell me to do so in the form of error messages. I’m not sure I get the point of this – just install it, or have a recommends option or something.

Having setup django-compressor-parceljs and updated my PATH to include node_modules/.bin, it actually works. However, since the vue-files are compressed, the development experience is not perfect. I’d much rather be able to debug the vue-files directly via the Django server. If anyone knows how to, please tell :-)

I also created a small script that sets the COMPRESS_OFFLINE to true and then compil^Wcompresses the frontend on my development machine, meaning that I don’t have to install npm and all the dependencies of vue, parceljs, and axios on the server.


I’m still learning. I bet there is a lot that can be improved in this workflow. I also need to work on my CI/CD to do the offline compression automatically, and such. Still, I have some reflections to make from the viewpoint of a C++, Qt, QML, Python perspective:

  • All my web frontend friends appreciate the separation of behaviour from style from state. This can be done in QML, but requires discipline.
  • To me, the vue files are only half-way there. The script part of the file would benefit from a domain specific language such as QML, instead of putting everyting into a dictionary based on conventions.
  • To a large extent it feels like the web frontend world reinvents terminology – I really hope that there are some people carrying over experiences (in both directions). For instance, a bundler is just a transpiler + linker. Why not reusing common Makefile systems instead of re-inventing the wheel?
  • Why can’t I do nice inheritance and templating within Vue components? I.e. why do I have to duplicate all code for a line edit version of a clickable text when I have the text area version already? What am I missing?

Is anyone else doing this? How does your setup look and what does your working process look like?

Also, Happy Holidays and God Jul!

6 December 2020

The foss-north pod about Licenses and Copyright has been around since May 1st, so I decided to talk a look at the stats. We gather very little statistics, but what I know is that we have 635 followers on YouTube and 108 over at conf.tube (a peertube instance). We also serve the pod directly from foss-north.se/pod, where we keep 14 days of access logs. What can we read out from them?

First of all – we decided to provide the pod as ogg or mp3, and it seems like a majority of you prefer the ogg version.

The downloads per day is a mess. From the episodes page I can see that we released the last two episodes on Nov 20, and Dec 4. I was a bit surprised not to see a spike on the 4th or 5ph, nor any apparent weekend vs workday pattern.

So, what was downloaded? Keep in mind that this is a two weeks window, and episode 26 was available for the last 3 days only. It seems like we have an even spread of listeners across many episodes, with a focus on episode 25, which was the latest during the time window.

Does this mean that we have a steady flow of new listeners? Not sure – the YouTube subscriber count raises steadily, so it might be the case.

Finally, let’s have a look at the user agent strings. I’ve tried to classify this into client OS for browsers, Apps for obvious pod listening apps, Bot for bots and other for the unidentified ones.

To my surprise, quite a few of you are listening from Windows machines. Then we have the Linux devices followed by Android, and Apps. Unless you count the bots, of course.

Another surprise is that OpenBSD is more common than OSX among our listeners.

It is possible to dig out more from the logs, but the evening is approaching. There are some surprises here, but it is good to see that we have had 800+ downloads over the past two weeks. To be honest, I was a bit worried when we shifted from YouTube to a podcasting format in August. Our views dropped quite dramatically on YouTube, but it seems that you found your way to the pod instead.

At the end of the day, the positive feedback given over social media and email is worth more than stats, so we will keep on going. Also, clocking in at almost 200 views on our episode on the definition of copyright and 250+ on the history of free and open source is quite amazing in my book, as this is a quite a narrow meta-topic inside the free and open source movement.

4 December 2020

Advent of Code and Learning

Från Johan Thelin 4 December 2020 15:46

So, I decided to do Advent of Code this year too. I usually get stuck part of the way, but I still think that it is a fun exercise.

This year the plan is to use python and pytest the whole way through. Every day that i learn something that I want to remember, I add a til.txt file in that sub-directory. You can follow my progress and learnings in the git repository.

The lessons this far includes:

  • When using readline to read lines, the line-break is included, so len(text) will be one character more than expected. Strip your strings!
  • When doing number of ifelifelifelif, make sure to include an else, even though you know that all cases are covered. I run assert False in the else clause.

As you can see, these are on the level of small snippets of wisdom right now. I’m sure it will be more interesting as the problems become more complex.

27 November 2020

Forest 🌳 Arial Panorama

Från Svendus Blog 27 November 2020 10:05

You can now easily embed your panorama on your wordpress blog

10 November 2020

QmlBook: Felgo Service Integration

Från Johan Thelin 10 November 2020 09:55

Felgo has kindly sponsored the QmlBook, which has resulted in a new chapter. The topic this time around is the Felgo Qt extensions for
integrating various services that are commonly used by app developers, the Felgo cloud builds, as well as their live reloading technology.

When building modern apps there are many things that you might want to integrate – in-app purchases, ads, analytics, user accounts, user settings, real-time sharing of data between devices. Felgo provides integrations of common solutions for this which let’s you focus on developing your app. In the Felgo Plugins chapter, we look at some of them.

Another hassle when developing apps is that you need a Mac to build for Apple devices – unless you use Felgo cloud builds. Felgo cloud builds is a CI/CD solution for building and deploying Qt apps directly to an app store.

In addition to this, the chapter contains a deep dive into the Felgo live reloading solution. We had a quick look at using this in the first Felgo chapter. In this chapter, we look at how you can integrate it into your own executables, as well as how you can use it to develop on multiple devices simultaneously.

9 November 2020

Översättning av hakchi2-ce

Från Daniel Nylander 9 November 2020 16:01

Daniel Nylander

Dyker in i översättningsdjungeln igen.. denna gång det lilla programmet hakchi-2-ce som används för att utöka en NES Mini eller SNES Mini.

19 October 2020

Intense weeks

Från Johan Thelin 19 October 2020 11:54

End of October turns out to be one of the highs when it comes to workload this year. Everything happens at once – there are two public events that I’d like to tell you about.

The first one is running lights. This is an annual running competition organized by AIF Friidrott, the sports club my kids are active in. This year, this means organized by me and postponed due to COVID-19, but the virtual races started this weekend and the arena race will take place on the 24th.

If anyone of you are in the Alingsås area and enjoy I highly recommend you to join. The weather looks nice, and we will light up the arena with live fire, so it will be a great evening.

The second one is the foss-north 2020 take II event. This spring, we decided to try to organize a physical foss-north event this fall, as obviously the pandemic must be over by November. This seems to not be the case. :-)

Instead we are running a single day event on November 1 with six handpicked speakers. The event is virtual and free for all.

I would like to tell you about the speakers one by one, because I’m very excited about each and everyone of them.

Andrew 'bunnie' Huang

In the morning we welcome Bunnie Huang who will talk about the precursor project. Precursor is an open hardware platform for secure, mobile communications and computations. The focus is on security aiming to create a trustable platform.

Simon Ser

Next up is Simon Ser. He will talk about how to get pixels onto the screen in a modern Linux stack. This means a deep dive in the Kernel Mode Setting (KMS) interface. How it exposes hardware blocks and how to use it to get images shown on the screen.

Ramón Soto Mathiesen

The morning session then ends with Ramón Soto Mathiesen taking us into the land of Domain Driven Design (DDD) using Algebraic Data Types (ADT). Ramón has a background in functional programming languages and brings this knowledge into the world of multi-paradigm languages such as C#, Rust, and Swift.

Carol Chen

The afternoon session starts with Carol Chen from Red Hat Ansible. She works as a community manager for Ansible. She will be talking about how they move have moved from collections to contributions to conferences.

Lars Brinkhoff

We then continue with Lars Brinkhoff who will talk about the Incompatible Timesharing System (ITS). Lars works with restoring ITS and recreating the history from these early days of computing. ITS is of particular interest at foss-north at is the platform where tools such as Lisp, Logo, Scheme, Emacs and Zork where developed. This is where the foundations for the free software movement where born – quite literally.

Tor-logo by Stanchenko on DeviantArt

The day then ends with Alexander and Georg who will talk about Tor, the anonymity network. They will discuss why diversity is essential for reaching security and anonymity.

So, the next days will be crazy hectic, but it is all for something good. First a cosy evening of running on an arena lit by live fire, and then a day of talks about various FOSS projects.

I hope to see you there!

11 October 2020


Från Svendus Blog 11 October 2020 06:46

21 September 2020

Felgo in the QML Book

Från Johan Thelin 21 September 2020 18:46

Over the past year I’ve been bumping into the Felgo crew at various Qt events. They take Qt to the next level. It all started as a game development framework for Qt, but has turned into a powerful app development framework taking a lot of the rough corners of Qt, and extending the tooling with a powerful live reloader at the same time.


To showcase how the Felgo SDK fits into the bigger picture, and how much it actually helps creating apps, we agreed to extend the QML Book with a Felgo chapter. The chapter is built around a messaging app and showcases the whole UI creation from initial skeleton to working app.


We also cover a bunch of other things such as how to get started, the QML Live reloader, as well as some more advanced topics such as native dialogs, simplified networking and the JsonListModel.

Big thanks goes out to Felgo for supporting this work and helping to make QML Book better.

7 September 2020

Akademy 2020

Från Johan Thelin 7 September 2020 08:12

I had the pleasure of speaking at Akademy 2020 this weekend. This year Akademy is virtual, but I still got the feeling of a very interactive event. Interesting questions, greenroom for the speakers, and generally a nice experience. Big thank you to the organizers!

The video below should start roughly when I go on stage.

For the interested listener, you can find the slides here: https://e8johan.se/presentations/2020-09%20akademy%20v1.1.pdf.

22 August 2020

Eveninq walk Vadstena Sweden

Från Svendus Blog 22 August 2020 17:24

We Just keept the camera facing North
104 panoramas shot on a evening walk yesterday with an insta one X
the images comes direct from a batch stitch 8000×4000 (32 MPixel) in Insta360 Studio 2020 the camera are hold above the head on a standard insta selfie stick the mirror ball to protect the photographer in the Nadir are batch created in Pano2VR 6 buy editing the Master node in the application, do not forget to click the map icon to see the location on Google Maps 🇸🇪

Direckt länk till panorama https://svendus.se/2020-vadstena 


Evening walk Vadstena Sweden

17 August 2020

The API wars – 16 years later

Från Johan Thelin 17 August 2020 14:33

It is more than 16 years since Joel Spolsky wrote How Microsoft Lost the API War. The bonds of the win32 API lock-in is broken and the free web is here to take over.

The web has come a long way in the past 16 years. Richer APIs, dramatic performance improvements, and an ubiquity that surpasses anything else that we as a human race have experienced. Easy of deployment is king and the easiest deployment of all is to simply browse to a web page.

Creating web apps has always been riddled by browser compatibility caveats. Various services have been around to test rendering across browsers and versions, and frameworks to address common scenarios have evolved to create a write-once, deploy-everywhere story.

The modern web browser has become our universal runtime environment. It is what Java and .net aspired to on a crazy scale. However, it is not only a runtime environment. It is the perfect client server setup to provide everything as a service.

With the focus shifting from the browser to the actual contents, the value of controlling your own browser engine has become less and less attractive, and last week, Mozilla begun what I think is the final downward spiral of the last alternative to the Google led Chrome family of browsers.

(There are so many things I’d like to say about this. For instance, you should know about the Mozilla manifesto, as well as their funding being secured for the next three years. But I digress).

A browser engine is a hugely complex beast these days. An incredible number of backwards compatibility hacks, while ensuring high performance on both rendering and Javascript execution. Add a broad range of APIs for integration into the native host platform. Combine that with privacy and security concerns, and the code base is starting to turn into a beast.

Now, it seems that Google controls the leading browser engine and thus, holds the direction of the web as we know it in their hands. Google has not only won the search, contents, and personal data collection wars. They also won the API war.

Having a single, almost monopolistic entity controlling all these aspects of life makes me feel very uncomfortable.

I’ve started my own personal de-googling journey, and I know that there are many others doing the same. Taking back ownership over their email, shifting from Google Drive and Google Apps to alternatives such as Nextcloud. But also moving from platforms such as Twitter to federated alternatives such as Mastodon.

A lot of this is probably seen as nostalgia from an earlier generation growing old. The web has moved on and many parts of what I love about the internet are no longer in broad use. For instance, small forums are migrated to Facebook groups, IRC is taken over by freemium alternatives such as Slack, RSS feeds become less and less common, and so on. The web is being centralized and has been so over the past decades.

However, I believe that the tide can be turned.

On the contents side, early adopters are moving to federated and self-hosted services where data lock-in is impossible. Privacy concerns become more common outside of the technology sector. What is needed is great alternatives that are easy to deploy. Examples that I use are Nextcloud, ttrss, fripost, and Signal.

But what can be done about the API war?

An attractive possibility, in my view, is the raise of WebAssembly. It enables the deployment of complex applications into the browser, really turning the browser into the universal run-time environment. It does so for compiled languages and at great performance.

What about deploying a bare bones wasm run-time environment, and then deploy the browser into it. That way, the complex beast that is the browser of today, turns into a much more manageable animal that is the wasm run-time.

What would this change? Short-term, very little. Even if the Chrome engine is compiled to wasm and executed inside an outer shell, the experience and value is still delivered through a very complex code base controlled by one of the most dominant companies in human history.

Long-term, it would mean that the ease of deployment would apply to not only the web, but to the wasm run-time. We would shift from the HTML/CSS/JS world to a wasm world.

Not only would this mean that the universal run-time becomes smaller and more manageable to maintain by multiple parties, it also opens the opportunity to shift to a optimized way to run software (the hardware requirements of the modern browser isn’t really environmentally friendly – it drives energy usage, as well as hardware obsolesce).

Now, all that is needed is time. An idea without execution, is merely a dream. I might be a dreamer, but I think that this is the way forward.

31 July 2020

Adventures in (Dyn)DNS

Från Johan Thelin 31 July 2020 20:20

So, I made the silly move to rely on my hardware supplier to provide me with a dynamic DNS service. Naturally, this offer expired, and I could no longer reach my home server. Because of Murphy, this naturally took place when I was away from home with no access to anything.

So – how does one find the way back home?

Luckily, I have a VPS that I log in to now and then. After a quick duck-ing (duckduckgo is my friend), I found the last command which was the first piece of the puzzle. Now I had a list of potential IPs.

Did I mention that I travel a lot?

There were quite a few IPs there. Pre-COVID-19, it would have been worse. Still, I found a few likely candidates based on frequency of use. Then I found this handy list of IP blocks in Sweden. Now I could tell my mobile data provider (Telenor) from my fibre data provider (Bahnhof).

Quickly adding my home domain and the suspected IP to /etc/hosts on my laptop allowed me to confirm my suspicions. Once in, I could setup duckdns for dynamic DNS, change the CNAME record of my domain, and now all is operational again.

I learned two things from this:

  1. Don’t rely on the time limited offers of hardware vendors for even the most trivial service. They are all trying to convert you into a as-a-Service deal and make you pay an annual fee. (i.e. read the fine print).
  2. I was really happy to use a CNAME record to redirect a subdomain of mine to my home server, so even when using a dynamic DNS service, I could switch to another dynamic DNS service. (this was pure luck – no foresight from my side was involved).

Also, while on the the topics of experiences. If you have the possibility, you should use bahnhof as your ISP. They have a track record of opposing surveilance laws and work to protect the privacy of their customers. Also – I’ve had zero issues with them since switching some 15 years ago, so I can recommend them from that perspective as well ;-)

19 July 2020

It finally arrived

Från Johan Thelin 19 July 2020 09:19

After waiting a bit over a month, followed by an agonizing week when the new gizmo was at my DHL pickup point and I was some 2h by car away in our summer house.

What gizmo? A Pinebook Pro!

The Pinebook comes in many layers. Like, properly many. I guess this means that it is safe during transport. At least mine arrived without any bruising despite a long journey from Hongkong to Alingsås.

After powering the system on it took quite a long time for the system to reach the Manjaro logo, but once up and running, things move along at a decent pace.

Initial impressions are positive. I had to crank up the backlight a bit, but I’m sitting outdoors (it is overcast). Right now I’m installing the initial set of software updates (some 400+MB to download) while I type this. I also set the keyboard layout to Swedish. I have an ISO keyboard model, so all the keys are there and I don’t mind that the keycaps say something else than what they type.

On the topic of the keyboard. I was warned about the keyboard feel. I was also told that the Pro-model is better than the original Pinebook (which I’ve only used for ~5s at fosdem). To be honest, the keyboard is decent, but not on par with my Dell XPS13, nor my Sculpt Egonomic keyboard.

I still have the night time hacking test to perform – will my wife accept this keyboard clicking in the early morning hours? She preferred the MacBook Pro over the XPS13, so let’s see how this fares ;-).

I also have to see if I can adopt to Manjaro Linux, or if I’ll go to Debian, which I run on all my other machines. It has been years since I tried any alternative distro, so I’ll give it a few days at least to see how much I will miss apt-get – at least it runs KDE Plasma ;-)

15 July 2020

foss-north kdenlive workflow

Från Johan Thelin 15 July 2020 20:21

As some of you might already have noticed, we’ve complemented foss-north with a new pod / vod / vlog – I’m not sure what to call it. Basically, it is a video based pod cast (making it available as a audio only pod-cast is high on the todo). Our main focus right now is a series on licenses and copyright, but there is more to come.

As a part of this, I’ve started editing videos in kdenlive on a weekly basis, and I’m very happy with it so far.

In this blog, I want to share my workflow. It is probably far from ideal, but it does the work for me.

I usually start with a set of presentation slides that we’ve used to direct the discussions. These are exported as pdf, which is then converted to 1920×1080 pngs for consumtion in kdenlive.

I do this in two steps using ImageMagick, as the results seems nicer by first rendering too large images and scaling them down.

convert -verbose -density 300 ../open\ projects-1.pdf -quality 100 -sharpen 0x1.0 11.png

mogrify -resize 1920x1080 *.png

The session is recorded using OBS from our Jitsi instance, but we also encourage each participant to record their audio separately, as it makes it easier to fix things afterwards. (foss-north now self-hosts a Jitsi instance – check out https://github.com/e8johan/virtual-conf-resources to learn about how to setup virtual conferences).

You would be surprised over how many times we’ve run into issues with one or more sound recordings. We’ve had:

  • Too low volume (inaudible)
  • Too high gain (noisy)
  • Local echo of the rest of the participants in one recording (no use of headphones)
  • No recording (forgot to press record)

I’m sure the list will grow longer as we record more episodes :-)

Before I start cutting the recording, I use one of my favorite features in kdenlive. First I set the Jitsi recording as the audio reference as shown below.

Then for each audio track, I tell kdenlive to align it to the reference. This will position it correctly in relation to the Jitsi recording, meaning that I can fade in and out of individual recordings without having to worry about any time shifts.

Finally, I select all the audio recordings and group them. This means that all editing I do (cuts, movements, etc) is applied to all channels.

Now it is just a matter of listening for trouble (you can spot awkward silence in the visualization of the audio tracks), press i to mark the beginning of a section, press o to mark the end, and then shift+X to cut it out.

In general, I try to edit as little as possible, but tightening some parts by removing silence, and sometimes remove failed parts when we’ve decided to start over a section.

Finally I add the pngs as a video stream, our pre-recorded intro sequence, and a YouTube friendly end-screen and click render and go to bed :-)

29 May 2020

foss-north: Enablement Talks

Från Johan Thelin 29 May 2020 06:09

During foss-north 2020 we had a group of talks related to using free and open source in various settings. I call them enablement talks. Someone with a more salesy mind might have said success stories.

This year we had tree such talks. One from about SVT’s (the Swedish public TV broadcaster) video streaming platform by Gustav Grusell and Olof Lindman, one from arbetsförmedlingen (the Swedish public employment service) by Johan Linåker and Jonas Södergren, and about Screenly OSE by Viktor Petersson, a digital signage solution.

We’ve also decided to experiment with a series of shorter videos, and we started by explaining licenses.

26 May 2020

Photoframe Hack

Från Johan Thelin 26 May 2020 19:30

Sometimes you just want to get something done. Something for yourself.

You do not intend it to be reused, or even pretty.

You build a tool.

My tool was a photoframe with some basic overlays. I wanted the family calendar, some weather information (current temperature + forecast), time, and the next bus heading for the train station.

To make this acceptable in a home environment, I built it as a photoframe. You can find the sources in the hassframe-ui repository on my github.

A hidden feature is that if you tap the screen, a home automation control panel slides up. That way you can control all the lights, as well as heat in the garage and an AC in the bedroom. Very convenient.

All this is built using QML. Three somewhat useful models are available:

  • IcalModel, taking a URL and parsing whatever it gets back as ICAL data. It is a very naive parser and does not care about things such as time zones and other details.
  • YrWeatherModel, uses yr.no‘s public APIs to pull out a weather forecast for a given location.
  • ButStopModel, uses the APIs from resrobot to look for departures to the train station from two bus stops close to my home and then merge the results into a model.

I also have a bunch of REST calls to my local home assistant server. Most of these reside in the HassButton class, but I also get the current temperature from there. These are hardcoded for my local network, so needs refactoring to be used outside of my LAN.

All of these interfaces require API keys of one kind or another – be it a proper key, or a secret URL. These are pulled from environment variables in main.cpp and then exposed to QML. That way, you can reuse the components without having to share your secrets.

All in all the code is quite hacky. Especially main.qml. I refactor out parts from there now and then, but the photoframe works, so its not anything that I prioritize.

Currently it runs on a Raspberry Pi on top of Raspbian. I want to build an optimized Yocto image making it less hacky and more pre-packaged. Perhaps there will be a rainy day this summer and I’ll get around to it. Burkhard has prepared the instructions needed over at embedded use.

1 May 2020

Kubuntu 20.04

Från Påvels blogg 1 May 2020 12:59

Sista veckan har jag uppdaterat mina datorer till senaste Kubuntu 20.04. Linux är skojigt för att det finns så många varianter. Jag har dock nästan slutat att testa runt. Jag har hittat hem i skrivbordsmiljön KDE. KDE är avancerad och går att modifiera nästan hur mycket som helst. Jag har lagt upp mitt arbete på ett sätt som passar mig men säkert ingen annan. Många program som följer med är dessutom Linuxvärldens mest avancerade och bästa inom respektive område. Jag föredrar stabila Linuxdistributioner framför rullande. Ett tag använde jag Manjaro, men det var ständiga småproblem. Det mesta gick att lösa, men jag lade mer tid på att få datorn att fungera än jag ville. Med det sagt är Manjaro ett jättebra projekt. Visst har jag stött på några småbuggar i nya Kubuntu och till och med postat en buggrapport, men allt har gått att fixa.

Det är otroligt hur mycket Linux gått framåt sedan jag började använda systemet för drygt tio år sedan. Även om det allra mesta fungerade redan på den tiden var det mer bekymmer med hårdvara och program. Dessutom hade varje utgåva av *buntu sina egenheter. Det som fungerat fungerade plötsligt inte längre. Nu flyter allt betydligt bättre.

Jag passade på att uppdatera BIOS på en av mina datorer. För att göra det var jag tvungen att först installera Windows 10, därefter uppdatera BIOS och sedan installera Kubuntu. Det är bedrövligt att man måste ta sådana omvägar.

Det positiva jag kan säga om Windows 10 var att det var ”enkelt” och snabbt att installera. Snokandet började emellertid direkt med 20 frågor om hur mycket information jag frivilligt skickar till Microsoft. Resten snor de. Obegripliga licensavtal och att jag var tvungen att logga in på ett Microsftkonto var grädde på moset. Att systemet gick snabbt att installera är dessutom en sanning med modifikation. Då Windows 10 är på plats måste man jaga reda på program, ladda ner ett efter ett och installera. Det tar dagar. Kubuntu med alla program tar max en timme att få plats.

Tonen i Linuxvärlden har ändrats. För tio år sedan var stämningen militant och Linux skulle ersätta Windows på skrivbordet. Flera skrivbordsdistributioner som Ubuntu, Mint med flera ”dummade ner” sina användargränssnitt för att locka Windowskonvertiter. Man glömde avancerade användare och kreatörer. Jag tror detta var ett stort misstag. Linuxrevolutionen på skrivbordet uteblev och nu verkar många Linuxforum föra en tynande tillvaro.

Jag är en avancerad datoranvändare. Jag skriver, bildhanterar och skapar professionellt. Det är därför jag använder Linux. Det är enkelt och pålitligt. Jag kan komma åt mina filer och mitt arbete utan att betala programuppdateringar eller tvingas använda ett och samma program. Jag kan modifiera min arbetsplats och byta ut den då jag ledsnar på den. Allt detta kostar 0 kr. Jag ger tillbaka genom att översätta program och donera till projekt jag uppskattar. Detta är mer etiskt än att bli mjölkko åt ett amerikanskt storföretag.

Nåväl! Alla blir lyckliga på sitt sätt. Nu är mina datorer som de ska vara de närmaste två åren!

flattr this!

Flattr this!

21 April 2020

Note: play the slideshow in MS Edge or Chrome Browser (Firefox only goes 4K)
Visit our home village in Sweden
Music Cyber Link Opposite Worlds Collide (a)
MPE6-4 H265 HEVC 8K 360 Video 7680 x 3840/30p (37 Mbps) 128kb
created from 29 panorama images 20000×10000 shot in the Spring 2019 with a DJI Mavic Air on 75 meters altitude.
The 25 images in the Panoramas are batch Stritched in PTGui 11 Pro
The 360 Slideshow are created in Cyber Link PowerDirector18 (64-bit)
with a Custom build 8K 7680 x 3840 rendering template
You can see the original Panorama on this link
Note Do nott forget to play with the Projections in the Panorama 👍

19 April 2020

The Cost of no Architecture

Från Johan Thelin 19 April 2020 16:16

Like many others, I enjoy various reverse engineering and tear-down stories. Personally, I mean things like iFixit tear-downs and Ken Shirriff’s blog, so I started following this tweet thread by foone.

This continues with another tweet sequence about getting software running on the remote control. Having enjoyed these tweets, I started thinking.

The Harmony remotes are quite expensive in my mind. I can’t find any exact numbers for the number of sold devices, but I found this 2018 Q4 earnings report. Looking at the net sales, I guess the remotes are either “Tablets & Other Accessories” or “Smart Home”. They represent sales net sales of ~107 and ~89 MUSD over 12 months. Let’s pick the lower number and just look at magnitudes. The Harmony 900 seems to have retailed for ~350 USD back when it was new. So, if all the Smart Home stuff was harmonies, we’re looking at 250k units over a year. So I’m guessing the magnitude is around 10k – 100k units annually – but the Harmony 900 is from 2013, so I assume that it sold closer to the lower number, if not below. The market was new and so on.

Then we look at the tweets again. What have we got? Let’s put aside security issues, unencrypted communications, and other clear mistakes and just look at how the device is built.

Flash to drive the UI, double web servers on-board, Lua, QNX and what not. A 233 MHz CPU and ~64MB of FLASH – for a remote control. From an engineering perspective, this sounds like a fun system to work on – from an architecture perspective, it looks like a ball of mud.

Back in 2013, QNX might have been a good choice compared to Linux. Today, with Yocto and similar tools for developing embedded Linux systems, it feels like an odd choice to add a license cost to such a device. But no biggie. Back in the day this was not an unreasonable choice (and still isn’t for certain applications).

The Flash stuff. There were alternatives back in 2013, but sure, there were plenty of developers at hand and things like Qt QML was still probably a bit clunky (I can’t recall the state of it back then – it required OpenGL ES, which I guess was a big ask back then).

But the mix of techniques and tools. The on-board web servers. The complexity of a small system and the costs it brings to maintenance and testability. If this is the foundation for Harmony remotes and a platform that has been used for the better past of the past decade, I wonder if the added engineering costs for architecture the platform to be more optimized early on would not have paid off in lower maintenance costs, as well as lower hardware costs.

I know how it is when you’re in a project. The deadline is there in big writing on one of the walls. You can get something working by stringing what you have together with duktape and glue. The question I’m asking myself is more along the lines of how do we run embedded systems engineering projects? Where did we go wrong? Why don’t we prioritize the thinking and refactoring over the just-get-this-thing-out-of-the-door?

The answer is time to market and such, but over a decade of building on a ball of mud, the economical numbers start adding up in favour for the better engineered product. For continuous improvement. For spending time thinking about how to improve the system as a whole.

16 April 2020

The Internet Talks

Från Johan Thelin 16 April 2020 17:46

I’ve previously written about the licensing and embedded talks of foss-north 2020. This time around, I’d like to share the recordings of the Internet related talks.

Internet is a very broad topic, so it is hard to classify talks as not being Internet related these days, but the following three talks stand out.

The first speaker is an old time speaker at foss-north, Daniel Stenberg. He has spoken at foss-north several times, but never about his main claim to fame: curl. This time he righted this by delivering a talks about how to Curl better.

Maintaining privacy on the Internet is a big topic. This is a field where it is hard to deliver black or white answers. Elisabet Lobo-Vesga presents DPella, a query language for differential privacy. Using this technology, it is possible to make the tradeoff between how private the user is vs how detailed the data returned is.

The Internet talks end with Patrik Fältström. One of the people who has been around the Swedish Internet scene the longest. He talks about Keeping Time. It is a journey into leap seconds, atomic clocks, the speed of light and other hassles when keeping clocks in sync over a large network.

The talks are already available on conf.tube, and the presentation material can be found by following the links to each speaker. For those of you who prefer YouTube, the talks will be made available shortly on the foss-north channel. Subscribe to get notified when they are.

12 April 2020

The Embedded Talks

Från Johan Thelin 12 April 2020 15:00

The foss-north conference strives to have an assortment of various talks. The point is that visitors should see something unexpected and that the conference should attract all types of visitors to ensure that we as a community can meet across various industries and problem spaces.

This time I’ve selected three talks about embedded systems from foss-north 2020. The talks touch on building embedded systems around Linux. If your reader does not show you the embedded videos, make sure to follow the actual page or go to our conf.tube channel to see all the contents.

First out was Ron Munitz talk on understanding and building minimal Linux systems. This talk proved to be a real deep dive into the Linux kernel – including setting up a debugger to the kernel itself.

The next embedded speaker on the program was Chris Simmonds. He discussed if going with Yocto or Debian is best for your embedded Linux project. This an interesting topic – how much is customization worth compared to other aspect such as build-time.

The embedded set of talks ended with Drew Fustini talking about running Linux on the RISC-V. This talk dives deep into the hardware part of embedded systems, but also Linux. By being able to run Linux on RISC-V, which is open hardware, we are very close to an completely open eco-system.

The three talks are already available on conf.tube, and the presentation material can be found by following the links to each speaker. For those of you who prefer YouTube, the talks will be made available shortly on the foss-north channel. Subscribe to get notified when they are.

7 April 2020

What a License Track!

Från Johan Thelin 7 April 2020 16:38

The foss-north 2020 videos are rolling out. This year we’re doing a small experiment, so everything is available at once over at conf.tube, while we roll the videos out gradually at YouTube in an attempt to feed the algorithm (like and subscribe!).

This year we had a great set of licensing related talks, and I’d like to discuss them all in this post.

Monday morning started with Frank Karlitschek and his talk Why the GPL is great for business. This a great overview of how you can build an free and open source business – pros and cons and pitfalls to avoid.

Next up is Gabriel Ku Wei Bin from FSFE who talked about REUSE. The REUSE project is about helping creators choose and apply free and open source licenses.

This is followed by Pavel Kopylov and his talk Hacking the legal code of an open source license. This talk is about understanding how licenses works and how to use them.

This is followed by Jason Hammond from Whitesource talking about their compliance tooling and why compliance is important.

The final talk in this track is by Adriaan de Groot talking about the KDE Free Qt Foundation. This is an interesting aspect, as it is about protecting the customers by offering a more liberal license at a given point of time.

Historically we’ve always split talks on a specific topic during the conference to ensure that people move about in the hallways and that most visitors get to see something unexpected. Since we record everything, we can now do both – clustering by topic and a linear playlist.

24 March 2020

When placing this year’s foss-north event over a quarter break I knew that I would be busy both at work and at the conference. Little did I know what was beyond the horizon ;-)

As a consequence of the COVID-19 situation, the event has to be converted from a physical meeting to a virtual event. This means many things to an organizer: renegotiating all sponsorship contracts, renegotiating with the physical venue, setting up the infrastructure for a virtual event, rescheduling all speakers, and so on.

We at foss-north are lucky. All sponsors continue to stay with us and the venue was very cooperative when it came to rescheduling the event.

I have started to document our virtual conference setup so that other conferences in the same situation can learn. Pull requests are welcome!

This Sunday we decided to stress test the infrastructure by running the lightning talks. This is a good test case, as it involves a maximum number of speaker transitions, as well as more frequent QA sessions. From an organizer perspective, this is really like running a full day of the conference in 90 minutes.

I’m happy to tell you that the talks went well! You find them below. Following the links you find slides as well as recordings of the sessions.

Develop better software with usability testing by Andreas Nilsson
Running Android on the Raspberry Pi by Chris Simmonds
The Yocto Project 10 minute quick-start guide by Ron Munitz
Getting started with your smart, connected, vehicle project by Dimitris Platis
Seven years in Tibet^W^Wat Home by Kristoffer Grönlund
Linux on RISC-V by Drew Fustini
Singularity container platform by Anders Björklund

We’ve also been able to get most of the conference schedule in place and just have a few rough edges to fix before the big event. I am extremely pleased with how this has turned out. We still have a stellar speaker setup and I hope that you will all join in and watch the streams. The event is free for all and open to all and runs from March 29 – April 1.

18 March 2020

On Sunday March 22 foss-north 2020 will go virtual with a set of lightning talks. This will be the dress rehersal before the big virtual event March 29 – April 1. Join us and enjoy the fun!

13 March 2020


Från Johan Thelin 13 March 2020 08:47

It is with great regret that I have to announce that foss-north 2020 has been postponed due to the COVID-19 situation.

It will be replaced by a virtual event during the planned dates (March 30-31), and a physical event during the fall.

We regret any inconvenience that this causes our guests and sponsors. At the same time we appreciate the great support of our sponsors who unanimously support us in these difficult times.

Details will be shared at https://foss-north.se/2020/ as we learn more.

This is turning out to be a really shitty week. But we will prevail together.

I’m always positively surprised about the amount of support and love out there in difficult times. It is what makes the world go around.

9 March 2020

foss-north 2020 Training Day

Från Johan Thelin 9 March 2020 07:48

Let’s talk about the foss-north 2020 training day! Every year we invite interesting speakers for the conference. Some of them are also teachers, and some of them are willing to hold a heavily discounted open enrollment training the day after the conference.

This year we offer three trainings:

You can get a training as an add-on to your ticket. You can even upgrade your ticket and add a training afterwards. Check it out here: https://foss-north.se/2020/tickets.html.

This gives you four days of contents: Community – 2x Conference – Training. And you get to visit Gothenburg!

6 March 2020

foss-north 2020 Community Day

Från Johan Thelin 6 March 2020 13:47

Let me tell you about the foss-north 2020 community day. It has been an idea for many years, but it all started last year. The idea is that we welcome open source projects to a day of hacking, workshoping, teaching and fun the day before the conference.

This year we are visited by Ansible, Debian, FreeBSD, Gnome, KDE and RISC-V. We a functional programming group meeting and a badge hacking workshop.

The community day is free of charge. It works thanks to the volunteers from the projects, and all the companies helping us with venues.

You are of course very welcome to join the conference days too. For them you will need a ticket. You can learn more here: https://foss-north.se/2020.

16 February 2020

More foss stuff

Från Johan Thelin 16 February 2020 10:15

It is busy days at the moment – but in a positive way.

First of all – a huge thanks to everyone who submitted to the Call for Papers for foss-north 2020. We have over 70 hours (!!!) of contents to squeeze into two tracks over two days. As always, it will be hard to pick the speakers to create the very best program.

Other foss-north activities includes starting to populate the community day activities, as well as getting a whole bunch on sponsors onboard. An extra big thanks to Luxoft and Red Hat Ansible for helping us by picking up the Gold Sponsorship packages. Ansible are even running their European Contributor Summit as a part of the foss-north Community Day together with events by KDE, Gnome, FreeBSD, Debian, and a hardware hacking workshop. I’m really looking forward to this – if you want to join in with your own project, workshop, hackaton, etc – just ping me!

The other big foss-north change for this year is that we are finally abandoning Eventbrite for a self-hosted system. Big thanks to Magnus Hagander helping us getting the pgeu-system up and running. At the moment, we offer login via Github and Google OAUTH. We’re looking into setting up a self-hosted OAUTH service as well, to let you log in locally, but that will not happen for the 2020 event due to time reasons.

Closer in time is the next local foss-gbg meetup. We are running an event around React together with our good friends at Edument. We already have 50+ registered attendees, so it will be fun!

In other news – I’ve also released Ordmonster – if anyone has kids who wants to get started reading. This is a complement to the Mattemonster app for basic maths launched earlier. Both are made with Godot, a tool that I enjoy more and more.

9 February 2020


Från Johan Thelin 9 February 2020 19:13

Just a friendly reminder that the Call for Papers for foss-north 2020 is closing tonight. Make sure to get your talk submission in!

Also – if your project wants to join the community day – let us know at info -at- foss-north.se. We set up a venue and promote – you bring the contents!

31 January 2020

fosdem, day #0

Från Johan Thelin 31 January 2020 10:46

I arrived in Brussels yesterday, and today feels like the day before the storm. Closing some work from the hotel room, meeting some people before the fosdem chaos, doing some preparatory stuff for foss-north.

Make sure to checkout the foss-north Community Day page. It is mostly scaffolding yet, but it will grow quite quickly. Also, if you bump in to me, grab a foss-north flyer and help spread the word!

26 January 2020


Från Johan Thelin 26 January 2020 20:34

Spurred on by the mattemonster (maths monsters – it is available in English and Swedish) app that I created to make my sons homework a bit more exciting (everything is more exciting on a screen), I’ve decided to create another app. This time it is about basic reading and words. The title is ordmonster – swedish for word monsters. As this is work in progress, you can find it on my github. I’ll try to get the alpha play store listing done this week – but with fosdem coming up, I might run out of time.

The game can be run in two different modes – one word / many pictures, or one picture / many words. You can also select if you want four or nine items of the many category. Turns out nine images or four words seems ok. Right now reading nine words is a bit too tedious.

The first thing I’d like to point out that my fluency in Godot as a tool is starting to show of. I’m more happy with the code structure of ordmonster, and I start to feel that I don’t continuously bump into the sharp edges of Godot, but use the engine as it was meant to be used.

I also learned a couple of things. The first one is the Control::mouse_filter property. The GameButton nodes (the ones showing a word or a picture) consists of a Button with a Label for text and a TextureRect for holding the picture. The TextureRect sits inside a MarginContainer. It turns out the MarginContainer stops all mouse events from passing through, effectively disabling the Button. This took a while to figure out.

The second half has to do with how resource files can be traversed on Android. Resources are embedded into the executable produced by Godot. The words available in the game are stored as the filenames of the images, so that I don’t have to create a table and keep it in sync with the file names. Really smart idea – right? This smart idea cost me quite some time.

First up, it seems like you cannot have non-ASCII characters in asset filenames when building apk files for Android devices. Really annoying. The fix was using English for the filenames and having to add the words to my translation tables, so now I have a table to keep in sync with the filenames anyway.

The fun did not end here. Now it worked on desktop (both Linux and Windows), but my Android builds simply crashed on me. It turns out that the Directory::list_dir_begin and friends do not seem to work on Android, or the assets are not included in the apk. I’ll spend some time figuring out what is up, then I’ll probably file a bug report. In the mean time you can follow the current forum discussion. The code in question, including my Android hack (yet another list – sigh) is shown below:

func _init() -> void:
  if OS.get_name() == "Android":
    # TODO This is a really ugly HACK
    _words = ["ant", "apple", ... , "zebra"]
    var dir = Directory.new()
    if dir.open("res://assets/images/words") == OK:
      var filename = dir.get_next()
      while (filename != ""):
        if filename.ends_with(".png"):
        filename = dir.get_next()

When working with internationalization of Godot apps, I really miss the Qt tools for extracting text needing translation. lrelease/lupdate – please come back, I forgive you and regret all my harsh words!

In other news, next week if fosdem. I’ll be there, so make sure to let me know if you want to meet and greet. Drop a mail at hello -at- e8johan.se, or ping me on twitter or mastodon.

Also, foss-north is approaching. The Call for Paper is still open – closing soon. Make sure to mark the dates March 29-31 in your calendar. Ticket sales will open soon.

20 January 2020

13 January 2020

gbgcpp – Ribbons using Qt

Från Johan Thelin 13 January 2020 11:56

I’ve been involved in the gbgcpp group, a part of the larger Sweden C++ community, for a couple of years. It is fun to see that there is a lot of C++ developers out there, once you start looking for them.

In the next meetup, this Wednesday, there will be both C++ and Qt. The topic is to implement Ribbons in Qt, based on a seminar by Dag Brück. If you happen to be in the vicinity of Gothenburg, I recommend you to go there!

I’d also like reach out and thank Sylog for hosting the event!

5 January 2020


Från Johan Thelin 5 January 2020 11:21

A new year and a new decade means time for reflection. I try to do this more often than every ten years, but this seems to be a good time to discuss in public.

I’ve split this into three phases. Short-term is what I’d like to do in the coming month or so. This year is my goals for roughly a year, while decade really just means long-term.


Promote an ensure that foss-north 2020 is as successful as last year. You can help by submitting your paper. We’re also looking for sponsors and projects for the community day.

There is also some short-term work for foss-north, i.e. getting tickets sales up and running via our own infrastructure instead of using Eventbrite.

While planning foss-north, I’d also like to keep foss-gbg and gbgcpp active during the spring. Here, the travel part of my work means that I’m seriously short on time. The ambition would be ~10 meetups, but realistically it will be ~5-6.

A part from organizing events, I’m also attending. The next big one is fosdem, which I’m really looking forward to.

Then we have this blog. My goal is to write more, and I’ve been at it for a few months. I’ll try to keep this up.

When it comes to personal health, I try to run regularly. Since my little health dip last autumn, I’ve been fighing to get back and the current goal is to do 5km rounds every week.

This Year

For foss-north, my aim is to do at least one themed event, much like the cancelled foss-north Iot and Security Day planned for October last year. This event will be in the Øresund region or in Stockholm. Feel free to reach out to me if you want to help out.

On a 12 month time frame, I have some professional goals. I’m working with Mbition together with an amazing group of people. We are building a platform for future in-car software. There my goal is to be more focused in what I’m doing – to do more of what I do well better, and less of what I do badly.

Kuro Studio is also in an interesting phase, having a couple of start-ups underway and a constructive partnership in an interesting phase. Again, my personal goal here is to focus more.

Finally, I have my little one-man-box, Koderize, where I do smaller assignments. Here, my goal is to do a few more articles for various magazines, and possibly to find some small development project. Let’s see what I bump into.

Then we come to actual coding. A while ago I came to the conclusion that I need to down-size my projects a bit to actually finish them. Hence Mattemonster an app to teach basic maths for Android created using Godot. It started as a way to get my son to enjoy practicing maths, but this time I polished it just a little bit more and published it on the Play Store. I still have some features on my todo list, as well as publishing it to f-droid.

I also want to spend some time writing a proper Qt desktop application as well. I’ve got some basic ideas, but nothing crisp enough. I’ll probably not have time to dive into this unless I get a really good idea.

My health target this year is to do 5km under 30 minutes, and comfortably do 10km. The stretch goal is to do 10km under the hour.

Next Decade

When looking at a longer time-frame than a year, the goals become fuzzier. This might seem like speculation, but I embrace the fuzziness and use them to prioritize my short-term goal. If I run into something that seems fun, I map it to my long term goals to determine if I should do it or not.

On this time scale, I’d like for foss-north and foss-gbg, I want them to be more independent of me as an individual. To create more a role based setup and stable economical environment (currently the margins are super slim). If I can enjoy a foss-north conference as a visitor in 2030, I’ve achieved this.

For my Mbition work, I want us to reach multiple releases. The reason for the automotive industry to take on more responsibility for software is to increase the reusability. That is why it is key for Mbition to do multiple releases. Then we have proven that our existence makes sense.

For Kuro Studio, we want to continue doing start-ups, more partnerships, building a larger team, meeting more people, and doing more awesome stuff. Getting Kuro properly off the ground is very high on my list of priorities.

Another professional goal I have is to speak more at conferences and speak more about how open source is the way to do software. Transparency is the only way to ensure proper quality, maintainability, and trust – and what better way than open source is there to be transparent.

Since we’re on the really long-term goals part of this post, I’d also like to write another book. I’m not sure about the topic, nor when, but I would not consider myself a proper writer with only one title to my name.

Health wise, it is harder to set a more clear goal than staying healthy, which is what I intend to do. I’ll try to keep running and staying in reasonable shape. If I can still do 10km at a reasonable pace in 2029, when I turn 50, I’m happy.

Next Up

At the end of the day, these are goals and ambitions, not a roadmap for my life. Next up is fosdem. I hope to see you there!

21 December 2019

15 December 2019

Object2VR Panorama head

Från Svendus Blog 15 December 2019 13:31

Home made Panorama head with a SONY A77ii  with a Sigma 10mm 1:2,8 Fish eye

we need 5-6 shots around and one shut up for a perfect stitch in PTGui 11 Pro

14 December 2019

Preparing foss-north 2020

Från Johan Thelin 14 December 2019 11:23

Next year’s foss-north will take place March 29 – 31, with the training day on April 1. Preparations are under way, and now we need your participation to make this event as great as the past years.

The preparations are under way and we’ve opened the Call for Papers. We truly believe that we bring together the best audience with the best speakers. Being a part of this is a great experience, so make sure to get your talk proposal submitted.

Another part of the foss-north experience is the community day. The day before the actual conference, a large set of community groups arrange workshops, hackatons, dev sprints, even mini conferences. This year we’ve already confirmed the participation of KDE, FreeBSD, and “something embedded” arranged by Endian (last year they did a full day workshop on the Zephyr Project).

If you want to be a part of the community day – don’t hesitate to reach out to info@foss-north.se. We help with a venue, food, and promotion. All you need to have is a cause!

In addition to this we are, of course, on the look out for sponsors. If you want to support us, or even take part in the conference with a booth, please join our Call for Sponsors. Make sure to tell your employer that they should sponsor – all sponsor packages include free tickets, so that way you can both participate in the event, and help us making this possible.

Between all of this we’re also working on the infrastructure. I’d like to extend a big thanks to Magnus Hagander from Postgresql. He is helping the migration to their pgeu-system system. This will give us a single system integrating the features we need – tickets, sponsors, scheduling, accounting. So no more Google Forms, Eventbrite, and manual coordination of systems. If you like css, html, and such, you’re more than welcome to help. Some pages still has rough edges.

Long story short: join us at foss-north 2020 – it will be fun! Take the opportunity to see Gothenburg end of March in 2020.

8 December 2019

Advent of Code 2019

Från Johan Thelin 8 December 2019 12:23

My work does not involve that much coding any more. I probably spend more time doing email, attending meetings, and preparing presentations than anything else these days. Still, my fingers itch if I don’t get to write some code now and then.

This has resulted in small apps such as Mattemonster, where I pushed myself to get it into a presentable state so that I could publish it to Google Play. Any one with kids starting with maths should try the app – my son loves it!

It also results in me doing the Advent of Code for a third time in a row. It is a nice exercise in problem solving, basic data structures, and algorithms – something that I have way too few excuses to exercise with. I’m still frustrated with day 15 from last year. I also remember day 16 fondly.

This year I considered doing the AoC in Rust, to learn. But I ended up with Python to save time instead.

2 December 2019

Tech Day by Init

Från Johan Thelin 2 December 2019 08:00

Last Thursday I visited Tech Day by Init and had the opportunity to talk about a topic close to my heart. I decided to do a talk about Open Source Anti-Patterns (you can find the slides over at Kuro Studio).

It is always fun visiting TDBI (it is my third year speaking). The audience is very well read up on the topics and the questions are always good. Also, I got a high five from a guy for my speech during the beer event ;-)

29 November 2019

Play-ing with Godot

Från Johan Thelin 29 November 2019 13:38

I’ve finally come to a point where I have a project that is useful, and at a good enough quality (anyone with graphics skills who wants to help?) to be shared with the broader world: Mattemonster. What I’m trying to say is that I just went through the process of publishing a Godot app to the Google Play store.

There is already good documentation for how you export a Godot app for Android, and detailed guides how to publish to Google Play. This blog is not a step by step tutorial, but instead mentioning some of the things I learned or noticed.

First of all, when setting up the Android tooling, you usually have an android-tools package for your distro. This way, you don’t have to install Android Studio provided by Google.

The configuration settings that you use to export your app goes into the export_presets.cfg file. Once you put the details for your release key in, you should avoid storing this file in a public git, as it contains sensitive data. But even before then, it contains paths that are local to your machine, so I would recommend not storing it in a public git anyway, as it makes merging with others painful.

Finally, when building your apk file, a funny detail is that the switch to control if it is a debug or release build is found in the actual Save As… dialog, and not in the export settings. This was initially confusing to me, as I was looking in the wrong place.

The next step is Google Play. Here one creates all the accounts and listings as explained in the article linked to in the beginning of this blog. What is a bit unclear is that some settings are only available once an initial apk has been uploaded (e.g. Content rating).

Another of these dependencies that confused me is that even the closed alpha testing requires the app to have been published at least once. This means that you have to publish version 1.0 first, then you can use the alpha channel to push out updates quickly to your testers. As it takes up to a week (or longer…) to get the initial publishing through the system, this is a bit frustrating, as you really have to wait around for a few days before you can continue.

When you create an update, you need to remember to step the version code of the apk. This has to be done manually when configuring the export in Godot.

It is also worth mentioning that I did not opt-in to let google manage and protect my signing key. This means that I get warnings for not supporting bundles each time I try to publish, but these warnings can be ignored.

Next steps for me is to to publish to f-droid, and to provide some translations to be able to target more markets (right now the app is in Swedish, so I limited distribution to Sweden).

30 October 2019

foss-north 2020 is on

Från Johan Thelin 30 October 2019 09:25

The foss-north event due a few days ago got cancelled due to health issues, but I’m happy to announce that I’m back and that the planning for foss-north 2020 already is on.

The event will be run as last year, meaning one community day, two conference days and one training day. The community day will be on March 29, conference march 30-31 and training on April 1.

Last year we attracted some 100+ people for the community day and 250+ people during the conference (260 tickets sold). My personal goal for 2020 is 400 visitors (we can do it!) and 200 people during the community day. Also, let’s find a bigger place for the social event ;-)

I just sent out the first sponsorship request to our old sponsors and am happy to see that we already have one sponsor lined up. I have a feeling that this will be a great year.

28 October 2019

We did a test with the RCPano application

but it was not so good, the app has no flight commands when it is activated in the DJI GO 4 app it deactivates the DJI connection, it shoots vertical shots but does not turn the drone and the shot commands are not programmed in Mavic Air -memory but seems to be sent via WiFi for every shot and it is a very slow and time consuming process.
So we shot some panoramic images at 8 meters height with the DJI GO 4 app, Batch Stitched it in PTGui 11.18 Pro and it went fine

Note: You have the same Panorama  functionality  if you unlock the full potential of your DJI drone with the  Litchi app


Note: the stitched Panoramas load after the video

27 October 2019

MX records…

Från Johan Thelin 27 October 2019 08:15

As you might know, I’m a fan of federated services. I tried to promote this during foss-north with conf.tube and mastodon on the list (I’m @e8johan@mastodon.technology). I also got my own nextcloud instance up after much procrastination.

Now I decided to start shifting away from gmail. And I’ve been a gmail user since uni’. That is 15+ years, probably closer to 20.

I’ve also been a fond user of the send-as-another-email setup, basically living of mail forwards from various domains and using gmail as the all mighty source and destination for all mails (which enables great confusion when you pick the wrong identity). Well – no more of this (once my alternative setup is in place).

I’ve chosen to use fripost‘s services. The allow all that I want – custom domains, aliases, and so on, while doing this in a privacy based setup. The organization is an association rather than a normal company. This means that most of the work is done on voluntary basis. But, man, they are a helpful, friendly and skilled bunch. Right now we’re discussing SPF and DKIM setup, while I’m uncomfortably am fumbling around with DNS records. It will be great once I’m done.

And if I don’t reply to mail – I’m on vacation for a week, while moving to a new mail provides, so do resend that mail if I missed it ;-)