Kategorien
Allgemein

Wochenbericht 2021.12

  1. California Bans ‘Dark Patterns’ That Trick Users Into Giving Away Their Personal Data – Strengthening The State’s Landmark Digital Privacy Legislation
  2. University of Helsinki language technology professor Jörg Tiedemann has released a dataset with over 500 million translated sentences in 188 languages
  3. How to Create a Shrinking Header on Scroll Without JavaScript
  4. Bestandsdatenauskunft mit Passwortherausgabe verabschiedet

Was zum Lachen: Meanwhile on Mars #16 – Waiting for 2028

Kategorien
Allgemein

Corona, Agile, Hausaufgaben, Kanboard.

Aktuell sind wir als Eltern auch mit einem Grundschulkind zu Corona-Zeiten zuhause. Homeschooling und Home-Office, yeah! Dazu ist meine Frau Mitglied einer Abschlussklasse, was die Situation deutlich verkompliziert.

Wir versuchen dabei, das ganze möglichst gelassen anzugehen, auch wenn wir mittlerweile echt müde von den Maßnahmen sind. Wir halten uns daran und sind im Zweifel eher etwas vorsichtiger als andersherum, in der Hoffung, dass der Spuk dann schneller rum ist.

Wir haben dabei mit der Schule von Kind#0 wirklich Glück. Die Lehrerin ist engagiert, technikaffin, kennt als Mutter von ähnlich alten Kindern auch die aktuellen Herausforderungen für Familien. Sie hält jeden Morgen mit den Kindern eine 30-60-minütige Videokonferenz mit der gesamten Klasse. Wie ein Daily, es heisst aber “Morgenkreis” (ich überlege, meiner Firma auch eine entsprechende Umbenennung vorzuschlagen…). Dazu üer die Woche verteilt Kleingruppen mit einer ähnlichen Zeitspanne in der “Unterricht” mit Screenshariung und Whiteboard gemacht wird.

Trotzdem gibts Probleme.

  1. Die Stimmung.
  2. Der Workload / Mental Load
    Zwei Kinder, Schule der Mama, Schule von K#0, Vollzeitstelle bei Papa, K#1 ist eigentich im Kindergarten und hat daher keine wirkliche Aufgabe vormittags.
  3. Schulaufgaben
    Wer ein Grundschulkind hat, weiß wie Kinder sich beim Thema Hausaufgaben gehen lassen können. Die Wochenpläne, die ja recht verbreitet sind, fühlen sich für die Kinder dabei an, als haben Sie nur Hausaufgaben.

Stimmung und Workload.

Die Themen sind relativ stark verknüpft, da hoher Workload, ständiges Hinterherräumen und darum Kämpfen zu müssen, auch mal in Ruhe Arbeiten zu können, einfach zusätzlich und unnötig an den Nerven zehrt. Die Kinder sind auch gestresst. Ein Kind vom Nichtstun, eins von den Uuuuuuunmengen an Hausaufgaben.

Retros

Wir haben uns überlegt, eine Retrospektive oder “Dailies” mit den Kinden gemeinsam zu machen und einen festen Anker im Tagesplan zu haben, bei dem man den Tag, was gut lief, was nicht gut lief und was man vielleicht daran ändern kann. Das Muster hierbei ist der 10-Minuten-Familienrat von Silke von agile parenting. An Wochenden ergänzen wir das oft mit einer “Was haben wir heute jeweils vor / zu tun” Komponente beim Frühstück.

Vor dem eigentlichen Gespräch machen wir dabei ein kleines Stimmungsbild, wie der jeweilige Tag so war, per Daumen (gut, mittel, doof). Ich bin das Buch in dem unsere “Tagesthemen” drinstehen mal durchgegangen und hab die Daumenzahlen in eine Tabelle geschrieben.

Ich finde, die Aggregation der Werte auf Wochendurchschnitte offenbart: Tiefpunkt ist der Schulbeginn in Hessen. Die erste Woche war der Horror. Von da an geht es bergauf.

