RIP Subsonic, Hello Libresonic

Some while ago I posted a blog detailing how to install Subsonic on a Raspberry Pi 1. If you google for “subsonic raspberry pi” my blog shows up as a top search result (normally 3rd place, but even second is possible). In addition, each day I get more than one access from somewhere in the world to that blog. There is definitely interest in running Subsonic on a RP.

Subsonic now closed source

Since the last time some things have changed. I updated to a RP2 and Subsonic was updated up to 5.3. I won`t update to version 6 and beyond. The developer of Subsonic changed the license of 6.x and made it closed source. Not a big problem for you as an end user. You can still download and install Subsonic 6 as a binary without problems. The license change however makes it unclear what the future of Subsonic will be. Is it going to be premium only, forcing you to buy a license? Currently the premium features are of no interest to me. Although not having Ads in the UI would be nice. Either way, I do not want to change software (got used to it), and staying in 5.3 for the rest of my life isn`t an option too (yes, I DO update).

Moving to Libresonic

Good news: one person is offering his own fork of Subsonic since a while: Eugene E. Kashpureff Jr. Started originally to take away the license check feature of Subsonic, he started a new project based on Subsonic 5.3: Libresonic. Available on Github, the source code is freely available and continues to offer the functionality of Subsonic. Community already started to give feedback on this new software. The name is no surprise, considering LibreOffice, Libreelec and now Libresonic.


No surprises here. It`s the same procedure as with 5.x. Ensure you have the pre-requisites installed like maven, Java, Debian tools.

git clone
cd libresonic/
mvn package
mvn -P full -pl libresonic-booter -am install
mvn -P full -pl libresonic-installer-debian/ -am install
sudo dpkg -i ./libresonic-installer-debian/target/libresonic-*.deb


The name of the project changed to Libresonic, and so did the location of the configuration files and executables. The conf file is now located at: /etc/default/libresonic. The name of the parameters changed too, while the values are the same. So copy over the values of the old Subsonic conf file.

LIBRESONIC_ARGS="--max-memory=150 --port=8080 --context-path=/libresonic"

To start Libresonic, it`s now /etc/init.d/libresonic and the program files are at /var/libresonic. After you have done this, you can access Libresonic again via web interface.

Uninstall Subsonic

I upgraded to EugeneKay fork some time ago when it was still Subsonic without license check. Therefore, I installed it using dpkg. The package is still installed and it won`t work nicely together with Libresonic because of sharing the same configuration (port, etc.). To uninstall your officially downloaded Subsonic DEB file, just follow the same steps.

dpkg –l subsonic

To uninstall that package:

sudo dpkg –r subsonic

This removes the package, but leaves the config files (can be seen when running dpkg –l subsonic again):

To remove also the config files:

sudo dpkg –P subsonic

The directory /var/subsonic containing some files wasn`t removed, you`ll have to do this manually.

Last preparations before the games begin

Yeah, let the games begin, I am prepared. Last week’s Rio held some test games, used for athletes to qualify for the Olympic Games as well as to test the infrastructure, stadiums, processes, etc. I live close to the main Olympic Games revenue location, and those tests showed me that I am not prepared. Each time a sports location was prepared to host an event, I ran out of electric power. When they booted up a location, I went down. After a few hours, energy came back. Then the event stopped and a few hours later when they shut down the main power switch, and this meant again for me: Stone Age.

What was the impact of the fact that the only and therefore monopolistic energy provider in Rio didn`t invest correctly in the last 6 years into a power grid that simply works? Event started in the morning, so I had no power starting 4:00am, or 5:00am. Power came back after a few hours (like 11:00am). Event ended in the evening, so they turned off the power at around 10pm, and guess what, no power from 10pm to early morning (2am). Run, rinse, repeat. I guess the power grid isn`t capable for handling the spikes that occur when you power on a whole stadium planned for thousands of people. Little bit more than 2 months until the games start, there is little hope this will be fixed.

The test events showed me clearly the priority going to be applied throughout the Olympic Games. Sport venues first, f@%# the rest.

I have some computers and entertainment equipment at home, like a TV, computer, a RAID5 holding 20TB/15TB. Especially the computer and RAID is something I do not want to see crash simply because a ping-pong game between Azerbaijan and Salomon Islands is starting. My solution? UPS.

My choice fell on APC, 1500VA. This model comes with an USB port, allowing connecting to it and shutting down a computer in a controlled matter. 8 power connectors let me connect enough of my equipment. Even considering that some vendors think their tiny router is so important that it needs a power connector double size of a Raspberry Pi (looking at you, Apple!). For worst-case scenarios, this APC model lets me connect an additional battery, extending further the autonomy.

Here are some pictures of my new UPS.

SAP UI5 VIZ charts in Chrome

I was preparing a demo showing how to visualize data from an IoT service using SAP UI5 VisFrame charts. To play around with VizFrame, I used the sample from SAPUI5 SDK. It was working perfectly on the online version, but while running the UI5 app and Chrome, I got an error message.

Googling for the error message revealed that with Chrome 50 a known error exists which makes it impossible to use a VizFrame chart. Luckily I found the solution on SCN. All it takes is to implement the function as a prototype and the chart will work.

SVGElement.prototype.getTransformToElement = SVGElement.prototype.getTransformToElement || function(elem) { return elem.getScreenCTM().inverse().multiply(this.getScreenCTM()); };

I`ve put the code in my views controller init() function:

onInit : function (evt) {
  SVGElement.prototype.getTransformToElement = SVGElement.prototype.getTransformToElement || function(elem) { return elem.getScreenCTM().inverse().multiply(this.getScreenCTM()); };
  oVizFrame = this.oVizFrame = this.getView().byId("idVizFrame");


Now, this works magically when I access the online SDK, but is broken when using it locally. I guess SAP did some magic either in the SDK or in the UI5 library that my SAPUI5 version does not include. Either way, the above trick solves the problem.

Install your own SAP NetWeaver ABAP system

Below is a list of links to blogs I wrote and I hope can help you when you install your own SAP NetWeaver ABAP system. The documentation is the by-product while I installed my demo/test system.

How to manually upload an SAP Note in SNOTE

My small demo system is not connected to SAP Market Place, and therefore I cannot download notes from transaction SNOTE. To implement the needed note, I`ll have to download and apply the note manually. I will use SAP Note 2222774 as an example. Open the SAP Note in a browser and select download.

This adds the note to your download basket.

Go to the download basket to download the file.

Click on the link to start the download. It’s a 6.3 MB file.

Extract the TXT file inside the downloaded ZIP file.

If you want, you can look at the content, but you won`t understand a lot.


Upload the note to SAP NetWeaver ABAP system using SNOTE

  • Tx: SNOTE

Goto -> Upload SAP Note

Select the extracted TXT file.

The SAP Note appears now in the note assistant worklist.

The status of the note is given as “can be implemented”. Let`s do this.

Confirm that you have read the note. Some notes come with manual steps, that won`t be execute by SNOTE (yes, talking to you, BASIS guy with 15 years of experience). If you have read the note and are aware of possible manual steps, click on Yes.

SNOTE starts implementing the note. In my case, I am working in the personas namespace and therefore will get a warning message. I confirmed that I am an adult.

A workbench request is needed.

Create a new request.


Confirm the changes applied in your system.

SNOTE shows the updated status of the note.


When you start implementing the note, SNOTE tries to check if there is a newer version available online. This will result in an error message: No RFC connection. Obviously, that`s why I downloaded the note. What now?

Hints can be found in the context help of the dialog.

SNOTE checks by default if a newer version is available. For this, RFC connection is needed. If this won`t work, the note can still be installed.