Gratis ins Museum - Schloss Landshut

Sonntag, 19. August, 2018

An den August-Samstagen öffnen viele Berner Museen gratis ihre Pforten.
Wir waren am 18.8. im Schloss Landshut (Utzenstorf).

2018-08-18-landshut-01.jpg

Das von einem idyllischen Park liegende Schloss mit Wassergraben

2018-08-18-landshut-02.jpg 2018-08-18-landshut-03.jpg

… beherbergt das einzige schweizerische Jagdmuseum.

2018-08-18-landshut-04.jpg 2018-08-18-landshut-05.jpg

weiterführende Links:

  1. Museen Bern - Gratis ins Museum
  2. Schloss Landsut

Wieder ein Nokia

Samstag, 21. Juli, 2018

Seit dieser Woche habe ich ein neues Smartphone. Ein Nokia. Als ich mein letztes Nokia hatte - puh das ist locker 10 Jahre her… danach kamen mehrere Sony Ericson… dann 2 Samsung… ähm, ich will gar nicht sagen, dass dies ein Gradmesser sein könnte, wie alt man geworden ist :-)

Einmal ausgepackt. Nach dem ersten Einschalten kam diese bekannte Nokia-Tonfolge - die vor 10 Jahren quasi omipräsenter Klingelton um einen herum (… und zwischenzeitlich fast vergessen) war.

Nach diesem kurzen Flashback kam dann auch ein Android zum Vorschein. Kaum auf dem “Desktop” … ein System-Update! Sowas hatte mein Samsung Galaxy Alpha seit 2 Jahren nicht mehr gesehen! Das ist schön: endlich wieder ein suppportetes Gerät! Das war auch einer der wichtigsten Kaufgründe: ich wollte ein Gerät mit AndroidOne.

Die meisten bisherigen Apps wurden automatisch installiert. Was fehlte, war Öffi - das ging aber auch durch die Techi-Presse, dass es von Google aus dem Google Store geworfen wurde, weil es einen Spenden Button enthält, der aber bei der Installation aus dem Google Store heraus aber gar nicht sichtbar ist. Aaalso: im Google Store sind Apps OK, die Werbung einblenden und einen heimlich ausschnüffeln toleriert - aber wenn man den Spenden Button unsichtbar macht, ist das ein Grund zum Rauswurf. Wer das tatsächlich verstanden hat, kann es mir gern nochmal erklären. Aber von Öffi kann man auch als APK herunterladen - oder in Kürze auch von F-Droid.

Das Samsung Galaxy hielt i.d.R. 1 Tag durch - hatte aber zwischendurch seine Rappel und war trotz reinem Standby nach 4 Studen saftlos.
Das Nokia bei meiner seltenen Gebrauchsweise musste ich nach 3 Tagen aufladen.

Kurz: im Moment habe ich Freude!

weiterführende Links:

  1. Öffi: oeffi.schildbach.de
  2. Heise: Öffi wird Open Source und landet auf F-Droid (17.7.2018)
  3. F-Droid - installierbarer Katalog mit FOSS-Apps (Free and Open Source Software) für Android

Javascript Snippet: Query Parameter holen

Montag, 16. Juli, 2018

Ab und an brauche ich es mal … und daher ergänze ich hier ein weiteres Snippet.

/**
 * get query parameters from url as object
 * @returns {object}
 */
function getQueryParams() {
    qs = document.location.search.split('+').join(' ');

    var params = {},
            tokens,
            re = /[?&]?([^=]+)=([^&]*)/g;

    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    }

    return params;
}

Beispiel:

// to get values from current request
// https://example.com/path/index.html?parameter1=foo&parameter2=bar
var oQuery=getQueryParams();
console.log(oQuery.parameter1); // foo
console.log(oQuery.parameter2); // bar

Windows10 - wenn man gar kein Handy anschliesst …

Donnerstag, 12. Juli, 2018

… kommt ein Dialog, was man mit seinem gar nicht angeschlossenen Handy machen kann. Oder aber könnte, wenn man denn ein Handy angeschlossen hätte.
Kommen Sie gerade noch mit?

Ach, ich verstehe es selbst nicht: ich habe doch nur eine Uhr per USB am Rechner aufladen wollen… und jene ist bereits entsperrt. Mein Handy zusätzlich zu entsperren wird nicht viel bringen.

