Ich brauchte letztens eine ganz einfache und versteckte Möglichkeit Besuchern einer Webseite Feedback zu ermöglichen. Hatte mich auch schon an meinen Webhosting Anbieter gewendet, der mir vielleicht hätte helfen können. Ich habe es dann doch alleine hinbekommen.
Also ein möglichst kleines und unaufdringliches Feedback Formular.

Einfach gesagt, schnell getan!

Demo

simple Feedback
Momentan erfolgt ein „Absenden“ via Alert, die Ergebnisse müssen dann natürlich korrekt verarbeitet statt ausgegeben werden.

Download

simple Feedback (< - Rechtsklick -> Speichern unter…)
Der gesamte Code (HTML, CSS, jQuery) steht in dieser HTML Datei. Außer 4 Bilddateien wird nichts weiter benötigt.

Aus irgendeinem Grund habe ich lange Zeit nicht gewusst, dass es If Else in Batch gibt…
Ich hatte bereits ein Tutorial zum Kombinieren mehrerer Befehle in einer Zeile geschrieben. Damit kann ich so etwas wie If Else vortäuschen:

if not 0==1 echo dies & echo das & del jenes.txt & goto korrekt
echo foo & echo bar & del bullshit.txt & goto falsch

Dabei gibt es echtes If… Else… in Batch!
Parameter abfangen könnte also so aussehen:

if /i %action%==triggered-restart (
if exist %restartdir% call :kill-server & rd %restartdir% /s /q
goto end
) 

if /i %action%==start-server (
tasklist |find /i "IQB_Server.exe"
if not %errorlevel%==0 start IQB_Server.exe
goto end
)

if /i %action%==check-status (
tasklist |find /i "IQB_Server.exe"
if %errorlevel%==1 (
echo Serverprozess nicht gefunden.
) else (
echo Serverprozess gefunden
)
pause
goto end
)

if /i %action%==force-restart (
call :kill-server
goto end
)

if /i %action%==daily-restart (
call :kill-server
goto end
)

if /i %action%==? (
call :help
) else ( 
if /i %action%==help (
call :help
) else ( 
if /i %action%==hilfe (
call :help
) else ( 
if /i %action%==usage (
call :help
))))

Man achte auf die Möglichkeit der tiefen Verschachtelung von If Else. Es wird zwar schnell unübersichtlich mit den Klammern aber es funktioniert, wenn man sie richtig setzt.

Wichtig: Nach dem Statement des If und nach dem Else unbedingt ein Leerzeichen lassen, sonst gibts Fehler. Fehlerhaft wäre also:

REM Fehlerhaftes Beispiel
if %test%==1(
echo foo
) else(
echo bar
)

Ein funktionierender Einzeiler:

if %test%==1 (echo foo)else (echo bar)

Es ist übrigens genauso auch ein If Not [Statement] ( ) möglich.

Internet Explorer… Kompatibilitätsmodus… alles Rotz. Dieser Modus lässt sich über eine Schaltfläche rechts in der Adressleiste oder alternativ über die Entwicklerkonsole umschalten. Die Darstellung der Seite ist in diesem Modus irgendwie anders.

Sollte es mal nötig sein eine Webseite bei der Betrachtung mit IE 8 unbedingt im Kompatibilitätsmodus darzustellen, kann man diesen Meta Tag einbauen:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

Danach wird die Seite immer in diesem Modus dargestellt. via

Zeit messen ist mit Batch kein Problem und oftmals eine nette Spielerei.

Code:

set /a timerstart=((1%time:~0,2%-100)*60*60)+((1%time:~3,2%-100)*60)+(1%time:~6,2%-100)
REM packing zip archive
%wd%\7za.exe a -bd -ssw "%job-ziel%.zip" "%job-quelle%" > nul
set /a timerstop=((1%time:~0,2%-100)*60*60)+((1%time:~3,2%-100)*60)+(1%time:~6,2%-100)
set /a timeseks=(%timerstop%-%timerstart%)
set /a timemins=(%timerstop%-%timerstart%)/60
echo Sekunden: %timeseks% -- Minuten: %timemins%

