Eventlog Einträge mit der Ereigniskennung 675 im Sicherheit Ereignisprotokoll

Auf meinem Windows Server 2003 R2 haben sich in der letzten Zeit Fehlereinträge im Eventlog für die Sicherheit angehäuft. Und das bis zu 200 Einträge und mehr täglich.

Bei der Analyse stieß ich hauptsächlich auf die Ereigniskennung 675 mit dem Fehlercode 0x19. Meistens traten diese Eventlog Einträge im Viererpack auf, immer wenn ein Benutzer sich mit seinem PC im Netz angemeldet hat. Jeweils erschienen dann Einträge für den PC und den Benutzer, wie die nachfolgenden Beispiele beiden Beispiele aus dem Ereignisprotokoll meines Servers zeigen:

Ereignistyp: Fehlerüberw.
Ereignisquelle: Security
Ereigniskategorie: Kontoanmeldung
Ereigniskennung: 675
Datum: 21.04.2010
Zeit: 10:48:33
Benutzer: NT-AUTORITÄT\SYSTEM
Computer: SERVER
Beschreibung:
Fehlgeschlagene Vorbestätigung:
  Benutzername: COMPUTER$
  Benutzerkennung: DOMAIN\COMPUTER$
  Dienstname: krbtgt/domain.loc
  Vorauthentifizierungstyp: 0x0
  Fehlercode: 0x19
  Clientadresse: 192.168.16.150

sowie:

Ereignistyp: Fehlerüberw.
Ereignisquelle: Security
Ereigniskategorie: Kontoanmeldung
Ereigniskennung: 675
Datum: 21.04.2010
Zeit: 10:48:52
Benutzer: NT-AUTORITÄT\SYSTEM
Computer: SERVER
Beschreibung:
Fehlgeschlagene Vorbestätigung:
  Benutzername: Martin
  Benutzerkennung: DOMAIN\Martin
  Dienstname: krbtgt/DOMAIN
  Vorauthentifizierungstyp: 0x0
  Fehlercode: 0x19
  Clientadresse: 192.168.16.150

Nach einiger Recherche kam ich dahinter, dass dies nur Arbeitsplätze betraf, die Windows Vista oder Windows 7 einsetzten. Rechner mit Windows XP oder Windows 2003 Server tauchten hier nie auf.

Ein wenig weiteres Forschen brachte mich dann auf die Ursache:

Diese Event Id wird ausgegeben wenn, der Domänencontroller den Kerberos-Authentifizierungsversuch eines Rechners nicht versteht. Das nur Windows Vista und Windows 7 Rechner als Verursacher auftauchen liegt daran, dass mit Windows Vista AES (Advanced Encryption Standard) als Verschlüsselungsverfahren von den Clients bevorzugt wird.
Leider kennt aber der Windows 2003 Domänen-Controller dieses Verfahren noch nicht. Weil es aber einen Fallback auf das RC4-HMAC Verfahren gibt merkt der Anwender nichts davon.

Windows Systeme unterstützen die folgenden Verschlüsselungsverfahren für Kerberos:

  • DES-CBC-CRC (Registrycode 0x1)
  • DES-CBC-MD5 (Registrycode 0x3)
  • RC4-HMAC (Registrycode 0x17)
  • AES (Registrycode 0x12) Wird seit Windows Server 2008 unterstützt (d.h. auch Vista und Windows 7)

Die Standard Preauthentifizierung erfolgt bei Windows 2000, Windows Server 2003, Windows XP immer RC4-HMAC.

Die Lösung ist ein kleiner Workaround in dem man einfach dem Vista oder Windows 7 Rechner mitteilt er soll doch einfach auch die RC4-HMAC Verschlüsselung wählen. Das verhindert dann die Nutzung von AES  und die Fehler sind weg, die durch den vergeblichen AES Anmeldeversuch entstehen.
Das erreicht man in dem man den Code 0x17 (siehe Aufzählung oben) für den DefaultEncryptionType einträgt. Nachfolgend der entsprechende Auszug aus der REG-Datei, die ich auf die Clients verteilt habe.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters]
"DefaultEncryptionType"=dword:00000017