2018-07-12-uhr-angeschlossen-win10.png

Linux: Cleanup-Jobs mit IML CLEANUP

Donnerstag, 21. Juni, 2018

Wir verwenden Puppet als Werkzeug zum Verteilen unserer Server-Konfigurationen auf Linux-Systeme. Für das Löschen von Dateien älterer N Tage in einem Startordner haben wir oft mehrere angepasste Shell-Skripte mit einem Suchbefehl verwendet.

Das IML CLEANUP macht einfach eine Aufteilung von Logik- und Konfigurationsdaten. Es ist einfacher, eine kleine Konfigurationsdatei zu erzeugen (besonders, wenn Sie Automatisierungswerkzeuge wie Puppet, Ansible oder Chef verwenden) anstatt mehrere Bereinigungsskripte zu bearbeiten.

Man kann mehrere Konfigurationsdateien anlegen, die jeweils etwa so aussehen:

dir = /your/starting/path
filemask = *.log,*.gz
maxage = 180
maxdepth =
deleteemptydirs = 1
runas = root

Jene Angaben werden aus den Konfigurationen geparst und in Parameter des find-Kommandos übersetzt.

Wie man es zum Laufen bringt:

  1. In der Datei /etc/imlcleanup.d/ können Sie (beliebig viele) Konfigurationsdateien wie das obige Snippet ablegen.
  2. ein Shell-Skript durchläuft alle Konfigurationsdateien und führt die Aktionen aller conf-Dateien aus.
  3. Sie müssen zusätzlich einen Cronjob erstellen, um dieses Skript regelmäßig (z.B. einmal pro Tag) auszuführen.

Genaueres ist auf Github zu finden. Bitte auch die dortigen Security-Hinweise beachten.

weiterführende Links:

  1. Github: imlcleanup
  2. Docs: os-docs.iml.unibe.ch/imlcleanup/

Bash: Ini Dateien Parsen/ Lesen

Freitag, 8. Juni, 2018

Bei einigen Servern habe ich einen Cronjob, der ruft ein Shellskript auf, welches den IST Zustand einiger Dienste auflistet. Also, auf einem Server, welche Mysql- und Postgres-Datenbankschemata es gibt, auf dem nächsten welche Apache VHosts existieren und auf dem Fileserver welche Samba-Shares usw.
Schlussendlich landet es auf einem Wiki (Dokuwiki in diesem Fall - hier sind die Seiten Txt-Dateien im Filesystem - das macht die Sache sehr einfach).

Beim Samba Server war es bis anhin recht unschön, weil umständlich gecodet. Nun habe ich 3 kleine Funktionen hinzugefügt, mit denen ich (endlich :-)) eine INI Datei parsen kann.
Die Funktionen kann man in eine Datei mit Leserechten (ohne Execute-Recht) auslagern, die man im Skript sourct (per source oder Punkt-Kommando).

  1. _getInisections [Name der Ini-Datei]
    listet alle Sektionstitel auf
  2. _getInisectiondata [Name der Ini-Datei] [Name der Sektion]
    listet die angegebene Sektion auf. Mit dieser Ausgabe sieht man eine Sektion alleinstehend - und kann sich die Variablen herausziehen … aber wenn man die Variablen kennt, gibt es noch die nächste Funktion
  3. _getIniValue [Name der Ini-Datei] [Name der Sektion] [Name der Variable]
    gibt den Wert einer Variable aus der angegebenen Sektion zurück

In der Samba-Konfiguration (/etc/samba/smb.conf) sind die Variablen und Werte nicht zwingend ab Zeilenanfang - daher sind im Regex Leerzeichen und Tabs hinzugefügt.

# Helper for ini files: get all sections
# param1 - name of the ini file
function _getInisections(){
        local myfile=$1
        grep "^\[" $myfile | sed 's,^\[,,' | sed 's,\],,'
}

# Helper for ini files: get all content inside a section
# param1 - name of the ini file
# param2 - name of the section in ini file
function _getInisectiondata(){
        local myfile=$1
        local mysection=$2
        sed -e "0,/^\[${mysection}\]/ d" -e '/^\[/,$ d' $myfile | grep -v "^[#;]"
}

