<?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>ADI64 feat. n0stradamus &#187; C++</title>
	<atom:link href="http://adrian.holfter.de/blog/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://adrian.holfter.de/blog</link>
	<description>Reiche Eltern für alle!</description>
	<lastBuildDate>Wed, 04 Jan 2012 22:47:27 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>29. Bundeswettbewerb Informatik &#8211; 2. Runde</title>
		<link>http://adrian.holfter.de/blog/2011/07/29-bundeswettbewerb-informatik-2-runde/</link>
		<comments>http://adrian.holfter.de/blog/2011/07/29-bundeswettbewerb-informatik-2-runde/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 15:19:31 +0000</pubDate>
		<dc:creator>ADI64</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[29]]></category>
		<category><![CDATA[bundeswettbewerb informatik]]></category>
		<category><![CDATA[bwinf]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=626</guid>
		<description><![CDATA[Coolerweise habe ich es mit meinen Lösungen für die zweite Aufgabe im 29. Bundeswettbewerb Informatik (BwInf) in die Endrunde geschafft. n0stradamus ist leider knapp an der Endrunde vorbei. Zum Nachvollziehen und vielleicht auch zum Vorbereiten auf den nächsten BwInf könnt ihr euch meine Dokumentation (1. und 2. Aufgabe) hier anschauen: Klick klack]]></description>
			<content:encoded><![CDATA[<p>Coolerweise habe ich es mit meinen Lösungen für die zweite Aufgabe im 29. Bundeswettbewerb Informatik (BwInf) in die Endrunde geschafft. n0stradamus ist leider knapp an der Endrunde vorbei. Zum Nachvollziehen und vielleicht auch zum Vorbereiten auf den nächsten BwInf könnt ihr euch meine Dokumentation (1. und 2. Aufgabe) hier anschauen: <a href="http://adrian.holfter.de/zeugs/bwinf29_runde2.tar.gz">Klick klack</a></p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/2011/07/29-bundeswettbewerb-informatik-2-runde/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Binärbaum zeichnen</title>
		<link>http://adrian.holfter.de/blog/2011/04/binarbaum-zeichnen/</link>
		<comments>http://adrian.holfter.de/blog/2011/04/binarbaum-zeichnen/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 14:52:04 +0000</pubDate>
		<dc:creator>n0stradamus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[n0stradamus]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=465</guid>
		<description><![CDATA[In diesem Artikel möchte ich ein Verfahren erklären, der einem die links abgebildete Datenstruktur ähnlich wie bei einem Aufruf des Befehls pstree ausgiebt]]></description>
			<content:encoded><![CDATA[<p>Im Rahmen dieses Artikels möchte ich ein Verfahren erklären,<img class="alignright" src="http://www.coder-wiki.de/uploads/Algorithmen/vollstaendiger-binaerbaum.png" alt="" width="143" height="100" /> das einem die rechts abgebildete Datenstruktur bereitstellt, sodass eine Ausgabe ähnlich der von <em>pstree -A</em> wäre.</p>
<p>Das fertige Ergebnis sollte folgendermaßen aussehen (In Anlehnung an den rechts dargestellten Baum &#8211; die Nummerierung erfolgt von links nach rechts):</p>
<pre>[Wurzel] + [Blatt 1, Ebene 1] + [Blatt 1, Ebene 2] + [Blatt 1, Ebene 3]
         |                    |                    ` [Blatt 2, Ebene 3]
         |                    ` [Blatt 2, Ebene 1] + [Blatt 3, Ebene 3]
         |                                         ` [Blatt 4, Ebene 3]
         `[Blatt 2, Ebene 1] + [Blatt 3, Ebene 2] + [Blatt 5, Ebene 3]
                             |                    ` [Blatt 2, Ebene 3]
                              ` [Blatt 2, Ebene 1] + [Blatt 3, Ebene 3]
                                                    ` [Blatt 4, Ebene 3]</pre>
<p><span id="more-465"></span></p>
<p>Wir zeichnen also bei jeder Verzweigung ein Plus, dann den Namen des Blattes und immer so weiter, bis ein Blatt erreicht ist, dass sich nicht mehr verzweigt. Dann wird eine neue Zeile begonnen und so lange unter jedes Plus ein &#8220;|&#8221; geschrieben, bis man wieder auf dem Level angelangt ist, zu dem das Blatt gehört. Soweit so gut, ist ja nicht so komplex.</p>
<p>Die Probleme fingen bei mir an, als ich diese Idee in Code umsetzen musste: Ich hatte eine Liste mit Objektinstanzen, aus denen ein Baum generiert werden sollte.</p>
<p>Jedes Objekt hatte drei für die Ausgabe relevante Attribute:</p>
<pre>Objekt* child1; <span style="color: #339966;">//Der Pointer auf das erste Blatt dieser Objektinstanz</span>
Objekt* child2; <span style="color: #339966;">//Der Pointer auf das zweite Blatt dieser Objektinstanz</span>
string name; <span style="color: #339966;">// Der Name dieser Objektinstanz
//Die Pointer beziehen sich jeweils auf andere, in der Liste vorhandene Instanzen.</span></pre>
<p>Also hatte ich folgende fixe Idee: Ich baue in das Objekt eine Funktion ein, die mir den String zusammenbastelt und sich, um die Verschachtelung darzustellen, wieder selbst aufruft. Damit muss ich nicht festhalten, welche Information von welchem Blatt nun ausgegeben werden soll. Fassen wir diese Idee in Pseudo-Pseudocode zusammen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Die Funktion erhält eine Liste, in der jeder Index eine Zeile symbolisiert</span>
<span style="color: #808080; font-style: italic;"># Zeile 1 also Index 0 usw...</span>
<span style="color: #ff7700;font-weight:bold;">def</span> generate_tree <span style="color: black;">&#40;</span>list_of_strings<span style="color: black;">&#41;</span>:
 <span style="color: #808080; font-style: italic;"># An die aktuelle Zeile den Namen unseres Blattes dranhängen</span>
 list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span> name <span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Wenn unser Objekt ein Kind hat, dann müssen wir ein </span>
<span style="color: #808080; font-style: italic;"># Plus dranhängen und die Rekursion anstoßen.</span>
<span style="color: #808080; font-style: italic;"># Die Unterscheidung ob &quot;+&quot; oder &quot;-&quot; ist nicht notwendig, </span>
<span style="color: #808080; font-style: italic;"># sieht aber am Ende schicker aus:</span>
 <span style="color: #ff7700;font-weight:bold;">if</span> has_child1:
  <span style="color: #ff7700;font-weight:bold;">if</span> has_child2:
   list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;+&quot;</span> <span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">else</span>:
   list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;-&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;"># Hiermit starten wir die Rekursion</span>
  <span style="color: #808080; font-style: italic;"># Das Folgende soll einen Memberaufruf symbolisieren :)</span>
  child1.<span style="color: black;">generate_tree</span><span style="color: black;">&#40;</span> list_of_strings <span style="color: black;">&#41;</span>
&nbsp;
 <span style="color: #ff7700;font-weight:bold;">if</span> has_child2: <span style="color: #808080; font-style: italic;"># Ein Objekt kann ja bis zu zwei Kinder haben</span>
  buffer = <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #808080; font-style: italic;">#Einen Buffer anlegen</span>
  <span style="color: #808080; font-style: italic;"># Die Position des letzten Plusses rausfinden</span>
  p = list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">find_last_of</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;+&quot;</span> <span style="color: black;">&#41;</span> 
  <span style="color: #808080; font-style: italic;"># Die Position des letzten Strichs rausfinden</span>
  k = list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">find_last_of</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;|&quot;</span> <span style="color: black;">&#41;</span> 
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">if</span> p <span style="color: #66cc66;">&lt;</span> k: <span style="color: #808080; font-style: italic;">#Den höheren Wert der beiden müssen wir nehmen</span>
   p = k
&nbsp;
<span style="color: #808080; font-style: italic;"># Von 0 bis p in Einerschritten durchgehen</span>
  <span style="color: #ff7700;font-weight:bold;">for</span> i=<span style="color: #ff4500;">0</span> | i <span style="color: #66cc66;">&lt;</span>= p | i++
   <span style="color: #ff7700;font-weight:bold;">if</span> i <span style="color: #66cc66;">&lt;</span> p:
    <span style="color: #ff7700;font-weight:bold;">if</span> list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span> == <span style="color: #483d8b;">&quot;+&quot;</span> <span style="color: #ff7700;font-weight:bold;">or</span> list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span> == <span style="color: #483d8b;">&quot;|&quot;</span>:
     buffer.<span style="color: black;">append</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;|&quot;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
     buffer.<span style="color: black;">append</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot; &quot;</span> <span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: #ff7700;font-weight:bold;">if</span> i == p:
    buffer.<span style="color: black;">append</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;`&quot;</span> <span style="color: black;">&#41;</span>
&nbsp;
  list_of_strings.<span style="color: black;">append</span><span style="color: black;">&#40;</span> buffer <span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;"># Wieder eine Rekursion starten</span>
  <span style="color: #808080; font-style: italic;"># Das ist auch ein Memberaufruf</span>
  child2.<span style="color: black;">generate_tree</span><span style="color: black;">&#40;</span> list_of_strings <span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># ENDE der Funktion</span></pre></td></tr></table></div>

<p>So&#8230;diese Zeilen verlangen ein wenig nach Erklärung:<br />
Zeile 1: Wir hängen den Namen des Blattes an das letzte Element in der Liste dran. Es ist egal ob die aktuelle Instanz jetzt Wurzel ist oder nicht. Wichtig ist nur, dass die übergebene Liste nicht leer ist. Dafür muss beim Aufruf der Funktion beim Wurzelelement gesorgt sein.</p>
<p>Zeile 11-15: Hier wird nur unterschieden, ob die aktuelle Instanz ein oder zwei Blätter hat und dementsprechend das Verbindungszeichen gewählt</p>
<p>Zeile 19/20: Hier wird die Funktion <em>generate_tree</em> bei dem ersten Kind aufgerufen, mit Übergabe der auch von dieser Funktion verwendeten Liste. Dadurch ist gewährleistet, dass alle ersten Kinder des jeweils vorhergehenden Blatts in einer Zeile stehen.</p>
<p>Zeile 21: Nun ist die Funktion für das erste Kind durchgelaufen, wenn es ein zweites Kind gibt, wird es nun etwas schwieriger, einen String zusammenzubauen.</p>
<p>Zeile 22-26: Es wird ein Puffer angelegt (er wird am Ende die neue Zeile enthalten, die wir zusammengebaut haben), der Index des letzten Plusses und der Index des letzten senkrechten Striches herausgefunden. Zur Erinnerung: Striche sollten die Verzweigung über mehrere Zeilen hinweg kenntlich machen. Plusse sollten zeigen, dass dieses Blatt mehr als ein Kind hat.</p>
<p>Zeile 28-Ende: Die Zuweisung in Zeile 29 macht nur Sinn, wenn man sich die for-Schleife danach anschaut. Wir gehen jeden einzelnen Index der letzten Zeile in der Liste bis <em>p</em> durch. <em>p</em> ist der Index des letzten Plusses/letzten Striches, je nachdem welcher Index höher ist. Solange <em>i &lt; p </em> gilt, wird unter jeden Strich/jedes Plus ein weiterer Strich gehängt (indem man dieses Zeichen an den Puffer hängt). Haben wir <em>p</em> erreicht, so wird ein &#8220;`&#8221; an den Puffer gehängt, weil jetzt endlich der Name des zweiten Kindes kommen kann.<br />
Dazu hängen wir den Buffer an die Liste dran (er symbolisiert ja eine neue Zeile) und rufen <em>generate_tree</em> bei dem zweiten Kind auf, mit unserer Liste als Parameter.</p>
<p style="text-align: center;">&#8212;&#8211;</p>
<p style="text-align: left;">Eine Implementierung dieses Algorithmus in C++ könnte folgendermaßen aussehen: <a title="Beispiel-Implementierung" href="http://adrian.holfter.de/blog/wp-content/uploads/2011/04/objekt_de.cpp">*klick*</a></p>
<p>Die Funktion funktioniert allerdings nur unter zwei Bedingungen:</p>
<ul>
<li>Verwendung eines Monospace-Fonts bei der Ausgabe</li>
<li>Die übergebene Liste ist beim Aufruf der Funktion beim Wurzelelement NICHT leer. Sie muss mindestens einen leeren String enthalten.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/2011/04/binarbaum-zeichnen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>protobuf-messages mit boost::asio übers Netzwerk senden</title>
		<link>http://adrian.holfter.de/blog/2011/02/protobuf-messages-mit-boostasio-ubers-netzwerk-senden/</link>
		<comments>http://adrian.holfter.de/blog/2011/02/protobuf-messages-mit-boostasio-ubers-netzwerk-senden/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 14:05:33 +0000</pubDate>
		<dc:creator>ADI64</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[asio]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[protobuf]]></category>
		<category><![CDATA[protocol buffer]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=373</guid>
		<description><![CDATA[Die Idee für Google&#8217;s protocol buffers finde ich &#8211; besonders für Aktionen zwischen verschiedenen Programmen &#8211; gut durchdacht. Letztlich wollte ich eine solche protobuf-Message übers Netzwerk verschicken, wozu ich die Crossplattform-Library boost::asio benutze. Da ich bis heute kein wirklich einfaches Beispiel für sowas gefunden habe und erstmal bei Stack Overflow fragen musste, habe ich jetzt [...]]]></description>
			<content:encoded><![CDATA[<p>Die Idee für <a href="http://code.google.com/p/protobuf/" target="_blank">Google&#8217;s protocol buffers</a> finde ich &#8211; besonders für Aktionen zwischen verschiedenen Programmen &#8211; gut durchdacht. Letztlich wollte ich eine solche protobuf-Message übers Netzwerk verschicken, wozu ich die Crossplattform-Library <a href="http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio.html" target="_blank">boost::asio</a> benutze. Da ich bis heute kein wirklich einfaches Beispiel für sowas gefunden habe und erstmal bei <a title="Stack Overflow" href="http://stackoverflow.com/questions/4810026/sending-protobuf-messages-with-boostasio/4810293#4810293" target="_blank">Stack Overflow</a> fragen musste, habe ich jetzt ein kleines Snippet, das hoffentlich die Verwendung halbwegs einfach darstellt.<span id="more-373"></span></p>
<p>Angenommen, wir haben eine ClientRequest-Nachricht, welche bestimmte Anfragen an den Server schicken kann. Beispielsweise die Anfrage, den Spieler im Spiel zu registrieren. Dies sieht in der .proto-Datei (gekürzt) folgendermaßen aus:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">message ClientRequest <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">enum</span> Operation <span style="color: #008000;">&#123;</span>
		REGISTER_PLAYER <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#91;</span>...<span style="color: #008000;">&#93;</span>
	<span style="color: #008000;">&#125;</span>
	optional RegisterPlayerParameters register_player_parameters <span style="color: #000080;">=</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#91;</span>...<span style="color: #008000;">&#93;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
message RegisterPlayerParameters <span style="color: #008000;">&#123;</span>
	required PlayerInfo player_info <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#91;</span>...<span style="color: #008000;">&#93;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
message PlayerInfo <span style="color: #008000;">&#123;</span>
	required string name <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#91;</span>...<span style="color: #008000;">&#93;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Dann sieht das C++-Snippet zum Versenden ungefähr so aus:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> boost<span style="color: #008080;">::</span><span style="color: #007788;">asio</span><span style="color: #008080;">;</span>
boost<span style="color: #008080;">::</span><span style="color: #007788;">asio</span><span style="color: #008080;">::</span><span style="color: #007788;">io_service</span> io_service<span style="color: #008080;">;</span>
tcp<span style="color: #008080;">::</span><span style="color: #007788;">resolver</span> resolver<span style="color: #008000;">&#40;</span>io_service<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
tcp<span style="color: #008080;">::</span><span style="color: #007788;">resolver</span><span style="color: #008080;">::</span><span style="color: #007788;">query</span> query<span style="color: #008000;">&#40;</span>tcp<span style="color: #008080;">::</span><span style="color: #007788;">v4</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, “127.0.0.1<span style="color: #008080;">?</span>, <span style="color: #0000dd;">12345</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// host und port</span>
tcp<span style="color: #008080;">::</span><span style="color: #007788;">resolver</span><span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> iterator <span style="color: #000080;">=</span> resolver.<span style="color: #007788;">resolve</span><span style="color: #008000;">&#40;</span>query<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
sock <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> tcp<span style="color: #008080;">::</span><span style="color: #007788;">socket</span><span style="color: #008000;">&#40;</span>io_service<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
sock<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>connect<span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>iterator<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// Hier die protobuf-messages</span>
ClientRequest req<span style="color: #008080;">;</span> <span style="color: #666666;">// diese wird wirklich angelegt</span>
RegisterPlayerParameters<span style="color: #000040;">*</span> rpp<span style="color: #008080;">;</span> <span style="color: #666666;">// pointer, da von req bereitgestellt!</span>
PlayerInfo<span style="color: #000040;">*</span> info<span style="color: #008080;">;</span> <span style="color: #666666;">// pointer, da von rpp bereitgestellt!</span>
&nbsp;
req.<span style="color: #007788;">set_operation</span><span style="color: #008000;">&#40;</span>ClientRequest<span style="color: #008080;">::</span><span style="color: #007788;">REGISTER_PLAYER</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// Parameter für req setzen</span>
&nbsp;
<span style="color: #666666;">// wir holen uns einen Pointer auf die RegisterPlayerParameter-Message !innerhalb! des ClientRequest-Objekts</span>
rpp <span style="color: #000080;">=</span> req.<span style="color: #007788;">mutable_register_player_parameters</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// wir holen uns einen Pointer auf die PlayerInfo-Message !innerhalb! des RegisterPlayerParameters-Objekts</span>
info <span style="color: #000080;">=</span> rpp<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>mutable_player_info<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// mutable, damit wir es ändern können</span>
&nbsp;
<span style="color: #666666;">// Mit diesem Pointer können wir die Attribute setzen</span>
info<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>set_name<span style="color: #008000;">&#40;</span>name<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
boost<span style="color: #008080;">::</span><span style="color: #007788;">asio</span><span style="color: #008080;">::</span><span style="color: #007788;">streambuf</span> b<span style="color: #008080;">;</span>
std<span style="color: #008080;">::</span><span style="color: #007788;">ostream</span> os<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// Protobuf serialisiert in einen Stream (der im Endeffekt alles in einen Puffer schiebt)</span>
&nbsp;
<span style="color: #666666;">// Das ClientRequest-Objekt “versandfertig” verpacken</span>
req.<span style="color: #007788;">SerializeToOstream</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>os<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// Der ostream packt alles in den streampuffer b, den wir per asio versenden können</span>
boost<span style="color: #008080;">::</span><span style="color: #007788;">asio</span><span style="color: #008080;">::</span><span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>sock, b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/2011/02/protobuf-messages-mit-boostasio-ubers-netzwerk-senden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ Dynamische Arrays mit mehreren (2, 3, &#8230;) Dimensionen</title>
		<link>http://adrian.holfter.de/blog/2010/09/c-dynamische-arrays-mit-mehreren-2-3-dimensionen/</link>
		<comments>http://adrian.holfter.de/blog/2010/09/c-dynamische-arrays-mit-mehreren-2-3-dimensionen/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 19:32:33 +0000</pubDate>
		<dc:creator>ADI64</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=327</guid>
		<description><![CDATA[&#8230; genau sowas suchte ich gerade über eine Stunde lang. Hätte ich einmal C++ RICHTIG gelernt und nicht alles zusammenklamüsert, wüsste ich sowas wahrscheinlich. Aber da der Grundkurs, den ich besucht habe, etwas arg verpeilt war und außer dem Klassenmodell und iostream kein C++ verwendete, sondern z.B. Speicher grundsätzlich mit &#8220;malloc&#8221; reservierte, war so etwas [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; genau sowas suchte ich gerade über eine Stunde lang.</p>
<p>Hätte ich einmal C++ RICHTIG gelernt und nicht alles zusammenklamüsert, wüsste ich sowas wahrscheinlich. Aber da der Grundkurs, den ich besucht habe, etwas arg verpeilt war und außer dem Klassenmodell und iostream kein <em>C++</em> verwendete, sondern z.B. Speicher grundsätzlich mit &#8220;malloc&#8221; reservierte, war so etwas eben nicht drin.</p>
<p>Übrigens empfehlen die im &#8220;offiziellen&#8221; C++ Forum genau das, was ich auch im Hinterkopf hatte:<strong> geschachtelte Vektoren</strong>. Das wollte ich anfangs auch machen, dachte mir aber, dass es da doch was gescheites für geben müsste&#8230; mhja. <img src='http://adrian.holfter.de/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Das hier ist also mehr so für google, damit das andere auch finden ;D</p>
<div id="bar"><strong>C++ : Forums : Articles : Multi-Dimensional Arrays</strong></div>
<p><a href="http://www.cplusplus.com/forum/articles/7459/"><strong>http://www.cplusplus.com/forum/articles/7459/</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/2010/09/c-dynamische-arrays-mit-mehreren-2-3-dimensionen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qwt Libraries installieren</title>
		<link>http://adrian.holfter.de/blog/2010/06/qwt-libraries-installieren/</link>
		<comments>http://adrian.holfter.de/blog/2010/06/qwt-libraries-installieren/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 16:17:07 +0000</pubDate>
		<dc:creator>n0stradamus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[n0stradamus]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[workaround]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=213</guid>
		<description><![CDATA[Wer schon einmal versucht hat, Graphen in Qt zeichnen zu lassen, hat mit Sicherheit auf das Qwt-Framework zurückgegriffen. Leider lassen sich die Libs nicht so einfach in den Qt-Creator einbauen wie andere Standardlibs, zumindest war das bei mir der Fall. Für alle, die an einem nicht so wirklich richtig funktionieren Paketmanager gescheitert sind, ist hier [...]]]></description>
			<content:encoded><![CDATA[<p>Wer schon einmal versucht hat, Graphen in Qt zeichnen zu lassen, hat mit Sicherheit auf das Qwt-Framework zurückgegriffen. Leider lassen sich die Libs nicht so einfach in den Qt-Creator einbauen wie andere Standardlibs, zumindest war das bei mir der Fall.</p>
<p>Für alle, die an einem nicht so wirklich richtig funktionieren Paketmanager gescheitert sind, ist hier der Leitfaden:<span id="more-213"></span></p>
<p>1.  Qwt Libraries runterladen und entpacken in Verzeichnis <span style="color: #ff0000;">X</span>:</p>
<blockquote><p>http://www.qwt.sourceforge.net</p>
<p>tar -xzf foo.tar.gz</p></blockquote>
<p>2. Dann folgende Konsolenschritte:</p>
<blockquote><p>cd &#8216;<span style="color: #ff0000;">X</span>&#8216; <span style="color: #008000;">//Pfad in dem sich das extrahierte Qwt findet</span></p>
<p>qmake</p>
<p>sudo make</p>
<p>sudo make install</p></blockquote>
<p>3. Damit sei es getan, könnte man meinen, doch ich musste die qwt-Libraries noch vermerken und zwar in /usr/local/lib/libc.conf</p>
<blockquote><p>/usr/local/qwt-Name/lib</p>
<p><span style="color: #008000;">/*Name war in meinem Fall qwt-5.2.0*/</span></p></blockquote>
<p>4. Und zum Schluss:</p>
<blockquote><p>sudo ldconfig</p></blockquote>
<p>Teilt mir bitte Fehler mit, ich habe die Methode bisher nur ein paar Mal verwendet.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/2010/06/qwt-libraries-installieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RndMp3Copy endlich mit Gui</title>
		<link>http://adrian.holfter.de/blog/2009/09/rndmp3copy-endlich-mit-gui/</link>
		<comments>http://adrian.holfter.de/blog/2009/09/rndmp3copy-endlich-mit-gui/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 12:13:01 +0000</pubDate>
		<dc:creator>ADI64</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[RndMp3Copy]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=112</guid>
		<description><![CDATA[Nach einer langen Zeit, in der die Gui-Anfänge bei mir vor sich hin vegetierten, habe ich mich mal drangesetzt und RndMp3Copy-Guis für Linux (GTK+ / GTKmm) und für Windows (AutoIt) geschrieben. Den Sourcecode und Windows-Binaries gibt es auf der  dazugehörigen Seite unten zum Download. RndMp3Copy steht unter der CCGPL.]]></description>
			<content:encoded><![CDATA[<p>Nach einer langen Zeit, in der die Gui-Anfänge bei mir vor sich hin vegetierten, habe ich mich mal drangesetzt und <a href="http://adrian.holfter.de/blog/rndmp3copy/" target="_self">RndMp3Copy</a>-Guis für Linux (GTK+ / GTKmm) und für Windows (AutoIt) geschrieben.</p>
<p>Den Sourcecode und Windows-Binaries gibt es auf der  <a href="http://adrian.holfter.de/blog/rndmp3copy/" target="_self">dazugehörigen Seite</a> unten zum Download.</p>
<p>RndMp3Copy steht unter der <a href="http://creativecommons.org/licenses/GPL/2.0/" target="_blank">CCGPL</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/2009/09/rndmp3copy-endlich-mit-gui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RndMp3Copy</title>
		<link>http://adrian.holfter.de/blog/2009/06/rndmp3copy/</link>
		<comments>http://adrian.holfter.de/blog/2009/06/rndmp3copy/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 10:06:02 +0000</pubDate>
		<dc:creator>ADI64</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[frisch]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Random]]></category>
		<category><![CDATA[RndMp3Copy]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://adihp.ad.funpic.de/wordpress/?p=58</guid>
		<description><![CDATA[Der RndMp3Copy-Artikel wurde umgelegt und ist nun als Seite verfügbar. Dort werden auch die neuen Versionen erscheinen.]]></description>
			<content:encoded><![CDATA[<p>Der RndMp3Copy-Artikel wurde umgelegt und ist nun als Seite verfügbar.</p>
<p>Dort werden auch die neuen Versionen erscheinen.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/2009/06/rndmp3copy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