Oder in anderen Worten gesagt:

  • Man startet Regedit an den betroffenen Clients
  • Man wählt den Ast HKLM\System\CurrentControlSet\Control\LSA\Kerberos\Parameters
  • Dort erzeugt man einen DWORD Wert mit Namen DefaultEncryptionType
  • In diesen Wert setzt man 0x17 (bzw. 23 dezimal) ein

Nun ist Ruhe mit diesem Fehler 🙂

Weitere Links zum Thema Kerberos hier:
http://technet.microsoft.com/en-us/library/cc738673(WS.10).aspx
http://tools.ietf.org/html/rfc4757

Microsoft schließt die nntp://microsoft.public.* Gruppen

Seit Jahren haben sich MVPs dafür eingesetzt, dass NNTP Gruppen weiter ein integraler Bestandteil der Community Szene bei Microsoft bleiben. Das Reden und diskutieren hat nun ein Ende. Microsoft schafft Fakten.
Siehe
http://www.microsoft.com/communities/newsgroups/default.mspx
http://news.cnet.com/8301-13860_3-20004109-56.htm

Ab heute wird Microsoft in allen NNTP Gruppen bekanntgeben, dass diese Gruppen nach und nach abgeschaltet werden. Dieses Abschalten wird im Juni beginnen mit Gruppen, die wenig Traffic haben und im Herbst diesen Jahres soll dann die letzte Gruppe vom Netz gehen. Das heißt auch, dass im Community Bereich der Microsoft Homepage die Spiegelung der NNTP Gruppen beendet wird. http://www.microsoft.com/germany/community/developer/newsgroups.mspx.

Begründet wird dies damit, dass die Microsoft Community durch die Zentralisierung auf die Microsoft Webforen weiter gestärkt werden soll. Das Ganze wird weiter begründet mit der Möglichkeit einer effektiveren Suche, der besseren Archivierung, größerer Sicherheit und weniger Spam.

Verstehen kann ich diese ganze Argumentation nicht. Microsoft selbst hat es versäumt die NNTP Gruppen stärker zu umwerben und auch direkter auf diese effektiven Gruppen hinzuweisen. Suchen konnte man immer schon, wenn man es wollte und Spam war eher die Ausnahme als die Regel in den NNTP Gruppen. Manche Stimmen mögen hier eher anführen, dass Microsoft über diese Foren einfach keine Kontrolle hatte und das dies einer der wesentlichen Gründe für die Abschaffung ist. Ich befürchte dies leider auch. „Zensur“ oder „Kontrolle“ ist in den hauseigenen Webforen eben viel einfacher als im „freien“ Usenet.

Microsoft hat IMHO alle Vorschläge der MVPs zu einer Stärkung dieser Community ignoriert und ist seine eigenen Wege gegangen und stellt nun leider Ihre eigene Community vor vollendete Tastsachen. Das andere Zeiten andere Techniken nötig machen oder eben auch hervorbringen ist eine Sache, aber dieses Für&Wider will ich hier jetzt gar nicht mehr diskutieren…

Das der Traffic die letzten Jahre abgenommen hat war klar zu sehen, ist aber eben auch Schuld von Microsoft selbst, weil keine Werbung gemacht wurde. Für meine „Lieblingsgruppe“ 😉 nntp://microsoft.public.de.vc war dies nicht unbedingt schlecht. Es blieb immer ein guter harter Kern an Regulars, der für eine gleichbleibend hohe Qualität sorgte. Jeder der diese Gruppe besuchte konnte mit einer qualitativ hochwertigen Antwort rechnen.

Ich kann nicht für alle Produktbereiche und alle Foren sprechen, aber ich denke, dass ich einen guten Überblick über die technischen Foren für C/C++ und WinAPI habe (sowohl in Englisch als auch in Deutsch). So möchte ich auch speziell zu der Situation dieser Foren hier Stellung nehmen. Als Regular seit über 13 Jahren in nntp://microsoft.public.de.vc , Moderator für die MFC und WinAPI Foren im deutschen C++ Forum (http://www.c-plusplus.de/foren) und Moderator in den C++ und Windows Entwicklungsbereichen der MSDN (http://social.msdn.microsoft.com/Forums/de-de/categories/) kann ich mir wahrscheinlich auch  ein Urteil erlauben. 😉

