Kategorien
Technology

OnePlus 8 Pro: Erster Eindruck

Heute kam das OnePlus 8 Pro bei mir an. Deutlich schneller als erwartet. Die Ersteinrichtung ist wie bei allen Android-Telefonen eine Sache von wenigen Minuten, inklusive der wichtigsten Anwendungen wie Nextcloud, AndOTP, Keepass2Android und MailDroid.

Anschliessend hab ich zwei Schnappschüsse mit der Kamera gemacht, bei normalem Licht im Wohnzimmer:

Der Fokus auf dem normalen Bild ist natürlich falsch auf einer der hinteren Blüten gelandet, aber in der Nahaufnahme sieht man die Details sehr schön.

Übers Wochenende werde ich natürlich noch ein paar Fotos und wahrscheinlich auch ein Workout Video machen. Das Ergebnis gibt’s dann wieder in einem Update hier im Blog. 😀

Kategorien
Technology

Move React files into custom directories

This morning I tried to rebuild my instapaper clone for Nextcloud from PHP and plain javascript to React, but I needed to move the compiled javascript and CSS files into a custom directory structure for the nextcloud app release. I’m using create-react-app and react-app-rewired and apparently there is no simple way to modify the output directory „build“ to something different.

To avoid additional tools and steps in my process, I decided to write a piece of javascript and execute it with node after building my app via npm. To do this I created the following file move.js next to package.json:

const path = require('path');
const fs = require('fs');

const build = path.resolve(__dirname, 'build');
const target = path.resolve(__dirname, '..');

const errorLogger = (err) => err && console.log(err);

[path.join(target, 'js'), path.join(target, 'css')].forEach(dir =>
  fs.readdir(dir, (err, files) => {
    if (err) throw err;
    files.forEach(file => fs.unlink(path.join(dir, file), errorLogger));
  })
);

// copy javascript+css into custom directories
fs.readdir(build, (err, files) => {
  if (err) throw err;
  // copy javascript+map files
  files.filter(file => {
    return file.endsWith('.js') || file.endsWith('.map');
  }).forEach(file =>
    fs.copyFile(path.join(build, file), path.join(target, 'js', file), errorLogger)
  );
  // copy CSS files
  files.filter(file => {
    return file.endsWith('.css');
  }).forEach(file =>
    fs.copyFile(build + '/' + file, target + '/css/' + file, errorLogger)
  );
});

Now I can modify my npm scripts in package.json:

"scripts": {
  ...,
  "build": "react-app-rewired build && node move.js"
},

When running npm build the files are now copied into the proper directories for JS and CSS in my nextcloud app structure.

Kategorien
Technology

Bestellt: OnePlus 8 Pro

Es wird langsam Zeit, mein aktuelles Smartphone Sony XZ Premium durch ein neues Modell zu ersetzen. Nach ein paar Tagen Recherche habe ich mich entschlossen, das neue OnePlus 8 Pro zu bestellen.

Ich hatte letztes Jahr schon mit dem 7 T Pro geliebäugelt, allerdings war es mir noch etwas zu früh, das Sony auszutauschen. Aber ich hatte darauf spekuliert, dass OnePlus dem 7er wieder ein ordentliches Upgrade spendieren wird und das war auch so. Jetzt bin ich also nach 6 Jahren wieder zurück bei OnePlus. 😎

Der Versand soll nächste Woche starten und das Telefon wird vor dem 05. Mai bei mir ankommen – so die Notiz bei der Bestellung. Ich hab natürlich das schwarze Modell genommen. Leider kann man keine microSD Karte mehr in das Telefon stecken, aber im Moment komme ich auch mit 2x 64GB aus, also werden die 128GB im 8 Pro wohl auch ausreichen…

Ich bin gespannt, wann das Telefon kommt und ob ich wieder so zufrieden damit sein werde, wie mit dem OnePlus One und meinem jetzigen Sony XZ Premium.

Kategorien
Technology

KubeConEU wurde verschoben

Eigentlich wollte ich Ende März zur KubeConEU. Durch die letzten Meldungen zur Grippewelle und COVID-19 hatte ich mich schon gefragt, ob die Konferenz wirklich stattfindet bzw. ob ich wirklich an einen Ort möchte, an dem viele Menschen aus vielen Ländern zusammenkommen. Die Entscheidung wurde mir jetzt abgenommen: die Konferenz wurde auf Juli/August verschoben.

