<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" >
<channel>
    
    <title>jtb.blog - Coding</title>
    <link>http://blog.jensthebrain.de/</link>
    <description>Ein Blog für Technikverliebte, Linux/Windows-Befürworter usw..</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.6 - http://www.s9y.org/</generator>
    <managingEditor>webmaster@jensthebrain.de</managingEditor>
<webMaster>webmaster@jensthebrain.de</webMaster>
<pubDate>Mon, 02 Feb 2009 21:19:47 GMT</pubDate>

    <image>
        <url>http://blog.jensthebrain.de/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: jtb.blog - Coding - Ein Blog für Technikverliebte, Linux/Windows-Befürworter usw..</title>
        <link>http://blog.jensthebrain.de/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Beta-Prüfungen - dotnet</title>
    <link>http://blog.jensthebrain.de/archives/2009/02/02/Beta-Pruefungen-dotnet</link>
            <category>dotNet</category>
            <category>Microsoft</category>
    
    <comments>http://blog.jensthebrain.de/archives/2009/02/02/Beta-Pruefungen-dotnet#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=675</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=675</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Mittlerweile sind die Ergebnisse für zwei Beta-Exams da. Die Prüfungen 071-505 und 071-563 habe ich bestanden &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; Somit bin ich eine Prüfung vom &quot;Microsoft Certified Professional Developer (MCPD): Windows Developer 3.5&quot; entfernt.&lt;br /&gt;
Also steht demnächst 70-536 an.. Die Prüfung ist quasi der Grundlagen-Teil, der somit kein Problem sein sollte. Außerdem behandelt es den Stoff von dotnet 2.0..&lt;br /&gt;
Jetzt habe ich für &lt;a href=&quot;http://blog.jensthebrain.de/archives/2009/01/28/Qual-der-Wahl&quot;&gt;einen Voucher mehr&lt;/a&gt; Verwendung &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  
    </content:encoded>

    <pubDate>Mon, 02 Feb 2009 22:19:47 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2009/02/02/675</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>dotNet</category>
<category>Microsoft</category>

</item>
<item>
    <title>Aus Fehlern lernen</title>
    <link>http://blog.jensthebrain.de/archives/2009/01/31/Aus-Fehlern-lernen</link>
            <category>Coding</category>
    
    <comments>http://blog.jensthebrain.de/archives/2009/01/31/Aus-Fehlern-lernen#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=671</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=671</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Manchmal kann man sich wirklich nur an den Kopf fassen..&lt;br /&gt;
&lt;br /&gt;
Problemstellung: Fehlerrückmeldungen von MSSQL auslesen und entsprechend handeln.&lt;br /&gt;
&lt;br /&gt;
Lösung: auf den Text &quot;Eine vorhandene Verbindung wurde vom Remotehost geschlossen&quot; prüfen.&lt;br /&gt;
&lt;br /&gt;
Da kann man schon diskutieren.. Aber dann später merken, dass es auch englische Meldungstexte gibt und die Fehlerbehandlung umbauen, so dass auch &quot;An existing connection was forcibly closed by the remote host&quot; erkannt wird - ohne Worte.  
    </content:encoded>

    <pubDate>Sat, 31 Jan 2009 18:25:33 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2009/01/31/671</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>

</item>
<item>
    <title>Overnight Contest an der FH</title>
    <link>http://blog.jensthebrain.de/archives/2008/05/25/Overnight-Contest-an-der-FH</link>
            <category>Coding</category>
            <category>Games</category>
    
    <comments>http://blog.jensthebrain.de/archives/2008/05/25/Overnight-Contest-an-der-FH#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=610</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=610</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Bei uns am &lt;a href=&quot;http://www.fbi.h-da.de&quot;&gt;Fachbereich Informatik&lt;/a&gt; findet gerade der &lt;a href=&quot;http://www.0x10h.de&quot;&gt;Overnight Contest&lt;/a&gt; statt - veranstaltet von einem ehemaligen Studenten. Aufgabe ist es im Team über Nacht ein komplettes Spiel zu programmieren.&lt;br /&gt;
Den Teil Overnight haben die Teilnehmer jetzt hinter sich und die ersten Resultate sehen vielversprechend aus.&lt;br /&gt;
&lt;br /&gt;
Mein Favorit ist derzeit ein Bomberman-Clon. Nichts besonderes? Doch: diese Implementierung läuft im Browser über JavaScript und bietet Multiplayersupport über einen selbstgeschriebenen Webserver in Perl.  
    </content:encoded>

    <pubDate>Sun, 25 May 2008 11:34:59 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2008/05/25/610</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Games</category>

</item>
<item>
    <title>Bug in der dotnet RichTextBox?</title>
    <link>http://blog.jensthebrain.de/archives/2007/09/14/Bug-in-der-dotnet-RichTextBox</link>
            <category>dotNet</category>
    
    <comments>http://blog.jensthebrain.de/archives/2007/09/14/Bug-in-der-dotnet-RichTextBox#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=561</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=561</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Ich glaube, ich bin da auf einen echten Bug im dotnet Framework gestoßen. Wenn man die ReadOnly Property von False auf True wechselt, ändert sich zwar auch die Property BackColor (klar, die Box soll ja grau werden um den Benutzer zu zeigen, dass er da nichts tippen kann) aber die visuelle Darstellung auf dem Display ändert sich nicht. Interessanterweise ist die Darstellung korrekt nachdem man einfach die Windows-Sitzung sperrt (Windows-Taste + L) und sich dann wieder anmeldet.&lt;br /&gt;
Jetzt bin ich mal gespannt, wie Microsoft auf meinen Support-Call reagiert. Reproduziert werden konnte das Verhalten vom Support-Techniker schon..&lt;br /&gt;
&lt;br /&gt;
Aber diese Fehler wurde auch schon mal &lt;a href=&quot;https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=263959&quot;  title=&quot;Früherer Fehlereintrag zu dem Problem&quot;&gt;vor ein paar Monaten gemeldet&lt;/a&gt; und reproduziert &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  
    </content:encoded>

    <pubDate>Fri, 14 Sep 2007 22:09:02 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2007/09/14/561</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>dotNet</category>

</item>
<item>
    <title>Fehlerbehebung</title>
    <link>http://blog.jensthebrain.de/archives/2007/08/24/Fehlerbehebung</link>
            <category>Coding</category>
    
    <comments>http://blog.jensthebrain.de/archives/2007/08/24/Fehlerbehebung#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=547</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=547</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Ich weiß manchmal einfach nicht, wie manche Entwickler drauf sind.&lt;br /&gt;
&lt;br /&gt;
Wenn ich eine einfache Software von einer Homepage runterlade, dann kann ich doch erwarten, dass jeder Fehler der bekannt ist und behoben werden konnte auch in dem Download schon gefixt ist.&lt;br /&gt;
&lt;br /&gt;
Komischerweise sehen das manche anders: der Download auf der Projekt-Seite ist fehlerhaft und im Forum steht dann die neue Version.&lt;br /&gt;
Aber anstatt den Download zu fixen kommt als Kommentar:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;QUOTE:&lt;/div&gt;&lt;div class=&quot;bb-quote&quot;&gt;Use the converter file from this topic.  The one on the download page are out of date.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Was soll das? &lt;br /&gt;
Ich kann ja verstehen, dass man manchmal eine Zwischenversion bauen will, aber dann gehört zum einen ein Hinweis darauf direkt unter den Download-Link oder in die Doku. Zum anderen sind über acht Monate reichlich Zeit um einen neuen Converter rauszubringen.  
    </content:encoded>

    <pubDate>Fri, 24 Aug 2007 17:32:08 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2007/08/24/547</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>