# Helper for ini files: get a value of a variable in a given section
# param1 - name of the ini file
# param2 - name of the section in ini file
# param3 - name of the variable to read
function _getIniValue(){
        local myfile=$1
        local mysection=$2
        local myvarname=$3
        _getInisectiondata ${myfile} ${mysection} | grep "[^\a][\ \t]*${myvarname}[\ \t]*=.*" | cut -f 2 -d "=" | sed -e 's,^\ *,,'
}

Und als Anwendungsbeispiel: ein Snippet mit einem Loop über die Samba-Konfiguration. Ausgegeben wird eine Tabelle mit Name des Shares, Beschreibung (Wert “comment”) und Pfad des Shares (Wert “path”):

smbconf=/etc/samba/smb.conf

# Ausgabe des Tabellen-Header in Wiki-Syntax
echo "^Share^Kommentar^Pfad^"

# Loop ueber alle Sektionen
for mysection in `_getInisections $smbconf | grep -v global`
do
        # Ini-Werte aus der Sektion lesen
        myComment=`_getIniValue ${smbconf} ${mysection} "comment"`
        mypath=`_getIniValue ${smbconf} ${mysection} "path"`

        # Ausgabe der Tabellen-Zeile - Pipes sind Spaltentrenner
       echo "|${mysection}|${myComment}|${mypath}|"
done

UPDATES:

  • 15.05.2019: Korrektur der fehlenden Backslahes (die wirft das Blogtool immer raus, wenn man es nicht als Html-Entity schreibt) plus verbessertes Handling mit laschen Regex und Leerzeichen. Danke an Frank!
  • 04.03.2021: Sektionen mit eckigen Klammern aus Kommentaren ignorieren. Zusätzlich werden Kommentare mit Semikolon am Anfang ebenfalls ignoriert. Ein local macht eine Variable nur innerhalb der Funktion bekannt.
  • 09.02.2022 Update von _getIniValue: [^\a] statt ^
  • 19.03.2023: Ein Follower Projet: Ich habe aus der class like Bash Funktionen erstellt. Mit Validator und anständiger Dokumentation https://www.axel-hah … docs/bash_iniparser/

Song: Space & Time

Samstag, 28. April, 2018

Instrumentale, elektronische Musik - erstellt mit Magix Music Maker.
Einige Synthesizer liefern Space-Sounds. Es setzen 8 Bit Sounds ein und eine kleine Melodie wird von einer E-Guitarre begleitet. 120 BPM.

Download:
https://www.axel-hahn.de/axel/download/space-and-time_2.0_.mp3
https://www.axel-hahn.de/axel/download/space-and-time_2.0_.ogg
… und 5.1 surround
https://www.axel-hahn.de/axel/download/space-and-time_5.1_.m4a
https://www.axel-hahn.de/axel/download/space-and-time_5.1_.ogg

adb - Kopieren von Dateien auf ein Android Smartphone - auch ohne OS

Sonntag, 25. März, 2018

Ich habe da so ein Samsung Galaxy Irgend-Bla Smartphone mit Octa Core CPU und Schlagmichtot-Features … das bekommt seit 2 Jahren kein Update. Beim Versuch, das Android 5.02 zu aktualisieren, heisst die Meldung stets: ich bin auf dem aktuellen Stand.

Ich lach mich tot! Nein, ist es nicht. Eine Android Version 5 - das tut schon beim Lesen weh - Shame on you SAMSUNG!!

Höchste Zeit, das Ding mit einem massiv aktuelleren Custom ROM zu versorgen. TWRP wurde installiert und ich habe die Custom ROM LineageOS und Gapps draufkopiert. Dann die Installation ausgeführt.

Dann kam aber ein kleines Missgeschick: ich wollte die Installation wiederholen und habe das System in TWRP nochmal gewiped… OOPS: damit war das Betriebssystem weg, wie auch meine für die erste Installation draufkopierten Images. Das Smartphone kann man dann weder booten und auch nicht neu installieren. (OK, ich gebs zu: ich habe an der Stelle auch etwas geflucht :-))

So geht es aber weiter:

(1)
Das Telefon wurde in TWRP gebootet - dann per USB mit dem PC verbunden.

