Kategorien
Office & Co. Web, Büro, Produktivität

Backup mit Robocopy

Robocopy ist und bleibt eine einfache, sehr schnelle und robuste Backup-Lösung – selbst unter Windows 10.

Über ein Batchscript wird das Backup gestartet und anschließend der PC in den Ruhemodus geschickt bzw. heruntergefahren. Das ist also immer die letzte Aktion am Rechner!

Wer braucht bei Backups schon schöne grafischen Interfaces? Wen doch, siehe unten bei weitere Informationen.

Das folgende Script in den Editor kopieren, Pfade anpassen (oben sind zwei Verzeichnisse angegeben als Beispiel) und als Backup.txt speichern. Danach die Endung .txt in .bat umbenennen und bestätigen um eine ausführbare Datei daraus zu machen. Fertig!

@echo off
color 1F

echo.
echo #####################################
echo ##                                 ##
echo ##           NAS Backup            ##
echo ##                                 ##
echo #####################################
echo.

echo Backup starten und PC herunterfahren?
echo A = Abbruch / B = Backup und Shutdown

set /p choosen=
if %choosen%==b goto backup
if %choosen%==a goto quit

rem Alle anderen Buchstaben
goto quit

:backup
cls

set quelle1="C:\Users\Name\Local Data"
set ziel1="Z:\BACKUP\Users\Name\Local Data"

set quelle2="C:\Users\Name\Projects"
set ziel2="Z:\BACKUP\Users\Name\Projects"

robocopy %quelle1% %ziel1% /MIR /R:1 /W:1
robocopy %quelle2% %ziel2% /MIR /R:1 /W:1

rem Ruhemodus...
rundll32.exe powrprof.dll,SetSuspendState

rem ...oder Herunterfahren
rem shutdown -s

:quit
exit

Weitere Infos

Ausführliche Infos zu Robocopy:
https://www.heise.de/download/specials/Backup-mit-Robocopy-3168662

Robocopy mit GUI (Bedienoberfläche zur einfacheren Konfiguration):
https://www.heise.de/download/product/microsoft-robocopy-gui-38906

 

Kategorien
PhotoShop

Photoshop Script: Bilder in Streifen schneiden und zusammensetzen

Aus den angegebenen Bilder schneidet dieses Script einzelne Streifen, abhängig von der Bildbreite und Anzahl der Bilder, und setzt diese Streifen als ein Bild zusammen.

Ein Bild sagt mehr als tausend Worte:
– Bild –

var picSourcePath = "C:\\testbilder\\";

// Achtung: Porträt-Format!
var picWidth = 2448;
var picHeight = 3264;

// Photoshop-Einstellungen sichern
var startRulerUnits = app.preferences.rulerUnits;
var startTypeUnits = app.preferences.typeUnits;
var startDisplayDialogs = app.displayDialogs;

// Dialoge verbergen und Pixel als Einheit einstellen
app.preferences.rulerUnits = Units.PIXELS;
app.preferences.typeUnits = TypeUnits.PIXELS;
app.displayDialogs = DialogModes.NO;

// Liste aller Dateien und Ordner erstellen
var picFolder = Folder(picSourcePath);
var fileList = picFolder.getFiles();

// Anzahl der Dateien und Breite des Streifens berechnen
var picCnt = fileList.length;
var stripWidth = picHeight / picCnt;