Im Vergleich zu allem, was ich in den letzten 12 Jahren an Community erlebt habe, ist keines der Webforen jemals an die hohe Qualität der Microsoft NNTP Foren herangekommen, zumindest was den Bereich Technik und Entwicklung betrifft. Dies gilt meines Erachtens sowohl für die deutschen, als auch englischen Foren. Dies habe ich so auch als Stellungnahme von anderen MVPs anderer Produktbereiche wahrgenommen. Man kann nur hoffen, dass sich das in Zukunft ändert. Das dies ein Automatismus wird wage ich stark zu bezweifeln.

Mit dem Launch von VS-2005 wurden auch deutsche Webforen eingeführt, die aber definitiv als Flop endeten. Im März letzten Jahres gab es dann einen Relaunch auf breiter Basis und mit mehr Engagement von Microsoft und einem vernünftigen Angebot von Gruppen gegenüber dem Start in 2005. Ich habe dazu damals entsprechend berichtet.
Das Microsoft hier weitaus mehr investierte war sofort auch daran zu erkennen, dass hier regelmäßig Microsoft Mitarbeiter präsent waren. Das war auch im Startup der englischen Webforen zu beobachten. Sie sorgten für eine hohe Antwortquote egal um welches Thema es auch ging.
Zumindest fangen diese Foren an zu funktionieren, obwohl sie im C/C++/WinAPI Bereich in keiner Weise an den Traffic der NNTP Gruppe oder des deutschen C++ Forums heran kommt. Ich muss auch klar sagen, dass hier noch einige thematische Gruppen fehlen. Aber wir werden vermutlich in nächster Zeit hier auch noch entsprechende Erweiterungen erleben.

Es bleibt die Tatsache, dass die Qualität in fast allen Webforen zum Teil unterirdisches Niveau haben.
Ein Großteil der Fragen entspringt der Unfähigkeit Google und Bing zu verwenden, geschweige denn die Möglichkeit zu nutzen technische Dokumentationen auch zu lesen. Mangelnde Eigeninitiative in Verbindung mit der allgegenwärtigen Forderung „Gib mir ein paar Zeilen Beispielcode“ sorgen bei mir nicht gerade für Spaß und Herausforderung in diesen Community Bereichen.
Wen wundert es, dass sich ein Techie mit Niveau eher abgeschreckt, als angezogen fühlt, durch die Qualität der Diskussion und Mitglieder. Die Nische NNTP Gruppen war Qualitativ und aufgrund der gewachsenen Strukturen der Mitglieder eine gute Sache. Leider wird diese Nische nun bald verschwinden. Wenn nicht… wer weiß?

Für die Zukunft kann ich nur hoffen, dass viele der Regulars aus den NNTP Gruppen tatsächlich „umziehen“ in die Webforen und damit hoffentlich für mehr Qualität und durch Ihre kontrollierte Präsenz auch für mehr Netiquette sorgen.
Ich bin gespannt was wird. Leider ist meine Hoffnung dies bzgl. gering. Ich befürchte eher, dass sich ein Profi nach dem anderen aus der Online-Community langsam genervt verabschieden wird.

Als Community Dinosaurier weine ich den NNTP Foren nicht nur eine Träne nach, aber das Leben geht weiter…

PS: Die Frage wann die microsoft.public.* Gruppen endgültig verschwinden bleibt natürlich offen. Nicht alle benutzten news.micrsoft.com als Newsserver und NNTP ist nun mal ein verteiltes System. Microsoft wird also eine RMGRPOUP Befehl für seine Gruppen versenden und es bleibt abzuwarten welche Newsserver diesen wirklich ausführen.
Es kann also gut sein, dass uns die microsoft.public.* Gruppen noch eine Weile erhalten bleiben, selbst wenn news.microsoft.com abgeschaltet ist. Nur werden Sie ein Schattendasein fristen und Sicherheit wird der Traffic hier weiter abnehmen, wenn es keinerlei Hinweise mehr von Microsoft selbst auf diese Foren gibt.

Tipps & Tricks: VS-2010 Hilfe aufbohren

