<?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>Rash thoughts about .NET, C#, F# and Dynamics NAV. &#187; Google</title>
	<atom:link href="http://www.navision-blog.de/tag/google/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.navision-blog.de</link>
	<description>This Blog is about Microsoft Dynamics NAV (f.k.a Navision incl. C/SIDE and C/AL), C#, F# and .NET in general.</description>
	<lastBuildDate>Wed, 14 Jul 2010 11:12:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Using PLINQ in F# &#8211; Parallel Map and Reduce (Fold) functions &#8211; part 2</title>
		<link>http://www.navision-blog.de/2008/10/24/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions-part-ii/</link>
		<comments>http://www.navision-blog.de/2008/10/24/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions-part-ii/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 16:00:17 +0000</pubDate>
		<dc:creator>Steffen Forkmann</dc:creator>
				<category><![CDATA[.NET 3.0]]></category>
		<category><![CDATA[English posts]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[PLINQ]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Map and fold]]></category>
		<category><![CDATA[MapReduce]]></category>
		<category><![CDATA[Parallel Computing]]></category>
		<category><![CDATA[Parallel Extensions]]></category>

		<guid isPermaLink="false">http://www.navision-blog.de/2008/10/24/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions-part-ii/</guid>
		<description><![CDATA[Last time I showed how it is possible to use parallel map and fold functions to compute the sum of all factorials between 1 and 3000. The result was a nearly perfect load balancing for this task on a two processor machine. This time I will derive a generic function that computes partial results in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.navision-blog.de/2008/10/23/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions/">Last time</a> I showed how it is possible to use parallel map and fold functions to compute the sum of all factorials between 1 and 3000. The result was a nearly perfect load balancing for this task on a two processor machine. This time I will derive a generic function that computes partial results in parallel and folds them to a final result.</p>
<p>Let’s consider our F# example:</p>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><span style="color: blue">let</span> add a b = a + b&#160; </pre>
<pre style="margin: 0px"><span style="color: blue">let</span><strong> </strong>fac (x:bigint) = </pre>
<pre style="margin: 0px">  [1I..x] |&gt; List.fold_left (*) 1I</pre>
<pre style="margin: 0px"><strong><span style="color: blue">let</span> sequential() =</strong></pre>
<pre style="margin: 0px"><strong>&#160; [1I..3000I]</strong></pre>
<pre style="margin: 0px"><strong>&#160;&#160; |&gt; List.map fac</strong></pre>
<pre style="margin: 0px"><strong>&#160;&#160; |&gt; List.fold_left add 0I</strong></pre>
</div>
<p>This is the same as:</p>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><span style="color: blue">let</span> calcFactorialSum min max =</pre>
<pre style="margin: 0px">&#160; [min..max] </pre>
<pre style="margin: 0px">&#160;&#160; |&gt; List.map fac</pre>
<pre style="margin: 0px">&#160;&#160; |&gt; List.fold_left add 0I&#160; </pre>
<pre style="margin: 0px">&#160;</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> f1() = calcFactorialSum&#160;&#160;&#160; 1I 2000I</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> f2() = calcFactorialSum 2001I 2200I</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> f3() = calcFactorialSum 2201I 2400I</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> f4() = calcFactorialSum 2401I 2600I</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> f5() = calcFactorialSum 2601I 2800I</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> f6() = calcFactorialSum 2801I 3000I</pre>
<pre style="margin: 0px">&#160;</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> sequential2() =</pre>
<pre style="margin: 0px">&#160; <strong>f1() + f2() + f3() + f4() + f5() + f6()</strong></pre>
</div>
<p>We spitted the summation into 6 independent tasks and computed the sum of the partial results. This has nearly no bearing on the runtime.</p>
<p>But with the help of PLINQ we can compute each task in parallel:</p>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><span style="color: blue">let</span> asParallel (list: 'a list) = </pre>
<pre style="margin: 0px">&#160; list.AsParallel&lt;'a&gt;()</pre>
</p></div>
<pre style="margin: 0px"><span style="color: blue">let</span> runParallel functions = </pre>
<pre style="margin: 0px">&#160;&#160;&#160; ParallelEnumerable.Select(</pre>
<pre style="margin: 0px">      asParallel functions, (<span style="color: blue">fun</span> f <span style="color: blue">-&gt;</span>&#160; f() ) )</pre>
<pre style="margin: 0px">&#160;</pre>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><span style="color: blue">let</span> pFold foldF seed (data:IParallelEnumerable&lt;'a&gt;)=</pre>
<pre style="margin: 0px">&#160; ParallelEnumerable.Aggregate&lt;'a,'b&gt;(</pre>
<pre style="margin: 0px">&#160;&#160;&#160; data, seed, <span style="color: blue">new</span> Func&lt;'b,'a,'b&gt;(foldF))</pre>
<pre style="margin: 0px">&#160;</pre>
</p></div>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><strong><span style="color: blue">let</span> calcFactorialsParallel() =</strong></pre>
<pre style="margin: 0px"><strong>&#160; [f1; f2; f3; f4; f5; f6]</strong></pre>
<pre style="margin: 0px"><strong>&#160;&#160;&#160; |&gt; runParallel</strong></pre>
<pre style="margin: 0px"><strong>&#160;&#160;&#160; |&gt; pFold add 0I</strong></pre>
</p></div>
<p><font color="#f26722"></font></p>
</div>
<p>This time we build a list of functions (f1, f2, f3, f4, f5, f6) and run them in parallel. &quot;<em>runParallel</em>” gives us back a list of the partial results, which we can fold with the function “<em>add</em>” to get the final result.</p>
<p>On my Core 2 Duo E6550 with 2.33 GHz and 3.5 GB RAM I get the following results:</p>
<blockquote>
<p>Time Normal: 26.576s</p>
<p>Time Sequential2: 26.205s (Ratio: 0.99)</p>
<p><strong>Time “Parallel Functions”: 18.426s (Ratio: 0.69)</strong></p>
<p>Time PLINQ: 14.990s (Ratio: 0.56) (<a href="http://www.navision-blog.de/2008/10/23/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions/">Last post</a>)</p>
<p>Same Results: true</p>
</blockquote>
<p>We can see that the parallel computation of the functions f1 – f6 is much faster than the sequential.</p>
<p>But why is the PLINQ-version (<a href="http://www.navision-blog.de/2008/10/23/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions/">see last post</a>) still faster? We can easily see that each partial function needs a different runtime (e.g. it’s much harder to calculate the factorials between 2800 and 3000 than between 2000 and 2200). On my machine I get:</p>
<blockquote>
<p>Time F1: 8.738s</p>
<p>Time F2: 2.663s</p>
<p>Time F3: 3.119s</p>
<p>Time F4: 3.492s</p>
<p>Time F5: 3.889s</p>
<p>Time F6: 4.442s</p>
</blockquote>
<p>The problem is that the Parallel Framework can only guess each runtime amount in advance. So the load balancing for 2 processors will not be optimal in every case. In the original PLINQ-version there are only small tasks, and the difference between each runtime is smaller. So it is easier to compute the load balancing.</p>
<p>But of course we can do better if we split f1 into two functions f7 and f8:</p>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><span style="color: blue">let</span> f7() = calcFactorialSum&#160;&#160;&#160; 1I 1500I</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> f8() = calcFactorialSum 1501I 2000I</pre>
</div>
<p>So we can get a better load balancing:</p>
<blockquote>
<p>Time F1: 8.721s</p>
<p>Time F7: 4.753s</p>
<p>Time F8: 4.829s</p>
<p>Time Normal: 26.137s</p>
<p>Time “Parallel Functions”: 16.138s (Ratio: 0.62)</p>
<p>Same Results: true</p>
</blockquote>
<p>&copy;2010 <a href="http://www.navision-blog.de">Rash thoughts about .NET, C#, F# and Dynamics NAV.</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://www.navision-blog.de/2008/10/24/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions-part-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using PLINQ in F# – Parallel Map and Reduce (Fold) functions &#8211; part 1</title>
		<link>http://www.navision-blog.de/2008/10/23/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions/</link>
		<comments>http://www.navision-blog.de/2008/10/23/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 16:25:37 +0000</pubDate>
		<dc:creator>Steffen Forkmann</dc:creator>
				<category><![CDATA[.NET 3.0]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Map and fold]]></category>
		<category><![CDATA[MapReduce]]></category>
		<category><![CDATA[Parallel Computing]]></category>
		<category><![CDATA[Parallel Extensions]]></category>
		<category><![CDATA[PLINQ]]></category>

		<guid isPermaLink="false">http://www.navision-blog.de/2008/10/23/using-plinq-in-f-parallel-map-and-fold-functions/</guid>
		<description><![CDATA[If your wondering how Google computes query results in such a short time you have to read the famous “MapReduce”-Paper by Jeffrey Dean and Sanjay Ghemawat (2004). It shows how one can split large tasks into a mapping and a reduce step which could then be processed in parallel. With PLINQ (part of the Parallel [...]]]></description>
			<content:encoded><![CDATA[<p>If your wondering how Google computes query results in such a short time you have to read the famous <a title="MapReduce: Simplified Data Processing on Large Clusters" href="http://labs.google.com/papers/mapreduce.html">“MapReduce”-Paper by Jeffrey Dean and Sanjay Ghemawat</a> (2004). It shows how one can split large tasks into a mapping and a reduce step which could then be processed in parallel.</p>
<p>With PLINQ (part of the <a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx">Parallel Extensions to the .NET Framework</a>) you can easily use “MapReduce”-pattern in .NET and especially F#. PLINQ will take care of all the MultiThreading and load balancing stuff. You only have to give PLINQ a map and a reduce (or fold) function.</p>
<p>Lets consider a small example. Someone wants to compute the sum of the factorials of all integers from 1 to 3000. With <em>List.map</em> and <em>List.fold_left</em> this is a very easy task in F#:</p>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><span style="color: blue">#light</span></pre>
<pre style="margin: 0px"><span style="color: blue">open</span> System</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> add a b = a + b</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> fac (x:bigint) = [1I..x] |&gt; List.fold_left (*) 1I</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><strong><span style="color: blue">let</span> sum =</strong></pre>
<pre style="margin: 0px"><strong>  [1I..3000I]</strong></pre>
<pre style="margin: 0px"><strong>    |&gt; List.map fac</strong></pre>
<pre style="margin: 0px"><strong>    |&gt; List.fold_left add 0I</strong></pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px">printfn <span style="color: maroon">"Sum of Factorials: %A"</span> sum</pre>
<pre style="margin: 0px"></pre>
</div>
<p>Of course you could do much much better if you don’t compute every factorial on its own (I will show this in one of the next parts) &#8211; but for this time I need an easy function that is time consuming.</p>
<p>This simple Task needs 27 sec. on my Core 2 Duo E6550 with 2.33 GHz and 3.5 GB RAM.</p>
<p>But we can do better if we use parallel map and fold functions with help of PLINQ:</p>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><span style="color: blue">let</span> pMap (mapF:'a <span style="color: blue">-&gt;</span> 'b) (data:IParallelEnumerable&lt;'a&gt;) =</pre>
<pre style="margin: 0px">  ParallelEnumerable.Select(data, mapF)</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> pFold foldF seed (data:IParallelEnumerable&lt;'a&gt;)=</pre>
<pre style="margin: 0px">  ParallelEnumerable.Aggregate&lt;'a,'b&gt;(</pre>
<pre style="margin: 0px">    data, seed, <span style="color: blue">new</span> Func&lt;'b,'a,'b&gt;(foldF))</pre>
</div>
<p>Now we can easily transform our calculation to a parallel version:</p>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><strong><span style="color: blue">let</span> sum =</strong></pre>
<pre style="margin: 0px"><strong>  [1I..3000I].AsParallel&lt;bigint&gt;()</strong></pre>
<pre style="margin: 0px"><strong>    |&gt; pMap fac </strong></pre>
<pre style="margin: 0px"><strong>    |&gt; pFold add 0I</strong></pre>
</div>
<p>Putting all together we can write a small test application:</p>
<div style="font-size: 10pt; background: white; color: black; font-family: courier new">
<pre style="margin: 0px"><span style="color: blue">#light </span></pre>
<pre style="margin: 0px"><span style="color: blue">open</span> System</pre>
<pre style="margin: 0px"><span style="color: blue">open</span> System.Linq</pre>
<pre style="margin: 0px"><span style="color: blue">open</span> System.Diagnostics</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> testRuntime f =</pre>
<pre style="margin: 0px">  <span style="color: blue">let</span> watch = <span style="color: blue">new</span> Stopwatch()</pre>
<pre style="margin: 0px">  watch.Start()</pre>
<pre style="margin: 0px">  (f(),watch.Elapsed)</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> add a b = a + b</pre>
<pre style="margin: 0px"><span style="color: blue">let</span> fac (x:bigint) = [1I..x] |&gt; List.fold_left (*) 1I</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> list = [1I..3000I]</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> pMap (mapF:'a <span style="color: blue">-&gt;</span> 'b) (data:IParallelEnumerable&lt;'a&gt;)=</pre>
<pre style="margin: 0px">  ParallelEnumerable.Select(data, mapF)</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> pFold foldF seed (data:IParallelEnumerable&lt;'a&gt;)=</pre>
<pre style="margin: 0px">  ParallelEnumerable.Aggregate&lt;'a,'b&gt;(</pre>
<pre style="margin: 0px">    data, seed, <span style="color: blue">new</span> Func&lt;'b,'a,'b&gt;(foldF))</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> PLINQ() =</pre>
<pre style="margin: 0px">  list.AsParallel&lt;bigint&gt;()</pre>
<pre style="margin: 0px">    |&gt; pMap fac</pre>
<pre style="margin: 0px">    |&gt; pFold add 0I</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> sequential() =</pre>
<pre style="margin: 0px">  list</pre>
<pre style="margin: 0px">   |&gt; List.map fac</pre>
<pre style="margin: 0px">   |&gt; List.fold_left add 0I</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> (sumSequential,timeSequential) =</pre>
<pre style="margin: 0px">  testRuntime sequential</pre>
<pre style="margin: 0px">printfn <span style="color: maroon">"Time Normal: %.3fs" </span>timeSequential.TotalSeconds</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px"><span style="color: blue">let</span> (sumPLINQ,timePLINQ) =</pre>
<pre style="margin: 0px">  testRuntime PLINQ</pre>
<pre style="margin: 0px">printfn <span style="color: maroon">"Time PLINQ: %.3fs"</span> timePLINQ.TotalSeconds</pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px">timePLINQ.TotalSeconds / timeSequential.TotalSeconds</pre>
<pre style="margin: 0px">  |&gt; printfn <span style="color: maroon">"Ratio: %.2f"</span></pre>
<pre style="margin: 0px"></pre>
<pre style="margin: 0px">sumSequential = sumPLINQ</pre>
<pre style="margin: 0px">  |&gt; printfn <span style="color: maroon">"Same Results: %A"</span></pre>
</div>
<p>On my machine I get the following results:</p>
<blockquote><p>Time Normal: 27.955s</p>
<p>Time PLINQ: 15.505s</p>
<p>Ratio: 0.55</p>
<p>Same Results: true</p></blockquote>
<p>This means I get nearly a perfect load balancing on my two processors for this task.</p>
<p>In <a href="http://www.navision-blog.de/2008/10/24/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions-part-ii/">part II</a> I describe how one can compute a series of functions in parallel.</p>
<p>&copy;2010 <a href="http://www.navision-blog.de">Rash thoughts about .NET, C#, F# and Dynamics NAV.</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://www.navision-blog.de/2008/10/23/using-plinq-in-fsharp-parallel-map-and-reduce-fold-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Googleplex Fotos</title>
		<link>http://www.navision-blog.de/2007/04/02/googleplex-fotos/</link>
		<comments>http://www.navision-blog.de/2007/04/02/googleplex-fotos/#comments</comments>
		<pubDate>Mon, 02 Apr 2007 14:52:04 +0000</pubDate>
		<dc:creator>Steffen Forkmann</dc:creator>
				<category><![CDATA[Lustiges]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[googleplex]]></category>
		<category><![CDATA[headquarter]]></category>
		<category><![CDATA[photos]]></category>

		<guid isPermaLink="false">http://www.navision-blog.de/2007/04/02/googleplex-fotos/</guid>
		<description><![CDATA[Hier ein paar Links zu Fotosammlungen aus dem Google Headquarter. Manchmal hat man den Eindruck das ist ein bezahlter Trip in einen Freizeitpark. Some Googleplex Photos Inside Google Flickr Bilder &#169;2010 Rash thoughts about .NET, C#, F# and Dynamics NAV.. All Rights Reserved..]]></description>
			<content:encoded><![CDATA[<p>Hier ein paar Links zu Fotosammlungen aus dem Google Headquarter. Manchmal hat man den Eindruck das ist ein bezahlter Trip in einen Freizeitpark.</p>
<ul>
<li><a href="http://blog.outer-court.com/archive/2007-02-07-n13.html">Some Googleplex Photos</a>
<li><a href="http://www.time.com/time/photoessays/2006/inside_google/">Inside Google</a>
<li><a href="http://www.flickr.com/search/?w=35034346144@N01&amp;q=Google&amp;m=tags">Flickr Bilder</a></li>
</ul>
<p><img alt="Googleplex" src="http://farm1.static.flickr.com/28/103727973_3229ab1e62.jpg?v=0" class=bordered></p>
<p>&copy;2010 <a href="http://www.navision-blog.de">Rash thoughts about .NET, C#, F# and Dynamics NAV.</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://www.navision-blog.de/2007/04/02/googleplex-fotos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Massiver Betrug bei Google AdWords &#252;ber &quot;Suchportale&quot;</title>
		<link>http://www.navision-blog.de/2007/04/02/massiver-betrug-bei-google-adwords-ber-suchportale/</link>
		<comments>http://www.navision-blog.de/2007/04/02/massiver-betrug-bei-google-adwords-ber-suchportale/#comments</comments>
		<pubDate>Mon, 02 Apr 2007 12:30:02 +0000</pubDate>
		<dc:creator>Steffen Forkmann</dc:creator>
				<category><![CDATA[Counterize]]></category>
		<category><![CDATA[Diverses]]></category>
		<category><![CDATA[adsense]]></category>
		<category><![CDATA[adwords]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.navision-blog.de/2007/04/02/massiver-betrug-bei-google-adwords-ber-suchportale/</guid>
		<description><![CDATA[Vor gut einem Monat fielen mir in der Statistik der von mir betreuten Seite der S&#38;H GmbH&#160;einige Ungereimtheiten auf.&#160;Durch mein&#160;Counterize II konnte ich sehen, dass in unregelm&#228;&#223;igen Abst&#228;nden (aber&#160;ca. einmal pro Stunde)&#160;Besucher von ganz bestimmten Referer-Adressen kamen. Die Urprungsseiten waren irgendwelche &#8220;Suchportale&#8221;, die nur aus einem Suchfeld und Google-AdWords-Anzeigenbl&#246;cken bestanden. Die protokollierten Zugriffe kamen immer [...]]]></description>
			<content:encoded><![CDATA[<p>Vor gut einem Monat fielen mir in der Statistik der von mir betreuten Seite der <a href="http://www.sh-umwelt.de/">S&amp;H GmbH</a>&nbsp;einige Ungereimtheiten auf.&nbsp;Durch mein&nbsp;<a href="http://www.navision-blog.de/counterize/">Counterize II</a> konnte ich sehen, dass in unregelm&#228;&#223;igen Abst&#228;nden (aber&nbsp;ca. einmal pro Stunde)&nbsp;Besucher von ganz bestimmten Referer-Adressen kamen. Die Urprungsseiten waren irgendwelche &#8220;Suchportale&#8221;, die nur aus einem Suchfeld und <a href="https://adwords.google.de/">Google-AdWords-Anzeigenbl&#246;cken</a> bestanden. Die protokollierten Zugriffe kamen immer von unterschiedlichen IP&#8217;s, so dass ich am Anfang nicht an Betrug dachte.</p>
<p>Nach einer Weile jedoch stellte ich fest, dass NIE auch nur einmal auf der S&amp;H-Seite irgendwo hin geklickt wurde. Auch der Suchbegriff der angeblich in dem Portal einmal pro Stunde eingegeben wurde, war sehr ungew&#246;hnlich. Mein AdWords-Account sagt, dass&nbsp;dieser Begriff&nbsp;vielleicht alle 2 Wochen mal bei der normalen&nbsp;Google-Suche&nbsp;angeklickt wird. Jetzt stand f&#252;r mich fest: Das sind keine &#8220;echten&#8221; Benutzer sondern Bot-Netzwerke, die auf Kosten der AdWords-Kunden reichlich Kohle abzocken.</p>
<p>Ich schaute also in meine AdWords-Einstellungen und versuchte die Seiten &#252;ber das angebotene Tool zu blocken. Ohne Erfolg. Also schrieb ich eine Beschwerde an Google. Nach einigen langatmigen Mails stellte sich heraus, dass die betreffenden Portale keine AdSense-Anzeigen (Content-Werbenetzwerk) geschaltet haben, sondern Teil des offiziellen Google-Suchnetzwerkes sind. </p>
<blockquote><p>&#8220;Unsere Techniker haben zweifelsfrei festgestellt, dass Ihre Anzeigen vom 1.<br />Februar bis zum 15. M&#228;rz nicht auf der von Ihnen &#252;bermittelten Seite im Content-Werbenetzwerk angezeigt wurden. Sie haben Ihre Anzeige auf dieser Seite gesehen, weil Sie Teil des Such-Werbenetzwerkes ist.&#8221;</p>
</blockquote>
<p>Es gibt jedoch keine M&#246;glichkeit Anzeigen&nbsp;f&#252;r bestimmte Seiten im Suchnetzwerk zu blockieren. Man kann nur das gesamte Suchnetzwerk abschalten &#8211; das bedeutet dann aber auch keine Anzeigen mehr bei&nbsp;den gro&#223;en Anbietern&nbsp;wie T-Online, Tiscali, Freenet, Chip.de usw.</p>
<p>Auf meine Beschwerde hin bestritt Google auch&nbsp;den Manipulationsverdacht und reagierte nur mit ewig langen vorgefertigten 0815-Standardmails. Zum Vorwurf, dass die gefakten Besucher in der Seite nicht herumklicken schreibt Google z.B.:</p>
<blockquote><p>&#8220;Bitte beachten Sie, dass Besucher, die nur auf Ihre Zielseite klicken und nicht weiter in das Men&#252; gehen, durchaus auch &#8220;echte&#8221;, also f&#252;r Sie wichtige Besucher sein k&#246;nnen und deshalb keine wertlosen Klicks verursachen. Beispielsweise informieren sich Besucher h&#228;ufig kurz &#252;ber die Zielseite einer Anzeige, speichern diese dann als Lesezeichen ab und kommen sp&#228;ter wieder.&#8221;</p>
</blockquote>
<p>Aha, also keine wertlosen Klicks. F&#252;r Google sicher nicht, denn Google verdient ja daran&nbsp;- deshalb kann ich&nbsp;auch auf eine Gutschrift &#252;ber die zu Unrecht eingezogenen Betr&#228;ge wahrscheinlich noch lange warten.</p>
<p>Interessante Artikel:</p>
<ul>
<li><a title="http://www.heise.de/tp/r4/artikel/22/22248/1.html" href="http://www.heise.de/tp/r4/artikel/22/22248/1.html">Betrug per Klick</a>&nbsp;(Telepolis)</li>
<li><a href="http://www.golem.de/0607/46741.html">Google zeigt ung&#252;ltige Klicks an</a> (Golem)</li>
</ul>
<p>&copy;2010 <a href="http://www.navision-blog.de">Rash thoughts about .NET, C#, F# and Dynamics NAV.</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://www.navision-blog.de/2007/04/02/massiver-betrug-bei-google-adwords-ber-suchportale/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google PageRank Update in Gange</title>
		<link>http://www.navision-blog.de/2007/01/25/google-pagerank-update-in-gange/</link>
		<comments>http://www.navision-blog.de/2007/01/25/google-pagerank-update-in-gange/#comments</comments>
		<pubDate>Thu, 25 Jan 2007 12:38:55 +0000</pubDate>
		<dc:creator>Jens Hesse</dc:creator>
				<category><![CDATA[Diverses]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google PR Update]]></category>
		<category><![CDATA[google-algorithmus]]></category>

		<guid isPermaLink="false">http://www.navision-blog.de/2007/01/25/google-pagerank-update-in-gange/</guid>
		<description><![CDATA[Momentan aktualisiert Google offensichtlich den PageRank. Bei einigen Datacentern kann man den neuen PageRank schon abrufen. Der PageRank hat allerdings heutzutage eine untergeordnete Bedeutung. Viel wichtiger f&#252;r eine Website ist eine gute Platzierung in den Suchergebnissen zu den relevanten Keywords. Der Navision Blog bekommt nun erstmals ein PR (4) zugewiesen. Links: PageRank verschiedener DataCenter &#169;2010 [...]]]></description>
			<content:encoded><![CDATA[<p>Momentan aktualisiert Google offensichtlich den PageRank. Bei einigen Datacentern kann man den neuen PageRank schon abrufen. Der PageRank hat allerdings heutzutage eine untergeordnete Bedeutung. Viel wichtiger f&#252;r eine Website ist eine gute Platzierung in den Suchergebnissen zu den relevanten Keywords. Der Navision Blog bekommt nun erstmals ein PR (4) zugewiesen.</p>
<p>Links:</p>
<ul>
<li><a href="http://www.database-search.com/sys/dc-pr-flash-ext.php">PageRank verschiedener DataCenter</a></li>
</ul>
<p>&copy;2010 <a href="http://www.navision-blog.de">Rash thoughts about .NET, C#, F# and Dynamics NAV.</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://www.navision-blog.de/2007/01/25/google-pagerank-update-in-gange/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Microsoft und der Suchmaschinenmarkt</title>
		<link>http://www.navision-blog.de/2006/11/07/microsoft-und-der-suchmaschinenmarkt/</link>
		<comments>http://www.navision-blog.de/2006/11/07/microsoft-und-der-suchmaschinenmarkt/#comments</comments>
		<pubDate>Tue, 07 Nov 2006 18:59:20 +0000</pubDate>
		<dc:creator>Steffen Forkmann</dc:creator>
				<category><![CDATA[Diverses]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[live.com]]></category>
		<category><![CDATA[suchmaschinen]]></category>

		<guid isPermaLink="false">http://www.navision-blog.de/2006/11/07/microsoft-und-der-suchmaschinenmarkt/</guid>
		<description><![CDATA[Microsoft scheint jetzt wieder ernst zu machen und versucht den Suchmaschinenmarkt wieder etwas spannender zu gestalten. Neuste Projekte sind ja neben der eigentlichen Maschine (live.com) die wunderbare Ms. Dewey und seit gestern der Live Rundflug durch 15 St&#228;dte der USA &#252;ber Virtual Earth 3D (SDK). Das ist schon wirklich beeindruckend St&#228;dte wie Las Vegas in der 3D-Ansicht zu betrachten. [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft scheint jetzt wieder ernst zu machen und versucht den Suchmaschinenmarkt wieder etwas spannender zu gestalten. Neuste Projekte sind ja neben der eigentlichen Maschine (<a target="_blank" href="http://live.com/" title="Live.Com Suchmaschine">live.com</a>) die wunderbare <a target="_blank" href="http://www.msdewey.com/" title="MS Dewey Suchmaschine">Ms. Dewey</a> und seit gestern der Live Rundflug durch 15 St&#228;dte der USA &#252;ber <a target="_blank" href="http://local.live.com/" title="Local Live">Virtual Earth 3D</a> (<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4d640c59-c3cc-4438-8113-5828d4a0f20a&amp;DisplayLang=en" title="Microsoft Virtual Earth 3D SDK">SDK</a>). Das ist schon wirklich beeindruckend St&#228;dte wie Las Vegas in der 3D-Ansicht zu betrachten. Selbstverst&#228;ndlich werden da kaum noch Weltraumaufnahmen benutzt, sondern haupts&#228;chlich Aufnahme aus Flugzeugen und Vans.</p>
<p>Der <a target="_blank" href="http://search.live.com/results.aspx?q=pussy" title="Jugendschutz bei der Suche auf Live.com">Suchbegriff &#8220;pussy&#8221; geht auf Live.com</a> &#252;brigens immer noch nicht <img src='http://www.navision-blog.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<blockquote><p>&#8220;Der Suchbegriff <strong>pussy</strong> f&#252;hrt m&#246;glicherweise zu rechtswidrigen oder jugendgef&#228;hrdenden Inhalten.&#8221;</p></blockquote>
<p>Der Cocktail &#8220;pussy foot&#8221; wird jedoch gefunden und nicht durch das Jugendschutz-Feature gefiltert.</p>
<p>In jedem Fall wird es spannend zu sehen wie sich Google zur neuen &#8220;Konkurrenz&#8221; verh&#228;lt und ob die Google-Dienste (wie Google Earth, usw.) etwas vom Kuchen abgeben. Am wichtigsten w&#228;re es meiner Meinung nach aber, dass sich endlich eine zweite Suchmaschine (egal von wem) am Markt positionieren k&#246;nnte &#8211; so ein Monopol bei der Informationsbeschaffung ist zumindest bedenklich.</p>
<p>&copy;2010 <a href="http://www.navision-blog.de">Rash thoughts about .NET, C#, F# and Dynamics NAV.</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://www.navision-blog.de/2006/11/07/microsoft-und-der-suchmaschinenmarkt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google &#228;ndert seine Webmaster Richtlinien</title>
		<link>http://www.navision-blog.de/2006/11/07/google-andert-seine-webmaster-richtlinien/</link>
		<comments>http://www.navision-blog.de/2006/11/07/google-andert-seine-webmaster-richtlinien/#comments</comments>
		<pubDate>Tue, 07 Nov 2006 13:49:52 +0000</pubDate>
		<dc:creator>Sebastian Wolf</dc:creator>
				<category><![CDATA[Diverses]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[google-algorithmus]]></category>
		<category><![CDATA[url-rewriting]]></category>

		<guid isPermaLink="false">http://www.navision-blog.de/2006/11/07/google-andert-seine-webmaster-richtlinien/</guid>
		<description><![CDATA[Mit der &#196;nderung von Googles Suchalgorithmen wurden auch die Richtlinien f&#252;r Webmaster ge&#228;ndert. Fr&#252;her wurden dynmische Seiten (also Seiten mit einem &#8220;?id=&#8221; in der url) nicht mit in den Index aufgenommen. Hier wird jetzt aber beschrieben, dass diese Seiten jetzt auch ohne URL-Rewriting in den Google-Index aufgenommen werden. Au&#223;erdem wird empfohlen die Parameterliste nicht zu [...]]]></description>
			<content:encoded><![CDATA[<p>Mit der &#196;nderung von Googles Suchalgorithmen wurden auch die Richtlinien f&#252;r Webmaster ge&#228;ndert. Fr&#252;her wurden dynmische Seiten (also Seiten mit einem &#8220;?id=&#8221; in der url) nicht mit in den Index aufgenommen. <a target="blank" href="http://googlewebmastercentral.blogspot.com/2006/10/update-to-our-webmaster-guidelines.html">Hier</a> wird jetzt aber beschrieben, dass diese Seiten jetzt auch ohne URL-Rewriting in den Google-Index aufgenommen werden. Au&#223;erdem wird empfohlen die Parameterliste nicht zu lang werden zu lassen, da dies ein Problem f&#252;r Bots darstelle. Es ist nat&#252;rlich kein Fehler wenn man die Adressen trotzdem umschreibt, wenn man auch an andere Suchmaschinen denkt.</p>
<p>&copy;2010 <a href="http://www.navision-blog.de">Rash thoughts about .NET, C#, F# and Dynamics NAV.</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://www.navision-blog.de/2006/11/07/google-andert-seine-webmaster-richtlinien/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Google&#8217;s &quot;Twenty percent&quot; time</title>
		<link>http://www.navision-blog.de/2006/10/28/googles-twenty-percent-time/</link>
		<comments>http://www.navision-blog.de/2006/10/28/googles-twenty-percent-time/#comments</comments>
		<pubDate>Sat, 28 Oct 2006 13:31:06 +0000</pubDate>
		<dc:creator>Steffen Forkmann</dc:creator>
				<category><![CDATA[Diverses]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[google-algorithmus]]></category>
		<category><![CDATA[twenty percent time]]></category>

		<guid isPermaLink="false">http://www.navision-blog.de/2006/10/28/googles-twenty-percent-time/</guid>
		<description><![CDATA[Bei Google ist es Tradition, dass die Entwickler 20% ihrer Arbeitszeit (das ist ein ganzer Tag in der Woche) in Projekte stecken d&#252;rfen, die sie besonders interessieren und die so eigentlich nicht in ihrer Stellenbeschreibung stehen. Einige der neueren Google-Features (wie Gmail, Google News, AdSense und orkut) resultieren angeblich aus einigen dieser &#8220;&#252;berwachten&#8221; Hobbyprojekte. Nach Marissa Mayer, [...]]]></description>
			<content:encoded><![CDATA[<p>Bei Google ist es Tradition, dass die Entwickler 20% ihrer Arbeitszeit (das ist ein ganzer Tag in der Woche) in Projekte stecken d&#252;rfen, die sie besonders interessieren und die so eigentlich nicht in ihrer Stellenbeschreibung stehen. Einige der neueren Google-Features (wie Gmail, Google News, AdSense und orkut) resultieren angeblich aus einigen dieser &#8220;&#252;berwachten&#8221; Hobbyprojekte. Nach <a href="http://en.wikipedia.org/wiki/Marissa_Mayer" title="Marissa Mayer">Marissa Mayer</a>, einer Abteilungsleiterin bei Google, kommen mittlerweile sogar 50% aller neuen Google-Features urspr&#252;nglich aus der &#8220;twenty percent&#8221;-Zeit.</p>
<p>Meiner Meinung nach ist das ein interessanter Ansatz, um den 5.ten Punkt (&#8220;Haben Sie Spa&#223; an Ihrer Arbeit!&#8221;) meiner <a href="http://www.navision-blog.de/10-tipps-fur-erfolgreiche-software-entwicklung/">10 Tipps f&#252;r erfolgreiche Software-Entwicklung</a> zu erf&#252;llen und gleichzeitig der eigenen Firma auch noch Gewinn zu bringen &#8211; wie Google zeigt teilweise sogar extreme Gewinne.</p>
<p>Quellen:</p>
<ol>
<li><a href="http://en.wikipedia.org/wiki/Google" title="http://en.wikipedia.org/wiki/Google">http://en.wikipedia.org/wiki/Google</a></li>
<li><a href="http://www.google.com/support/jobs/bin/static.py?page=about.html" title="http://www.google.com/support/jobs/bin/static.py?page=about.html">http://www.google.com/support/jobs/bin/static.py?page=about.html</a></li>
<li><a href="http://www.google.com/jobs/reasons.html" title="http://www.google.com/jobs/reasons.html">http://www.google.com/jobs/reasons.html</a></li>
</ol>
<p>&copy;2010 <a href="http://www.navision-blog.de">Rash thoughts about .NET, C#, F# and Dynamics NAV.</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://www.navision-blog.de/2006/10/28/googles-twenty-percent-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
