Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w00ab105/wp-settings.php on line 512

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w00ab105/wp-settings.php on line 527

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w00ab105/wp-settings.php on line 534

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w00ab105/wp-settings.php on line 570

Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1244

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1394

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1394

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1394

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1394

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w00ab105/wp-includes/classes.php on line 1445

Strict Standards: Redefining already defined constructor for class wpdb in /www/htdocs/w00ab105/wp-includes/wp-db.php on line 306

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w00ab105/wp-includes/cache.php on line 103

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /www/htdocs/w00ab105/wp-includes/cache.php on line 431

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w00ab105/wp-includes/query.php on line 61

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w00ab105/wp-includes/theme.php on line 1109

Strict Standards: Declaration of Walker_Comment::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/w00ab105/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/w00ab105/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w00ab105/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/w00ab105/wp-includes/comment-template.php on line 1266

Strict Standards: Redefining already defined constructor for class WP_Dependencies in /www/htdocs/w00ab105/wp-includes/class.wp-dependencies.php on line 31

Strict Standards: Redefining already defined constructor for class WP_Http in /www/htdocs/w00ab105/wp-includes/http.php on line 61

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w00ab105/wp-settings.php:512) in /www/htdocs/w00ab105/wp-includes/feed-rss2.php on line 8
blog.murb.com http://blog.murb.com Plan to be spontaneous tomorrow. Sun, 02 Oct 2011 14:49:28 +0000 http://wordpress.org/?v=2.7 en hourly 1 ICQ - Ein paar Statistiken… http://blog.murb.com/2011/10/01/icq-stats/ http://blog.murb.com/2011/10/01/icq-stats/#comments Sat, 01 Oct 2011 18:28:24 +0000 Martin http://blog.murb.com/?p=408 ICQ wird oft als der erste Instant-Messaging-Dienst bezeichnet und ist auch nach fast 15 Jahren noch immer sehr beliebt. In den ersten Jahren konnte ICQ einen rasanten Zuwachs verzeichnen, unter anderem auch durch den Verkauf an den amerikanischen Onlinedienst AOL. Doch wie sieht es heute aus? Nach ausführlichen Statistiken über die Nutzerzahlen und Informationen über die Nutzer selbst sucht man im Internet vergeblich.

Der folgende Artikel soll einen Einblick in die aktuelle Lage von ICQ und deren Nutzer ermöglichen. Neben den weltweiten Statistiken, wurden Deutschland und Russland zusätzlich separat untersucht, da diese beiden Länder den größten Nutzeranteil aufweisen.

Anmerkung: Für die folgenden Statistiken wurden nur Accounts mit aktivierten Profilen berücksichtigt.


Anzahl und Verteilung der UINs
Ein typisches Merkmal von ICQ sind die ICQ-Nummern, über die jeder Nutzer eindeutig identifiziert werden kann und worüber, zusammen mit dem Passwort, der Login erfolgt. In den letzten Jahren wurde der Login über eine feste E-Mail-Adresse jedoch in den Vordergrund gerückt, sodass die ICQ-Nummer zunehmend an Bedeutung verliert. Doch vor allem im russischsprachigen Raum erfreuen sich kurze und einfach zu merkende UINs (Unique Identification Number – im Weiteren als Synonym für die ICQ-Nummer verwendet) großer Beliebtheit, sodass eine komplette Umstellung auf den Login via E-Mail hier wohl wenig Begeisterung auslösen würde.

Aber zurück zu den Statistiken. Für die Auswertung wurden die ICQ-Nummern in die Bereiche 5-, 6-, 7-, 8-stellig,
Diagram 1: Number of UINs
Diagram 1: Number of UINs

sowie in die Bereiche 1 bis 9 bei den 9-stelligen UINs aufgeteilt. Diagramm 1 zeigt die absolute Anzahl der ICQ-Nummern in den jeweiligen Bereichen. Die geringe Zahl der 5-stelligen UINs ist darauf zurückzuführen, dass sie ursprünglich nur für die Entwickler gedacht waren und nicht zur Registrierung freigegeben wurden. Der größte Anteil konzentriert sich verständlicherweise im Bereich der 9-stelligen UINs. Gut zu erkennen ist hier, dass momentan UINs mit der Anfangszahl 6 bei der Registrierung vergeben werden. (Anmerkung: Die Vergabe der Nummern erfolgt nicht fortlaufend, sondern zufällig aus einem größeren Bereich, beispielsweise 550000000-650000000). Obwohl für den Bereich 700000000-999999999 offiziell noch keine Registrierung möglich ist, existieren hier bereits einige Accounts. Das liegt unter anderem daran, dass es vor einiger Zeit möglich war, durch Ausnutzung eines Bugs beliebige UINs zu registrieren.

Diagram 2: Percentage of UINs
Diagram 2: Percentage of UINs

Um den Anteil der registrierten Accounts in den jeweiligen UIN-Bereichen besser vergleichen zu können, bietet sich der prozentuale Anteil an (Diagramm 2), das heißt unabhängig von der maximalen Anzahl der UINs betrachtet. Hier wird die geringe Anzahl der 5-stelligen UINs noch einmal deutlich, aber auch 7- und 8-stellige UINs existieren verhältnismäßig wenig.
Schaut man sich die Unterbereiche im Detail an, ist ein gewisses System bei der Nummernvergabe zu erkennen. Auffällig ist jedoch, dass die Bereiche 180000000-189999999 und 500000000-549999999 komplett übersprungen wurden.
Insgesamt sind 382627226, also rund 383 Millionen Accounts bei ICQ registriert. Bei Wikipedia heißt es: „Derzeit sind über 470 Millionen Nutzer bei ICQ registriert.“ Da fragt man sich, wie sie auf diese Zahl kommen. Würde man die inaktiven Profile zu den 383 Millionen hinzunehmen, wäre das trotzdem noch weit von den genannten 470 entfernt. Vermutlich stammt der Wikipedia-Eintrag aus der Zeit, als ICQ-Nummern mit den Anfangszahlen 47 vergeben wurden.


