Edit Comment
IT-Stuff, Tutorials, Software, Internet, Unterhaltung Willkommen auf IMA

Archive for the ‘IT’ Category

Ich sah letztens ein nettes Video über Curiosity’s Kameras und eine Stelle fand ich sehr verblüffend:
wie macht der Mars Rover solche Fotos?
256px PIA16239 High Resolution Self Portrait by Curiosity Rover Arm Camera Mars Rover Curiositys Selbstportrait mit Arm ohne Arm...

Definitiv ein Selbstportrait des Rovers. Wie wurde es gemacht? Der Rover stellt ja nicht mal eben so ein Stativ mit Kamera auf den Marsboden, stellt den Selbstauslöser ein und positioniert sich brav.

Nein, dieses Foto wurde mit einem der Arme des Rovers gemacht. Dass dieser Arm auf dem Foto nicht zu sehen ist, wurde mit einem ziemlich cleveren Verfahren erreicht:

(dieses Video wird in Chrome nicht direkt angezeigt, Chrome Users: klickt hier)


Git Repository 1:1 kopieren (duplizieren)

Ziel ist es ein Git Repository in ein anderes, leeres Git Repository zu kopieren, inklusiver aller Daten wie z.B. der History. Also das Kopieren / Klonen / Duplizieren eines Repositories inklusive aller Infos. Es reicht also nicht den Ordner nur zu kopieren und in das neue Repository zu pushen, damit hätte dieses Repository nur 1 Commit, nicht aber alle Daten übernommen.

Hier die Abfolge der Schritte:

  1. Das alte Repository “old-repo” auf der Festplatte auf den aktuellsten Stand bringen; logisch
  2. Einen Ordner für das neue Repository anlegen; der Name des Ordners sollte dem Namen des neuen Repositories entsprechen
  3. Den Inhalt des Ordners “old-repo” in den Ordner “new-repo” kopieren
  4. Git Bash in “new-repo” starten bzw. diesen Ordner in der Bash aufrufen
  5. Git origin neu setzen, Ziel ist das neue Repository:
    git remote set-url origin git@[Server IP/URL]:new-repo
  6. Neuen Master Stand pushen:
    git push origin master

Hier ein Video der Vorgehensweise:
0 Git Repository 1:1 kopieren (duplizieren)


double driver treiber sichern wiederherstellen freeware icon Double Driver   Treiber Sichern und WiederherstellenWenn ein frisch installiertes Betriebssystem erstmal fertig eingerichtet ist und perfekt läuft sollte man diesen Zustand im Notfall wiederherstellen können. Das Sichern von funktionierenden Treibern ist einer der Schritte, die man dafür regelmäßig durchführen sollte.

Double Driver ist klein, portable, kostenlos, einfach zu bedienen und besonders schnell!

Die Oberfläche ist besonders einfach und die Bedienung ist selbsterklärend:
double driver treiber sichern wiederherstellen freeware main screen 460x223 Double Driver   Treiber Sichern und Wiederherstellen

Die Treiber des eigenen Systems sind in weniger als 1 Sekunde komplett geladen (zumindest bei mir). Irgendwie soll man auch andere Systeme scannen können; wie das geht habe ich aber noch nicht getestet.
double driver treiber sichern wiederherstellen freeware backup 460x433 Double Driver   Treiber Sichern und Wiederherstellen
Wie bei den meisten Treiber Backup Tools werden alle Systemtreiber gelistet aber nur die non-Microsoft Treiber ausgewählt. Diese Selektion ist schon am sinnvollsten, lässt sich bei Bedarf aber verändern. “All”, “None”, “Invert” beschleunigen die Anpassung.

double driver treiber sichern wiederherstellen freeware backup choose 140x119 Double Driver   Treiber Sichern und WiederherstellenDie Treiber lassen sich als Ordner, als gezippte Ordnerstruktur oder als selbstentpackendes Archiv sichern. Treiber größerer Systeme können schon mal 100-200MB groß sein, die 2 ZIP Auswahlmöglichkeiten würde ich also empfehlen. Damit kann die Größte auf 40-80MB verringert werden. Das Wiederherstellen der Treiber ist ebenso simpel. Die Sicherung wird ausgewählt und alle gesicherten Treiber werden aufgelistet. Hier kann man dann entweder alle Treiber wiederherstellen oder einzelne Einträge deselektieren.

Das Tool ist dazu portable, muss also nicht installiert werden und funktioniert sofort auf jedem System, gerne auch vom USB Stick aus.

Super Freeware, Hut ab.
Das Sichern der Treiber funktioniert auch bei Windows 8. Ich gehe davon aus, dass auch die Wiederherstellung funktioniert. Probieren geht über studieren.


