PHP-Schnipsel: jede n-te Stelle ein Zeichen einfügen

Dienstag, 26. Mai, 2015

Ein Snippet als Reminder, falls ich mal wieder danach suchen muss, dann finde ich es in meinem Blog ;-)

Jedes 5. Zeichen soll ein “/” eingefügt werden…

preg_replace ist dein Freund. Als Ersetzung gibt man $1 für die Fundstelle und nachfolgend das einzufügende Zeichen an.

$sMyFile=preg_replace('/([0-9a-f]{5})/', "$1/", $sMyFile);

Weiterführende Links

  1. php.net - preg-replace

Osterkarte 2015

Mittwoch, 1. April, 2015

Seit gestern ist meine Osterkarte 2015 online.
2015-04-01-osterkarte.jpg

Links

Cygwin - Installation per Kommandozeile: apt-cyg

Sonntag, 22. Februar, 2015

Mit Cygwin holt man sich Linux Tools auf MS Windows. Nicht nur die Linux-Befehle, auch Dienste lassen sich installieren, wie z.B. OpenSSH.

Allgemein erfolgt die Installation mit der setup.exe und einer Paketauswahl per Mausklick (ja, es gibt natürlich auch einen Filter, wo man seinen Suchtext eingeben kann). Aber dennoch fehlt ein Kommandozeilen-Tool zum Suchen und installieren neuer Pakete, wie bei den Distributionen.

Just getestet und für gut befunden habe ich apt-cyg.

In der Bash ist es mit 2 Kommandos schnell installiert:

$ lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
$ install apt-cyg /bin

Und dann hat man, wie in Ubuntu, ein apt ähnliches Programm.

$ apt-cyg
usage: apt-cyg [command] [options] [packages]

Commands:
   install     Install packages
   remove      Remove packages
   update      Update setup.ini
   download    Download only - do NOT install or unpack archives
   show        Displays the package records for the named packages
   depends     Performs recursive dependency listings
   rdepends    Display packages which require X to be installed,
               AKA show reverse dependencies
   list        List packages matching given pattern. If no pattern is given,
               list all installed packages.
   category    List packages matching given category
   listfiles   List files owned by packages
   search      Search for a filename from installed packages
   searchall   Search for a filename from all available packages

Options:
   -c, --cache <dir>      set cache
   -f, --file <file>      read package names from file
   -m, --mirror <url>     set mirror
   --help
   --version

Nun sind Pakete schneller installierbar … man sucht in der Liste der vorhandenen Pakete

$ apt-cyg searchall [Begriff]

… und installiert es

$ apt-cyg install ncftp

Fertig :-)

apt-cyg selbst ist ein Bash-Skript. Es läuft somit auf der 32-bit und 64-Bit Version von Cygwin gleichermassen.

Weiterführende Links

  1. Cygwin
  2. apt-cyg auf Github
  3. pcwdld.com: Einführung im Cygwin (en)

NTFS: in den ACLs rekursiv einen Benutzer hinzufügen

Donnerstag, 22. Januar, 2015

Auf unserem Firmen-Fileserver sollte ein Benutzer zusätzlich berechtigt werden, das NTFS zu lesen.

Das Problem: Wenn man bei einem Startverzeichnis die Rechte gibt, wird dieses dann soweit nach unten vererbt, bis es auf irgendenem Verzeichnis andere Rechte gibt. So ist im Basisverzeichnis der Zugang für alle Mitarbeiter, einige Ebenen tiefer sind Projektordner, Protokolle, … verschiedenste Ordner halt. Bei jedem einzelnen Projektordner stoppt also der Vererbungsmechanismus und man muss bei jedem dieser Projektordner den Benutzer erneut hinzufügen.

Das wollte ich nicht von Hand und hunderten von Klicks erledigen.

Die nachfolgende Batchdatei sucht ab einem Startverzeichnis rekursiv alle Verzeichnisse (dir /s /b [Verzeichnis]).

Auf jedem Verzeichnis wird iacls aufgerufen (das zeigt die Berechtigungen an) und in der Ausgabe wird geschaut, ob der User bereits drin ist.