(2)
Man braucht adb (adb und fastboot wären Begriffe, um die Suchmaschine deiner Wahl zu füttern). Das Tool hatte ich bereits.

(3)
In der Konsole kann man schauen, ob das Smartphone gefunden wird:


C:\Program Files (x86)\Minimal ADB and Fastboot>adb devices
List of devices attached
4100706845537121 recovery

Yep. Ein “recovery” ist da - das ist das Smartphone.

(4)
Danach kann man beliebige Dateien zum Smartphone kopieren.

Syntax:

adb push [lokale Quelle] [Ziel am Smartphone]

Einfach die lokale Datei mit kompletten Pfad wählen (Hint: mit der Tab Taste schlägt die Konsole Datien und Verzeichnisse vor - so kann man den gesamten Dateinamen schnell komplettieren).
Als Ziel wähle ich /sdcard/ auf dem Smartphone.


C:\Program Files (x86)\Minimal ADB and Fastboot>adb push D:\Apps\Android\_data\Galaxy-alpha\lineage-14.1-20171130-UNOFFICIAL-sltexx-beta9.zip /sdcard/
[100%] /sdcard/lineage-14.1-20171130-UNOFFICIAL-sltexx-beta9.zip

C:\Program Files (x86)\Minimal ADB and Fastboot>adb push D:\Apps\Android\_data\Galaxy-alpha\open_gapps-arm-7.1-nano-20180324.zip /sdcard
[100%] /sdcard/open_gapps-arm-7.1-nano-20180324.zip

Anm.: dem ein oder anderen aufmerksamen Leser mag das LineageOs 14 auffallen, obwohl Version 15 aktuell ist … Version 15 gibt es noch nicht für mein Gerät.

(5)
Nun kann man in TWRP die Installation starten, indem man die Dateien aus dem /sdcard/ Verzeichnis wählt.
2018-03-25-twrp-dateien-in-sdcard-verzeichnis.jpg

weiterführende Links:

  1. Wikipedia: TWRP
  2. TWRP (en)
  3. Axels Webseite: Hilfe zu adb
  4. xda-developers Forum: Minimal ADB and Fastboot (en)
  5. https://www.lineageosroms.org/ - lineageOs Roms –> https://www.cyanogenmods.org/ (en)
  6. openGapps Google Apps packages (en)

20 Jahre Opensource - Check an unserem Institut

Sonntag, 4. März, 2018

20 Jahre OpenSource … und ich habe bei meinem Arbeitgeber (Institut für Medizinische Lehre der Universität Bern; ca. 70 Mitarbeiter) einmal grob überflogen, was ich da so aus meiner bescheidenen Perspektive so sehe. Nachfolgende Liste entstand, OHNE dass ich in den Teams deren Tools erfragt habe. Gut möglich, dass eine vollständige Liste doppelt so lang würde: es fehlen Werkzeuge verschiedener Teams genau so wie Desktop-Applikationen (das ginge mit dem Firefox Webbrowser ja schon los).

Ich wage dennoch zu behaupten: ohne Opensource ginge an unserem Institut nicht mehr sehr viel.

Betriebssysteme
etwa 97% unserer über 100 Server verwenden ein Linux. Bei uns sind im Einsatz
* CentOS - https://www.centos.org/
* Debian - https://www.debian.org/
* Ubuntu - https://www.ubuntu.com/

Verschlüsselung
* Mit https verschlüsselte Webseiten und applikationsinterne Kommunikation verwendet OpenSSL - https://www.openssl.org/
* wir haben Wrapper um das Backup-Werkzeug Dupicity im Einsatz - http://duplicity.nongnu.org/
* unsere Server verschlüsseln lokal ihre Daten mit GnuPG https://gnupg.org/ -
* SecureShell (SSH) für den selektiven Zugriff auf unsere Server per Shell, Filezilla oder getunnelte Zugriffe auf Datenbanken - https://www.openssh.com/
* Mittels Shibboleth können sich Accounts fremder Provider bei uns einloggen - https://www.shibboleth.net/
* Stunnel - Verschlüsselte Verbindung bei unverschlüsselten Protokollen - https://www.stunnel.org/