Lebensregeln

Wir haben einen Weg gesucht, das gemeinsame Zusammenleben sinnvoller beschreiben zu können, so dass auch K#1 damit gut klarkommt. Gefunden haben wir die “Lebensregeln” von Rebecca und Mauricio Wild:

  • Wir bemühen uns, niemanden zu verletzen.
  • Wir bemühen uns, nichts zu zerstören.
  • Wir bemühen uns, andere nicht zu stören.
  • Wir beteiligen uns an der Arbeit.
  • Wir bemühen uns, Ordnung zu halten.

Damit haben alle die gleiche Basis und alle haben dem zugestimmt. Das macht es im täglichen Leben etwas einfacher, wenn man um Hilfe bittet, oder Konflikte auftreten.

Das Thema Stimmung ist seitdem besser geworden. Machen wir uns aber nichts vor: Es gibt immer Tage, die 💩 laufen.

Hausaufgaben – Wochenpläne – Kanboard

In der Corona-Zeit werden Wochenpläne von den meisten Lehrern verteilt. Das ist aus meiner Sicht gar nicht schlimm und und fördert im besten Fall auch die Selbstorganisation. In unserem Fall haben wir folgende Dinge versucht:

Woche 1: Wochenplan as-is, unser Kind hat sich geweigert irgendeine Form der Forschrittsnotation zu machen, trotz mehrfachem guten Zureden und Hilfangeboten. Das endete damit, dass wir Donnerstag und Freitag viele Dinge aus der Woche nachholen mussten – Frust auf allen Seiten. Online-Aufgaben sind aus der Betrachtung tatsächlich rausgefallen.

Woche 2: Wir haben im Wochenplan die Aufgaben genauer ausgeschrieben: Wo “AH Seite 1” stand, haben wir Sonntag geschaut wie viele Aufgaben es dort gibt und diese als Abzuhakende Aufgaben dazugeschrieben. Das hat in Woche 2 gut funktioniert, in Woche 3 dann nicht mehr, trotz Bitten, Hilfsangeboten und Co. Das war Donnerstag/Freitag dann nicht mehr ganz so viel wie Woche eins, aber wieder viel zu tun.

Woche 4: Experiment: Kanban Board, digital. Ich habe zuhause auf dem NAS die Software Kanboard installiert, ein Projekt mit mit und dem Kind angelegt. Lustige Avatare und ein bisschen Styling und los geht’s.

Dazu gab’s ein paar Automatische Regeln, die die Tickets je Kategorie (Schulfach) eingefärbt haben, je nach Spalte automatisch Bearbeiter zugewiesen haben:

  1. Zu erledigen: Niemand
  2. Bereit: Enthält automatisch die Aufgaben des aktuellen Tages, Bearbeiter: Kind
  3. In Arbeit: Die Aufgaben, die das Kind rüberzieht
  4. Kontrolle: Der Bearbeiter wechselt automatisch auf Papa
  5. Fertig: Kein Bearbeiter

Der Verlauf der Woche ist in der Galerie zu sehen. Das lief ziemlich gut, das Kind hat ein Notebook und das Kanban-System war schon bekannt, so dass die digitale Umsetzung kein Problem war.

Am Ende der Woche haben wir uns dann zusammen kurz die Statistiken angeschaut, die Kanboard generiert, wenn man es mit den richtigen Daten füttert und haben festgestellt, dass der Flaschenhals der Hausaufgaben im Verlauf einer Aufgabe bei der Kontrollstelle liegt…

Für alle, die auf ein spannendes Experiment haben: Probiert es aus, die Automatischen Regeln sind auch unten in der Galerie.

Was noch zu sagen war: Kanboard bietet eine wunderbare Excel-Import-Vorlage an, mit der man so einen Wochenplan fix runtertippern und dann importieren kann. Wer ein Beispiel dazu haben möchte, schreibt mir am besten eine E-Mail.

Kategorien
Allgemein

Wie Corona Familien agile Prinzipien näherbringt.

