git Repositories schnell und bequem aktualisieren

Wer mehrere lokale git Repositories auf seinem Rechner liegen hat, weiß sicher, welche „Freude“ es macht, diese auf dem aktuellen Stand zu halten.

Mit ein wenig Shell-Script geht das jedoch ganz leicht von der Hand und weh tut es auch nicht 😉

#! /bin/bash

PRJDIR="$HOME/Projekte"

cd $PRJDIR
for REPO in $(find -name .git -type d | sort); do
    cd $PRJDIR
    DIR=$(dirname $REPO)
    REPOPATH=$(realpath $DIR)
    REPONAME=$(basename $REPOPATH)

    cd "$REPOPATH"
    echo "Aktualisiere $REPONAME"
    UPSTREAM=$(git remote -v | grep ups)
    if [ -n "$UPSTREAM" ]; then
        echo "Synchronisiere mit Upstream"
        git fetch upstream
        git checkout master
        git merge upstream/master
        git push
    else
        git pull
    fi
    echo
done

ggf. muss man die Variable $PRJDIR in Zeile 3 des Scriptes anpassen, sofern die git Repositories sich an einem anderen Ort befinden.

Unwetterwarner für Linux

Gemäß dem Motto es gibt kein schlechtes Wetter, wenn man rechtzeitig gewarnt wird, habe ich das Unwetterwarner-Script, das man hier findet, ein wenig überarbeitet und ergänzt.

#!/bin/bash
notify_header="Wetterwarnungen für Coburg"
popup_icon=~/Bilder/Wetterwarnung.png
landkreis=COX
image_viewer=display # must be able to handle URLs
warning_url='http://www.dwd.de/dyn/app/ws/html/reports/'${landkreis}'_warning_de.html'
timeline_url="http://www.dwd.de/dyn/app/ws/maps/${landkreis}_timeline.png"
automode=false

if [ -n "$1" ]; then
    if [ "$1" == "auto" ]; then
        automode=true
    else
        i="$1"
        size=${#i}
        if [ "$size" -eq 3 ]; then
            landkreis=$1
            notify_header="Wetterwarnungen für "$landkreis
        else
            notify-send --icon=$popup_icon """ungültiger Landkreis""" "ungültiger Landkreis: $1"
            exit
        fi
    fi
fi

textstring=$(wget $warning_url -O -  | grep -i -e "warnung vor" -e "vorabinformation" | sed s/\<\\/p\>//g ) 

if [ "$textstring" = ""  ]; then
    notify-send --icon=$popup_icon """$notify_header""" "keine Warnungen vorhanden"
else
    notify-send --icon=$popup_icon """$notify_header""" """$textstring"""
    if [ "$automode" == false ]; then
        $image_viewer $timeline_url &
        # xdg-open $warning_url &
        sleep 4
        kill $!
    fi
fi

Wer das Script selber nutzen möchte, muss entweder die Variable landkreis entsprechend anpassen. Der Code für den jeweiligen Landkreis ist im Prinzip das KFZ-Kennzeichen, welches mit X auf 3 Stellen aufgefüllt wird. Es sei denn, das Kennzeichen enthält ein Ö oder Ü – die werden einfach durch OE bzw. UE ersetzt.

Für die Nutzung mittels Crontab übergibt man dem Script einfach als Parameter auto alle anderen Werte werden als Landkreis interpretiert, was ggf. zu Fehlern führt, wenn man einen ungültigen Wert übergibt.

Die aktuellste Version des Scriptes gibt es hier.

Sharing is caring

Ich habe mir in der letzten Zeit einige Shell-Scripte geschrieben, um mir gewisse Aufgaben zu vereinfachen oder einfach, um mir das Leben einfacher zu machen. Da es sicher einige Menschen da draußen gibt, die das eine oder andere Script auch gebrauchen könnten, habe ich die Scripte heute ein Git Repository auf bitbucket hochgeladen.

Das Repository findet man hier Fehlerberichte und Verbesserungsvorschläge sind selbstverständlich jederzeit willkommen.

MS SQL Server: Handling von temporären Tabellen

Wer den SQL Server von Microsoft verwendet und mit temporären Tabellen arbeiten muss, der ist gut beraten, seine SQL Scripte mit folgendem Code beginnen zu lassen:

IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE [Name] LIKE '#MeineTempTabelle%')
   DROP TABLE #MeineTempTabelle

Diese zwei Zeilen prüfen, ob die temporäre Tabelle #MeineTempTabelle nicht existiert und löschen die Tabelle, falls sie vorhanden sein sollte. Natürlich muss #MeineTempTabelle durch den Namen der temporären Tabelle, die man verwenden möchte, ersetzt werden 😉

Obendrein empfiehlt es sich, die Serverprozess ID in den Namen der temporären Tabelle aufzunehmen, damit man nicht im schlimmsten Fall einem anderen Nutzer „seine“ temporäre Tabelle unter dem sprichwörtlichen Hinter weg löscht.

Die Serverprozess ID erhält man mit folgendem SQL-Statement:

SELECT @@spid AS spid

ColdFusion: Anzahl der Tage zwischen zwei Daten exakt ermitteln

ColdFusion bietet zu diesem Zweck zwar die Funktion DateDiff, welche jedoch den Nachteil hat, das sie nur vollständige Datumsteile berücksichtigt.

Somit liefert

<cfset daysBetween=DateDiff("d", date1, date2)>

folgerichtig ein potentiell falsches Ergebnis, da der aktuelle (angebrochene) Tag mehr oder weniger unterschlagen wird.

Folgender Code liefert jedoch ein genaueres Ergebnis:

<cfset hoursBetween=DateDiff("h", date1, date2)>
<cfset daysBetween=round(hoursBetween / 24))>