Virtualisierung
* Unsere Virtualisierungsserver arbeiten mit KVM - https://www.linux-kvm.org/
* Als Verwaltungssoftware für virtuelle Server verwenden wir OpenNebula, welches mit EU Fördergeldern unterstützt wurde - https://opennebula.org/
* Der Festplatten Cluster wird mit Ceph betrieben - https://ceph.com/
* lokale Instanzen von Virtualbox - https://www.virtualbox.org/

Softwareverteilung
* Puppet - https://puppet.com/
* Foreman - https://theforeman.org/

Programmiersprachen, Computing
* Javascript/ NodeJS - https://nodejs.org/
* OpenCpu - https://www.opencpu.org/
* Perl - https://www.perl.org/
* PHP - http://php.net/
* Python - https://www.python.org/
* R - https://www.r-project.org
* Ruby - https://www.ruby-lang.org

In Projekten sind div. kostenfreie Frameworks im Einsatz, darunter
* AngularJS - https://angularjs.org/
* Apache FOP Project - https://xmlgraphics.apache.org/fop/
* Bootstrap - http://getbootstrap.com/
* Fatfree PHP Framework - https://fatfreeframework.com
* FontAwesome (Iconset) - https://fontawesome.com/
* jQuery https://jquery.com/
* PureCSS - https://purecss.io/
* Ruby On Rails - http://rubyonrails.org/
* Symphony PHP Framework - https://symfony.com/

Entwicklertools
* Apache Studio https://directory.apache.org/studio/
* Mysql Workbench https://www.mysql.com/products/workbench/
* DBeaver - https://dbeaver.jkiss.org/
* Git - https://git-scm.com/
* Netbeans IDE - https://netbeans.org/
* Xamarin - https://www.xamarin.com/

Datenbanken
* CouchDB - https://couchdb.apache.org/
* OpenLDAP - https://www.openldap.org/
* Elasticsearch - https://www.elastic.co/
* Myslq - https://www.mysql.com/
* MariaDB - https://mariadb.org/
* Postgres - https://www.postgresql.org/
* Resin - https://resin.io/
* SqLite - https://sqlite.org/

Webserver
* Apache Httpd - https://httpd.apache.org/
* Nginx - https://www.nginx.com/
* HA-Proxy - http://www.haproxy.org/

Logging/ Monitoring
* CollectD - https://collectd.org/
* Grafana - https://grafana.com/
* Graylog https://www.graylog.org/
* Monit - https://mmonit.com/monit/
* Munin - http://munin-monitoring.org/
* Nagios - https://www.nagios.org/
* Sensu - https://sensuapp.org/

webbasierte Werkzeuge
* Alchemy CMS - https://alchemy-cms.com/
* Concrete5 - https://www.concrete5.org/
* Dokuwiki - https://www.dokuwiki.org/
* GitLab - https://about.gitlab.com/
* Ilias - https://www.ilias.de/
* Umfragen Limesurvey - https://www.limesurvey.org/de
* Webstatistik Mattomo - https://matomo.org/
* OpenProject - https://www.openproject.org/
* Raumplanung https://mrbs.sourceforge.io/
* Wordpress - https://de.wordpress.com/

Datenablagen, Datenaustausch
* Samba - https://www.samba.org/
* Nextcloud - https://nextcloud.com/

Ergänzt werden diese Tools durch eigene Entwicklungen: diverse Werkzeuge schreiben wir zusätzlich selbst.

Html5 Audio Events beobachten

Freitag, 23. Februar, 2018

Es entsteht gerade eine weitere Demo Seite zu Html 5 Audio:
Nach Eingabe einer beliebigen Audio URL wird diese als Source eines Audio Tags verwendet.
An dieses Audio Tag werden alle dokumentierten Events angeklebt und man kann bei den Interna eines Audio Tags zuschauen und wann welche Events abgesetzt werden.

Sie erscheinen zum einen rechts als Log (mit Zeitangabe in Millisekunden seit Laden der Seite). Damit kann man z.B. messen, wie lange ein Audio laden muss, bis es abgespielt werden kann (readyState=4).

Unten ist die Liste aller Events, die bei Absetzen hervorgehoben werden … und nach und nach schwächer verfärbt sind.

2018-02-28-audiodebugger.jpg

weiterführende Links:

  1. Demo-Seite: Html5 Audio debugger