Microsoft ist es wirklich gelungen in zwei großen Schritten die VisualStudio Online Hilfe bzw. MSDN Integration von einem brauchbaren Tool in VC6, über VS-2003/5/8 wo es gerade auszuhalten war, in VS-2010 zu einem Ding zu verwandeln, bei dem mir fast die Worte fehlen.
Man schmeiße alle Funktionen des Hilfe-Viewers weg und behalte gerade die F1-Taste… alle Vorteile, die mir als Vorteile verkauft werden (keine separate Installation, alles im gewohnten Browser etc. siehe Video unten), sehe ich nicht als Vorteile gegenüber den Nachteilen, die in Kauf genommen wurden.
Ein vielleicht hartes Urteil, aber es geht seit Jahren in dieser Beziehung leider nur bergab.
– Just my 2 cents – 🙁

Das Erste was ich sofort vermisst habe war in der folgenden Reihenfolge:

  1. Dynamic Help
  2. Table of contents (TOC)
  3. Sync to TOC
  4. Index
  5. Filter
  6. Direkte Suche in VS, oder dem entsprechenden Viewer

Ich bin dann auf im Internet auf die Suche gegangen und wurde mit 2 Tools fündig, die einem hier helfen können:

HelpViewerKeywordIndex

Aber wie angekündigt soll es auch hier Verbesserungen geben. Und das außerhalb der Wartungszyklen des VS (siehe Video unten mit Ryan Linton). Zumindest was den Index betrifft und die Suchmöglichkeit innerhalb von VS betrifft schafft ein kleines Tool von Ryan Linton (wie versprochen seit dem 20.04.) wenigstens etwas Abhilfe, der HelpViewerKeywordIndex.

Mit diesem Tool erhält man zumindest mal wieder den Index und ein Suchfenster in VS.
Auch dass das Sucherergebnis in einen VS-Fenster angezeigt werden kann ist nett. Leider betrifft diese Einstellung nicht die Funktion der F1-Taste. In diesem Fall wird immer noch der externe Browser angeworfen und nicht der interne, oder ich habe die Einstellung nicht gefunden wo man mit der F1-Taste ein Browser Fenster in VS öffnet.
Ganz verstanden habe ich auch die Option „Display TOC in page“ nicht.
Das Tool ist zumindest mal ein kleiner Schimmer eines eventuellen zukünftigen Lichtblicks 😉

Aber wer weiß, vielleicht lässt Version 1.1 von  HelpViewerKeywordIndex nicht lange auf sich warten.

H3Viewer

Mit H3Viewer, von meinem MVP-Kollegen Rob Chandler, bekommt man zumindest mal wieder das, was man in VS-2008 auch hatte. Table of Contents, Sync to contents. Und der Viewer ist nicht im Browser. Mit dem Ding lässt sich leben oder zumindest ersetzt es den Viewer den wir aus VS-2005/8 kannten ziemlich gut. Und ja, es gibt auch hier wieder Bookmarks, die jetzt keine Favoriten Einträge im Browser sein müssen 😉
Besonders gefreut habe ich mich auch über die Funktion im Index die Doubletten zum gleichen Stichwort im Index in einem separaten Fenster wieder angezeigt zu bekommen, denn nicht jeder Treffer zu GetWindowtext ist der den ich suche.
Nett auch die TTS Funktion (Text to Speech)
Hier fehlen jetzt eigentlich nur noch die Filter zum vollständigen Glück.

Aber wer weiß, was Microsoft uns demnächst noch zu bieten hat. Laut der Homepage von H3Viewer hat Microsoft noch bereits einige andere Viewer in der Schublade.

Siehe auch:
http://channel9.msdn.com/posts/kmcgrath/Help-30-New-Help-System-in-Visual-Studio-2010/

Links:
http://visualstudiogallery.msdn.microsoft.com/en-us/4af86641-a302-4edf-9853-007bcc670b30
http://mshcmigrate.helpmvp.com/viewer

SELECT … FROM … WHERE … NOT IN (…) Mystik

Wieder mal ein ganz normaler Wahnsinn, der einen Stunden gekostet hat…

Wenn wir uns die nachfolgenden SQL Statements ansehen, dann würde ich davon ausgehen, dass die ersten 6 eine Ausgabe erzeugen.