laufende prozesse mit batch erkennen update Mit Batch überprüfen ob ein Prozess läuft (Update)Ich habe bereits vor einigen Monaten mal über die Erkennung von laufenden Prozessen via Batch geschrieben. Damals habe ich diese Erkennung in einfachen oder komplexeren If Else Blöcken verschachtelt. Ich habe nun gemerkt, dass dies zu Problemen und falschen Erkennungen führen kann!

Daher hier das Update: If Else Verschachtelungen können zwar ein paar Zeilen sparen aber verfälschen Errorlevel Rückgaben! In If Else Blöcken würde ich keine Programmbefehle schreiben, die mit dem Errorlevel arbeiten sollen. Lieber mit einigen gotos arbeiten.

Hier ein Beispiel:

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

REM folgenden Code verwenden:
if /i %action%==start-server goto start-server
:start-server
 tasklist |find /i "IQB_Server.exe"
 if not %errorlevel%==0 start IQB_Server.exe
 goto end

REM Errorlevel in IF ELSE Blöcken können falsch sein!

Nochmal zum Erkennen von Prozessen via Batch: hier sind 3 verschiedene funktionierende Methoden:

REM %errorlevel% ist immer 0 wenn der Prozess existiert
REM 1 wenn nicht gefunden
REM am besten mit 'if not "%errorlevel%"=="0"' überprüfen

REM Variante 1:
tasklist | find /i "dropbox.exe"

REM Variante 2:
tasklist /FI "IMAGENAME eq dropbox.exe" 2>NUL | find /I /N "dropbox.exe">NUL
REM beide NUL Umleitungen optional

REM Variante 3:
tasklist /nh /fi "imagename eq dropbox.exe" | find /i "dropbox.exe" >NUL
REM letzte NUL Umleitung optional

English Version

A few months ago I already wrote a post about the detection of running processes with batch. In this post I used this detection code inside simple or more complex if-else block statements. I recently noticed possible false positives if doing so. Using %errorlevel% return codes inside if-else statements can lead to wrong return codes.

So, here’s the update: if else structures can save a few code lines but can also falsify errorlevel return codes! And since the detection of running processes rely on errorlevel returns you should use gotos instead of if else.

Here’s a code example:

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

REM use this code:
if /i %action%==start-server goto start-server
:start-server
 tasklist |find /i "IQB_Server.exe"
 if not %errorlevel%==0 start IQB_Server.exe
 goto end

REM errorlevel return codes in if-else blocks may be wrong!

Here are 3 different working code examples for process detection:

REM %errorlevel% is always 0 if the process is running
REM and 1 if it is not running
REM best way is to check with 'if not "%errorlevel%"=="0"'

REM code 1:
tasklist | find /i "dropbox.exe"

REM code 2:
tasklist /FI "IMAGENAME eq dropbox.exe" 2>NUL | find /I /N "dropbox.exe">NUL
REM both NUL redirections are optional

REM code 3:
tasklist /nh /fi "imagename eq dropbox.exe" | find /i "dropbox.exe" >NUL
REM last NUL redirection is optional

via, via


Das Ziel sind Screenshots von Webseiten, mit einem Batch Script automatisiert und kontrolliert. Keep it simple & stupid.

Die Wichtigste ist natürlich das Anfertigen der Screenshots. Das ließe sich vermutlich auch mit pure Batch erledigen, ich fand allerdings folgende Utilities besonders einfach und optimal für diesen Zweck: CutyCapt und IECapt. Beide Tools bestehen nur aus einer kleinen .exe Datei und sind kommandozeilenbasiert, optimal für eine Batch Benutzung.
CutyCapt fertigt Website Screenshots mit der WebKit Engine (Chrome und Opera nutzen diese Engine) an, IECapt nutzt die Engine des Internet Explorers.
website screenshots batch automatisiert cutycapt help 210x126 Website Screenshots   mit Batch Script automatisiertwebsite screenshots batch automatisiert iecapt help 210x54 Website Screenshots   mit Batch Script automatisiert

Die Anwendung ist relativ einfach, über die CMD. Ein Beispiel:

CutyCapt.exe --url=http://www.spiegel.de/ --out=spiegel.png --min-width=1100 --min-height=800 --delay=1000

Wenn die Webseite besonders lang ist so wird sie komplett aufgenommen. Die Parameter steuern das Verhalten der Engine, beim IE gibt es nicht ganz so viele Möglichkeiten.

Das kann man jetzt in einem netten Script verpacken und schon lassen sich beliebige Webseiten mit einem Doppelklick fotografieren. Versehen mit Logging, Mailer und ein paar Kleinigkeiten, fertig.

Hier mein Script, welches 2 Screenshots der Fritz Box aufnimmt, in einem Unterordner speichert, eine Mail schickt und alles loggt, so als Muster:

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

@echo off
setlocal
Color 9f

REM ### INFORMATIONS ############################################