Der 16.03. hat unser Leben in Hessen von einem auf den anderen Tag umgekrempelt. Alles was sicher und stabil lief, Arbeit, Kinderbetreuung, etc. wurde sich von einem auf den anderen Tag in Frage gestellt. Schule zu, Kita zu und nebenbei arbeiten, wie soll das gehen?

Kategorien
Allgemein

Willkommen 2020

Das Team von Develovers wünscht euch einen guten Start ins neue Jahr und möchte auch dieses Jahr einen sinnvollen Überblick über die Bewegungen in der Webentwicklungs-Welt berichten.

Und nicht nur hier, auch beruflich hat sich (für mich) ein bisschen was verändert, mal schauen ob das hier abfärbt, aber ich denke eher nicht, mein Aufgabenfeld bleibt auch beim neuen Arbeitgeber recht ähnlich.

Ich wünsche mir für 2020 auf jeden Fall Zeit für ein paar Feature-Posts, die ich letztes Jahr nur sehr begrenzt hinbekommen habe. Außerdem hoffe ich, eine bessere Kontinuität bei den Wochenberichten zu schaffen, das war ja zwischendrin zeitlich auch eher etwas durcheinander. Dazu habe ich mir ja mittlerweile Hilfe gebaut.

Dafür hat der Kollege Alex dann letztes Jahr ein paar Dinge zu PHP und Docker gepostet, was ich sehr großartig fand.

Ich bin auf jeden Fall gespannt, wie es dieses Jahr weiter geht.

Kategorien
Allgemein Code Werkzeuge

Running PHP with Docker

As a developer who works on multiple projects you often need different PHP versions for running tests or installing Composer packages.

I created a little Bash script that runs Docker for executing PHP in your project context. The script looks like this (don’t be scared, I will walk you through it step by step):

#!/usr/bin/env bash

phpVersion=7.2
remainingArguments="$@"

if [[ "$1" =~ (5.6|7.0|7.1|7.2|7.3) ]]; then
    phpVersion=$1
    remainingArguments="${@:2}"
fi

echo "Using PHP version $phpVersion"

docker run  --interactive --rm --tty \
    --user $(id -u):$(id -g) \
    -v ${HOME}/.ssh:${HOME}/.ssh:rw \
    -v ${SSH_AUTH_SOCK}:/ssh-auth.sock \
    --env SSH_AUTH_SOCK=/ssh-auth.sock \
    -v /etc/passwd:/etc/passwd:ro \
    -v /etc/passwd:/etc/group:ro \
    -v ${HOME}/.config/composer:${HOME}/.config/composer:rw \
    -v ${HOME}/.cache/composer:${HOME}/.cache/composer:rw \
    --env COMPOSER_CACHE_DIR=${HOME}/.cache/composer \
    --env COMPOSER_HOME=${HOME}/.config/composer \
    -v "$(pwd)":"$(pwd)":rw -w "$(pwd)" \
    --add-host db:127.0.0.1 \
    --net=host \
    intera/docker-ci-php:${phpVersion}-ubuntu \
    php${phpVersion} ${remainingArguments}

The script can be used like this:

php.sh 7.3 vendor/bin/phpunit

The first argument 7.3 is the PHP version. After that you can provide the arguments to the PHP command. The example above would run phpunit with PHP version 7.3.

You can also omit the PHP version argument and it will use the default PHP version that is defined in the script. The following command executes phpunit with PHP 7.2:

php.sh vendor/bin/phpunit

Argument Handling

The first block of the script handles the PHP version switching and extracting the remaining arguments that should be passed on to the PHP command.

By default PHP 7.2 is used and all arguments are passed on:

phpVersion=7.2
remainingArguments="$@"

If the first argument is a known PHP version it overwrites the default version and is removed from the arguments that are passed on:

if [[ "$1" =~ (5.6|7.0|7.1|7.2|7.3) ]]; then
    phpVersion=$1
    remainingArguments="${@:2}"
fi

The docker command parts

