Donnerstag, 4. August 2011

C# - PID für aktuellen Prozess ermitteln

Aktuell baue ich einen kleine UDP Server.
Da ein laufender Server per PID Datei angezeigt werden soll, muss ich diese per C# ermitteln.

Die Lösung ist gerade mal eine Zeile lang.

System.Diagnostics.Process.GetCurrentProcess().Id;
Somit bekommt man die Id als int Wert.
Diese kann man dann entsprechend in einer .pid Datei speichern um einen aktiven Server zu markieren.

Samstag, 30. Juli 2011

Linux Kernel 3.0 erschienen

Im laufe der letzten Wochen wurde die 2.6 Linie des Kernels in 3.0 umgetauft.
Grund dafür waren nur Probleme mit dem alten 4 stellligem Versionsnummern.
Die neue Versionierung besteht nur noch aus 3 Stellen.

Die letzte Stelle weisst zukünftig nur noch auf Sicherheitsupdate hin.
Die mittlere Stelle auf neue Versionen der aktuelle Linie.
Und die erste Stelle verweist eben auf die aktuelle Linie.

Große Neuerungen gibt es von Version 2.6.39 zu 3.0 nicht.
Trotzdem ist es nach einigen Jahren bestimmt nicht schädlich auf Version 3.0 umzustellen.

Die aktuelle Version kann wie gehabt von kernel.org geladen und kompiliert werden.
Debian Squeeze hat mit der aktuelle Version keine Probleme und läuft sehr stabil.

C# Projekt sync

Ich habe vor einigen Wochen eine kleine Anwendung in C# gebastelt.
Bei sync handelt es sich um eine Anwendung zur, nicht überrascht sein, Dateisynchronisation.

Dabei bediene ich mich dem Threadpool, damit die Verarbeitung auch schnell erledigt wird.
Dies hat sich als Vorteilhaft bei der Verarbeitung von Dateien über eine Netzwerkfreigabe erwiesen.
Da in C# die Attribute der FileInfo Objekte erst intern aktualisiert werden, wenn diese zum ersten mal aufgerufen oder die Refresh() Methode aufgerufen wird, kann dies bei einer Datei über das Netzwerk langsam sein.

Dies bremst bei jeder einzelnen Prüfung die Verarbeitung ganz schön aus.
Hier lohnt sich dann die Verarbeitung mit dem Threadpool.

Durch Parameter an die Anwendung, kann man dann auch nicht die Anzahl der Aufgaben und auch den Ablauf steuern.
Wenn man z.B. Dateien Archivieren möchte, kann man den Löschvorgang überspringen.

Ich nutze sync bereits daheim um meine Dateien auf meinem Homeserver per Samba zu speichern.
Dies funktioniert wirklich wunderbar.

Das Projekt werden ich später noch zur Verfügung stellen.

Java 7 ist fertig

Eine Nachricht die man fast schon als running gag bezeichnen könnte.
Aber nach 4 Jahren Entwicklungszeit hat Oracle es durch die Aufteilung der Planung für das JDK geschafft die Version 7 fertig zu stellen.

Insgesamt gibt es durch das Project Coin kleine Sprachänderungen.
So ist es endlich möglich String anstelle einer Verkettung von if/else if/else durch ein switch zu schicken.
Diese Funktion ist eine erhebliche Erleichterung für die Arbeit mit Strings.

Auch weitere Funktionen und Sprachänderungen kamen hinzu.
So besitzt Java 7 mit NIO 2 endliche eine Klasse mit statischen Methoden zur Verarbeitung von Dateien.
Sowas hätte ich in Java 6 bereits gebrauchen können.
Auch ist es endlich möglich, über diese neue File Klasse, mit symbolischen Links zu arbeiten.
Diese Funktion kann ich in jsync endlich gebrauchen.
Dort folgt Java dem symbolischen Link und kopiert entsprechend die Dateien in das Zielverzeichnis, was ja eigentlich nicht gewünscht ist.

Ich werden in nächster Zeit, wenn ich dazu komme, eine Java 7 Version von jsync anlegen.

Vorher wird aber noch kräftig aufgeräumt, da einiges an Altlasten endlich verschwinden muss.
Auch ein paar Optimierungen am Code dürften nicht schaden.

Montag, 4. Juli 2011

jsync optimiert

Da ich in letzter Zeit wieder etwas in jsync aufräumen wollte, habe ich in den letzten Tagen mal mit dem Haus putz angefangen.
Als erstes hab ich mal die interne Verwaltung der Pfade optimiert.

Dies hat den Speicherverbrauch zwar leicht nach oben gedrückt, hilft aber für sauberen Code als vorher.
Im Gegensatz zum alten Code wird der Speicherverbrauch aber nicht über ein gewisses Limit gepuscht.
Grund dafür ist, dass intern nur noch die Ordner gespeichert werden.
Die Verarbeitung der Dateien erfolgt dann erst wenn eine bestimmte Ordner Ebene erreicht wird.

Auch ein paar Optionen wie die SleepTime der Threads werde ich wohl rauswerfen.
Hier wird im Code eine default Zeit von 1 Millisekunde eingetragen.
Auch andere Optionen werden wohl rausfliegen um die Konfiguration wieder sinnvoll zu gestalten.

Montag, 27. Juni 2011

ccache für optimiertes neukompilieren

Durch Zufall habe ich letzte Woche das Tool ccache gefunden.
Dabei handelt es sich um ein Tool, dass vom compiler generierte .obj Dateien cached.
Damit wird das erneute kompilieren eines Programmes um eine herbliche Dauer verkürzt.

Damit das Tool seine volle Leistung erreicht muss es erst eingerichtet und noch etwas angepasst werden.
In Debian Squeeze kann man es per "aptitude install ccache" installieren.