// Pruefung ob auch Dateien und Ordner vorhanden sind
if (picSourcePath != null) {
    
	// Quellbilder in Schleife oeffnen
	for (var i=0; i<picCnt; i++) {

		// Nur Dateien (und keine Ordner) oeffnen
		if (fileList[i] instanceof File) {
			open(fileList[i]);

			// Selektionsrahmen fürs Einfügen des vorherigen Streiens
			selRegion = Array(Array(0, 0),
								Array(picWidth, 0),
								Array(picWidth, stripWidth*i),
								Array(0, stripWidth*i),
								Array(0, 0));

			// Selektion setzen			
			activeDocument.selection.select(selRegion);
								
			// Beim ersten Bild kann noch nichts von vorherigen Bilder eingefügt werden
			if (i != 0) {
				activeDocument.paste();
			}
			
			// Selektion entfernen
			activeDocument.selection.deselect();	

			// Auf Hintergrundebene zusammenfügen
			activeDocument.flatten();

			// Selektionsrahmen für Kopieren
			selRegion = Array(Array(0, 0),
								Array(picWidth, 0),
								Array(picWidth, stripWidth*(i+1)),
								Array(0, stripWidth*(i+1)),
								Array(0, 0));

			// Selektion setzen			
			activeDocument.selection.select(selRegion);

			// Selektion kopieren
			activeDocument.selection.copy();	// true geht nicht !?!?!
			
			// Bis auf das letzte Bild alle schließen (ohne Nachfrage)
			if (i < picCnt-1) {
				activeDocument.close(SaveOptions.DONOTSAVECHANGES);
			}
		}
	}
	
	// Selektion entfernen und Bild drehen
	activeDocument.selection.deselect();
	activeDocument.rotateCanvas(-90);
	
}

// Photoshop-Einstellungen zuruecksetzen
app.preferences.rulerUnits = startRulerUnits;
app.preferences.typeUnits = startTypeUnits;
app.displayDialogs = startDisplayDialogs;

Kategorien
Arduino & Co.

Arduino: Parksensor in der Garage

Großes Auto, kleine Garage – jeder Zentimeter zählt! Ich möchte mein Auto genau so in der Garage abstellen, dass das Garagentor gerade noch zu geht um vor dem Auto möglichst viel Platz zu haben. Natürlich gibt es dafür die verschiedensten einfachen Methoden. Als Bastler habe ich mich aber für eine Lösung mit Arduino entschieden!

Entwurf
Abhängig der Distanz zum Sensor ändert sich die Darstellung der 8×8 Dot Matrix.
#include <SR04.h>
#include <LedControl.h>

SR04 sr04 = SR04(3, 4);
LedControl lc = LedControl(12, 10, 11, 1);

int distance;  // sensor distance
int parkpos;   // park distance in front of sensor in cm
int ledbrght;  // brightness

// all signs/frames
byte frm_dis_6[8] = { B10000001, B10000001, B10000001, B10000001, B10000001, B10000001, B10000001, B10000001 };
byte frm_dis_5[8] = { B01000001, B01000001, B01000001, B01000001, B01000001, B01000001, B01000001, B01000001 };
byte frm_dis_4[8] = { B00100001, B00100001, B00100001, B00100001, B00100001, B00100001, B00100001, B00100001 };
byte frm_dis_3[8] = { B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00010001 };
byte frm_dis_2[8] = { B00001001, B00001001, B00001001, B00001001, B00001001, B00001001, B00001001, B00001001 };
byte frm_dis_1[8] = { B00000101, B00000101, B00000101, B00000101, B00000101, B00000101, B00000101, B00000101 };
byte frm_arr_a[8] = { B00001000, B00001100, B11111110, B11111111, B11111110, B00001100, B00001000, B00000000 };
byte frm_arr_b[8] = { B00010000, B00110000, B01111111, B11111111, B01111111, B00110000, B00010000, B00000000 };
byte frm_stop[8]  = { B00111100, B01111110, B11111111, B11111111, B11111111, B11111111, B01111110, B00111100 };

void writeSign(byte arr[8]) {
  for (int i = 0; i < 8; i++) {
    lc.setRow(0, i, arr[i]);
  }
}

void setup() {

  // start MAX72xx, set brightness and clear display 
  lc.shutdown(0, false);
  lc.setIntensity(0, 5);
  lc.clearDisplay(0);

  Serial.begin(9600);
  delay(1000);
}