The health, safety, and wellbeing of our attendees and staff are our highest priority, and we know that what makes KubeCon + CloudNativeCon such a great event is the people who gather there. Thus, after discussions with many community members, we have made the difficult decision to postpone KubeCon + CloudNativeCon Amsterdam (originally set for March 30 to April 2, 2020) to instead be held in July or August 2020.

https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/attend/novel-coronavirus-update/
Kategorien
Technology

Vorbestellt: Sony Xperia XZ Premium

Seit ein paar Wochen beschäftige ich mich wieder mit Smartphones, da mein aktuelles OnePlus One mittlerweile in die Jahre gekommen und Akkukapazität verloren hat. Ausserdem startet es öfter mal neu, was besonders nervig ist, wenn man gerade Musik oder Podcasts hört. Die Neustarts liegen auch nicht am verwendeten Custom ROM, das Verhalten war mit unterschiedlichen ROMs gleich…

Wie auch immer. Der Titel sagt es ja schon: Ich habe mir das neue Xperia XZ Premium von Sony vorbestellt. Ausschlaggebend war die Hardware: neue Generation der Snapdragon CPU, sehr gute Kamera, erweiterbar durch SD-Karten.

Vorbesteller bekommen auch noch den Kopfhörer Sony MDR-100ABN dazu, wenn sie die IMEI des Telefons bis zum 31.07.2017 bei Sony Wow registrieren. Ich bin nicht an dem Kopfhörer interessiert, aber wenn ich ihn anschliessend bei Ebay für einen guten Preis verkaufe, sinkt der Preis des Telefons auf ein erträgliches Mass. Hoffentlich klappt das alles.

Nochmal zum Telefon selbst:

  • Snapdragon 835 (neuste Generation)
  • 4GB RAM, 64GB interner Speicher
  • 5,5”/14cm 4k Display (nur bei Videos u.ä., normaler Betriebsmodus ist anscheinend reguläres 1080p)
  • 3230mAh Akku (nicht besonders groß, vor allem für das 4k Display)
  • Frontkamera 13MP, 22mm Weitwinkel F2.0
  • Rückkamera 19MP, 25mm Weitwinkel F2.0, Zeitlupe (bis zu 240FPS, konnte ich in einem Video-Review erkennen – aber niemand spricht darüber, vielleicht muss ich dann mal ein eigenes Video dazu machen, wenn ich das Telefon habe) und Superzeitlupe mit 960FPS (ist allerdings begrenzt auf 0,2s, da muss man schon sehr genau drücken)

Die Superzeitlupe ist natürlich ein technisches Highlight, aber 0,2s sind schon sehr, sehr wenig für ein Video. Da muss man schon sehr viel Übung haben oder mehrere Anläufe aufzeichnen, wenn man eine bestimmte Sequenz in Superzeitlupe aufnehmen möchte. Für mich ist da die normale Zeitlupe mit 120FPS oder evtl 240FPS interessant. Wenn ich damit mein Training filme, wird die die Analyse der Technik nochmal sehr viel einfacher. Ausserdem kann ich damit meine Gehversuche in der Videobearbeitung weiter machen.

Jetzt muss ich mich aber noch ein paar Wochen gedulden, der offizielle Verkaufsstart für das Handy ist der 01.06.2017. Ich hoffe, dass die Vorbestellungen dann auch als erstes geliefert werden und nicht wie bei manchen Computerspielen, die im Laden schneller verfügbar sind als für die Vorbesteller.

Das war’s auch erstmal. Ich denke, ich werde noch ein paar Posts machen, wenn ich das Handy wirklich in der Hand habe. Ich werde diesmal auch versuchen, das offizielle ROM drauf zu lassen – aber rooten muss sein, glaub ich. Ohne Adaway halte ich nicht lange durch.

Kategorien
Technology

Docker image for Wallabag v2

Sometimes I want to save articles that I want to read for later, because I don’t have the time to read right now. There are a couple of free online services that you can use, like Instapaper or Pocket. The services all work the same:

  • you give them a link to a webpage you want to read later
  • they scrape the page and store the text
  • when you got time, you open the service in your browser or a mobile app and read the article
  • you can save, delete, star the article

But with my ongoing quest to avoid services and host my own versions of them, I began using my own installation of Wallabag a couple weeks ago. Of course I decided to run it in a Docker container. Wallabag provides an official docker image you can use to get started. It works fine, although I had an issue when trying to run it behind a reverse proxy. But I worked around that and Wallabag in general works good enough that I don’t feel the urge to switch back to Instapaper every time I use it. The android app could use some love, but – again – it works good enough that I don’t want to hang myself everytime I use it.