SELECT 'Test 1' WHERE 1 IN (NULL, 1, 2, 3, 4)
SELECT 'Test 2' WHERE 1 IN (1, 2, 3, 4)
SELECT 'Test 3' WHERE 1 NOT IN (NULL, 2, 3, 4) -- !!!
SELECT 'Test 4' WHERE 1 NOT IN (2, 3, 4)
SELECT 'Test 5' WHERE NOT (1 IN (NULL, 2, 3, 4)) -- !!!
SELECT 'Test 6' WHERE NOT (1 IN (2, 3, 4))
-- Empty as expected
SELECT 'Test 5' WHERE 1 IN (NULL, 2, 3, 4)
SELECT 'Test 6' WHERE 1 IN (2, 3, 4)

Aber ❗ Pustekuchen ❗
Die Zeilen 3 und 5 erzeugen keine Ausgabe ❗Dadurch, dass in dem Ausdruck in der Klammer NULL enthalten ist funktioniert der NOT IN Test nicht mehr korrekt.

Ich bin darauf gestoßen, weil ich ein Subquery durchgeführthabe und mit NOT IN prüfen wollte, dass ein bestimmter Wert eben nicht in diesem Subquery enthalten ist. Einziges Problem war, dass in einigen Fällen dieser Subquery eben auch NULL als Ergebnis geliefert hat. 
Und genau in diesem Fall funktionierte die Abfrage nicht korrekt (s.o.). Das sah vereinfacht in etwas so aus:

SELECT [ID] FROM [Table1]
    WHERE [SomeData] NOT IN
        (SELECT [OtherIDWithNULL] FROM [Table2])

Ich habe den Subquery dann entsprechende um ein WHERE … IS NOT NULL erweitert und siehe da es ging:

SELECT [ID] FROM [Table1]
    WHERE [SomeData] NOT IN
        (SELECT [OtherIDWithNULL] FROM [Table2]
            WHERE [OtherIDWithNULL] IS NOT NULL)

Rein gefühlt ist das für mich ein Bug, aber es ist keiner ❗
Hier kommt eine Einstellung zum tragen, die sich ANSI_NULL schimpft. (siehe SET ANSI_NULL { ON | OFF })

ANSI_NULL ist im Allgemeinen ON, und das bedeutet, dass ein Vergleich eines Wertes mit NULL immer undefiniert ist. Das ein IN-Statement aber nichts anderes ist als ein Vergleich der einzelnen Werte in der Klammer mit dem Zielwert, führt dies hier zu einem irritierenden Ergebnis. NULL=NULL und 1=NULL ist eben undefiniert und nicht False wenn ANSI_NULL ON ist! Also können die Zeilen 3+5 kein korrektes Ergebnis liefern.
Man beachte: Dies hat keinen Einfluß solange man IN verwendet und nicht NOT IN!

Meine rein persönliche Meinung:
Ich habe selten solch einen Unsinn in einem ANSI-Standard gesehen. Einfach Unlogisch ❗
Für mich ist NULL=NULL und NULL<>AnyThingElse eben True… Just my 2 cents…

Jetzt könnte man meinen, dass es also auch eine Lösung wäre SET_ANSI_NULL OFF zu verwenden ❗ (BTW: Eine Einstellung die auch als Attribut direkt auf der Datenbank selbst gesetzt werden kann). Aber der folgende Hinweis in der Doku sollte einen zum Umdenken bewegen:

Wichtig:
In einer späteren Version von SQL Server wird ANSI_NULLS immer auf ON festgelegt, und jede Anwendung, die für die Option explizit OFF festlegt, löst einen Fehler aus. Verwenden Sie dieses Feature beim Entwickeln neuer Anwendungen nicht, und planen Sie eine Änderung von Anwendungen, in denen es zurzeit verwendet wird.

Da dies also evtl. Einfluss auf andere Codebereiche haben könnte und zukünftig nicht mehr unterstützt wird habe ich auf diese Nutzung verzichtet und lieber das Subquery abgeändert.

PS: Bitte jetzt nicht darauf hinweisen, dass es auch JOIN gibt. Aufgrund der Komplexität der Abfrage und weil diese auch noch nach bestimmten Bedingungen gebaut wurde, war ein IN mit einem Subquery, der einfachere Weg.

