<?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/"
   >
<channel>
    <title>Slideshow Bob - Programmierung</title>
    <link>http://people.avona.com/~thomas.werner/</link>
    <description>So viele bunte Zeichen. Überall.</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 1.4.1 - http://www.s9y.org/</generator>
    <pubDate>Fri, 12 Mar 2010 16:34:08 GMT</pubDate>

    <image>
        <url>http://people.avona.com/~thomas.werner/templates/slideshowbob/img/s9y_banner_small.png</url>
        <title>RSS: Slideshow Bob - Programmierung - So viele bunte Zeichen. Überall.</title>
        <link>http://people.avona.com/~thomas.werner/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Script-Entwicklung für Greasemonkey</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/73-Script-Entwicklung-fuer-Greasemonkey.html</link>
            <category>Internet</category>
            <category>JavaScript</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/73-Script-Entwicklung-fuer-Greasemonkey.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=73</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=73</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    [TOC3]Greasemonkey ist eine nette, aber auch irgendwie anarchistische Firefox-Erweiterung, welche es erlaubt, von Benutzern selbst gebastelten JavaScript-Code auf x-beliebigen Websites auszuführen. Sinn und Zweck ist die Veränderung der Seiten. Klingt erstmal komisch, hat aber viele, viele sinnvolle Anwendungsgebiete, insbesondere auf populären Websites wie StudiVZ, Youtube und Co.&lt;br /&gt;
Mit Greasemonkey kann man Websites um Funktionalitäten erweitern, die so nicht angeboten werden. Da sind der Vorstellungskraft keine Grenzen gesetzt und darüber hinaus erleichtert einem diese Erweiterung sehr viel Arbeit, wenn man vorhat, eine kleine, eigene Erweiterung für Firefox zu basteln (was recht kompliziert ausfallen kann).&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel gehe ich auf die Script-Entwicklung mit Greasemonkey ein, erläutere Dinge, die man beachten muß und ein paar fiese Bugs, über die ich selbst gestolpert bin.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/73-Script-Entwicklung-fuer-Greasemonkey.html#extended&quot;&gt;&quot;Script-Entwicklung für Greasemonkey&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 11 Mar 2010 19:54:00 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/73-guid.html</guid>
    <category>erweiterung</category>
<category>firefox</category>
<category>greasemonkey</category>
<category>internet</category>
<category>javascript</category>
<category>tutorial</category>
<category>xpath</category>

</item>
<item>
    <title>JavaScript und das Krümelmonster</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/71-JavaScript-und-das-Kruemelmonster.html</link>
            <category>JavaScript</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/71-JavaScript-und-das-Kruemelmonster.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=71</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=71</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    Ich hab mich kürzlich erstmals mit dem Thema Cookies unter JavaScript beschäftigt und muß sagen: meine Fresse, das ist wirklich zum Haareraufen schlecht gelöst. Daher gibts jetzt von mir eine kleine Klasse, die den Umgang mit Cookies deutlich vereinfacht:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;javascript&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt; * A Cookie Manager Class.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt; * @author tw&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt; */&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt; Cookie&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* Gets a cookie value by its name.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* @param name The cookie&#039;s name.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* @return String&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;*/&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;get&lt;/span&gt; = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;var regex=/&#039;&lt;/span&gt; + &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt; + &lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;s*=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;s*([^;]+)&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;s*(;|$)/;&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; result = document.&lt;span style=&quot;color: #006600;&quot;&gt;cookie&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;regex&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;result&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;return&lt;/span&gt; result&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* Sets a cookie.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* @param name The cookie&#039;s name.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* @param value The according value.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* @param expiresOn [Optional] A Date object specifying the expiration date.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;*&amp;#160; &amp;#160; &amp;#160; &amp;#160; if omitted, the cookie expires in seven days from now.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;*/&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;set&lt;/span&gt; = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;, value, expiresOn&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;typeof&lt;/span&gt; expiresOn == &lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;undefined&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; expiresOn = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Date;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;// Keep for a week&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; expiresOn.&lt;span style=&quot;color: #006600;&quot;&gt;setTime&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;expiresOn.&lt;span style=&quot;color: #006600;&quot;&gt;getTime&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; + &lt;span style=&quot;color: #CC0000;&quot;&gt;604800000&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; document.&lt;span style=&quot;color: #006600;&quot;&gt;cookie&lt;/span&gt; = &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt; + &lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;=&#039;&lt;/span&gt; + value.&lt;span style=&quot;color: #006600;&quot;&gt;paramEncode&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; + &lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;; expires=&#039;&lt;/span&gt; +&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; expiresOn.&lt;span style=&quot;color: #006600;&quot;&gt;toGMTString&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* Sets an &amp;quot;unlimited&amp;quot; cookie, meaning that the expiration date is set&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* to the maximum.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* @param name The cookie&#039;s name.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* @param value The according value.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;*/&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;setUnlimited&lt;/span&gt; = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;, value&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; expiresOn = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Date;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; expiresOn.&lt;span style=&quot;color: #006600;&quot;&gt;setTime&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;2147483647000&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;, value, expiresOn&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* Deletes a cookie.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;* @param name The cookie&#039;s name.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160;*/&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;remove&lt;/span&gt; = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; expiresOn = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Date;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; expiresOn.&lt;span style=&quot;color: #006600;&quot;&gt;setTime&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;, &lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;&#039;&lt;/span&gt;, expiresOn&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet wird der ganze Spaß folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;javascript&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; cookie = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Cookie;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;// Hält 7 Tage lang&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;cookie.&lt;span style=&quot;color: #006600;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;meinCookie&#039;&lt;/span&gt;, &lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;xyz&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;// Hält &amp;quot;ewig&amp;quot; - also genau genommen bis 2037 oder so:&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;cookie.&lt;span style=&quot;color: #006600;&quot;&gt;setUnlimited&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;ewig&#039;&lt;/span&gt;, &lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;jaja&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;; &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Viel Spaß damit. 
    </content:encoded>

    <pubDate>Tue, 24 Nov 2009 19:15:44 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/71-guid.html</guid>
    <category>cookies</category>