</item>
<item>
    <title>Dokumentation ohne Sinn - Teil 1</title>
    <link>http://blog.jensthebrain.de/archives/2007/04/24/Dokumentation-ohne-Sinn-Teil-1</link>
            <category>dotNet</category>
    
    <comments>http://blog.jensthebrain.de/archives/2007/04/24/Dokumentation-ohne-Sinn-Teil-1#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=519</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=519</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Das passiert, wenn man eine Dokumentationspflicht hat:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;
    /// Konstruktor ohne Parameter. Ist Private.&lt;br /&gt;
    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
    private AnsichtTree()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;/blockquote&gt;  
    </content:encoded>

    <pubDate>Tue, 24 Apr 2007 16:56:02 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2007/04/24/519</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>dotNet</category>

</item>
<item>
    <title>Migration mod_fastcgi -&gt; mod_fcgid</title>
    <link>http://blog.jensthebrain.de/archives/2007/02/13/Migration-mod_fastcgi-mod_fcgid</link>
            <category>PHP</category>
    
    <comments>http://blog.jensthebrain.de/archives/2007/02/13/Migration-mod_fastcgi-mod_fcgid#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=497</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=497</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Nachdem Gentoo so freundlich war mod_fastcgi aus Portage zu schmeissen, habe ich vor ein paar Tagen mich endlich mal hingesetzt und den &quot;Nachfolger&quot; mod_fcgid zu installieren.&lt;br /&gt;
Aber irgendwie bin ich nicht so glücklich. Zum einen ist die &lt;a href=&quot;http://fastcgi.coremail.cn/doc.htm&quot;&gt;Doku&lt;/a&gt; nicht gerade berauschend (hey, ich bin Doku im Stil von Apache httpd gewöhnt und erwarte auch solche) und zum anderen habe ich das Gefühl, dass jetzt php-Instanzen nicht aufgeräumt werden wenn sie länger nicht gebraucht wurden.&lt;br /&gt;
Früher liefen einfach wesentlich weniger Instanzen - jetzt laufen immer über 100 Instanzen und somit ist die RAM-Situation auch ein wenig angespannter &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Ich glaube, da muss ich irgendwo noch am richtigen Parameter drehen - aber an welchem? &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  
    </content:encoded>

    <pubDate>Tue, 13 Feb 2007 03:57:46 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2007/02/13/497</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>PHP</category>

</item>
<item>
    <title>Webtasks</title>
    <link>http://blog.jensthebrain.de/archives/2007/02/09/Webtasks</link>
            <category>Hacking</category>
            <category>Java</category>
            <category>Studium</category>
    
    <comments>http://blog.jensthebrain.de/archives/2007/02/09/Webtasks#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=494</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=494</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Meine ehemalige Uni hat ein nettes System im Probebetrieb gestartet: &lt;a href=&quot;http://webtasks.informatik.tu-darmstadt.de/webtasks/index.jsp&quot;&gt;Webtasks&lt;/a&gt;&lt;br /&gt;
Idee hinter dem System ist, dass angehende Stundenten kleine Programmieraufgaben und Wissenstests online lösen können. Zwar noch stellenweise recht buggy, aber vom Ansatz her wirklich geil.&lt;br /&gt;
&lt;br /&gt;
Interessant für fortgeschrittene Programmierer ist hierbei die eingehende Analyse des System bzw der Absicherung &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
Viel Spaß beim Lesen der folgenden Seiten &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; Bei den ersten Aufgaben bekommt man auf der Weboberfläche immer die Möglichkeit den Methodenrumpf einzugeben - Anfang und Ende der Methode ist vorgegeben.&lt;br /&gt;
Nachdem man also seinen Sourcecode eingeben hat, fällt schnell einiges auf:&lt;br /&gt;
&lt;br /&gt;
Die Entwickler von Webtasks haben das Schlüsselwort &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html&quot;&gt;System&lt;/a&gt; gesperrt. Somit fallen viele schädliche Funktionen wie beispielsweise &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#exit(int)&quot;&gt;exit(int)&lt;/a&gt; weg. Aber leider auch echt nützliche Funktionen wie &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#arraycopy(java.lang.Object,%20int,%20java.lang.Object,%20int,%20int)&quot;&gt;arraycopy&lt;/a&gt; &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Aber als erfahrener Sicherheitsspezialist sollte man wissen, dass ein &lt;a href=&quot;http://en.wikipedia.org/wiki/Secure_input_and_output_handling&quot;&gt;Sperren von Usereingaben&lt;/a&gt; aufgrund einer Blacklist immer aufwändig und häufig fehlerhaft ist.&lt;br /&gt;
&lt;br /&gt;
So bietet sich dank Reflection ein Weg trotzdem auf alle System-Funktionen zuzugreifen:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;try&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;Class&amp;#160;c&amp;#160;=&amp;#160;Class.forName&amp;#40;&quot;java.lang.System&quot;&amp;#41;;&lt;br /&gt;
}&lt;br /&gt;
catch&amp;#160;&amp;#40;Exception&amp;#160;e&amp;#41;&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;//&amp;#160;Errorhandling&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Aber es wurden so auch nette Klassen wie beispielsweise &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runtime.html&quot;&gt;Runtime&lt;/a&gt; übersehen, vergessen oder ignoriert &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Übernahme des Servers wird aber vom strikt eingestellten &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/lang/SecurityManager.html&quot;&gt;SecurityManager&lt;/a&gt; verhindert - jeglicher Zugriff auf Kommandos, Dateizugriffe allgemein sowie Sockets ist gesperrt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aber es gibt ja noch mehr Optionen zu &quot;stören&quot;. Beispielsweise alle Rechenzeit durch eine Endlosschleife bzw Rekursion ohne Abbruchbedindung aufzubrauchen. Ein Verbrauch der Speicherressourcen ist erstmal nicht möglich da die Java-VM  beim Starten feste Speichergrenzen übergeben bekommen hat.&lt;br /&gt;
Bei den ersten Versuchen zeigt sich, dass die eingesetzten Java-Unittests Zeitlimits gesetzt haben - eine Endlosschleife wird nach 30 Sekunden abgebrochen. Auch eine simple Rekursion wird entdeckt und verhindert: &quot;Rekursiver Aufruf verboten!&quot;&lt;br /&gt;
&lt;br /&gt;
Da erstmal nicht klar ist, wie die Rekursion entdeckt wird (der gesamte Sourcecode liegt ja nicht vor - mehr dazu aber später), kann man einfach eine s.g. unchecked Exception werfen und sich über die Ausgabe des Compilers freuen: &lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;|&amp;#42;Append.java&amp;#58;53&amp;#58;&amp;#160;unreachable&amp;#160;statement&amp;#42;&lt;br /&gt;
		semaphore&amp;#160;=&amp;#160;false;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;^&lt;br /&gt;