Achtung: Die festen Mapping Modes des GDI basieren nicht auf LOGPIXELSX und LOGPIXELSY!

Jeder der mit Fontgrößen und Darstellungsgrößen herumspielt, oder wer selber in Fenstern zeichnet kennt LOGPIXELSX und LOGPIXELSY, die durch GetDevCaps geliefert werden. Diese Werte dienen auch CFont::CreatePointFont und anderen Funktionen bei der Umrechnung von „realen“ Maßen auf die Devicepoints, die man dann benötigt. Alles kein Hexenwerk und überall im Netz beschrieben.
Auf diesem Weg kann man mit etwas MulDiv Arithmetik schnell umrechnen wie viele Punkte man benötigt um etwas von 10mm Größe auf einem Device darzustellen.

Der nachfolgende Code wandelt Einheiten von 1mm entsprechend der Auflösung eines Devices in Pixel um.

pDC->SetMapMode(MM_TEXT);
// Convert mm to with LOGPIXELSX
CSize sizeLogPixel(pDC->GetDeviceCaps(LOGPIXELSX),
            pDC->GetDeviceCaps(LOGPIXELSY));
rect.top = ::MulDiv(rect.top,sizeLogPixel.cy*10,254);
rect.bottom = ::MulDiv(rect.bottom,sizeLogPixel.cy*10,254);
rect.left = ::MulDiv(rect.left,sizeLogPixel.cx*10,254);
rect.right = ::MulDiv(rect.right,sizeLogPixel.cx*10,254);

Die Auflösung von 0,1mm je Einheit ist die Metrik des Mappingmodes MM_LOMETRIC. Man sollte also meinen, dass die Verwendung von MM_LOMETRIC mit einem Faktor 10, der obigen Umrechnung gleich kommt.

pDC->SetMapMode(MM_LOMETRIC);
// Convert mm to 0.1mm
rect.top *= -10;
rect.bottom *= -10;
rect.left *= 10;
rect.right *= 10;

Probiert man dies aus, so stellt man überrascht fest, dass die Größen nicht übereinstimmen.
Der Dokumentation nach müsste man es aber denken.

Mit einem bisschen experimentieren bin ich letztlich auf den Grund gekommen.
Keiner der Mappingmodes MM_LOENGLISH, MM_HIENGLICH, MM_LOMETRIC oder MM_HIMETRIC verwendet LOGPIXELSX oder LOGPIXELSY. Diese Mappingmodes verwenden die Werte HORZRES und VERTRES in dem Viewport-Extent und die Werte HORZSIZE und VERTSIZE im Window-Extent.

D.h. der Viewport-Extent bekommt die Größe des Bildschirmes in Pixeln zugewiesen und das Window-Extent bekommt die Größe des Devices in mm zugewiesen. Nun ist diese Größe (HORZSIZE/VERTSIZE) bei Bildschirmen nicht die reale Größe sondern eine Größe, die der Hersteller festlegt. (Anmerkung: Bei Druckern stimmt dieser Wert)

Nun wäre noch alles OK, wenn sich aus den Werten von VERT/HORZSIZE und VERT/HORZRES nun der Quotient LOGPIXELSX/SY ermitteln ließe. Das ist aber nicht der Fall! LOGPIXELSX/SY sind Skalierungswerte die bei Bildschirmen unabhängig von der realen Auflösung angegeben werden und die z.B. dazu Dienen Schriftgrößen grundsätzlich größer oder kleiner anzeigen zu lassen (siehe auch High DPI Mode).

Die Konsequenz daraus ist, dass die Mappingmodes ein relativ exotisches Einzelleben führen, weil die meisten Entwickler eben korrekterweise auf LOGPIXELSX/SY zurückgreifen. Noch mal sei hier bemerkt, dass für Drucker DCs hier in mir bekannten Fällen kein Unterschied existiert und auch das ist gut so.

Die Lösung die sich anbietet, ist nicht weiter schwierig und sie auch der Grund warum ich erst jetzt auf diesen gesamten Umstand gestoßen bin. Ich habe niemals die MM_LO…/MM_HI… Mappingmodes verwendet. Entweder pur MM_TEXT und wenn ich was anderes benötigt habe einfach MM_ANISOTROPIC, und in der entsprechenden Skalierung habe ich dann meistens die Werte aus LOGPIXELSX/SY verwendet. Also musste es passen.