Then I had a couple of issues with the docker container on my server. I tried to restart a couple of my container and while checking the process list of the server I noticed a defunct process pointing to the s6 and nginx services in the Wallabag container. This lead to a full server reboot, because I couldn’t kill the process and I couldn’t get rid of the container.

Because I don’t like rebooting my server just because I have a stray container running, I build my own docker image for Wallbag based on php:apache image and without any kind of additional supervisor. I run a couple other containers based on this image and I never had any issues with them, so I hope there won’t be any stray processes on my server anymore.

To use my image, just run the following command on your command line:

docker run --rm -p 8080:80 -v ./data:/var/www/wallabag/data moritanosuke/wallabag-docker

After the container is up, you can access your Wallabag at http://localhost:8080. All data will be stored in the directory data, so you should be able to stop/start the container and all your stored articles should still be there. Please note that I use the option --rm, so the container will be removed as soon as it is stopped.

Personally I like to run my containers via docker-compose. Here’s an example for your docker-compose.yml:

version: '2'

services:
  wallabag:
    image: moritanosuke/wallabag-docker
    ports:
    - 8080:80
    volumes:
    - ./data:/var/www/wallabag/data
    environment:
    - SYMFONY_ENV=prod

Now you can just run docker-compose up and you should be able to access your Wallabag at http://localhost:8080 again.

My docker image is slightly bigger, 260MB for an apache image instead of 150MB for the official image based on Alpine Linux – but I take that if I don’t have to reboot my server every couple of weeks.

If you want to try Wallabag, please give my image a shot and report any issues so I can improve it.

Kategorien
Technology

Dockerfile to build qdirstat

Today I wanted to check how much diskspace I wasted in my home directory. On windows I’d use WinDirStat and on linux there is the alternative qdirstat. Unfortunately there is no pre-build binary for my distribution, so I decided to build from source. But I don’t want litter my system with Qt dependencies, so I decided to build it in a docker container. Here’s my Dockerfile:

First you have to create an image from this Dockerfile:

# copy the Dockerfile into a new directory and run the following command in a terminal in that directory
docker build -t moritanosuke/qdirstat .

Now you can start a container from this image to clone and build qdirstat:

# run the container
docker run --rm -it -v $(pwd):/usr/target moritanosuke/qdirstat

Now you should have the executable in the current directory. The owner will be root, but you should be able to run it on your local machine now – assuming that you have all dependencies to run Qt applications already installed. The container was removed right after it completed the build, so the only thing left to do is removing the image:

docker rmi moritanosuke/qdirstat

This is now my preferred way to build random open source projects without messing up my local machine. In earlier times I used full blown VMs with snapshots, but this is even faster.

Kategorien
Technology

Changing volume for the current audio device using pactl

I’m still in the process of setting i3wm up for use on my desktop and laptop computers. Today I noticed that my configuration still used a hardcoded value when changing the volume for my audio device. But I’m using a Xonar soundcard on my desktop, a logitech headset for my gaming needs and regular speakers on both the desktop and the laptop. I had to figure out how to get the current audio device and change the volume for that, instead of “just the first” audio device.

Luckily, the command line has all thing ready for this task and i3 makes it easy to configure it. The command pactl list short sinks produces output like this:

0 alsa_output.pci-0000_01_00.1.hdmi-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
1 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
2 alsa_output.usb-ASUS_Xonar_U7-00-U7.analog-stereo module-alsa-card.c s16le 2ch 48000HzRUNNING

Now it’s easy to get the device currently in use with simple grep and awk commands:

pactl list short sinks|grep RUNNING|awk '{print $1}'

This commands return the first row of the above output, i.e. 2 when I’m using my Xonar soundcard. Now I can modify my keybinding for the media keys on my keyboards or the scrollwheel on the Xonar device. Here’s the section from my configuration file (see all in my github repo):

# Pulse Audio controls
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume $(pactl list short sinks|grep RUNNING|awk '{print $1}') +5% #increase sound volume
bindsym XF86AudioLowerVolume exec pactl set-sink-volume $(pactl list short sinks|grep RUNNING|awk '{print $1}') -- -5% #decrease sound volume
bindsym XF86AudioMute exec pactl set-sink-mute $(pactl list short sinks|grep RUNNING|awk '{print $1}') toggle # mute sound
Kategorien
Technology