1&amp;#160;error&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Ah, eine &lt;a href=&quot;http://de.wikipedia.org/wiki/Semaphor_%28Informatik%29&quot;&gt;Semaphore&lt;/a&gt; &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
Und wir wissen nun nicht nur den Dateinamen sondern auch noch den Variablenname der Semaphore sowie der Type &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Also können wir die Rekursionssperre einfach außer Kraft setzen - vor dem rekursiven Aufruf setzt man einfach semaphore auf false. Der Wille wurde gezeigt, aber wirklich ernst muss man diese Sperre nicht nehmen &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Aber viel besser wird es, wenn man bemerkt, dass die Eingabe nicht auf den Methodenrumpf eingeschränkt ist. Man kann die vorgegebene Methode einfach per geschweifte Klammer schließen und eine neue Methode anfangen. Somit ist die vorgegebene Rekursionssperre endgültig sinnlos - immerhin wirkt sie nur auf eine Methode &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Da das System scheinbar noch im Beta-Status ist, gibt es einige Aufgaben die nicht korrekt funktionieren. Durch einen Glücksfall gibt es eine &lt;a href=&quot;http://webtasks.informatik.tu-darmstadt.de/webtasks/uploadsolution.jsp?taskid=109&quot;&gt;Aufgabe&lt;/a&gt;, die den Sourcecode ausspuckt: &lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;01&amp;#160;/&amp;#42;&amp;#42;hide&amp;#42;&amp;#42;/public&amp;#160;class&amp;#160;Rotate_Right&amp;#160;{&lt;br /&gt;
02&amp;#160;&lt;br /&gt;
03&amp;#160;&amp;#160;&amp;#160;private&amp;#160;static&amp;#160;boolean&amp;#160;&amp;#160;semaphore&amp;#160;&amp;#160;=&amp;#160;false;&lt;br /&gt;
04&amp;#160;&lt;br /&gt;
05&amp;#160;&amp;#160;&amp;#160;public&amp;#160;static&amp;#160;void&amp;#160;main&amp;#40;String&amp;#91;&amp;#93;&amp;#160;args&amp;#41;&amp;#160;{&lt;br /&gt;
06&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;int&amp;#91;&amp;#93;&amp;#160;input&amp;#160;=&amp;#160;{&amp;#160;0,&amp;#160;1,&amp;#160;2,&amp;#160;3,&amp;#160;4,&amp;#160;5&amp;#160;};&lt;br /&gt;
07&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;int&amp;#160;steps&amp;#160;=&amp;#160;2;&lt;br /&gt;
08&amp;#160;&lt;br /&gt;
09&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//&amp;#160;Test&lt;br /&gt;
10&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printArray&amp;#40;&quot;Input&amp;#58;&amp;#160;&quot;,&amp;#160;input&amp;#41;;&lt;br /&gt;
11&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.out.println&amp;#40;&quot;Input&amp;#58;&amp;#160;&quot;&amp;#160;+&amp;#160;steps&amp;#41;;&lt;br /&gt;
12&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printArray&amp;#40;&quot;Output&amp;#58;&amp;#160;&quot;,&amp;#160;studentsMethod&amp;#40;input,&amp;#160;steps&amp;#41;&amp;#41;;&lt;br /&gt;
13&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
14&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
15&amp;#160;&amp;#160;&amp;#160;public&amp;#160;static&amp;#160;int&amp;#91;&amp;#93;&amp;#160;demoMethod&amp;#40;int&amp;#91;&amp;#93;&amp;#160;array_in,&amp;#160;final&amp;#160;int&amp;#160;steps&amp;#41;&amp;#160;{&lt;br /&gt;
16&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//&amp;#160;sempahore&amp;#160;lock&lt;br /&gt;
17&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if&amp;#160;&amp;#40;semaphore&amp;#160;==&amp;#160;false&amp;#41;&lt;br /&gt;
18&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;semaphore&amp;#160;=&amp;#160;true;&lt;br /&gt;
19&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;else&amp;#160;{&lt;br /&gt;
20&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.out.println&amp;#40;&quot;Rekursiver&amp;#160;Aufruf&amp;#160;verboten!&quot;&amp;#41;;&lt;br /&gt;
21&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return&amp;#160;null;&lt;br /&gt;
22&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
....&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Hier erkennt man nochmal deutlich, dass die Semaphore nutzlos ist.&lt;br /&gt;
&lt;br /&gt;
Aber dennoch bringt uns die Rekursion nicht weiter - das System verträgt das ohne weiteres. Aber die Spielkiste hat ja noch mehr zu bieten. Analysieren wir zuerst wie die Unittests nach 30 Sekunden abgebrochen werden und versuchen ein Thread.sleep(1000000);&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;ZEITÜBERSCHREITUNG&amp;#58;&lt;br /&gt;
Der&amp;#160;Test&amp;#160;wurde&amp;#160;nach&amp;#160;30&amp;#160;Sekunden&amp;#160;automatisch&amp;#160;abgebrochen,&amp;#160;da&amp;#160;seine&amp;#160;Ausführung&amp;#160;zu&amp;#160;lange&amp;#160;dauerte.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Ok, der Unittest holt sich also den Thread und beendet ihn einfach. Aber wie sieht es mit einem Thread aus? Dank anonymen  Threads ist die schnelle Erzeugung kein Problem:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;new&amp;#160;Thread&amp;#40;new&amp;#160;Runnable&amp;#40;&amp;#41;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;public&amp;#160;void&amp;#160;run&amp;#40;&amp;#41;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;try&amp;#160;{&lt;br /&gt;
int&amp;#160;i&amp;#160;=&amp;#160;0;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;while&amp;#160;&amp;#40;true&amp;#41;&amp;#160;{&lt;br /&gt;
i++;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;catch&amp;#40;Exception&amp;#160;ex&amp;#41;&amp;#160;{}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;}&amp;#41;.start&amp;#40;&amp;#41;;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Und schon wird nichts mehr abgebrochen und der Webbrowser lädt Ewigkeiten &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Fazit&lt;/strong&gt;: externen Java-Code zu kompilieren und auszuführen kann unschön werden. Nur ein sinnvoll gesetzer Sicherheitsmanager schützt dann den Server vor einem Angreifer. Wer böswillig Ressourcen verbrauchen will, schafft dieses wenn keine zusätzlichen Sicherheitsmaßnahmen getroffen werden. Ein Blacklisten der Benutzereingaben wird sehr wahrscheinlich leicht umgangen werden können bzw müsste sehr umfangreich sein.&lt;br /&gt;
Externer Benutzercode sollte in einer eigenen Klasse gesetzt werden. Ansonsten sind Sicherheitsmechanismen in derselben Klasse aufgrund fehlender Sicherheit nutzlos. 
    </content:encoded>

    <pubDate>Fri, 09 Feb 2007 22:34:11 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2007/02/09/494</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Hacking</category>
<category>Java</category>
<category>Studium</category>

</item>
<item>
    <title>Generics - mühsame Umstellung</title>
    <link>http://blog.jensthebrain.de/archives/2007/01/11/Generics-muehsame-Umstellung</link>
            <category>dotNet</category>
    
    <comments>http://blog.jensthebrain.de/archives/2007/01/11/Generics-muehsame-Umstellung#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=468</wfw:comment>

    <slash:comments>19</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=468</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    &lt;a href=&quot;msdn.microsoft.com/library/en-us/dnvs05/html/csharp_generics.asp?frame=true&quot;&gt;Generics in C#&lt;/a&gt; sind eine schöne Sache. Wenn man jedoch ein altes Projekt auf Generics umstellen will, merkt man schnell, dass das einige Arbeit ist.&lt;br /&gt;