Heimat-Stadt & -Land

Diagram 4: ICQ Home Country
Diagram 4: ICQ Home Country

Die Länder mit den meisten ICQ-Nutzern sind Russland (30,9 Mio.), Tschechien (30,3 Mio.) und Deutschland (21,5 Mio.). Danach folgen Ukraine, USA und Brasilien mit weitem Abstand (Diagramm 4). Da Tschechien bei den aktiven Nutzern allerdings noch hinter der Ukraine einzuordnen wäre, wird es bei den Statistiken nicht näher betrachtet.
Von allen Nutzern, die ein Heimatland angegeben haben (152,7 Mio.), stammen somit 20,2% aus Russland und 14,1% aus Deutschland. Tatsächlich werden es wahrscheinlich noch mehr sein.

Diagram 5: ICQ Home City
Diagram 5: ICQ Home City

Schaut man sich nun die Heimatstädte an (Diagramm 5), ist es nicht verwunderlich, dass Moskau (6,9 Mio.) unangefochten den ersten Platz belegt. Auch sonst sind viele russische Städte in den Top 15 vertreten. Mit 0,52 Mio. Nutzern liegt die größte deutsche Stadt nur auf Platz 10. Weitere deutsche Städte folgen erst auf den Plätzen 32 (Hamburg), 56 (Köln) und 60 (München).



Anzahl der aktiven Nutzer
Von über 52 Millionen im November 2009, hat sich die Anzahl der aktiven ICQ-Nutzer innerhalb von nur einem Jahr um fast 37% auf 33 Millionen verringert (Diagramm 6).
Diagram 6: ICQ Active Users
Diagram 6: ICQ Active Users

In Deutschland und Russland fallen die Rückgänge mit 17% auf 6,6 Millionen bzw. mit 10% auf 18,4 Millionen nicht so stark aus.
Bei den eindeutigen Nutzern ist, insbesondere bei Deutschland und Russland, im gleichen Zeitraum nur ein leichter Rückgang zu verzeichnen. Die Anzahl liegt hier jeweils bei ungefähr der Hälfte der eben genannten Zahlen.
Vor allem bei den russischen Unique Users sind konstante Schwankungen im Verlauf zu erkennen, wobei die Höhen unter der Woche erreicht werden und die Tiefen am Wochenende. Ursache hierfür könnte die mangelnde private Nutzung von ICQ sein, oder die Tatsache, dass gerade einmal 25% der russischen Haushalte über einen Breitband-Internetzugang verfügen. In Deutschland sind es hingegen über 66% der Haushalte.

Diagram 7: ICQ Active Users by Country
Diagram 7: ICQ Active Users by Country

Das folgende Diagramm zeigt den internationalen Vergleich der aktiven ICQ-Nutzer. Und erneut wird der große Nutzerkreis in Russland ersichtlich. Vergleicht man nur die Werte von November 2009 mit jenen im darauffolgenden Jahr, kann Russland seinen Anteil von 35% auf fast 50% sogar kräftig steigern. Aber auch Deutschland schafft knapp 5% Plus. Allerdings resultiert dieser Anstieg in beiden Fällen nicht aus einem Nutzerzuwachs, sondern aus den teilweise großen Rückgängen in anderen Ländern (beispielsweise Israel).


Das durchschnittliche Alter
Mit 28 Jahren ist das durchschnittliche Alter der ICQ-Nutzer verhältnismäßig hoch. Das liegt aber vor allem daran, dass der Großteil der Nutzer bereits seit vielen Jahren bei ICQ angemeldet ist. Denn mit dem Alter des Accounts steigt tendenziell auch das Alter des Besitzers, was auf dem Diagramm gut zu erkennen ist. Das durchschnittliche
Diagram 10: ICQ Average Age
Diagram 10: ICQ Average Age

Alter der weiblichen Nutzer liegt, wie im Internet üblich, meistens unter dem der männlichen Nutzer.
Verständlicherweise fragt sich der eine oder andere sicher, warum das allgemeine Alter teilweise leicht über dem der geschlechtsspezifischen Angaben liegt. Das hat den einfachen Grund, dass in diesen Fällen mehr Angaben zum Alter als zum Geschlecht vorliegen.
Mit 23,3 Jahren wird im Bereich 600000000-699999999 bei den weiblichen Nutzern (2,66 Mio.) das niedrigste Durchschnittsalter erreicht. Interessant wäre hier natürlich das Alter der aktiven Nutzer.


Aufteilung nach Geschlecht
Insgesamt liegt das Verhältnis zwischen männlichen und weiblichen Nutzern bei ungefähr 60% zu 40% (sofern angegeben). In Deutschland ist der Anteil der weiblichen Nutzer in den letzten Jahren konstant angestiegen. Kurze ICQ-Nummern bleiben aber doch eher Männersache.

Diagram 11: ICQ Gender
Diagram 11: ICQ Gender
Diagram 12: ICQ Gender DE
Diagram 12: ICQ Gender DE
Diagram 13: ICQ Gender RU
Diagram 13: ICQ Gender RU



