Windows ln style softlinks with mklink

You can use softlinks (linux: ln -s source target) under windows.

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is a file
                symbolic link.
        /H      Creates a hard link instead of a symbolic link.
        /J      Creates a Directory Junction.
        Link    Specifies the new symbolic link name.
        Target  Specifies the path (relative or absolute) that the new link
                refers to.

The example mklink /D jdk11 jdk-11.0.7.10-hotspot will create a softlink with name jdk11 to folder jdk-11.0.7.10-hotspot in the same directory.

Update

This page now also supports translations. I am going to try writing posts in English and German from now. Old pages won’t be translated unless somebody requests it.

How NOT to offer a product

Its quite common to offer freemium software with missing premium features but writing a paid product (without a free version at all) that targets to send personal data over a network and make users upgrade from the basic to pro version to at least have their private data encrypted is an absolute no-go in my opinion. I cut out the relevant part of the offer. Basic version is 29 and pro 39 USD.

Home Studio Setup

I just set up a new live-streaming/video-conferencing system for home office and I want to share my part list with you. If you decide to buy parts from my list please consider using my links which would support me a little bit.

Video

Audio

change wordpress url in database

if you need to move wordpress to a new url then the following sql script will be handy (update the urls in it of course):

UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldurl', 'http://www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://www.oldurl','http://www.newurl');

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.oldurl', 'http://www.newurl');

UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.oldurl','http://www.newurl');

Install OSM Nominatim in Ubuntu LTS 18.04 for private reverse geocoding

I recentely found out about OpenStreetMap Nominatim and its reverse geocoding feature. And same as OSM it can be installed on a local server. I followed the installation steps documented in online manual and everything runs very smoothly.

#!/bin/bash
# steps for 18.04 LTS with latest updates
# run as root

export USERNAME=nominatim
export USERHOME=/srv/nominatim
export NOMATIM_VERSION=3.4.1
export NOMINATIM_SOURCE_DIR=$USERHOME/Nominatim-${NOMATIM_VERSION}
export BUILD_LOCAL=$USERHOME/build/settings/local.php
export BUILD_UTILS=$USERHOME/build/utils
export PG_CONF=/etc/postgresql/10/main

# installation
apt update
apt dist-upgrade -y
apt-get install -y build-essential cmake g++ libboost-dev libboost-system-dev \
                   libboost-filesystem-dev libexpat1-dev zlib1g-dev libxml2-dev \
                   libbz2-dev libpq-dev libproj-dev \
                   postgresql-server-dev-10 postgresql-10-postgis-2.4 \
                   postgresql-contrib-10 postgresql-10-postgis-scripts \
                   apache2 php php-pgsql libapache2-mod-php \
                   php-intl git python3-pip
apt-get clean
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# user
useradd -d ${USERHOME} -s /bin/bash -m ${USERNAME}

# apache
tee /etc/apache2/conf-available/nominatim.conf << EOFAPACHECONF
<Directory "/srv/nominatim/build/website">
  Options FollowSymLinks MultiViews
  AddType text/html   .php
  DirectoryIndex search.php
  Require all granted
</Directory>
Alias /nominatim /srv/nominatim/build/website
EOFAPACHECONF
a2enconf nominatim
systemctl restart apache2

# nomatim
sudo -u $USERNAME -H sh -c "cd $USERHOME && wget https://nominatim.org/release/Nominatim-${NOMATIM_VERSION}.tar.bz2 && tar xf Nominatim-${NOMATIM_VERSION}.tar.bz2 && mkdir build && cd build && cmake $USERHOME/${NOMINATIM_SOURCE_DIR} && make"

tee $BUILD_LOCAL << EOFLOCAL
<?php
 @define('CONST_Website_BaseURL', '/nominatim/');
 @define('CONST_Osm2pgsql_Flatnode_File', '${USERHOME}/flatnode.file');
EOFLOCAL

# postgre
sudo -u postgres createuser -s $USERNAME
sudo -u postgres createuser www-data
cp postgresql_preimport.conf postgresql_postimport.conf ${PG_CONF}
mv ${PG_CONF}/postgresql.conf ${PG_CONF}/postgresql.conf.orig
ln -s ${PG_CONF}/postgresql_preimport.conf ${PG_CONF}/postgresql.conf
systemctl restart postgresql