Zwar kann eine Klasse erheblich schrumpfen (extremes Beispiel: von 294 Zeilen auf 40 runter), aber dafür muss man erstmal feststellen, welche Methode jetzt rausfliegen kann. Gerade wenn es dann um Sichtbarkeiten bei abgeleiteten Klassen geht, muss man ständig nachschauen &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Größtes Manko was mich jetzt in C# noch stört: keine Covariant return types...  
    </content:encoded>

    <pubDate>Thu, 11 Jan 2007 20:08:31 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2007/01/11/468</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>dotNet</category>

</item>
<item>
    <title>Versionsverwaltung</title>
    <link>http://blog.jensthebrain.de/archives/2006/12/22/Versionsverwaltung</link>
            <category>Coding</category>
            <category>Internet</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/12/22/Versionsverwaltung#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=455</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=455</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Es ist doch wirklich immer wieder dasselbe. Irgendwie können Entwickler nicht mehr Versionen umgehen.&lt;br /&gt;
&lt;br /&gt;
Sei es nun ein Addon für World of Warcraft - hier im Beispiel &lt;a href=&quot;http://www.ctmod.net/&quot;&gt;CTRaidAssist&lt;/a&gt; oder ein CMS wie &lt;a href=&quot;http://www.joomla.org/&quot;&gt;Joomla&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
CTRA: es wurden immer neue Updates rausgebracht ohne die Version zu erhöhen. Aktueller Stand ist Version 1.621 Update 8. Einfach überprüfen wer seine Version nicht aktualisiert hat (zum Beispiel mit /raversion) ist damit nicht möglich &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Joomla: die aktuelle stabile Version ist 1.0.11 - veröffentlicht am 28.08.2006. Diese Version enthält aber einen Bug, dass man Mambots nicht editieren kann. Der &lt;a href=&quot;http://forum.joomla.org/index.php/topic,89866.msg455550.html#msg455550&quot;&gt;Hotfix ist im Forum&lt;/a&gt; seit dem 29.08.2006 zu finden..&lt;br /&gt;
&lt;br /&gt;
Aber neue Version: keine Spur. Eigentlich wollte ich Joomla mal ausprobieren, aber das versaut mir gleich schon die Freunde am System (ohne Modifikation am Mambot ist der Editor nicht benutzbar wenn man ein Theme mit schwarzem Hintergrund benutzt). Als Einstieger in ein neues System braucht man dann ein weniger länger um sowas zu finden.. In meinen Augen quasi verschwendete Zeit. Das dann auch noch der Hotfix nur für registrierte Benutzer verfügbar ist, ist nur das i-Tüpfelchen &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Update: es geht immer weiter. Gerade wollte ich &lt;a href=&quot;http://www.wowroster.net&quot;&gt;WoWRoster&lt;/a&gt; installieren. Die Version 1.7.1 kam am 4 Juli 2006 raus und wurde am 22 Oktober nochmal aktualisiert. Im &lt;a href=&quot;http://www.wowroster.net/Downloads/details/id=3.html&quot;&gt;Downloadbereich dieser Version&lt;/a&gt; steht schon extra fett: &quot;Don&#039;t forget to check up on any patches for WoWRoster!&quot;. Im Forum muss man sich dann durch fünf &quot;Patches&quot; durchklicken und diese installieren..  
    </content:encoded>

    <pubDate>Fri, 22 Dec 2006 01:27:23 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/12/22/455</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Internet</category>

</item>
<item>
    <title>Thunderbird löscht ungefragt Mails</title>
    <link>http://blog.jensthebrain.de/archives/2006/11/24/Thunderbird-loescht-ungefragt-Mails</link>
            <category>Coding</category>
            <category>Internet</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/11/24/Thunderbird-loescht-ungefragt-Mails#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=434</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=434</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Ich habe vor zwei Tagen eine Mail in Thunderbird vermisst und jetzt darf ich bei &lt;a href=&quot;http://www.heise.de/newsticker/meldung/81529&quot;&gt;Heise lesen, dass Thunderbird ungefragt Mails löscht&lt;/a&gt; &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Hier das Problem bei mir - eine Mail scheint zu fehlen:&lt;br /&gt;
&lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-ordnerinhalt.PNG&quot; title=&quot;Thunderbird Bug - Ordnerinhalt&quot;&gt;&lt;img id=&quot;image559&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-ordnerinhalt.PNG&quot; alt=&quot;Thunderbird Bug - Ordnerinhalt&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nach der Mail anhand des Betreffs sucht, wird sie gefunden:&lt;br /&gt;
&lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-suche.PNG&quot; title=&quot;Thunderbird Bug - Suche&quot;&gt;&lt;img id=&quot;image560&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-suche.PNG&quot; alt=&quot;Thunderbird Bug - Suche&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem ich die MSF-Datei gelöscht habe, funktioniert der Ordnerinhalt wieder..&lt;br /&gt;
&lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-nach-loschen-der-msf-datei.PNG&quot; title=&quot;Thunderbird Bug - Nach Löschen der msf-Datei&quot;&gt;&lt;img id=&quot;image561&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-nach-loschen-der-msf-datei.PNG&quot; alt=&quot;Thunderbird Bug - Nach Löschen der msf-Datei&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Im Bugreport wird leider immer nur von Yahoo-Group-Mails geschrieben. In diesem Ordner liegen aber keine Yahoogroup-Mails und die letzte Mail von einem Yahoo-Absender stammt von 2005..&lt;br /&gt;
&lt;br /&gt;
Aber die Tatsache, dass der Bug nicht sofort gefixt werden soll, stimmt mich irgendwie trauig. Als Entwickler muss man doch ein Gefühl dafür haben, dass kein Benutzer Daten verlieren will.  
    </content:encoded>

    <pubDate>Fri, 24 Nov 2006 12:12:03 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/11/24/434</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Internet</category>

</item>
<item>
    <title>Seid freundlicher zu den Maschinen und auszulieferender heißer Kaffee</title>
    <link>http://blog.jensthebrain.de/archives/2006/09/24/Seid-freundlicher-zu-den-Maschinen-und-auszulieferender-heisser-Kaffee</link>
            <category>Internet</category>
            <category>Java</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/09/24/Seid-freundlicher-zu-den-Maschinen-und-auszulieferender-heisser-Kaffee#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=381</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=381</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Sowas müssen sich die Leute gedacht haben, die sich die Konfigurationsstruktur von Tomcat ausgedacht haben.&lt;br /&gt;
