Mittwoch, 24. Februar 2010

jsync, nio und der Speicherverbrauch

Gestern habe ich mal einen Test gemacht, der mich doch sehr überrascht hat.
So hat sich die Implementierung zum Dateien kopieren ohne nio als Speicher schonender und effizienter herausgestellt.

Grund für die Umstellung war, dass mir die Tools top und htop unter Debian Lenny immer zeigten, dass der Speicher immer im Gigabyte Bereich gefüllt ist sobald größere Dateien kopiert werden.

Legt man nun aber eine Speichergrenze von 1 MB in der jsync.conf und stellt nio ab, kommt man nur auf 1 MB Speicherverbrauch zusätzlich zu den intern gespeicherten Pfaden.
Bei einer Kopieraktion lag ich im Schnitt bei 100 MB.

Deshalb empfehle ich, auch wenn nio in Java 7 eine wichtigere Rolle spielen wird als die alten io Schnittstellen, eher auf die klassische Art zu setzen, wenn man Speicher schonen will.

Von apt-mirror zu debmirror

Ich mache gerade eine Umstellung von apt-mirror zu debmirror um den main Zweig von Debian stable und testing zu spiegeln.
Grund dafür ist, dass apt-mirror einen seit mehr als 1 Jahr unbehandelten Bug besitzt.
Ebenfalls scheint sich in Sachen apt-mirror in der Entwicklung nichts mehr zu tun.

Deshalb habe ich Gestern mal debmirror isntalliert und bin sehr zufrieden damit.
Das Programm wird nur mit Parametern aufgerufen, weshalb eine statische Konfigurationsdatei komplett entfällt.
Leider muss ich mir durch diese Umstellung das gesamte main Archiv für stable und testing erneut ziehen.

Da debmirror aber weiterentwickelt wird und wirklich mit einfachen Parametern konfiguriert wird, ist die Einstellung recht simpel.

Man benötigt für die Spiegelung wirklich nur ein Skript mit dem Aufruf von debmirror und den Parametern.

Einige gute Anleitungen gibt es hier:
http://wiki.debianforum.de/debmirror
http://www.lug-wr.de/wiki/index.php/Debmirror

Samstag, 13. Februar 2010

jsync, GPL und der erste Release

Gestern hat sich ein Sourceforge Benutzer bei mir nach den aktuellen jsync Dateien informiert.

Leider musste ich diesem sagen, dass es aktuell noch keinen Release gab.
Ich habe mir dies aber auch zu Herzen genommen und habe mich heute um die letzten Probleme in der aktuellen Version gekümmert.

Dazu zählt eine Anpassung zum Validieren der jsync.conf, Einbau des GPL Hinweis in den Kopf einer jeden Code Datei, Anpassungen der aktuellen Dokumentation und und und.

Ich habe auch einen positiven Kommentar auf sourceforge bekommen.
Dort hat sich ein Mac User bedankt und mir mitgeteilt, dass er mit jsync seine Dokumente mit seinem PC synchronisiert.

Es ist schon sehr cool wenn man solche Kommentare lesen kann :)

Mittwoch, 10. Februar 2010

Google wird zum Provider

Wie ich gerade gelesen habe, will Google in Amerika zum Internet Provider werden.
Das ganze wird erst einmal als Versuch ablaufen.
Dabei sollen Anbindungen von 1GBit/s drin sein.

Man versucht dabei 50.000 bis 500.000 Haushalte anzubinden.
Ich wäre froh wenn ich solch ein Experiment mitmachen dürft.

Ich stelle mir nur die Frage wozu man eine 1GBit/s Leitung benötigt.
Damit kann man schon Dateien in einer extremen Größenordnung verteilen und dies über einen schnellen Ablauf.

Für Torrents wäre es mal eine angenehme Geschwindigkeit.
Aber für den privaten Surfer sehe ich keinen Sinn in dieser Größenordnung.

Sonntag, 7. Februar 2010

jsync beherrscht nun symbolische Links

Ich habe bei mehren Tests in der Vergangenheit immer das Problem gehabt, dass jsync nicht mit einem Link angesprochen werden konnte.

Hierbei war das Problem, dass doe jsync.conf immer direkt neben der jsync.jar liegen muss.
Der Pfad zu dieser Datei war bisher immer relativ.
Wenn man nun aber einen symbolischen Link als Verweis nutzt, dann wird versucht in dem Verzeichnis des Links nach der jsync.conf zu suchen.

Dieses Problem lässt sich auch leider nicht wie in C# mit einer Klasse einfach lösen.
Das Problem habe ich so gelöst, dass ich mit die Url für die ConfigHelper.class aus der jar Datei habe geben lassen.

Das Format ist dann file://D:/jsync/jsync.jar!/jsync/helpers/ConfigHelper.class

Somit musste ich nur die URL um file:// kürzen und den Pfad von jsync.jar nehmen um dem absoluten Pfad zu ermitteln.

Dies ist etwas trickie aber funktioniert ohne Probleme.
Im Code liegt auch ein Fix für Entwickler vor.
Den in einer Entwicklungsumgebung hat man keine fertige .jar Datei.

Ansonsten bin ich froh, dass dieses Problem endlich gelöst ist.
Somit kann ich endlich meine ganzen Backup Skripte anpassen.
Es ist ziemlich nervig immer wieder per cd in das Verzeichnis von jsync zu wechseln.

Donnerstag, 4. Februar 2010

Große Architektur Änderung bei jsync

Ich habe Gestern eine neue Architektur bei jsync eingeführt.
Diese soll lediglich die jFileLib erweitern.

So gibt es nun die Klassen File, Directory und Path.
Diese dienen um Attribute von Dateien zu prüfen.
Path dient hierbei als eine sehr gute Helferklasse zum überprüfen ob es sich um eine Datei oder ein Verzeichnis handelt.

Somit kann man dann über die File oder Directory Klassen dann spezifische abfragen machen.

Des weiteren lagere ich auch viele Teile zum kopieren von Binärdateien aus.
So gibt es wieder das File, FileReader und FileWriter Konstrukt.
Somit kann ein eigenes File Objekt mit einem Reader und Writer als Eigenschaften erzeugt werden um die Operationen beim Lesen und Schreiben von Dateien zu vereinfachen.

Ich finde es leider sehr bedauerlich, dass Java nicht wie C# statische Methoden in der File Klasse bietet.
In Java muss immer ein Objekt erzeugt werden und dann kann erst gearbeitet werden.
Dies hat sich in den ersten Versionen von jsync als sehr Speicherraubend erwiesen.

Diese Architekturumstellung spart nochmals 10 Megabyte RAM bei der Ausführung ein.
Ich werde schauen, ob ich dies nicht noch mehr optimieren kann.