Ausbildung am Wochenende

ABC Übung

Ich bin mal wieder unterwegs :)

Zur Zeit komme ich in den Genuss des Zugführerlehrgangs beim ASB Bundesverband.
Dieses Wochenende standen 'Dekon-V' und 'Einsatztaktik MANV' auf dem Programm.

Hierbei durften wir am Samstag Nachmittag eine Patientenablage für kontaminierte Betroffene einrichten und anschließend in einer kleinen Übung auch betreiben. Es war eine sehr wertvolle Erfahrung zusätzlich zu den theoretischen Inhalten des Vormittags.

Die Übung lief in Kooperation mit der Feuerwehr Bremen, die uns die Dekontamination aufbaute und während der Übung auch die Patienten aus dem Gefshrengebiet brachte.

Ich war beeindruckt!

Wir waren 'nur' in Infektschutzanzügen unterwegs, doch die Kollegen hatten ihre Pressluftflaschen auf dem Rücken (Umluftunabhängige Atemluft) und liefen in ihren Chemikalien Schutzanzügen (CSA) herum. Wenn mir schon warm war und mir der Schweiß lief, so wollte ich nicht unbedingt selber erfahren, wie viel anstrengender es für die Feuerwehr war.

Alles in Allem war es eine sehr gute Übung und lehrreiche Erfahrung - auch einsatztaktisch gesehen - wie man so etwas vorbereitet, aufbaut und dann auch durchführt. Ebenso war die Kommunikation mit der Feuerwehr sehr wichtig, denn wir bekommen von ihnen die Patienten und geben sie quasi auch wieder an Sie zur Dekontamination ab.

Ich freue mich jedenfalls schon auf die nächsten Wochenenden und was mich so erwarten wird...

PHP curl: open_basedir vs. FOLLOWLOCATION

Es ist doch ab und an ein leidiges Thema mit der Web-Entwicklung. Ich habe schon länger mit curl in PHP Skripten gearbeitet, doch bei mir lokal (wo ich diese hauptsächlich benutze und ausführe) gab es nie Probleme...

Kurz, worum geht es überhaupt im Detail:
Ich habe plötzlich die Fehlermeldung auf dem Bildschirm: CURLOPT_FOLLOWLOCATION cannot be activated when an open_basedir is set.

Die Lösung liegt in einem kleinen Workaround, den ich euch hier gern zur Verfügung stelle.
Wir gehen schlicht und einfach her und springen selber von Seite zu Seite... Entweder, bis das Maximum erreicht wurde (oder halt auch nicht :D).

<?php

/**
 * curl_exec_follow_location
 *
 * executes curl_exec without security bug of
 * CURLOPT_FOLLOWLOCATION and open_basedir.
 *
 * @param ressource $ch         curl handler
 * @param int       $maxredirs  max. number of redirects; default -1, unlimited
 *
 * @return mixed
 */
function curl_exec_follow_location($ch, $maxredirs = -1) {
  if (ini_get('open_basedir') === '' && ini_get('safe_mode') === 'Off') {
    // Requirements fit to native follow location
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $maxredirs != 0);
    if ($maxredirs > 0) {
      curl_setopt($ch, CURLOPT_MAXREDIRS, $maxredirs);
    }
  } else {
    // need to use a workaround
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    $origin = $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    $cp = curl_copy_handle($ch);

    curl_setopt($cp, CURLOPT_HEADER, true);
    curl_setopt($cp, CURLOPT_FORBID_REUSE, false);
    curl_setopt($cp, CURLOPT_RETURNTRANSFER, true);

    $run = $maxredirs != 0;
    $mr = $maxredirs;
    while ($run) {
      curl_setopt($cp, CURLOPT_URL, $url);
      $header = curl_exec($cp);

      if (curl_errno($cp)) {
        $run = false;
      } else {
        $code = curl_getinfo($cp, CURLINFO_HTTP_CODE);
        if ($code == 301 || $code == 302) {
          preg_match("/Location:(.*?)\n/i", $header, $matches);
          $url = trim(array_pop($matches));

          if (!preg_match("/^https?:/i", $url)) {
            $url = $origin.$url;
          }
        } else {
          $run = false;
        }
      }

      // max jumps reached
      $mr--;
      if ($maxredirs > 0 && $mr == 0) {
        $run = false;
      }
    }
    curl_close($cp);

    if ($maxredirs == -1 || ($maxredirs > 0 && $mr > 0)) {
      curl_setopt($ch, CURLOPT_URL, $url);
    }
  }

  return curl_exec($ch);
}

?>

XML unter PHP etwas leichter...

Nachdem es mir bisher noch nicht geglückt war eine PHP Klasse zu finden, die mir sehr einfach ein beliebiges Objekt unter PHP in ein XML Dokument umwandelt, habe ich beschlossen, einfach selber eine minimalistische Klasse zu implementieren.

Das Ergebnis ist nun nach 2 Abenden online und wird mir hoffentlich oft die Arbeit erleichtern :)

Ergebnis: @BitBucket

// serializer object
$xmlSerializer = new AMWD\XmlSerializer();

// Object => XML String
$string = $xmlSerializer->Serialize($object);

// XML String => Object
$object = $xmlSerializer->Deserialize($string);

Alte Seite in neuem Gewand

Es ist nun also so weit...

Ich habe die letzten Wochen damit zugebracht und ein wenig mit Bootstrap gespielt.
Ich muss sagen, dass ich am Anfang ein wenig skeptisch war, da es mir doch recht steif vor kam, doch nun ist doch mal wieder eine Webseite dabei herausgekommen.

Also... hier ist sie wieder... UND ich verspreche jetzt dann endlich regelmäßiger zu schreiben (zumindest habe ich mir das vorgenommen)

Prüfungen rum...

What a Day

So, die letzte Prüfung ist heute rum!

Jetzt heißt es für heute mal die Füße hochlegen, denn schon morgen geht es wieder weiter ;)

Dann geht es darum, die Unterlagen für das Abschlusswochenende Gruppenführer in Leipzig zu studieren und mir auch die Folien/Aufgaben für meinen Job als Tutor das nächste Semester... Ausruhen ist nicht :p