MM_ANISOTROPIC ist sowieso der Mappingmode der Wahl, wenn es um skalierbare Darstellungen und Zoomfaktoren geht, aber dazu vielleicht mehr in einem Artikel demnächst.

Ich habe ein kleines MFC-Programm gebaut (MappingModeTest), dass diese Konflikte aufzeigt. Ich zeichne dort ein Rechteck auf den Koordinaten 20mm,10mm mit der Größe 60mm,40mm. Damit die verschiedenen Rechtecke alle sichtbar werden verwende ich immer einen Versatz von 1mm und zeichne die Rechtecke in unterschiedlichen Farben.
In der Debugausgabe kann man wunderschön sehen wie Extents mit den Werten aus GetDeviceCaps zusammenhängen.

Dieser Artikel basiert auf zwei Anfragen in microsoft.public.de.vc die dieses unterschiedliche Verhalten aufzeigten und diskutieren:
http://groups.google.de/group/microsoft.public.de.vc/browse_thread/thread/23467a5e95051291/7c66c01b8295eaab
http://groups.google.de/group/microsoft.public.de.vc/browse_thread/thread/201719d23a411256/17b41c09844bf105

VS-2010 steht für MSDN Abonnenten sofort zum Download zur Verfügung

Jetzt wird es ernst 😉
Pünktlich wie angekündigt ist VS-2010 RTM in englisch für MSDN Benutzer verfügbar:
http://msdn.microsoft.com/en-us/subscriptions/downloads/default.aspx?pv=18:370

Die entsprechende Trial Versionen können sofort herunter geladen werden:
http://www.microsoft.com/visualstudio/en-us/download

Auch eine Express Version von VC-2010 ist bereits verfügbar:
http://www.microsoft.com/express/Downloads/

Laut Microsoft sollen Übersetzungen in andere Sprachen noch bis Ende diesen Monates auch zur Verfügung stehen.

Mal einen ganz anderen Blick auf seinen Code werfen mit CppDepend

Vor einiger Zeit habe ich versucht mit einem anderen Werkzeug mal den eigenen Code zu analysieren.
Ich habe CppDepend entdeckt.  http://www.cppdepend.com/

Gerade bei großen Projekten kann man schnell den Überblick verlieren und es ist schwierig die abhängigen Klassen und Objekte in Ihren Verbindungen zu sehen oder mögliche Designprobleme nachträglich festzustellen. Oder den richtigen Ansatzpunkt für Reviews zu finden. Man hat manchmal das Gefühl, dass etwas nicht stimmt, aber man weiß oft nicht genau was.

CppDepend kann helfen schlecht konstruierte Klassen zu finden, Fehler in den Namenskonfentionen oder der Dokumentation und gezielter auf notwendige Reviews hinzuweisen.
Durch eine eigene Abfragesprache ist es extrem einfach große unübersichtliche Funktionen zu finden. Klassen mit zyklischen Abhängigkeiten und extreme Vererbungstiefen aufzuspüren. Besonders einfach wird es zum Beispiel auch Namenskonventionen zu überprüfen. Die eigene Codebase wird durch die Abfragesprache analysierbar.

Ich empfand die graphischen Darstellungen der eigenen Codebasis und die Ergebnisse der Abfragen in diesen Grafiken als extrem anschaulich und nützlich. Weitaus mehr als manche tabellarische Analyse meines Codes.

Einen guten Einblick was hier möglich ist liefern die Case-Studies. Wie zum Beispiel die Analyse der MFC 8.0 (VC-2005) http://www.cppdepend.com/MFC.aspx. Man kann die MFC sicherlich nicht als Glanzstück des OOP bezeichnen, umso mehr ist es mal interessant mit diesem Tool einen Blick auf die MFC zu werfen. Wem das nicht anschaulich genug ist kann sollte sich auch die anderen Case-Studies mal ansehen. Oder noch besser die Software 2 Wochen testen.

Ein gutes Tool, aber leider nicht ganz billig, aber in jedem Fall mal einen Blick wert.

TFSDeleteProject und der Fehler TF30063