Die häufigsten Vornamen

Diagram 14: ICQ First Names
Diagram 14: ICQ First Names

Bei den Vornamen liegt Anna mit 2,95 Mio. Einträgen auf dem ersten Platz, gefolgt von Basil (2,57 Mio.) und Roman (2,43 Mio.). Auf den ersten Blick mag das nicht logisch erscheinen, denn immerhin ist der Großteil der ICQ-Nutzer männlich. Der Grund ist in dem Fall der Name Anna selbst, da dieser nur wenige Varianten besitzt und in vielen Sprachen gleich geschrieben wird. Würde man beispielsweise Alex zu Alexander zählen, wäre er natürlich klar vorne. Aber es kann eben auch die Kurzform von Alexandra sein.
In Deutschland liegen die Namen Christian, Michael und Daniel mit leichtem Abstand vorne. Der Vorname Anna taucht in den Top 15 gar nicht auf, sondern liegt weit abgeschlagen auf Platz 28.


Autorisierung erforderlich?

Diagram 16: ICQ Authorization Required
Diagram 16: ICQ Authorization Required

Um einen Kontakt in die eigene Liste aufnehmen und alle Funktionen von ICQ nutzen zu können, ist meistens eine Autorisierung erforderlich. Aber nicht immer. Wie Diagramm 16 zeigt, ist nur bei knapp über der Hälfte aller Kontakte (56%) eine Autorisierung nötig. Gut erkennbar ist eine sprunghafte Veränderung ab dem UIN-Bereich 200000000. Entweder wurde hier die Standardeinstellung zur Autorisierung verändert, oder das Nutzerverhalten hat sich geändert.
Im Vergleich zu Russland verlangt in Deutschland ein deutlich höherer Anteil der Nutzer eine Autorisierung.


Genutzte ICQ-Clients
ICQ kämpft seit dem Aufkommen alternativer Clients stets um die Nutzer für den offiziellen Client, welchen weltweit nicht einmal die Hälfte (43,50%) aller ICQ-User nutzen. Gerade in Russland, dem Land mit den meisten ICQ-Nutzern, wird der offizielle Client nur von ungefähr einem Viertel verwendet. Der alternative Client QIP ist hier besonders stark vertreten. Nur in Deutschland ist der Anteil der ICQ eigenen Software sehr hoch (81,54%). Der Rest verteilt sich relativ gleichmäßig auf die vier größten Drittanbieter QIP, Miranda IM, Trillian und Pidgin.
Diagram 19: ICQ Clients
Diagram 19: ICQ Clients
Diagram 20: ICQ Clients DE
Diagram 20: ICQ Clients DE



Kontaktliste: Limits

Diagram 22: ICQ Limits
Diagram 22: ICQ Limits

Das folgende Diagramm zeigt die „Grenzen“ rund um die Kontaktliste. Im Allgemeinen haben sich die die Grenzen in den letzten Jahren kontinuierlich nach oben verschoben. Ein großer Sprung ist bei den maximalen Einträgen in der Ignorieren-Liste zu verzeichnen. Ein Zusammenhang mit dem erhöhten Spam-Aufkommen wäre denkbar.
Aktuell können maximal 1500 Kontakte (verteilt auf mehrere Gruppen) in die eigene Kontaktliste aufgenommen werden. Pro Gruppe sind 600 Kontakte möglich.

Erklärung der Begriffe:
Watchers: Maximale Anzahl an Beobachtern einer UIN.
Ignore List: Maximale Anzahl der Einträge in der Ignorieren-Liste.
Groups: Maximale Anzahl der Gruppen in der Kontaktliste.
Visible/Invisible List: Maximum für Einträge in den Sichtbar-/Unsichtbar-Listen.
Contacts: Anzahl der maximalen Kontakte in der eigenen Kontaktliste.


Sicherheit & Spam
Wie bereits zu Beginn erwähnt, gilt es in Russland schon fast als Tradition, eine kurze oder „schöne“ ICQ-Nummer zu besitzen. Aus diesem Grund werden Besitzer solcher UINs regelmäßig Opfer von Account-Diebstählen. Aber auch andere Nutzer bleiben davon nicht verschont. Für das Verteilen von Spam beispielsweise, was im ICQ-Netz stark betrieben wird, eignen sich aktive Accounts sehr gut. Dabei spielt die ICQ-Nummer keine Rolle. Denn auf einen Link, der durch einen Freund versendet wurde, klickt man verständlicherweise dann doch eher, als wenn er von einem Fremden kommt.
Viele Nutzer machen es den „Hackern“ aber auch zu leicht. Natürlich ist die Sicherheit in puncto Passwort bei ICQ durch die momentan maximale Anzahl von 8 Zeichen begrenzt, doch das sollte im Normalfall ausreichen. Erschreckend ist jedoch die Fahrlässigkeit vieler Nutzer bei der Passwortwahl. Nicht nur dass sich oft mit 6 und weniger Zeichen begnügt wird, nein, so verwenden im Schnitt 10% ein einfaches Wort aus dem Wörterbuch (sehr beliebt sind „passwort“, „password“, „schatz“, „12345678“ und Varianten davon) oder einen Namen. Auch vor dem eigenen Namen wird bei der Passwortwahl nicht Halt gemacht. Das bedeutet, von den genannten 10% wählt wiederum ungefähr jeder zehnte ein Passwort mit direktem Bezug zur eigenen Person oder sogar zum eigenen Profil (Vor-/Nachname sowie Geburtsdatum).
Beim Spam über das ICQ-Netzwerk werden die Nutzer vor allem durch regelmäßig eingehende Nachrichten und Anfragen genervt und weniger durch den Inhalt dieser Nachrichten, da diese entweder wegen der enthaltenen Links gefiltert werden oder auf Russisch sind. Lange wurde von seitens ICQ nichts oder nur wenig dagegen unternommen. Erst in den letzten Monaten gelang es, das Spam-Aufkommen ein wenig einzudämmen. Häufige Nicknames der Spam-Accounts sind Sophia1802, Natha_1983, Natha_2399 und Natha_2019, welche einigen ICQ-Nutzern bekannt vorkommen dürften. Bei über 39.000 Accounts nach diesem Schema, wird es schwer sie alle in die Ignorieren-Liste zu bekommen. Eine serverseitige Deaktivierung wäre sicher kein Problem gewesen, hätte man sich nur mal Zeit dafür genommen. Die vollständige Liste der genannten Spam-Accounts kann im letzten Abschnitt heruntergeladen werden.