Die ganze Konfiguration baut auf XML auf (solange eine Anwendung sich nicht denkt, weitere Einstellungen über eine Properties-Datei zu machen). Eigentlich eine nette Idee - so kann der Server die Datei leichter parsen. Nur für den Menschen wird die Datei sehr leicht kaum noch lesbar. Es gibt zwar eine Administrationsoberfläche, aber die erwies sich bei meinen Versuchen mit Tomcat dieses Wochenende als unbrauchbar. Ich wollte ja eigentlich mal jboss ausprobieren, aber jboss ist leider unter Gentoo stable gerade nicht installierbar und mir wurde von der Benutzung in Gentoo im #gentoo-java Channel abgeraten. Aber zurück zu Tomcat. Für die gerade erwähnte Administrationsoberfläche muss man sich erstmal von Hand einen User angelegen. Dessen Passwort steht dann erstmal im Klartext in der Datei. Gehashte Passwörter unterstützt Tomcat nicht in einer Passwortdatei - das klappt nur mit einer &lt;a href=&quot;http://tomcat.apache.org/tomcat-5.0-doc/config/realm.html&quot;&gt;Datenbank (per jdbc) bzw Verzeichnisdienst wie LDAP&lt;/a&gt;. Ein nicht zu unterschätzender Aufwand. Denkt man sich nun, dass man ja die Passwortdatei nur vom Serveruser (also beispielsweise tomcat) lesbar/schreibbar machen kann, wird man von der Administrationsoberfläche sanft auf den Boden der Wirklichkeit zurückgeholt: ändert man einen User, wird die Datei wieder world-readable gemacht &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
Bei den verfügbaren Webanwendungen, die ich mir angeguckt habe, wurde in der Installationsdokumentation immer die Konfiguration in XML angegeben - also muss ich als Administrator meine Konfig jetzt in einem Format tippen, was eigentlich dafür gedacht ist, maschinenlesbar zu sein &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Aber ansonsten hat die Adminoberfläche so einige Tücken. Ich finde es zwar schön, dass man sich mit ein paar Klicks einen Vhost anlegen kann, vermisse aber dann die Zuordnung von Prioritäten. Weiterhin kann man scheinbar keinen Alias mit einem Wildcard erstellen (also *.domain.tld um alle Subdomains abzufangen). Bzw der Alias wird ohne Fehler erstellt und zeigt keine Wirkung. Wenn schon kein Alias erlaubt ist, dann müsste eigentlich die fehlerhafte Eingabe abgefangen werden.&lt;br /&gt;
&lt;br /&gt;
Gibt man einen Vhost im Browser ein, den es nicht gibt, wird der Browser nur eine leere Seite anzeigen - erst ein Blick in die Header der Antwort ergibt:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;HTTP/1.x&amp;#160;400&amp;#160;No&amp;#160;Host&amp;#160;matches&amp;#160;server&amp;#160;name&amp;#160;www.domain.tld&lt;/div&gt;&lt;br /&gt;
Diese Fehlermeldung kommt übrigens auch, wenn man keinen &lt;a href=&quot;http://tomcat.apache.org/tomcat-5.0-doc/config/context.html&quot;&gt;Context&lt;/a&gt; für den Vhost eingerichtet hat - sehr angenehm zum testen &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
Wieso man in der Adminoberfläche weniger wesentlich weniger Attribute angeben kann als möglich, will ich garnicht wissen.&lt;br /&gt;
&lt;br /&gt;
Sehr schamant fand ich auch folgenden &quot;Bug&quot;: man lad eine WAR-Datei hoch, die dann vom Tomcat entpackt werden sollte. Dieser macht es nicht und äußert sich im Log nur, dass er das Verzeichnis WEB-INF nicht finden kann. Was irgendwie logisch ist, wenn nichts entpackt wurde.&lt;br /&gt;
Lösung: tomcat hatte nicht die Schreibrechte auf den Ordner, so dass die WAR-Datei nicht entpackt werden konnte. Es kam aber kein Fehler dazu, so dass ich lange rumsuchen musste &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
Ich vermute einfach mal, dass dort das Ich-Muss-Alle-Exceptions-Fangen Paradigma von Java zugeschlagen hat..&lt;br /&gt;
&lt;br /&gt;
Bei meiner Installation einer anderen Java-Software kam es zu weiteren Fehlern. Für die Anwendung Roller muss man einen Context anlegen und in diesem die Datenbankverbindung konfigurieren. Das Problem: sobald man den Context anlegt, kommt man in der Administrationsoberfläche nicht weiter - es kam der Fehler &quot;Document base does not exist or is not a readable directory.&quot;. In den Logfiles von Roller fand ich aber den Hinweis, dass die Anwendung schon versuchte, die Datenbankverbindung aufzubauen... Also die Konfigurationsdatei des Contexts von Hand editiert und schon funktionierte alles.. Aber zum Thema Logfiles lesen: wenn ich keinen Debugmodus angeschaltet habe, möchte ich keinen über 20-zeiligen Stacktrace bekommen. Da sieht man ja die Fehlermeldung vor lauter Methodenaufrufen nicht mehr!&lt;br /&gt;
&lt;br /&gt;
Weiterhin hat die Adminoberfläche scheinbar Probleme mit einem Context, dessen Appbase manuell gelöscht wurde:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;HTTP&amp;#160;Status&amp;#160;500&amp;#160;-&amp;#160;Error&amp;#160;retrieving&amp;#160;attribute&amp;#160;debug&lt;/div&gt;&lt;br /&gt;
Davon, dass ich in die Administrationsoberfläche nach einmaligen Anlegen weder Path noch Docbase ändern kann, will ich garnicht erst reden &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danke, mir reicht&#039;s erstmal mit Tomcat&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#&amp;#160;emerge&amp;#160;-C&amp;#160;tomcat&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wann ist endlich Mono so weit, dass ich ASP.Net 2 unter Linux einsetzen kann?&lt;br /&gt;
Oder es endlich Dedicated Server Angebote mit genug RAM gibt, so dass man dank Virtualisierung sowohl Linux als auch Windows fahren kann?  
    </content:encoded>

    <pubDate>Sun, 24 Sep 2006 15:22:09 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/09/24/381</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Internet</category>
<category>Java</category>

</item>
<item>
    <title>Über die Verwendung von Interfaces</title>
    <link>http://blog.jensthebrain.de/archives/2006/07/18/UEber-die-Verwendung-von-Interfaces</link>
            <category>Coding</category>
            <category>Java</category>
            <category>Studium</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/07/18/UEber-die-Verwendung-von-Interfaces#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=345</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=345</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Mal wieder ein schönes Beispiel zum Thema Programmieren an der Uni. Aufgabe war die Implementierung einer HashTable in Java. Schon die Angabe der verschiedenen Modi der HashTable über Strings brachte mich arg zum stauen (wo es doch in Java 5 so schöne Enumerations gibt und man damit sich kostenlos Schutz durch den Compiler erkauft).&lt;br /&gt;
Aber das Beste war die Verwendung eines Interfaces. Man bekam ein Interface namens EntryInterface gestellt und musste nun eine Klasse namens Entry unter Verwendung dieses Interfaces implementieren.&lt;br /&gt;
Moment – Warum ist der Klassenname Entry vorgegeben?&lt;br /&gt;
Wir haben doch eine schön definierte Schnittstelle und die mitgelieferten Testcases können doch einfach diese nutzen. Dank Interface habe ich ja ein Abstraktionslayer, so dass die reelle Implementierung von EntryInterface niemanden außer dem Entwickler der HashTable-Interna interessieren sollte.&lt;br /&gt;
Beim näheren Anschauen der Testcases lief dann auf, dass diese eine Instanz von Entry benötigen:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;	@Test&lt;br /&gt;
	public&amp;#160;void&amp;#160;testHomeAdress_DivisionLinear&amp;#40;&amp;#41;&amp;#160;{&lt;br /&gt;
		Entry&amp;#160;testEntry1&amp;#160;=&amp;#160;new&amp;#160;Entry&amp;#40;&amp;#41;;&lt;br /&gt;
		testEntry1.setKey&amp;#40;&quot;Z8IG4LDXS&quot;&amp;#41;;&lt;br /&gt;
		testEntry1.setData&amp;#40;&quot;OK&quot;&amp;#41;;&lt;/div&gt;&lt;br /&gt;
