Gedankenspiel: Automatisierung bei Big Corporate

Zielsetzung: Wir m枚chten von eigenes Autos auf Taxi als Dienstleister wechseln.

Wir kennen allerdings das Taxi-Business zu wenig, f眉hlen uns unsicher und bestellen daher erstmal Fahrer, die in unseren eigenen Autos Taxi fahren sollen. Die Fahrer sind aber keine ausgebildeten Taxi-Fahrer, kennen die Strassen nicht, und das Navi ist leider ein proprit盲res Produkt mit veralteter Karte. Allerdings von namhaften Hersteller, was nicht wirklich was bringt. Ebenso bieten wir auch unseren Fahrern Kaffee von Starbucks, damit sie nicht einschlafen und die Stra脽en lernen k枚nnen.

Ziemlicher K盲se, oder?

Kubernetes w盲re in dem Fall das Car-Sharing. MyTaxi.eu oder Uber die Amazon-Services. Und weil Amazon es eh besser kann, denken wir, wir k枚nnten unseren “Taxi-Fahrern ohne Plan” ja von 脺ber gemietete Autos hinstellen, in der Hoffnung, das sie die Stra脽en dann effizienter abfahren.

Oder auf deutsch: warum Migration in Baby-Steps manchmal Unsinn ist. Automatisiert was geht, und nehmt bitte Abstand von halbgahren L枚sungen, weil Kontrollfreaks nunnal FUD und Babysteps propagieren. Die Zeit, die f眉r #reinventingthewheel oder das “wir wollen es erstmal verstehen oder sehen dass es funktioniert” drauf geht, kann man getrost auch ins Development stecken. Infrastructure first. Nehmt euch DevOps die euch ne Infrastruktur und ne CI hinstellen und l盲sst sie machen. Umso schneller steigt ihr in eure eigenes Taxis ein und m眉sst euch um den Weg zum Ziel keine Gedanken mehr machen. Je besserer die Automatisierung l盲uft, desto weniger Fehler gibt es. Eine Liste mit zig Punkten, die trotzdem manuell abgearbeitet werden muss, bleibt nunmal fehlertr盲chtig und es geht nur menschliche Zeit und Nerven darauf. Und Devs lernen auch nichts, au脽er menschliche Fehler zu wiederholen. Also, noch mehr Frust satt an einer CI zu arbeiten, die Dinge wirklich einfacher machen w眉rde. Time to Rollback. Time to go live. Instant response. Zeit f眉r Tests und Qualit盲t statt immer der gleiche Bullshit.

Auch ja, und dann gab es noch diese fetten Limosinen aka. vertikale Bare Metal Skalierung. Hat sich leider im Berufsverkehr als unpraktikabel erwiesen. Aber h眉bsch sehen sie ja aus. Wer’s braucht…

PHP: just in case posix_isatty() is missing

From StackOverflow

Short function

function is_a_tty() 
{
    static $result;
    if (is_null(result)) {
        $fp = fopen('php://stdin', 'r');
        $stat = fstat($fp);
        $mode = $stat['mode'] & 0170000; // S_IFMT
        $result = $mode == 0020000; // S_IFCHR
        fclose($fp);
    }
    return $result;
}

Info Class from StackOverflow by leigh

<?php

class IOMode
{
    public $stdin;
    public $stdout;
    public $stderr;

    private function getMode(&$dev, $fp)
    {
        $stat = fstat($fp);
        $mode = $stat['mode'] & 0170000; // S_IFMT

        $dev = new StdClass;

        $dev->isFifo = $mode == 0010000; // S_IFIFO
        $dev->isChr  = $mode == 0020000; // S_IFCHR
        $dev->isDir  = $mode == 0040000; // S_IFDIR
        $dev->isBlk  = $mode == 0060000; // S_IFBLK
        $dev->isReg  = $mode == 0100000; // S_IFREG
        $dev->isLnk  = $mode == 0120000; // S_IFLNK
        $dev->isSock = $mode == 0140000; // S_IFSOCK
    }

    public function __construct()
    {
        $this->getMode($this->stdin, fopen('php://stdin', 'r'));
        $this->getMode($this->stdout, fopen('php://stdout', 'w'));
        $this->getMode($this->stderr, fopen('php://stderr', 'w'));
    }
}

$io = new IOMode;

Input

$ php io.php
// Character device as input
// $io->stdin->isChr  == true

$ echo | php io.php
// Input piped from another command
// $io->stdin->isFifo == true

$ php io.php < infile
// Input from a regular file (name taken verbatim from C headers)
// $io->stdin->isReg  == true

$ mkdir test
$ php io.php < test
// Directory used as input
// $io->stdin->isDir  == true
Output:

$ php io.php
// $io->stdout->isChr  == true

$ php io.php | cat
// $io->stdout->isFifo == true

$ php io.php > outfile
// $io->stdout->isReg  == true
Error:

$ php io.php
// $io->stderr->isChr  == true

$ php io.php 2>&1 | cat
// stderr redirected to stdout AND piped to another command
// $io->stderr->isFifo == true

$ php io.php 2>error
// $io->stderr->isReg  == true

I hope those PHP stuff finally dies 馃檨