Fazit
Insgesamt sieht die Zukunft für ICQ eher verhalten aus. Das wurde auch am Verkaufswert von “nur” 187,5 Mio. US-$
Sample SQL Query
Sample SQL Query

deutlich. Ein möglicher Grund für den starken Nutzerrückgang könnte der Wechsel vieler Nutzer zur Konkurrenz (z.B. MSN/WLM oder Skype) sein. Im Bereich Internet- bzw. Audio/Video-Telefonie, konnte sich ICQ im Gegensatz zu Skype nie richtig durchsetzen. Ebenso tragen soziale Netzwerke wie beispielsweise Facebook weiter zu einem Rückgang der ICQ-Nutzer bei, denn oft ist bereits eine Chat-Funktion vorhanden und somit kein extra Programm mehr nötig. Aber auch die mittlerweile weit verbreiteten Smartphones mit ihren zahlreichen Apps zur Kommunikation tragen ihren Anteil dazu bei.
Dennoch ist die Mail.ru Group bemüht, dem entgegen zu wirken. Als gute Ansätze wären hier die Integration des Facebook-Chats, die Verbindung mit Google Talk und die Genehmigung alternativer Clients zu nennen. Auch wird vermehrt auf die Wünsche der Nutzer eingegangen, was aber eigentlich selbstverständlich sein sollte.


Downloads
Die Statistiken mit allen Zahlen und weiteren Details sowie die Liste der Spam-Accounts können hier als Excel-Dokument (Office 2010) heruntergeladen werden:

ICQ_Statistics.xlsx (962 KB)

ICQ_Spam_Natha_Sophia.xlsx (1,65 MB)


Quellen: ICQ Server Database, ICQ Internal Reports, General Internet

Stand: Juni 2011


]]>
http://blog.murb.com/2011/10/01/icq-stats/feed/
AJAX-Login validation in PHP via Facebox-Lightbox http://blog.murb.com/2010/05/06/ajax-login-validation-in-php-via-facebox-lightbox/ http://blog.murb.com/2010/05/06/ajax-login-validation-in-php-via-facebox-lightbox/#comments Thu, 06 May 2010 17:11:42 +0000 Richard http://blog.murb.com/?p=354 Nachdem ich für ein Projekt einen Login in einer Lightbox, die mittels Facebox umgesetzt wurde, realisieren sollte hat mich das mal wieder einen halben Tag gekostet , obwohl es doch nur ein kleiner Login ist. Aber alles der Reihe nach.
Die Lightboxfunktion mittels Facebox war bereits erfoglreich umgesetzt und funktionstüchtig. Fehlte also nur noch der Login ansich. Das Formular war schnell gebastelt. Doch dann gab es ein Problem: Die POST-Übermittlung der Formulareingaben nach dem Betätigen des Submit-Buttons schloss die Lightbox. Ich wollte den Loginvorang jedoch innerhalb der Lightbox mittels AJAX ablaufen lassen - also mit “asynchroner” Eingabeprüfung.

Für das Vorhaben mussten im Groben Lösungen zu zwei Problemen her:

1. Der Login sollte in der Lightbox stattfinden

2. Die Validierung der Userdaten sollte per AJAX ohne Seitenreload geschehen

Für Problem 1 wurde ich hier fündig: Jquery Ajax Contact Form in Facebox. Den Download dazu gibt es hier.

Das zweite Problem konnte ich hiermit lösen: Ajax login validation system in PHP using jQuery. Ein Dank an die Autoren an dieser Stelle.

Wie beides zusammen aussieht, kann man in meiner mühevoll erstellten Live Demo bestaunen. ;-)
Rein geht’s mit time und flies.

Der Code kann auf Wunsch hier gedownloadet werden. Für den Datenbankzugriff muss die Datei “includes/db_connection.php” angepasst werden. Für den Import in die Datenbank liegt ein Dump bei. Viel Spaß!

]]>
http://blog.murb.com/2010/05/06/ajax-login-validation-in-php-via-facebox-lightbox/feed/
Password Generator v.2.0 http://blog.murb.com/2009/01/07/password-generator-v20/ http://blog.murb.com/2009/01/07/password-generator-v20/#comments Tue, 06 Jan 2009 23:21:11 +0000 Richard http://blog.murb.com/?p=316

