Bernhard Krenz

backup for Oracle Datenbanken

Das kürzlich vorgestellte backup-Programm für Datenbanken und Dateien unterstützt nun auch Oracle als Datenquelle.

backup auf GitHub

Kommentieren mehr …

backup für SQLite Datenbanken

Das kürzlich vorgestellte backup-Programm für Datenbanken und Dateien unterstützt nun auch SQLite als Datenquelle.

backup auf GitHub

Kommentieren mehr …

iOS localizable.strings und Android strings.xml Konvertierer

Wer eine Anwendung für iOS und Android programmiert, bekommt die Sprachdatei möglicherweise nur für eine Plattform. Der Konvertierer übernimmt das automatische Umwandeln zwischen den Formaten.

Dabei werden die Eigenheiten der Plattformen berücksichtigt, wie z.B. mehrere Argumente für String-Formate oder die Handhabung von bestimmten Sonderzeichen wie “ und &.

Bei Fehlern oder Hinweisen freue ich mich über Feedback.

Konvertierer jetzt öffnen

Kommentieren mehr …

Einfache Datenbank-Backups

Wer eine einfache Möglichkeit sucht, die Datenbanken (und auch Dateien) auf einem Server zu sichern, kann dafür das Tool „backup“ nutzen.

Die Installation und Konfiguration ist denkbar einfach.

backup auf GitHub

Kommentieren mehr …

Timerdesk – neue Funktionen

Das Zeiterfassungs-Programm wurde weiter optimiert.
Es ist nun möglich, für Mitglieder eines Teams, Stundensätze für Kunden zu definieren.
Damit vereinfacht sich die Abrechnung gegenüber dem Kunden enorm.
Und das Beste daran: Alle Funktionen zur Zeiterfassung von Timerdesk sind garantiert kostenfrei.
Also anmelden und loslegen unter www.timerdesk.de.

Kommentieren mehr …

GIT-Repository duplizieren/kopieren/clonen

Wer ein GIT-Repository von einem auf einen anderen Server umziehen möchte, kann dies wie folgt erreichen. Der Vorteil dieser Methode ist, dass alle branches mit allen Commits übernommen werden:

1. GIT-Kommandozeile installieren.

Falls noch nicht vorhanden, ist GIT für die Kommndozeile zu downloaden und zu installieren.

2. SSH für GIT konfigurieren

Falls nötig, muss SSH konfiguriert werden. Wer bisher Putty benutzt hat, kann dies im vorherigen Post nachlesen.

3. Repository auf lokale Festplatte spiegeln

Hierfür wird die Kommandozeile für GIT genutzt. Wichtig ist das –mirror Argument. Das Repository wird im aktuellen Verzeichnis gespeichert.

git clone --mirror [Server-URL des zu kopierenden Repository]

4. In das lokale Repository wechseln

cd [Name des Repositories].git

5. Repository auf dem neuen Server erstellen

Auf dem neuen Server ist je nach verwendeter Hosting ein neues Repository zu erstellen. Vorzugsweise, aber nicht zwingend, mit dem gleichen Namen wie das bisherige Repository.

6. Upload des Repositories

Jetzt wird das lokale Repository in das Repository auf den neuen Server gespiegelt.

git push --mirror [Server-URL des neuen Repositories]
Kommentieren mehr …

GIT mit Putty benutzen

Ich nutze üblicherweise mit SourceTree um mit GIT-Repositories zu arbeiten. Putty ist hier vorkonfiguriert.

Neulich musste ich aber GIT für die Kommandozeile installieren und stand vor der Aufgabe, den bestehenden Putty-SSH-Schlüssel zuzuordnen. Dies geht mit folgendem Befehl in der Kommandozeile:

set GIT_SSH=[Pfad zum Putty-Verzeichnis]\plink.exe

Danach klappt auch die Kommunikation mit SSH-Repositories.

1 Kommentar mehr …

Kostenlose Zeiterfassung online unter http://www.timerdesk.de

Unter http://www.timerdesk.de findet sich ein von mir entwickeltes Programm zur Zeiterfassung. Timerdesk ist bewusst schlicht in Funktionen, Farben und Design gehalten. Die Konzentration auf einfache Datenverwaltung und nützliche Berichte stehen im Mittelpunkt.

Die Zeiterfassung erfolgt nach den Wünschen der Nutzer. Neben der reinen Erfassung eigener Aufgaben können diese Projekten, Aufträgen oder Kunden zugewiesen werden. Darüber hinaus können andere Nutzer eingeladen werden, um gemeinsam an Projekten zu arbeiten und um die Aufwände in den Berichten zu erfassen.

Weitere Funktionen des Zeiterfassung-Programms sind eine Stundenliste nach Aufgaben pro Kunde zur Beschleunigung der Rechnungslegung sowie eine Übersicht der eigenen Arbeitszeiten zur Analyse und Verbesserung.

Timerdesk ist komplett kostenfrei ohne versteckte Kosten oder Sonder-Module.

Kommentieren mehr …

Objective-C weak-Eigenschaft aus Swift

Mit der aktuellen Swift-Version scheint es nicht möglich zu sein, einer weak-Eigenschaft einer Objective-C-Klasse einen Wert zuzuweisen. Auch mit einem manuellen setter ist die Variable immer nil.

Dies betrifft vor allem den Fall, in dem in einem Swift-Projekt eine Objective-C Bibliothek genutzt wird, die zum Beispiel ein weak delegate besetzt.

@property (weak) id<Protocol> dataSource;

Die einzige Lösung bestand darin, die weak-Eigenschaft in eine strong-Eigenschaft zu ändern. Ich hoffe, dass Apple dafür einen Fix liefert.


File.Move nach File.Delete

Die Windows-Welt hält doch immer wieder Überraschungen bereit. Gerade brachten mich folgende Code-Zeilen zur Verzweiflung:

if (File.Exists(filePath + ".backup"))
{
	File.Delete(filePath + ".backup");
}

if (File.Exists(filePath))
{
	File.Move(filePath, filePath + ".backup");
}

Ziel des Ganzen: Eine Datei sollte vor dem Überschreiben in eine backup-Datei gespeichert werden. Existierte diese backup-Datei bereits, wird sie vorher gelöscht.

Der Code erzeugte eine IOException mit der Meldung, dass die Datei nicht bewegt werden konnte, da diese bereits existiert. Mit dem oberen Code natürlich völlig unmöglich. Eine Recherche zeigte als Ursache, dass das File.Delete möglicherweise zu lange dauert und zum Zeitpunkt des File.Move noch existierte. Für mich ist dann fraglich, warum der Code nach File.Delete ausgeführt wird. Dies sollt erst geschehen, wenn die Datei tatsächlich gelöscht wurde.

Wie dem auch sei. Folgende Änderung vermeidet den Fehler:

if (File.Exists(filePath))
{
	File.Copy(filePath, filePath + ".backup", true);
}

Hiermit wird die aktuelle Datei-Version zum Backup kopiert und überschrieben, falls diese bereits vorhanden ist.

Im nächsten Schritt muss natürlich sicher gestellt werden, dass die aktuelle Datei-Version durch die Neue überschrieben wird.


Copyright © 2012-2019 Bernhard Krenz Alle Rechte vorbehalten.