Ist der User nicht drin, gibt es einen Aufruf für die subroutine addUser. Dort wird der Benutzer (rekursiv) hinzugefügt und auf ein Return gewartet (aber das nur zur Kontrolle).

@echo off
rem ======================================================================
::
::    Skript zum Hinzufuegen eines einzelnen Users in die bestehenden
::    ACLs
::
::  ----------------------------------------------------------------------
::  2015-01-22  Axel Hahn
rem ======================================================================
set line=-------------------------------------------------------------------------------
 
set mydir=nas-blabla\irgend\wo
set cuser=DOMAIN\newuser
 
echo.
echo %line%
echo user %cuser% hinzufuegen in %mydir%
echo %line%
 
for /F "tokens=*" %%a in ('dir /b /s /a:d %mydir%') do (
      echo ... %%a
      icacls "%%a" | findstr "%cuser%" >nul || call :addUser "%%a"
)
echo.
echo fertig.
timeout /t 100
exit
 
:addUser
echo ...... adding %cuser%
icacls %1 /grant "%cuser%":(OI)(CI)(RX)
set /p dummy=Return

Weiterführende Links

Javascript-Schnipsel: HTML strippen

Mittwoch, 21. Januar, 2015

Alle HTML-Tags entfernen … In PHP gibt es strip_tags() … und rein clientseitig mit Javascript:

function stripHtml(s) {
    return s.replace(/<[^>]*>/g, "")
}

Axels Weihnachtskarte 2014

Sonntag, 14. Dezember, 2014

Nun nun rücken sie also doch endlich in greifbare Nähe: die Fest (und Fress-?) Tage. Ich wünsche meinen Besuchern eine schöne Weihnachtszeit! Geniesst die erholsamen Tage zwischen den Jahren. Nach einem Guten Rutsch ins Jahr 2015 … mögen sich neben privaten und berüflichen Wünschen auch einige der guten alten Vorsätze erfüllen!

2014-12-14-weihnachtskarte-01.png

Axel hat sich wieder ins Zeug gelegt :-)
Ich habe - zum Glück - wieder eine einfache Idee gehabt: ich brauchte nur 2 Dinge zeichnen und scannen. Und weil ich mich mit Webseiten ein klein wenig auskenne, konnte ich es auch animieren.

Für die Hintergrundmusik wurden vor Allem klassische Instrumente ins Musikprogramm gekippt - und wer denn kann: gar in 5.1 surround lässt es sich herunterladen (s. “über” auf der rechten Seite).

Viel Spass!

weiterführende Links:

  1. Weihnachtskarte 2014
  2. Hintergrundmusik zum Download in stereo mp3 ogg … und 5.1 surround: m4a ogg
  3. Hintergrundmusik auf Soundcloud

Wenn die jQuery-Animation mit fadeIn() nicht mag

Dienstag, 9. Dezember, 2014

Ach, meine Kollegen… wo denn meine Weihnachtskarte bliebe, wurde ich gefragt…

Dabei bin ich doch dran!! Vor 3 Wochen war die Musik fertig. Die Idee für Grafik und Animation steht auch … an der Umsetzung bin ich just dabei. Und hier stiess auf eine Merkwürdigkeit: In jQuery gibt es die Möglichkeit, mit der fadeIn Funktion etwas schööön sanft einblenden zu lassen:

$('#content').fadeIn(5000);

Ich hab die Funktion so oft genutzt - aber bei diesem Element ging es einfach nicht. Plopp - mein Element war sofort da.

Ursache: die CSS-Definition dieser ID - diese enthielt ein transition Attribut:

#content{
(...)
transition: all 1s ease-in-out;
(...)
}

… tja, und wenn ein solches existiert, dann funktioniert eine jQuery-Animation nicht.

Abhilfe:
Entweder:

  • In der CSS Deklaration entfernt man die Definition für transition.
  • erst nach der gewünschten Animation setzt man transition:
    $('#content').css('transition', 'all 1s ease-in-out');

