VB.NET: ICQ Benutzerinformationen auslesen
In Deutschland ist der Instant Messaging Client ICQ seht weit verbreitet. So könnte man doch ab und zu eine Funktion gebrauchen mit der man prüfen kann, ob ein Benutzer grade am PC ist.
Leider schränkt ICQ uns hier sehr ein und bietet keinerlei Schnittstelleninformationen. So müssen die Entwickler berühmter Clients wie QIP, Miranda oder Trillian die Funktionsweise des Protokolls selbst erarbeiten durch Reverse Engeneering!
Ich bin vor ein paar Tagen aber auf ein interessantes Skript gestolpert, dass die ICQ Webseite wohl intern dazu benutzt den Status der User im Forum und auf der eigenen Homepage darzustellen. Und natürlich können wir diesen auch anzapfen!
Das Skript befindet sich unter dieser Adresse: http://www.icq.com/js/pcc.php?Uin=[ICQNUMMER]
Ruft man diesen Link mit einer gültigen ICQ Nummer am Ende auf so erhält man ein großes Wirwar an Informationen die aber leider nicht geordnet dargestellt werden!
Auch wenn es nicht alle Informationen sind, die ICQ über einen speichert, so kann man mit den Daten trotzdem schon was anfangen!
Bild 1: Das ICQ Tool - und ja: Diese ICQ Nummer gibts wirklich
So kann man neben Status und Namen auch das Bild des Benutzers abfragen. Aber nur das Bild, das der User im Forum verwendet (glaube ich).
Desweiteren kann man nicht von allen Benutzern den Status abfragen. Ich vermute, das liegt daran dass diese Benutzer erst eine Autorisierung verlangen bevor sie den Status preisgeben.
Der Programmierteil beschränkt sich hierbei auf das Filtern der Informationen die man durch den Aufruf des oberen Links bekommt:
Private Function getICQInfos(ByVal uid As String) As String()
Dim Infos() As String
Dim retVal(8) As String
Dim web As WebClient = New WebClient
Infos = web.DownloadString("http://www.icq.com/js/pcc.php?Uin=" & uid).Split(vbNewLine)
'Zeile - Inhalt
'3 - fullname
'6 - userinfo
'9 - onlinestatus
'10 - email
'11 - handynummer
'13 - homepage
'14 - icq uin
'16 - userphoto
'17 - hausnummer
'18 - useronlineicon
'19 - nickname
'Vor und Nachnamen laden
retVal(0) = Infos(3).Substring(Infos(3).IndexOf("""") + 1, _
Infos(3).Length - 3 - Infos(3).IndexOf(""""))
'Benutzerbeschreibung7)
retVal(1) = Infos(6).Substring(Infos(6).IndexOf("""") + 1, _
Infos(6).Length - 3 - Infos(6).IndexOf(""""))
'Online Status als Zahl
retVal(2) = Infos(9).Substring(Infos(9).IndexOf("""") + 1, 1)
'E-Mailadresse
retVal(3) = Infos(10).Substring(Infos(10).IndexOf("""") + 1, _
Infos(10).Length - 3 - Infos(10).IndexOf(""""))
'Homepage
retVal(4) = Infos(13).Substring(Infos(13).IndexOf("""") + 1, _
Infos(13).Length - 3 - Infos(13).IndexOf(""""))
'Benutzerfoto URL 'jaja ich weis coole formel
retVal(5) = Infos(16).Substring(Infos(16).IndexOf(""") + 6, _
(Infos(16).Length - (Infos(16).IndexOf(""") + 6)) _
- (Infos(16).Length - (Infos(16).IndexOf("" "))))
'User Online Icon URL
retVal(6) = Infos(18).Substring(Infos(18).IndexOf("""") + 1, _
Infos(18).Length - 4 - Infos(18).IndexOf(""""))
'Nickname
retVal(7) = Infos(19).Substring(Infos(19).IndexOf("""") + 1, _
Infos(19).Length - 3 - Infos(19).IndexOf(""""))
web.Dispose()
Return retVal
End Function
Ich habe hier in dem Beispiel nicht alle Informationen gefiltert, aber für die Demo hier wirds wohl reichen!
Habt ihr auch schon mit solchen ICQ Skripts herumexperimentiert? Schreibt ein Kommentar mit euren Tools.
Das Demoprojekt gibts hier: Download
Probleme beim Klonen einer WebSpere Portal 6.1 Installation
Das Klonen eines WebSphere Portal Servers ist eine komplexe Angelegenheit die sich gut und gerne etwas länger hinzieht. Umso besser, dass IBM eine Anleitung dazu stellt.
Doch auch wenn man der Anleitung genau folgt kann es zu unerwarteten Problemen kommen, die dort nicht erläutert werden.
Das ist mir passiert und da ich schon ne Weile gebraucht habe um auf die Lösung zu kommen, könnte es auch andere interessieren.
Das Problem ist/war, dass bei Schritt 2. in der Anleitung von IBM:
To delete the scheduled tasks, run the following ConfigEngine task:
<profile_home>/ConfigEngine/ConfigEngine.sh action-clean-scheduled-tasks
Eine Menge von Fehlern ausgespuckt werden:
Bild 1: Der Stacktrace der Exception
Dabei werden folgende Fehler ausgespuckt:
ERROR XSDB6: Another instance of Derby may have already booted the database
Could not shutdown the database!
[sqlproc] SQL Exception: Database 'xxxdb' not found.ERROR: Error during the execution of the sql files.
Dabei sind die Fehler etwas verwirrend wie ich fand, denn der erste besagt, dass die Datenbank die seit Version 6.1 nun "derby" heißt und nicht mehr "cloudscape" und der zweite sagt, dass diese nicht gefunden wurde!
Nungut, nach einer langen Suche in den Logs und einer engen Zusammenarbeit mit Google war die Lösung dann doch ganz einfach!
Dabei bringt der erste Fehler es auf den Punkt! Es läuft bereits eine Instanz der Datenbank. Was aber nicht der Fall ist. Aber das Skript glaubt das, da der user dafür noch in einer Session "eingeloggt ist".
Wenn man diese Session-Dateien (*.lck) löscht, wird der Weg für einen erneuten Login durch das Skript frei.
Diese Dateien liegen im Verzeichnis <wp_profile>/PortalServer/derby/wpsdb.
Bild 2: Die zwei LCK-Dateien, die die Session blockieren
Wenn man nun diese zwei Dateien löscht läuft das Skript ganz normal durch. Der weitere Cloning-prozess verlief dann relativ unspektakulär.
Lösungsquelle war ein IBM-Hilfe Dokument, dass zwar für was anderes Gedacht war aber das Problem sehr ähnlich war!
VB.NET: Dateioperationen mit Fortschrittsanzeige Teil 3 – Wiederaufnahme von Downloads
Wenn man grafische Oberflächen entwickelt wird man irgendwann an dem Punkt kommen wo man Dateien kopieren, verschieben oder herunterladen will. Wenn diese nicht grade wenig und klein sind bietet es sich natürlich an eine Fortschrittanzeige dafür zu erstellen. Damit wird sich diese Serie beschäftigen.
Teil 3 - Wiederaufnahme von Downloads nach einem Abbruch
Wer kennt das nicht, man lädt eine große Datei herunter und plötzlich bricht die Internetverbindung ab. Alles umsonst, und der Download muss neu gestartet werden!
Bild 1: Das Demoprojekt bei der Wiederaufnahme des Downloads
Viele Downloadmanager heutzutage unterstützen das so genannte "wiederaufnehmen" von Downloads, sodass man nach einem Abbruch nicht die ganze Datei von vorne laden muss.
Doch wie funktioniert das? In diesem Teil werden wir das Projekt aus Beispiel 2 um diese Funktionalität erweitern. Und es ist erschreckend einfach und benötigt nur eine geringe Modifikation!
Zunächst einmal die Theorie. Wenn ihr in den Code aus Teil 2 schaut werdet ihr feststellen, dass beim herunterladen der Datei ein Strom aufgebaut wird, aus dem wir die Daten herunterladen und lokal speichern.
Wenn ihr den Code aus dem Form_Closing() Ereignis löscht, und dann einen laufenden Download durch das Beenden des Programms abbrecht, werdet ihr feststellen, dass die "temporäre" Datei nochimmer auf der Festplatte liegt!
Diese Datei ist natürlich nutzlos, da wir nur eine Teilmenge davon geladen haben. Aber da wir herausfinden können, wieviele Bytes wir schon geladen haben wissen wir schon wo wir wieder ansetzen müssen!
Dementsprechend müssen wir den neuen Download nicht an Stelle 0 im Strom starten, sondern an stelle [Anzahl heruntergeladener bytes].
Ich möchte jetzt nicht den ganzen Code hier posten sondern nur die Schlüsselstelle hier:
Dim request As HttpWebRequest = HttpWebRequest.Create(url)
request.Proxy = Nothing
request.AddRange(CInt(curBytes))
Dim response As HttpWebResponse = request.GetResponse
If Not response.StatusCode = HttpStatusCode.PartialContent Then
'falls der Server wiederaufnahme nicht unterstützt bei 0 anfangen
curBytes = 0
End If
Man muss beim erstellen des Requests und noch vor dem Response dem Server mitteilen, ab wo er die Daten schicken soll, da wir ja nicht die ganze Datei brauchen!
Dies machen wir mit dem Befehl request.AddRange(CInt(curBytes)) der dafür sorgt, dass der Stream an der von uns gewünschten Stelle startet!
Leider unterstützen nicht alle Server die Wiederaufnahme von Downloads. So kann es vorkommen, dass der Download nicht fortgesetzt werden kann. Diesen besonderen Fall muss man natürlich behandeln.
Wenn wir die Antwort vom Server bekommen (Response) können wir prüfen, welche Statusmeldung der Server zurückgegeben hat. Dafür benutzen wir die Methode response.StatusCode.
Wenn alles gut gelaufen ist und der Server die Wiederaufnahme zulässt bekommen wir den Status Code 206 - PartialContent. Wenn der Server es nicht unterstützt kriegen wir den Code 200 - OK.
Eine komplette Liste mit den Server Responses findet ihr im MSDN!
Wenn wir den Code 200 bekommen müssen wir die Datei wieder von Null laden und müssen darauf mit der Rücksetzung im Code reagieren!
Ich setze in der Demo noch den Proxy auf Null. Das mache ich, da ich ein paar Probleme hatte und der Stream etwas falsch ankam. Ihr könnt es gerne mal ohne diesen Befehl testen und dann hier berichten.
Um das ganze zu testen könnt ihr euch die Demo laden. Startet dann einfach einen Download und unterbrecht diesen irgendwo in der Mitte. Dann startet das Programm neu und startet den selben Download nochmal.
Ihr werdet nun gefragt, ob ihr diese Datei überschreiben wollt (Standartfrage von Windows) und ob ihr dann den Download fortsetzen wollt. Beides mit "Ja" beantworten.
Nun müsste das Programm den Download wiederaufnehmen.
Das Demoprojekt gibt es hier: Download
Teil 1 - Kopieren und Verschieben von Dateien
Teil 2 - Download von Dateien
Teil 3 - Wiederaufnahme von Downloads nach einem Abbruch
Teil 4 - Upload von Dateien
VB.NET: Dateioperationen mit Fortschrittsanzeige Teil 2 – Download von Dateien
Wenn man grafische Oberflächen entwickelt wird man irgendwann an dem Punkt kommen wo man Dateien kopieren, verschieben oder herunterladen will. Wenn diese nicht grade wenig und klein sind bietet es sich natürlich an eine Fortschrittanzeige dafür zu erstellen. Damit wird sich diese Serie beschäftigen.
Teil 2 - Download von Dateien
Im letzten Teil haben wir gesehen, wie man beim Kopieren von Dateien einen Fortschrittsbalken erzeugt, nun wollen wir das ganze für ein Download Programm umsetzen.
Wer sich schon mal im My-Namespace umgeschaut hat wird sicherlich die Funktion DownloadFile() entdeckt haben. Diese Funktion erleichtert uns das Leben sehr, da diese uns erlaubt mit nur einer Zeile Code eine Datei aus dem Internet zu laden.
Das blöde daran ist, dass wenn die Datei etwas größer ist blockiert der Download den Ganzen Thread sodass dieser nicht mehr reagiert bis der Download abgeschlossen ist! Dies wollen wir ändern und den Downloadvorgang visualisieren.
Das werden wir so ähnlich gestalten, wie in Teil eins, nur etwas Anfängerfreundlicher. (Ich habe gemerkt dass das Beispiel aus Teil 1 doch nicht so das Gelbe vom Eis ist!)
Das Vorgehen dabei ist aber fast das gleiche. Wir erstellen einen Stream zu der Datei die wir herunterladen wollen und einen Stream zu einer Lokalen Datei in die wir die gelesenen Bytes speichern. Klingt doch ganz easy oder?
Dabei werden wir folgende Variablen benutzen:
Dim timer As Stopwatch 'Stoppuhr zur bestimmung der Downloadgeschwindigkeit
Dim loaded As Long 'Anzahl na Bytes die in einer Zeiteinheit geladen wurden
Dim speed As Double 'Downloadgeschwindigkeit in KB/s
Dim url As String 'Die URL mit der zu ladenden Datei
Dim des As String 'Zielpfad auf dem lokalen System
Dim buffer(32768) As Byte 'Puffer für den Download -> Je größer desto schneller der Download
Dim totBytes As Long 'Größe der zu ladenden Datei
Dim curBytes As Long 'Bisher geladene Bytes
Dim readBytes As Long 'Anzehl gelesener Bytes pro Block
Dim bis As BinaryReader 'Der Strom mit der zu ladenden Datei
Dim fos As FileStream 'Strom der die Datei lokal speichert
Wie man sieht findet man hier nichts ungewöhnliches. Das einzige, dass neu ist ist die Stopwatch-Variable. Diese benötigen wir später um die Downloadgeschwindigkeit zu ermitteln.
timer = New Stopwatch
'Stream zur Datei im Internet erstellen und Lokal
Dim request As HttpWebRequest = HttpWebRequest.Create(url)
Dim response As HttpWebResponse = request.GetResponse
bis = New BinaryReader(response.GetResponseStream)
fos = New FileStream(des, FileMode.Create, FileAccess.Write)
totBytes = response.ContentLength
timer.Start() 'Mit dem Timer messen wir, wieviele Bytes in der letzten Sekunde heruntergeladen wurden
While (True)
readBytes = bis.Read(buffer, 0, buffer.Length) 'Aus dem Download Stream lesen
If readBytes = 0 Then
Exit While 'Download ist abgeschlossen
End If
fos.Write(buffer, 0, readBytes) 'Geladene Bytes lokal Speichern
curBytes += readBytes 'Anzahl gesammt gelesener Bytes erhöhen
loaded += readBytes 'Anzahl der Bytes erhöhen die in der Letzten Sekunde geladen wurden
If timer.ElapsedMilliseconds >= 1000 Then 'Wenn eine Sekunde vergangen ist
speed = 0
speed = FormatNumber(loaded / 1024, 2) 'Geschwindigkeit berechnen
loaded = 0 'und zähler zurücksetzen
timer.Reset() 'den Timer neustarten
timer.Start()
End If
'Die Anzeige im Formular-Thread aktualisieren
Label1.Invoke(New refreshGUIDel(AddressOf refreshGUI), New Object() {})
End While
'Ressourcen Freigeben
timer.Stop()
fos.Close()
bis.Close()
Kommen wir zu dem Kernunterschied. Hier kopieren wir Daten von einem Fremden Rechner (Server) zu dem wir ersteinmal eine Verbindung benötigen! Diese Verbindung können wir mit Hilfe eines HttpWebRequests (Eine Anfrage an den Server) herstellen. Und von dem bekommen wir dann auch eine Antwort in Form eines HttpWebResponse welcher uns dann auch einen Strom zu der angefragten Datei liefert!
Nun folgt der eigentliche Downloadvorgang. Wir lesen den Strom blöckchenweise und speichern ihn auch "gleichzeitig" ab. Da wir wissen wieviele Bytes übertragen wurden können wir auch einen Fortschritt anzeigen und auch die Geschwindigkeit berechnen.
Hier hat sich im Vergleich zu Teil 1 nicht viel getan. Neu ist die Stopwarch die nach jeweils einer Sekunde die Geschwindigkeit berechnet indem es misst wieviele Bytes in der letzten Sekunde übertragen wurden!
Bild 1: Das Downloadprogramm in Aktion
Heraus kommt ein kleines Tool, das eine beliebige Datei herunterladen kann und uns währenddessen mit ein paar Informationen versorgt.
Wie üblich gibts hier das Demoprojekt: Download
Habt ihr Tipps oder Fragen? Zögert nicht und schreibt einen Kommentar oder Mail!
Teil 1 - Kopieren und Verschieben von Dateien
Teil 2 - Download von Dateien
Teil 3 - Wiederaufnahme von Downloads nach einem Abbruch
Teil 4 - Upload von Dateien
Visual Studio 2010 Beta 2 – Erster Eindruck
Seit heute ist die zweite Beta vom Visual Studio 2010 für die breite Masse verfügbar. Seit Beta 2 läuft das gute Stück Software auch unter Windows 7.
Bild 1: Der Ladebildschirm vom Visual Studio 2010
Microsoft hat VS10 ja ziemlich stark überarbeitet, zB basiert die Oberfläche nun auf WPF. Und zusammen mit dem neuen Visual Studio wird auch das .NET Framework 4.0 eingeführt, welches zur Zeit auch in der zweiten Beta vorliegt.
Nach dem man VS gestartet hat wird man wie auch in den letzten Versionen von einem Begrüßungsbildschirm empfangen.
Aber es wird sofort auffallen, dass die gesamte Oberfläche viel aufgeräumter ist, man wird nicht mehr mit seitenweise Text beworfen und die ganzen anderen kleinen Bereiche sind auch verschwunden!
Das Design an Sich ist im schlichten Blau gehalten, das sich durch alle Bereiche zieht. Auch nach dem man ein neues Projekt angelegt hat bleibt die Übersichtlichkeit erhalten und man wird nicht von 10 Funktionsleisten abgelenkt.
Bild 2: Die erste Anwendung mit Framework 4.0
Ich hatte bisher nur wenig Zeit um großartig viel auszuprobieren. Ich habe lediglich ein paar Zeilen geschrieben um zu schauen wie der neue Codeeditor sich schlägt.
Und man muss leider sagen, dass man merkt, dass es noch im Beta Stadium ist, denn Intellisense ist nicht so schnell wie in VS9 und ist öfter mal verwirrt. Auch kommt es vor, dass es irgendwo aufpoppt wo es garnicht hingehört!
Bild 3: Der Codeeditor
Der Editor an sich hat ein paar neue Features bekommen, zumindest sichtbare, denn nun werden fünf statt vier Farben benutzt um den Code zu formatieren und werden auch gleiche Begriffe hervorgehoben.
Ich freu mich trozdem schon auf weitere tests mit der IDE. Was habt ihr für Erfahrungen sammeln können?
VB.NET: Dateioperationen mit Fortschrittsanzeige Teil 1 – Kopieren & Verschieben
Wenn man grafische Oberflächen entwickelt wird man irgendwann an dem Punkt kommen wo man Dateien kopieren, verschieben oder herunterladen will. Wenn diese nicht grade wenig und klein sind bietet es sich natürlich an eine Fortschrittanzeige dafür zu erstellen. Damit wird sich diese Serie beschäftigen.
Teil 1 - Kopieren und verschieben von Dateien - Update am 22.10.09
Wenn man unter .NET Dateioperationen wie kopieren, löschen, verschieben oder umbenennen durchführen will, so kann man das mit Hilfe hauseigener Klassen erledigen. Die meisten Dateioperationen findet man in der Klasse File im System.IO Namespace. (siehe Bild)
.NET bietet aber auch Funktionen zum hoch- und herunterladen von Dateien aus dem Internet, ohne dass man eine eigene Funktion schreiben muss!
Doch sobald man den Status des Kopier- oder Downloadvorgangs erfragen will um diesen zB. in einer StatusBar darzustellen ist man etwas alleingelassen und muss dies selbst in die Hand nehmen.
So muss man das was normalerweise das System für uns übernimmt selber machen. Also einen Strom erstellen um die Daten einzulesen, einen Puffer, und einen Strom um die gepufferten Daten wieder an einen anderen Ort zu schreiben.
Wenn ich hier von Strom rede meine ich den IO.FileStream der die für uns wichtigen Funktionen Read & Write bereitstellt, welche beide byteorientiert sind!
Es gibt natürlich verschiedene Ansätze wie man dieses Vorhaben umsetzen kann. So könnte man zB. Einen Thread erstellen, der nichts anderes macht als den IO.File.Copy Befehlt ausführt und das System die Datei kopieren lässt.
Da wir wissen wie Groß die Datei ist und wohin wir diese kopieren können wir auch gleich (zB. mit einem Timer) prüfen wie lange diese Operation dauert, wie viel übertragen wurde in dem wir ständig die temporäre Datei messen die vom System am Zielort erstellt wird und auch die Kopiergeschwindigkeit aus der Differenz.
Das ist aber nicht so schön und sieht vom Code aus nicht so schön aus! Weswegen ich hier in der Demo einen anderen Ansatz wähle, nämlich den, den ich am Anfang beschrieben habe!
Dieser hat den Vorteil, dass unser Programm ständig in Kontrolle des Kopiervorgangs bleibt und diesen eventuell unterbrechen kann. Oder zu einem Späteren Zeitpunkt fortsetzen. (Das system macht das nicht)
Desweiteren kann man dieses System auch viel einfacher erweitern um den Strom zB. zu verschlüsseln.
Das Vorgehen ist hierbei relativ simpel, da man eine Datei Stück für Stück ausließt und dann an einer anderer Stelle wieder zusammen Setzt. Alsob man ein Haus aus Lego an einen anderen Ort bringen müsste. (Stein für Stein)
Dabei kann die Anzahl der Steine (der Puffer) variieren denn umso mehr wir gleichzeitig tragen desto schneller geht es. Was auch noch ein Vorteil ist - wir können die Geschwindigkeit der Übertragung beeinflussen!
Um das System zu demonstrieren habe ich eine Klasse angefertigt, die ihr auch in euren Projekten benutzen könnt. Die Benutzung ist sehr einfach gehalten:
Bild 2: Die initialisierung und Ausführung des Kopiervorgangs
Es kann eine Progressbar und ein Label übergeben werden, mit denen dann der Kopiervorgang visualisiert wird.
Der Ganze Kopiervorgang läuft in einem eigenen Thread der mit der Anweisung FileCopy.copyFiles() gestartet wird.
Bild 3: Der Kopielvorgang läuft...
Natürlich ist hier und da noch was verbesserungswürdig, wichtig ist nur, dass das Prinzip deutlich wird, wie hier vorgegangen wird.
UPDATE: Ich habe das Demoprojekt noch etwas überarbeitet, da die alte Version nicht sehr Perfomat war und unmengen an Speicher gefressen hat. Nun sollte das besser sein!
Für Verbesserungsvorschläge bin ich natürlich weiterhin offen!
Hier könnt ihr euch die Demo herunterladen: Download
Serienteile:
Teil 1 - Kopieren und Verschieben von Dateien
Teil 2 - Download von Dateien
Teil 3 - Wiederaufnahme von Downloads nach einem Abbruch
Teil 4 - Upload von Dateien
Kostenloses Windows 7 E-Book von Microsoft
Wer schon mal ein Buch von Microsoft Press gekauft hat weis, dass diese Bücher Gold wert sind! Nun gibts ein Buch gratis als Download bis zum 31.10.

Das Buch beschäftigt sich mit Windows 7 und seinen Grundfunktionen:
- Programme und Mini-Anwendungen ausführen
- E-Mails senden, Termine planen, im Web surfen
- Fotos, Musik und Videos organisieren, Spiele spielen
- CDs und DVDs brennen und eigene Filme erstellen
- Drucker einrichten und ein Heimnetzwerk erstellen
- Sicherheit verbessern und Windows 7 optimal einrichten
Das Buch ist vor allem für Leute empfehlenswert, die noch nicht so viel Erfahrung mit Computern (Windows) sammeln konnten. Also wer noch eine Freundin hat kann der ja das Buch mal unterjubeln!
Ich habs mir mal vorsichtshalber mal gesichert - kost ja nix!
Zu finden hier: Windows 7 - Auf einen Blick
Windows 7 überzeugt mit tollem Treibermanagement
Seit nun ca 2 Monaten nutze ich Windows 7 Professional und bin sehr begeistert von diesem "Besten Windows aller Zeiten" wie Microsoft es sagt.
Warum? Nicht nur dass es sehr schnell läuft, die neuen Netzwerk Funktionen, dank welcher LAN Party noch mehr Spaß machen werden aber auch die neue Taskleiste (die "Superbar") sehr gut umgesetzt ist.
Was einem aber nicht gleich ins Auge springt, sind die Neuerungen "unter der Haube". So ist mir heute, als ich meinen Drucker an dem PC anschloss folgendes aufgefallen:
Bild 1: Automatisch Treiberinstallation
Wie immer wenn man ein neues Gerät an dem Computer schließt erscheint der Treiber Assistent und versucht passende Treiber zu finden. Dies gelang ihm aber in früheren Windows Versionen aber (so gut wie) nie!
So musste ich immer meine Treiber CD von Canon rauskramen und die Treiber installieren, die ca 100 MB Groß waren, warum auch immer!
So war ich umsomehr überrascht als Windows alles eigenständig erkannte und installierte. Und das mit nur 10 MB statt 100! Das ganze habe ich gleich auch noch mit einem Nokia 95 getestet, dass eigentlich die Nokia PC Suite benötigt.
Auch diese wurde heruntergeladen und installiert! Also hier mal ein riesen Komplement an Microsoft.
Windows 7 ist in meinen Augen ein sehr gelungenes OS geworden! Ich selber nutze es auf meinem Macbook Unibody neben Snow Leopard. Wobei ich Mac OS schon seit knapp einem Monat nicht mehr gebootet habe, was schon was heißt finde ich!
VB.NET: PuTTY Sessions aus der Registry exportieren
Wer mit PuTTY (ein SSH Client für Windows, zu finden hier) schon mal gearbeitet hat, weis, dass es ein sehr mächtiges Werkzeug ist. Doch leider hat PuTTY einen entscheidenden Nachteil, denn es speichert alle Einstellungen in der Windows Registry.
Warum ist das schlecht? Nun, wenn man zB. mehrere Arbeitsplätze hat oder PuTTY gern mal auf einem USB Stick mitnehmen will hat das Problem, dass er alle Einstellungen an jedem Rechner für jeden Benutzer aufs neue festlegen muss.
Das ist natürlich nicht allzu schön und wird problematisch, sobald man mehr als einen Server hat auf den man verbinden will!
An dieser Stelle hat der Blogger "socialistsushi" angesetzt und PuTTY so umgeschrieben, dass es seine Sessions lokal im PuTTY Ordner speichert. Das ist eine super Sache, da man nun alle seine Session immer dabei hat!
Aber ein Problem gibts da noch, denn wenn man grade umsteigt muss man alle seine Sessions neu anlegen, da Porta PuTTY (Wie das Tool heißt) die Sessions nur aus dem eigenen Ordner lesen kann!
Da ich das selber grade benötigte habe ich ein kleines Tool gebastelt, das für euch eure Sessions, die ihr bereits in der Registry angelegt habt exportiert, sodass ihr diese mit Porta PuTTY nutzen könnt.

Bild 1: Das kleine Tool Exportiert die Sessions aus der Registry
Eure Registry Sessions sind also nur einen Mausklick entfernt!
Das Demoprojekt inkl. dem build gibts hier: Download