Wechsel zu ArchLinux

Was macht man, wenn man Urlaub und viel freie Zeit hat? Genau, man wechselt auf dem Dell XPS 15 Laptop von Ubuntu zu ArchLinux. 🙂 Eigentlich war ich zufrieden mit Ubutu, aber der Geek in mir wollte schon immer ein etwas nerdiges Linux ausprobieren. Ausserdem passt mein aktueller Window Manager i3wm nicht so ganz zu Ubuntu und mit einiger Gnome-Software war ich auch unzufrieden. Ich hatte kurz mit dem Gedanken gespielt, zu Gentoo zu wechseln, aber ganz so viel Frickelei wollte ich mir nicht antun. Und ArchLinux scheint in den letzten Monaten viel Zuwachs bekommen zu haben. Die Dokumentation sah auch sehr schön aus, ausführlich und trotzdem verständlich.

Also habe ich – nach einem Backup meiner Daten – kurzentschlossen einen bootbaren USB-Stick mit ArchLinux fertig gemacht und die Installation nach Installation Guide durchgeführt. Dabei gab es keine Überraschungen, sogar mit dem EFI kam ArchLinux gut zurecht. Nach nicht mal einer Stunde hatte ich das Grundsystem und die wichtigste Software installiert und konnte eine Runde Minecraft spielen. :thumbsup:

Bei den folgenden Dingen hatte ich ein wenig Bedenken, aber letztendlich hat alles gut funktioniert:

  • WLAN
  • Sound
  • die eingebaute Nvidia-Karte (klappt hervorragend mit Bumblebee)
  • HiDPI Display

Die Paketverwaltung mit pacman funktioniert hervorragend, auch Community-gepflegte Software per AUR zu installieren klappt reibungslos. Ich bin zufrieden und werde ArchLinux erstmal weiter nutzen.

Kategorien
Technology

Zurück bei Jekyll

Nachdem ich in den letzten Wochen die Blogsoftware Ghost genutzt habe, bin ich heute morgen wieder zurück zu Jekyll gewechselt. Dazu haben mich vor allem die fehlenden Features von Ghost bewogen, vor allem die folgenden Dinge haben mich gestört:

  • Keine Suchmöglichkeit in der Admin-Oberfläche
  • Viele Änderungen an den Themes, so dass mit jedem Ghost-Update Anpassungen am Theme notwendig waren
  • Admin-Oberfläche ist auf Mobilgeräten nur schwer zu bedienen

Als langjähriger Linux-Nutzer sind mir Kommandozeilentools am liebsten und Jekyll hat auch durch die Unterstützung bei Github viel gewonnen. Github hat in den letzten Monaten mehrere Änderungen ausgerollt, um das Editieren im Browser zu erleichtern. Früher konnte man z.B. keine neuen Dateien in einem Repository anlegen, was neue Blogeinträge effektiv verhindert hat, wenn man gerade keinen eigenen Rechner zur Verfügung hatte. Mittlerweile ist das alles möglich und die Oberfläche von Github ist mir so geläufig, dass ich damit sogar besser klar komme, als mit der Admin-Oberfläche von Ghost. Dazu kommt noch, dass die Suchmöglichkeiten bei Github sehr viel besser sind.

Die Liste der Import-Tools enthält einen Importer für Ghost names jekyll_ghost_importer. Leider kam das Tool bei mir nicht mit einem JSON-File der Ghost-Version 0.5.8 zurecht. Vielleicht antwortet mir der Autor noch auf meine Frage, ob das Tool noch angepasst wird.

In der Zwischenzeit habe ich mir selbst ein kleines Python-Skript erstellt, dass aus dem Ghost-JSON entsprechende Drafts und Posts für Jekyll erstellt. Das Skript ist unter https://github.com/MoriTanosuke/Ghost-to-Jekyll verfügbar.

Anschliessend blieb noch die Übernahme des Themes. Das hat zwar etwas gedauert und ich könnte wetten, dass jemand mit guten CSS-Kentnissen die Hände über dem Kopf zusammenschlagen wird, aber ich habe bei meinen ersten Tests keine großen Unterschiede bemerkt.

Wenn ihr also diesen Eintrag lest, dann wascht ihr bereits eure Hände in Jekyll und dem migrierten Casper-Theme. 😀 Ansehen könnt ihr euch das ganze wie zuvor im Quelltext in meinem Blog-Repository.