void loop() {

  // read poti B and set led intensity
  ledbrght = analogRead(A7);
  ledbrght = ledbrght/75; // 0 - 15
  lc.setIntensity(0, ledbrght);

  // read distance in cm
  distance = sr04.Distance();

  // read poti A and set park position in cm  
  parkpos = analogRead(A3);
  parkpos = parkpos/5.2 + 10; // 10 - 200

  // tha rocket science magic ;)
  if      (distance < 200 + parkpos  && distance >= 30 + parkpos) { writeSign(frm_arr_a); }
  else if (distance <  30 + parkpos  && distance >= 25 + parkpos) { writeSign(frm_dis_6); }
  else if (distance <  25 + parkpos  && distance >= 20 + parkpos) { writeSign(frm_dis_5); }
  else if (distance <  20 + parkpos  && distance >= 15 + parkpos) { writeSign(frm_dis_4); }
  else if (distance <  15 + parkpos  && distance >= 10 + parkpos) { writeSign(frm_dis_3); }
  else if (distance <  10 + parkpos  && distance >=  5 + parkpos) { writeSign(frm_dis_2); }
  else if (distance <   5 + parkpos  && distance >=      parkpos) { writeSign(frm_dis_1); }
  else if (distance <       parkpos  && distance >= -5 + parkpos) { writeSign(frm_stop);  }
  else if (distance <  -5 + parkpos )                             { writeSign(frm_arr_b); }
  else                                                            { lc.clearDisplay(0);   }

  delay(100);
}


Gehäuse und weitere Infos folgen…

Kategorien
Office & Co. Webdesign

Excel: Domainendung ermitteln

In Spalte B (Endung) sollen die nur die Domain-Endungen stehen:

Domain Endung
unckel.de .de
unckel.com .com
unckel.co.kr .co.kr
unckel.online .online

Formel in Spalte B: =RECHTS(A2; LÄNGE(A2) - FINDEN("."; A2) + 1)

Kategorien
Experimentell

Wackelbild Wolken #1

Aus dem Flieger im Abstand von einer Sekunde irgendwo über den Alpen.

Kategorien
Allgemein

Hobby Horsing Göppingen

Infos zu Hobby Horsing in und um Göppingen…. in Kürze.

Wer macht noch alles mit? Melden unter unckel@gmx.net

Kategorien
Rezepte

Mini-Amerikaner

Rezept für Mini-Amerikaner mit wenig Zucker.

Kategorien
Office & Co.

Excel: Einzelne Werte/Zellen als CSV exporieren

Einen oder mehrere Werten in Zellen können in Excel über Makros exportiert werden. Der Code zeigt ein Makro das den Wert der Zellen A1, A2, B1 und B2 in eine CSV-Datei exportiert. Es werden nur die grundlegende Funktionen gezeigt – eine explizite Fehlerbehandlung ist nicht vorhanden. Die CSV-Datei wird überschrieben.

Kategorien
Rezepte

Cakepop mit Haferflocken

Einfaches Grundrezept für Cakepops mit reduziertem Zucker und mehr Eiweiß.

cakepops

Zutaten für ca. 30 Stück

150 g Margarine
75 g Zucker
1 Päckchen Vanillezucker
1 Prise Salz
2 Eier
125 g Dinkelmehl
75 g Haferflocken
50 g Mandelmehl
1/2 Päckchen Backpulver
150 ml Milch

Zubereitung

  • Margarine, Zucker, Vanillezucker und Salz mit Handrührgerät cremig rühren, danach Eier dazugeben.
  • Haferflocken, Mehl, Backpulver mit Knethaken unterrühren und Milch dazugeben.
  • In Spritz- oder Plastikbeutel geben und die unteren Halb-Formen komplett füllen.
  • Abkühlen lassen und nach Belieben verzieren.
Kategorien
Office & Co.

Excel: Formelvorschlag übernehmen per Tastatur

Excel-Formelvorschlag übernehmen? Mit der Tab-Taste geht's!

Da arbeitet man schon jahrelang mit Excel, tippt Formeln ein, bekommt entsprechende Vorschläge angeboten und man weiß, irgendwie muss sich doch der passende Vorschlag übernehmen lassen – und zwar schnell per Tastatur. Und jedes Mal springe ich mit den Pfeiltasten zur passenden Formel und tippe auf Enter: Peng! Nix war’s – und ich frage mich jedes Mal, wieso das nicht eigentlich funktioniert. Die Tab-Taste hab ich allerdings auch noch nicht probiert – ein Fehler.

Erinnert mich übrigens an den erzwungenen Zeilenumbruch in Access.