Let’s walk though the different parts of the docker command.

The first parameters will start an interactive terminal. Without them you won’t get nicely colored output:

--interactive --tty

The container is removed after the command is finished:

--rm

We switch the user and group to the currently logged on user to prevent permission problems. We also need to mount /etc/passwd and /etc/group. Otherwise the container would not know about the name of the current user and his groups. These volumes can be read-only (:ro).

--user $(id -u):$(id -g) \
-v /etc/passwd:/etc/passwd:ro \
-v /etc/passwd:/etc/group:ro \

The Composer directories from the user’s home directory are mounted to make sure the Composer cache is persisted and it has access to its config:

-v ${HOME}/.config/composer:${HOME}/.config/composer:rw \
-v ${HOME}/.cache/composer:${HOME}/.cache/composer:rw \
--env COMPOSER_CACHE_DIR=${HOME}/.cache/composer \
--env COMPOSER_HOME=${HOME}/.config/composer \

The current directory is mounted as a volume and the working directory of the Docker command is changed to this directory. Without access to your project files executing PHP would not make much sense 😉

Important! Please be aware that all files required by PHP (or Composer) must be subfolders of the current working directory. Symlinks that point outside that folder will not work.

-v "$(pwd)":"$(pwd)":rw -w "$(pwd)" \

The network part

In some of my (TYPO3) projects a Composer script is executed after install / update that needs access to the database (TYPO3 Console).

The database is running in a docker container and its port is mapped to my localhost. This allows me to use the following configuration:

--net=host \
--add-host db:127.0.0.1 \

The net=host option connects the container with the host network which allows it to access the database.

With add-host you can add additional hostname entries. In my case the Docker container running the database is called db which is also used as database hostname in the application config. With the entry above the db host will be resolved to your localhost.

The SSH part

This part is only required when you need SSH authentication. A common use case is loading private Git repositories via Composer.

The .ssh folder is mounted from the user’s home directory. This gives us access to the SSH config, the key files and the known_hosts file. You might be able to change this to a read-only volume when neither of these two conditions apply:

  • not all SSH hosts are present in your known_hosts file and SSH needs to update it
  • you are using a persistent SSH connection (ControlMasterControlPathControlPersist) and its path is located in your ~/.ssh folder

We also forward the socket of your SSH agent to use passwordless authentication:

-v ${HOME}/.ssh:${HOME}/.ssh:rw \
-v ${SSH_AUTH_SOCK}:/ssh-auth.sock \
--env SSH_AUTH_SOCK=/ssh-auth.sock \

The image

The Docker image is custom made and based on Ubuntu and the awesome PPA of Ondřej Surý.

It is publicly available on Docker Hub in PHP version 5.6 to 7.3.

The tag is switched depending on the selected PHP version.

Of course you can use your own image.

intera/docker-ci-php:${phpVersion}-ubuntu \

The PHP command (finally!)

The PHP command is switched based on the selected PHP version.

Finally the arguments passed to the command are forwarded to Composer.

php${phpVersion} ${remainingArguments}

Composer addon

The Docker images described above already contain a Composer executable at /usr/local/bin/composer.phar. This is an example to make use of it:

php.sh /usr/local/bin/composer.phar install

You can make your life even easier when you wrap the command above in another shell script that directly calls Composer:

#!/usr/bin/env bash

THIS_SCRIPT_DIR="$( cd "$( dirname `readlink -f "${BASH_SOURCE[0]}"` )" >/dev/null && pwd )"

phpVersion=7.2
remainingArguments="$@"

if [[ "$1" =~ (5.6|7.0|7.1|7.2|7.3) ]]; then
    phpVersion=$1
    remainingArguments="${@:2}"
fi

${THIS_SCRIPT_DIR}/php.sh ${phpVersion} /usr/local/bin/composer.phar ${remainingArguments}

Now you can just call

composer.sh install

SELinux

There might be issues with Linux distributions using SELinux.

I will publish another article soon that will provide solutions to these problems.