REM ****************************************************
REM  Title:   	Website Screenshot Daemon (WSD)
REM  Author:  	Hannes Schurig
REM  Created: 	22.02.2013
REM  Changed: 	25.02.2013
REM  Version: 	0.3.5
REM  Changelog: 0.1: complete mailer function with flexible callback
REM				0.1.1: complete new mailer with call, parameters and no local variables, 50% less code
REM				0.2: CutyCapt configured to take 2 screenshots, formatted datetime filename
REM				0.2.1: collect errorlevels and added to mail text
REM				0.2.2: save screenshots in subfolder, check if exist, create if needed
REM				0.3: use working directory and absolute paths for sheduling compatibility
REM				0.3.1: script renamed, detect working directory and filename
REM				0.3.2: removed usesubdir variable, remove 40-45 and edit 51 & 53 for no subdir
REM				0.3.3: fixed bug - spaces in working path lead to script malfunction
REM				0.3.4: CutyCapt parameters as variable - they do not change
REM				0.3.5: added 20 seconds max-wait parameter
REM  Credits: CutyCapt website screenshot utility: http://cutycapt.sourceforge.net/ - awesome!
REM ****************************************************

REM ### VARIABLES ############################################

for %%a in (%0) do set filename=%%~nxa
for %%a in (%0) do set wd=%%~dpa
REM remove last "\" or "/" from working directory (wd) path
if "%wd:~-1%"=="\" set wd=%wd:~0,-1%
if "%wd:~-1%"=="/" set wd=%wd:~0,-1%
set subdir=%wd%\screenshots
set mailer=1
set adminmail=hannes.schurig@online.de
set log="%wd%\logfile.txt"
set cutycapt="%wd%\CutyCapt.exe"
set datetime=0
set scerrorlevel=0

REM same parameters for every screenshot? It's shorter with:
set cutycaptparameters=--min-width=1100 --min-height=800 --delay=1000 --max-wait=20000

REM ### PROGRAM START ############################################

echo %date% - %time:~0,5% (i) WSD starting... >> %log%

REM check and create subdir if wanted and needed
if not "%subdir%"=="" (
	if not exist "%subdir%" (
		md "%subdir%"
	)
)

REM prepare short datetime with . instead :
set datetime=%date%-%time:~0,5%
set datetime=%datetime::=.%

%cutycapt% --url=http://fritz.box/ --out="%subdir%/%datetime%-dashboard.png" %cutycaptparameters%
set scerrorlevel=%errorlevel%
%cutycapt% --url=http://fritz.box/system/syslog.lua --out="%subdir%/%datetime%-events.png" %cutycaptparameters%
set scerrorlevel=%scerrorlevel%%errorlevel%

echo %date% - %time:~0,5% (i) Screenshot taken with errorlevel %scerrorlevel% >> %log%

echo %date% - %time:~0,5% (i) Sending admin mail... >> %log%
if %mailer%==1 call :mailer "WSD" "Status" "noreply@WSD.com" "Script finished with errorlevel %scerrorlevel%"

:shutdown
echo %date% - %time:~0,5% (i) WSD shutting down... >> %log%
goto end


REM ### MAILER FUNCTION ############################################

:mailer
start iexplore "http://php.webmailer.de/webmail.php&mailto=%adminmail%&contactname=%~1&subject=%~2&email=%~3&message=%~4"
REM wait and close
ping 127.0.0.1 -n 5 > nul
taskkill /im "iexplore.exe" /f
ping 127.0.0.1 -n 3 > nul

REM ### PROGRAM EXIT ############################################

:end
endlocal

Anmerkungen dazu:
Keine Unterordner? Löscht Zeile 49-54 und passt den “–out” Parameter in Zeile 60 und 62 an. Wenn doch, passt Zeile 28 an.
IECapt statt CutyCapt? In Zeile 38 den Dateinamen anpassen.
Der Mailer muss natürlich angepasst werden. Habt ihr einen PHP Webmailer? Dann passt die Zeilen 36, 68 und 78 an. Wenn ihr keinen Mailer habt reicht es die Zeile 35 auf 0 zu setzen.
Ansonsten müsste das funktionieren.

Alternativ zu diesem Script gibt es auch Browser Plugins mit denen Website Screenshots erstellt werden können. Awesome Screenshot wäre ein Google Chrome Plugin für diesen Zweck. Die Extension fotografiert einen ausgewählten Bereich, den sichtbaren Bereich oder die komplette Seite. Das Bild lässt sich bearbeiten, speichern, teilen und mehr.
Über die Automatisierung dieser Geschichte muss man sich dann aber noch Gedanken machen, das ist vermutlich etwas schwieriger.

Bugs, Anmerkungen sowie Verbesserungsvorschläge nehme ich natürlich gerne entgegen.


Admin

Sie möchten hier werben oder Sponsor auf längere Zeit werden? Ich garantiere Ihnen unschlagbare Preise bei meinen Besucherzahlen. Egal ob Banner, Textlinks oder andere Werbeformen. Informieren Sie sich bei mir unter werbung@hannes-schurig.de