My Raspberry Pi 3 Config.txt for Volumio

Posted by in Hardware

My stable configuration file for Volumio looks like this now: Basics:

Sound card:

WaveShare screen:


The only more convoluted configuration is the networking, which allows me to connect to my wireless network. Once the setup will be stabilised, I will be able to connect it via ethernet, making the whole last section obsolete. And the wpa_supplicant.conf file looks like:


Configure Volumio with PiFi DIGI DAC+

Posted by in Hardware, Tutorial

The other day I’ve got a Chinese clone of HiFiBerry, a PiFi DAC+ v2.0: Here are the steps to configure it with Volumio. First, you need to install Volumio 2 (2.129 at the moment of writing). You need to configure it to e.g. connect to the network, index songs. Note: Back up your config.txt (and wpa_supplicant.conf) Once you’ve got it up and running, select the Playback menu: … and select the Hifibetty DAC Plus for the Output Device and *DAC Model. Make sure you enable I2S DAC: For the options,…read more

Change the File Extension in Typescript (or Javascript)

Posted by in Software, Tutorial

TL;DR: You need to get the root name (without the extension) and append the new extension. Then, it only depends on how tolerant you are. The other day I figured I needed a function to change the file extension (from a .jpg to a .nfo). Since I haven’t found a ready made function to do this, I decided to create my own (it’s also a good exercise for my neurons…). The function ended up having the following steps: Prerequisite: the function input parameters are the file name (not the full…read more

Consistent Testing

Posted by in Software, Tutorial

TL;DR: Delete the settings file before starting the test. Today I implemented a simple wrapper over the electron-settings functionality to gibe me access to a set of properties via get/set methods. My scenario is simple: I have a property named path.backup and I want to be able to get, set andtest it’s set`. The code is:

Now, my testing code would be something along the lines:

And I was surprised to find the test failed in the second part (can detect it has source paths). Consistently. Then, I…read more

Delete Dependent Entries of a Table in Oracle PL/SQL

Posted by in Software, Tutorial

The other day I had a task to clean up a database which was populated with a list of records. Unfortunately, my main table is linked to a host of other tables via foreign key dependencies and, to make things worse, no CASCADE constraints are specified. The process I want to is as follows: Scan main table First, we need to find the records in the main table we want removed. This is a simple SELECT statement:

In my case, the statement is:

(the 80, and 122 are…read more

Poor Man’s Mocks in TypeScript

Posted by in Software, Tutorial

Today I went against my better judgement of usign a mock framework and decided to create my own mocks to allow coverage testing for an IPC-calling code. My reference code I wanted to test is:

The code would use an angular service named PathService which, for the purpose of this test only has a method named getSourcePaths(), which returns a Promise. Now, I needed to emulate that method, and the code I wrote to do that is:

It basically defines an object containing a method getSourcePaths() which returns…read more

Use “toThrowError” and “toThrow” in TypeScript with Objects

Posted by in Software

TL;DR: wrap your method call in the expect() statement. Instead of expect(obj.method()).toThrow(), write expect( () => { obj.method() }).toThrow(). While in the process of improving the code coverage, I needed to write a test for a method throwing an exception. My initial code would have been something like:

Where SelectorComponent has a method named updateSelectors(value: any) which throws an error if the value is not in an array. If I write the test as above, it will fail (the test itself will throw the error):

However, If I…read more

Fix Angular 2 Tests with Karma

Posted by in Software

Below are some fixes I had to apply in order to make Angular 2 tests work with karma. Binding Error: Can’t bind to ‘ngModel’ since it isn’t a known property of ‘input’ Solution: Import FormsModulein your test:

Unknown component Error: ‘custom-component’ is not a known element Solution: Declare the component in your test:

Note: If the element is in another module, then import the other module (like in the previous case) instead of declaring elements one by one. Unknown <router-outlet> tag Error: ‘router-outlet’ is not a known element…read more

Initialize a Typescript Interface with JSON

Posted by in Software

TL;DR: You can initialise a typescript interface using JSON objects. On my quest to load and save objects as JSON, I found that you can convert a JSON object to an interface via something called type assertion. Basically, if you have an interface:

you can load a JSON object via JSON.parse(json) straight to an instantiation of the interface. Then, you can use the said instantiation in e.g. a component. Now, all is nice, but what if you want to initialise an instance of the PathInterface interface? That’s simple. You…read more