Die Logik dahinter ist extrem simpel: Zuerst wird die Anzahl der Stunden zwischen den zwei Daten ermittelt. Dieser Wert wird anschließend durch 24 geteilt, um die exakte Anzahl der Tage zu erhalten. Da jedoch eine Zahl mit Nachkommastellen als Ergebnis eher verwirrend sein kann, wird das Ergebnis zu Schluss auf eine ganze Zahl aufgerundet.

Einfach, kurz und effektiv 😉

Browsernightmare reloaded

Nicht nur, das sich Browser darin unterscheiden, welche JavaScript Eigenschaften/Methoden sie unterstützen, nein, sie verhalten sich teilweise auch bei ein und dem selben Script unterschiedlich!

Ich wollte per JavaScript im ready-Event des document-Objekts bei allen Bildern ohne Größenangaben, diese nachtragen. Hat im Firefox und Opera wunderbar funktioniert. Blöderweise meinte Chrome, aber als Höhe und Breite der Bilder jeweils 0 zurückliefern zu müssen!!

Schlussendlich habe ich nach ein wenig Googeln herausgefunden, das ich meinen JavaScript-Code in den onLoad-Event verschieben muss, damit er auch im Chrome funktioniert! 😯

Browsernightmare oder Browser sind ein Geschöpf der Hölle

Als Webentwickler kann man teilweise richtig Spaß haben, weil nicht jeder Browser HTML-Code gleich interpretiert und darstellt.

So sieht z.B. eine Seite im Firefox aus. Wer jetzt glaubt, die sieht auch in anderen Browsern genau so aus, Pustekuchen!

 

So sieht die gleiche Seite im Internet Explorer 9 und Google Chrome aus:

 

Dann heißt es jetzt wohl, herausfinden, warum die gleiche Seite in 3 Browsern unterschiedlich dargestellt wird. Wenn ich das weiß, darf ich mir dann im nächsten Schritt den Kopf darüber zerbrechen, wie ich den Code so umschreibe, dass das Ergebnis in allen Browsern gleich und vor allem richtig dargestellt wird.

Update: Okay, so wie es aussieht, ist das jQuery-Plugin für das Treeview zumindest nicht ganz unschuldig.