Wer nach „TFSDeleteProject TF30063“ googled findet genug Treffer, die eine Lösung anbieten. Viel ist hier nicht mehr dazu zu schreiben.

Hier die für mich wichtigsten Links, für Erklärung und Lösung dieses TFS Problems:
http://blogs.msdn.com/dstfs/archive/2009/08/21/tfsdeleteproject-exe-thwarted-by-windows-sharepoint-services-permissions.aspx
http://vsts-fu.blogspot.com/2008/10/tf30063-you-are-not-authorized-to.html
http://social.msdn.microsoft.com/Forums/en-US/tfsadmin/thread/b5e6a42a-dc22-499c-97e0-4fe5b563d49a/

Der letzte Link beschreibt die Lösung, aber es geht auch etwas schneller ohne sich an die Site und den TFS anzumelden ❗

Wer in die Site-Administration geht wird dort immer den Benutzer TFSSETUP als Site Collection Administrators vorbelegt finden.
Anstatt nun den eigenen Account in die Sharepoint Site Collection Administrators und in die Team Foundation Administrators einzutragen, kann man dem Account TFSSETUP auch die Rechte geben sich lokal an einem beliebigen Rechner anzumelden auf dem VS-2008 installiert ist. Das geht am einfachsten wenn man den TFSSETUP Account in die Gruppe Benutzer/Domänen-Benutzer aufnimmt.
Oft wird dies bei der Installation und dem Anlegen des Accounts nicht einmal eingeschränkt, bzw. der Account ist bereits Domänen-Benutzer 😉
Also als TFSSETUP anmelden und schon läuft der TFSDeleteProject ohne Probleme.

PS: Wenn man es richtig macht nimmt man dem TFSSETUP Account hinterher wieder das Recht für lokales Anmelden, den er benötigt es nicht im Gegensatz zu TFSSERVICE… 😉

Der Visual Studio 2010 Release Candidate ist erschienen

Jetzt geht es in die Schlussphase ❗

Der Release Candidate für VisualStudio 2010 ist nun draußen. MSDN Abonnenten können ihn jetzt schon herunterladen. In den nächsten Tagen wird dann auch ein freier Download zur Verfügung stehen.
http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx

Wie auch schon die Beta 2 gibt es für diesen RC eine Go Live Lizenz, mit der man direkt produktiv entwickeln darf.

Das endgültige Erscheinungsdatum bleibt weiterhin der 12. April 2010

PS: Das jetzt der RC erschienen ist, heißt auch, dass nur noch wirklich extrem gravierende Bugs entfernt werden. Mit dem meisten was wir im RC sehen werden wir wohl auch im fertigen Produkt leben müssen. Ich bin gespannt welche Fehler aus der Beta 2 überlebt haben 😉
Dennoch testen und Fehler melden: https://connect.microsoft.com/VisualStudio?wa=wsignin1.0

Alternative Geldanlage

Seit 2006 Muhammad Yunus für seine Arbeit und seine Grammeen Bank den Friedensnobelpreis bekommen hat, habe ich auch immer mal wieder über Mikrokredite und gerechte Geldanlage nachgedacht.

Durch einen Artikel in der OJC-Zeitschrift Salzkorn bin ich jetzt wieder einmal auf solch eine alternative Bank gestoßen, die Geldanlage nach anderen Maßstäben betreibt:
Oikocredit http://www.oikocredit.org

Ich denke, dass wir uns oft genug hinter dem Gedanken verstecken, dass man alleine nichts machen kann. Aber man kann ❗
Mit 200 Euro, die man für einem Genossenschaftsanteil investiert können viele andere Menschen in dieser Welt, zu gerechten Konditionen, eine neue Perspektive für ihr Leben erhalten.

Also warum nicht auch ein paar Euro investieren bei einer ganz anderen Art von Bank und dabei auch noch immerhin 2% Dividende zu erhalten ❓ Es muss nicht immer eine Spende sein ❗ 😉

Siehe auch http://www.ethische-geld-anlage.de, wen das Thema noch mehr interessiert.

Nachtrag 26.02.2010: Hier der direkte Link zu dem Artikel aus der Zeitschrift Salzkorn http://www.ojc.de/salzkorn/geldanlage-fair-gerecht-dritte-welt-sk4-2009.html