<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Martin&#039;s Blog &#187; Allgemein</title>
	<atom:link href="http://blog.m-ri.de/index.php/category/allgemein/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.m-ri.de</link>
	<description>Gesammeltes aus dem Leben eines &#34;normalen&#34; Programmierers... :-)</description>
	<lastBuildDate>Sat, 04 Feb 2012 12:07:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Minidumps ganz einfach</title>
		<link>http://blog.m-ri.de/index.php/2011/01/13/minidumps-ganz-einfach/</link>
		<comments>http://blog.m-ri.de/index.php/2011/01/13/minidumps-ganz-einfach/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 20:52:59 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Debuggen]]></category>
		<category><![CDATA[MiniDumps]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=731</guid>
		<description><![CDATA[Manchmal, wenn man ein kleines Programm entwickelt mag es als Overkill erscheinen extra Code für Minidumps einzubauen. Was aber, wenn man doch einen Fehler aufspüren möchte und ein Minidump ad hoc ganz praktisch wäre? Unter Vista und Windows 7 ist es ganz einfach in den WER Einstellungen Einträge vorzunehmen, mit denen man mit nur ein [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal, wenn man ein kleines Programm entwickelt mag es als Overkill erscheinen extra Code für Minidumps einzubauen.<br />
Was aber, wenn man doch einen Fehler aufspüren möchte und ein Minidump ad hoc ganz praktisch wäre?</p>
<p>Unter <em>Vista </em>und <em>Windows 7 </em>ist es ganz einfach in den <em>WER </em>Einstellungen Einträge vorzunehmen, mit denen man mit nur ein paar Registry Einträgen sofort zu Minidumps kommt.</p>
<p>Nachfolgend die Registry Einträge, die einen Fulldump im Verzeichnis %LOCALAPPDATA%\CrashDumps erzeugen.</p>

<div class="wp_syntax"><div class="code"><pre class="reg" style="font-family:monospace;"><span style="color: #0000FF;">Windows Registry Editor Version 5.00</span>
<span style="color: #000000;">&#91;</span><span style="color: #800000;">HKEY_LOCAL_MACHINE</span>\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps<span style="color: #000000;">&#93;</span>
<span style="color: #0000FF;">&quot;DumpType&quot;</span><span style="color: #000000;">=</span><span style="color: #0000FF;">dword:00000001</span>
<span style="color: #0000FF;">&quot;DumpCount&quot;</span><span style="color: #000000;">=</span><span style="color: #0000FF;">dword:00000010</span>
<span style="color: #0000FF;">&quot;DumpFolder&quot;</span><span style="color: #000000;">=</span>hex<span style="color: #000000;">&#40;</span>2<span style="color: #000000;">&#41;</span>:25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,\
00,41,00,54,00,41,00,25,00,5c,00,43,00,72,00,61,00,73,00,68,00,44,00,75,00,\
6d,00,70,00,73,00,00,00</pre></div></div>

<p>Eine vollständige Liste der Einstellungen findet sich in der MSDN Doku:<br />
<a href="http://msdn.microsoft.com/en-us/library/bb787181(VS.85).aspx">http://msdn.microsoft.com/en-us/library/bb787181(VS.85).aspx</a></p>
<p>PS:<br />
Ich benutze diese Einstellungen aktuell auch einem Bug in <em>VisualStudio 2010 </em>auf die Spur zu kommen, damit ich Crashdumps regelmässig an <a href="http://connect.microsoft.com">http://connect.microsoft.com</a> übertragen kann.</p>
<p>PPS: (14.01.2011 nach Hinweis von André)<br />
Wie man auch der Doku ennehmen kann ist fpr dieses Funktion Vista SP1, Windows 2008 Server oder Windows 7 notwendig. Vista RTM hat diese Funktion nicht.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/01/13/minidumps-ganz-einfach/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TFS Fehler TF248015&#8230;</title>
		<link>http://blog.m-ri.de/index.php/2010/12/20/tfs-fehler-tf248015/</link>
		<comments>http://blog.m-ri.de/index.php/2010/12/20/tfs-fehler-tf248015/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 20:45:43 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=686</guid>
		<description><![CDATA[Ein nettes Hilfsmittel ist die Work-Item Suche mit dem Addin http://visualstudiogallery.msdn.microsoft.com/de-de/3f31bfff-5ecb-4e05-8356-04815851b8e7 Leider funktionierte dies bei mir nicht sofort. Ich bekam die folgende Fehlermeldung: TF248015: Your work item query could not be completed due to an unexpected error returned by the Microsoft SQL Server Full-text engine. Contact your system administrator to check the Application event log [...]]]></description>
			<content:encoded><![CDATA[<p>Ein nettes Hilfsmittel ist die Work-Item Suche mit dem Addin <a href="http://visualstudiogallery.msdn.microsoft.com/de-de/3f31bfff-5ecb-4e05-8356-04815851b8e7">http://visualstudiogallery.msdn.microsoft.com/de-de/3f31bfff-5ecb-4e05-8356-04815851b8e7</a></p>
<p>Leider funktionierte dies bei mir nicht sofort. Ich bekam die folgende Fehlermeldung:</p>
<p style="padding-left: 30px;">TF248015: Your work item query could not be completed due to an unexpected error returned by the Microsoft SQL Server Full-text engine. Contact your system administrator to check the Application event log for Team Foundation Server.</p>
<p>Na fein <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' />  Also muss ich mich selbst kontaktieren weil irgendwas mit der Volltext Suche nicht klappt.</p>
<p>Nach einigem hin und her irren durch alle möglichen Einstellungen entdeckte ich den Missetäter: Der <strong><em>&#8220;SQL Full-text Filter Daemon Launcher&#8221;</em></strong> war nicht gestartet. Dies ist ein Dienst, den man in der <em>Computer-Verwaltung</em> oder dem <em>SQL-Server-Konfigurations-Manager</em> findet.<br />
Aus irgend einem mysteriösen Grund war hier ein falsches Dienstkonto angegeben und der Dienst konnte nicht starten.</p>
<p>Nachdem das korrigiert war habe ich danach noch ein <em>Rebuild</em> des <em>Warehouse</em> veranlasst damit die Indizes sofort zur Verfügung aktuell sind. Das erfolgt über die folgende Web Adresse: <a href="http://servername:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx">http://servername:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx</a> <br />
in dem man <em>Process</em>Warehouse auswählt. Unter <em>collectionName</em> gibt man seine <em>Team Project Collection</em> an um die es geht. Wer die Namen der <em>Collections </em>vergessen hat, findet sie in der <em>Team Foundation Server Administration Console</em> aufgelistet.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2010/12/20/tfs-fehler-tf248015/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manifeste sind nicht alles, DLLs und COM Objekte benötigen ISOLATION_AWARE_ENABLED oder ein eigenes Activation Context Handling</title>
		<link>http://blog.m-ri.de/index.php/2010/11/30/manifeste-sind-nicht-alles-dlls-und-com-objekte-benoetigen-isolation_aware_enabled-oder-ein-eigenes-activation-context-handling/</link>
		<comments>http://blog.m-ri.de/index.php/2010/11/30/manifeste-sind-nicht-alles-dlls-und-com-objekte-benoetigen-isolation_aware_enabled-oder-ein-eigenes-activation-context-handling/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 21:39:47 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=677</guid>
		<description><![CDATA[Ich habe eine DLL die einiges an Datenbank I/O für ein Produkt übernimmt. Diese DLL sollte in einem Service eingesetzt werden. Eigentlich ist diese DLL immer nur Teil eines vollen UI Projektes und hat auch einige kleine visuelle Komponenten. Entsprechend prüft eine Init Funktion bestimmte Voraussetzungen, die für das korrekte Arbeiten notwendig sind wie: mindestens [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe eine DLL die einiges an Datenbank I/O für ein Produkt übernimmt. Diese DLL sollte in einem Service eingesetzt werden.<br />
Eigentlich ist diese DLL immer nur Teil eines vollen UI Projektes und hat auch einige kleine visuelle Komponenten. Entsprechend prüft eine Init Funktion bestimmte Voraussetzungen, die für das korrekte Arbeiten notwendig sind wie: mindestens MS-XML 3.0, IE ab Version 5.1, Common Control 6.0 (also mit Manifest).<br />
Soweit so gut. Die DLL selbst wurde mit einem Manifest (Typ 2) versehen und in den Service mit eingebaut.</p>
<p>Eigentümlicherweise startete der Service nicht. Die <em>Init</em> Funktion meldete immer, dass die Requirements nicht gegeben wären. Was eigentlich nicht sein kann, weil der selbe Code in einem anderen Kontext eines GUI Programms perfekt funktioniert.</p>
<p>Ein wenig debuggen zeigte, dass die Common Control 6.0 nicht gefunden wurden.<br />
Eigentlich kein Wunder. Der Service hat keine UI, es gibt keinen Code der die Common Control 6.0 verwendet, allerdings hatte meine DLL ja ein entsprechendes Manifest für die Common Control 6.0 DLL.<br />
Aber der Versionstest in der DLL lädt immer die 5er Version, also die Version ohne Manifest.</p>
<p>Es dauerte eine Weile bis es bei mir klingelte und ich verstand worin das Problem lag:</p>
<ul>
<li>Wenn man ein Manifest in einer DLL mit dem Code 2 einträgt (<em>ISOLATIONAWARE_MANIFEST_RESOURCE_ID</em>), dann funktioniert dieses Manifest wenn in diesem Moment die <em>ComCtl32.dll </em>implizit geladen werden sollte.</li>
<li>In meinem Fall aber klappte das nicht. Die DLL wurde nicht implizit geladen. Die Versionkontrolle später führte <em>LoadLibrary </em>direkt durch und führte dann <em>DllGetVersion </em>aus (mit GetProcAddress ermittelt).</li>
<li>In meinem Fall bedeutet das aber, das LoadLibrary im Aktivierungskontext (Activation Context) der <em>EXE </em>ausgeführt wird, und die hat kein ComCtl32 Manifest für die Version 6.0. Es ist ja auch nur ein Service.</li>
<li>Damit es funktioniert muss man in jedem Fall auch den folgenden Define setzen.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#define ISOLATION_AWARE_ENABLED 1</span></pre></div></div>

<ul>
<li>oder man muss dafür sorgen, dass man seinen eigenen Aktivierungskontext nutzt. Sprich seine Manifeste, die man selber möchte.</li>
<li>Durch diesen define, werden bestimmte Funktionen wie <em>CreateWindow</em>, <em>LoadLibrary, CoCreateInstance, SendMessage </em>und andere durch einen inline-Code ersetzt der einen Aktivierungkontext benutzt und die aktuellen Manifeste der DLL bestimmt und benutzt.</li>
</ul>
<p>In meinem Fall hieß die Lösung nicht <em>LoadLibrary </em>zu benutzen sondern <em>GetModuleHandle </em>und wenn eben <em>ComCtl32 </em>gar nicht im Speicher ist, also auch nicht benutzt wird auch keinen weiteren Test durchzuführen, aber zur Sicherheit habe ich auch <em>ISOLATION_AWARE_ENABLED </em>gesetzt.</p>
<p>Siehe auch:<br />
<a href="http://msdn.microsoft.com/en-us/library/aa376607(VS.85).aspx">http://msdn.microsoft.com/en-us/library/aa376607(VS.85).aspx</a><br />
<a href="http://msdn.microsoft.com/en-us/library/aa375197(VS.85).aspx">http://msdn.microsoft.com/en-us/library/aa375197(VS.85).aspx</a></p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2010/11/30/manifeste-sind-nicht-alles-dlls-und-com-objekte-benoetigen-isolation_aware_enabled-oder-ein-eigenes-activation-context-handling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wir müssen schneller handeln&#8230;</title>
		<link>http://blog.m-ri.de/index.php/2009/01/01/wir-muessen-schneller-handeln/</link>
		<comments>http://blog.m-ri.de/index.php/2009/01/01/wir-muessen-schneller-handeln/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 21:56:33 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Christsein]]></category>
		<category><![CDATA[Real Life]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=393</guid>
		<description><![CDATA[Ansehen und mitmachen: http://one.org/de/schneller/index.html Copyright &#169; 2010 Martin RichterDieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)]]></description>
			<content:encoded><![CDATA[<p>Ansehen und mitmachen:</p>
<p><a href="http://one.org/de/schneller/index.html">http://one.org/de/schneller/index.html</a></p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2009/01/01/wir-muessen-schneller-handeln/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kann man mit einem Euro am Tag die Welt verändern?</title>
		<link>http://blog.m-ri.de/index.php/2008/12/27/kann-man-mit-einem-euro-am-tag-die-welt-veraendern/</link>
		<comments>http://blog.m-ri.de/index.php/2008/12/27/kann-man-mit-einem-euro-am-tag-die-welt-veraendern/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 11:10:48 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Christsein]]></category>
		<category><![CDATA[Real Life]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=392</guid>
		<description><![CDATA[Ja Zumindest für ein Kind in der Welt kann man mit einem Euro am Tag für eine gesicherte Schulausbildung, Ernährung und Gesundheitsfürsorge sorgen. Was sich mit diesem Euro für Kinder verändern kann ist unfassbar für uns Mitteleuropäer. Wen das mehr interssiert, der sollte sich mal http://www.compassion-de.org ansehen Copyright &#169; 2010 Martin RichterDieser Feed ist nur [...]]]></description>
			<content:encoded><![CDATA[<p>Ja <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /> </p>
<p>Zumindest für ein Kind in der Welt kann man mit einem Euro am Tag für eine gesicherte Schulausbildung, Ernährung und Gesundheitsfürsorge sorgen. Was sich mit diesem Euro für Kinder verändern kann ist unfassbar für uns Mitteleuropäer.</p>
<p>Wen das mehr interssiert, der sollte sich mal <a href="http://www.compassion-de.org">http://www.compassion-de.org</a> ansehen <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /> </p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2008/12/27/kann-man-mit-einem-euro-am-tag-die-welt-veraendern/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lösung: Was ist falsch an diesem Code? (1)</title>
		<link>http://blog.m-ri.de/index.php/2008/12/20/loesung-was-ist-falsch-an-diesem-code-1/</link>
		<comments>http://blog.m-ri.de/index.php/2008/12/20/loesung-was-ist-falsch-an-diesem-code-1/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 16:26:26 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Debuggen]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=387</guid>
		<description><![CDATA[Das Problem an diesem Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 On Error Resume Next If MyFunction() Then MsgBox &#34;MyFunction succedded&#34; Else MsgBox &#34;MyFunction failed&#34; End If &#160; MsgBox &#34;... continue execution ...&#34; &#160; Function MyFunction MsgBox &#34;Start MyFunction&#34; On Error Goto 0 ' [...]]]></description>
			<content:encoded><![CDATA[<p>Das Problem an diesem Code</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="vb" style="font-family:monospace;"><span style="color: #151B8D; font-weight: bold;">On</span> <span style="color: #151B8D; font-weight: bold;">Error</span> <span style="color: #151B8D; font-weight: bold;">Resume</span> <span style="color: #8D38C9; font-weight: bold;">Next</span>
<span style="color: #8D38C9; font-weight: bold;">If</span> MyFunction() <span style="color: #8D38C9; font-weight: bold;">Then</span>
    MsgBox <span style="color: #800000;">&quot;MyFunction succedded&quot;</span>
<span style="color: #8D38C9; font-weight: bold;">Else</span>
    MsgBox <span style="color: #800000;">&quot;MyFunction failed&quot;</span>
<span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #8D38C9; font-weight: bold;">If</span>
&nbsp;
MsgBox <span style="color: #800000;">&quot;... continue execution ...&quot;</span>
&nbsp;
<span style="color: #E56717; font-weight: bold;">Function</span> MyFunction
    MsgBox <span style="color: #800000;">&quot;Start MyFunction&quot;</span>
    <span style="color: #151B8D; font-weight: bold;">On</span> <span style="color: #151B8D; font-weight: bold;">Error</span> <span style="color: #8D38C9; font-weight: bold;">Goto</span> 0
    <span style="color: #008000;">' Just a failure here
</span>    i = 1/0
    MsgBox <span style="color: #800000;">&quot;End MyFunction&quot;</span>
    Test = <span style="color: #00C2FF; font-weight: bold;">true</span>
<span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #E56717; font-weight: bold;">Function</span></pre></td></tr></table></div>

<p>ist, dass bei einem Fehler in der Funktion <em>MyFunction</em> die Funktion sofort abgebrochen wird. Nach diesem Fehler wird aber als nächste Zeile der <em>Then </em>Block ausgeführt. Die Funktion läuft also in den Bock &#8220;MyFunction succeeded&#8221; was nicht unbedingt im Sinne des Erfinders wäre.</p>
<p>Der Entwickler hat zwei Dinge nicht bedacht:</p>
<ol>
<li>Er wollte, das ein Fehler in <em>MyFunction </em>das Skript terminiert. Das erreicht er aber nicht. MyFunction wird bei einem Fehler abgebrochen, aber <em>On Error Resume Next</em> im nächsten äußeren Scope behandelt den Fehler.</li>
<li>Dem Entwickler war unklar, dass <em>On Error Resume Next </em>bei einem Fehler in einem <em>If </em>Statement zum Ausführen des <em>Then </em>Blocks führt <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /><br />
Und man kann sich Denken was passiert wenn man eine <em>While MyFunction() </em>Schleife hat? Jaaaaa genau! Wird in <em>MyFunction </em>ein Fehler ausgelöst hat man eine perfekte Endlosschleife!</li>
</ol>
<p>Am Besten also die Funktion nicht im If-Statement ausführen sondern das Ergebnis in einer Variable Speichern. Sofern die Variable zuvor <em>empty</em> war, ist sie es im Falle ein Fehlers hinterher auch, d.h. sie wird nicht verändert. Nach der Funktion kann man dann zusätzlich auch <em>Err.Number </em>prüfen.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="vb" style="font-family:monospace;"><span style="color: #151B8D; font-weight: bold;">On</span> <span style="color: #151B8D; font-weight: bold;">Error</span> <span style="color: #151B8D; font-weight: bold;">Resume</span> <span style="color: #8D38C9; font-weight: bold;">Next</span>
Result = MyFunction()
<span style="color: #8D38C9; font-weight: bold;">If</span> Result <span style="color: #8D38C9; font-weight: bold;">Then</span>
    MsgBox <span style="color: #800000;">&quot;MyFunction succedded&quot;</span>
<span style="color: #8D38C9; font-weight: bold;">Else</span>
    MsgBox <span style="color: #800000;">&quot;MyFunction failed&quot;</span>
<span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #8D38C9; font-weight: bold;">If</span>
&nbsp;
MsgBox <span style="color: #800000;">&quot;... continue execution ...&quot;</span>
&nbsp;
<span style="color: #E56717; font-weight: bold;">Function</span> MyFunction
    MsgBox <span style="color: #800000;">&quot;Start MyFunction&quot;</span>
    <span style="color: #151B8D; font-weight: bold;">On</span> <span style="color: #151B8D; font-weight: bold;">Error</span> <span style="color: #8D38C9; font-weight: bold;">Goto</span> 0
    <span style="color: #008000;">' Just a failure here
</span>    i = 1/0
    MsgBox <span style="color: #800000;">&quot;End MyFunction&quot;</span>
    Test = <span style="color: #00C2FF; font-weight: bold;">true</span>
<span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #E56717; font-weight: bold;">Function</span></pre></td></tr></table></div>

<p lang="vb">Und was lernen wir daraus <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_question.gif' alt=':?:' class='wp-smiley' /><br />
<em>On Error Resume Next </em>ist tückisch und sollte möglichst sofort zurückgesetzt werden und schon gar nicht über den Scope einer eigenen Funktion hinaus verwendet werden.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2008/12/20/loesung-was-ist-falsch-an-diesem-code-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kennwortabfrage bei der Deinstallation der Symantec Corporate Edition 10</title>
		<link>http://blog.m-ri.de/index.php/2008/11/19/kennwortabfrage-bei-der-deinstallation-der-symantec-corporate-edition-10/</link>
		<comments>http://blog.m-ri.de/index.php/2008/11/19/kennwortabfrage-bei-der-deinstallation-der-symantec-corporate-edition-10/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 19:30:20 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Antivirus]]></category>
		<category><![CDATA[Symantec]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=343</guid>
		<description><![CDATA[Wir nutzen in der Firma seit Jahren die Symantec Corporate Edition. Bisher in der Version 10. Bei der Umstellung auf die neue 11er Version musste ich auf den Clients die alte Software entfernen. Bei den Rechnern mit einer zentralen Installation wusste ich natürlich das Kennwort für die Deinstallation, denn das wurde von mir eingerichtet und [...]]]></description>
			<content:encoded><![CDATA[<p>Wir nutzen in der Firma seit Jahren die Symantec Corporate Edition. Bisher in der Version 10.</p>
<p>Bei der Umstellung auf die neue 11er Version musste ich auf den Clients die alte Software entfernen.<br />
Bei den Rechnern mit einer zentralen Installation wusste ich natürlich das Kennwort für die Deinstallation, denn das wurde von mir eingerichtet und lag im Password Safe.<br />
Allerdings wurden scheinbar auch einige Clients von anderen Admins von CD aus installiert. Hier war mir nun unklar, was für ein Deinstallations Kennwort verwendet wird.</p>
<p>Nach einigem Suchen im Netz bekam ich drei Wege heraus die Corporate Edition zu entfernen:</p>
<ul>
<li>Das Standardkennwort lautet bei einer nicht verwalteten Installation <em><strong>symantec</strong></em></li>
<li>Man kann die Abfrage des Kennwortes bei der Deinstallation aber auch verhindern, indem man den Registryschlüssel <em>UseVPUninstallPassword</em> in <em>HKLM\Software\Intel\LANDesk\VirusProtect6\CurrentVersion\AdministrtatorOnly\Security</em> von 1 auf 0 umsetzt.</li>
<li>Symantec selbst bietet auf der Homepage eine komplizierte Beschreibung für die <a href="http://entsearch.symantec.com/search?p=R&amp;srid=S10%2d1&amp;lbc=symantec&amp;w=uninstall&amp;url=http%3a%2f%2fservice1%2esymantec%2ecom%2fsupport%2fent%2dsecurity%2ensf%2f854fa02b4f5013678825731a007d06af%2fa4d3327506ae7c5f88256b81007b7487%3fOpenDocument&amp;rk=2&amp;uid=329365019&amp;sid=2&amp;ts=c2&amp;rsc=VhFXw96TgCvMBxxZ&amp;ed=edn%5f51852&amp;method=and&amp;filter=entity%5fid%3a51852%20dtype%3aarticle&amp;ed=edn%5f51852&amp;af=%20dtype%3aarticle%20%20cat2%5fantispamcontentfilteringandvirusprotection%3a51852%20%20cat1%3aantispamcontentfilteringandvirusprotection%20&amp;isort=score">manuelle Deinstallation</a>.</li>
<li>Nicht versucht habe ich das Norton Removal Tool, dass es auch gibt.</li>
</ul>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2008/11/19/kennwortabfrage-bei-der-deinstallation-der-symantec-corporate-edition-10/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>VS Tipps &amp; Tricks: Heap Bugs finden (Teil 1)</title>
		<link>http://blog.m-ri.de/index.php/2008/10/27/vs-tipps-tricks-heap-bugs-finden-teil-1/</link>
		<comments>http://blog.m-ri.de/index.php/2008/10/27/vs-tipps-tricks-heap-bugs-finden-teil-1/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 21:47:21 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[ATL]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[CRT]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS-Tipps&Tricks]]></category>
		<category><![CDATA[Debuggen]]></category>
		<category><![CDATA[Heap]]></category>
		<category><![CDATA[WinAPI]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=351</guid>
		<description><![CDATA[Probleme finden, die mit dem Heap zusammenhängen ist oft genug eine Sache für sich und für Anfänger nicht selten ein Buch mit sieben Siegeln. Die CRT und der Debugger stellen aber einige Werkzeuge zur Verfügung, die es einem doch mit etwas Geschick und Wissen erlauben auch komplexere versteckte Fehler zu finden, die Heapfehler auslösen. Jeder C/C++ [...]]]></description>
			<content:encoded><![CDATA[<p>Probleme finden, die mit dem Heap zusammenhängen ist oft genug eine Sache für sich und für Anfänger nicht selten ein Buch mit sieben Siegeln. Die CRT und der Debugger stellen aber einige Werkzeuge zur Verfügung, die es einem doch mit etwas Geschick und Wissen erlauben auch komplexere versteckte Fehler zu finden, die Heapfehler auslösen.</p>
<p>Jeder C/C++ Entwickler hat schon Meldungen dieser Art beim Testen seiner Programme gesehen:</p>
<blockquote><p>HEAP[CrashTest.exe]: Heap block at 006D7920 modified at 006D79B0 past requested size of 88<br />
Windows has triggered a breakpoint in CrashTest.exe.<br />
This may be due to a corruption of the heap, which indicates a bug in CrashTest.exe or any of the DLLs it has loaded. </p></blockquote>
<p>oder etwas in dieser Art:</p>
<blockquote><p>Debug Error!<br />
Program: &#8230;nts\Visual Studio 2008\Projects\CrashTest\Debug\CrashTest.exe<br />
HEAP CORRUPTION DETECTED: after Normal block (#110) at 0x000D7948.<br />
CRT detected that the application wrote to memory after end of heap buffer.</p></blockquote>
<p>Ursache ist ein Fehler wie in diesem kleinen Beispielprogramm:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;windows.h&gt;</span>
<span style="color: #339900;">#include &lt;tchar.h&gt;</span>
<span style="color: #339900;">#include &lt;crtdbg.h&gt;</span>
<span style="color: #0000ff;">int</span> _tmain<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, _TCHAR<span style="color: #000040;">*</span> argv<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> 
<span style="color: #008000;">&#123;</span> 
  <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>pCorrupt <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> <span style="color: #0000ff;">char</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">100</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
  ZeroMemory<span style="color: #008000;">&#40;</span>pCorrupt,<span style="color: #0000dd;">106</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// -- This will corrupt the heap </span>
  <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>pOther <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> <span style="color: #0000ff;">char</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">100</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> 
  ZeroMemory<span style="color: #008000;">&#40;</span>pOther,<span style="color: #0000dd;">100</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
  <span style="color: #0000dd;">delete</span> <span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> pOther<span style="color: #008080;">;</span> 
  <span style="color: #0000dd;">delete</span> <span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> pCorrupt<span style="color: #008080;">;</span> 
  <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> 
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Wenn die Debug-CRT benutzt wird erhält man automatisch einen Break im Debugger wenn der Speicherblock pCorrupt freigeben wird (Zeile 11). Man braucht also nur den Call-Stack oder Stacktrace anzusehen und kann zumindest feststellen, welcher Block defekt ist.</p>
<p>Schwieriger wird es dann schon die Stelle zu finden, an der der Block überschrieben wird. In meinem Beispiel also die Zeile 7. Besonders dann wird es komplex, wenn das Programm größer ist, und der Speicherblock an evtl. sehr vielen Stellen genutzt wird.</p>
<p>Um die Position einzugrenzen und nicht evtl. bis zum Programmende warten zu müssen, wenn man (hoffentlich) alle Objekte freigibt kann man die CRT veranlassen den Heap zu prüfen. Dies geschieht mit <a href="http://msdn.microsoft.com/en-us/library/e73x0s4b.aspx">_CrtCheckMemory </a>oder <a href="http://msdn.microsoft.com/en-us/library/y1132dee(VS.80).aspx">AfxCheckMemory</a>.<br />
Streut man also in seinem Code an strategisch guten Stellen das folgende Statement in seinen Code</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">ASSERT<span style="color: #008000;">&#40;</span>AfxCheckMemory<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// oder _CrtCheckMemory</span></pre></div></div>

<p>kann man relativ gut die Stelle einkreisen die den Fehler verursacht, und das ohne große Performanceverluste. Man erhält sofort einen <em>ASSERT</em>, ab dem Moment ab dem die Integrität des Heaps zerstört wurde und der Check durchgeführt wird.</p>
<p>Noch etwas einfacher ist es, die CRT dazu zu bringen sich sofort zu melden wenn der Heap zerstört wird. Dies kann man erreichen indem man das Debug-Flag <em>_CRTDBG_CHECK_ALWAYS_DF</em> setzt.</p>
<p>Platziert man bei Programmstart die folgende Codezeile in seinem Programm</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">_CrtSetDbgFlag<span style="color: #008000;">&#40;</span>_CrtSetDbgFlag<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">|</span>_CRTDBG_CHECK_ALWAYS_DF<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>dann unterbricht die <em>CRT </em>das Programm sofort bei der nächsten Allokation eines Speicherbocks, nachdem der Heap zerstört wurde. In meinem Beispiel also direkt bei der nächsten Allokation in Zeile 8!<br />
Nachteil ist, dass bei jeder Allokation der Heap geprüft wird und damit die Performance schon in den Keller gehen kann, wenn das Programm groß ist und der Fehler evtl. selten auftritt.</p>
<p>Man kann also mit den einfachen Bordmitteln der CRT einen Fehler schon relativ leicht eingrenzen.</p>
<p>Soweit für heute. Was man noch alles machen kann um effektiv Heap-Fehler zu finden werde ich demnächst noch in weiteren Artikeln zu diesem Thema beschreiben.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2008/10/27/vs-tipps-tricks-heap-bugs-finden-teil-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Kleiner Workarround für MFCNext in Verbindung mit CScrollView</title>
		<link>http://blog.m-ri.de/index.php/2008/10/19/kleiner-workarround-fuer-mfcnext-in-verbindung-mit-cscrollview/</link>
		<comments>http://blog.m-ri.de/index.php/2008/10/19/kleiner-workarround-fuer-mfcnext-in-verbindung-mit-cscrollview/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 17:50:09 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[VS-2008]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=331</guid>
		<description><![CDATA[Wenn man die BCG-Library oder MFCNext aus der VC++ 9.0 SP1 nutzt erhält man einen ASSERT wenn man ein CScrollView verwendet und wenn das Programm maximiert gestartet wird. &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Microsoft Visual C++ Debug Library &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Debug Assertion Failed! Program: &#8230;\Debug\TestSDIScrollView.exe File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\viewscrl.cpp Line: 385 For information on how your program can cause an assertion failure, see [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man die <em>BCG</em>-Library oder <em>MFCNext </em>aus der VC++ 9.0 SP1 nutzt erhält man einen <em>ASSERT </em>wenn man ein <em>CScrollView </em>verwendet und wenn das Programm maximiert gestartet wird.</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Microsoft Visual C++ Debug Library<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Debug Assertion Failed!</p>
<p>Program: &#8230;\Debug\TestSDIScrollView.exe<br />
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\viewscrl.cpp<br />
Line: 385</p>
<p>For information on how your program can cause an assertion<br />
failure, see the Visual C++ documentation on asserts.</p>
<p>(Press Retry to debug the application)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Abbrechen   Wiederholen   Ignorieren  <br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p></blockquote>
<p>Der Grund liegt darin, dass in der <em>MFCNext </em>Implementierung schon sehr früh ein <em>RedrawWindow </em>ausgeführt wird wenn das Main Window maximiert wird. In diesem Fall wird <em>OnDraw</em>/<em>OnPaint </em>bereits ausgeführt wenn <em>SetScrollSizes</em> noch nicht aufgerufen wurde. Das geschieht ja normalerweise meistens erst in <em>OnInitialUpdate</em>.<br />
Dieser ASSERT soll dem Programmierer darauf hinweisen, dass <em>SetScrollSizes </em>unabdingbar für die korrekte Funktion des <em>CScrollView </em>notwendig ist.<br />
Leider ist in diesem alten Code ein Seiteneffekt nicht berücksichtigt worden, der durch <em>MFCNext </em>in Spiel kam.</p>
<p>Das Ganze lässt sich jedoch einfach umschiffen indem man im Konstruktor seines Views vorab <em>SetScrollSizes </em>mit Dummywerten aufruft. Die eigentliche Initialisierung mag dann später wie gewohnt in <em>OnInitialUpdate</em> erfolgen.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">CScriptEditorView<span style="color: #008080;">::</span><span style="color: #007788;">CScriptEditorView</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #666666;">// If the program is launched maximized, a RedrawWindow occurs in a very</span>
  <span style="color: #666666;">// early stage and OnDraw would be called without an initialized mapping mode</span>
  <span style="color: #666666;">// So we just do a dummy init here.</span>
  SetScrollSizes<span style="color: #008000;">&#40;</span>MM_TEXT,CSize<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2008/10/19/kleiner-workarround-fuer-mfcnext-in-verbindung-mit-cscrollview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Über was es nicht alles RFCs gibt</title>
		<link>http://blog.m-ri.de/index.php/2008/09/17/ueber-was-es-nicht-alles-rfcs-gibt/</link>
		<comments>http://blog.m-ri.de/index.php/2008/09/17/ueber-was-es-nicht-alles-rfcs-gibt/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 18:24:23 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[RFC]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=324</guid>
		<description><![CDATA[Durch Zufall bin auf diesen uralten RFC aus dem Jahre 1996 gestoßen. Man beachte das Datum der Veröffentlichung! http://www.apps.ietf.org/rfc/rfc1925.html Besonders stark finde ich Abschnitt (3) bzgl. der fliegenden Schweine BTW: Eine Liste aller 1. April RFCs gibt es hier http://www.apps.ietf.org/rfc/apr1list.html Copyright &#169; 2010 Martin RichterDieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. [...]]]></description>
			<content:encoded><![CDATA[<p>Durch Zufall bin auf diesen uralten RFC aus dem Jahre 1996 gestoßen.<br />
Man beachte das Datum der Veröffentlichung!<br />
<a href="http://www.apps.ietf.org/rfc/rfc1925.html">http://www.apps.ietf.org/rfc/rfc1925.html</a></p>
<p>Besonders stark finde ich Abschnitt (3) bzgl. der fliegenden Schweine <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>BTW: Eine Liste aller 1. April RFCs gibt es hier<br />
<a href="http://www.apps.ietf.org/rfc/apr1list.html">http://www.apps.ietf.org/rfc/apr1list.html</a></p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2008/09/17/ueber-was-es-nicht-alles-rfcs-gibt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