Ist dies getan, sollte man die größe des gesamten Caches noch anpassen.
Per Default steht dies bei 1 GB was leider viel zu klein ist, wenn man öfters Programme oder kernel kompiliert.

Hier muss man per "ccache -M " un einem Wert wie 25G die größe setzen.
Da ich meistens Systemplatten habe die ca. 120-250 Gigabyte fassen und selten genutzt werden, kann ich den cache locker auf 25G setzen.

Somit stellt man also den cache per "ccache -M 25G" auf schöne 25 Gigabyte.
Damit man auch eine kleine Übersicht hat kan man mit dem Parameter -s sich die Statistik anschauen.
Diese kann man mit dem Parameter -z wieder zurück setzen.

Für Leute selbst 25 Gigabyte als cache vollkriegen gibt es den Parameter -C der den gesamten cache löscht.

Wenn man den aktuellen stable Kernel 2.6.39.2 kompilieren will muss man noch 2 Variablen setzen.
Einmal muss noch die PATH Varaible angepasst werden.
Dies ist nötig, da ccache auf eigene Verlinkungen der jeweiligen compiler zugreifen muss.

Dazu verwendet man folgenden Befehl.
export PATH="/usr/lib/ccache:$PATH"

Nun muss zum kompilieren folgender Befehl verwendet werden.

make CC="ccache gcc"
 Zusätzlich kann man für die paralelle abarbeitung noch den Parameter -j und die Anzahl der Jobs anhängen.
Somit wird beim kompilieren ccache genutzt was beim erneuten kompilieren gut Zeitspart.

Zusätzlich kann man auch noch tmpfs nutzten.
Hier sollte man aber genutzt RAM haben, damit das Dateisystem bzw. der Speicher nicht vollläuft bevor man fertig mit kompilieren ist.

Dienstag, 21. Juni 2011

Netzwerk Programmierung mit Sockets

Da ich schon seit einiger Zeit mich mit dem Thema der Netzwerkprogrammierung beschäftigen wollte, habe ich mir mal die Zeit genommen und habe dieses Thema mit C# begonnen.

Dazu habe ich erst einmal eine kleine Konsolenanwendung gebaut die per Parameter zwischen Client und Server umschaltet.

Als Daten wird dort nur der String "Testdaten" hingesendet, vom Server ausgegeben und zum Client zurück geschickt.
Dieser gibt dann die Antwort vom Server ebenfalls aus.

Ist nur eine kleine Spielerei aber trotzdem ein kleiner Anfang.
Ich habe dies ebenfall mit Java mal umgesetzt, da ich dort auch mal die Erfahrungen sammelt wollte.

Beide Programmiersprachen haben fast die selben Klassen, was die Umsetzung auch sehr einfach macht.

Vielleicht kann ich ja in Zukunft mal ein kleines Tool bauen, was über das Netzwerk Daten versenden und empfangen kann :)
Wenn ich eine gute Idee habe, werde ich diese mal versuchen umzusetzen.

Dienstag, 24. Mai 2011

Fedora 15 released

Seit heute ist Fedora 15 verfügbar.
Die wichtigste Einführung mit Fedora 15 ist für mich Gnome in der Version 3.
Ich habe bereits in einer VM mit der Beta gearbeitet und fand Gnome 3 schon interessant.

Da mein alter Rechner nun als Spielewiese genutzt werden kann, habe ich mal Fedora 15 installiert.
Die Sprache ist leider englisch, lässt sich aber nach der Installation im Menü umstellen.

Die Texte wurden auch komplett übersetzt und laufen tut auch alles.
Ich werde gleich mal schauen ob es Updates gibt und diese dann installieren.
Falls noch genug Platz da ist, würde ich auf meinem Debian Server mal ein lokale Repository anlegen.

Da ich aktuell den Debian Server unter ftp2.de.debian.org spiegele, kann ich dort auch Fedora mit spiegeln.

Sonntag, 15. Mai 2011

Technische Umstellung daheim

Nachdem ich nun lange hin und her gegrübelt habe, habe ich mich dazu entschlossen meine kleine Technikzentrale umzustellen.

Mein Linux Dekstop wird vorerst in eine VM unter Windows 7 mit VirtualBox weichen.
Der Rechner wird dann erst einmal nur für Testzwecke von mir genutzt werden.
Ein paar spielchen wie Kernel kompilieren, Programmtests  oder einfach ein wenig mit Java und Mono rumspielen werden da bestimmt mal vorkommen.

Vorallem mit Java und C# ein kleines Client-Server Projekt aufzubauen wäre mal was interessantes.

Fahrschule

Nachdem ich mich nunr viele Jahre davor gedrückt habe, wird es langsam Zeit den Führerschein zu machen.

Ich habe bereits 6 von 14 Stunden im theoretischen Teil absolviert.
Leider ist meine Lernzeit auf das Wochenende, Montag und Freitag beschränkt.

Als Lehrmaterial gab es für 50€ einen USB Stick a 2 GB mit Lernsoftware und für 20€ ein Lehrbuch.
Die Lernsoftware aktualisert sich auch ohne Probleme ist aber nur 1 Jahr haltbar.
Danach verfällt der Stick und es muss ein neuer ran geschafft werden, falls dann noch benötigt.
Das Lehrbuch ist sehr umfangreich und enthält sogar eine CD mit Videos, was sehr hilfreich ist.

Ich werde meinen Bruder das ein oder andere Wochenende noch dazu bringen müssen mit mir fahren zu lernen.

Nächste Woche gibt es dann einen Erste Hilfekurs mit Passfotos und Sehtest.
Danach habe ich auch alles für den Antrag auf die Fahrerlaubnis.

Mit etwas Glück und Mühe kann ich im dritten Quartal meinen Führerschein erarbeiten.