Oder: man verwirft fadeIn() und macht es rein mit CSS3: man setzt per transition die Zeitdauer und wechselt den Wert von opacity.

Weiterführende Links:

IML-Appmonitor - v0.07 - James Bond Edition

Freitag, 28. November, 2014

Nein, das mit dem Zusatz zur Version ist nur ein Witz - ein kleines Wortspiel :-)

Aber im Ernst: Ich arbeite am Institut für Medizinische Lehre (IML) an der Uni Bern. Zum Monitoring von Web-Applikationen ist etwas in PHP Geschriebenes am Entstehen.

Das Grundprinzip ist:

Web-Applikationen sollen als Client diverse Checks machen, was sie so zu ihrer Ausführung alles brauchen: Schreibrechte auf einem Verzeichnis, Verbindung zu einer Datenbank, Verbindung zu einem Remote-Server auf Port XY, whatever…
Jeden Check bewertet die Client-Applikation und stellt das Ergebnis ihrer Prüfung samt TTL (wann eine erneute Abfrage erfolgen darf) als JSON bereit. Weil das Format etwas neutrales ist, kann ein Client in verschiedenen Programmiersprachen geschrieben werden.

Ein Server sammelt die JSON Ergebnisse ein. Zunächst gibt es eine bunte Web-GUI - rein zum Ansehen des aktuellen Zustands (keine History). Neben der GUI soll beim Server in Kürze auch eine Schnittstelle für Monitoring-Systeme entstehen. Zunächst ein Nagios-Plugin für die Intregration in unser eigenes Monitoring.

UPDATE:

Die Screenshots haben rein “historischen Wert” - es wurde mittlerweile eine GUI mit AdminLTE darüber gestülpt. Github zeigt es bereits im Readme-Markdown.

2014-11-28-01-overviewpage-websites.png 2014-11-28-02-detailpage-checks-of-a-website.png 2014-11-28-03-setup-monitor-clients.png

Weiterführende Links:

Pimped Apache Status v1.15 - Icons

Donnerstag, 27. November, 2014

Immer mal wieder gibt es Update bei meinen Tools.
Beim Pimped Apache Status habe ich noch diverse Pläne. Ich wollte eigentlich Bootstrap 3 in ein Template verpacken, und es soll per WebGUI die Liste der Server und Tiles oben konfigurierbar werden, …

Nun, es sind heute “nur” die Icons eingecheckt worden und das Ganze wurde als Version 1.15 bereitgestellt.

2014-11-27-pimped-apache-status-v115.png

Weiterführende Links:

Piwik-Statistik mit statischen Grafiken in der Webseite einbinden

Montag, 17. November, 2014

Ich wollte meine Statistik-Anzeige auf meiner Startseite etwas anders haben und die Grafiken von PIWIK [01] einbinden. Es gibt verschiedene APIs [02] zum Holen von Daten - als XML, JSON oder Grafik [03]. Aber die Grafiken sollten nicht mitsamt der URL der PIWIK-Api eingebunden sein - ich wollte die Grafiken holen, cachen und die gecachten Bilder einbinden.

Das Ergebnis auf der Webseite sieht dann so aus:

2014-11-17-piwik-stats-with-static-images.jpg

Konfiguration

Zunächst einmal die Basis-Daten als Konfiguration: Für die eigene Verwendung sind die Parameter anzupassen. Die Variablennamen sollten einleuchtend sein:


// anpassen
$sPiwikToken = "419f6099c81111fdb6ae65...";
$iPiwikSiteId = 7;

// Bildgroesse und Farbe
$iImageWidth = 500;
$iImageHeight = 200;
$sBarColor = "887799";

// Domain und Pfad zu Piwik anpassen
$sBaseUrl = "http://[www.deine-domain.de/piwik]/index.php?module=API&method=ImageGraph.get"
  . "&idSite=$iPiwikSiteId&apiModule=[MODULE]&apiAction=[ACTION]"
  . "&period=range&date=last[DAYS]"
  . "&token_auth=$sPiwikToken"
  . "&width=$iImageWidth&height=$iImageHeight&colors=$sBarColor";

[Weiterlesen…]