Es hat schon einen guten Grund, warum die HashTable in Java anders implementiert ist. Dort muss man nicht ein Objekt übergeben, sondern direkt Key und Data. Eine Klasse weniger nötig zum Benutzen.&lt;br /&gt;
Ein Interface auf eine solche Art zu benutzen ist schon arg komisch. Da gibt es nun wirklich bessere Lösungen..&lt;br /&gt;
  
    </content:encoded>

    <pubDate>Tue, 18 Jul 2006 16:26:29 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/07/18/345</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Java</category>
<category>Studium</category>

</item>
<item>
    <title>PHP5 wird langsam Standard </title>
    <link>http://blog.jensthebrain.de/archives/2006/07/08/PHP5-wird-langsam-Standard</link>
            <category>Linux</category>
            <category>PHP</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/07/08/PHP5-wird-langsam-Standard#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=341</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=341</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    So langsam muss ich mir überlegen, ob ich nicht die diversen Webserver, die ich warte auf PHP5 upgrade..&lt;br /&gt;
&lt;br /&gt;
Die gerade rausgekommene &lt;a href=&quot;http://www.mediawiki.org/wiki/Manual:Upgrading_to_1.7&quot;&gt;Version 1.7&lt;/a&gt; von MediaWiki läuft nur noch damit:&lt;br /&gt;
&lt;blockquote&gt;MediaWiki 1.7 requires:&lt;br /&gt;
    * PHP 5.0 or later&lt;br /&gt;
          Older versions will no longer work&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aber das Problem: bei Debian stable gibt es immernoch nur PHP3 und PHP4 &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
Wenn das weiterhin so bleibt, wird Debian wohl einige User verlieren..  
    </content:encoded>

    <pubDate>Sat, 08 Jul 2006 11:07:17 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/07/08/341</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Linux</category>
<category>PHP</category>

</item>
<item>
    <title>WM-Ende Countdown</title>
    <link>http://blog.jensthebrain.de/archives/2006/05/06/WM-Ende-Countdown</link>
            <category>dotNet</category>
            <category>Fun</category>
            <category>Windows</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/05/06/WM-Ende-Countdown#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=302</wfw:comment>

    <slash:comments>4</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=302</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Ihr habt kein Bock mehr auf die WM?&lt;br /&gt;
Ihr wollt endlich wissen wann der ganze Wahnsinn ein Ende hat?&lt;br /&gt;
&lt;br /&gt;
Für den WM-Hasser gibt es ab sofort den WM-Ende Countdown für den Windows-PC &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
Einfach runterladen, installieren und starten - ihr werdet immer auf den aktuellen Stand gehalten, wie lange ihr noch aushalten müsst.&lt;br /&gt;
&lt;br /&gt;
Falls an eurem Arbeitsplatz ein WM-Fan vorbeigehen sollte, könnt ihr den Countdown einfach ins Systray minimieren (Doppelklick auf das Fußballicon im Systray).&lt;br /&gt;
&lt;br /&gt;
&lt;a id=&quot;p373&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/05/WM-Ende%20Countdown%20Setup.zip&quot;&gt;WM-Ende Countdown Setup&lt;/a&gt;&lt;br /&gt;
Für die Installation wird das dotnet-Framework 2 benötigt (&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&quot;&gt;32bit Variante&lt;/a&gt; und &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=b44a0000-acf8-4fa1-affb-40e78d788b00&quot;&gt;64bit Variante&lt;/a&gt; kann man sich bei Microsoft runterladen)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Bitte beachtet, dass dieses Produkt kostenlos ist und ich es ohne jede Garantie anbiete. Installation auf eigenes Risiko! Wer meinen Code validieren will, kann dazu gerne den &lt;a href=&quot;http://www.aisto.com/roeder/dotnet/&quot;&gt;.Net Reflector&lt;/a&gt; nutzen &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/em&gt;  
    </content:encoded>

    <pubDate>Sat, 06 May 2006 17:09:26 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/05/06/302</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>dotNet</category>
<category>Fun</category>
<category>Windows</category>

</item>
<item>
    <title>Folien zum Thema &quot;Code-Injection in PHP und Einbauen eines Public Keys&quot;</title>
    <link>http://blog.jensthebrain.de/archives/2006/05/03/Folien-zum-Thema-Code-Injection-in-PHP-und-Einbauen-eines-Public-Keys</link>
            <category>Hacking</category>
            <category>PHP</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/05/03/Folien-zum-Thema-Code-Injection-in-PHP-und-Einbauen-eines-Public-Keys#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=300</wfw:comment>

    <slash:comments>4</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=300</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Im Rahmen des aktuellen Praktikums füge ich meiner &lt;a href=&quot;http://blog.jensthebrain.de/archives/2005/12/15/auswertung-vom-hacking-ctf2005/&quot;&gt;Auswertung vom Hacking-CTF2005&lt;/a&gt; noch ein paar Folien zum Thema Code-Injection in PHP hinzu. Als kleine Bonusbeilage auch ein praktischer Angreif: Einbauen eines Public Keys für SSH&lt;br /&gt;
&lt;br /&gt;
&lt;a id=&quot;p364&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/05/Code-Injection%20in%20PHP.pdf&quot; title=&quot;Folien Code-Injection in PHP (PDF)&quot;&gt;Folien Code-Injection in PHP (PDF)&lt;/a&gt;&lt;br /&gt;
&lt;a id=&quot;p365&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/05/Code-Injection%20in%20PHP.ppt&quot;&gt;Folien Code-Injection in PHP (Powerpoint)&lt;/a&gt;  
    </content:encoded>

    <pubDate>Wed, 03 May 2006 23:55:34 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/05/03/300</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Hacking</category>
<category>PHP</category>

</item>
<item>
    <title>Lizenzierung für dotnet-Programme</title>
    <link>http://blog.jensthebrain.de/archives/2006/03/06/Lizenzierung-fuer-dotnet-Programme</link>
            <category>dotNet</category>
            <category>Work</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/03/06/Lizenzierung-fuer-dotnet-Programme#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=241</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=241</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Aufgabe: ein dotNet-Programm soll ein Lizenzmodul bekommen. Features sollen freischaltbar und optional mit Ablaufdatum versehen werden..&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man sich einen Lizenzkey wie von Windows bekannt irgendwie zusammenrechnen und damit einige Nachteile in Kauf nehmen oder man nimmt eine schöne Lösung: Anwendungslizenzen mit digitalen XML-Signaturen &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Aber erstmal zu den Nachteilen eines einfachen Lizenzkey:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;Speichermenge begrenzt&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Key muss zurückrechenbar sein&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Ein Vorteil eines Lizenzkeys ist aber seine feste Länge.&lt;br /&gt;