#  wikipedia data
#cd $NOMINATIM_SOURCE_DIR/data
#wget https://www.nominatim.org/data/wikipedia_article.sql.bin
#wget https://www.nominatim.org/data/wikipedia_redirect.sql.bin
#wget https://www.nominatim.org/data/gb_postcode_data.sql.gz
#wget https://www.nominatim.org/data/us_postcode_data.sql.gz

# streetmap data
export MAP_DATA_DIR=$USERHOME/mapdata
mkdir $MAP_DATA_DIR
cd $MAP_DATA_DIR
wget https://download.geofabrik.de/europe/austria-latest.osm.pbf

# fix permissions after getting all data
chmod -R a+x $USERHOME
chown -R ${USERNAME}:${USERNAME} $USERHOME

# install map data
sudo -u $USERNAME -H sh -c "$BUILD_UTILS/setup.php --osm-file $MAP_DATA_DIR/austria-latest.osm.pbf --all" 2>&1 | tee $USERHOME/setup-austria.log

# update process
sudo -u $USERNAME -H sh -c "pip3 install --user osmium"
echo " // update process" >> $BUILD_LOCAL
echo " @define('CONST_Pyosmium_Binary', '/srv/nominatim/.local/bin/pyosmium-get-changes');" >> $BUILD_LOCAL
echo " @define('CONST_Replication_Url', 'https://download.geofabrik.de/europe/austria-updates');" >> $BUILD_LOCAL
echo " @define('CONST_Replication_Update_Interval', '86400');" >> $BUILD_LOCAL
echo " @define('CONST_Replication_Recheck_Interval', '900');" >> $BUILD_LOCAL
sudo -u $USERNAME -H sh -c "$BUILD_UTILS/update.php --init-updates"

# enable fsync of postgre
rm ${PG_CONF}/postgresql.conf
ln -s ${PG_CONF}/postgresql_postimport.conf ${PG_CONF}/postgresql.conf
service postgresql restart

The mentioned files are also included here:

After installing it i was able to call the reverse geocoding API like this (replace the ip with the one of your server):

curl -X GET 'http://192.168.0.247/nominatim/reverse.php?lat=48&lon=15&osm_type=N&format=json&zoom=3'

{"place_id":3655636,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"relation","osm_id":16239,"lat":"47.2000338","lon":"13.199959","display_name":"Österreich","address":{"country":"Österreich","country_code":"at"},"boundingbox":["46.3722761","49.0205305","9.5307487","17.160776"]}

add systray to elemtary os

Elementary OS 5 comes with a very limited systray functionality that needs to be fixed. For this you need to install wingpanel-indicator-ayatana that can be installed via a PPA and change autostart config of the indicator app.

Install wingpanel-indicator-ayatana

sudo add-apt-repository ppa:yunnxx/elementary
sudo apt update
sudo apt install indicator-application wingpanel-indicator-ayatana

Change autostart config

Open the config file with

sudo vim /etc/xdg/autostart/indicator-application.desktop

and change the line

OnlyShowIn=Unity;GNOME;

to

OnlyShowIn=Unity;GNOME;Pantheon;

Then reboot your machine and you should have a systray that displays your application icons too.

Nvidia GeForce GTX 2070 Super under Linux

I installed a Nvidia GeForce GTX 2070 Super (https://geizhals.at/msi-geforce-rtx-2070-super-gaming-x-trio-v372-257r-a2091022.html) in my system removing a GTX 980. The system has a dual boot with Win10 and elementary OS 5. Both system were using the nvidia native driver. There was no extra effort neither in Windows nor elementary OS. Windows took about a minute to switch to the correct driver after starting with 1024×768. Elementary OS wasn’t interested at all in the change. Conclusion: Using a GeForce GTX 2070 Super works like a charme under Windows and Linux. At least for me and my system configuration. So please don’t blame me if you are running into troubles.

You can find that article on amazon under https://amzn.to/2A3l8Bh.