Neues Jahr, neue Anwendung. Naja, nicht ganz. Denn streng genommen ist sie zu sehr großen Teilen im vergangenen Jahr entstanden. Aber viel wichtiger ist, dass es meine erste, wenn auch kleine WPF-Anwendung überhaupt ist.

Der Password Generator existierte bereits als Download auf unserer Webseite, jedoch mit weniger Funktionsumfang. Dies sollte sich mit Version 2.0 ändern und stellte damit eine prima Möglichkeit dar, sich gleichzeitig besser in die WPF-Welt hinein zu arbeiten.

Sehen wir uns die Anwendung etwas genauer an.

Password Generator Main

Mit den neuen Funktionen wurde auch ein eigenes Fensterdesign entworfen (Expression Blend lässt grüßen). Auf der Hauptseite “Generator” können allgemeine Einstellungen wie Zeichenvorrat und Erstellungsoptionen vorgenommen werden. Aktiviert man “Sonderzeichen”, so kann man zwischen normal, alle und eigene wählen. Dabei enthalten die Optionen jeweils folgende Zeichen:

normal:  !$%&()§=?@#-_
alle:  °^!”§$%&/{([)]=}?\´`*+~’#-_.:,;µ@€|<>
eigene:  Können unter Einstellungen festgelegt werden.

Die Einstellung “Gleiche Zeichen vermeiden” bewirkt, was sie aussagt: Es wird jedes Zeichen nur einmalig verwendet. Das schränkt natürlich die Passwortlänge auf den Zeichenpool ein. Die restlichen Punkte sollten selbsterklärend sein, denke ich. Was es mit dem Hinweis “Zahlen werden mit Faktor 3 bevorzugt!” auf sich hat, wird klar, wenn wir uns die Einstellungen ansehen:

Password Generator Settings

Neben dem Zeichenpool und den eigenen Sonderzeichen kann ebenso festgelegt werden, ob Zahlen bevorzugt werden. Der Grund hierfür ist, dass jede Zahl nur einmal im normalen Zeichenvorrat vorkommt und damit die Zahlen gerade einmal einen Anteil von 13% ausmachen. Ich bevorzuge allerdings Passwörter mit einer gewissen Mindestmenge an Zahlen. Vielleicht geht es anderen genauso. ;-) Aktiviert man den eigenen Zeichenpool, fällt sowohl die festgelegte Zahlenbevorzugung als auch die festgelegten Sonderzeichen weg, da die Zeichen für das Passwort ausschließlich aus dem eigenen Zeichenpool entnommen werden.

Kommen wir zum Punkt “Die letzten 10 Passwörter speichern”. Diese Option dient lediglich der Aufzeichnung der letzten Passwörter (bspw. zu Verwaltungszwecken) und ist mit Vorsicht zu genießen, da die Passwörter unverschlüsselt und zudem in einer nicht gerade getarnten Datei Namens “passwords.log” gespeichert werden. Also nur verwenden, wenn nötig!

Soweit zur Programmfunktion.

Die Anwendung muss nicht installiert werden! Einfach downloaden und los geht’s!
Allerdings wird für die Ausführung das .NET Framework 3.0 oder höher benötigt, da WPF-Anwendungen ein Teil davon sind. In Vista ist dies bereits enthalten. Für Windows XP kann es ab Service Pack 2 problemlos nachinstalliert werden.

Download Password Generator v.2.0

Für Fragen und Anregungen verweise ich auf unser Forum. Viel Spaß beim Passwörter generieren! :-)

]]>
http://blog.murb.com/2009/01/07/password-generator-v20/feed/
WPF: Anwendung mit Systray-Icon ausstatten http://blog.murb.com/2008/12/25/wpf-anwendung-mit-systray-icon-ausstatten/ http://blog.murb.com/2008/12/25/wpf-anwendung-mit-systray-icon-ausstatten/#comments Thu, 25 Dec 2008 19:02:27 +0000 Richard http://blog.murb.com/?p=253

Je nach Anwendung können Systray-Icons eine sehr bequeme Art der Steuerung darstellen. Daher dachte ich mir “bauste dir eben auch so ein Ding in dein Tool ein”. Fragt sich nur, wie man das am geschicktesten realisiert. Vermutlich könnte man das mit reinem XAML irgendwie lösen. Das sehe ich allerdings nicht als die optimale Lösung an, da mir das in dieser Hinsicht zu unflexibel ist. Also muss C# mit Windows.Forms herhalten.

Ein NotifyIcon ist schnell erzeugt und betitelt. Doch wie sieht es mit Icon und Kontextmenü aus? Das erfordert ein paar mehr Zeilen Code, erst recht, wenn man ein bereits eingebundenes Icon (bspw. das der Anwendung selbst) verwenden möchte. Ich gehe hierbei auf die Situation ein, dass sich das Icon in den eigenen Ressourcen von Expression Blend befindet.

Fangen wir ganz vorne an. Ein NotifyIcon lässt sich mit diesem Code erzeugen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
private static NotifyIcon notifyIcon = new NotifyIcon();
 
public MainWindow()
{
    // info when mouse hits the icon
    notifyIcon.Text = "Programmtitel";
 
    // double click: bring application back to front
    notifyIcon.MouseDoubleClick += new
        System.Windows.Forms.MouseEventHandler(openFromTray);
 
    // create context menu and add items
    System.Windows.Forms.ContextMenu myContextMenu = new
        System.Windows.Forms.ContextMenu();
 
    myContextMenu.MenuItems.Add(0, new System.Windows.Forms.MenuItem("Show",
        new EventHandler(openFromTray)));
    myContextMenu.MenuItems.Add(1, new System.Windows.Forms.MenuItem("Exit",
        new EventHandler(systrayExit)));
 
    notifyIcon.ContextMenu = myContextMenu;
}

Die beiden Funktionen zum Wiederherstellen oder Schließen der Anwendung könnten beispielsweise so aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
private void openFromTray(object sender, EventArgs e)
{
    notifyIcon.Visible = false;
    this.ShowInTaskbar = true;
    this.Show();
    this.WindowState = WindowState.Normal;
}
protected void systrayExit(object sender, EventArgs e)
{
    notifyIcon.Visible = false;
    this.Close();
}

Damit das Ganze überhaupt funktioniert, benötigen wir hierzu den Namespace System.Windows.Forms, da sowohl die Klasse ContextMenu als auch die Klasse NotifyIcon von Windows.Forms stammen. Dies lässt sich mit der Zeile using System.Windows.Forms; am Anfang des Dokuments erledigen. Erhält man die Fehlermeldung, dass Forms im Namespace System.Windows nicht vorhanden ist, muss der nötige Verweis erst dem Projekt hinzugefügt werden:

Verweis hinzufügen 1 Verweis hinzufügen 2

Sollte der Compiler das Erzeugen des NotifyIcon nicht schlucken muss NotifyIcon zu System.Windows.Forms.NotifyIcon erweitert werden.

Soweit so gut, jetzt braucht es nur noch ein passendes Icon. Eigentlich ist die Sache ganz einfach:

 1 notifyIcon.Icon = new Icon("Icon.ico");

Schwieriger wird es erst, wenn ich mein Icon aus den Ressourcen, die ich in Blend eingerichtet habe herausnehmen möchte.

Blend Resources

Gehen wir von der Situation wie im Bild zu sehen aus. Das Icon befindet sich demnach im Ordner "Images". Um dieses Icon zu verwenden benötigen wir hierfür einen Ressourcenstreamer , der auf diese Ressourcen zugreifen kann, um sie gefügig zu machen.

 1
 2
 3
 4
 5
 6
 7
try
{
    Stream iconStream = System.Windows.Application.GetResourceStream(new
        Uri("Images/Icon.ico", UriKind.Relative)).Stream;
    notifyIcon.Icon = new System.Drawing.Icon(iconStream);
}
catch { }

Der try-catch-Block empfiehlt sich hier - wie eigentlich immer bei Zugriff auf Dateien. Für das Erzeugen des Icons aus dem Stream iconStream muss ggf. wieder ein Verweis hinzugefügt werden (siehe oben). Diesmal System.Drawing.

Systray-Icon

Wie erwünscht, erscheint das Icon und das Kontextmenü. Ziel erreicht. :-)

Damit wäre ich am Ende. Vielleicht konnte ich dem einen oder anderen helfen. Fällt mir noch etwas ein, werde ich den Artikel erweitern. Verbesserungsvorschläge sind wie immer willkommen.

Fin.

]]>
http://blog.murb.com/2008/12/25/wpf-anwendung-mit-systray-icon-ausstatten/feed/
CopySourceAsHtml für deutsches Visual Studio http://blog.murb.com/2008/12/25/copysourceashtml-fur-deutsches-visual-studio/ http://blog.murb.com/2008/12/25/copysourceashtml-fur-deutsches-visual-studio/#comments Thu, 25 Dec 2008 17:56:49 +0000 Richard http://blog.murb.com/?p=283 Wie hier berichtet, hatte ich bereits ein Plugin für das Visual Studio gefunden, um Source Code mit gewünschtem Syntax Highlighting im HTML-Format zu kopieren. Doch leider musste ich nun feststellen, dass CopySourceAsHtml nur für das englischsprachige Visual Studio einwandfrei funktioniert.

Bei der deutschen Version kommt nach dem Start des Programms folgender Fehler:
“CopySourceAsHtml caught the following exception: System.ArgumentException: Der Wert liegt außerhalb des erwarteten Bereichs.” […]

CopySourceAsHtml Error

Eine Google-Suche brachte mich zu diesem Thread. Wie dort zu lesen, liegt es an der deutschen Version von Visual Studio. Der Lösungsvorschlag, “Edit” in “Bearbeiten” umzubenennen und das Plugin erneut zu kompilieren hat funktioniert!
Leider findet sich auf der Herstellerseite von CopySourceAsHtml kein Quellcode zur aktuellesten Version 3.0. Daher musste die ältere Version 2.0 herhalten, die man mit einem kleinen Trick auch unter Visual Studio 2008 verwenden kann: Man ändert in der AddIn-Datei die Versionsnummer von 8.0 auf 9.0.

Um Suchenden die Arbeit zu ersparen stelle ich hier meine kompilierten Versionen für die deutsche Version zur Verfügung.

Download CopySourceAsHtml für deutsches Visual Studio 2005
Download CopySourceAsHtml für deutsches Visual Studio 2008

Die Dateien müssen in das Addins-Verzeichnis kopiert werden. Es findet sich bei Windows XP unter C:\Dokumente und Einstellungen\<Benutzername>\Eigene Dateien\Visual Studio 2008\Addins
und bei Vista unter C:\Benutzer\< Benutzername >\Dokumente\Visual Studio 2008\Addins
Sollte der Ordner Addins nicht existieren, muss dieser erstellt werden. Anschließend die Dateien hineinkopieren und Visual Studio starten. Fertig!

]]>
http://blog.murb.com/2008/12/25/copysourceashtml-fur-deutsches-visual-studio/feed/
WordPress-Update auf v.2.7 http://blog.murb.com/2008/12/23/wordpress-update-auf-version-27/ http://blog.murb.com/2008/12/23/wordpress-update-auf-version-27/#comments Tue, 23 Dec 2008 15:03:05 +0000 Richard http://blog.murb.com/?p=245 Kaum ist man eine Weile nicht mehr eingeloggt, schon gibt es wieder eine neue Version von WordPress. Version 2.7 sei verfügbar macht ein gelber Balken mich darauf aufmerksam. Ich solle doch bitte updaten.
Kein Problem. Dem Link folgen und das Archiv downloaden. Brav öffne ich die liesmich.html um mich über weitere Schritte des Updates zu informieren. Wie fast zu erwarten heißt gleich Punkt 1 der Aktualisierungsanleitung: “Löschen Sie alle WordPress-Dateien und -Ordner außer wp-config.php und wp-content.”.

Dumme Sache, denn in meiner Anpassungs- und Umgestaltungswut nach Installation der ersten WordPress-Version (2.65) hatte ich natürlich in einigen Dateien herumgepfuscht und diese durfte ich nun finden und den geänderten Code übertragen. Na prima! Wie soll ich jetzt die ganzen Dateien finden, zumal mir nach einem Backup der Webspacedateien alle Dateien mit gleichem Datum vorliegen?

Die Lösung lautet UltraCompare, ein mittlerweile sehr ausgereiftes Unterprogramm von UltraEdit. Dort wählte ich zuerst ein Verzeichnisvergleich zwischen meinem aktuellen Webspacestand und der nochmal neu entpackten WordPress Version 2.65 . Für meinen Fall musste ich in der Konfiguration unter “Optionen zum Ignorieren > Ordner” noch einen Haken bei “Unterschiede zwischen Dateizeiten ignorieren” setzen und das Programm tat das, was ich wollte. Nach dem Herausfiltern der geänderten Dateien konnte ich mittels Dateivergleich (siehe Bild) die geänderten Codezeilen kopieren.

UltraCompare

Damit war die Sache erledigt! *freu*

]]>
http://blog.murb.com/2008/12/23/wordpress-update-auf-version-27/feed/
Source Code in WordPress: C#, XAML, Java http://blog.murb.com/2008/12/04/source-code-in-wordpress-c-xaml-java/ http://blog.murb.com/2008/12/04/source-code-in-wordpress-c-xaml-java/#comments Thu, 04 Dec 2008 22:07:12 +0000 Richard http://blog.murb.com/?p=12 Endlich hat man es geschafft, den Blog zum Laufen zu bringen, schon steht man vor dem nächsten Problem: Wie bekomme ich eine anständige Codeumgebung mit sprachenspezifischem Syntax-Highlighting in einen Artikel?
Da ich es auf vielen Blogs bereits gesehen hatte, nahm ich an, es sei standardmäßig in WordPress integriert. Dem ist leider nicht so.

Es ist also mal wieder Tüfteln angesagt. Mittels zusätzlicher Programme und Plugins habe ich mir meine eigenen angepassten Umgebungen gebastelt.

Da ich mich in letzter Zeit viel mit der Programmierung und Gestaltung von WPF-Anwendungen beschäftigt habe, gilt mein Interesse v.a. dem C# sowie XAML Source Code.

Für den C# Source Code bietet sich ein Plugin für Visual Studio 2008 an: CopySourceAsHtml
Das Plugin einfach installieren, Visual Studio starten und schon steht einem der Export in HTML per Mausklick zur Verfügung. Gewünschten Code markieren, Rechtsklick und “Copy As HTML…” wählen.

 

Das Ergebnis kann sich sehen lassen (C#-Code Beispiel):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void HandleRequestNavigate(object sender, RoutedEventArgs e)
{
    try
    {
        string navigateUri = "about:blank";
        if (sender.Equals(this.email))
        {
            navigateUri = email.NavigateUri.ToString();
        }
        else
        {
            navigateUri = website.NavigateUri.ToString();
        }
 
        // if the URI somehow came from an untrusted source, make sure to
        // validate it before calling Process.Start(), e.g. check to see
        // the scheme is HTTP, etc.
        Process.Start(new ProcessStartInfo(navigateUri));
        e.Handled = true;
    }
    catch (Exception urlError)
    {
        Functions.logError(urlError.ToString());
    }
}

Die richtige Kolorierung und Formatierung des Codes hat das Plugin übernommen. Jedoch fehlte dem Ganzen eine Umgebung, die den Code vom restlichen Text hervorhebt. Hierfür habe ich mir selbst eine Box gebaut, in der ich den konvertieren Code hineinkopiere.
Aber Achtung: Würde man den Output von CopySourceAsHtml direkt verwenden, so würde man beim Kopieren aus dem Artikel erstens die Zeilennummern mitkopieren und zudem zwischen jeder Zeile eine Leerzeile haben. Dies musste ich ebenfalls per Hand anpassen: Zeilennummern in eine extra Spalte packen und pre-Tags entfernen.

Kommen wir nun zu XAML. Hier arbeite ich normalerweise mit Expression Blend und hatte mir natürlich auch ein solches Plugin wie für Visual Studio gewünscht. Leider konnte ich auf die Schnelle nichts finden und musste mich mit einem zusätzlichen Programm begnügen: CarlosAg.CodeColorizer
Nachdem man den Codeausschnitt eingefügt und als Sprache “Markup Code” ausgewählt hat, spuckt einem das Programm mit “Colorize” das Ergebnis aus.
Noch ein paar kleine Anpassungen der Ausgabe (Anführungszeichen anpassen) und schon kann ich es problemlos in meiner zuvor gebastelten Box einfügen. Et voilà, c’est ça:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21

<Grid x:Name="LayoutRoot">
    
<TextBlock x:Name="attentionHeader"
        Margin
="60,10,8,41" TextWrapping="Wrap"
        HorizontalAlignment
="Left" Foreground="#FF3B5A82"
        VerticalAlignment
="Top" Text="Hinweis" FontWeight="Bold"/>
 
    <
TextBlock x:Name="attentionText"
      Margin
="60,28,0,35" TextWrapping="Wrap"
        HorizontalAlignment
="Left" Foreground="#FF3B5A82" Width="276"
        Text
="Es wurden keine Zeichen gewählt. Bitte eine Auswahl treffen!"/>
 
    <
Button Click="closeMsgBox"
        Margin
="0,0,0,8" Content="Alles klar!"
        HorizontalAlignment
="Center" VerticalAlignment="Bottom"
        Height
="21" Width="80"/>
 
    <
Image HorizontalAlignment="Left"
        Margin
="5,5,0,0" Width="48"
        Source
="..\Images\warning.gif" Stretch="Fill"
        VerticalAlignment
="Top" Height="48"/>
</
Grid>

Nachdem das Bisherige so gut funktioniert hatte, dachte ich mir, wie wäre es mit ein wenig Java Code zum Abschluss. Zum Programmieren mit Java bin ich die Entwicklungsumgebung Eclipse gewohnt, für die es unzählige Plugins gibt. Als ich allerdings nach wenigen Minuten über ein entsprechendes Programm, genannt Java2Html Converter gestolpert bin, habe ich die Suche nach einem Plugin vorerst eingestellt.

Der Output des Programms liefert mir genau das, was ich haben wollte - zumindest auf den ersten Blick. Ganz so einfach war es dann leider doch nicht, da mir der FireFox einen Strich durch die Rechnung machte: Die Höhe von Zeilen mit fett gedruckten Wörtern wich bei Schriftgröße 12px von denen ohne fett gedruckter Wörter ab. Die Lösung war eine schrittweise Vergrößerung der Schrift. Mit 12.5px fand ich schließlich ein passendes Maß.
Damit war es leider noch immer nicht getan. So besitzt der FF im Gegensatz zum IE bei der Schriftart “Courier New” einen höheren (horizontalen) Zeichenabstand. Dies lies sich mit CSS leider nicht korrigieren (wenn doch, bitte melden!). Wie im folgenden Codeausschnitt zu sehen, musste ich die erste Zeile umbrechen, da sie im FF nicht in eine Zeile passen würde. Im IE dagegen schon.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
public static String replace(String source, String pattern,
        String replace) {

    if (source != null) {
        final int len = pattern.length();
        StringBuffer sb = new StringBuffer();
        int found = -1;
        int start = 0;

        while((found = source.indexOf(pattern, start)) != -1) {
            sb.append(source.substring(start, found));
            sb.append(replace);
            start = found + len;
        }

        sb.append(source.substring(start));

        return sb.toString();
    }
    else return "";
}

Das war’s soweit. Vielleicht nehme ich mir noch weitere Sprachen vor… naja, spätestens dann, wenn ich sie hier brauche. ;-)
Für die Automatisierung der Ergebnislieferung der oben aufgeführten Sprachen, wie ich es möchte, liese sich bestimmt ein kleines Tool schreiben. Mal sehen…

]]>
http://blog.murb.com/2008/12/04/source-code-in-wordpress-c-xaml-java/feed/
…und ab geht die Post! http://blog.murb.com/2008/12/02/und-ab-geht-die-post/ http://blog.murb.com/2008/12/02/und-ab-geht-die-post/#comments Tue, 02 Dec 2008 20:00:43 +0000 Richard http://blog.murb.com/?p=1 Blog hier, Blog da. Gibt es noch jemanden, der nicht bloggt?

In letzter Zeit bin ich während der Suche nach Lösungen zu meinen meist programmiertechnischen Problemen nicht selten über unzählige Blogs mit Lösungsvorschlägen gestolpert. Als ich mir am Ende eines solchen Suchmarathons meinen eigenen Lösungsweg zusammen geschustert hatte, konnte ich diesen leider keinem hinterlassen. So entstand die Idee, doch selbst einen Blog ins Leben zu rufen. Zudem hatte mich schon länger interessiert, wie so ein Blog genau funktioniert. ;-)

Also denn, WordPress installieren und loslegen! Naja, nicht ganz… zu einem eigenen Blog gehört natürlich auch ein eigenes Design. Nach dem Durchwühlen ettlicher Themenseiten stand die Wahl fest. Kleinere Änderungen an Design und Darstellung waren noch nötig, dann war ich zufrieden. Endlich ging’s an den Inhalt…
Nein, noch immer nicht. Es taucht sofort das nächste Problem auf: Wie bekomme ich in den Artikel eine vernünftige “Codeumgebung” hinein? Am besten mit toller Syntax-Highlighting? Mehr dazu hier.

Wie es hier genau weiter geht oder ob mir nicht nach wenige Tagen die Lust vergeht, wird sich zeigen…

Servus

]]>
http://blog.murb.com/2008/12/02/und-ab-geht-die-post/feed/