<?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>Reality.SYS &#187; programming</title>
	<atom:link href="http://www.brakmic.de/index.php/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brakmic.de</link>
	<description>is corrupted! Reboot Universe? (y/n)</description>
	<lastBuildDate>Mon, 05 Apr 2010 10:50:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Armstrong on Software: Erlang &amp; SMP</title>
		<link>http://www.brakmic.de/index.php/2009/02/28/armstrong-on-software-erlang-smp/</link>
		<comments>http://www.brakmic.de/index.php/2009/02/28/armstrong-on-software-erlang-smp/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 10:17:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[COP]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=395</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><object width="443" height="329" data="http://video.google.com/googleplayer.swf?docid=-1363340548829250196&amp;hl=un&amp;fs=true" type="application/x-shockwave-flash"><param name="id" value="VideoPlayback" /><param name="src" value="http://video.google.com/googleplayer.swf?docid=-1363340548829250196&amp;hl=un&amp;fs=true" /></object></p>
<p>Nachdem der ganze Wahnsinn in Sachen immer-schnellere-CPUs-jedes-Jahr an physikalischen Grenzen scheiterte, werden neue (bzw. seit langem bekannte, aber nicht beachtete) Wege beschritten. Joe Armstrong hat in seinem Vortrag bei der Erlang Exchange 2008 über skalierbare Software, Concurrency und Fehlertoleranz gesprochen. Die Slides findet man <a href="http://skillsmatter.com/custom/presentations/keynote_joearmstrong.pdf" target="_blank">hier</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2009/02/28/armstrong-on-software-erlang-smp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a transactional distributed data store with Erlang</title>
		<link>http://www.brakmic.de/index.php/2009/02/28/building-a-transactional-distributed-data-store-with-erlang/</link>
		<comments>http://www.brakmic.de/index.php/2009/02/28/building-a-transactional-distributed-data-store-with-erlang/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 09:54:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[COP]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=388</guid>
		<description><![CDATA[
Bei der Erlang Exchange 2008 Konferenz wurde das vom Zuse Institut Berlin und onScale Solutions GmbH entwickelte data-store System vorgestellt. Im Vortrag kommen so wichtige Themen wie Distributed Hashtables (DHTs), transaction layer und schnelle application layer für tausendfache Lese-/Schreibzugriffe vor. Weitere Podcasts zum Thema Erlang, fehlertolerante Systeme und Concurrency kann man hier abrufen. Der originale [...]]]></description>
			<content:encoded><![CDATA[<p><object width="463" height="337" data="http://video.google.com/googleplayer.swf?docid=6981137233069932108&amp;hl=un&amp;fs=true" type="application/x-shockwave-flash"><param name="id" value="VideoPlayback" /><param name="src" value="http://video.google.com/googleplayer.swf?docid=6981137233069932108&amp;hl=un&amp;fs=true" /></object></p>
<p>Bei der Erlang Exchange 2008 Konferenz wurde das vom Zuse Institut Berlin und onScale Solutions GmbH entwickelte data-store System vorgestellt. Im Vortrag kommen so wichtige Themen wie Distributed Hashtables (DHTs), transaction layer und schnelle application layer für tausendfache Lese-/Schreibzugriffe vor. Weitere Podcasts zum Thema Erlang, fehlertolerante Systeme und Concurrency kann man <a href="http://skillsmatter.com/go/erlang" target="_blank">hier</a> abrufen. Der originale Link zum obigen Podcast ist <a href="http://skillsmatter.com/podcast/erlang/building-a-transactional-distributed-data-store-with-erlang" target="_blank">hier </a>zu finden und die Slides <a href="http://skillsmatter.com/custom/presentations/reinefeld_erlang_exchange.pdf" target="_blank">hier</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2009/02/28/building-a-transactional-distributed-data-store-with-erlang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simon Thompson &#8211; Erlang &amp; Functional Programming</title>
		<link>http://www.brakmic.de/index.php/2009/02/03/simon-thompson-erlang-functional-programming/</link>
		<comments>http://www.brakmic.de/index.php/2009/02/03/simon-thompson-erlang-functional-programming/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 20:55:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Standard]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[COP]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=284</guid>
		<description><![CDATA[
In diesem Interview geht es vor allem um die aktuellen IT-Probleme wie Concurrency/Parallelism und die Vorteile der funktionalen Programmierung beim Lösen derselben.
Da mittlerweile auch die günstigsten Notebooks über einen Dual-Core-Prozessor verfügen, ist es nur eine Frage der Zeit, bis Concurrency denselben Stellenwert einnimmt wie zuvor die GHz-Zahl oder die RAM-Größe.
Da es schon seit geraumer Zeit [...]]]></description>
			<content:encoded><![CDATA[<p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/UMwDOcLALfU&#038;hl=de&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/UMwDOcLALfU&#038;hl=de&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="400"></embed></object></p>
<p>In diesem Interview geht es vor allem um die aktuellen IT-Probleme wie Concurrency/Parallelism und die Vorteile der funktionalen Programmierung beim Lösen derselben.</p>
<p>Da mittlerweile auch die günstigsten Notebooks über einen Dual-Core-Prozessor verfügen, ist es nur eine Frage der Zeit, bis Concurrency denselben Stellenwert einnimmt wie zuvor die GHz-Zahl oder die RAM-Größe.</p>
<p>Da es schon seit geraumer Zeit keine &#8220;doppelt-so-schnell-wie-letztes-Jahr&#8221; CPUs mehr gibt, geht der Trend in Richtung mehr Kerne pro CPU, was wiederum neue Software auf den Plan ruft, die solche technischen Möglichkeiten ausreizen kann. Bisher hat man wohl zu 99% nur für single CPUs programmiert und auch nur solche Sprachen gelernt. Früher oder später wird man &#8220;dazulernen&#8221; müssen, wenn man es nicht schon seit LISP, Smalltalk und ADA kennt. Oder zumindest ein bisschen Haskell spricht. <img src='http://www.brakmic.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2009/02/03/simon-thompson-erlang-functional-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joe Armstrong discusses Erlang</title>
		<link>http://www.brakmic.de/index.php/2009/02/03/joe-armstrong-discusses-erlang/</link>
		<comments>http://www.brakmic.de/index.php/2009/02/03/joe-armstrong-discusses-erlang/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 20:39:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[COP]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=277</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/cbtu15hrqRU&amp;hl=de&amp;fs=1" /><embed type="application/x-shockwave-flash" width="500" height="400" src="http://www.youtube.com/v/cbtu15hrqRU&amp;hl=de&amp;fs=1" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2009/02/03/joe-armstrong-discusses-erlang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joe Armstrong About Erlang</title>
		<link>http://www.brakmic.de/index.php/2009/02/02/joe-armstrong-about-erlang/</link>
		<comments>http://www.brakmic.de/index.php/2009/02/02/joe-armstrong-about-erlang/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 22:39:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[COP]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=265</guid>
		<description><![CDATA[Von InfoQ:
In this interview filmed during QCon London 2008, Joe Armstrong, designer of Erlang, speaks on various aspects of the Erlang language, presenting its roots, how it compares with other languages and why it has become popular these days due to its native ability to scale on multi core systems.
Joe Armstrong is the principle inventor [...]]]></description>
			<content:encoded><![CDATA[<p>Von <a href="http://www.infoq.com">InfoQ</a>:</p>
<p><a href="http://www.infoq.com/interviews/Erlang-Joe-Armstrong">In this interview filmed during QCon London 2008</a>, <strong>Joe Armstrong</strong>, designer of Erlang, speaks on various aspects of the Erlang language, presenting its roots, how it compares with other languages and why it has become popular these days due to its native ability to scale on multi core systems.</p>
<p>Joe Armstrong is the principle inventor of Erlang and coined the term &#8220;Concurrency Oriented Programming&#8221;. At Ericsson he developed Erlang and was chief architect of the <strong>Erlang/OTP system</strong>. In 1998 he formed Bluetail, which developed all its products in Erlang. In 2003 he obtain his PhD from the Royal Institute of Technology, Stockholm. He is author of the book &#8220;<a href="http://www.pragprog.com/titles/jaerlang/programming-erlang">Software for a concurrent world</a>&#8220;. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2009/02/02/joe-armstrong-about-erlang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erlang Einführung &#8211; Teil 2 &#8211; Funs / Higher Order Functions</title>
		<link>http://www.brakmic.de/index.php/2009/01/31/erlang-einfuhrung-teil-2-funs-higher-order-functions/</link>
		<comments>http://www.brakmic.de/index.php/2009/01/31/erlang-einfuhrung-teil-2-funs-higher-order-functions/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 14:55:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Standard]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[COP]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=205</guid>
		<description><![CDATA[Leider habe ich viel zu lange auf den zweiten Teil der Einführung in Erlang warten lassen. Und bevor ich überhaupt mit Ausreden anfange, fange ich lieber mit ganz konkreten Beispielen an.
Gegeben ist folgender Quellcode, welcher ein Programm zum Berechnen des Quadrats einer beliebigen Zahl bildet:

Das Programm besteht aus zwei Teilen, den Modulattributen und Funktionen.
Modulattribute sind [...]]]></description>
			<content:encoded><![CDATA[<p>Leider habe ich viel zu lange auf den zweiten Teil der Einführung in Erlang warten lassen. Und bevor ich überhaupt mit Ausreden anfange, fange ich lieber mit ganz konkreten Beispielen an.</p>
<p>Gegeben ist folgender Quellcode, welcher ein Programm zum Berechnen des Quadrats einer beliebigen Zahl bildet:</p>
<p><a href="http://www.brakmic.de/wp-content/2009/01/func1_code1.jpg"><img class="alignnone size-full wp-image-213" title="func1_code1" src="http://www.brakmic.de/wp-content/2009/01/func1_code1.jpg" alt="" width="500" height="350" /></a></p>
<p>Das Programm besteht aus zwei Teilen, den Modulattributen und Funktionen.<br />
Modulattribute sind in diesem Falle <strong>-module(func1)</strong> und <strong>-export([double/1])</strong>.</p>
<p>Modulattributen können sowohl vom Entwickler selbst definiert, wie auch aus einem Satz von Standardvorgaben eingesetzt werden.<br />
Die Attribute <strong>-module</strong> und <strong>-export</strong> gehören zum Erlang-Standard, wobei <strong>-module</strong> zwingend ist, während <strong>-export</strong> nur dann eingesetzt werden sollte, wenn man bestimmte Funktionen für den Zugriff von Außen freigeben möchte. In diesem Falle ist es die Funktion <em>double</em>, die z.B. von der Erlang-Shell aus aufgerufen werden soll. Jede Erlang-Quelldatei muss eine Angabe über den aktuellen Modulnamen tragen und zwar innerhalb der Klammern des Attributen <strong>-module</strong>. Somit ist der Name der *.erl-Datei gleichzeitig auch der Name des Moduls. Nachdem dieses beispielsweise über den Aufruf <strong>c(MODULNAME).</strong> in der Shell kompiliert worden ist, wird eine neue Bytecode-Datei namens <em>MODULNAME.beam</em> angelegt. Und genau diese ist für die eigentliche Ausführung in der Erlang Virtual Machine gedacht. Dies ist mit Java *.class-Dateien vergleichbar, die aus gewöhnlichen *.java-Dateien gebildet werden, um dann in der JVM als Bytecode ausgeführt zu werden. Und wie bei sonstigen Erlang-Anweisungen auch, müssen diese beiden Attribute mit einem Punkt abgeschlossen werden.</p>
<p>Jedoch sollte noch geklärt werden, was die Angabe [double/1] zu bedeuten hat. Nun, da Funktionen mehrere Argumente akzeptieren können und in mehrfacher Ausführung vorhanden sein dürfen (d.h. mit gleichem Funktionsnamen, jedoch unterschiedlicher Anzahl von erwarteten Argumenten), ist die Angabe des Funktionsnames zusammen mit Slash + Zahl für die Anzeige der &#8220;Stelligkeit&#8221; (engl. &#8220;Arity&#8221;) einer Funktion notwendig. Mit &#8220;Stelligkeit&#8221; ist hier die Anzahl der &#8220;erwarteten Argumenten-Stellen&#8221; gemeint. Da unsere double-Funktion nur ein Argument erwartet, nämlich X, ist ihre Stelligkeit &#8220;eins&#8221; (1). Hätten wir z.B. weitere <em>double</em>-Funktionen, so müssten sich diese in der Stelligkeit voneinander unterscheiden, um von Erlang akzeptiert zu werden.</p>
<p>Nachdem wir mit Attributen dem Compiler die Umgebung vorgestellt haben, widmen wir uns der Funktion <em>double</em>. Sie besteht, nach Erlang-Terminologie, aus einem <strong>Head</strong>und einem <strong>Body</strong>. Zwischen diesen befindet sich ein stilisierter Pfeil, der vom Head auf den Body zeigt. Der Head ist dabei immer mit einem Funktionsnamen gefolgt von einem Klammerpaar und (optional) mit einer Argumentenliste innerhalb dieser versehen. Dabei werden mehrere Argumente durch Kommata voeinander getrennt. Als Argumente können sowohl Variablen wie auch Atome eingesetzt werden. Mit &#8220;Atome&#8221; sind konstante, nicht-numerische Werte gemeint, welche immer mit einem Kleinbuchstaben beginnen (im Gegensatz zu Variablen, welche immer mit einem Großbuchstaben anfangen). In unserem Falle kann <em>double </em>einen beliebigen Wert annehmen, welcher dann im Body mit sich selbst multipliziert wird. Und auch hier ist am Ende ein Punkt zu setzen.</p>
<p>Die Kompilierung des Programms ist denkbar einfach: Erlang-Shell starten und mit <strong>c(func1).</strong> die <em>func1.erl</em>-Datei kompilieren. Als Ergebnis erhält man ein sog. Tupel, welches aus dem Namen des Moduls und einem Atom &#8220;ok&#8221; besteht. Somit hat uns Erlang-Umgebung die Info geliefert, dass die Kompilierung erfolgreich verlaufen ist.</p>
<p><a href="http://www.brakmic.de/wp-content/2009/01/func1_compile_output.jpg"><img class="alignleft size-full wp-image-210" title="func1_compile_output" src="http://www.brakmic.de/wp-content/2009/01/func1_compile_output.jpg" alt="" width="776" height="297" /></a></p>
<p>Da ich lokal das Ganze über Emacs laufen lasse, schaut bei mir die Ausgabe vielleicht etwas komplexer aus, als sie vielleicht sein sollte. Dennoch ist die Vorgehensweise dieselbe.</p>
<p>Jetzt können wir die exportierte Funktion <em>double </em>aufrufen. Dabei übergeben wir ihr den erwarteten Zahlenwert.</p>
<p><a href="http://www.brakmic.de/wp-content/2009/01/func1_double.jpg"><img class="alignleft size-full wp-image-211" title="func1_double" src="http://www.brakmic.de/wp-content/2009/01/func1_double.jpg" alt="" width="778" height="327" /></a></p>
<p>Als Ergebnis erhalten wir <strong>144</strong>, was dem Quadrat von <strong>12 </strong>entspricht. Der Aufruf selber ist recht einfach und erinnert entfernt an das Programmieren in C++, wenn es darum geht, die einzelnen Methoden den passenden Klassen/Namespaces zuzuordnen. In C++ wird die Zuordnung über sog. &#8220;<em>Bereichsauflösungsoperatoren</em>&#8221; erledigt (d.h. mit <strong>KLASSE::METHODE</strong>). Ähnlich wird auch bei Erlang verfahren, z.B. wenn es darum geht, die passende Funktion eines Moduls aufzurufen. Da es wohl recht viele &#8220;double&#8221;-Funktionen geben darf, muss sichergestellt werden, dass sowohl die richtige aufgerufen, wie auch die passende &#8220;Stelligkeit&#8221; befolgt wird. Es sind also zwei Sachen zu beachten: die passende Funktion über (optional viele) Module hinweg und dann noch die Funktion mit der gewünschten Stelligkeit (&#8220;Arity&#8221;) innerhalb eines Moduls. Hier ein leicht erweitertes Beispiel mit unserem bisherigen Modul.</p>
<p><a href="http://www.brakmic.de/wp-content/2009/01/func1_double_arity.jpg"><img class="alignnone size-full wp-image-214" title="func1_double_arity" src="http://www.brakmic.de/wp-content/2009/01/func1_double_arity.jpg" alt="" width="754" height="502" /></a></p>
<p>Jetzt beinhaltet unser Modul eine weitere Version der <em>double</em>-Funktion. Diesmal ohne Argumente, d.h. mit Stelligkeit Null (0). Über diese Änderung muss auch der Compiler informiert werden, sofern wir vor haben, eine weitere Funktion zu exportieren. Daher wird die Liste in <strong>-export</strong> um einen Eintrag mehr erweitert. Die Listen werden in Erlang übrigens immer mit eckigen Klammern angegeben und ihre Elemente durch Kommata voneinander getrennt. In diesem Falle wäre es <strong>[double/0,double/1]</strong>. Nachdem wir die neue Modulversion kompiliert haben (in der unteren Fensterhälfte zu sehen), wird die neue <em>double</em>-Funktion aufgerufen (diesmal mit leeren Klammern, aber immer zusammen mit dem Modulnamen). Als Ergebnis erhält man <strong>4</strong>, was genau den Vorgaben im Funktions-Body entspricht. So einfach kann Erlang sein. <img src='http://www.brakmic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Das ist aber nicht alles, denn in Erlang können Funktionen mehr als nur Werte zurückgeben und in mehrfacher Ausführung gleichzeitig vorhanden sein. In Erlang können Funktionen auch neue Funktionen als Ergebnis zurückgeben.</p>
<p>Noch einmal, zur Wiederholung: Funktionen können in Erlang neue Funktionen als Ergebnis zurückgeben. Oder Erlang-like ausgedrückt: wir können &#8220;higher-order-functions&#8221; basteln.</p>
<p>Hier ein kleines Beispiel:</p>
<p><a href="http://www.brakmic.de/wp-content/2009/01/multiply_shell_code.jpg"><img class="alignnone size-full wp-image-215" title="multiply_shell_code" src="http://www.brakmic.de/wp-content/2009/01/multiply_shell_code.jpg" alt="" width="658" height="402" /></a></p>
<p>Wir haben eine Variable <em>Multiply</em>, welche keinen direkten Wert zugewiesen bekommt, sondern vielmehr ein zunächst sonderbares Konstrukt:</p>
<p><strong>fun(X,Y) -&gt; 3 * (X + Y) end.</strong></p>
<p>Was meint man damit?</p>
<p>Nun, die Bezeichnung <strong>fun</strong> habe ich mir, schon mal im Voraus, nicht ausgedacht, denn diese gehört zum Sprachumfang von Erlang. Dabei meinen wir mit dem Einsatz von <strong>fun</strong>, dass hier eine neue Funktion mit <strong>3 * (X + Y) end.</strong> aufgebaut werden sollte. Dies bedeutet, dass wir in <strong>fun(X,Y)</strong> die Elemente eingesetzt haben wollen, welche später (im Funktions-Body) an die Stellen zum Einsatz kommen werden, wo jetzt <strong>3 * (X + Y) end.</strong> steht, um einen neuen Wert zu berechnen. Somit steht Multiply stellvertretend für eine dahinter &#8220;eingebettete&#8221; Funktion, welche eben zwei Werte erwartet und nach einem bestimmten Algorithmus (hier: 3 * (X + Y)) rechnet. Diese &#8220;innere&#8221; Funktion wird auch durch das spezielle Schlüsselword end. auch explizit beendet. Ein fun wird immer mit einem end. abgeschlossen, damit Erlang diese richtig zuordnen und bei Bedarf auch &#8220;als Rückgabe-Wert&#8221; liefern kann.</p>
<p>Deshalb ist die Shell-Info beim ersten, oben abgebildeten Aufruf eben kein <em>berechneter</em> Wert, sondern vielmehr eine Erlang-Info die mit <strong>#Fun&lt;erl_eval </strong>anfängt. Diese recht kryptische Ausgabe sollte aber niemanden verwirren, denn es handelt sich nur um Erlang-Internals, die für die Entwicklung selbst unerheblich sind. Wichtig ist nur zu wissen, dass damit Erlang zu verstehen gibt, dass es die Vorgaben <em>evaluiert</em> hat und in Zukunft überall dort wo <em>Multiply </em>steht eben diesen Algorithmus aktivieren wird. Ein simples Aufrufen von <em>Multiply(3,3)</em> gibt 18 aus und somit ist die Abarbeitung erfolgreich verlaufen. Für alle Entwickler die schon mal mit anonymen Funktionen zu tun hatten: &#8220;<em>ja, dies sind anonyme Funktionen in Erlang</em>&#8220;, was an sich kein Wunder ist, da anonyme Funktionen aus der funktionalen Programmierung kommen und Erlang eben &#8220;so ziemlich&#8221; funktional ist. <img src='http://www.brakmic.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Dies ist aber auch nicht alles, denn mit funs kann man noch viel mehr machen, wie in diesem Beispiel hier:</p>
<p><a href="http://www.brakmic.de/wp-content/2009/01/moremultiply_shell_code.jpg"><img class="alignnone size-full wp-image-216" title="moremultiply_shell_code" src="http://www.brakmic.de/wp-content/2009/01/moremultiply_shell_code.jpg" alt="" width="726" height="475" /></a></p>
<p>Hier haben wir einen weiteren <em>Level-Of-Indirection</em> eingebaut und eine <strong>fun </strong>deklariert, die wiederum eine weitere <strong>fun </strong>beinhaltet. Um die Verwirrung aber schon zu Anfang zu ersticken, fangen wir ganz langsam an und schauen uns die einzelnen Bestandteile genauer an:</p>
<p><em>MoreMultiply </em>bekommt Folgendes zugewiesen: <strong>fun(HowMuch) -&gt; (EINE WEITERE FUN EINGEBETTET)</strong></p>
<p>Wie wir schon im ersten Beispiel erfahren haben, können Variablen eingebettete <em>funs </em>beinhalten. Hier aber befindet sich aber in der ersten <em>fun</em> <strong>fun(HowMuch)</strong> eine weitere <em>fun</em>, welche wir aus Gründen der Übersichtlichkeit nicht aufgeschrieben haben.</p>
<p>Was hat dies zu bedeuten?</p>
<p>Ganz einfach: die erste <em>fun </em>(nennen wir diese &#8220;die äußere&#8221;) erwartet ein Argument, welcher dann in der zweiten (der &#8220;inneren&#8221;) <em>fun </em>eingebettet wird. Die innere <em>fun </em>beinhaltet aber mehr als nur die Variable <strong>HowMuch</strong>, nämlich <strong>Value * HowMuch</strong>. Dies bedeutet, dass die innere <em>fun </em>erst gar nicht rechnen könnte, wenn die äußere <em>fun </em>keinen Wert an sie liefern würde. Und genau hier liegt die Bedeutung in dieser scheinbar unnötig komplexen Verzahnung. Die innere <em>fun </em>ist nämlich eine <strong>VERALLGEMEINERTE </strong>Ausführung eines einfachen Multiplikators, welcher aber eben nicht selber vorgibt, wie eines seiner Elemente multipliziert wird. Die <strong>SPEZIALISIERUNG </strong>also, in diesem Falle die Angabe <strong>HowMuch </strong>kommt aus der äußeren <em>fun</em>. Somit ist die Arbeitsteilung klar: die äußere <em>fun </em>sagt, wer der Multiplikator ist und die innere benutzt diesen dann, um kommende Werte (d.h. <strong>Value</strong>) mit ihm zu multiplizieren. Deshalb ist der Rückgabewert von <strong>MoreMultiply </strong>eben nicht ein berechnter Wert, sondern vielmehr eine der vielen möglichen <span style="text-decoration: underline;">Spezialisierungen </span>der inneren <em>fun</em>. Und erst mit dieser zurückgegebenen Spezialisierung können Berechnungen durchgeführt werden. So wie im Beispiel oben. Und auch hier meldet sich zuerst die Erlang-Shell und gibt die Erfolgsmeldung aus, dass die Evaluierung OK sei. Danach weisen wir einer neuen Variable die von uns gewünschte Spezialisierung zu (der Name der Variable sollte sinnvollerweise die Spezialisierung dokumentieren). In diesem Falle haben wir uns entschieden, dass die innere <em>fun </em>alle zukünftigen Werte mal 2 nehmen soll. Daher auch die Angabe <strong>MoreMultiply(2)</strong>. Jetzt können wir die in <strong>MakeDouble</strong> abgelegte (innere) <em>fun </em>anwenden und geben eine 5 ein. Das Ergebnis ist erst jetzt mathematischer Natur und heißt 10.</p>
<p>Eigentlich einfach, nur es braucht Zeit, bis man sich vom alltäglichen Schema <strong>WERTEINGABE -&gt; BERECHNUNG -&gt; AUSGABE</strong> befreit hat. Hier wird eben <strong>ALGORITHMUSAUFBAU -&gt; WERTEINGABE -&gt; BERECHNUNG -&gt; AUSGABE</strong> angewandt. Wir basteln uns zuerst den Algorithmus zusammen und setzen ihn erst später ein. Fast so wie mit Möbeln bei Ikea <img src='http://www.brakmic.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>So, das war&#8217;s für heute. Viel Spaß mit Erlang.</p>
<p><a href="http://www.brakmic.de/wp-content/2009/01/func1_double_arity.jpg"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2009/01/31/erlang-einfuhrung-teil-2-funs-higher-order-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erlang on Multicore</title>
		<link>http://www.brakmic.de/index.php/2009/01/31/erlang-on-multicore/</link>
		<comments>http://www.brakmic.de/index.php/2009/01/31/erlang-on-multicore/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 10:29:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[COP]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=200</guid>
		<description><![CDATA[Da mittlerweile selbst die günstigsten Notebooks über einen sog. &#8220;Multicore&#8221;-Prozessor verfügen, ist es nur eine Frage der Zeit, bis auch die entsprechende Software verfügbar sein wird, welche diese neue Technologie ausreizt. Um von professionelleren Einsätzen (Telco-Industrie z.B.) erst gar nicht zu reden&#8230;
Und wie man dies mit Erlang bewerkstelligen kann, ist in dieser Präsentation (pdf) von [...]]]></description>
			<content:encoded><![CDATA[<p>Da mittlerweile selbst die günstigsten Notebooks über einen sog. &#8220;Multicore&#8221;-Prozessor verfügen, ist es nur eine Frage der Zeit, bis auch die entsprechende Software verfügbar sein wird, welche diese neue Technologie ausreizt. Um von professionelleren Einsätzen (Telco-Industrie z.B.) erst gar nicht zu reden&#8230;</p>
<p>Und wie man dies mit Erlang bewerkstelligen kann, ist in <a href="http://ulf.wiger.net/weblog/wp-content/uploads/2009/01/damp09-erlang-multicore.pdf">dieser Präsentation (pdf)</a> von <a href="http://ulf.wiger.net/weblog/2009/01/23/erlang-programming-for-multicore/">Ulf Wiger</a> vorgestellt worden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2009/01/31/erlang-on-multicore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Introduction to Erlang &#8211; bei Onlamp</title>
		<link>http://www.brakmic.de/index.php/2009/01/27/an-introduction-to-erlang-bei-onlamp/</link>
		<comments>http://www.brakmic.de/index.php/2009/01/27/an-introduction-to-erlang-bei-onlamp/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 19:05:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[COP]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=198</guid>
		<description><![CDATA[These days, the functional languages are all the rage. You see more and more hackers from the traditionally vanilla languages trying out things like Haskell or Scheme or OCaml. Breaking away from an imperative tradition forces us to think in a different way, which is always a good thing.
Recently, I&#8217;ve heard a lot about Erlang, [...]]]></description>
			<content:encoded><![CDATA[<p><em>These days, the functional languages are all the rage. You see more and more hackers from the traditionally vanilla languages trying out things like Haskell or Scheme or OCaml. Breaking away from an imperative tradition forces us to think in a different way, which is always a good thing.</p>
<p>Recently, I&#8217;ve heard a lot about Erlang, especially from curious members of the Ruby community. This article is the result of my quick dive into the language, and will hopefully serve as a starting point for anyone else who&#8217;s been hearing the buzz, but hasn&#8217;t taken the plunge yet.</em></p>
<p><a href="http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html?page=1">ONLAMP TUTORIAL</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2009/01/27/an-introduction-to-erlang-bei-onlamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erlang &#8211; Tutorial &#8211; Lennart Öhman</title>
		<link>http://www.brakmic.de/index.php/2009/01/20/176/</link>
		<comments>http://www.brakmic.de/index.php/2009/01/20/176/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 10:07:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[COP]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=176</guid>
		<description><![CDATA[The programming language Erlang, new if even known at all to most computer programmers, secretly celebrates its 20th birthday year 2007. Erlang was developed with goals such as high-availability, &#8220;prototypeability&#8221;/maintainability and scalability over an at design time unknown number of CPUs. All goals are still challenges in software development. The scalability property has however reached [...]]]></description>
			<content:encoded><![CDATA[<p><span id="long-desc" style="display: inline;">The programming language Erlang, new if even known at all to most computer programmers, secretly celebrates its 20th birthday year 2007. Erlang was developed with goals such as high-availability, &#8220;prototypeability&#8221;/maintainability and scalability over an at design time unknown number of CPUs. All goals are still challenges in software development. The scalability property has however reached another dimension due to the past few years development in the field of common and affordable multi core processors. This talk will cover the history of Erlang, demonstrate major design goals with a few programming examples and also touch on the subject of the future of Erlang. The speaker, Mr Lennart Ohman, has been working with Erlang since 1992 in different positions. Amongst many things Mr Ohman was actively involved in the development of the OTP framework, which is an architecture framework for Erlang based software. At present he is managing director of the consultancy company Sjöland &amp; Thyselius Telecom AB.</span></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="728" height="120" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="id" value="VideoPlayback" /><param name="src" value="http://video.google.com/googleplayer.swf?docid=240707194662243675&amp;hl=de&amp;fs=true" /><embed id="VideoPlayback" type="application/x-shockwave-flash" width="500" height="500" src="http://video.google.com/googleplayer.swf?docid=240707194662243675&amp;hl=de&amp;fs=true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2009/01/20/176/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erlang &#8211; The Movie</title>
		<link>http://www.brakmic.de/index.php/2008/10/18/erlang-the-movie/</link>
		<comments>http://www.brakmic.de/index.php/2008/10/18/erlang-the-movie/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 15:44:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Standard]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[electronic]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[telecommunication]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.brakmic.de/?p=57</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="566" height="482" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="id" value="VideoPlayback" /><param name="src" value="http://video.google.com/googleplayer.swf?docid=-5830318882717959520&amp;hl=de&amp;fs=true" /><embed id="VideoPlayback" type="application/x-shockwave-flash" width="566" height="482" src="http://video.google.com/googleplayer.swf?docid=-5830318882717959520&amp;hl=de&amp;fs=true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brakmic.de/index.php/2008/10/18/erlang-the-movie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