Erläuterung:
Also, timerstart nimmt die aktuelle Uhrzeit und rechnet aus, wieviele Sekunden seit 00:00 Uhr verstrichen sind.
Der 2. Timer, timerstop, rechner ebenfalls die Sekunden seit 00 Uhr aus. Zieht man diese jetzt von der Startzeit ab so bleibt die Anzahl in Sekunden übrig, die zwischen den Timern verstrichen ist.
Das bedeutet natürlich auch, dass eine Zeitberechnung von einem Tag in den nächsten nicht funktioniert. Start und Stop müssen zwischen 00 Uhr und 23:59 Uhr des selben Tages liegen.

Details zu dieser Art der Zeitmessung:
Diese Berechnung ist bereits eine optimierte Variante. Grundsätzlich würde in 80% der Fälle auch

set /a timerstart=((%time:~0,2%)*60*60)+((%time:~3,2%)*60)+(%time:~6,2%)

funktionieren; diese Variante findet man auch überall im Netz.
Ich beobachtete jedoch Probleme bei Zeitberechnungen, wenn mit den Zahlen „08“ und „09“ hantiert wurde.
Also beispielsweise um 16:08:09 Uhr wird ein Timer aktiviert. Dann rechnet dieser eigentlich
((16)*60*60)+((08)*60)+(09)
Batch kommt damit aber nicht klar, da er dezimale Zahlen und oktale Zahlen durcheinander bringt. Um trotzdem mit Uhrzeiten mit „08“ und „09“ rechnung zu können habe ich die Zeile ergänzt:

set /a timerstart=((1%time:~0,2%-100)*60*60)+((1%time:~3,2%-100)*60)+(1%time:~6,2%-100)

Nun wird also bei 16:08:09 gerechnet:
((116-100)*60*60)+((108-100)*60)+(109-100)
Funktioniert 🙂

Update:
Eine etwas komplexere Lösung mit der Berücksichtigung des Datums wurde von einem Leser via Kommentar eingereicht:

@echo off

REM dynamisch mit %TIME% oder Zahlenformat des endtime Beispiels nehmen
set starttime=%TIME%
set endtime=00:15:26,92
set startdate=08.09.2012
set enddate=09.09.2012

REM einstellige Uhrzeiten korrigieren
set starttime=%starttime: =%
set endtimehh=%endtime:~1,1%
if ‘%endtimehh%’ == ‘:’ set endtime=0%endtime%
echo endtime: %endtime%

set starttimehh=%starttime:~1,1%
if ‘%starttimehh%’ == ‘:’ set starttime=0%starttime%
echo starttime: %starttime%

set /a timerstart=((1%starttime:~0,2%-100)*60*60)+((1%starttime:~3,2%-100)*60)+(1%starttime:~6,2%-100)
echo timerstart: %timerstart%

set /a daymodifier=86400*((1%enddate:~0,2%)-(1%startdate:~0,2%))
rem set daymodifier=86400
echo daymodifier: %daymodifier%

set /a timerstop=(((1%endtime:~0,2%-100)*60*60)+((1%endtime:~3,2%-100)*60)+(1%endtime:~6,2%-100))+%daymodifier%
echo timerstop: %timerstop%

rem =======================

set /a timeseks=(%timerstop%-%timerstart%)
echo Sekunden: %timeseks%

set /a timemins=((%timerstop%-%timerstart%)/60)
echo Minuten: %timemins%

set /a timeminsseks=((((%timerstop%-%timerstart%)/60)*60)-(%timerstop%-%timerstart%))*-1
echo Zeit: %timemins%:%timeminsseks%

pause

Ich hatte letztens mal drüber geschrieben: mit erweiterten Stringoperationen kommt man leicht an Dateinamen, Endung, Ordner, Pfade, Dateieigenschaften und Ähnliches.

Ich möchte gerne die Aussagen und den Code korrigieren. Ich hatte folgendes vorgeschlagen:
Dieser Code ist unsicher, lest weiter unten für einen zuverlässigeren Code!

:: nur der Dateiname (ohne .ext)
for %%a in (C:\test\geheim.txt) do set 1=%%~na
:: -> geheim
:: funktioniert auch mit Ordnern
for %%a in (C:\test\ziemlich\geheim) do set 1=%%~na
:: -> geheim

Letzte Datei und Ordner lassen sich so herausfinden. Ist auch korrekt, hat aber 2 Fehlerpotentiale:

Man sollte natürlich den Pfad, den man auswertet, in Gänsefüße stecken! Ansonsten gibt es nämlich Fehler sobald der gesuchte letzte Part (Dateiname/Ordnername) ein Leerzeichen enthält. Bei erweiterten Stringoperationen mit FOR sollte man doppelte Gänsefüße verwenden obwohl man sonst ja bei FOR Befehlen einfache nutzen sollte. Hier kommt es teilweise aber vor, dass im Ergebnis ein einfaches mit reingerät (“ geheim‘ „), was nicht gewollt ist. Doppelte Anführungsstriche sind hier zuverlässiger.

Ebenfalls wird es problematisch wenn man den letzten Ordnernamen sucht und dieser aber ein Punkt enthält („C:\Windows 3.1\“). For erkennt den Punkt und denkt, dass es sich um eine Datei handelt. Also gibt der Befehl „Windows 3“ zurück, dabei soll es „Windows 3.1“ zurückliefern.

Lösung:

:: Datei mit Anführungsstrichen und %%~n suchen!
for %%a in ("C:\test\geheim.txt") do set 1=%%~na
:: -> geheim
:: den letzten Ordner immer mit Anführungsstrichen und %%~nx suchen!
for %%a in ("C:\test\ziemlich\geheim 9.1") do set 1=%%~nxa
:: -> geheim

Da hatte ich letztens doch fast schon wieder Pipi inne Augen.
Eine Zeit lang nutzte ich noch Firefox für Webentwicklung, obwohl Chrome längst mein Main Browser war. Mehr Addons und Gewohnheit und so. Aber wirklich optimal war das nicht. Also habe ich mir die typischen Webdev Erweiterungen für den Chrome gesucht: MeasureIt, ein ColourPicker, nen Window Resizer, Browser Agent Changer und so. Aber auch das ist auf Dauer nicht optimal. Und da fand ich sie. Die Chrome Erweiterung, die fast alle Funktionen vereinte:

Pendule!
Die App von Christian Frey bietet eine breite Auswahl an Devtools, mitunter: Reload CSS (mit F9 Shortcut), verwendete Farben anzeigen, Forms manipulieren, Bilderinformationen anzeigen, Weblineal, Color Picker, Cookies entfernen, Fenstergröße ändern, Validierungssachen. Für die wichtigsten Funktionen lassen sich Shortcuts definieren. Fehlt mir eigentlich nur noch der Browser Agent, ansonsten ist die Erweiterung ziemlich geil. Aber für Version 1.0.0 der Erweiterung schon echt super, ich freue mich also auf Updates, die dann vielleicht die Agent Sache nachrüsten.

Ich schreibe normalerweise keine Beiträge die keinen weiteren Inhalt von mir haben sondern nur aus fremden Inhalt bestehen aber an dieser Stelle bin ich einfach ein wenig ZU fasziniert um das für mich zu behalten!

Smashing Magazine haben mal wieder seine GEILHEIT bewiesen und folgenden Beitrag veröffentlicht: Create An Animated Bar Graph With HTML, CSS And jQuery
Allein der eigentliche Inhalt ist schon ziemlich genial. Mit jQuery wird eine normale Datentabelle in ein modern aussehendes und leicht animiertes Diagramm verwandelt. Daten muss man nur in der zugrunde liegenden Datentabelle ändern, am CSS und jQuery Code passiert nichts weiter.
Das ist alles schon echt sweet, sieht gut aus, ist absolut dynamisch, funktioniert im Internet Explorer (8 getestet), ist nicht zu überladen, geil.

Aber der Autor Derek Mack setzt noch was drauf! Eine 3D Version des Diagramms ebenfalls nur mit diesen Webtechniken realisiert (der 3D Effekt entsteht sogar nur mit CSS) und per Tastatur steuerbar. Ich bin echt total verblüfft wie gut das aussieht, wie flüssig das läuft… haltet mal eine Pfeiltaste ne Minute lang gedrückt. Das Teil wirbelt herum aber ruckelt nicht im geringsten.
Mal von der Sinnlosigkeit bei einem Diagramm abgesehen ist es wirklich faszinierend. Der Code dafür ist sogar recht übersichtlich.
Vermutlich werde ich das in Zukunft mal etwas simpler nachbauen und hier die Grundlagen erklären.

Um es mit den Worten von Derek Mack zu sagen: Kiss my face!