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

<channel>
	<title>Ric&#039;s Blog &#187; Coding</title>
	<atom:link href="http://blog.rki-home.de/category/computer/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rki-home.de</link>
	<description>Interessantes oderso...</description>
	<lastBuildDate>Tue, 31 Aug 2010 15:20:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>PostgreSQL: interval</title>
		<link>http://blog.rki-home.de/2010/08/31/postgresql-interval/</link>
		<comments>http://blog.rki-home.de/2010/08/31/postgresql-interval/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 15:20:22 +0000</pubDate>
		<dc:creator>ric</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[interval]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://blog.rki-home.de/?p=339</guid>
		<description><![CDATA[Wir hatten hier gerade einen schönen AHA-Effekt mit einem Query, bei dem mit Zeit-Intervallen gerechnet wurde. SELECT INTERVAL '600' SECOND; Das sieht doch gar nicht soo falsch aus und liefert auch keinen SQL-Fehler zurück. Leider ist das Ergebnis nicht gerade richtig: das Intervall zeigt &#8217;00:00:00&#8242; an. Richtig wäre es so: SELECT INTERVAL '600 SECOND'; Und [...]]]></description>
			<content:encoded><![CDATA[<p>Wir hatten hier gerade einen schönen AHA-Effekt mit einem Query, bei dem mit Zeit-Intervallen gerechnet wurde.</p>
<p><code>SELECT INTERVAL '600' SECOND;</code><br />
Das sieht doch gar nicht soo falsch aus und liefert auch keinen SQL-Fehler zurück. Leider ist das Ergebnis nicht gerade richtig: das Intervall zeigt &#8217;00:00:00&#8242; an.</p>
<p>Richtig wäre es so:<br />
<code>SELECT INTERVAL '600 SECOND';</code><br />
Und siehe da: das Intervall ist &#8217;00:10:00&#8242;, sprich: 10 Minuten. Yay!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rki-home.de/2010/08/31/postgresql-interval/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Select-Boxen als Dropdown in Facebook lassen unter dem IE8 nichts auswählen</title>
		<link>http://blog.rki-home.de/2009/09/20/select-boxen-als-dropdown-in-facebook-lassen-unter-dem-ie8-nichts-auswahlen/</link>
		<comments>http://blog.rki-home.de/2009/09/20/select-boxen-als-dropdown-in-facebook-lassen-unter-dem-ie8-nichts-auswahlen/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 17:03:01 +0000</pubDate>
		<dc:creator>ric</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fbml]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[ie8]]></category>
		<category><![CDATA[selectbox]]></category>

		<guid isPermaLink="false">http://blog.rki-home.de/?p=309</guid>
		<description><![CDATA[Habe mich in den letzten Tagen mit einem Problem herumschlagen müssen, welches nur im Internet Explorer 8 auftritt &#8211; und auch nur in FBML-Boxen in Facebook-Pages (früher hiessen die glaub ich noch Fanpages). Mein Auftrag war es, ein einfaches Formular auf der Facebook-Page eines Kunden einzubauen. Man sollte Destinationen auswählen und ein Datum festlegen können. [...]]]></description>
			<content:encoded><![CDATA[<p>Habe mich in den letzten Tagen mit einem Problem herumschlagen müssen, welches nur im Internet Explorer 8 auftritt &#8211; und auch nur in FBML-Boxen in Facebook-Pages (früher hiessen die glaub ich noch Fanpages).<span id="more-309"></span><br />
Mein Auftrag war es, ein einfaches Formular auf der Facebook-Page eines Kunden einzubauen. Man sollte Destinationen auswählen und ein Datum festlegen können. Kein sonderlich schweres Problem, dachte ich! Habe das Formular eingebaut, getestet, alles wunderbar!<br />
Der Kunde war aber leider gar nicht zufrieden damit, weil er (wenn nicht auf Facebook eingelogt) die Destinationen, welche ich in einer einzeiligen Selectbox zum Auswählen per Dropdown eingebaut hatte, einfach nicht anwählen konnte &#8211; die Dropdown-Liste schloss sich sofort, wenn man mit der Maus drüberfuhr.<br />
Dieses Problem konnte ich aber beim besten Willen nicht nachvollziehen. Nach einem Test mit allen mir zur Verfügung stehenden Browsern konnte ich das Problem immer noch nicht reproduzieren, obwohl die Liste der getesteten Browser nicht gerade klein war:</p>
<ul>
<li>Internet Explorer 6.0 (Win XP)</li>
<li>Internet Explorer 7.0 (Vista)</li>
<li>Firefox 3.5.3 (Win XP)</li>
<li>Firefox 3.0.14 (Debian/Iceweasel)</li>
<li>Apple Safari 4.0 (Win XP)</li>
<li>Opera 9.64 (WinXP und Debian)</li>
<li>Google Chrome 2.0 (Win XP)</li>
<li>Konqueror 4.3.1 (Debian)</li>
</ul>
<p>In keinem dieser aufgelisteten Browser gab es ein derartiges Problem! Der einzige Browser, der im Ansatz Schwierigkeiten gemacht hatte, war der Internet Explorer 6.0 &#8211; aber nur, weil er die Facebook-Seiten erst gar nicht anzeigen wollte und dann komplett abgestürzt war. Nach dem dritten Versuch hatte er dann die Seite und das Formular ohne zu Mucken dargestellt &#8211; und eine Auswahl der Destination zugelassen.</p>
<p>Als ich erfuhr, dass der Kunde den Internet Explorer 8 verwendete, war ich erstmal ratlos, denn ich hatte gerade keinen zur Hand und ich konnte mir beim besten Willen nicht vorstellen, warum eine simple Select-Box ein Problem darstellen sollte. Nach einem Telefonat mit einem Freund, der ein System mit Internet Explorer 8 hatte, wurde mir der Fehler bestätigt. Leider hat das aber nicht erklärt, warum dieser Browser sich so verhielt &#8211; vor allem machte mich stutzig, dass die Vorgänger-Versionen ja nicht derartige Probleme aufwiesen.</p>
<p>Mir blieb also nichts anderes übrig, als ein eigenes System mit Internet Explorer 8 zum Experimentieren aufzusetzen. Zum Glück hatte ich noch eine Vista64-Lizenz rumfliegen. Nach etlichen Stunden der Installation und Updates und Probleme mit einer zu kleinen Systempartitionen (<em>30 GB reichen für ein leeres Vista64 <strong>nicht</strong> aus, wenn man alle Updates inkl. SP1 haben will!</em>), konnte ich endlich rumexperimentieren.</p>
<p><strong>Die Lösung:</strong><br />
Ich kann zwar immer noch nicht erklären, warum sich der IE8 in diesem Fall so merkwürdig verhält, aber ich habe ein Workaround gefunden. Und zwar stellte sich heraus, dass immer nur die erste Select-Box betroffen war. Nachfolgende Dropdowns funktionierten einwandfrei. Mein Workaround: Banal und unschön, aber es funktioniert. Man baue vor der ersten Select-Box eine Dummy-Select-Box ein, die per Style unsichtbar gemacht wird (&#8220;display:none&#8221;) und siehe da, das Formular funktioniert so, wie erwartet &#8211; und der Benutzer kriegt davon normalerweise gar nichts mit.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rki-home.de/2009/09/20/select-boxen-als-dropdown-in-facebook-lassen-unter-dem-ie8-nichts-auswahlen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benutzerdefinierte Variablen in MySQL</title>
		<link>http://blog.rki-home.de/2009/02/06/benutzerdefinierte-variablen-in-mysql/</link>
		<comments>http://blog.rki-home.de/2009/02/06/benutzerdefinierte-variablen-in-mysql/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 12:03:22 +0000</pubDate>
		<dc:creator>ric</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[variablen]]></category>

		<guid isPermaLink="false">http://blog.rki-home.de/?p=283</guid>
		<description><![CDATA[MySQL unterstützt Variablen anscheinend bereits seit Version 3.23.6, aber ich habe diese Möglichkeit (ausserhalb von Stored Procedures) erst vor ein paar Monaten zu Kenntnis genommen und erst gestern wirklich wahrgenommen. Es gibt ja in der Tat immer wieder Fälle, in denen Variablen einem die Arbeit erheblich erleichtern würden. Wenn man zum Beispiel zwei Felder &#8216;datum&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL unterstützt Variablen anscheinend bereits seit Version 3.23.6, aber ich habe diese Möglichkeit (ausserhalb von Stored Procedures) erst vor ein paar Monaten zu Kenntnis genommen und erst gestern wirklich wahrgenommen.<br />
Es gibt ja in der Tat immer wieder Fälle, in denen Variablen einem die Arbeit erheblich erleichtern würden.<br />
<span id="more-283"></span><br />
Wenn man zum Beispiel zwei Felder &#8216;datum&#8217; und &#8216;uhrzeit&#8217; hat, und diese per Select zu einem Feld mit dem Alias &#8216;datum_zeit&#8217; zusammenfassen möchte, aber gleichzeitig in einem weiteren Feld &#8216;abgelaufen&#8217; feststellen möchte, ob der Zeitpunkt des Datensatzes bereits vorrüber ist, musste ich das bisher so machen:</p>
<div class="codeblock">SELECT CONCAT(datum,&#8217; &#8216;,uhrzeit) AS datum_zeit,<br />IF (CONCAT(datum,&#8217; &#8216;,uhrzeit) < NOW(), 1, 0) AS abgelaufen<br />FROM tabelle</div>
<p>Mit Variablen verkürzt sich der Query folgendermassen:</p>
<div class="codeblock">SELECT @v:=CONCAT(datum,&#8217; &#8216;,uhrzeit ) AS datum_zeit,<br />IF (@v < NOW(), 1, 0) AS abgelaufen<br />FROM tabelle</div>
<p>Ich muss also nicht mehr den CONCAT-Teil wiederholen, sondern kann ihn in der Variable @v speichern und darf diese Variable sofort verwenden. Im Gegensatz zum Alias, denn der ist frühestens im GROUP-BY-Abschnitt verfügbar .</p>
<p>Hier die offizielle MySQL-Dokumentation zu dem Thema: <a href="http://dev.mysql.com/doc/refman/4.1/en/user-variables.html">User-Defined Variables</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rki-home.de/2009/02/06/benutzerdefinierte-variablen-in-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CodeCharge: Custom Blocks innerhalb Panels</title>
		<link>http://blog.rki-home.de/2008/10/26/codecharge-custom-blocks-innerhalb-panels/</link>
		<comments>http://blog.rki-home.de/2008/10/26/codecharge-custom-blocks-innerhalb-panels/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 14:24:10 +0000</pubDate>
		<dc:creator>ric</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[CodeCharge]]></category>
		<category><![CDATA[Custom Blocks]]></category>
		<category><![CDATA[Panels]]></category>
		<category><![CDATA[Template]]></category>

		<guid isPermaLink="false">http://blog.rki-home.de/?p=228</guid>
		<description><![CDATA[Dieser Artikel bezieht sich auf CodeCharge Studio 4.01.00.06. Andere Versionen könnten sich abweichend verhalten! Seit ein paar Wochen arbeite ich an einem Projekt, welches die Vorgabe hat, komplett in CodeCharge enwickelt zu werden. Dabei bin ich immer wieder an die Grenzen dieses mächtigen Werkzeuges gestossen. Ein häufiges Problem ist für mich, die Custom-Block-Möglichkeiten der Template-Klasse [...]]]></description>
			<content:encoded><![CDATA[<p><em>Dieser Artikel bezieht sich auf <strong>CodeCharge Studio 4.01.00.06</strong>. Andere Versionen könnten sich abweichend verhalten!</em></p>
<p>Seit ein paar Wochen arbeite ich an einem Projekt, welches die Vorgabe hat, komplett in CodeCharge enwickelt zu werden. Dabei bin ich immer wieder an die Grenzen dieses mächtigen Werkzeuges gestossen. Ein häufiges Problem ist für mich, die Custom-Block-Möglichkeiten der Template-Klasse an Stellen zu verwenden, die CodeCharge anscheinend nicht dafür vorgesehen hat und daher nicht ohne weiteres zulässt.<span id="more-228"></span></p>
<p>Es gibt drei unterschiedlich zu behandelnde Fälle, Custom Blocks zu plazieren, soweit ich das überblicke:</p>
<ul>
<li><strong>in der obersten Ebene, ausserhalb aller Components</strong><br />
Hier gibt es gar keine Probleme. Man kann seine Custom Blocks einfach definieren:</p>
<pre>
&lt;!-- BEGIN mein_custom_block --&gt;
   mein html code undso mit {meine_variable}
&lt;!-- END mein_custom_block --&gt;
</pre>
<p>und per benutzerdefinierten PHP-Code z.B. im &#8220;Before Show&#8221;-Event der Seite so verwenden:</p>
<pre>
global $Tpl;
$first = true;
foreach ($mein_array as $element)
{
   $Tpl->SetVar("meine_variable", element);
   $Tpl->Parse("mein_custom_block", !$first);
   $first = false;
}
</pre>
</li>
<li><strong>innerhalb eines Blockes <em>(z.B. Row)</em> einer Component <em>(z.B. Grid)</em></strong><br />
Das funktioniert fast genauso. Man muss der Template-Klasse nur die eigene Block-Variable nennen:</p>
<pre>
global $Tpl;
$first = true;
$Tpl->SetBlockVar("mein_custom_block","");
foreach ($mein_array as $element)
{
   $Tpl->SetVar("meine_variable", element);
   $Tpl->Parse("mein_custom_block", !$first);
   $first = false;
}
</pre>
<p>Diese ersten beiden Fälle sind auch dokumentiert: <a href="http://docs.codecharge.com/studio40/html/ProgrammingTechniques/HowTo/WorkingWithPages/CustomTemplateBlocks.html">Working with Custom Template Blocks</a>
</li>
<li><strong>innerhalb eines Panels (bzw. Update-Panels)</strong><br />
Will man einen Custom-Block innerhalb eines Panels verwenden, was ja das Mittel der Wahl sein soll, sobald man ganze Bereiche der Webseite einfach ein bzw. ausblenden muss (z.B. wegen Zugangsberechtigungen), dann funktionieren die ersten beide Vorgehensweisen nicht mehr. Custom-Blöcke werden hier nicht berücksichtigt, ja sogar vor dem Anzeigen entfernt.</p>
<p>Das liegt daran, dass der Template-Klassen-interne Zeiger auf der darüberliegenden Ebene stehen bleibt, sobald man sich im &#8220;before show&#8221;-Ereignis des Panels befindet.<br />
Die Abhilfe dazu sieht so aus, dass man </p>
<ol>
<li>sich die aktuelle Position des Template-Klassen-Zeigers merkt (in unserem Fall müsste &#8220;/main&#8221; darin stehen),</li>
<li>dann den Zeiger mit dem Panel-Pfad-Überschreibt (z.B. &#8220;/main/Panel mein_panel&#8221;),</li>
<li>hier wie bei den anderen beiden Fällen, die Template-Operationen durchführt und </li>
<li>danach den Zeiger wieder auf den ursprünglichen Punkt richtet (also in unserem Beispiel wieder auf &#8220;/main&#8221;).</li>
</ol>
<pre>
global $Tpl;
// (1):
$aktueller_zeiger = $Tpl->block_path;
// (2):
$Tpl->block_path = $aktueller_zeiger . "/Panel mein_panel";
// (3):
$first = true;
foreach ($mein_array as $element)
{
   $Tpl->SetVar("meine_variable", element);
   $Tpl->Parse("mein_custom_block", !$first);
   $first = false;
}
// (4):
$Tpl->block_path = $aktueller_zeiger;
</pre>
<p><strong>Benötigt man übrigens in seinem Panel lediglich eine Template-Variable (also {meine_variable}) ohne einen Custom-Block, so braucht man sich nicht mit diesem Workaround abgeben. Template-Variablen alleine funktionieren innerhalb von Panels wie gewohnt und völlig problemlos.<br />
</strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.rki-home.de/2008/10/26/codecharge-custom-blocks-innerhalb-panels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firebug, &#8220;syntax error&#8221; und DOCTYPE</title>
		<link>http://blog.rki-home.de/2008/10/22/firebug-syntax-error-und-doctype/</link>
		<comments>http://blog.rki-home.de/2008/10/22/firebug-syntax-error-und-doctype/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 12:35:50 +0000</pubDate>
		<dc:creator>ric</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[CodeCharge]]></category>
		<category><![CDATA[DOCTYPE]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[syntax error]]></category>

		<guid isPermaLink="false">http://blog.rki-home.de/?p=207</guid>
		<description><![CDATA[Heute sind wir über ein interessantes Phänomen bei einem CodeCharge-Projekt gestolpert: bei bestimmten Seiten hatte der Firebug einen &#8220;syntax error&#8221; in Zeile 1 festgestellt und die erste Zeile des HTML-Codes zitiert: &#8220;&#60;!DOCTYPE (&#8230;)&#8221;. Nachfolgene JavaScript-Aufrufe gaben teilweise weitere Fehler aus, teilweise aber auch nicht. Damit konnten wir zunächst gar nichts anfangen. Eine Suche bei Google [...]]]></description>
			<content:encoded><![CDATA[<p>Heute sind wir über ein interessantes Phänomen bei einem CodeCharge-Projekt gestolpert: bei bestimmten Seiten hatte der Firebug einen <strong>&#8220;syntax error&#8221; in Zeile 1</strong> festgestellt und die erste Zeile des HTML-Codes zitiert: &#8220;<strong>&lt;!DOCTYPE</strong> (&#8230;)&#8221;. Nachfolgene JavaScript-Aufrufe gaben teilweise weitere Fehler aus, teilweise aber auch nicht.<br />
<span id="more-207"></span><br />
Damit konnten wir zunächst gar nichts anfangen. Eine Suche bei Google ergab nicht viel, ausser dass vereinzelt Leute auch solche Probleme meldeten, aber meistens keine sinnvolle Lösung präsentieren konnten. Unter anderem wurde darauf hingewiesen, dass dieser Fehler vorkommt, sobald man ein <strong>script-Tag </strong>im Code stehen hat, welches ein <strong>leeres src-Attribut</strong> besitzt.<br />
Bei uns gab es aber keine leeren src-Attribute &#8211; die Lösung war aber gar nicht so weit davon entfernt. In diesem speziellen Fall haben wir wegen der URL-Lesbarkeit diverse <strong>mod_rewrite</strong>-Regeln in unserem Projekt, die dummerweise mit den (leider nicht absoluten) Pfadangaben der CodeCharge-JavaScript-Dateien kollidierten. Erschwert hat die Fehlersuche, dass durch die mod_rewrite-Regeln die Script-Datei zufälligerweise auf die jeweilige aufrufende(!) HTML- bzw PHP-Seite umgeleitet wurde. Wenn man also im Firebug die Fehlerzeile anzeigen wollte, bekam man genau den HTML-Code der aufgerufenen Webseite. Wenn wir aufmerksamer gewesen wären, hätten wir merken müssen, dass eigentlich die erste Zeile der jeweiligen JavaScript-Datei als Fehler genannt wurde&#8230;</p>
<p><strong>Zusammengefasst:</strong> Das Problem lag daran, dass die externen JavaScript-Dateien nicht geladen werden konnten, stattdessen wurden HTML-Seiten durch ungünstig gewählte mod_rewrite-Regeln geladen, die natürlich einen &#8220;syntax error&#8221; erzeugten.<br />
Das steht dem Fehlverhalten bei leerem src-Attribut in script-Tags nicht entgegen, denn der Webserver gibt normalerweise eine Standard-Seite (z.B. index.html) zurück, wenn nur ein Verzeichnis aufgerufen wird (bei leerem src-Attribut wird von Webserver automatisch der komplette Pfad der Basis-Seite ohne Dateiname verwendet), oder eben, falls nicht vorhanden, eine Fehler-Seite, die meistens HTML-Code beinhalten und eben nicht JavaScript.</p>
<p><strong>Die Lösung:</strong> Man muss nur dafür sorgen, dass alle eingebundenen JavaScript-Dateien auch tatsächlich geladen werden, bzw auch den Inhalt haben, der tatsächlich gebraucht wird.<br />
Bei uns hiess das, die mod_rewrite-Regeln soweit anpassen, dass solche Script-Dateien nicht umgeleitet werden. CodeCharge-seitig wäre das zu aufwendig geworden, denn es handelte sich hier um HTML-Code der von CodeCharge generiert wird und nur schwer beeinflusst werden kann, ohne dass bei neuem Generieren die Anpassungen wieder überschrieben geworden wären.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rki-home.de/2008/10/22/firebug-syntax-error-und-doctype/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>onClick oder onChange?</title>
		<link>http://blog.rki-home.de/2008/04/30/onclick-oder-onchange/</link>
		<comments>http://blog.rki-home.de/2008/04/30/onclick-oder-onchange/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 10:55:58 +0000</pubDate>
		<dc:creator>ric</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[jscript]]></category>
		<category><![CDATA[onchange]]></category>
		<category><![CDATA[onclick]]></category>
		<category><![CDATA[radiobutton]]></category>

		<guid isPermaLink="false">http://blogs.rki-home.de/ric/2008/04/30/onclick-oder-onchange/</guid>
		<description><![CDATA[Gerade bin ich über ein JScript-Problem gestolpert, bei dem ich ein wenig nachdenken musste (zur Abwechslung *g*). Die Ausgangssituation: ich hatte zwei Radio-Buttons, die typischerweise zur selben Gruppe gehören, weshalb nur einer von beiden Buttons zur selben Zeit ausgewählt sein kann. Ich wollte für den Fall, dass einer der Buttons angeklickt wird, weitere Formularfelder einblenden [...]]]></description>
			<content:encoded><![CDATA[<p>Gerade bin ich über ein JScript-Problem gestolpert, bei dem ich ein wenig nachdenken musste (zur Abwechslung *g*).<br />
Die Ausgangssituation: ich hatte zwei Radio-Buttons, die typischerweise zur selben Gruppe gehören, weshalb nur einer von beiden Buttons zur selben Zeit ausgewählt sein kann. Ich wollte für den Fall, dass einer der Buttons angeklickt wird, weitere Formularfelder einblenden (damit der Benutzer nicht von vornherein von der Menge der Eingabefelder überwältigt ist&#8230;oderso). Intuitiv habe ich daher gleich zum Event <em>onChange</em> gegriffen, schliesslich sollte das Script nur aktiv werden, sobald sich der Zustand ändert. Das schien auf den ersten Blick auch wunderbar zu funktionieren. Ich teste ja parallel alles sofort auf dem Firefox. Als ich aber kurz im IE6 geschaut habe, ob das Layout noch passt musste ich feststellen, dass das überhaupt nicht funktioniert. Lustigerweise war beim MS-Browser die Funktionalität meines kleinen Scriptes sogar genau umgekehrt als vorgesehen &#8211; und das obwohl ich klar nach dem checked-Zustand abgefragt hatte.<span id="more-40"></span><br />
Jedenfalls musste ich dann auf <em>onClick</em> ausweichen, was ich ja eigentlich nicht nehmen wollte, weil man nicht unbedingt das Formular mit der Maus bedienen muss. Ausserdem hatte ich noch zwei Labels zu den jeweiligen Radio-Buttons definiert, die natürlich auch anklickbar wären, wofür ich aber zusätzlich auch deren <em>onClick</em>-Ereignisse hätte abfangen müssen&#8230;dachte ich zumindest.</p>
<p>Es ist aber ganz anders als ich es mir gedacht hatte: <em>onChange</em> funktionierte für meine zwecke überhaupt nicht unter dem IE6, wogegen <em>onClick</em> genau die komplette Funktionalität lieferte, die ich wollte: selbst wenn ein Radio-Button per Space-Taste ausgewählt wird, wird <em>onClick</em> ausgelöst. Genauso verhält es sich mit den Labels, die mit den jeweiligen Radio-Buttons direkt verbunden sind und daher auch das <em>onClick</em>-Ereignis des zugehörigen Buttons auslösen, also nicht nur den blossen Zustand des Buttons mit beeinflussen.</p>
<p>Das Problem ist jetzt gelöst, aber ich bin gerade etwas unschlüssig, ob ich die Logik hinterfragen muss, mit der ich an die Auswahl des Events herangegangen bin, oder ob der IE6 an dieser Stelle einfach falsch reagiert&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rki-home.de/2008/04/30/onclick-oder-onchange/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flocken ohne Ende</title>
		<link>http://blog.rki-home.de/2008/04/10/flocken-ohne-ende/</link>
		<comments>http://blog.rki-home.de/2008/04/10/flocken-ohne-ende/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 17:07:20 +0000</pubDate>
		<dc:creator>ric</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[flocken]]></category>
		<category><![CDATA[fraktale]]></category>
		<category><![CDATA[kurven]]></category>

		<guid isPermaLink="false">http://blogs.rki-home.de/ric/2008/04/10/flocken-ohne-ende/</guid>
		<description><![CDATA[Ich bin jetzt alle Beispiele durchgegangen, die auf der deutschen Wikipedia-Seite zu Fraktalen aufgeführt wurden, welche sich geometrisch konstruieren lassen. Hiermit ist quasi bewiesen, dass die dort angegebenen Regeln (auch &#8220;L-Systeme&#8221; genannt) zur Konstruktion alle korrekt sind, wobei nicht alle Fälle selbsterklärend sind. Speziell die Hilbert und die Peano Kurve wichen plötlich von der Notation [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin jetzt alle Beispiele durchgegangen, die auf der deutschen Wikipedia-Seite zu Fraktalen aufgeführt wurden, <a href="http://de.wikipedia.org/wiki/Fraktal#Fraktale.2C_die_sich_geometrisch_konstruieren_lassen">welche sich geometrisch konstruieren lassen</a>. Hiermit ist quasi bewiesen, dass die dort angegebenen Regeln (auch &#8220;L-Systeme&#8221; genannt) zur Konstruktion alle korrekt sind, wobei nicht alle Fälle selbsterklärend sind. Speziell die Hilbert und die Peano Kurve wichen plötlich von der Notation ab: zuerst gab es die Strecken-Variablen <em>L</em> und <em>R</em> und hier auf einmal <em>X</em>, <em>Y</em> UND <em>F</em>. Desweiteren ging man vorher von gleichen Seitenlängen für <em>R/L</em> aus, wobei <em>X/Y</em> plötzlich gar keine Länge mehr hatte und dafür nur noch <em>F</em> abgetragen wurde.</p>
<p>Aber schliesslich habe ich alle Systeme anwenden können. Hier sind die Ergebnisse:</p>
<p><strong>Hilbert Kurve:</strong></p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/hilbert.png' alt='Hilbert Kurve' /></div>
<p><em>Streckenlänge: 4 Pixel<br />
Iterationstiefe: 6<br />
Winkel: 90°</em><br />
<span id="more-26"></span></p>
<p><strong>Gosper Kurve:</strong></p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/gosper.png' alt='Gosper Kurve' /></div>
<p><em>Streckenlänge: 5 Pixel<br />
Iterationstiefe: 4<br />
Winkel: 60°</em></p>
<p><strong>Peano Kurve:</strong></p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/peano.png' alt='Peano Kurve' /></div>
<p><em>Streckenlänge: 3 Pixel<br />
Iterationstiefe: 4<br />
Winkel: 90°</em></p>
<p><strong>Koch Kurve:</strong></p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/koch.png' alt='Koch Kurve' /></div>
<p><em>Streckenlänge: 3 Pixel<br />
Iterationstiefe: 4<br />
Winkel: 60°</em></p>
<p><strong>Penta Plexity:</strong></p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/pentaplexity.png' alt='Penta Plexity' /></div>
<p><em>Streckenlänge: 10 Pixel<br />
Iterationstiefe: 3<br />
Winkel: 36°</em></p>
<p><strong>Pfeilspitze:</strong></p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/pfeilspitze.png' alt='Pfeilspitze' /></div>
<p><em>Streckenlänge: 5 Pixel<br />
Iterationstiefe: 6<br />
Winkel: 60°</em></p>
<p><strong>Sierpinskidreieck:</strong></p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/sierpinskidreieck.png' alt='Sierpinskidreieck' /></div>
<p><em>Streckenlänge: 5 Pixel<br />
Iterationstiefe: 5<br />
Winkel: 60°</em></p>
<p><strong>Sierpinskiteppich:</strong></p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/sierpinskiteppich.png' alt='Sierpinskiteppich' /></div>
<p><em>Streckenlänge: 3 Pixel<br />
Iterationstiefe: 4<br />
Winkel: 90°</em></p>
<p><strong>Lévy C Kurve:</strong></p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/levyc.png' alt='Lévy C Kurve' /></div>
<p><em>Streckenlänge: 3 Pixel<br />
Iterationstiefe: 12<br />
Winkel: 45°</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rki-home.de/2008/04/10/flocken-ohne-ende/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drachenkurve</title>
		<link>http://blog.rki-home.de/2008/04/09/drachenkurve/</link>
		<comments>http://blog.rki-home.de/2008/04/09/drachenkurve/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 17:26:21 +0000</pubDate>
		<dc:creator>ric</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[drachenkurve]]></category>
		<category><![CDATA[fraktale]]></category>

		<guid isPermaLink="false">http://blogs.rki-home.de/ric/2008/04/09/drachenkurve/</guid>
		<description><![CDATA[So&#8230;noch ein bisschen rumgespielt und dabei die Drachenkurve reproduziert: Dafür bin ich von einem String ausgegangen, in dem anfangs nur &#8220;R&#8221; steht. Den habe ich dann in eine (rekursive) Funktion gesteckt, die in jedem Durchlauf folgende Textersetzung durchführt: &#8220;R&#8221; -&#62; &#8220;+R&#8211;&#8211;L+&#8221; &#8220;L&#8221; -&#62; &#8220;&#8211;R++L&#8211;&#8221; Das bedeutet, dass nach einem Durchlauf &#8220;+R&#8211;&#8211;L+&#8221; im String steht und [...]]]></description>
			<content:encoded><![CDATA[<p>So&#8230;noch ein bisschen rumgespielt und dabei die Drachenkurve reproduziert:</p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/drachenkurve.png' alt='Drachenkurve' /></div>
<p><span id="more-24"></span><br />
Dafür bin ich von einem String ausgegangen, in dem anfangs nur &#8220;R&#8221; steht.<br />
Den habe ich dann in eine (rekursive) Funktion gesteckt, die in jedem Durchlauf folgende Textersetzung durchführt:<br />
<strong><br />
&#8220;R&#8221; -&gt; &#8220;+R&ndash;&ndash;L+&#8221;<br />
&#8220;L&#8221; -&gt; &#8220;&ndash;R++L&ndash;&#8221;<br />
</strong><br />
Das bedeutet, dass nach einem Durchlauf &#8220;<em>+R&ndash;&ndash;L+</em>&#8221; im String steht und im nächsten dann &#8220;<em>++R&ndash;&ndash;L+&ndash;&ndash;&ndash;R++L&ndash;+</em>&#8220;. Nach 14 Durchläufen hat man dann einen kilometerlangen String aus lauter Plussen, Minussen, Ls und Rs. Diesen String habe ich dann als Anweisung zum Malen verwendet, bei dem die Zeichen folgendermassen interpretiert wurden:</p>
<p><strong>&#8220;&ndash;&#8221;:</strong> Zeichenrichtung um 45° nach <em>links</em> drehen,<br />
<strong>&#8220;+&#8221;:</strong> Zeichenrichtung um 45° nach <em>rechts</em> drehen,<br />
<strong>&#8220;L&#8221;, &#8220;R&#8221;:</strong> eine Linie einer bestimmten Länge (hier: 2 Pixel) in die aktuelle Zeichenrichtung ziehen.</p>
<p>Das ist eigentlich schon alles. Simpler gehts eigentlich kaum, und trotzdem kommt dann so eine mehr oder weniger interessante Grafik heraus.</p>
<p>Mehr dazu gibts in Wikipedia: <a href="http://de.wikipedia.org/wiki/Fraktal">Fraktal</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rki-home.de/2008/04/09/drachenkurve/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fraktale Spielereien</title>
		<link>http://blog.rki-home.de/2008/04/09/fraktale-spielereien/</link>
		<comments>http://blog.rki-home.de/2008/04/09/fraktale-spielereien/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 15:29:19 +0000</pubDate>
		<dc:creator>ric</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[farne]]></category>
		<category><![CDATA[fraktale]]></category>

		<guid isPermaLink="false">http://blogs.rki-home.de/ric/2008/04/09/fraktale-spielereien/</guid>
		<description><![CDATA[Ich habe mich das erste Mal seit der Schulzeit wieder mit Fraktalen Spielereien beschäftigt und ein paar (trivialere) Beispiele nachgebastelt. Dafür musste ich aber glatt ein kleines bisschen Schul-Mathematik wiederholen, was eigentlich doch immer wieder Spass machen kann. Konkret habe ich den Computer simple Farne malen lassen. Die auzufrischenden mathematischen Grundlagen waren hierbei Vektoren (z.B. [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe mich das erste Mal seit der Schulzeit wieder mit Fraktalen Spielereien beschäftigt und ein paar (trivialere) Beispiele nachgebastelt.</p>
<p>Dafür musste ich aber glatt ein kleines bisschen Schul-Mathematik wiederholen, was eigentlich doch immer wieder Spass machen kann.<br />
Konkret habe ich den Computer simple Farne malen lassen. Die auzufrischenden mathematischen Grundlagen waren hierbei Vektoren (z.B. Berechnung von Betrag/Länge und Winkel) oder auch Schlagworte wie Polarkoordinaten bzw Kartesisches Koordinatensystem.<br />
<span id="more-22"></span><br />
Jedenfalls ist das alles ganz und gar nichts Neues, aber es kann nicht schaden, auch mal mit sowas rumzuspielen <img src='http://blog.rki-home.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div class="bigimage"><img src='http://gallery.koehls.de/albums/geometic_fractals/farne.png' alt='Farne' /></div>
<p>Links ist ein sehr simpler Farn, der dadurch entsteht, dass an eine Linie quasi eine leicht skalierte Kopie eben jener Linie in einem bestimmten Winkel angelegt wird. Dann legt man an die neue Linie wieder eine im gleichen Maße skalierte Version der zweiten Linie an und wiederholt das so lange, bis die Linie nur noch ein Punkt ist und sich kaum noch eine Veränderung im Bild dadurch ergeben kann.<br />
Rechts ist ein etwas komplexerer Farn, bei dem eben immer zwei verschiedene, skalierte Kopien in verschiedenen Winkeln an die Ursprungslinie angelegt werden.</p>
<p>Während ich mit dem simplen Farn noch keine rekursive Funktion benötigt habe, sondern einfach nur eine begrenzte Schleife benutzt habe, musste ich für den zweiten Farn schon eine sich selbst aufrufende Funktion verwenden, was bei einer Tiefe von zwölf Iterationen durchaus einen merklichen Verbrauch an Sytemressourcen zur Folge hat. Dabei ist die Wahl der Skriptsprache PHP vielleicht auch nicht gerade das Optimum für solche Spielereien&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rki-home.de/2008/04/09/fraktale-spielereien/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