<category>javascript</category>
<category>oop</category>

</item>
<item>
    <title>[JavaScript] Die Probleme einer Vererbungskette</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/70-JavaScript-Die-Probleme-einer-Vererbungskette.html</link>
            <category>JavaScript</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/70-JavaScript-Die-Probleme-einer-Vererbungskette.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=70</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=70</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    [TOC3]Ich habe zuvor bereits einen ausführlichen Artikel über die Möglichkeiten und Grenzen von Objektorientierung und Vererbung in JavaScript geschrieben (siehe &lt;a href=&#039;http://people.avona.com/~thomas.werner/index.php?/archives/48-Objektorientierte-Programmierung-in-JavaScript.html&#039;&gt;Objektorientierte Programmierung in JavaScript&lt;/a&gt;).&lt;br /&gt;
Gerade eben bin ich allerdings auf ein handfestes Problem gestoßen, und zwar konnte ich mit der gängigen Technik nicht vernünftig die Kette von Eltern-Konstruktormethoden von einer tieferen Kindklasse aus aufrufen.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/70-JavaScript-Die-Probleme-einer-Vererbungskette.html#extended&quot;&gt;&quot;[JavaScript] Die Probleme einer Vererbungskette&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 23 Nov 2009 17:32:00 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/70-guid.html</guid>
    <category>javascript</category>
<category>oop</category>
<category>problem</category>
<category>tutorial</category>

</item>
<item>
    <title>PHP geht bei 64 Bit die Speicherpuste aus</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/59-PHP-geht-bei-64-Bit-die-Speicherpuste-aus.html</link>
            <category>PHP</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/59-PHP-geht-bei-64-Bit-die-Speicherpuste-aus.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=59</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=59</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    &lt;div class=&quot;serendipity_imageComment_right&quot; style=&quot;width: 250px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;!-- s9ymdb:518 --&gt;&lt;img class=&quot;serendipity_image_right&quot; width=&quot;250&quot; height=&quot;145&quot;  src=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/PHP64.serendipityThumb.jpg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Höher, schneller, weiter hat auch seinen Preis.&lt;/div&gt;&lt;/div&gt;Vergangene Nacht war ich mit &#039;nem Kumpel damit beschäftigt, eine Homepage zu debuggen, die auf einem neuen Server einfach nicht mehr funktionieren wollte. Manche Seiten waren weiß, ein paar wenige Seiten funktionierten dagegen - und im PHP-Log war zu sehen, daß der Speicherverbrauch die festgelegte 16-MB-Grenze gesprengt hat, weshalb sich PHP zum Abbruch der Skriptausführung gezwungen sah.&lt;br /&gt;
&lt;br /&gt;
Die Frage war: was ist mit der Homepage nach der Migration plötzlich passiert? Auf dem alten Server ging sie auch mit dem 16M-Speicherlimit. Die Antwort ist hierbei ganz einfach und leider auch ein bißchen erschreckend - der neue Server ist ein 64-Bit-System. Auch die PHP-Installation ist die 64-Bit-Variante.&lt;br /&gt;
&lt;br /&gt;
Der Speicherverbrauch der problematischen Homepage hat sich eindeutig meßbar im Schnitt verdoppelt. Eigentlich muß das nicht unbedingt der Fall sein, bloß weil der Prozessor von 32 Bit auf 64 Bit &quot;hochgeschnellt&quot; ist, aber scheinbar geht die 64-Bit-Version von PHP etwas verschwenderisch mit dem Speicher um.&lt;br /&gt;
&lt;br /&gt;
Ich kann mir gut vorstellen, daß intern sämtliche Ganzzahlen auf 64-Bit-Integer festgelegt sind (anstatt dies je nach Bedarf niedriger anzusiedeln), und dazu kommen dann noch sämtliche Pointer, die zur Adressierung des größeren Adressraums wahrscheinlich standardmäßig ebenso 64-Bit sind. Allein diese Werte verdoppeln daher schon einmal ihren Speicherbedarf.&lt;br /&gt;
&lt;br /&gt;
Da die betreffende Homepage eine recht komplizierte, objektorientierte Architektur hat, ist wohl der Ärger im Rahmen dieser Migration vorprogrammiert gewesen - nur geahnt hat es keiner.&lt;br /&gt;
&lt;br /&gt;
Ich hab jedenfalls mal wieder was dazugelernt - insbesondere daß es wohl erforderlich ist, auf einem modernen 64-Bit-System auch tiefer in die Tasche für mehr RAM zu greifen. Ebenso ist es unvermeidlich, spendabler mit dem PHP-Memory-Limit umzugehen. Wenn das alles nicht hilft, muß man wohl leider wieder auf ein 32-Bit-System zurückgreifen. 
    </content:encoded>

    <pubDate>Sun, 20 Sep 2009 15:21:48 +0200</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/59-guid.html</guid>
    <category>64 bit</category>
<category>debugging</category>
<category>php</category>
<category>problem</category>
<category>server</category>

</item>
<item>
    <title>JSE v1.0 - Ein Quellcode-Editor für den Webbrowser</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/58-JSE-v1.0-Ein-Quellcode-Editor-fuer-den-Webbrowser.html</link>
            <category>JavaScript</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/58-JSE-v1.0-Ein-Quellcode-Editor-fuer-den-Webbrowser.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=58</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=58</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    Als ich vor zwei Jahren meinen Blog frisch einrichtete, veröffentlichte ich einen Artikel über meinen Quellcode-Editor, den ich damals in JavaScript schrieb. In erster Linie ließ ich meinen Ärger über die Cross-Browser-Problematik bezüglich Tastatur-Key-Codes aus, welche abhängig von Browser und Plattform voneinander abweichen können.&lt;br /&gt;
&lt;br /&gt;
Aufgrund dieser und weiterer Probleme war das Projekt seither auch auf Eis. Ich hab&#039;s aber vorhin nochmal ausgegraben, weitgehend korrigiert, sodaß es immerhin einigermaßen sauber unter Firefox für Linux klappt und stelle es nun wie den Quellcode von &lt;a href=&#039;http://people.avona.com/~thomas.werner/index.php?/archives/57-PixPush-1.0-JavaScript-Bitmap-Malprogramm.html&#039;&gt;PixPush&lt;/a&gt; ebenso &lt;a href=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/JSE/jse.zip&quot; title=&quot;jse.zip&quot; target=&quot;_blank&quot;&gt;zur freien Verfügung unter der Creative Commons 3.0 Lizenz&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Ebenso stelle ich eine &lt;a href=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/JSE/jsetest.html&quot; title=&quot;jsetest.html&quot; target=&quot;_blank&quot; style=&quot;font-weight:bold&quot;&gt;Live-Testversion zum Rumspielen&lt;/a&gt; (bzw. Code schreiben) zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;width: 500px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;!-- s9ymdb:477 --&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;500&quot; height=&quot;144&quot;  src=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/JSE/jse.jpg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Schön bunt sieht&#039;s aus. Einfach mal selbst ausprobieren: &lt;a href=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/JSE/jsetest.html&quot; title=&quot;jsetest.html&quot; target=&quot;_blank&quot;&gt;Live-Testversion&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h3&gt;Features&lt;/h3&gt;&lt;br /&gt;
Die Editor-Klasse ist recht flexibel gestaltet. So kann man sich eigene Regeln für simple Code-Completion sowie Syntax-Highlighting festlegen. Standardmäßig wird Hervorhebung für die Programmierspache Java unterstützt.&lt;br /&gt;
Ansonsten werden Look &amp;amp; Feel klassischer Quellcode-Editoren über Tricksereien nachgebildet.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Automatische Zeilennumerierung&lt;/li&gt;&lt;li&gt;Syntax-Highlighting&lt;/li&gt;&lt;li&gt;Navigation über Cursortasten sowie Bild auf und ab&lt;/li&gt;&lt;li&gt;Entfernen und Backspace funktioniert, wie man es von einem Editor erwartet&lt;/li&gt;&lt;li&gt;Tab-Taste für Zeileneinschub&lt;/li&gt;&lt;li&gt;Automatischer Zeileneinschub basierend auf vorangegangene Zeile&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Quellcode und Support&lt;/h3&gt;&lt;br /&gt;
Vorab: ich werde keinen aktiven Support bieten, es aber dennoch begrüßen, wenn ihr mir Feedback über Probleme an dieser Stelle als Kommentar zukommen lassen würdet. Ich geb&#039; das Ding so frei wie es ist und werde allerdings nur dann daran weitermachen, wenn ich Zeit und Lust dazu habe.&lt;br /&gt;
&lt;br /&gt;
Ich lade jeden dazu ein, selbst Verbesserungen und Erweiterungen vorzunehmen, sowie die vorhandenen Probleme bezüglich der Tastatur-Key-Codes usw. zu beheben (weitere Details zu den Problemen und TODOs befinden sich im Quellcode).&lt;br /&gt;
Über Rückmeldungen würde ich mich jedenfalls freuen, sollte jemand am Code etwas ändern oder den Editor irgendwo einsetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/JSE/jse.zip&quot; title=&quot;jse.zip&quot; target=&quot;_blank&quot;&gt;jse.zip&lt;/a&gt; 
    </content:encoded>

    <pubDate>Fri, 11 Sep 2009 17:07:00 +0200</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/58-guid.html</guid>
    <category>creative commons</category>
<category>editor</category>
<category>javascript</category>
<category>programmierung</category>
<category>source code</category>

</item>
<item>
    <title>PixPush 1.0 - JavaScript Bitmap-Malprogramm</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/57-PixPush-1.0-JavaScript-Bitmap-Malprogramm.html</link>
            <category>JavaScript</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/57-PixPush-1.0-JavaScript-Bitmap-Malprogramm.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=57</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=57</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    &lt;div class=&quot;serendipity_imageComment_right&quot; style=&quot;width: 250px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;a class=&#039;serendipity_image_link&#039; href=&#039;http://people.avona.com/~thomas.werner/uploads/Programmierung/PixPush/pixpush_screen.jpg&#039; target=&quot;_blank&quot;&gt;&lt;!-- s9ymdb:443 --&gt;&lt;img class=&quot;serendipity_image_right&quot; width=&quot;250&quot; height=&quot;168&quot;  src=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/PixPush/pixpush_screen.serendipityThumb.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Screenshot von PixPush v1.0 - Selber damit rumspielen kann man hier: &lt;a href=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/PixPush/pixpush.html&quot; title=&quot;pixpush.html&quot; target=&quot;_blank&quot;&gt;PixPush v1.0 Live-Version&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;Vor zwei Jahren veröffentlichte ich einen ausführlichen Artikel zum Thema &lt;a href=&#039;http://people.avona.com/~thomas.werner/index.php?/archives/2-Bitspiele-Schnelle-Multiplikation-der-alten-Schule.html&#039;&gt;Bitspiele - Schnelle Multiplikation der alten Schule&lt;/a&gt;. Der Anlaß war mein damals programmiertes, browser-basiertes Bitmap-Malprogramm, welches ich nun wie damals angekündigt &lt;a href=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/PixPush/pixpush_v1.0.zip&quot; title=&quot;pixpush_v1.0.zip&quot; target=&quot;_blank&quot;&gt;unter der Creative Commons 3.0 Lizenz veröffentliche&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Auf folgender Seite kann man mit dem Malprogramm etwas herumspielen: &lt;a href=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/PixPush/pixpush.html&quot; title=&quot;pixpush.html&quot; target=&quot;_blank&quot; style=&quot;font-weight:bold&quot;&gt;PixPush v1.0 Live-Version&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Da zum damaligen Zeitpunkt der sogenannte Canvas-HTML-Tag nicht sonderlich weit verbreitet war, implementierte ich das Malprogramm auf Basis von DIV-Tags - daher leidet etwas die Performance. Unter Konqueror sollte man eher die Finger davon lassen. Unter Firefox und Opera läuft&#039;s an sich ganz gut.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;serendipity_imageComment_right&quot; style=&quot;width: 250px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;a class=&#039;serendipity_image_link&#039; href=&#039;http://people.avona.com/~thomas.werner/uploads/Programmierung/PixPush/pixpush_patrick.jpg&#039; target=&quot;_blank&quot;&gt;&lt;!-- s9ymdb:468 --&gt;&lt;img class=&quot;serendipity_image_right&quot; width=&quot;250&quot; height=&quot;168&quot;  src=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/PixPush/pixpush_patrick.serendipityThumb.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Mit meinem PixelPush-Patrick mache ich mal den Anfang.&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;Wettbewerb&lt;/h3&gt;&lt;br /&gt;
Schreibt mir Kommentare und schickt mir Links auf eure, mit PixPush erstellten, Kunstwerke. Hierbei zählen nur Screenshots der gesamten PixPush-Programmoberfläche. Es gibt hierbei keinen Einsendeschluß.&lt;br /&gt;
&lt;br /&gt;
Zu gewinnen gibt es eventuell einen feuchten Händedruck - sollten wir uns einmal leibhaftig gegenübertreten.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/57-PixPush-1.0-JavaScript-Bitmap-Malprogramm.html#extended&quot;&gt;&quot;PixPush 1.0 - JavaScript Bitmap-Malprogramm&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 09 Sep 2009 16:52:00 +0200</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/57-guid.html</guid>
    <category>creative commons</category>
<category>grafik</category>
<category>javascript</category>
<category>kunst</category>
<category>programmierung</category>
<category>wettbewerb</category>

</item>
<item>
    <title>Ein Thema voller Mißverständnisse: o.o.p.</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/40-Ein-Thema-voller-Missverstaendnisse-o.o.p..html</link>
            <category>Programmierung</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/40-Ein-Thema-voller-Missverstaendnisse-o.o.p..html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=40</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=40</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    &lt;div class=&quot;serendipity_imageComment_right&quot; style=&quot;width: 292px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;!-- s9ymdb:130 --&gt;&lt;img class=&quot;serendipity_image_right&quot; width=&quot;292&quot; height=&quot;164&quot;  src=&quot;http://people.avona.com/~thomas.werner/uploads/Programmierung/oop_logo.jpg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Für leichte wie auch schwere Entwicklungstage&lt;/div&gt;&lt;/div&gt;Die Welt der Programmierung ist voller Mißverständnisse, behaftet mit Angst und prozeduralen Ausflüssen. Daher haben Wissenschaftler &lt;a href=&quot;http://de.wikipedia.org/wiki/Objektorientierte_Programmierung&quot;&gt;o.o.p.&lt;/a&gt; entwickelt, um die Prozeduralität da zu stoppen wo sie anfängt.&lt;br /&gt;
o.o.p. wird sanft in den Programmierer eingeführt, wobei sich die Hirnwindungen bei regelmäßigem Gebrauch problemlos anpassen.&lt;br /&gt;
&lt;br /&gt;
Lesen Sie bitte aufmerksam den Beipackzettel zu o.o.p.!&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/40-Ein-Thema-voller-Missverstaendnisse-o.o.p..html#extended&quot;&gt;&quot;Ein Thema voller Mißverständnisse: o.o.p.&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 07 Sep 2009 17:45:00 +0200</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/40-guid.html</guid>
    <category>humor</category>
<category>oop</category>
<category>programmierung</category>
<category>tutorial</category>

</item>
<item>
    <title>Objektorientierte Programmierung in JavaScript</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/48-Objektorientierte-Programmierung-in-JavaScript.html</link>
            <category>JavaScript</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/48-Objektorientierte-Programmierung-in-JavaScript.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=48</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=48</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    [TOC3] Objektorientierte Programmierung (OOP) ist in JavaScript eine ungewöhnliche Sache. Die ersten Einblicke in JavaScript-Code gaukeln einem alles vor, was man von OOP an sich gewohnt ist, aber Klassen sucht man darin vergeblich. Das liegt daran, daß JavaScript &lt;a href=&quot;http://de.wikipedia.org/wiki/Prototypenbasierte_Programmierung&quot; title=&quot;Wikipedia-Artikel über prototypbasierte Programmierung&quot;&gt;prototypbasiert&lt;/a&gt; ist. Es gibt also keine Klassen als Vorlage für Objekte, sondern Objekte wie String, Array etc. existieren bereits von vornherein, und werden über den &quot;new&quot;-Operator geklont, um neue Objekte zu schaffen, welche die gleichen Eigenschaften des Originals haben.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel behandelt Techniken der Vererbung und wie man so etwas wie Klassenkonstrukte unter JavaScript nachbilden kann. &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/48-Objektorientierte-Programmierung-in-JavaScript.html#extended&quot;&gt;&quot;Objektorientierte Programmierung in JavaScript&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 21 Jul 2009 13:20:00 +0200</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/48-guid.html</guid>
    <category>JavaScript</category>
<category>Objektorientierung</category>
<category>OOP</category>
<category>Programmierung</category>
<category>Tutorial</category>

</item>
<item>
    <title>[Compilerbau II] Der Abstrakte Syntaxbaum</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/45-Compilerbau-II-Der-Abstrakte-Syntaxbaum.html</link>
            <category>Programmierung</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/45-Compilerbau-II-Der-Abstrakte-Syntaxbaum.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=45</wfw:comment>

    <slash:comments>7</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=45</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    [TOC4]Programmiersprachen sind in der Regel pedantisch, präzise definiert und vermeiden Mehrdeutigkeiten, um eine automatische Verarbeitung durch den Computer zu vereinfachen. Wir sind sicherlich noch weit entfernt von Programmiersprachen, die im Grunde unseren natürlichen Sprachen entsprechen. Ein Quellcode bzw. Computerbefehl wie zum Beispiel: &quot;Computer: ich hätte gerne ein Programm, mit dem ich meine Steuererklärung machen kann&quot; ist leider noch Zukunftsmusik.&lt;br /&gt;
&lt;br /&gt;
Vor Jahren hatte ich mal irgendwo eine wunderbare Erklärung für Laien und Anfänger gelesen, wie Computerprogramme und die Denkweise dahinter im Grunde aufgebaut sind. Man solle sich einfach mal vorstellen, einem Kleinkind oder meinetwegen einem Außerirdischen zu erklären, wie man sich selbst die Schuhe bindet. Da reicht keineswegs die Angabe &quot;binde die Schuhe!&quot;, sondern man muß sich die Reaktionen und Gegenfragen vorstellen, die da ganz sicher haufenweise auftreten werden.&lt;br /&gt;
Für jede dieser naiven Fragen muß man eine Antwort bieten, bis alles restlos beantwortet ist. So funktionieren im Grunde Computerprogramme. Dem Computer bis ins kleinste Detail die Herangehensweise an Problemlösungen schildern.&lt;br /&gt;
&lt;br /&gt;
Im vorangegangen Artikel &lt;a href=&#039;http://people.avona.com/~thomas.werner/index.php?/archives/42-Compilerbau-Parser-Marke-Eigenbau.html&#039;&gt;[Compilerbau] Parser Marke Eigenbau&lt;/a&gt; stellte ich die Grundlagen zum Sieben und Parsen von Text vor. Dieser Artikel wird sich nun eingehender mit dem Parsen von Programmiersprachen, sowie dem Aufbau abstrakter Syntaxbäume beschäftigen.&lt;br /&gt;
&lt;br /&gt;
Gerade diese Syntaxbäume sind ein wesentlicher Schlüssel, welcher dem Compiler das Verständnis des Quellcodes ermöglicht. Hierin findet sich die wahre Bedeutung, bzw. die semantische Ebene der &quot;Botschaft&quot; des Programmierers.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/45-Compilerbau-II-Der-Abstrakte-Syntaxbaum.html#extended&quot;&gt;&quot;[Compilerbau II] Der Abstrakte Syntaxbaum&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 16 Feb 2009 21:03:00 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/45-guid.html</guid>
    <category>compiler</category>
<category>compilerbau</category>
<category>interpreter</category>
<category>parser</category>
<category>textanalyse</category>
<category>tutorial</category>

</item>
<item>
    <title>[Compilerbau] Parser Marke Eigenbau</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/42-Compilerbau-Parser-Marke-Eigenbau.html</link>
            <category>Programmierung</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/42-Compilerbau-Parser-Marke-Eigenbau.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=42</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=42</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    [TOC4]Eines meiner Lieblingsthemen ist die Verarbeitung von textueller Sprache durch Computerprogramme. Als ich mit etwa elf Jahren meine ersten kleinen Gehversuche in der Programmiersprache &lt;a title=&quot;Aaah... Nostalgie!&quot; href=&quot;http://de.wikipedia.org/wiki/AmigaBASIC&quot;&gt;BASIC&lt;/a&gt; auf meinem guten alten &lt;a href=&quot;http://cbmmuseum.kuto.de/amiga_500.html&quot;&gt;Commodore Amiga 500&lt;/a&gt; machte, waren da auch immer wieder Anwendungen darunter, welche in bester &lt;a href=&quot;http://de.wikipedia.org/wiki/ELIZA&quot;&gt;&quot;Eliza&quot;&lt;/a&gt;-Manier einen schlauen, künstlichen Gesprächspartner vorgaukelten. Man konnte Sätze eingeben, die Sätze wurden dann nach einfachsten Regeln nach gewissen Schlagwörtern untersucht und aus einem riesigen Fundus fest einprogrammierter Daten gabs dann passend formulierte Antworten.&lt;br /&gt;
&lt;br /&gt;
Wenige Jahre später entwickelte ich eine große Faszination für Programmiersprachen. Mein Traum war es, eine eigene, maßgeschneiderte Programmiersprache zu entwickeln und entsprechend einen Compiler zu bauen. Nach anfänglichen naiven Fehlversuchen, welche hoffnungslos in &lt;a title=&quot;Programmieren macht hungrig!&quot; href=&quot;http://en.wikipedia.org/wiki/Spaghetti_code&quot;&gt;Spaghetti-Code&lt;/a&gt; mündeten, arbeitete ich mich irgendwann in offenen Quellcode bestehender Compiler ein, was damals noch, als das Internet für viele ein Fremdwort war, recht exotisch und eher schlecht zugänglich war.&lt;br /&gt;
&lt;br /&gt;
Jahre später ist mir, nach Lektüre der sogenannten &lt;a href=&quot;http://en.wikipedia.org/wiki/Principles_of_Compiler_Design&quot;&gt;&quot;Drachenbücher&quot;&lt;/a&gt; und diverser Online-Materialien, das Vorhaben, einen eigenen Compiler zu basteln auch mit einer objektorientierten Skriptsprache, die syntaktisch zwischen Java und JavaScript herumlungerte, endlich geglückt.&lt;br /&gt;
Mittlerweile habe ich das gesammelte Wissen mehrfach in Interpretern eingesetzt, und generell sind die Kenntnisse sehr praktisch, wenn es darum geht, textuelle Eingaben zu analysieren und zu interpretieren.&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel möchte ich zunächst eine kleine Übersicht zum Compilerbau geben, und daraufhin erklären, welche Ansätze es gibt, einen sogenannten Parser von Hand zu basteln. Hierbei handelt es sich um eine Compiler-Komponente, welche für die Syntaxanalyse der textuellen Eingabe zuständig ist.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/42-Compilerbau-Parser-Marke-Eigenbau.html#extended&quot;&gt;&quot;[Compilerbau] Parser Marke Eigenbau&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 10 Feb 2009 14:39:00 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/42-guid.html</guid>
    <category>compiler</category>
<category>linguistik</category>
<category>parser</category>
<category>programmierung</category>
<category>textanalyse</category>
<category>tutorial</category>

</item>
<item>
    <title>Mausscharade - Laß einfach mal den Computer raten</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/39-Mausscharade-Lass-einfach-mal-den-Computer-raten.html</link>
            <category>Programmierung</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/39-Mausscharade-Lass-einfach-mal-den-Computer-raten.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=39</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=39</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    Im Rahmen eines kleinen Softwareprojekts hatte ich mich vor einer Weile mit der Frage beschäftigt, wie sich möglichst einfach mit der Maus gemalte Formen von einem Programm erkennen lassen können.&lt;br /&gt;
Da gibt es natürlich diverse Ansätze, wobei die Richtung &quot;künstliche neuronale Netze&quot; am komplexesten sein dürfte, also machte ich mir eigene Gedanken dazu und ging von der primitivsten aller Ausgangssituation aus, daß man die Form in ein festes Raster von X mal X Punkten hineinmalt und dieses Raster auf Ähnlichkeit zu einem Satz an vorhandenen Daten prüft, welche jeweils für verschiedene Formen stehen (beispielsweise Kreis, Dreieck, Quadrat etc.).&lt;br /&gt;
&lt;br /&gt;
Das ist natürlich die denkbar ineffizienteste aller Lösungen, daher überlegte ich, ob es vielleicht Sinn macht, das zweidimensionale Raster auf nur eine Dimension zu plätten, um den Vorgang erheblich zu beschleunigen.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/39-Mausscharade-Lass-einfach-mal-den-Computer-raten.html#extended&quot;&gt;&quot;Mausscharade - Laß einfach mal den Computer raten&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 02 Feb 2009 22:43:00 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/39-guid.html</guid>
    <category>algorithmus</category>
<category>javascript</category>
<category>programmierung</category>
<category>prototyp</category>

</item>
<item>
    <title>Eine einfache ActiveRecord-Klasse für PHP</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/31-Eine-einfache-ActiveRecord-Klasse-fuer-PHP.html</link>
            <category>PHP</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/31-Eine-einfache-ActiveRecord-Klasse-fuer-PHP.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=31</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=31</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    Active Record ist ein recht simples Design Pattern, welches grob gesagt die Einträge einer Datenbanktabelle Objekten zuordnet, die sich dann wiederum beliebig in einem Programm manipulieren lassen.&lt;br /&gt;
&lt;br /&gt;
Angenommen es existiert in einem Programm die Klasse &quot;Car&quot; mit den Eigenschaften &quot;name&quot;, &quot;color&quot; und &quot;hp&quot; (horse power). Ebenso angenommen, es existiert eine Datenbanktabelle, die über die entsprechenden Spalten &quot;name&quot;, &quot;color&quot;,  und &quot;hp&quot; verfügt. Das ActiveRecord-Pattern verknüpft die Klasse mit der Tabelle und entbindet den Programmierer von seinen Pflichten, entsprechende SQL-Abfragen zu schreiben, um Daten aus der Datenbank auszulesen oder darin abzuspeichern.&lt;br /&gt;
&lt;br /&gt;
Ein kleines Anwendungsbeispiel:&lt;br /&gt;
&lt;div class=&quot;php&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// Neues Auto-Objekt anlegen und Eigenschaften festlegen:&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$car&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Car;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$car&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;name&#039;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;BMW&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$car&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;color&#039;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;blue&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$car&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;hp&#039;&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;180&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// In Datenbank abspeichern:&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$car&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;save&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// Und jetzt das Auto wieder aus der Datenbank laden:&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$result&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$car&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;findAllBySql&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;name=?&#039;&lt;/span&gt;, &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;BMW&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/count&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;count&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #0000ff;&quot;&gt;$mySavedCar&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;Name: &#039;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$mySavedCar&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;name&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;&amp;lt;br /&amp;gt;&#039;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;Color: &#039;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$mySavedCar&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;color&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;&amp;lt;br /&amp;gt;&#039;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;HP: &#039;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$mySavedCar&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;hp&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;&amp;lt;br /&amp;gt;&#039;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/* Ausgabe:&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; ------------&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; Name: BMW&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; Color: blue&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; HP: 180&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&amp;#160; &amp;#160; */&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;?&amp;gt;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
Im Folgenden stelle ich eine recht kurzgehaltene, sehr vereinfachte Variante des Patterns als abstrakte Basisklasse für PHP (Version 5 und höher) vor. &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/31-Eine-einfache-ActiveRecord-Klasse-fuer-PHP.html#extended&quot;&gt;&quot;Eine einfache ActiveRecord-Klasse für PHP&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 15 Jan 2009 00:26:18 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/31-guid.html</guid>
    <category>datenbank</category>
<category>design-pattern</category>
<category>php</category>
<category>programmierung</category>
<category>sql</category>

</item>
<item>
    <title>Es ist ja &quot;nur ein Test&quot;...</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/25-Es-ist-ja-nur-ein-Test....html</link>
            <category>Internet</category>
            <category>PHP</category>
            <category>Webentwicklung</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/25-Es-ist-ja-nur-ein-Test....html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=25</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=25</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    Derzeit fallen mir gehäuft und regelmäßig &quot;Einbruchsversuche&quot; auf einer, von mir erstellten, Homepage auf, da diese Versuche Ausnahmefehler verursachen, welche mich automatisch mit allen Details über E-Mail informieren.&lt;br /&gt;
&lt;br /&gt;
Diese Attacken kommen jeweils von unterschiedlichen Servern, verfolgen aber immer dasselbe Muster:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Eine URL wird als GET-Parameter an &quot;meine&quot; Homepage übergeben&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&quot;Meine&quot; Homepage mag das nicht schlucken, bricht ab und schickt mir ne Email&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
Ich hab mir ein paar dieser &quot;injizierten URLs&quot; angeschaut und es sind immer Textdokumente, welche PHP-Code repräsentieren:&lt;br /&gt;
&lt;div class=&quot;php&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;http://www.php.net/md5&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;md5&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;just_a_test&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;?&amp;gt; &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
Es ist offensichtlich ein PHP-basiertes Internetvirus, welches die Weiten des Internets durchsucht, um &quot;kleine Dummheiten&quot; von PHP-Programmierern zu finden.&lt;br /&gt;
&lt;br /&gt;
Das Virus spekuliert offenbar auf folgenden Sachverhalt:&lt;br /&gt;
&lt;i&gt;Führt das PHP-Skript auf dem anzugreifenden Server Benutzereingaben aus?&lt;/i&gt; &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/25-Es-ist-ja-nur-ein-Test....html#extended&quot;&gt;&quot;Es ist ja &amp;quot;nur ein Test&amp;quot;...&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 20 Mar 2008 16:05:12 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/25-guid.html</guid>
    <category>bugs</category>
<category>internet</category>
<category>php</category>
<category>sicherheit</category>
<category>spam</category>
<category>virus</category>

</item>
<item>
    <title>Wenn bei PHP die Müllabfuhr streikt</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/21-Wenn-bei-PHP-die-Muellabfuhr-streikt.html</link>
            <category>PHP</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/21-Wenn-bei-PHP-die-Muellabfuhr-streikt.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=21</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=21</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    PHP 5 weist nicht nur aufgeräumte Sprachergänzungen in puncto Objektorientierung, sondern auch erhebliche Probleme im Speicher-Management auf.&lt;br /&gt;
&lt;br /&gt;
Der sogenannte &quot;garbage collector&quot;, welcher sich für das Aufräumen unbenötigter Daten, Ressourcen und Objekte verantwortlich zeichnet, versagt unter gewissen Umständen seinen Dienst.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel erläutert nicht nur dieses Problem anhand eines Beispiels, sondern stellt auch eine Lösung hierzu vor. &lt;br /&gt;&lt;a href=&quot;http://people.avona.com/~thomas.werner/index.php?/archives/21-Wenn-bei-PHP-die-Muellabfuhr-streikt.html#extended&quot;&gt;&quot;Wenn bei PHP die Müllabfuhr streikt&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 12 Jan 2008 19:16:47 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/21-guid.html</guid>
    <category>bugs</category>
<category>garbage-collector</category>
<category>gc</category>
<category>objektorientierung</category>
<category>oop</category>
<category>php</category>

</item>
<item>
    <title>Wenn Apache zuhause Hausverbot erteilt</title>
    <link>http://people.avona.com/~thomas.werner/index.php?/archives/20-Wenn-Apache-zuhause-Hausverbot-erteilt.html</link>
            <category>Internet</category>
            <category>Webentwicklung</category>
    
    <comments>http://people.avona.com/~thomas.werner/index.php?/archives/20-Wenn-Apache-zuhause-Hausverbot-erteilt.html#comments</comments>
    <wfw:comment>http://people.avona.com/~thomas.werner/wfwcomment.php?cid=20</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://people.avona.com/~thomas.werner/rss.php?version=2.0&amp;type=comments&amp;cid=20</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Werner)</author>
    <content:encoded>
    Ich hatte seit einiger Zeit das kuriose Problem, manchmal weder über Opera noch Konqueror, auf meinen lokalen Entwicklungs-Webserver zugreifen zu können. Die Eingabe von &lt;code&gt;http://localhost&lt;/code&gt; als Webadresse, wurde bei beiden mit einem lakonischen &quot;Zugriff verweigert&quot; quittiert.&lt;br /&gt;
&lt;br /&gt;
Apaches Fehlerlog vermeldete Ähnliches. Angeblich versuchte ein &quot;client&quot;, entgegen der konfigurierten Zugriffskriterien, sich Zugang zu verschaffen. Aber das alles auf meinem eigenen Rechner.&lt;br /&gt;
&lt;br /&gt;
Naja, ein Blick in die Konfigurationssektion meines &quot;htdocs&quot;-Verzeichnisses, ließ in mir eine Ahnung aufkommen: &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;xml&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;Directory&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/srv/www/htdocs&quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;Options FollowSymlinks Indexes&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;AllowOverride All&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;Order Deny,Allow&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;Deny from all&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;Allow from 127.0.0.1&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; color: black; font-weight: normal; font-style: normal;&quot;&gt;&lt;div style=&quot;font-family: &#039;Courier New&#039;, Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/Directory&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Ich vermutete, daß sowohl Opera, als auch Konqueror auf &#039;localhost&#039; zugriffen, und dieser Hostname nicht vernünftig auf meiner Kiste als &#039;127.0.0.1&#039; aufgelöst wird. Nachdem ich den obigen Konfigurationsabschnitt noch um ein &lt;code&gt;Allow from localhost&lt;/code&gt; ergänzt hatte, läuft&#039;s jetzt wie geschmiert.&lt;br /&gt;
&lt;br /&gt;
Zu seltsam, daß ich unter OpenSUSE 10.2 hiermit keinerlei Probleme hatte. 
    </content:encoded>

    <pubDate>Sat, 22 Dec 2007 16:45:16 +0100</pubDate>
    <guid isPermaLink="false">http://people.avona.com/~thomas.werner/index.php?/archives/20-guid.html</guid>
    <category>apache</category>
<category>internet</category>
<category>konfiguration</category>
<category>linux</category>
<category>sicherheit</category>

</item>

</channel>
</rss>