<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>virtual-maxim</title>
	
	<link>http://www.virtual-maxim.de</link>
	<description />
	<lastBuildDate>Tue, 15 May 2012 21:04:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/virtual-maxim" /><feedburner:info uri="virtual-maxim" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>String in Integer konvertieren (dezimal, binär, hexadezimal, oktal)</title>
		<link>http://feedproxy.google.com/~r/virtual-maxim/~3/aAftrpmdH7Q/</link>
		<comments>http://www.virtual-maxim.de/string-in-integer-konvertieren-dezimal-binar-hexadezimal-oktal/#comments</comments>
		<pubDate>Sat, 28 Apr 2012 11:40:05 +0000</pubDate>
		<dc:creator>Maxim</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[atob]]></category>
		<category><![CDATA[atoh]]></category>
		<category><![CDATA[atoi]]></category>
		<category><![CDATA[binär]]></category>
		<category><![CDATA[dezimal]]></category>
		<category><![CDATA[hexadezimal]]></category>
		<category><![CDATA[konvertierung]]></category>
		<category><![CDATA[oktal]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://www.virtual-maxim.de/?p=3868</guid>
		<description><![CDATA[Wie man Strings in Zahlen und Zahlen in Strings in C++ konvertiert, habe ich bereits beschrieben. Jetzt möchte ich eine Lösung vorstellen, wie Strings in Integer ganz &#8220;per Hand&#8221; umwandelt werden (Es war meine Hausaufgabenlösung in Informatik). Um einen String in einen Integer umzuwandeln, lohnt es sich das ASCII-System auszunutzen. Das Prinzip ist ziemlich einfach: Man nimmt das erste char-Zeichen (was nichts anderes als eine... <a href="http://www.virtual-maxim.de/string-in-integer-konvertieren-dezimal-binar-hexadezimal-oktal/" title="Weiterlesen: String in Integer konvertieren (dezimal, binär, hexadezimal, oktal)" >Weiterlesen</a>]]></description>
			<content:encoded><![CDATA[<p>Wie man Strings in Zahlen und Zahlen in Strings in C++ konvertiert, habe ich <a href="http://www.virtual-maxim.de/c-string-in-int-float-double-und-zuruck-konvertieren/" title="String to int, float">bereits beschrieben</a>. Jetzt möchte ich eine Lösung vorstellen, wie Strings in Integer ganz &#8220;per Hand&#8221; umwandelt werden (Es war meine Hausaufgabenlösung in Informatik). </p>
<p>Um einen String in einen Integer umzuwandeln, lohnt es sich das ASCII-System auszunutzen. Das Prinzip ist ziemlich einfach: Man nimmt das erste char-Zeichen (was nichts anderes als eine Nummerierungszahl in der ASCII-Tabelle ist) und zieht davon die Position des Null-Zeichens ab. Damit bekommt man zu dem betrachteten Zeichen entsprechenden Integer-Wert, also aus &#8217;8&#8242; wird 8 usw.. Im nächsten Schritt wiederholt man die gleiche Prozedur mit dem nächsten Zeichen und der Wert, den man im letzten Schritt ausgerechnet hat, wird mit der Basis (für Dezimal: 10) multipliziert, so dass er eine Stelle nach links wandert. Das ganze wird wiederholt bis alle String-Zeichen durchlaufen sind.</p>
<pre class="brush: cpp; title: ; notranslate">
// String (positive Ganzzahl) -&gt; Integer
int myAtoi(const char* str)
{
	int res = 0;

	while(*str)
		res = res*10 + (*str++ - '0');	// Nutzt ASCII-System aus

	return res;
}
</pre>
<p>Eine weitere Version unterstützt noch andere Zahlensysteme: </p>
<pre class="brush: cpp; title: ; notranslate">
// String (z.B. 0b110010010, 0o1163774, 0x01656E0F, 2234) -&gt; Integer
// Annahme bei 0x-Zahlen: nur Großbuchstaben
int myAtoi(const char* str)
{
	int res = 0;
	const char* ch = str;

	switch(*++ch)
	{
		case 'b':	// binäre zahl
			while(*++ch)
				res = res*2 + (*ch - '0');
			break;

		case 'o':	// oktale zahl
			while(*++ch)
				res = res*8 + (*ch - '0');
			break;

		case 'x':	// hexadezimale zahl
			while(*++ch)
				res = res*16 + (('0' &lt;= *ch &amp;&amp; *ch &lt;= '9') ? (*ch - '0') : (*ch - 'A'+ 10));
			break;

		default: // dezimale zahl
			while(*str)
				res = res*10 + (*str++ - '0');
	}

	return res;
}
</pre>
<p>Viel Spaß damit. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.virtual-maxim.de/string-in-integer-konvertieren-dezimal-binar-hexadezimal-oktal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.virtual-maxim.de/string-in-integer-konvertieren-dezimal-binar-hexadezimal-oktal/</feedburner:origLink></item>
		<item>
		<title>Cache-Optimierung: Zeitliche und Räumliche Lokalität</title>
		<link>http://feedproxy.google.com/~r/virtual-maxim/~3/t2CA7HgQDYM/</link>
		<comments>http://www.virtual-maxim.de/cache-optimierung-zeitliche-und-raeumliche-lokalitaet/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 17:27:41 +0000</pubDate>
		<dc:creator>Maxim</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[optimierung]]></category>
		<category><![CDATA[programmieren]]></category>

		<guid isPermaLink="false">http://www.virtual-maxim.de/?p=3844</guid>
		<description><![CDATA[Wenn man schnelle Programme schreiben möchte, so muss man auch die Funktionsweise der Hardware beachten, wie ich im Folgenden zeige werde. Nehmen wir an, es muss ein zweidimensionales Array vollständig durchlaufen werden. Dieser Fall trifft beispielsweise oft auf, wenn man Bildmanipulationen durchführt. Dazu ein minimales Beispiel. Es wird ein zweidimensionales Integer-Array erstellt und auf zwei unterschiedliche Weisen durchlaufen. In jedem Durchgang wird ein Wert in... <a href="http://www.virtual-maxim.de/cache-optimierung-zeitliche-und-raeumliche-lokalitaet/" title="Weiterlesen: Cache-Optimierung: Zeitliche und Räumliche Lokalität" >Weiterlesen</a>]]></description>
			<content:encoded><![CDATA[<p>Wenn man schnelle Programme schreiben möchte, so muss man auch die Funktionsweise der Hardware beachten, wie ich im Folgenden zeige werde.</p>
<p>Nehmen wir an, es muss ein zweidimensionales Array vollständig durchlaufen werden. Dieser Fall trifft beispielsweise oft auf, wenn man Bildmanipulationen durchführt. Dazu ein minimales Beispiel.</p>
<pre class="brush: cpp; title: ; notranslate">
	// ein Array dynamisch erstellen
	size_t width = 10000;
	size_t height = 10000;
	int* arr = new int[height*width];

	// Array zeilenweise durchlaufen
	for(size_t i = 0; i &lt; height; i++)
		for(size_t j = 0; j &lt; width; j++)
			arr[i*width+j] = i*j;

	// Array spaltenweise durchlaufen
	for(size_t j = 0; j &lt; width; j++)
		for(size_t i = 0; i &lt; height; i++)
			arr[i*width+j] = i*j;
</pre>
<p>Es wird ein zweidimensionales Integer-Array erstellt und auf zwei unterschiedliche Weisen durchlaufen. In jedem Durchgang wird ein Wert in das Array geschrieben. </p>
<p>Misst man die Zeit, die die beiden Schleifen zum durchlaufen des Arrays brauchen, so bekommt man ein zunächst überraschendes Bild.</p>
<p><div id="attachment_3846" class="wp-caption alignnone" style="width: 468px"><img src="http://www.virtual-maxim.de/wp-content/uploads/2012/04/looptimew.png" alt="Benötigte Zeit zum schreiben eines Arrays in Abhängigkeit von der Array-Größe." title="Benötigte Zeit zum schreiben eines Arrays in Abhängigkeit von der Array-Größe." width="458" height="366" class="size-full wp-image-3846" /><p class="wp-caption-text">Benötigte Zeit zum schreiben eines Arrays in Abhängigkeit von der Array-Größe.</p></div></p>
<p>Auf der X-Achse ist die Größe des Arrays aufgetragen und auf der Y-Achse die durchschnittliche Zeit (in Millisekunden, was an dieser Stelle aber unwichtig ist) aus 5 Durchläufen, die für einen Array-Durchlauf benötigt wurde <sup><a href="#note1">1</a></sup>. </p>
<p>Offensichtlich benötigt der Code weniger Zeit, wenn das Array zeilenweise durchlaufen wird. Wie groß dieser Unterschied ist, sieht man besser, wenn man die beiden Zeiten in Verhältnis setzt.</p>
<p><div id="attachment_3847" class="wp-caption alignnone" style="width: 474px"><img src="http://www.virtual-maxim.de/wp-content/uploads/2012/04/speedupw.png" alt="Geschwindigkeitsgewinn beim durchlaufen eines Arrays (Schreibvorgang) zeilenweise, anstatt spaltenweise. Aufgetragen in Abhängigkeit von der Array-Größe." title="Geschwindigkeitsgewinn beim durchlaufen eines Arrays (Schreibvorgang) zeilenweise, anstatt spaltenweise.  Aufgetragen in Abhängigkeit von der Array-Größe." width="464" height="380" class="size-full wp-image-3847" /><p class="wp-caption-text">Geschwindigkeitsgewinn beim durchlaufen eines Arrays (Schreibvorgang) zeilenweise, anstatt spaltenweise.  Aufgetragen in Abhängigkeit von der Array-Größe.</p></div></p>
<p>Nach der Grafik zu urteilen beträgt der Geschwindigkeitsfaktor etwa 13 <sup><a href="#note2">2</a></sup>. Ein beachtlicher Wert, wenn man bedenkt, dass es sich nur um eine einzige Schleife handelt. </p>
<p>Das gleiche bzw. sogar etwas bessere Bild bekommt man auch, wenn man die Lesezeiten misst.</p>
<p><div id="attachment_3848" class="wp-caption alignnone" style="width: 474px"><img src="http://www.virtual-maxim.de/wp-content/uploads/2012/04/looptimer.png" alt="Benötigte Zeit zum lesen eines Arrays in Abhängigkeit von der Array-Größe." title="Benötigte Zeit zum lesen eines Arrays in Abhängigkeit von der Array-Größe." width="464" height="373" class="size-full wp-image-3848" /><p class="wp-caption-text">Benötigte Zeit zum lesen eines Arrays in Abhängigkeit von der Array-Größe.</p></div></p>
<p><div id="attachment_3849" class="wp-caption alignnone" style="width: 474px"><img src="http://www.virtual-maxim.de/wp-content/uploads/2012/04/speedupr.png" alt="Geschwindigkeitsgewinn beim durchlaufen eines Arrays (Lesevorgang) zeilenweise, anstatt spaltenweise. Aufgetragen in Abhängigkeit von der Array-Größe." title="Geschwindigkeitsgewinn beim durchlaufen eines Arrays (Lesevorgang) zeilenweise, anstatt spaltenweise.  Aufgetragen in Abhängigkeit von der Array-Größe." width="464" height="371" class="size-full wp-image-3849" /><p class="wp-caption-text">Geschwindigkeitsgewinn beim durchlaufen eines Arrays (Lesevorgang) zeilenweise, anstatt spaltenweise.  Aufgetragen in Abhängigkeit von der Array-Größe.</p></div></p>
<p>Der Grund für die Geschwindigkeitsunterschiede ist die Cache-Verwaltung des Prozessors. Ein Computer hat mehrere Speicher, die unterschiedlich schnell und unterschiedlich groß sind, wie in der nachfolgenden Abbildung schematisch dargestellt ist.</p>
<p><div id="attachment_3850" class="wp-caption alignnone" style="width: 437px"><img src="http://www.virtual-maxim.de/wp-content/uploads/2012/04/cache.png" alt="Cache-Hierarchie." title="Cache-Hierarchie." width="427" height="422" class="size-full wp-image-3850" /><p class="wp-caption-text">Cache-Hierarchie.</p></div></p>
<p>L1- Cache ist der kleinste Speicher, er liegt am nächsten zum Prozessor und der Zugriff darauf geschieht am schnellsten <sup><a href="#note3">3</a></sup>. Andere Speicher sind größer, aber dafür langsamer. </p>
<p>Muss der Prozessor auf eine Speicheradresse zugreifen, dann wird gleichzeitig in allen Speicherstellen danach gesucht. Da der Zugriff auf L1-Cache am schnellsten geschieht, weiß man zuerst ob die gesuchten Daten dort liegen oder nicht. Wenn nein (man nennt es Cache-Miss), so muss der Prozessor warten bis die Ergebnisse von L2 vorliegen. Es kann sein, dass die Daten auch nicht in L2 liegen, sondern in L3, in Arbeitsspeicher oder sogar auf der Festplatte. In dieser Wartezeit ruht der Prozessor und somit die ganze Berechnung. </p>
<p>Werden die Daten gefunden (Cache-Hit), so werden sie nicht nur an den Prozessor weiter geleitet, sondern auch gleichzeitig in den schnelleren Speicher abgelegt (in Cache geholt). Da schnellere Speicher klein sind, müssen zwangsläufig die alten Inhalte überschrieben werden. Welche Daten man dabei überschreibt ist Prozessorabhängig, aber oft werden die Daten überschrieben, deren Benutzung (Schreibe/Lesen) am weitesten in der Zeit zurück liegt (LRU &#8211; Least-recently used). Beim Cache füllen wird nicht nur der Inhalt der gesuchten Speicheradresse kopiert, sondern auch die nachfolgenden Adressen. Wie viele es genau sind, hängt von der Breite des Caches ab.</p>
<p>Darauf ergeben sich zwei wichtige Schlussfolgerungen:</p>
<ol>
<li>Der erneute Zugriff auf eine Speicheradresse wird auf jeden Fall schnell sein, da die Daten nach dem ersten Zugriff im Cache liegen.</li>
<li>Der Zugriff auf die nachfolgenden Adressen wird schnell sein (beschränkt auf die Cache-Breite), da beim Cache-Vorgang die nachfolgenden Elemente ebenfalls in den Cache abgelegt wurden.</li>
</ol>
<p>Diese Schlussfolgerungen erfüllen die Prinzipien der zeitliche und räumliche Lokalität, die aus den statistischen Überlegungen zum Ablauf eines Computerprogramms hervorgehen.</p>
<ul>
<li><strong>Zeitliche Lokalität:</strong> Nach einem Zugriff auf eine Adresse wird wahrscheinlich erneut darauf zugegriffen. </li>
<li><strong>Räumliche Lokalität:</strong> Nach einem Zugriff auf eine Adresse wird wahrscheinlich auf eine benachbarte Adresse zugegriffen. </li>
</ul>
<p>Mit anderen Worten gesagt, sind die zeitliche und die räumliche Lokalität eine Folgerung aus der theoretischen Informatik und die Cache-Verwaltung der Prozessoren ist eine praktische Realisierung davon. </p>
<p>Jetzt können wir auch den Geschwindigkeitsunterschied in dem Einführungsbeispiel verstehen. Beim zeilenweisen Zugriff, werden nach dem ersten Cache-Miss die nächsten Elemente in den Cache gelegt. Somit ist der nachfolgende Zugriff (auf die nachfolgende Adresse) besonders schnell. Beim spaltenweisen Zugriff werden ebenfalls die nachfolgenden Elemente in den Cache abgelegt, aber man greift als nächstes nicht auf die nachfolgende Adresse zu, sondern auf die erste Adresse + Arraybreite. In der Regel liegt diese Adresse nicht im Cache und es muss wieder auf den langsameren Speicher geholt werden, was schließlich zur längeren Ausführungszeit führt. </p>
<p>Die Aufgabe des Programmierers ist auf diesen beiden Prinzipien aufzubauen und so die Programme schneller zu machen.  </p>
<div id="notes" >
<sup><a id="note1" >1</a></sup> Woher genau die beiden Peaks kommen weiß ich auch nicht (das sind keine statistischen Schwankungen). Hinweise und Erklärungen sind erwünscht. </p>
<p><sup><a id="note2" >2</a></sup> Die Ausreißer in der ersten Hälfte der Grafik sind statistische Schwankungen, bedingt durch ungenaue Zeitmessung. </p>
<p><sup><a id="note3" >3</a></sup> Auf den Registern wird gerechnet, also fallen sie aus der Betrachtung heraus.
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.virtual-maxim.de/cache-optimierung-zeitliche-und-raeumliche-lokalitaet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.virtual-maxim.de/cache-optimierung-zeitliche-und-raeumliche-lokalitaet/</feedburner:origLink></item>
		<item>
		<title>F-Praktikum Protokolle (TU Darmstadt, Physik)</title>
		<link>http://feedproxy.google.com/~r/virtual-maxim/~3/0YjHgz5FHLg/</link>
		<comments>http://www.virtual-maxim.de/f-praktikum-protokolle-tu-darmstadt-physik/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 16:00:56 +0000</pubDate>
		<dc:creator>Maxim</dc:creator>
				<category><![CDATA[Physik]]></category>
		<category><![CDATA[Technik / Forschung]]></category>
		<category><![CDATA[festkörperphysik]]></category>
		<category><![CDATA[kernphysik]]></category>
		<category><![CDATA[Kernspinresonanz]]></category>
		<category><![CDATA[laser]]></category>
		<category><![CDATA[Mössbauereffekt]]></category>
		<category><![CDATA[NMR]]></category>
		<category><![CDATA[optik]]></category>
		<category><![CDATA[polymere]]></category>
		<category><![CDATA[positronen]]></category>
		<category><![CDATA[Spektroskopie]]></category>
		<category><![CDATA[strahlungshintergrund]]></category>
		<category><![CDATA[supraleitung]]></category>
		<category><![CDATA[YAG-Laser]]></category>

		<guid isPermaLink="false">http://www.virtual-maxim.de/?p=3791</guid>
		<description><![CDATA[Im Rahmen eines Physikstudiums muss man viele Experimente durchführen. An der TU Darmstadt sind es 32 Grundpraktikumsversuche und 12 Praktika für Fortgeschrittene. Im Gegensatz zum Grundpraktikum hat man beim F-Praktikum eine Auswahlmöglichkeit bei den Versuchsthemen, so dass man nur einen Teil des Angebots annehmen kann. Für diejenigen, die sich auch für andere Versuche interessieren, habe ich hier eine Liste mit Versuchsausarbeitungen angelegt. Selbstverständlich sollten diese... <a href="http://www.virtual-maxim.de/f-praktikum-protokolle-tu-darmstadt-physik/" title="Weiterlesen: F-Praktikum Protokolle (TU Darmstadt, Physik)" >Weiterlesen</a>]]></description>
			<content:encoded><![CDATA[<p>Im Rahmen eines Physikstudiums muss man viele Experimente durchführen. An der TU Darmstadt sind es 32 Grundpraktikumsversuche und 12 Praktika für Fortgeschrittene. Im Gegensatz zum Grundpraktikum hat man beim F-Praktikum eine Auswahlmöglichkeit bei den Versuchsthemen, so dass man nur einen Teil des Angebots annehmen kann. Für diejenigen, die sich auch für andere Versuche interessieren, habe ich hier eine Liste mit Versuchsausarbeitungen angelegt.</p>
<p>Selbstverständlich sollten diese Protokolle auch dazu dienen die eigene Ausarbeitung zu verbessern.Man sollte aber beachten, dass wenn die Protokolle auch testiert sind, so sind sie nie absolut fehlerfrei.</p>
<p>Wenn ihr selbst eure Ausarbeitung online stellen wollt, dann schreibt mir eine E-Mail mit der PDF im Anhang und ich werde sie in die Liste einfügen. Beachtet nur, dass beide Praktikanten mit der Veröffentlichung einverstanden sein müssen. </p>
<p><center><strong>Abteilung A &#8211; Optik</strong></center></p>
<p><strong>3.3: Polarisation und Doppelbrechung</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=Versuch+3.3+-+Polarisation+und+Doppelbrechung.pdf" title="Polarisation und Doppelbrechung 18.04.2011">Polarisation und Doppelbrechung 18.04.2011 504,19 kB</a> - </p>
<p><strong>4.2: Test der Bell&#8217;schen Ungleichung</strong></p>
<p><strong>4.3: Kühlen und Fangen von Rubidium Atomen in einer magneto-optischen Falle.</strong> </p>
<p><strong>4.4-A: Holographie </strong></p>
<p><strong>4.6: Laserdiodengepumpter ND:YAG-Laser und Frequenzverdopplung</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=4.6_YAG_Homm_Bitsch.pdf" title="Laserdiodengepumpter ND:YAG-Laser und Frequenzverdopplung 23.01.2012">Laserdiodengepumpter ND:YAG-Laser und Frequenzverdopplung 23.01.2012 732,26 kB</a> - </p>
<p><strong>4.9-A: Laserresonator</strong></p>
<p><strong>4.10: Akusto-optischer Modulator</strong></p>
<p><strong>4.11: Optisches Pumpen</strong></p>
<p><center><strong>Abteilung B &#8211; Festkörperphysik</strong></center></p>
<p><strong>1.5: Zeeman-Effekt</strong><br />
<strong>1.8: Infrarot-Spektroskopie </strong><br />
<strong>3.10: Gepulste Kernspinresonanz</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=3.10_nmr_Homm_Bitsch.pdf" title="Gepulste Kernspinresonanz 16.01.2012">Gepulste Kernspinresonanz 16.01.2012 197,4 kB</a> - </p>
<p><strong>3.16-A: Quanten-Hall-Effekt</strong></p>
<p><strong>3.16-B: Supraleitung</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=3.16B_Homm_Bitsch.pdf" title="Supraleitung 21.11.2011">Supraleitung 21.11.2011 119,67 kB</a> - </p>
<p><strong>3.17: Strukturanalyse mit Röntgenstrahlen nach Debye-Scherrer</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=3.17+ausarbeitung.pdf" title="Röntgenstrukturanalyse nach Debye-Scherrer 23.05.2011">Röntgenstrukturanalyse nach Debye-Scherrer 23.05.2011 374,07 kB</a> - </p>
<p><strong>3.20: Dielektrische Relaxationsspektroskopie an Polymeren</strong><br />
<strong>3.21: Röntgenkleinwinkelstreuung an teilkristallinen Polymeren</strong><br />
<strong>5.4: Thermometrie bei tiefen Temperaturen</strong></p>
<p><center><strong>Abteilung C &#8211; Kernphysik</strong></center></p>
<p><strong>1.1: Magnetfeldmessung</strong><br />
<strong>2.2-A: Wechselwirkung von Gamma-Strahlung mit Materie</strong></p>
<p><strong>2.2-B: Radioaktivität in der Umwelt</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=versuch_2.2b.pdf" title="Radioaktivität in der Umwelt 01.11.2010">Radioaktivität in der Umwelt 01.11.2010 364,09 kB</a> - <br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=2.2B_radioaktivitaet_in_der_umwelt_homm_bitsch.pdf" title="Radioaktivität in der Umwelt 20.12.2011">Radioaktivität in der Umwelt 20.12.2011 609,52 kB</a> - </p>
<p><strong>2.3: Alpha-Spektroskopie mit einem Halbleiterzähler</strong><br />
<strong>2.4: Mößbauer-Effekt an Fe-57</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=2.4_M%C3%B6%C3%9Fbauer_Homm_Bitsch.pdf" title="Mößbauer-Effekt an Fe-57 14.11.2011">Mößbauer-Effekt an Fe-57 14.11.2011 440,64 kB</a> - </p>
<p><strong>2.5: Bremsung und Diffusion von Neutronen</strong><br />
<strong>2.6: Höhenstrahlung</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=2.6_Homm_Bitsch.pdf" title="Höhenstrahlung 24.10.2011">Höhenstrahlung 24.10.2011 707,36 kB</a> - </p>
<p><strong>2.7: Paritätsverletzung beim Beta-Zerfall</strong><br />
<strong>2.8-A: Messung der Lebensdauer von Positronen in Materie</strong><br />
<strong>2.8-B: Positronen-Emissions-Tomographie</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=versuch+2.8b.pdf" title="Positronen-Emissions-Tomographie 29.11.2010">Positronen-Emissions-Tomographie 29.11.2010 2,73 MB</a> - </p>
<p><strong>2.9: Bestimmung der Lebensdauer von Myonen</strong></p>
<p><strong>5.1-A: Transistorverstärker und digitale Bauelemente</strong><br />
<a href="http://www.virtual-maxim.de/wp-content/plugins/download-monitor/download.php?id=5.1a_Transistorverstaerker.pdf" title="Transistorverstärker und digitale Bauelemente 20.12.2010">Transistorverstärker und digitale Bauelemente 20.12.2010 439.41 kB</a> - </p>
<p><strong>5.1-B: Operationsverstärker</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.virtual-maxim.de/f-praktikum-protokolle-tu-darmstadt-physik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.virtual-maxim.de/f-praktikum-protokolle-tu-darmstadt-physik/</feedburner:origLink></item>
		<item>
		<title>Piwik: richtige Aufenthaltsdauer und Absprungrate anzeigen</title>
		<link>http://feedproxy.google.com/~r/virtual-maxim/~3/H_FU9ldotrc/</link>
		<comments>http://www.virtual-maxim.de/piwik-richtige-aufenthaltsdauer-und-absprungrate-anzeigen/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 11:38:40 +0000</pubDate>
		<dc:creator>Maxim</dc:creator>
				<category><![CDATA[Homepage/Blog]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[piwik]]></category>
		<category><![CDATA[webanalysik]]></category>

		<guid isPermaLink="false">http://www.virtual-maxim.de/?p=3748</guid>
		<description><![CDATA[Piwik zeigt die Aufenthaltsdauer von Besuchern nicht richtig an. Die Aufenthaltsdauer in Piwik entspricht der Zeitdifferenz zwischen der ersten und letzten Aktionen auf einer Website, wobei unter einer Aktion ein Klick auf einen Link bzw. das Neuladen der Website gemeint ist. Kommt ein Besucher auf die Website, liest 30 Minuten lang einen Artikel und schließt danach das Fenster, so erkennt Piwik nur eine Aktion und... <a href="http://www.virtual-maxim.de/piwik-richtige-aufenthaltsdauer-und-absprungrate-anzeigen/" title="Weiterlesen: Piwik: richtige Aufenthaltsdauer und Absprungrate anzeigen" >Weiterlesen</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://piwik.org/" title="Piwik">Piwik </a> zeigt die Aufenthaltsdauer von Besuchern nicht richtig an. Die Aufenthaltsdauer in Piwik entspricht der Zeitdifferenz zwischen der ersten und letzten Aktionen auf einer Website, wobei unter einer Aktion ein Klick auf einen Link bzw. das Neuladen der Website gemeint ist. </p>
<p>Kommt ein Besucher auf die Website, liest 30 Minuten lang einen Artikel und schließt danach das Fenster, so erkennt Piwik nur eine Aktion und als Aufenthaltsdauer werden 0s und eine Absprungrate von 100% angezeigt.</p>
<p>Um diesen Designfehler zu beheben gibt es generell zwei Möglichkeiten:</p>
<ol>
<li>Trackingsystem von Piwik umschreiben </li>
<li>Aktionen vortäuschen, wenn der Besucher noch auf der Website ist</li>
</ol>
<p><div id="attachment_3759" class="wp-caption alignright" style="width: 414px"><img src="http://www.virtual-maxim.de/wp-content/uploads/2011/12/Aufenthaltsdauer.png" alt="Aufenthaltsdauer" title="Aufenthaltsdauer" width="404" height="173" class="size-full wp-image-3759" /><p class="wp-caption-text">Die Aufenthaltsdauer von einer auf neuen Minuten angestiegen.</p></div></p>
<p>Die erste Möglichkeit wäre die beste, aber auch die komplizierteste.<br />
Dagegen ist die zweite Möglichkeit ziemlich schnell realisiert: Wird die Website neu geladen, so startet man einen Timer, der nach einer bestimmter Zeit Piwik neu aufruft und so eine Aktion vortäuscht. So lange der Besucher sich auf der Website befindet bekommt Piwik immer den (mehr oder weniger) letzten Aufenthaltszeitpunkt und kann daraus die Aufenthaltsdauer bestimmen. </p>
<p>Bevor man den Timer implementiert muss man sich überlegen wie oft der Timer aufgerufen werden soll. Jede Sekunde eine Serveranfrage zu senden ist nicht empfehlenswert.<br />
Ich habe folgende Zeiten gewählt: 10s, 30s, 1min, 4min, 24min, 84min. Danach wird der Timer nicht weiter aufgerufen um die Statistik nicht unnötig zu verfälschen, wenn jemand vergessen hat das Browserfenster zu schließen. </p>
<p>Letztendlich muss folgenden Tracking-Code auf der Website:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + &quot;piwik.php&quot;, 1);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
&lt;/script&gt;
</pre>
<p>durch diesen ersetzen:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
     var piwikTracker = Piwik.getTracker(pkBaseURL + &quot;piwik.php&quot;, 1);

    function prtc(i)
    {
        // Piwik aufrufen
        try {
            piwikTracker.trackPageView();
            piwikTracker.enableLinkTracking();
        } catch( err ) {}

        // Zeiten festlegen (in Millisekunden)
        // Unterteilung selbst wählen.
        if(i == 5)
            rt = 10000;
        else if(i==4)
            rt = 20000;
        else if(i==3)
            rt = 30000;
        else if(i==2)
            rt = 3*60000;
        else if(i==1)
            rt = 20*60000;
        else if(i==0)
            rt = 60*60000;

        if(i &gt;= 0)
        {
            i--;
            // Funktion soll nach einer Recall-Time starten
            window.setTimeout(&quot;prtc(&quot;+i+&quot;)&quot;,rt);
        }
    }

// Piwik-Tracking-Funktion aufrufen
prtc(5);

&lt;/script&gt;
</pre>
<p><div id="attachment_3758" class="wp-caption alignright" style="width: 413px"><img src="http://www.virtual-maxim.de/wp-content/uploads/2011/12/Absprungrate.png" alt="Absprungrate" title="Absprungrate" width="403" height="171" class="size-full wp-image-3758" /><p class="wp-caption-text">Die Absprungrate von 80% auf 20% gesunken.</p></div></p>
<p>Durch diese Änderung habe ich endlich realistische Werte für meinen Blog bekommen. Die durchschnittliche Besuchszeit ist von einer Minute auf neun angestiegen und die Absprungrate von ungefähr 80% auf 20% gesunken. </p>
<p>Der Nachteil dieser Methode ist, dass die Aktionenanzahl nicht mehr stimmt. Jeder muss für sich entscheiden an welcher Information er mehr interessiert ist. Für mich persönlich ist die Aufenthaltsdauer und die Absprungrate wichtiger als die Aktionenanzahl, da ich daran sehe, ob meine Arbeit sinnvoll ist oder nicht. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.virtual-maxim.de/piwik-richtige-aufenthaltsdauer-und-absprungrate-anzeigen/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.virtual-maxim.de/piwik-richtige-aufenthaltsdauer-und-absprungrate-anzeigen/</feedburner:origLink></item>
		<item>
		<title>Mathematica: Fortschritt und Restrechenzeit anzeigen</title>
		<link>http://feedproxy.google.com/~r/virtual-maxim/~3/gUkQOikwU4o/</link>
		<comments>http://www.virtual-maxim.de/mathematica-fortschritt-und-restrechenzeit-anzeigen/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 21:26:55 +0000</pubDate>
		<dc:creator>Maxim</dc:creator>
				<category><![CDATA[Physik]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[mathematica]]></category>
		<category><![CDATA[selectionsort]]></category>

		<guid isPermaLink="false">http://www.virtual-maxim.de/?p=3737</guid>
		<description><![CDATA[Führt man in Mathematica zeitaufwändige Berechnungen durch, so wünscht man sich oft eine Fortschrittsanzeige um den Status der Berechnung zu erfahren. Eine einfache Fortschrittsanzeige kann man mit der Funktion ProgressIndicator realisieren. Als erstes definiert man eine Variable, die den aktuellen Fortschritt beschreibt. Wird beispielsweise ein Feld durchlaufen, so gibt diese Variable die Position, an der gerade eine Berechnung durchgeführt wird an. Ich nenne sie hier... <a href="http://www.virtual-maxim.de/mathematica-fortschritt-und-restrechenzeit-anzeigen/" title="Weiterlesen: Mathematica: Fortschritt und Restrechenzeit anzeigen" >Weiterlesen</a>]]></description>
			<content:encoded><![CDATA[<p>Führt man in Mathematica zeitaufwändige Berechnungen durch, so wünscht man sich oft eine Fortschrittsanzeige um den Status der Berechnung zu erfahren. Eine einfache Fortschrittsanzeige kann man mit der Funktion <a href="http://reference.wolfram.com/mathematica/ref/ProgressIndicator.html" title="ProgressIndicator">ProgressIndicator</a> realisieren. </p>
<p>Als erstes definiert man eine Variable, die den aktuellen Fortschritt beschreibt. Wird beispielsweise ein Feld durchlaufen, so gibt diese Variable die Position, an der gerade eine Berechnung durchgeführt wird an. Ich nenne sie hier iter.</p>
<p>Anschließend benutzt man die Funktion ProgressIndicator und übergibt als Argument den Iterator (<em>iter</em>), wobei man angeben muss, dass er dynamisch ist.</p>
<pre class="brush: plain; title: ; notranslate">
ProgressIndicator[Dynamic[iter], {1, maxIter}]
</pre>
<p>Um jetzt den Fortschritt einer Berechnung anzuzeigen muss man in der Berechnung dem Iterator immer die aktuelle Laufvariable zuweisen. </p>
<p>Am Beispiel von Selectionsort könnte es so aussehen:</p>
<pre class="brush: plain; title: ; notranslate">
maxIter = 1000; (* Maximale Anzahl von Zahlenwerten *)

iter = 0; (* aktueller Fortschritt.  iter &lt;= maxIter *)

(* Fortschrittsbalken einbauen. iter gleich maxIter –&gt; 100% *)
ProgressIndicator[Dynamic[iter], {1, maxIter}]  

(* Liste mit Zufallswerten *)
numb = Table[Random[Integer, {1, 10000}], {x, 1, maxIter}];

(* Selectionsort *)
For[i = 1, i &lt; maxIter, i++,
 minpos = i;
 For[j = i + 1, j &lt;= maxIter, j++,
  If[numb[[j]] &lt; numb[[minpos]],
   minpos = j,
   ]
  ];
 temp = numb[[i]];
 numb[[i]] = numb[[minpos]];
 numb[[minpos]] = temp;
 iter = i; (* iterator aktualisieren*)
 ]
</pre>
<p><img src="http://www.virtual-maxim.de/wp-content/uploads/2011/11/progress1.gif" alt="Fortschrittsbalken" title="Fortschrittsbalken" width="200" height="18" class="aligncenter size-full wp-image-3739" /></p>
<p>Optimal wäre natürlich auch eine Restrechenzeitangabe. Die einfachste Möglichkeit ist eine lineare Zeitinterpolation, die je nach dem wie man den Iterator setzt für eine Abschätzung der Restzeit gut genug sein soll.</p>
<p>Fügt man den diesen Codeblock anstatt ProgressIndicator in dem oberen Beispiel…</p>
<pre class="brush: plain; title: ; notranslate">
Dynamic[
 {{&quot;Status:&quot;,
    ProgressIndicator[iter, {0, maxIter}], (iter/maxIter)*100.0, &quot;%&quot;},
   {&quot;Restzeit (min):&quot;,
    AccountingForm[((maxIter -
          iter)/((iter + 0.0001)/(AbsoluteTime[] - startTime)))/
      60, {Infinity, 1}], &quot;&quot;, &quot;&quot;}} // MatrixForm
 ]
startTime = AbsoluteTime[];
</pre>
<p>… so sieht die Aussage folgendermaßen aus.<br />
<img src="http://www.virtual-maxim.de/wp-content/uploads/2011/11/progress2.png" alt="Fortschrittsbalken" title="Fortschrittsbalken" width="401" height="56" class="aligncenter size-full wp-image-3741" /></p>
<p>Viel Spaß beim Warten und Tee trinken <img src='http://www.virtual-maxim.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.virtual-maxim.de/mathematica-fortschritt-und-restrechenzeit-anzeigen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.virtual-maxim.de/mathematica-fortschritt-und-restrechenzeit-anzeigen/</feedburner:origLink></item>
	</channel>
</rss>