&lt;br /&gt;
Jetzt ein paar Überlegungen:&lt;br /&gt;
Warum eigentlich die Informationen verschlüsseln oder hashen? Die Information an sich muss doch nicht versteckt werden - nur ihre Validität muss gewährleistet sein.&lt;br /&gt;
Informationen speichert man heutzutage in XML-Dateien. Vorteil: sowohl von Maschine als auch Mensch leicht lesbar - eine beispielhafte Lizenz-Datei könnte z.B. so aussehen:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;&amp;#160;&lt;br /&gt;
&amp;#60;license&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;expires&amp;#62;2006-12-31T00&amp;#58;00&amp;#58;00&amp;#60;/expires&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#60;feature&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;name&amp;#62;MeinFeature&amp;#60;/name&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;expires&amp;#62;2005-12-31T00&amp;#58;00&amp;#58;00&amp;#60;/expires&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#60;/feature&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#60;feature&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;name&amp;#62;MeinFeature2&amp;#60;/name&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#60;/feature&amp;#62;&lt;br /&gt;
&amp;#60;/license&amp;#62;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Den Anspruch Informationen in einer XML-Datei abzusichern erfüllen digitale XML-Signaturen.&lt;br /&gt;
Dafür bedient man sich einfach der asymmetrischen Verschlüsslung/Signatur und setzt in dem Fall einfach die Signatur als neues Element in die XML-Datei:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;&amp;#60;license&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;expires&amp;#62;2006-12-31T00&amp;#58;00&amp;#58;00&amp;#60;/expires&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#60;feature&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;name&amp;#62;MeinFeature&amp;#60;/name&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;expires&amp;#62;2005-12-31T00&amp;#58;00&amp;#58;00&amp;#60;/expires&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;/feature&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#60;feature&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;name&amp;#62;MeinFeature2&amp;#60;/name&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;/feature&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#60;Signature&amp;#160;xmlns=&quot;http&amp;#58;//www.w3.org/2000/09/xmldsig#&quot;&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#60;SignedInfo&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;CanonicalizationMethod&amp;#160;Algorithm=&quot;http&amp;#58;//www.w3.org/TR/2001/REC-xml-c14n-20010315&quot;&amp;#160;/&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;SignatureMethod&amp;#160;Algorithm=&quot;http&amp;#58;//www.w3.org/2000/09/xmldsig#rsa-sha1&quot;&amp;#160;/&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#60;Reference&amp;#160;URI=&quot;&quot;&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#60;Transforms&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;Transform&amp;#160;Algorithm=&quot;http&amp;#58;//www.w3.org/TR/2001/REC-xml-c14n-20010315&quot;&amp;#160;/&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;Transform&amp;#160;Algorithm=&quot;http&amp;#58;//www.w3.org/2000/09/xmldsig#enveloped-signature&quot;&amp;#160;/&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;/Transforms&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;DigestMethod&amp;#160;Algorithm=&quot;http&amp;#58;//www.w3.org/2000/09/xmldsig#sha1&quot;&amp;#160;/&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;DigestValue&amp;#62;zy7NouuPtItDJ2H2Ronc66uZH3U=&amp;#60;/DigestValue&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;/Reference&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;/SignedInfo&amp;#62;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;SignatureValue&amp;#62;FkvvXy3&amp;#160;&amp;#91;....&amp;#93;&amp;#160;xd8=&amp;#60;/SignatureValue&amp;#62;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#60;/Signature&amp;#62;&lt;br /&gt;
&amp;#60;/license&amp;#62;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
[SignatureValue ist hier gekürzt, da der String sehr lang ist]&lt;br /&gt;
&lt;br /&gt;
Die eigentlichen Informationen bleiben bestehen und können nun ohne die Signaturprüfung fehlschlagen zu lassen nicht mehr verändert werden. Alternativ kann die Signatur auch in eine neue Datei geschrieben werden - dann müssen aber zwei Dateien an den Kunden ausgeliefert werden: Lizenzdatei und Lizenzsignaturdatei.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;UTF8-kompatibel&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;leichter zu debuggen als ein Aufwändiger Algorithmus für einen &quot;normalen&quot; Lizenzkey&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Neue Signatur auch vor Ort beim Kunden erstellbar - der Supporter braucht nur den privaten Key und eine kleine Anwendung&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Man kann relativ leicht neue Felder und Attribute hinzufügen - wenn man aufpasst sogar mit Rückwärtskompatiblität&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Man kann quasi beliebig viel speichern&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Lizenzdatei ist vom Supporter lesbar - er kann sofort sagen, wann Feature xy ablaufen wird&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;basiert auf Standards&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Beispielprojekt für das ganze gibt es bei &lt;a href=&quot;http://www.codeproject.com/dotnet/xmldsiglic.asp&quot;&gt;CodeProject: Using XML Digital Signatures for Application Licensing&lt;/a&gt;.  
    </content:encoded>

    <pubDate>Mon, 06 Mar 2006 15:06:40 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/03/06/241</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>dotNet</category>
<category>Work</category>

</item>
<item>
    <title>PHP - safe_mode fällt weg</title>
    <link>http://blog.jensthebrain.de/archives/2006/03/03/PHP-safe_mode-faellt-weg</link>
            <category>PHP</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/03/03/PHP-safe_mode-faellt-weg#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=235</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=235</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Ein großer Umbruch bei PHP: der safe_mode wird demnächst ersatzlos wegfallen (&lt;a href=&quot;http://www.php.net/~derick/meeting-notes.html#safe-mode&quot;&gt;vor einiger Zeit schon beschlossen&lt;/a&gt;)!&lt;br /&gt;
Im CVS wird schon aufgeräumt: &lt;a href=&quot;http://news.php.net/php.cvs/36918&quot;&gt;&lt;em&gt;Start nuking safe_mode&lt;/em&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
open_basedir bleibt aber erhalten - kann zwar auch umgangen werden, aber da dachten die Entwickler sich wohl, dass dennoch Sinn macht.. Jetzt müssen wohl einige ihr PHP-Setup umbauen - ansonsten kann jedes Skript eines VHosts Schaden anrichten. Lösungen sind z.B. fastcgi mit suexec und su_php - damit kann jeder Vhost unter einem eigenen User laufen (und nebenbei noch eine eigene php.ini bekommen)..&lt;br /&gt;
&lt;br /&gt;
Na ja, es bleibt noch ein wenig Zeit (wohl messbar in etlichen Monaten) - auch ich muss noch mein Setup umstellen, auf dem &lt;a href=&quot;http://www.chaos-darmstadt.de/&quot;&gt;Chaos-Darmstadt-Server&lt;/a&gt; habe ich es allerdings schon &quot;richtig&quot; eingerichtet (nach der &lt;a href=&quot;http://www.debianhowto.de/de:howtos:sarge:apache2_php-fcgi&quot;&gt;Anleitung auf debianhowto.de&lt;/a&gt;) &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  
    </content:encoded>

    <pubDate>Fri, 03 Mar 2006 22:35:21 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/03/03/235</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>PHP</category>

</item>
<item>
    <title>Windows Vista Sidebar</title>
    <link>http://blog.jensthebrain.de/archives/2006/02/26/Windows-Vista-Sidebar</link>
            <category>Coding</category>
            <category>Windows</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/02/26/Windows-Vista-Sidebar#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=227</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=227</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    &lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/02/Sidebar.png&quot; title=&quot;Windows Vista Sidebar&quot;&gt;&lt;img style=&quot;float:right;&quot; id=&quot;image222&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/02/Sidebar.thumbnail.png&quot; alt=&quot;Windows Vista Sidebar&quot; /&gt;&lt;/a&gt;Nachdem ich schon ein bißchen über die &lt;a href=&quot;http://blog.jensthebrain.de/archives/2006/02/24/windows-vista-build-5308-erste-eindrucke/&quot;&gt;Sidebar in Windows Vista Build 5308 berichtet habe&lt;/a&gt;, möchte ich nun ein bißchen auf die Programmierung von Gadgets eingehen..&lt;br /&gt;
&lt;br /&gt;
Eigentlich habe ich mich ja gefreut, ein paar nette Gadgets in dotnet programmieren zu können. Aber bislang scheint es so, als ob man Gadgets nur mit Javascript und (D)HTML programmieren könnte. Auch seitens Microsofts war eigentlich die Möglichkeit von &lt;a href=&quot;http://de.wikipedia.org/wiki/XAML&quot;&gt;XAML&lt;/a&gt; &lt;a href=&quot;http://blogs.msdn.com/tims/archive/2004/08/20/217893.aspx&quot;&gt;geplant&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Offizielles Statement aus dem &lt;a href=&quot;http://microsoftgadgets.com/forums/3125/ShowPost.aspx&quot;&gt;MS Gadgets Forum&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;Yes, I&#039;m sorry to say that we won&#039;t be support WPF (Avalon, or XAML) gadgets in this release of the Sidebar. We really love WPF and are looking at ways to support it in the future, but we think that HTML will be the most interesting to all the existing developers. &lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für mich schlagartig, dass die Programmierung von Gadgets uninteressant wird. Ich möchte kein relativ eingeschränktes &lt;a href=&quot;http://microsoftgadgets.com/Build/Sidebar%20Reference%20Guide%20February%20CTP.doc&quot;&gt;Sidebar Gadget Object Model&lt;/a&gt;, sondern die ganze Mächtigkeit, die mir dotnet bieten kann. &lt;br /&gt;
&lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/02/Gadgets.png&quot; title=&quot;Add Gadgets&quot;&gt;&lt;img style=&quot;float:right;&quot; id=&quot;image225&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/02/Gadgets.thumbnail.png&quot; alt=&quot;Add Gadgets&quot; /&gt;&lt;/a&gt;Wahrscheinlich waren diese Entscheidungen auch der Grund, dass die Sidebar erst so spät in die offiziellen Testbuilds Einzug hielt. Auch die standardmäßig ausgelieferten Gadgets sind nicht gerade viele wie man rechts sehen kann..&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für mich effektiv, dass ich die Sidebar wohl wieder deaktivieren werde. &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  
    </content:encoded>

    <pubDate>Sun, 26 Feb 2006 14:41:46 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/02/26/227</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Windows</category>

</item>
<item>
    <title>D&amp;D Online - keine Alternative zu WoW</title>
    <link>http://blog.jensthebrain.de/archives/2006/02/09/DD-Online-keine-Alternative-zu-WoW</link>
            <category>dotNet</category>
            <category>Games</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/02/09/DD-Online-keine-Alternative-zu-WoW#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=197</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=197</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Nachdem ich nun ein bißchen D&amp;D Online Beta gespielt habe, bin ich der Meinung, dass D&amp;D Online keine Alternative zu WoW ist (Warnung: alles bezieht sich auf die Beta - es kann sich noch einiges ändern!).&lt;br /&gt;
Es fehlt einfach der Daddel-Faktor. Die D&amp;D-Regeln mögen für ein Pen&amp;Paper-Spiel ganz schön sein, aber nicht wirklich für ein &lt;a href=&quot;http://de.wikipedia.org/wiki/Mmorg&quot;&gt;MMORG (Massive Multiplayer Online Roleplaying Game)&lt;/a&gt;. Ehrlich gesagt verstehe ich nicht wie man D&amp;D Online überhaupt ein MMORG nennen kann - es fehlt einfach das &quot;Massive&quot;. In der Stadt sieht man natürlich die anderen Spieler, aber es fehlt die Interaktion. Da alle Dungeons instanziert sind, geht man sowieso nur alleine (dazu später mehr) oder mit einer Gruppe rein. &lt;br /&gt;
Aufgrund der wesentlich komplexeren Regeln muss eine Gruppe eingespielt sein (z.B.: Dieb muss immer vorgehen). Das Sterben wird in DDO wesentlich stärker bestraft: wenn die Gruppe einen nicht ins Leben zurückholt, wird man in die letzte Taverne zurück teleporiert. Dabei wird der Quest-Status für den Dungeon zurückgesetzt (also alles nochmal neu machen). Man ist also lange Zeit im Dungeon unterwegs, hat eigentlich alle Quests gelöst und stirbt dann am Ende (z.B. durch Ertrinken oder banale Sachen wie Disconnect, Lag oder sonstiges) muss auf die Gruppe hoffen (solange man nicht alleine unterwegs ist). Falls die Gruppe unfair ist, muss sie einen nicht retten - sie bekommen ja die XP..&lt;br /&gt;
Der Spielspaß in DDO entsteht durch die Interaktion mit der Gruppe - d.h. der Spielspaß ist nur dann da, wenn man eine gute Gruppe hat. Viele XP-Rusher wie bei WoW machen den Spielspaß dann komplett kaputt.&lt;br /&gt;
Irgendwie stört mich auch, dass ich Leben&amp;Mana nur über Heilzauber, Tränke, Resting-Stones und in Tavernen regenerieren kann. Selbst in der Taverne dauert es lange bis man wieder komplett regeneriert ist.&lt;br /&gt;
&lt;br /&gt;
Außerdem benötigt DDO eine hohe Auflösung. Unter 1024x768 ist absolut garnichts zu machen - besser klappt es erst mit 1280x1024. Immerhin sind die UI-Komponenten komplett verschiebbar.&lt;br /&gt;
Informationen über Character oder Items werden in einem eigenen Fenster angezeigt - Tooltips werden da viel schöner und platzsparender.&lt;br /&gt;
&lt;br /&gt;
Sehr schön finde ich allerdings den eingebauten VoIP-Client - die Frage ist aber ob das nicht gerade die RP-Atmosphere zerstört.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://radicaledward.k10network.de/index.php/2006/02/09/dd-online/&quot;&gt;Ed hat sich auch zum Betatest geäußert&lt;/a&gt; und DDO kommt nicht gerade gut weg..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Was mir aber abgesehen vom spielerischen Aspekt sehr gut gefällt, ist die Infrastruktur hinter DDO. Der Launcher ist in dotNet geschrieben (Version 1.1) und spricht auch mit den Servern über Standardprotokolle. Es gibt Webservices zum Login &amp;amp; Abfragen der Serverliste. Jeder Programmierer kann also sehr leicht die Informationen abfragen und z.B. auf die Clan-Homepage einbauen.&lt;br /&gt;
Weiterhin wird dadurch das dotNet-Framework verbreitet was mich sehr freut (leider halt die alte Version).  
    </content:encoded>

    <pubDate>Thu, 09 Feb 2006 19:42:58 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/02/09/197</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>dotNet</category>
<category>Games</category>

</item>

</channel>
</rss>
