<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-32833286</id><updated>2011-04-22T05:56:41.046+02:00</updated><category term='VBA'/><category term='Hardware'/><category term='Image Recognition'/><category term='SQL'/><category term='Office'/><category term='Web'/><category term='.NET'/><title type='text'>Insane C# Development</title><subtitle type='html'>Log of an insane developer trying to cope with C# and mad space cows.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-32833286.post-8803027268096085399</id><published>2009-05-25T15:21:00.002+02:00</published><updated>2009-05-25T15:22:01.277+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Most valueable C# extension methods</title><content type='html'>&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;br /&gt;&lt;p&gt;A dump of my most valueable extension methods in C#:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsNullOrEmptyTrimmed(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt; == &lt;span class="kwrd"&gt;null&lt;/span&gt; || &lt;span class="kwrd"&gt;value&lt;/span&gt;.Trim().Length == 0);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// if( param.IsEither( “KTB”, “KTC”, “CTC”)) { … &lt;/span&gt;&lt;span class="rem"&gt;}&lt;br /&gt;// &amp;lt;T&amp;gt; instead of just sticking to IComparable[] for type safety!&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsEither&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; T &lt;span class="kwrd"&gt;value&lt;/span&gt;, &lt;span class="kwrd"&gt;params&lt;/span&gt; T[] possibleValues) &lt;span class="kwrd"&gt;where&lt;/span&gt; T : IComparable&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; possibleValues.Length; i++)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt;.CompareTo(possibleValues[i]) == 0)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;&lt;span class="rem"&gt;// if( val.IsNeither( param1, param2, param3)) { … }&lt;br /&gt;// &amp;lt;T&amp;gt; instead of just sticking to IComparable[] for type safety!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsNeither&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; T &lt;span class="kwrd"&gt;value&lt;/span&gt;, &lt;span class="kwrd"&gt;params&lt;/span&gt; T[] possibleValues) &lt;span class="kwrd"&gt;where&lt;/span&gt; T : IComparable&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; !IsEither(&lt;span class="kwrd"&gt;value&lt;/span&gt;, possibleValues);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// dataField = userString.GetAtMost( 30);&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetAtMost(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;, &lt;span class="kwrd"&gt;uint&lt;/span&gt; countCharacters)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;.GetAtMost(0, countCharacters);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// dataField = userString.GetAtMost( 10, 30);&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetAtMost(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;, &lt;span class="kwrd"&gt;uint&lt;/span&gt; startIndex, &lt;span class="kwrd"&gt;uint&lt;/span&gt; countCharacters)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(&lt;span class="kwrd"&gt;value&lt;/span&gt;))&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;.Substring((&lt;span class="kwrd"&gt;int&lt;/span&gt;)startIndex, &lt;br /&gt;            Math.Min((&lt;span class="kwrd"&gt;int&lt;/span&gt;)countCharacters, &lt;span class="kwrd"&gt;value&lt;/span&gt;.Length - (&lt;span class="kwrd"&gt;int&lt;/span&gt;)startIndex));&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// uint val = userString.SafeConvert( 0u);&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; SafeConvert(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;, &lt;span class="kwrd"&gt;uint&lt;/span&gt; defaultValue)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;uint&lt;/span&gt; outVal;&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;uint&lt;/span&gt;.TryParse(&lt;span class="kwrd"&gt;value&lt;/span&gt;, &lt;span class="kwrd"&gt;out&lt;/span&gt; outVal))&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; outVal;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; defaultValue;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// int val = userString.SafeConvert( -1);&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; SafeConvert(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;, &lt;span class="kwrd"&gt;int&lt;/span&gt; defaultValue)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; outVal;&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt;.TryParse(&lt;span class="kwrd"&gt;value&lt;/span&gt;, &lt;span class="kwrd"&gt;out&lt;/span&gt; outVal))&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; outVal;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; defaultValue;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// handy if you have to interface with non-generics code&lt;br /&gt;// (LINQ won’t help you here!)&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; T[] ToArray&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; System.Collections.ICollection collection)&lt;br /&gt;{&lt;br /&gt;    T[] retVal = &lt;span class="kwrd"&gt;new&lt;/span&gt; T[collection.Count];&lt;br /&gt;    collection.CopyTo(retVal, 0);&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; retVal;&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-8803027268096085399?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/8803027268096085399/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=8803027268096085399' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8803027268096085399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8803027268096085399'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2009/05/most-valueable-c-extension-methods.html' title='Most valueable C# extension methods'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-6054582638677580877</id><published>2008-11-14T18:12:00.001+01:00</published><updated>2008-11-14T18:12:53.694+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL: Select default row if no row matches</title><content type='html'>&lt;p&gt;Heute stand ein Bekannter von mir vor einem relativ simplen, aber eigentlich auch gemeinen Problem. Gegeben sei folgende Tabelle:&lt;/p&gt;  &lt;table cellpadding="2" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;FORM&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;QUAL&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;FARBE&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;GROESSEVON&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;GROESSEBIS&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;Preis&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;0&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;36&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;47&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;39.99&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;0&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;48&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;50&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;49.99&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;370&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;48&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;50&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;49.99&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;370&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;36&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;47&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;39.99&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;714&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;48&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;50&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;55&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;714&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;36&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;47&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;45&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;736&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;48&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;50&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;55&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;736&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;36&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;47&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;45&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Es handelt sich um Schuhe. Form &amp;amp; Qual ist sozusagen die Artikelnummer. Wenn f&amp;#252;r einen Artikel in einer bestimmten Farbe kein Preis hinterlegt ist, muss der Preis der &amp;quot;Defaultfarbe&amp;quot; (0) genommen werden. Die Gr&amp;#246;&amp;#223;en spielen dabei keine Rolle, es m&amp;#252;ssen n&amp;#228;mlich alle Rows zur&amp;#252;ckgeliefert werden.&lt;/p&gt;  &lt;p&gt;Also f&amp;#252;r FORM/QUAL 3/334 und Farbe 736 wollen wir:&lt;/p&gt;  &lt;table cellpadding="2" width="2" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;FORM&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;QUAL&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;FARBE&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;GROESSEVON&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;GROESSEBIS&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;Preis&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;736&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;48&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;50&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;55&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;736&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;36&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;47&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;45&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;und f&amp;#252;r Form/Qual 3/334 in Farbe &amp;quot;80&amp;quot;:&lt;/p&gt;  &lt;table cellpadding="2" width="2" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;FORM&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;QUAL&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;FARBE&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;GROESSEVON&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;GROESSEBIS&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;        &lt;th bgcolor="#cccc99"&gt;&lt;b&gt;&lt;font color="#336699" size="2"&gt;Preis&lt;/font&gt;&lt;/b&gt;&lt;/th&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;0&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;36&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;47&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;39.99&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;334&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;0&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;48&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;50&lt;/font&gt;&lt;/td&gt;        &lt;td bgcolor="#f7f7e7"&gt;&lt;font size="2"&gt;49.99&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Soweit klar? Dann schreibt mal ein einzelnes SELECT Statement daf&amp;#252;r! Wenn man auf der Leitung steht kann man relativ lange dar&amp;#252;ber nachdenken ;-)&lt;/p&gt;  &lt;p&gt;Der erste Ansatz (wir vereinfachen Spaltennamen und ignorieren &amp;quot;Form&amp;quot;):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;SELECT TOP 1 * FROM Preise WHERE ARTNR = 334 AND Farbe IN (0, 736) ORDER BY FARBE DESC&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Leider falsch, denn so bekommt man nur 1 Resultset, also nur ein Gr&amp;#246;&amp;#223;enrange. TOP 2, 3, 4 ist nicht m&amp;#246;glich da man nicht wei&amp;#223; wieviele Ranges es gibt, und Filterung auf Applikationsebene ist aus verschiedenen Gr&amp;#252;nden auch nicht m&amp;#246;glich!&lt;/p&gt;  &lt;p&gt;Nach einigem Probieren, und einiger Zeit in der wir uns vorkamen als w&amp;#228;ren wir die d&amp;#252;mmsten Idioten auf der Welt, fanden wir L&amp;#246;sung A:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;SELECT *     &lt;br /&gt;FROM Preise WHERE ArtNr = 334 AND Farbe = 736      &lt;br /&gt;UNION       &lt;br /&gt;SELECT *      &lt;br /&gt;FROM Preise      &lt;br /&gt;WHERE Farbe = 0 AND NOT EXISTS ( SELECT * FROM Preise WHERE ArtNr = 334 and FARBE = 736)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Was uns die Resultate entweder aus dem ersten Teil der UNION oder aus dem zweiten Teil bringt, aber drei SELECTS verursacht. Zugegeben, auf einer guten DB mit richtig gesetzten INDICES (hier auf ArtNr+Farbe) w&amp;#228;re das kein Problem, aber richtig sch&amp;#246;n ist das auch nicht.&lt;/p&gt;  &lt;p&gt;Wir haben es aber zun&amp;#228;chst dabei belassen, bis uns eine zweite L&amp;#246;sung einfiel, die sehr einfach ist, und sowohl ohne tempor&amp;#228;re Variablen als auch ohne tempor&amp;#228;re Tabellen auskommt. Hier also L&amp;#246;sung B:   &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;SELECT * FROM Preise WHERE ARTNR = 334 AND Farbe = ( SELECT MAX(FARBE) FROM Preise WHERE ArtNR = 334 AND FARBE IN (0, 736));&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Eleganter, einfacher zu verstehen, und auch um einiges ressourcenschonender. Auch hier gilt: Sauber gesetzte Indices beschleunigen auch diese Abfrage. :)&lt;/p&gt;  &lt;p&gt;Sicherlich, wenn man die Datenbank mit Stored-Procedures abfr&amp;#228;gt, oder das Statement sonst aufbohren kann, kann man sich vielleicht noch einen Seek sparen, vielleicht noch ein bi&amp;#223;chen Performance rausholen, aber der Aufwand lohnt sich nicht, da das Statement auf diese Weise recht klein und fein ist.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-6054582638677580877?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/6054582638677580877/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=6054582638677580877' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/6054582638677580877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/6054582638677580877'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2008/11/sql-select-default-row-if-no-row.html' title='SQL: Select default row if no row matches'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-7121547758085000949</id><published>2008-06-06T15:48:00.001+02:00</published><updated>2008-06-06T15:48:55.729+02:00</updated><title type='text'>VMWare and 3D accelleration</title><content type='html'>&lt;p&gt;Da ich zur Zeit grad in Urlaub bin wollte ich einem Freund Monkey Island 4 zeigen, was leider daran scheiterte dass dieses Spiel unter WindowsXP-64 nicht mehr läuft.&lt;/p&gt; &lt;p&gt;Also "schnell" eine Windows-XP 32bit Maschine mit VirtualPC aufgesetzt - und wieder gescheitert. MI4 benötigt nämlich tatsächlich DirectX-7 oder OpenGL Support.&lt;/p&gt; &lt;p&gt;Mit WindowsME in einer VMWare (!) und OpenGL (MI4 Startmenü=&amp;gt;Einstellungen=&amp;gt;Performance) geht es, allerdings recht häßlich was der spärlichen OpenGL Unterstützung zuzuschreiben ist.&lt;/p&gt; &lt;p&gt;Nach LANGEM rumprobieren habe ich es nun geschafft DirectX vollständig in VMWare unterstützt zu bekommen.&lt;/p&gt; &lt;p&gt;(1) .vmx Datei in Notepad öffnen und folgende Zeilen hinzufügen:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;mks.enable3d = "TRUE"&lt;br&gt;svga.vramSize = "XXXX"&lt;br&gt;vmmouse.present = "FALSE"&lt;br&gt;monitor.virtual_exec = "hardware"&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;XXXX durch die &lt;strong&gt;exakte&lt;/strong&gt; Größe des Host-Graphikkartenspeichers in Byte ersetzen, sonst geht es nicht!&lt;/p&gt; &lt;p&gt;(2) Edit-&amp;gt;Preferences-&amp;gt;Input-&amp;gt;Disable Grab/Ungrab&lt;/p&gt; &lt;p&gt;Nun XP installieren, ZUERST VMWare Tools installieren, danach XP Aktivieren, dann alle Updates einspielen. Dann microsoft.com/directx ansteuern und DirectX 9.0c + Updates runterladen (jepp, auch alle "SDK Updates").&lt;/p&gt; &lt;p&gt;Nun mit dxdiag überprüfen ob alles geklappt hat (Diagnose=&amp;gt;3D Test).&lt;/p&gt; &lt;p&gt;et voila!&lt;/p&gt; &lt;p&gt;Problem: Im Gegensatz zu VirtualPC unterstützt VMWare Hardware-Virtualisierung nicht wirklich wenn der Host 64bittig und der Gast 32bittig ist! :-(&amp;nbsp; Aber für MonkeyIsland 4 war dies zu verkraften!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-7121547758085000949?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/7121547758085000949/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=7121547758085000949' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/7121547758085000949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/7121547758085000949'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2008/06/vmware-and-3d-accelleration.html' title='VMWare and 3D accelleration'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-702498946786518762</id><published>2008-06-03T12:43:00.001+02:00</published><updated>2008-06-03T12:43:05.075+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Sony Ericsson W890i - Neat and feat</title><content type='html'>&lt;p&gt;Juhu! Mein W890i ist angekommen. Leicht, schlank und natürlich nach 5 Minuten Bedienung abgestürzt.&lt;/p&gt; &lt;p&gt;Zum Glück hat SE bereits ein Online-Update über USB zum DL angeboten, ansonsten wär ich jetzt sauer.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-702498946786518762?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/702498946786518762/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=702498946786518762' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/702498946786518762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/702498946786518762'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2008/06/sony-ericsson-w890i-neat-and-feat.html' title='Sony Ericsson W890i - Neat and feat'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-4045826968651962746</id><published>2008-04-28T20:47:00.001+02:00</published><updated>2008-04-28T20:47:08.919+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><title type='text'>Proposed additions to HTML input type=file button</title><content type='html'>&lt;p&gt;Was mich immer wieder bei HTML Upload Formularen stört ist der Umstand dass die Browser beim öffnen des "Durchsuchen..." Dialogs standardmäßig "*.*" als Dateifilter einstellen. Ist man nun auf einer Bilder-Galerie-Seite, so muss man sich dennoch durch alle möglichen Dateien durchwurschteln, um dann zu erfahren dass "PNG leider nicht unterstützt" wird.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Vorschlag #1:&lt;/strong&gt; Ein Tag "filter". Entweder mit MIME-Types, und das OS mappt diese zu gültigen Dateiendungen, oder mit konkreten Filefiltern, im "Microsoft Format": &lt;/p&gt; &lt;p&gt;&amp;lt;input type="file" fileFilter="Bilder|*.jpg,*.png,*.tiff|Dokumente|*.doc, *.docx"/&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;lt;input type="file" allowedMimeTypes="image/jpg,image/png,image/tiff; application/msword" /&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Vorschlag #2: &lt;/strong&gt;Der ursprüngliche RFC-Draft sah ein "compressable" Attribut vor. Dadurch konnten Browser entscheiden ob das zu übertragene File komprimiert übertragen werden soll oder nicht. Leider wurde das fallengelassen da Zitat: "Viele Modems den Datenstrom ohnehin komprimieren", was für 56k Modems sicher gilt, bei DSL jedoch Unfug ist. Vorschlag: Einführung dieses Flags!&lt;/p&gt; &lt;p&gt;Wer macht mit und schreibt ein FireFox Plugin? :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-4045826968651962746?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/4045826968651962746/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=4045826968651962746' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/4045826968651962746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/4045826968651962746'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2008/04/proposed-additions-to-html-input.html' title='Proposed additions to HTML input type=file button'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-551610565314936682</id><published>2008-02-25T18:55:00.003+01:00</published><updated>2008-03-28T10:52:46.360+01:00</updated><title type='text'>Installing Vista on nForce SATA Raid</title><content type='html'>&lt;p&gt;Mein Gott... Nach ewigem rumprobieren habe ich diesen &lt;a href="http://www.nforcershq.com/forum/1-vt66299.html?start=0&amp;amp;sid=e5fa4e35729fb9f31d2327f04623825e" target="_blank"&gt;englischen Artikel (klicky)&lt;/a&gt; gefunden, mit dem ich in der Lage war mein Bockiges Vista64 auf einem SATA Raid-0 mit dem nForce4 Chipsatz zu installieren. Folgendes hat mir geholfen:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Im BIOS Raid auch für alle IDE Geräte aktivieren. Regel unter VISTA Setup: Entweder alles SATA oder gar nichts SATA. Ich habe also Raid für meine IDE-CDROMS aktiviert, wodurch diese als SATA Geräte "erkannt" wurden.&lt;/li&gt;&lt;li&gt;RAID konfigurieren, Platten die nicht im Raid drin sind separat als JBOD konfigurieren ("Spanning").&lt;/li&gt;&lt;li&gt;WHQL Treiber von nVidia besorgen. Entweder über Link im Artikel, oder von der nVidia Seite indem man die nForce Treiber-EXE von nVidia entpackt und dann die Verzeichnisse IDE\SATARAID und IDE\SATA_IDE auf einen USB Stick kopiert&lt;/li&gt;&lt;li&gt;VISTA Setup starten (ohne USB Stick!!)&lt;/li&gt;&lt;li&gt;Im Festplatten-Dialog zuerst alle Treiber aus IDE\SATARAID und wenn nötig danach alle Treiber aus IDE\SATA_IDE laden. &lt;strong&gt;Wichtig ist hier wirklich alle Treiber mit CTRL+Click zu markieren. &lt;/strong&gt;Wird nur ein einzelner markiert, oder einer vergessen, dann funktioniert es nicht!&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Kleiner Tipp: STRG+F10 öffnet ein Command-Window&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-551610565314936682?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/551610565314936682/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=551610565314936682' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/551610565314936682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/551610565314936682'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2008/02/installing-vista-on-nforce-sata-raid.html' title='Installing Vista on nForce SATA Raid'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-8488159784525203732</id><published>2008-02-05T14:52:00.001+01:00</published><updated>2008-02-05T16:36:23.120+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Image Recognition'/><title type='text'>Decoding punch cards in .NET</title><content type='html'>&lt;p&gt;[UPDATE: Ich habe doch noch weitergearbeitet und die Verzerrungen des Scans entfernt, der Text ist jetzt vollständig abrufbar]&lt;/p&gt; &lt;p&gt;Wie mehrere Leute in ihren Blogs berichten (&lt;a href="http://www.alexander-steireif.com/2008/02/05/merkwrdige-postsendung/" target="_blank"&gt;Blog1&lt;/a&gt;, &lt;a href="http://camouflage.homeip.net/wordpress/2008020445" target="_blank"&gt;Blog2&lt;/a&gt;, &lt;a href="http://thomas.lippert.it/v4/2008/komische-postsendung/" target="_blank"&gt;Blog3&lt;/a&gt;, &lt;a href="http://www.pixelgangster.de/?p=7350" target="_blank"&gt;Blog4&lt;/a&gt;) erhalten viele Leute zur Zeit Lochkarten in Holzboxen zugeschickt. Dazu eine auf Schreibmaschine gedruckte Anweisung die "anderen Leute" zu finden um die Karten zu decodieren.&lt;/p&gt; &lt;p&gt;Ich habe zwar keine dieser Karten erhalten, aber einer der Blogger war so freundlich uns allen einen Scan zur Verfügung zu stellen:&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/Decodingpunchcardsin.NET_D0DC/lochkarte.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="235" alt="lochkarte" src="http://home.arcor.de/qnxlvr/pix_Blog/Decodingpunchcardsin.NET_D0DC/lochkarte_thumb.jpg" width="504" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="left"&gt;Ein kurzes Googeln ergab folgende Seite &lt;a title="http://www.cs.uiowa.edu/~jones/cards/codes.html" href="http://www.cs.uiowa.edu/~jones/cards/codes.html" target="_blank"&gt;Doug Jones's punched card codes&lt;/a&gt;. Da ich natürlich nicht manuell die Karten dekodieren wollte, schrieb ich in .NET ein kleines Programm.&lt;/p&gt; &lt;p align="left"&gt;Schritt 1: PSP7 nehmen, Bild nach Grayscale, Histogramm Anpassungen, und Contour Trace. Danach die nicht benötigten Stellen ausschneiden&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/Decodingpunchcardsin.NET_D0DC/lochkarte.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="257" alt="lochkarte" src="http://home.arcor.de/qnxlvr/pix_Blog/Decodingpunchcardsin.NET_D0DC/lochkarte_thumb.png" width="504" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="left"&gt;Schritt 2: Nach 8bit Indexed Bitmap konvertieren und einige Farben zur Palette hinzufügen&lt;/p&gt; &lt;p align="left"&gt;Schritt 3: Im .NET Programm das Raster ermitteln:&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="552" alt="grid" src="http://home.arcor.de/qnxlvr/pix_Blog/Decodingpunchcardsin.NET_D0DC/grid.png" width="550" border="0"&gt; &lt;/p&gt; &lt;p align="left"&gt;Wie man sieht stimmt das ermittelte Raster ab der 30sten Spalte nicht mehr 100%ig, deswegen decodieren wir im ersten Schritt auch nur die ersten 30 Buchstaben.&lt;/p&gt; &lt;p align="left"&gt;Schritt 4: Programm die Bounding Boxen nach markierungen scannen lassen:&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="552" alt="bounds" src="http://home.arcor.de/qnxlvr/pix_Blog/Decodingpunchcardsin.NET_D0DC/bounds.png" width="550" border="0"&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;em&gt;&lt;font size="1"&gt;Man sieht hier auch schon zwei Scanfehler, in den hinteren Reihen wurden zwei Boxen falsch erkannt. Dies könnte ich noch korrigieren, ist aber nicht notwendig wie man gleich sieht. [UPDATE: Ich habe doch noch weitergearbeitet und die Verzerrungen des Scans entfernt, der Text ist jetzt vollständig abrufbar]&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;p align="left"&gt;Schritt 5: Boxen in ushort Array überführen, die ersten beiden Zeilen sind Bits 12 und 11, die restlichen 0-9&lt;/p&gt; &lt;p align="left"&gt;Schritt 6: Die Textbeschreibung von Doug's Seite textuell parsen und ebenso in ushort Array überführen, dabei eine Character-Map aufbauen&lt;/p&gt; &lt;p align="left"&gt;Schritt 7: Ausgabe: UHGVFWKHQNJLADSWHHKHHETHUILGHQIWGYNAWIMJBAXZCNLKIOPXLEMVGLPBLNRMXJ&lt;/p&gt; &lt;p align="left"&gt;Wie man sieht ergibt dies rein GAR NIX. Ein manueller Decodierversuch der ersten 4 Buchstaben kam leider zu exakt denselben Ergebnis, also hat das Program keinen Fehler gemacht.&lt;/p&gt; &lt;p align="left"&gt;Einer der Blogger berichtete von einer ähnlichen Zeichenkette (er hatte jedoch eine leicht andere Karte).&lt;/p&gt; &lt;p align="left"&gt;Was wohl das Geheimnis hinter diesen Karten ist? Eventuell muss man nur die &lt;strong&gt;gemeinsamen&lt;/strong&gt; Löcher betrachten? Tja... virales Marketing eben.&lt;/p&gt; &lt;p align="left"&gt;Wer will kann mir ja seine Karte scannen und schicken, ich lese sie dann auch im Programm ein!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-8488159784525203732?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/8488159784525203732/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=8488159784525203732' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8488159784525203732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8488159784525203732'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2008/02/decoding-punch-cards-in-net.html' title='Decoding punch cards in .NET'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-5060001683459277984</id><published>2008-01-16T00:38:00.001+01:00</published><updated>2008-01-16T00:38:01.620+01:00</updated><title type='text'>How to remove a DVD-RAM disc from the cartridge</title><content type='html'>&lt;p&gt;Für alle die sich immer schon gefragt haben wie man eine DVD-RAM Disc aus der Cartridge bekommt folgt hier eine kleine Anleitung. Krux sind die beiden Haltepins, die müssen entfernt werden. Die Haltepins können nicht ersetzt werden, sind aber in der Regel auch nicht notwendig. Wenn man einen DVD-Ram Brenner ohne Cartridge-Load-Mechanismus hat sind sie ohnehin sinnlos.&lt;/p&gt; &lt;p&gt;Schritt 1: Auf Seite A drehen und die beiden Haltepins lokalisieren (Seite A ist bei Dual-Layer beschriftet und bei Single-Layer die Seite mit dem Logo)&lt;/p&gt; &lt;p&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00554.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="305" alt="Dsc00554" src="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00554_thumb.jpg" width="404" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Schritt 2: Fest auf den Haltepin drücken der nach vorne raussteht, der Pin muss rausbrechen.&lt;/p&gt; &lt;p&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00555.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="305" alt="Dsc00555" src="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00555_thumb.jpg" width="404" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Schritt 3: Umdrehen und das selbe mit dem anderen Pin erledigen&lt;/p&gt; &lt;p&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00556.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="305" alt="Dsc00556" src="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00556_thumb.jpg" width="404" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Schritt 4: Releasemechanismus betätigen&lt;/p&gt; &lt;p&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00557.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="305" alt="Dsc00557" src="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00557_thumb.jpg" width="404" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Schritt 5: DVD-RAM vorsichtig rausnehmen&lt;/p&gt; &lt;p&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00558.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="305" alt="Dsc00558" src="http://home.arcor.de/qnxlvr/pix_Blog/HowtoremoveaDVDRAMdiscfromthecartridge_2DF/Dsc00558_thumb.jpg" width="404" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Die DVD kann danach wieder in der Cartridge sicher aufbewahrt werden.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-5060001683459277984?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/5060001683459277984/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=5060001683459277984' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/5060001683459277984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/5060001683459277984'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2008/01/how-to-remove-dvd-ram-disc-from.html' title='How to remove a DVD-RAM disc from the cartridge'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-7615719148732064174</id><published>2008-01-14T11:35:00.001+01:00</published><updated>2008-01-14T11:56:18.863+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Prio-Neer</title><content type='html'>&lt;p&gt;Gestern hatte ich ein seltsames Erlebnis. Das nagelneue L632D Multi-Super-Duper-Mega DVD-Brenner Laufwerk in meinem D820 Laptop konnte selbst mit der neuesten Firmware eine Leih-DVD nicht abspielen. Es handelte sich dabei um "Das Bourne Ultimatum", seineszeichen eine Dual-Layer-DVD-Video-Rom. Normalerweise habe ich keine Probleme damit DualLayer DVDs auszuleiehen und am Laptop anzusehen (zusammen mit Asiatischem Essen), aber gestern wäre ich fast wieder zur Videothek getandelt um die DVD zurückzugeben. Nachdem ich dann nach 2 Stunden rumprobieren, neustarten, Firmware suchen, etc. am Ende war, habe ich "scherzhafterweise" die DVD in meinen PC eingelegt. Dort ist ein 10 Jahre altes Pioneer 16x Slot-in DVD Laufwerk verbaut - und siehe da, obwohl das LW sonst keine Dual-Layer-DVDs liest, der Film lies sich tadellos abspielen!!!&lt;/p&gt; &lt;p&gt;Gegen Ende hin musste ich CyberLink DVD allerdings neustarten, konnte den Film danach aber zu Ende sehen. Es hat mich erstaunt, denn zum Produktionsdatum des DVD Laufwerks gab es noch gar keine Dual-Layer DVDs !! Es handelt sich hier übrigens um das Pioneer DVD-A05S, das erste 16x DVD Laufwerk auf dem Markt, damals 1997, und dann auch noch Slot-In! :) Ich habe damals 3000 Schilling dafür bezahlt, was etwa 220 Euro entspricht, und habe den Kauf nie bereut.&lt;/p&gt; &lt;p&gt;Vielleicht wird es aber langsam mal an der Zeit meinen CD-RW Brenner gegen einen Super-Multi Brenner auszutauschen, dann kann ich auch ohne Angst zu haben Dual-Layer-DVDs lesen. Ich denke ich warte aber noch bis die Blu-Ray Brenner billiger werden, der günstigste ist zZ &lt;a href="http://www.kmelektronik.de/main_site/main.php?action=Product_Detail&amp;amp;ArtNr=16824&amp;amp;Shop=0" target="_blank"&gt;für 399 Euro bei K&amp;amp;M zu haben (klicky).&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-7615719148732064174?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/7615719148732064174/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=7615719148732064174' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/7615719148732064174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/7615719148732064174'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2008/01/para-sonic.html' title='Prio-Neer'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-975232189470720321</id><published>2007-11-23T13:56:00.001+01:00</published><updated>2007-11-23T13:56:01.428+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Office'/><title type='text'>Why I hate VBA</title><content type='html'>&lt;p align="center"&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/WhyIhateVBA_C2F7/VBA.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="357" alt="VBA" src="http://home.arcor.de/qnxlvr/pix_Blog/WhyIhateVBA_C2F7/VBA_thumb.png" width="682" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="left"&gt;Wer auch immer Funktionen mit [Arg1], [Arg2], [Arg3], [Arg4], [Arg5], [Arg6], [Arg7], [Arg8], [Arg9], ..., [Arg30] definiert hat gehört wirklich verprügelt. Wenn man diese API nun mit C# aufrufen würde, man würde folgendes schreiben müssen:&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 0pt; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;object&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt; &lt;span style="color: #010001"&gt;oAddress&lt;/span&gt; = &lt;span style="color: #a31515"&gt;"nikole123@bla.com"&lt;/span&gt;;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;object&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #010001; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;oMissing&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt; = &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt;.&lt;span style="color: #010001"&gt;Missing&lt;/span&gt;;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #010001; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;Dialog&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;(&lt;span style="color: #010001"&gt;xyz&lt;/span&gt;).&lt;span style="color: #010001"&gt;Show&lt;/span&gt;(&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oAddress&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;,&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;,&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-fareast-language: de; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #010001"&gt;oMissing&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-975232189470720321?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/975232189470720321/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=975232189470720321' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/975232189470720321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/975232189470720321'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/11/why-i-hate-vba.html' title='Why I hate VBA'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-888583603725115186</id><published>2007-11-21T12:37:00.001+01:00</published><updated>2007-11-21T12:37:43.853+01:00</updated><title type='text'>Phase Oriented Programming</title><content type='html'>&lt;p&gt;Heute bin ich über Jon Skeets Blog gestolpert und auf eine Interessante Idee zu "Phase-Oriented-Programming" gestoßen.  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/jon.skeet/archive/2007/02/28/wacky-ideas-3-object-life-cycle-support.aspx"&gt;http://msmvps.com/blogs/jon.skeet/archive/2007/02/28/wacky-ideas-3-object-life-cycle-support.aspx&lt;/a&gt; &lt;p&gt;Es geht im Prinzip darum die Initialisierung-, Verwendungs- und Dekompositionsphasen eines Objektes festzulegen und Methodenaufrufe nur in denjenigen Phasen zuzulassen für die diese designed wurden. &lt;p&gt;So entfallen dauernde Überprüfungen ob das Objekt bereits initialisiert ist, dies wird automatisch durch ein AOP-Framework durchgeführt. So spart man sich viel Code und viele potentielle Fehler in Situationen in denen ein Objekt beispielsweise nicht benutzt werden darf bevor Connect() aufgerufen wurde, oder nicht &lt;strong&gt;mehr &lt;/strong&gt;nach Dispose() verwendet werden darf. &lt;p&gt;Ihr werde dies mal ein wenig weiterverfolgen und mit PostSharp implementieren. Scheint ein interessanter Aspekt zu sein, könnte Super-Statefull-Klassen in Zukunft einfacher zu entwickeln machen. &lt;p&gt;Hier der interessante Codeausschnitt aus seinem Blog: Es geht darum eine Klasse zu designen in welcher "normale" public Methoden nur in "Phase 2" ohne Exception aufrufbar sind, und in welcher eine bestimmte Methode eine Transition von Phase 1 nach 2 triggert: &lt;blockquote&gt;&lt;pre&gt;[Phased(defaultRequirement=2, initial=1)]&lt;br /&gt;class Sample&lt;br /&gt;{&lt;br /&gt;    IAuthenticator authenticator;&lt;br /&gt;    &lt;br /&gt;    public IAuthenticator Authenticator&lt;br /&gt;    {&lt;br /&gt;        [Phase(1)]&lt;br /&gt;        [Phase(2)]&lt;br /&gt;        get&lt;br /&gt;        {&lt;br /&gt;            return authenticator;&lt;br /&gt;        }&lt;br /&gt;        [Phase(1)]&lt;br /&gt;        set&lt;br /&gt;        {&lt;br /&gt;            authenticator = value;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    [Phase(1)]&lt;br /&gt;    [PhaseTransition(2)]&lt;br /&gt;    public void ValidateAndInitialize()&lt;br /&gt;    {&lt;br /&gt;        if (authenticator==null)&lt;br /&gt;        {&lt;br /&gt;            throw new InvalidConfigurationException("I need an authenticator");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void DoSomething()&lt;br /&gt;    {&lt;br /&gt;        // Use authenticator, assuming it's valid&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void DoSomethingElse()&lt;br /&gt;    {&lt;br /&gt;        // Use authenticator, assuming it's valid&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-888583603725115186?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/888583603725115186/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=888583603725115186' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/888583603725115186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/888583603725115186'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/11/phase-oriented-programming.html' title='Phase Oriented Programming'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-5459252698468965612</id><published>2007-07-17T23:18:00.001+02:00</published><updated>2007-07-17T23:18:28.487+02:00</updated><title type='text'>PDF417 on Lufthansa eTix</title><content type='html'>&lt;p&gt;&amp;nbsp;Heute bin ich von FRA nach KLU geflogen, zu meinen Eltern - ein Mordsspass - und wunderte mich über das in den letzten 4 Monaten installierte PDF417 System auf dem FRAport. Was heißt wundern, ich freute mich dass die häßlichen IATA Tickets aus den 70er Jahren (!!) endlich durch moderne Varianten ersetzt, bzw. aufgepeppt wurden. Diese haben zwar noch den selben Formfaktor, haben aber mittlerweile zusätzlich zum nun nicht mehr notwendigen Magnetstreifen einen PDF417 Barcode aufgedruckt:&lt;/p&gt; &lt;center&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/PDF417onLufthansaeTix_14763/_Dsc00157.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="375" alt="_Dsc00157" src="http://home.arcor.de/qnxlvr/pix_Blog/PDF417onLufthansaeTix_14763/_Dsc00157_thumb.jpg" width="500" border="0"&gt;&lt;/a&gt;  &lt;p&gt;(Nachname und Barcode-EQU zensiert)&lt;/p&gt;&lt;/center&gt; &lt;p&gt;Da ich ja notorisch neugierig bin habe ich sofort meine K800i Cam gezückt, Bild gemacht, meine ATALA Barcode Library hervorgekramt (brauchte ich für meine Geburtstagsparty - Bericht folgt), und den Barcode dechiffriert. Im Prinzip steht da nichts anderes drauf als auf dem Ticket und dem Magnetstreifen auch:&lt;/p&gt; &lt;p&gt;&lt;font face="monospace"&gt;M1NACHNAME/STEFAN MR&amp;nbsp; EX2K3TU FRAKLUOS 0290 198M3C&amp;nbsp; 012&amp;nbsp; 3010&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Das Boarding geht aber um LÄNGEN schneller da der Barcode nur kurz gescannt werden muss und der Bordkartenabschnitt von der Stewardess manuell entfernt werden kann. Wer schon mal geflogen ist weiß dass das alte System der Magnetstreifen fürchterlich ineffizient war und auf einem Flug mit 200 Leuten bei mindestens 5 die Karte hängen blieb. Grauslich!&lt;/p&gt; &lt;p&gt;Für Inhaber eines etix(tm) Tickets mit&amp;nbsp;PDF417 Code gibt es sogar einen eigenen Quick-Boarding Zugang!&lt;/p&gt; &lt;p&gt;Fazit: Darauf hat die Welt gewartet, endlich wird der IATA Müll mal ein bißchen reformiert. Natürlich war klar dass der BARCODE wieder mal mit ASCII und fixed-space Feldern arbeitet, wär ja ansonsten zu modern ;-). Tipp für 2012: Gerade PDF417, aber auch sonst alle 2D Barcodes, unterstützen BINARY, UTF-8 und Field/Group-Seperatoren.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-5459252698468965612?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/5459252698468965612/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=5459252698468965612' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/5459252698468965612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/5459252698468965612'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/07/pdf417-on-lufthansa-etix.html' title='PDF417 on Lufthansa eTix'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-8859769805288428093</id><published>2007-07-02T15:18:00.001+02:00</published><updated>2007-07-02T15:18:42.867+02:00</updated><title type='text'>Java3D</title><content type='html'>&lt;p&gt;Da das K800i einen 3D-Graphikchip von nVidia eingebaut hat (ja, kein Scherz! Java3D Chip!!) hat o2 bei allen neueren K800i Ausgaben "3D Games" beigelegt. Das Ding hat eine bessere Graphikleistung als mein Desktop-Rechner daheim!! Gott was für geile Spiele!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-8859769805288428093?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/8859769805288428093/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=8859769805288428093' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8859769805288428093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8859769805288428093'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/07/java3d.html' title='Java3D'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-8712924660716845041</id><published>2007-06-28T13:36:00.001+02:00</published><updated>2007-06-28T13:36:30.530+02:00</updated><title type='text'>We're In the Money, Come on, my honey!</title><content type='html'>&lt;p align="center"&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/WereIntheMoneyComeonmyhoney_BF1C/DSC00001.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="550" alt="DSC00001" src="http://home.arcor.de/qnxlvr/pix_Blog/WereIntheMoneyComeonmyhoney_BF1C/DSC00001_thumb.jpg" width="412" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="left"&gt;Unser neuer Farb-A0-Plotter/Drucker von HP. Wir haben's ja! ;-) Der stand früher im GF-Raum, aber da einer von der GF "Umstrukturierungsmaßnahmen" zum Opfer gefallen ist steht er jetzt öffentlich verfügbar. Natürlich mit Netzwerkanschluß und Pie-Pa-Poh.&lt;/p&gt; &lt;p align="left"&gt;Amüsant ist natürlich: Egal wie groß die Dinger sind, alle Drucker von HP kann man vorne an der Klappe aufmachen, wodurch der Druckkopf in die Mitte fährt :)&lt;/p&gt; &lt;p align="left"&gt;Wofür wir den brauchen? Mal von Vollfarb-Kapitalismus-Pro-Parolen abgesehen drucken wir damit UML-Diagramme und Prozessmodelle. Kein Wunder dass den im GF-Raum niemand vermisst hat ;-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-8712924660716845041?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/8712924660716845041/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=8712924660716845041' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8712924660716845041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8712924660716845041'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/06/we-in-money-come-on-my-honey.html' title='We&amp;#39;re In the Money, Come on, my honey!'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-4700467855404117998</id><published>2007-06-26T15:42:00.001+02:00</published><updated>2007-06-26T15:42:32.544+02:00</updated><title type='text'>+/-/R/RW/RAM/Foo/Bar</title><content type='html'>&lt;p&gt;Mein Bruder benötigt einen neuen DVD-Brenner. Es hat mich erschrocken wie billig diese Dinger heutzutage sind. Ein Ding das alles mit 32x beschreibt und eine S-ATA Schnittstelle hat kostet in der Tat nur 45-50 Euro! Da kann man fast schon blind das nächst beste kaufen!&lt;/p&gt; &lt;p&gt;Erinnert mich an mein 16-fach Slot-In DVD-Laufwerk von Pioneer. Damals Ende der 90er für &lt;a title="219 Euro"&gt;3000 Schilling&lt;/a&gt; gekauft, und ist immer noch schneller als so manch anderes möchtegern 16-fach heute auf dem Markt. Es dauerte natürlich noch einige Zeit bis ich wirklich DVD Medien dafür hatte, über ein Jahr lang begnügte es sich mit CDs und den mitgelieferten DVD-Spielen "Baldur's Gate" und "X-Files" :) Beide habe ich übrigens aufgrund von Software-Bugs nie durchspielen können! :-( &lt;/p&gt; &lt;p&gt;Und was soll ich sagen, im Gegensatz zu den Prophezeiungen eines Freundes hat es niemals eine CD zerkratzt oder sonst wie gemuckt, es läuft perfekt, auch nach 8 Jahren Betriebsdauer!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-4700467855404117998?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/4700467855404117998/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=4700467855404117998' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/4700467855404117998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/4700467855404117998'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/06/rrwramfoobar.html' title='+/-/R/RW/RAM/Foo/Bar'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-3937533943035901692</id><published>2007-06-16T15:39:00.001+02:00</published><updated>2007-06-16T15:39:48.253+02:00</updated><title type='text'>The moment of truth</title><content type='html'>&lt;p&gt;Bin ich eigentlich der einzige der jedes Mal ein Kreuz macht bevor er massive Änderungen das erste Mal komplett durchkompiliert, mit allen abhängigen Projekten?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-3937533943035901692?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/3937533943035901692/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=3937533943035901692' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/3937533943035901692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/3937533943035901692'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/06/moment-of-truth.html' title='The moment of truth'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-1583569549265238663</id><published>2007-06-16T13:38:00.001+02:00</published><updated>2007-06-16T13:38:54.446+02:00</updated><title type='text'>Netstumbler and Windows VISTA</title><content type='html'>&lt;p&gt;Da ich bei mir zu Hause einige Probleme mit der WLAN Performance hatte wollte ich mal überprüfen auf welchen Kanälen meine Nachbarn so senden, denn leider unterstützt meine Fritz.Box! weder Channel Listing noch Auto-Channeling.&lt;/p&gt; &lt;p&gt;Mein erster Versuch scheiterte kläglich, denn Windows VISTA zeigt standardmäßig nicht die Kanäle der gefundenen Netzwerke an, und &lt;a href="http://www.netstumbler.com/downloads/" target="_blank"&gt;Netstumbler&lt;/a&gt; funktioniert leider nicht unter VISTA (deswegen konnte ich auch nach 2 Jahren immer noch keine Netstumbler Karte für Freiburg anfertigen - für Köln und Mannheim existieren die schon).&lt;/p&gt; &lt;p&gt;Aber, halleluja, wie auf &lt;a href="http://windowsconnected.com/blogs/the_in-between/archive/2006/10/03/Windows-Vista-_2800_security_2900_-tip_3A00_-poor-man_2700_s-NetStumbler.aspx" target="_blank"&gt;Windowsconnected.com (klicky)&lt;/a&gt; gefunden gibt es "Poor man's netstumbler" unter Windows VISTA, und zwar einfach mit meinem Lieblingstool "netsh.exe":&lt;/p&gt; &lt;p&gt;&lt;strong&gt;netsh wlan show networks mode=bssid&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;=&amp;gt; et voilá.&lt;/p&gt; &lt;p&gt;Das Ergebnis ist übrigens dass die meisten meiner Nachbarn auf Kanal 6 rumdümpeln, nur ich bin auf 1, und ein anderer Schlaufuchs auf 13.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-1583569549265238663?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/1583569549265238663/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=1583569549265238663' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/1583569549265238663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/1583569549265238663'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/06/netstumbler-and-windows-vista_16.html' title='Netstumbler and Windows VISTA'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-3594534128734690787</id><published>2007-06-11T16:04:00.001+02:00</published><updated>2007-06-11T16:04:48.815+02:00</updated><title type='text'>BlueFS &amp; Speculator</title><content type='html'>&lt;p&gt;Unter &lt;a title="http://notrump.eecs.umich.edu/group/group.html" href="http://notrump.eecs.umich.edu/group/group.html"&gt;http://notrump.eecs.umich.edu/group/group.html&lt;/a&gt;&amp;nbsp;erfährt man neues zum BlueFS und zu Speculator, einer Erweiterung für Linux die Prozessausführungen dahingehend optimiert indem sie das Ergebnis von Dateisystem-Operationen vorhersagt anstatt auf das echte Resultat zu warten. Im Prinzip funktioniert das so dass ein Copy-On-Write Snapshot des Prozess angefertigt wird, die Operation angetriggert wird, und der Prozess basierend auf den Vorhersagen weiterläuft. Sollte die Vorhersage nicht eintreffen wird der Prozess wieder zurückgespult. &lt;/p&gt; &lt;p&gt;Um keine Inkonsistenzen zu verursachen blockiert man den Prozess dann doch bei Netzwerk I/O oder Bildschirmausgaben, es wäre sonst sehr verwirrend für den Benutzer ;-)&lt;/p&gt; &lt;p&gt;Vorteile bringt diese Technik hauptsächlich bei Netzwerk-Dateisystemen, denn die Latenz über das Netzwerk um viele viele Größenordnungen höher als alles was sich in der CPU abspielt.&lt;/p&gt; &lt;p&gt;Ob man so eine Technologie auch in unseren Produkten einführen könnte? :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-3594534128734690787?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/3594534128734690787/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=3594534128734690787' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/3594534128734690787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/3594534128734690787'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/06/bluefs-speculator.html' title='BlueFS &amp;amp; Speculator'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-3555806532535297682</id><published>2007-05-30T16:50:00.001+02:00</published><updated>2007-05-30T16:50:34.047+02:00</updated><title type='text'>WinXP freezing</title><content type='html'>&lt;p&gt;Wer schon mal das Problem hatte dass er seit Wochen keine Windows XP Updates bekommt, svchost.exe auf 99% hochschnellt und immer noch keinen IE6 vom Update verplättet bekommen hat, der sollte mal auf heise.de &lt;a href="http://www.heise.de/newsticker/meldung/89692" target="_blank"&gt;folgenden Artikel (klicky)&lt;/a&gt; ansehen.&lt;/p&gt; &lt;p&gt;Er beschreibt die Probleme von WindowsXP Update, und erklärt auch wie man sie lösen kann. Ist mir schon auf vier (!!) Windows XP Rechnern passiert. Daheim, in der Firma (der wird eigentlich über SuS gewartet), bei einem Kumpel und bei meinem Bruder.&lt;/p&gt; &lt;p&gt;Im Kurzen:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;"Automatisches Update" und "Intelligenter Hintergrund-Übertragungsdienst" über Systemsteuerung -&amp;gt; Verwaltung -&amp;gt; Dienste&amp;nbsp;beenden, eventuell zuerst problematische svchost.exe über Taskmanager abschießen (wenn sie mal wieder auf 99% rödelt).&lt;/li&gt; &lt;li&gt;C:\Windows\SoftwareDistribution löschen (%WINDIR%\SoftwareDistribution)&lt;/li&gt; &lt;li&gt;&lt;a href="http://download.windowsupdate.com/v7/windowsupdate/redist/standalone/WindowsUpdateAgent30-x86.exe" target="_blank"&gt;Windows Installer 3.0 Update installieren (klicky)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7a81b0cd-a0b9-497e-8a89-404327772e5a&amp;amp;DisplayLang=de" target="_blank"&gt;WindowsXP Update Hotfix installieren (klicky)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Neustarten&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Danach funktioniert wieder alles prima, und man sollte gleich über &lt;a href="http://windowsupdate.microsoft.com" target="_blank"&gt;http://windowsupdate.microsoft.com&lt;/a&gt;&amp;nbsp;ein Update ziehen. Am Besten auch gleich auf "Microsoft Update" wechseln (kleiner Link in der Mitte der oberen Navigationsleiste), dann hält man nämlich nicht nur Windows sondern automatisch auch Office, etc. up-to-date. Bei mir waren es so gleich 16 Updates.&lt;/p&gt; &lt;p&gt;Danach kann man ohne schlechtes Gewissen die Updateeinstellungen in der Systemsteuerung auf "Automatisch" oder zumindest auf "Benachrichtigen" setzen.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-3555806532535297682?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/3555806532535297682/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=3555806532535297682' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/3555806532535297682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/3555806532535297682'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/05/winxp-freezing.html' title='WinXP freezing'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-7139715652243148515</id><published>2007-05-30T01:21:00.001+02:00</published><updated>2007-05-30T01:21:10.899+02:00</updated><title type='text'>PIC alive</title><content type='html'>&lt;p&gt;Ich hab meinen PIC nicht zerschossen, es stellte sich heraus dass sich einfach nur ein Kabel leicht gelockert hatte und ich dadurch falsche Ergebnisse bekam. Wer viel misst misst viel Mist ;-).&lt;/p&gt; &lt;p&gt;CMOS ist trotzdem böse... BÖSE!&lt;/p&gt; &lt;p&gt;Mein PIC Parport Programmer funktioniert tadellos, das Testprogramm wird korrekt gebrannt, zurückgelesen und funktioniert in der Testschaltung. Das Configuration Word bekomme ich zwar programmiert aber nicht mehr korrekt ausgelesen - weiß der Geier warum - interessiert mich jetzt um 01:20 aber auch nicht weiter.&lt;/p&gt; &lt;p&gt;Jetzt kann ich weiter, meinen USB Brenner über den Parport brennen, und dann schlussendlich Projekte Alpha-1 bis Beta-7 durchführen.. MUAHAHAHAHAHA!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-7139715652243148515?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/7139715652243148515/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=7139715652243148515' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/7139715652243148515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/7139715652243148515'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/05/pic-alive.html' title='PIC alive'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-4547803141960969362</id><published>2007-05-29T13:31:00.001+02:00</published><updated>2007-05-29T13:31:04.404+02:00</updated><title type='text'>Shit on MOS</title><content type='html'>&lt;p&gt;Scheiß Unipolartechnik! Ich habe am Wochenende 2 MOSFETs und einen PIC zerschossen weil ich sie berührt habe und einige Zeit offen schwingen lassen habe. Diese Drecksdinger fliegen einem aber auch wegen JEDEM Scheiß um die Ohren. *grml*&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-4547803141960969362?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/4547803141960969362/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=4547803141960969362' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/4547803141960969362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/4547803141960969362'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/05/shit-on-mos.html' title='Shit on MOS'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-4119926979672472055</id><published>2007-05-22T08:54:00.001+02:00</published><updated>2007-05-22T08:54:06.287+02:00</updated><title type='text'>PNP-NPN!</title><content type='html'>&lt;p&gt;Glaubt ihr bipolare Transistoren nehmen eher&amp;nbsp;Neuroleptika oder eher Antidepressiva ein?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-4119926979672472055?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/4119926979672472055/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=4119926979672472055' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/4119926979672472055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/4119926979672472055'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/05/pnp-npn.html' title='PNP-NPN!'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-1010564435145243948</id><published>2007-03-27T11:57:00.000+02:00</published><updated>2007-03-27T13:05:42.658+02:00</updated><title type='text'>New PIC project</title><content type='html'>Paul hat mir einen Floh ins Ohr gesetzt, und nun habe ich mit ihm ein neues privates Hardwareprojekt, welches hoffentlich auch mal in eine kleine Serie gehen wird. Leider habe ich ihm versprochen nicht zuviel zu verraten, aber hier sind die Komponenten um die ich mich kümmern muss:&lt;br /&gt;&lt;br /&gt;x) Berührungssensor (am besten kapazitiv gekoppelt und mit wenig Leistungsaufnahme)&lt;br /&gt;x) Microcontroller&lt;br /&gt;x) 7-Segment LCD Anzeige (2 Ziffern)&lt;br /&gt;x) LCD Controller &lt;br /&gt;X) PCB-Board&lt;br /&gt;&lt;br /&gt;Für den Prototypen habe ich mich umgesehen und spontan den PIC16F913 von Microchip gefunden. Er hat einen integrierten LCD Treiber der auch im Sleep Modus arbeitet (LCD Controller fällt weg) ist dank "nanoWatt Technologie" (bla!) sehr leistungssparsam, hat einen integrierten Oszillator (+/- 1% Deviation bei 8 Mhz), und scheint auch in Serie sehr günstig zu sein. &lt;br /&gt;&lt;br /&gt;Eine Firma die LCDs nach eigenen Matrizzen fertigt habe ich auch gefunden, einige Leute die PCBs nach eigenen Layouts ätzen auch, und die eine oder andere Berührungssensorschaltung bekomme ich auch noch hin. &lt;br /&gt;&lt;br /&gt;Allerdings fehlt dem ganzen noch der letzte Schliff, ich fühle mich so als ob ich nur Kompromisse eingegangen bin. Zum Beispiel hat der PIC zuviel Zeug drauf welches ich nicht brauche! Ich brauche weder CAPCOM, noch 3 Timer, noch PWM, noch USART noch SSI, etc. Was das wieder kostet!!!&lt;br /&gt;&lt;br /&gt;Auch bei den LCDs kommt es mir so vor als würde das billiger gehen!&lt;br /&gt;&lt;br /&gt;Zumindest wenn ich die kleine Serie fertigen lassen will muss ich mich um Kostenreduktion kümmern, also einen µC finden mit weniger nicht benötigten Komponenten darauf, eine Firma die kostengünstig PCBs herstellt (oder selbst ein Labor bauen ;-)), jemanden der das Zusammenlötet, etc.&lt;br /&gt;&lt;br /&gt;Wegen GS, CE und TÜV Labels will ich gar nicht erst nachdenken ... *seufz*. Wenigstens sind wir RoHS "kompatibel" :-)&lt;br /&gt;&lt;br /&gt;Sollte hier jemand einen Tipp für einen µC oder CPLD haben, oder sich mit den anderen Dingen auskennen: Her damit! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-1010564435145243948?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/1010564435145243948/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=1010564435145243948' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/1010564435145243948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/1010564435145243948'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/03/new-pic-project.html' title='New PIC project'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-5596363656346772559</id><published>2007-02-23T20:27:00.001+01:00</published><updated>2007-02-23T20:27:47.395+01:00</updated><title type='text'>Catch 22</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Uh fies, gerade eben bei "Wer wird Millionär" kam folgende Frage: "Wofür steht M &amp;amp; P bei MP3?". Es handelte sich um die 500.000 Euro Frage. Der Kandidat nahm den 50:50 Joker, es blieb übrig: "Music &amp;amp; Portable" und "Moving &amp;amp; Picture". &lt;/p&gt; &lt;p&gt;Eine fiese Falle, denn in der Tat hat das MP hier nichts mit Musik zu tun, MP3 wurde als Audio-Codec für das MPEG1 Videoformat entwickelt, und heißt vollständig&amp;nbsp;"Moving Picture Experts Group v1 - Audio Layer 3".&lt;/p&gt; &lt;p&gt;Der Kandidat hat zum Glück nicht gezockt und ist mit 125.000 heim gegangen.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-5596363656346772559?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/5596363656346772559/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=5596363656346772559' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/5596363656346772559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/5596363656346772559'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2007/02/catch-22.html' title='Catch 22'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-8441920104740007044</id><published>2006-12-05T03:15:00.000+01:00</published><updated>2006-12-05T03:16:05.619+01:00</updated><title type='text'>Unix and Word 2007</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_levAT_LqpmI/RXTViTpJrII/AAAAAAAAAAM/TCL53JFw9-I/s1600-h/UnixAndWord.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; border: 1px solid black; cursor:hand;" src="http://bp0.blogger.com/_levAT_LqpmI/RXTViTpJrII/AAAAAAAAAAM/TCL53JFw9-I/s400/UnixAndWord.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5004859871280606338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ja, wie man an den &lt;b&gt;grünen&lt;/b&gt; Kringeln sehen kann ist es kein Rechtschreib, NEIN!, es ist ein grammatikalischer Fehler UNIX "normal" zu schreiben! Zumindest für Word 2007 :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-8441920104740007044?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/8441920104740007044/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=8441920104740007044' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8441920104740007044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/8441920104740007044'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/12/unix-and-word-2007.html' title='Unix and Word 2007'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_levAT_LqpmI/RXTViTpJrII/AAAAAAAAAAM/TCL53JFw9-I/s72-c/UnixAndWord.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116412381140370229</id><published>2006-11-21T16:43:00.000+01:00</published><updated>2006-11-21T16:43:31.466+01:00</updated><title type='text'>VISTA &amp; Word 2007 Final Impressions</title><content type='html'>&lt;p&gt;Netter Save As... Dialog von VISTA, nettes Interface von Word 2007. (Bilder öffnen sich als größere Versionen bei click!)&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture13.png" target="_blank" atomicselection="true"&gt;&lt;img height="153" src="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture_thumb11.png" width="400" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture23.png" target="_blank" atomicselection="true"&gt;&lt;img height="171" src="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture2_thumb1.png" width="400" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture33.png" target="_blank" atomicselection="true"&gt;&lt;img height="286" src="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture3_thumb1.png" width="400" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture43.png" target="_blank" atomicselection="true"&gt;&lt;img height="286" src="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture4_thumb1.png" width="400" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture53.png" target="_blank" atomicselection="true"&gt;&lt;img height="286" src="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Capture5_thumb1.png" width="400" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Word20078.png" target="_blank" atomicselection="true"&gt;&lt;img height="414" src="http://home.arcor.de/qnxlvr/pix_Blog/VISTAWord2007FinalImpressions_E8F8/Word2007_thumb6.png" width="400" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116412381140370229?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116412381140370229/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116412381140370229' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116412381140370229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116412381140370229'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/11/vista-word-2007-final-impressions.html' title='VISTA &amp;amp; Word 2007 Final Impressions'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116411386741244374</id><published>2006-11-21T13:57:00.000+01:00</published><updated>2006-11-21T13:57:49.413+01:00</updated><title type='text'>Google Translato Phun</title><content type='html'>&lt;p&gt;Mir war in der Mittagspause etwas langweilig, also hatte ich ein bißchen Spass mit &lt;a href="http://translate.google.com/" target="_blank"&gt;Google Translator&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;I am a lesbian!&lt;br&gt;Je suis une lesbienne !&lt;br&gt;Ich bin eine Lesbe!&lt;br&gt;Sono una lesbica!&lt;br&gt;Eu sou um lesbian!&lt;br&gt;¡Soy una lesbiana!&lt;br&gt;انا مثلية!&lt;/p&gt; &lt;p&gt;Das es ein arabisches Wort für Lesbe gibt und Google Translator das kennt ist ja schräg! :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116411386741244374?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116411386741244374/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116411386741244374' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116411386741244374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116411386741244374'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/11/google-translato-phun.html' title='Google Translato Phun'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116402315401594968</id><published>2006-11-20T12:45:00.000+01:00</published><updated>2006-11-20T12:45:54.060+01:00</updated><title type='text'>OpenMP 2.0</title><content type='html'>&lt;p&gt;Ich&amp;nbsp;bin heute durch Zufall über OpenMP 2.0 gestolpert. Ich muss mal an einem Wochenende auf meiner 2 Kern Maschine ein bißchen damit rumspielen! Es erlaubt&amp;nbsp;in C++ direkt mit&amp;nbsp;#pragmas Codestellen in mehreren Threads auszuführen, ohne dabei mit den&amp;nbsp;OS APIs hantieren zu müssen. Der Compiler übernimmt dann das Spawnen der Threads, das erzeugen von TLVs, das syncen von Speicher, das Joinen, etc.&lt;/p&gt; &lt;p&gt;Mehr unter&amp;nbsp;in der &lt;a href="ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vcopenmp/html/54d8d0da-1f47-4312-9f25-5875c7dc08ed.htm" target="_blank"&gt;Microsoft Hilfe&lt;/a&gt; (klicky, installierte MSDN erforderlich), oder in eurem bevorzugtem Bücherladen.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116402315401594968?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116402315401594968/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116402315401594968' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116402315401594968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116402315401594968'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/11/openmp-20.html' title='OpenMP 2.0'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116384763131428887</id><published>2006-11-18T12:00:00.000+01:00</published><updated>2006-11-18T12:00:31.360+01:00</updated><title type='text'>Arrrrrcor!</title><content type='html'>&lt;p&gt;Kleine Information für bestehende ARCOR Kunden: Ab 6.12. gelten neue Tarife, DSL 2000 ist z.B. 10 Euro billiger. Die Umstellung erfolgt nicht automatisch, muss also entweder telefonisch über&amp;nbsp;die ARCOR Hotline 01810/70010 (von 06:00 bis 22:00 Uhr -- 24 Cent/Min. aus dem deutschen Festnetz) oder kostenlos online über &lt;a href="http://www.arcor.de/" target="_blank"&gt;Arcor.de&lt;/a&gt; gemacht werden. Eigentlich eine Frechheit. Ich werde mir aber überlegen auf DSL 6000 umzusteigen, die hat nämlich 640 kbit/sec Uploadbandbreite, und kommt zum selben Preis daher wie meine aktuelle DSL 2000 Flatrate. &lt;strong&gt;Aber Achtung: wer diesen Schritt geht geht eine 24 monatige Verpflichtung ein! &lt;/strong&gt;Wie mir gerade ein Sales-Typ gesagt hat startet dann nämlich der Vertrag neu!&lt;/p&gt; &lt;p&gt;Es ist irgendwie amüsant. 1997&amp;nbsp;war ich On-The-Cutting-Edge mit meinem Kabelmodem von UPC Österreich. Flatrate, 300 kbit/sec Download, always on, kein Einwählen,&amp;nbsp;&lt;strong&gt;feste IP&lt;/strong&gt;&amp;nbsp;(die kenn ich noch immer auswendig; genauso wie die des&amp;nbsp;UPC DNS Servers). Das Kabelmodem war so groß wie ein Siemens Bürotelefon mit riesigen Kühlriffeln drauf :-). Ich habe nur über alle anderen, besonders die Deutschen, gelacht, die immer noch mit Piepsern einwählten und die Telefonleitung blockierten. Das Ganze war sogar bezahlbar, 50 Euro pro Monat wenn man schon einen Kabelanschluss hatte (wer hat den nicht?), und in Klagenfurt, Graz, oder Wien wohnte. &lt;/p&gt; &lt;p&gt;So kam ich auch zu Linux, denn SuSE Linux 6.3 konnte man zum ersten Mal damals richtig komfortabel über das Netzwerk installieren. Und da das Internet für mich nichts weiter als ein großes Netzwerk war (keine Einwahl bei Kabelmodems, die agieren ja nur als Bridge!), startete ich einfach die Installation und legte mich schlafen, oder ging ins Kino, sah ein bißchen fern, ... nach einigen Stunden war es unten. Upload war 128 kbit/sec, also konnte ich über ICQ prima&amp;nbsp;Dateien an zwei meiner 56kbit Kumpel schicken, und trotzdem nett weitersurfen, während deren Leitungen absolut blockiert waren :-)&lt;/p&gt; &lt;p&gt;Und heute? 190 Kabelbetreiber agieren in Österreich, um auch noch das kleinste Kaff (außer Villach, amüsanterweise) mit Kabel und Internet zu versorgen, in Deutschland blüht DSL 16000&amp;nbsp;und sogar&amp;nbsp;DSL2+ mit 24000, Städteweise auch Q-DSL mit 6Mbit Upload, &amp;nbsp;was früher Linux-CDs waren, sind heute Linux-DVDs, und selbst die sind in 35 Minuten runtergeladen und mit 16fach Brennern in 3 Minuten gebrannt. Und selbst Microsoft bringt mit Windows Vista bringt vorinstalliertes IPv6 und QoS Scheduling mit (verhindert das wie in WinXP ein großer Upload die Downloads bremst).&lt;/p&gt; &lt;p&gt;640 kbit/sec Upload, das bedeutet das virtuelle Ende des Upload Bottlenecks! Es wird erstmals für mich keine Relevanz mehr haben ob ich eine Datei selbst runterlade, oder sie mir ein Kumpel sendet, denn umgerechnete 80 kByte/sec sind arg schnell, wenn man keine ISOs austauscht, und selbst ein CD Image wär in 2.2 Stunden übertargen. "Mal schnell das MP3 des coolen DJs den man kennt übermitteln" wird wirklich "mal schnell" sein, und Videokonferenzen sind mit entsprechendem Codec in VGA Auflösung möglich (nicht das ich sowas bräuchte).&lt;/p&gt; &lt;p&gt;Fazit: Der Umstieg auf 6000 bei gleichen Kosten würde sich schon lohnen, die 24 Monate Bindung ist allerdings sogar eher ein Kündigungsgrund, und ein Anreiz mir einen anderen Anbieter (eventuel mit VoIP) zu suchen.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116384763131428887?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116384763131428887/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116384763131428887' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116384763131428887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116384763131428887'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/11/arrrrrcor.html' title='Arrrrrcor!'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116368444688023386</id><published>2006-11-16T14:40:00.000+01:00</published><updated>2006-11-16T14:40:46.890+01:00</updated><title type='text'>The finals are here!</title><content type='html'>&lt;p&gt;Ich halte sie in meinen Händen, die Final von Microsoft Office 2007 Professional, und morgen folgt die Final von Windows Vista!&amp;nbsp;Ahh! Als MSDN Subscription Inhaber hat man ein süßes Leben :-)&lt;/p&gt; &lt;p&gt;Benötigt werden die Versionen dringend. Nicht weil ich finde das Vista installierenswärt wäre, sondern weil wir dringend die Final Version mit unseren Produkten gegentesten müssen. Zwar wird zwar schon seit den ersten Betas getestet, Microsoft hatte aber immer die unangenehme Angewohnheit plötzlich irgendwelche Dinge zu ändern, womit wir dann nachziehen mussten.&lt;/p&gt; &lt;p&gt;Zum Glück kommen Endanwender frühestens 2007 an Vista dran!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116368444688023386?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116368444688023386/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116368444688023386' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116368444688023386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116368444688023386'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/11/finals-are-here.html' title='The finals are here!'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116368325124888468</id><published>2006-11-16T14:20:00.000+01:00</published><updated>2006-11-16T14:20:51.446+01:00</updated><title type='text'>HSUPA</title><content type='html'>&lt;p&gt;Während ich mit meinem K800i immer noch auf lahmes Normalo-UMTS angewiesen bin, ist man in Österreich, wie immer, &lt;a href="http://futurezone.orf.at/hardcore/stories/151118/" target="_blank"&gt;schon wieder einen Schritt vorraus (klicky).&lt;/a&gt; Mit HSUPA und HSDPA hat man mobil eine Downlink Bandbreite von 3.6 Mbit/sec, und eine Uplink Bandbreite von 1.4 MBit/sec. So wäre es natürlich möglich nicht nur das tägliche Bild in meinem &lt;a href="http://qnxlvr-photo.blogspot.com" target="_blank"&gt;PictureBlog (klicky)&lt;/a&gt; mobil zu veröffentlichen, sondern eben auch MobiVideos! Während sich die Blog Now! Funktion meines K800i zwar toll für Industriespionage eignet, würde man mit "VideoBlog Now!" wunderbar zum Mobilen Pornoproduzenten :-) Und das ohne 30 Minuten wegen der geringen Upload Bandbreite warten zu müssen... :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116368325124888468?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116368325124888468/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116368325124888468' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116368325124888468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116368325124888468'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/11/hsupa.html' title='HSUPA'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116358998971038328</id><published>2006-11-14T09:50:00.000+01:00</published><updated>2006-11-15T12:26:37.473+01:00</updated><title type='text'>Ms. Dewey</title><content type='html'>&lt;p&gt;Wer schon immer mal von &lt;a href="http://www.imdb.com/name/nm1232470/" target="_blank"&gt;Janina Gavankar (klicky)&lt;/a&gt;&amp;nbsp;beim Suchen von englischen Begriffen im Internet beleidigt oder schräg angemacht werden wollte, der sollte von Google auf &lt;a href="http://www.msdewey.com" target="_blank"&gt;Ms. Dewey (klicky)&lt;/a&gt;&amp;nbsp;wechseln. Einfach genial! :-)&lt;/p&gt; &lt;p&gt;Ich empfehle folgende Suchworte einzugeben: "Slut", "You are boring", "You are hot", "Britney Spears", "Janina Gavankar", "So you think you can dance?", "Sleepless" :-)&lt;/p&gt; &lt;p&gt;Die Ergebnisse werden übrigens von der Microsofts "Windows Live!" Suche geliefert.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116358998971038328?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116358998971038328/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116358998971038328' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116358998971038328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116358998971038328'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/11/ms-dewey.html' title='Ms. Dewey'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116341474628724056</id><published>2006-11-13T11:45:00.000+01:00</published><updated>2006-11-13T11:45:46.343+01:00</updated><title type='text'>Fire, fox!</title><content type='html'>&lt;p&gt;Wer schon immer von einer Seite massiv Trailer, Clips oder Videos kopieren wollte, diese sich aber hinter irgendwelchen eingebetteten Objekten auf den Seiten versteckt haben, der wird das FireFox Plugin &lt;a href="http://videodownloader.net/" target="_blank"&gt;Videodownloader (klicky)&lt;/a&gt;&amp;nbsp;toll finden. Damit lassen sich die Videos von News Portalen, MySpace, &lt;strong&gt;YouTube&lt;/strong&gt;, Google Video, und vielen anderen Seiten runterladen und offline geniesen!!! &lt;/p&gt; &lt;p&gt;Besonders interessant ist dies nicht für den Video-Klau, sondern weil gerade YouTube oftmals Aussetzer hat. Je nach Seite sind die heruntergeladenen Videos entweder im AVI, MPG, MP4 oder (wie bei YouTube) im FLV Format. Wer keinen &lt;a href="http://applian.com/flvplayer/index_martijn.php"&gt;FLV Player (klicky)&lt;/a&gt; installiert hat, kann sich die Videos aber auf alle Fälle mit dem &lt;a href="http://www.videolan.org/" target="_blank"&gt;VLC Player (klicky)&lt;/a&gt; ansehen. Der spielt so ziemlich alles auf allen Plattformen. Als Alternative kann man sich auch einen FLV Konverter runterladen, z.B. ebenfalls von der FLV Seite, oder über Google zu suchen.&lt;/p&gt; &lt;p&gt;Übrigens ist &lt;a href="http://www.getfirefox.com" target="_blank"&gt;FireFox 2.0&lt;/a&gt; seit einiger Zeit drausen! Jeah. Wer's noch nicht hat soll's sich schnell holen! Ich finde den eingebauten Phishing Filter recht praktisch, dass hierfür aber jede besuchte URL an die Server von Mozilla geschickt und zur&amp;nbsp;Überprüfung&amp;nbsp;verarbeitet wird finde ich genauso problematisch wie die Anti-Phishing Funktion des Internet Explorer 7, dort sind es aber die Server von Microsoft, und denen vertraue ich noch weniger! :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116341474628724056?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116341474628724056/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116341474628724056' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116341474628724056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116341474628724056'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/11/fire-fox.html' title='Fire, fox!'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116160030859250115</id><published>2006-10-23T12:45:00.000+02:00</published><updated>2006-10-23T12:45:08.600+02:00</updated><title type='text'>BluTuuf</title><content type='html'>&lt;p align="left"&gt;Ahh, meine neue Bluetooth Maus, V270 von Logitech! Funk, langlebige Batterien (Wird von mir mit NiMH Akkus bestückt), klein und schmal, und dank Bluetooth auch ohne externen Empfänger am Laptop zu verwenden. Dadurch stylisch und Akkuschonend :-)&lt;/p&gt; &lt;p align="left"&gt;Die 800dpi Auflösung sind natürlich auch ganz nett ;-)&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/BluTuuf_B1B6/DSC000083.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" src="http://home.arcor.de/qnxlvr/pix_Blog/BluTuuf_B1B6/DSC00008_thumb1.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/BluTuuf_B1B6/DSC000091.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" src="http://home.arcor.de/qnxlvr/pix_Blog/BluTuuf_B1B6/DSC00009.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/BluTuuf_B1B6/DSC000101.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" src="http://home.arcor.de/qnxlvr/pix_Blog/BluTuuf_B1B6/DSC00010.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116160030859250115?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116160030859250115/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116160030859250115' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116160030859250115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116160030859250115'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/10/blutuuf.html' title='BluTuuf'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116160013682601261</id><published>2006-10-23T12:42:00.000+02:00</published><updated>2006-10-23T12:42:16.896+02:00</updated><title type='text'>OBEX for C#</title><content type='html'>&lt;p&gt;Nachdem meine Bemühungen OpenOBEX unter VisualStudio.NET 2005 zum compilieren zu bewegen gescheitert sind bin ich nun auf der Suche nach einer OBEX Implementierung für .NET. Auf CodeProject.com habe ich zwar zwei Libraries gefunden, diese sind aber entweder sehr "kindlich" geschrieben, oder funktionieren nicht mit meinem K800i.&lt;/p&gt; &lt;p&gt;Vielleicht stürze ich mich wieder auf OpenOBEX, und versuche das veraltete C (welches wohl nur der GCC frisst) durch modernes C++ zu ersetzen. Nich das der VS.NET Compiler im C++ Emu-modus das C9x von OpenOBEX fressen würde, aber wer Funktionsdeklarationen ohne Typen schreibt und ausliefert gehört meiner Meinung nach standesrechtlich erschossen. *grml*&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116160013682601261?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116160013682601261/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116160013682601261' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116160013682601261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116160013682601261'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/10/obex-for-c.html' title='OBEX for C#'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116135262740516829</id><published>2006-10-20T15:57:00.000+02:00</published><updated>2006-10-20T15:57:07.410+02:00</updated><title type='text'>Project Blackbox</title><content type='html'>&lt;p&gt;Auf &lt;a href="http://www.sun.com/emrkt/blackbox/index.jsp" target="_blank"&gt;http://www.sun.com/emrkt/blackbox/index.jsp (klicky)&lt;/a&gt;&amp;nbsp;präsentiert SUN ihr neues Multi-Petabyte, Datencenter, mit über 1000 Cores in einem FRACHTCONTAINER. Schaut euch einfach mal das Flash an!&lt;/p&gt; &lt;p&gt;Um das klar zu machen: Man kauft einen Frachtcontainer, und hat dann 1000 Cores und 1.5 Petabyte an Datenspeicher. Absolut eingeschlossen in einer (begehbaren) Blackbox, instant-on, fault tolerant, selbstverwaltend. Einfach Wasser(!!), Strom und Ethernet anschließen, und die große schwarze Kiste ist bereit um 2.1 Millionen Pornos&lt;sup&gt;&lt;a href="#20061020_1"&gt;*1&lt;/a&gt;&lt;/sup&gt; in bester DivX Qualität aufzunehmen. Wenn da mal nicht die Hand abfällt...&lt;/p&gt; &lt;p&gt;Meine Lieblingsbilder:&lt;br&gt; &lt;center&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/ProjectBlackbox_DE64/759621.jpg" atomicselection="true"&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/ProjectBlackbox_DE64/763011.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" src="http://home.arcor.de/qnxlvr/pix_Blog/ProjectBlackbox_DE64/76301.jpg" width="240" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" src="http://home.arcor.de/qnxlvr/pix_Blog/ProjectBlackbox_DE64/75962.jpg" width="154" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;/center&gt;Auf &lt;a href=" http://www.sun.com/emrkt/blackbox/scenarios.jsp"&gt;http://www.sun.com/emrkt/blackbox/scenarios.jsp&lt;/a&gt;&amp;nbsp;noch einige "realistische" Einsatzszenarios.&lt;br&gt;&lt;font size="-2"&gt;&amp;nbsp;-- &lt;br&gt;&lt;a name="#20061020_1"&gt;&lt;/a&gt;*1: (1.5*1000000000000000)/(680*1024*1024) = ~2.1 Mil&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116135262740516829?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116135262740516829/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116135262740516829' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116135262740516829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116135262740516829'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/10/project-blackbox_20.html' title='Project Blackbox'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116133812812912009</id><published>2006-10-20T11:55:00.000+02:00</published><updated>2006-10-20T11:55:28.136+02:00</updated><title type='text'>Get a Mac!</title><content type='html'>&lt;p&gt;Unter &lt;a href="http://www.apple.com/getamac/ads/" target="_blank"&gt;http://www.apple.com/getamac/ads/&lt;/a&gt;&amp;nbsp;sind neue "Get a Mac!" Werbespots zu sehen - einfach köstlich. Besonders das iMovie Werbevideo ist klasse :-)&lt;/p&gt; &lt;p&gt;Man muss diese Werbeversprechen aber etwas differenzierter sehen. iMovie ist ein gutes Beispiel dafür wie man Videobearbeitung so vereinfachen kann, dass am Ende zwar auch der Laie eine gewisse Qualität erreicht, diese aber niemals übertreffen kann, da er von der Software künstlich dumm gehalten wird.&lt;/p&gt; &lt;p&gt;iMovie hat nichtmal einen A/B Bearbeitungsmodus, geschweige denn eine gescheide Filmstrip Vorschau um frameweise zu cutten ohne sich wirklich jeden Frame einzeln ansehen zu müssen.&amp;nbsp;Man ist also trotz einer netten Gui in "Play-Stop-Edit" Bearbeitung gefangen! Das ist auch der Grund warum ich unter Windows VirtualDub nur zum Aufzeichnen und Recodieren verwende - dafür dies aber aus Überzeugung!&lt;/p&gt; &lt;p&gt;Und auch wenn D. mich noch so sehr nervt, ich steig niemals auf einen Mac um, höchstens noch auf eine Parallelinstallation von Mac OS 10.5 :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116133812812912009?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116133812812912009/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116133812812912009' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116133812812912009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116133812812912009'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/10/get-mac.html' title='Get a Mac!'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116133778875315427</id><published>2006-10-20T11:49:00.000+02:00</published><updated>2006-10-20T11:49:48.756+02:00</updated><title type='text'>Windows Live Writer (Beta)</title><content type='html'>&lt;p&gt;Ich muss sagen, dieser Windows Live Writer, mit einigen Plugins gespickt, toppt w.bloggar sogar in einiger Hinsicht. Das WYSIWYG editing ist erstaunlich akkurat, und extrem angenehm - und das obwohl ich sonst totaler Gegner von WYSIWYG HTML Bearbeitung bin.&lt;/p&gt; &lt;p&gt;WLW schafft es tatsächlich die Blog-Templates so korrekt auszulesen, dass es während des Tippens die Erscheinungsform des neuen Blogpostings fast 100%ig korrekt wiedergeben kann, ja sogar eine Preview der Blogseite nach dem Publishen gibt. Funktioniert sogar mit blogger.com und meinem Custom-Blog-Layout.&lt;/p&gt; &lt;p&gt;Was ich daran mag ist das die Software ein .NET API hat, um wirklich aus jedem Programm die WLW Schnittstellen anzusprechen, und schnell Posts abzusetzen. Theoretisch könnte man so ein Blog mit seinen Daily builds erzeugen, indem man das einfach in den Post-Build-Step integriert.&lt;/p&gt; &lt;p&gt;Oder man bastelt einen Windows-Syslogd Ersatz der bloggt, anstatt zu loggen :-)&lt;/p&gt; &lt;p&gt;Kombiniert mit meiner ICQ.NET Implementierung könnte man so auch eine ICQ =&amp;gt; Blog Gateway ansinnen. Und über das GRGate könnte man mittels GR Bloggen, oder alle GR Konversationen mitbloggen.&lt;/p&gt; &lt;p&gt;Ach ja, schön ist die neue .NET Welt :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116133778875315427?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116133778875315427/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116133778875315427' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116133778875315427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116133778875315427'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/10/windows-live-writer-beta.html' title='Windows Live Writer (Beta)'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116133732034709486</id><published>2006-10-20T11:42:00.000+02:00</published><updated>2006-10-20T11:42:00.350+02:00</updated><title type='text'>Patchday 2000</title><content type='html'>&lt;p&gt;Heute ist mal wieder Microsoft Patchday, und es sind sage und schreibe 14 (!!) Patches für Windows, Office und SQL Server zur Installation angemeldet.&lt;/p&gt; &lt;p&gt;Und da beschweren sich manche Kunden über die&amp;nbsp;drei bis vier&amp;nbsp;gesetzlich notwendigen Updates im Jahr bei unseren Produkten!!!&lt;/p&gt; &lt;p&gt;By the way, mir ist eine tolle Idee eingefallen wie man werbefinanzierte Versionen unserer Software realisieren könnte:&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://home.arcor.de/qnxlvr/pix_Blog/Patchday2000_A25D/2006102011.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="193" src="http://home.arcor.de/qnxlvr/pix_Blog/Patchday2000_A25D/20061020_thumb6.jpg" width="400" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;(click to enlarge)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116133732034709486?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116133732034709486/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116133732034709486' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116133732034709486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116133732034709486'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/10/patchday-2000.html' title='Patchday 2000'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-116073101886069353</id><published>2006-10-13T11:16:00.000+02:00</published><updated>2006-10-13T11:16:58.873+02:00</updated><title type='text'>On, off, on, off, ON!</title><content type='html'>Puh. Wir hatten hier in letzter Zeit heftige Netzwerkprobleme die mir das Leben zur Hölle machten. Einerseits konnten wir so die Internetfunktionalität unserer Komponenten nicht testen, andererseits flog ich alle 15 Minuten aus ICQ, Yahoo, GTalk, etc. raus. Und das alle meine Downloads unvollständig waren trugt auch nicht gerade zu meiner ernüchterung bei.&lt;br /&gt;&lt;br /&gt;Als ich heute dann die GEHEIM IP zum GEHEIM PROXY der GEHEIMERWEISE funktioniert erhielt war es eine Wohltat zu sehen wie alle 5 Statusanzeigen in Miranda (alle 5 Protokolle) wie ein Weihnachtsbaum aufleuchteten, und es ist wunderbar zu sehen das die Verbindung stabil bleibt :-)&lt;br /&gt;&lt;br /&gt;Mit einer funktionierenden Verbindung bin ich jetzt auch endlich in der Lage VISTA RC2 (Build 5744) zu installieren. Es ist nur absolut nervig jedes Mal alles neu konfigurieren zu müssen. Von BETA 2 auf pre-RC1, dann RC1 und jetzt RC2. Fröhlich Profile rumkopieren hilft da wenig wenn man immer wieder die Software nachinstallieren muss. Und das ist bei VS.NET 2005, TFS Client, Office, und den tausend kleinen Enticklertools echt eine Qual.&lt;br /&gt;&lt;br /&gt;Da wünsch ich mir doch ein gutes Unix her! Oder .NET Anwendungen mit XCOPY Deployment... *sigh*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-116073101886069353?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/116073101886069353/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=116073101886069353' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116073101886069353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/116073101886069353'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/10/on-off-on-off-on.html' title='On, off, on, off, ON!'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-115713235363784126</id><published>2006-09-01T19:18:00.000+02:00</published><updated>2006-09-01T19:39:13.646+02:00</updated><title type='text'>VISTA continues</title><content type='html'>Das Vista wegen jedem Konfigurationsmist gleich in den "secure Desktop" wechselt, alles ausgraut und mich fragt ob ich das wirklich tun will ist ja schön und gut, nervt aber auf meinem Laptop wegen des noch nicht installierten Graphikkarten Treibers. Weil dann für etwa 2 Sekunden der Monitor schwarz wird musste ich UAC abschalten, zumindest teilweise. Tief versteckt in den Sicherheitsrichtlinien sagte ich ihm dass mein Benutzer automatisch elevationalisationalisiert wird, und kein Dialog benötigt wird. Wenn VISTA mal fertig konfiguriert ist, was wegen der Fülle der Optionen noch Tage dauern wird, dann wird das wieder zurückgeswitcht.&lt;br /&gt;Besonder schön finde ich dass man nun konfortabel einstellen kann das VISTA für die Kommunikation mit anderen Rechnern zwangsweise nur IPSec verwendet, bzw. das man dies pro IP einstellen kann. Dadurch ist man sich sicher das eine bestimmte IP auch einem bestimmten Rechner gehört, und niemand anderem - ohne dass man irgendeinen VPN Client installieren muss, der dann JEDWEGE Kommunikation verschlüsselt. Meist reicht es ja aus die DNS, DHCP und ActiveDirectory Server damit abzusichern -- besonders die DNS Server!!!&lt;br /&gt;&lt;br /&gt;Der Laptop ist auch cewl, 2 Akkus, PowerSaver Modus, damit über 7h Laufzeit, gute Musik, free-WLAN, warum jemals wieder heim gehen? Ich lass es mir hier im Les Gare&amp;ccedil;on gut gehen! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-115713235363784126?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/115713235363784126/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=115713235363784126' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115713235363784126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115713235363784126'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/09/vista-continues.html' title='VISTA continues'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-115710378464901045</id><published>2006-09-01T11:37:00.000+02:00</published><updated>2006-09-01T11:43:04.670+02:00</updated><title type='text'>Vista Impressions</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/5386/3474/1600/didnotruncorrectly.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5386/3474/400/didnotruncorrectly.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/5386/3474/1600/snap0006.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5386/3474/400/snap0006.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/5386/3474/1600/snap0003.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5386/3474/400/snap0003.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/5386/3474/1600/snap0004.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5386/3474/400/snap0004.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/5386/3474/1600/snap0005.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5386/3474/400/snap0005.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/5386/3474/1600/snap0007.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5386/3474/400/snap0007.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-115710378464901045?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/115710378464901045/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=115710378464901045' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115710378464901045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115710378464901045'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/09/vista-impressions.html' title='Vista Impressions'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-115705986516557855</id><published>2006-08-31T23:30:00.000+02:00</published><updated>2006-08-31T23:31:05.183+02:00</updated><title type='text'>Brokeback Vista</title><content type='html'>Ich sitze hier im Les Gare&amp;ccedil;ons, mit meinem neuen Pimp-Notebook. Da ich es heute erhalten habe wollte ich natürlich gleich VISTA und Office 2K7 Beta 2 installieren, und bei dem schönen Wetter bietet sich der Außenbereich des Gare&amp;ccedil;ons an. Leider bin ich hier ohne WLAN, denn FR-Wlan kostet Geld, und Bluespot-WLAN ist registrierungspflichtig. Das mit der Registrierung ist schon okay, schließlich wird es nur zu Identifikationszwecken benötigt, aber leider erfordert die Registierung das Flash 8 Plugin (wer hat sich das denn ausgedacht?). Da VISTA aber ohne diesem ausgeliefert wird, bin ich angeschmiert. Das perverse dabei ist das ein Link noch darauf hinweist wo man sich Flash 8 herunterladen kann, wenn man auf diesen Link klickt landet man aber, wenig überrascht, auf der Loginseite von Bluespot -- merkt ihr was?&lt;br /&gt;&lt;br /&gt;Generell bin ich von meinem Laptop begeistert, Ambient Light Sensor, Dualcore, 2 GIG Ram, tolle Tastatur, 16:10 Display mit 1920x1280 native Auflösung, und trotzdem sehr leicht, und von der aktuellen pre-RC1 von VISTA bin ich auch überrascht. Die Systemsteuerung ist direkt explosionsartig gewachsen, mobile Benutzer können jetzt alles konfigurieren was ihr Herz begehrt, und WLAN Benutzer werden sich über die geniale Steuerung freuen.&lt;br /&gt;&lt;br /&gt;Mal sehen was VISTA noch so bringt, mal von der coolen Graphik so abgesehen. Ich werd noch versuchen einige Spiele zu installieren und im Kompatibilitätsmoduls laufen zu lassen, und ich werde mit dem Graphikkartentreiber spielen. Den Treiber den mir die Jungs aus der IT gegeben haben brauche ich vermutlich nicht, da die preRC1 Version den anscheinend mitbringt, aber wer weiß, wer weiß, vielleicht kitzle ich ja noch einige FPS mehr raus?  ;-)&lt;br /&gt;&lt;br /&gt;Ja, Microsoft hat mit VISTA hat bei Apple geklaut, ist in einiger Hinsicht mächtiger, und stinkt in anderer absoult ab! Generell findet mehr Konfigurationsmöglichkeiten, und man hat das Gefühl sich in ein neues OS hineinarbeiten zu müssen - die 5 Jahre zwischen XP und VISTA haben sich also VIELLEICHT doch gelohnt. Besonders da ja jetzt das .NET Framework 3.0 bereits vorinstalliert ist! :-)&lt;br /&gt;&lt;br /&gt;VISTA ist auch das erste OS seit Jahren das ich nicht sofort in einen super-resourcen-schonenden-anti-graphik-effekt Modus zwinge. Teilweise sind die Effekte wirklich nützlich, und besonders das neue Startmenü für Menschen wie mich, die eher mit der Tastatur arbeiten, besonders geeignet.&lt;br /&gt;&lt;br /&gt;Microsoft hat aber nicht nur bei Apple, sondern auch bei den Nazis abgeschaut, denn viele Dialoge sind so aufgebaut das die "wahrscheinlichste" Option RIESENGROSZ ist, und alle anderen total klein dargestellt werden. So wie bei der "Anschluß an Deutschland?" Wahl in den 30ern! ;-P&lt;br /&gt;&lt;br /&gt;Nachtrag: FR-Wlan kann auch kostenlos benützt werden, mit einer superduper Geschwindigkeit von 56kbit/sec. Wow. Gut genug um mir das Flash-Plugin zu krallen und dann auf Bluespot umzusatteln... :-)&lt;br /&gt;&lt;br /&gt;Nachtrag 2: Civilization IV mit Patch 1.61 funktioniert ohne Probleme in höchster Auflösung mit "BlueMarble Realistic Skin" in 1920x1280 (!!!) Auflösung und zwar FLÜSSIG! Ich denke das beantwortet die Frage nach dem Graphikkartentreiber! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-115705986516557855?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/115705986516557855/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=115705986516557855' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115705986516557855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115705986516557855'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/08/brokeback-vista.html' title='Brokeback Vista'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-115680547244920555</id><published>2006-08-29T00:46:00.000+02:00</published><updated>2006-08-29T00:52:27.316+02:00</updated><title type='text'>Screen scraping under .NET</title><content type='html'>&lt;h3&gt;Introduction&lt;/h3&gt;Es gibt Dinge über die beschwert man sich öfter, aber macht nicht wirklich was dagegen, weil der Drang hierzu einfach zu gering ist. Irgendwann kommt dann ein Auslöser der jemanden dazu bewegt etwas zu tun, was schon lange getan hätte werden müssen. Und nicht selten verursacht er dadurch das er sein privates kleines Problem löst einen Quantensprung, und tritt eine Lawine los die tausenden anderen Menschen ebenfalls das Leben erleichtert.&lt;br /&gt;&lt;br /&gt;Genau so einen "Quantenzündungseffekt" erlebte ich neulich als ich mit meinem K800i allerhand Seiten abklapperte. Dessen XHTML Browser kann zwar alles zwischen WML, HTML, JavaScript und SVG Tiny darstellen, versagt aber peinlicherweise bei Framesets. Es bietet nichteinmal eine Liste der inkludierten Frames an, um Lynx-like dieses Manko zu umschiffen. Normalerweise ist das nicht so schlimm, Frames sind in letzter Zeit etwas aus der Mode gekommen, und es gibt ja das berühmte &amp;lt;noframes&amp;gt; HTML Tag, aber ich musste peinlich beim Prahlen zurückstecken als ich meinen Freunden vorführen wollte wie eine geliebte Internet-Messaging-Seite, ihrerseits sehr simpel im Aufbau, von meinem K800i einfach nur mit einem müden Lächeln ignoriert wird. Und warum? Weil man je nachdem wie man sich einloggt entweder an einem window.open() scheitert oder an einem Frameset ohne &amp;lt;noframes&amp;gt; Region.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Screen Scraping - Part Un&lt;/h3&gt;Was also tun um auch mobil nicht nur mit &lt;a href="http://www.jimm.org/" target="_blank"&gt;Jimm&lt;/a&gt; über ICQ chatten zu können, sondern eben genannte Chat/Messaging Seite verwenden zu können? Es nervte mich schon seit längerem das diese Seite kein XML-RPC Automation Interface oder ähnliches anbietet, denn im Büro wollte nich nie ein Chatfenster offen haben, von den Log-Einträgen mal zu schweigen. Der Traum von allen Benutzern dieser Seite wäre ein &lt;a href="http://www.miranda-im.org/" target="_blank"&gt;Miranda &lt;/a&gt; Plugin, kombiniert mit einem URL Webwasher.&lt;br /&gt;&lt;br /&gt;Die Lösung war klar: Ein Screen Scraper musste her der sich als "Proxy" an der Seite anmeldet, die Anfragen durchführt, die HTML Ausgabe parst, und dann in K800i freundichem XHTML wieder ausgibt. Natürlich in zwei Layern, einerseits die Library die sich um das Screen Scraping kümmert, und andererseits ein Frontend (hier das XHTML rendering). Die 100%ige Seperation der beiden Layer ist nötig um den ScreenScraper ohne Probleme auch über XML-RPC oder sonstige Kanäle nach draußen anbieten zu können.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Screen Scraping - Part Deux&lt;/h3&gt;Sieht man sich den HTML Quellcode der Seite an bemerkt man schnell dass das Unterfangen gar nicht so schwer ist wie angenommen. Das Design ändert sich selten, und wenn dann nur in CSS Detailfragen. Es wird ein Mini Interface als Popup Fenster angeboten, das etwas weniger verdächtige URLs benutzt und dessen Layout sich seit Einführung nicht verändert hat. Der Minimalismus tut sein übriges um der perfekte Parsing-Kandidat zu sein.&lt;br /&gt;&lt;br /&gt;Da ich schön öfter ScreenScraping Applikationen geschrieben habe wollte ich nicht schon wieder alles selbst tun, und erinnerte mich an einen Artikel über ein Modul in Perl, welches hier wunderbare Dienste leisten würde. Es bietet eine Shell an in der man in einem Textbrowser surfen kann, Aktionen durchführt, und diese durch das Modul aufzeichnen lässt. Das Modul merkt sich welche Felder gepostet werden, wo die Felder aus dem HTML Code herstammen, und erzeugt viel Gerüst-Code um danach auf dieser Basis ScreenScraping durchführen zu können.&lt;br /&gt;&lt;br /&gt;Leider gibt es auch nach längerer Suche keine vergleichbare Library in .NET (sollte ich mich irren bitte Info an mich), und so musste ich wieder nach Schema F vorgehen. In Firefox browsen, Quellcode der Frames ansehen (da ist Mozilla einfach überlegen, es zeigt z.B. den Quellcode der ganzen Seite, eines Frames, oder auch nur des markierten Textes an - je nach Wunsch, und hat einen eingebauten DOM Inspektor), mit &lt;a href="http://www.ethereal.com/" target="_blank"&gt;Ethereal&lt;/a&gt; sicherheitshalber alle POST Daten abfangen, und dann darauf basierend die Informationen in .NET zusammenkratzen.&lt;br /&gt;&lt;br /&gt;Ich empfehle übrigens jedem System.Web.HttpWebRequest anstatt HttpClient zu verwenden. Letzterer hat zwar einige Convenience Funktionen, merkt sich aber keine Cookies. Die kann man nur retten indem man jedem HttpWebRequest dieselbe Referenz eines CookieContainers übergibt (den Request also am besten in einer Factory Methode erstellen!).&lt;br /&gt;Da es außerdem oftmals mühsam ist die benötigten Informationen mit Regexen aus dem HTML rauszukratzen, HTML aber praktisch von keinem Menschen auf der Welt XML konform geschrieben wird, setzte ich mal wieder die seperate erhältliche und viel geliebte &lt;a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=B90FDDCE-E60D-43F8-A5C4-C3BD760564BC" target="_blank"&gt;SgmlReader Klasse&lt;/a&gt; ein:&lt;br /&gt;&lt;br /&gt;&lt;font color="#008000" size=2&gt;// navigate to comment page and well-form it&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;Sgml&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#008080" size=2&gt;SgmlReader &lt;/font&gt;&lt;font color="#000000" size=2&gt;sgmlReader&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#0000FF" size=2&gt;new &lt;/font&gt;&lt;font color="#000000" size=2&gt;Sgml&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#008080" size=2&gt;SgmlReader&lt;/font&gt;&lt;font size=2&gt;();&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;sgmlReader&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;DocType&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#800000" size=2&gt;"HTML"&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;sgmlReader&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;InputStream&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#0000FF" size=2&gt;new &lt;/font&gt;&lt;font color="#008080" size=2&gt;StreamReader&lt;/font&gt;&lt;font size=2&gt;(&lt;/font&gt;&lt;font color="#000000" size=2&gt;response&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;GetResponseStream&lt;/font&gt;&lt;font size=2&gt;());&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;sgmlReader&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;CaseFolding&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#000000" size=2&gt;Sgml&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#008080" size=2&gt;CaseFolding&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;ToLower&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#008000" size=2&gt;// load html as well formed xml&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;xdoc&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#0000FF" size=2&gt;new &lt;/font&gt;&lt;font color="#008080" size=2&gt;XmlDocument&lt;/font&gt;&lt;font size=2&gt;();&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;xdoc&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;PreserveWhitespace&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#0000FF" size=2&gt;false&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;xdoc&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;Load&lt;/font&gt;&lt;font size=2&gt;(&lt;/font&gt;&lt;font color="#000000" size=2&gt;sgmlReader&lt;/font&gt;&lt;font size=2&gt;);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Der SgmlReader vermag das zu tun was XmlDocument nicht kann: Kaputtes SGML (HTML ist nichts anderes) in XML zu überführen indem fehlende Tag-Enden an der richtigen Stelle eingefügt, Attribute korrekt notiert und Tags case-insensitive gemacht werden. Das Case-Folding ist wirklich wichtig, da man sich ansonsten zu Tode debuggt warum das Tag "a" nicht gefunden wird, wenn der Designer "A" geschrieben hat.&lt;br /&gt;&lt;br /&gt;Da man nach dieser Prozedur ein XmlDocument erhält kann man das HTML Dokument danach mit XPath Queries abkratzen, und erspart sich sehr oft umständliche RegEx Konstrukte. Dies ist auch wichtig da der Web-Designer ja hier und da mal etwas am Layout drehen könnte. Man muss die XPath Query nur so geschickt formulieren dass sie auch dann noch klappt wenn davor noch Elemente eingeschoben werden. Beispiel:&lt;br /&gt;&lt;font color="#000000" size=2&gt;xdoc&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;SelectNodes&lt;/font&gt;&lt;font size=2&gt;(&lt;/font&gt;&lt;font color="#800000" size=2&gt;"//table/tr/td/a"&lt;/font&gt;&lt;font size=2&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;xdoc&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;SelectNodes&lt;/font&gt;&lt;font size=2&gt;(&lt;/font&gt;&lt;font color="#800000" size=2&gt;"//table//tr/td[@class='resHeadline']/a[starts-with(@href, '../auswertung/setcard')]"&lt;/font&gt;&lt;font size=2&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Die doppelten Slashes stellen dies sicher. Leider muss man jedoch immer wieder auf Hacks zurückgreifen und kann sich nur retten indem man nach dem CSS Klassennamen oder einem Style attribut abfragt.&lt;br /&gt;&lt;br /&gt;Nachdem dies geklärt war fand ich mich vor den klassischen Fragen wieder:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Benutzt die Seite Cookies?&lt;/b&gt;&lt;br /&gt;Nicht das mir aufgefallen wäre.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Welche hidden fields werden eingesetzt (input type=hidden)&lt;/b&gt;&lt;br /&gt;Nur beim Login.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Überprüft die Seite den User-Agent?&lt;/b&gt;&lt;br /&gt;Nein, er wird trotzdem auf IE 6 gesetzt&lt;/li&gt;&lt;li&gt;&lt;b&gt;Überprüft die Seite den Referer?&lt;/b&gt;&lt;br /&gt;Nein.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Wann erhält man die Session ID, wie wird sie übermittelt.&lt;/b&gt;&lt;br /&gt;Double-Bogus-Sessions (siehe weiter unten)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Wie sehen die Formulare für die Nachrichten, Suchanfragen und History aus&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Wie ist der Aufbau der HTML Seiten für die eingehenden Nachrichten, etc.&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Login Seite&lt;/h4&gt;Die Login Seite ist immer die größte Hürde. Hier erhält man meist die Session ID in Form eines Cookies, deshalb sollte man schon hier mit dem Cookie aufzeichnen starten:&lt;br /&gt;&lt;font color="#0000FF" size=2&gt;private &lt;/font&gt;&lt;font color="#008080" size=2&gt;CookieContainer &lt;/font&gt;&lt;font color="#000000" size=2&gt;_cookies&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#0000FF" size=2&gt;new &lt;/font&gt;&lt;font color="#008080" size=2&gt;CookieContainer&lt;/font&gt;&lt;font size=2&gt;();&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000FF" size=2&gt;private &lt;/font&gt;&lt;font color="#008080" size=2&gt;HttpWebRequest &lt;/font&gt;&lt;font color="#000000" size=2&gt;CreateWebRequest&lt;/font&gt;&lt;font size=2&gt;(&lt;/font&gt;&lt;font color="#0000FF" size=2&gt;string &lt;/font&gt;&lt;font color="#000000" size=2&gt;href&lt;/font&gt;&lt;font size=2&gt;)&lt;br /&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#008080" size=2&gt;HttpWebRequest &lt;/font&gt;&lt;font color="#000000" size=2&gt;request&lt;/font&gt;&lt;font size=2&gt; = (&lt;/font&gt;&lt;font color="#008080" size=2&gt;HttpWebRequest&lt;/font&gt;&lt;font size=2&gt;)&lt;/font&gt;&lt;font color="#008080" size=2&gt;WebRequest&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;Create&lt;/font&gt;&lt;font size=2&gt;(&lt;/font&gt;&lt;font color="#000000" size=2&gt;href&lt;/font&gt;&lt;font size=2&gt;);&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;request&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;CookieContainer&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#000000" size=2&gt;_cookies&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;request&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;Expect&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#0000FF" size=2&gt;null&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;request&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;KeepAlive&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#0000FF" size=2&gt;false&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;request&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;Accept&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#800000" size=2&gt;"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/msword, application/vnd.ms-excel, */*"&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;request&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;Headers&lt;/font&gt;&lt;font size=2&gt;[&lt;/font&gt;&lt;font color="#800000" size=2&gt;"Accept-Language"&lt;/font&gt;&lt;font size=2&gt;] = &lt;/font&gt;&lt;font color="#800000" size=2&gt;"de"&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;request&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;ContentType&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#800000" size=2&gt;"application/x-www-form-urlencoded"&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000" size=2&gt;// Accept-Encoding: gzip, deflate············&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000" size=2&gt;request&lt;/font&gt;&lt;font size=2&gt;.&lt;/font&gt;&lt;font color="#000000" size=2&gt;UserAgent&lt;/font&gt;&lt;font size=2&gt; = &lt;/font&gt;&lt;font color="#800000" size=2&gt;"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"&lt;/font&gt;&lt;font size=2&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000FF" size=2&gt;return &lt;/font&gt;&lt;font color="#000000" size=2&gt;request&lt;/font&gt;&lt;font size=2&gt;;&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Auch wenn es lächerlich aussieht alle Content-Types auf diese Art anzugeben, wenn man doch weiß das niemals ein Word Dokument gesendet wird, dies ist nunmal das was Marktübliche Browser senden, und wir wollen uns schließlich nicht verdächtig machen.&lt;br /&gt;&lt;br /&gt;In der Tat hatte gibt es eine kleine Überraschung auf dieser Seite mit der Session ID, warum man übrigens auch immer Ethereal mitlaufen lassen sollte. Die Session wird über URLs codiert (das wußte ich schon) und in der Form http://www.chatseite2000.blubb/ASDF22347sdfASF234sfASDFASEf23ASF2JSf/message.php übergeben. Allerdings benutzt die Seite "Double-Bogus-Sessions", erzeugt also bei der Anforderung der Loginseite eine "nutzlose" (bogus) PHPSession, codiert diese in einem hidden field, erzeugt nach erfolgreicher Anmeldung eine weitere, und teilt sie dem Browser über einen Redirect mit. (Der entweder über Framesets oder über window.open realisiert wird, was mein K800i überfordert).&lt;br /&gt;&lt;br /&gt;So ein Szenario habe ich allerdings schon auf einer Free-SMS Seite in den 90ern gesehen (als das in Österreich noch selbstverständlich war), und war deshalb zwar überrascht, aber nicht überfordert.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;HTML Parsing&lt;/h4&gt;Nachdem die Loginhürde überwunden war galt es rauszufinden wie die einzelnen Messages und Online-Benutzer aufgelistet werden. Da ich mich für das Scrapen des mini-Messengers entschloß war die HTML Struktur wie erwartet sehr einfach aufgebaut. Wichtig ist immer das man sich bei solchen sich wiederholenden Einträgen ansieht was die Seite ausgibt wenn nichts, ein Datensatz, und mehrere Datensätze vorhanden sind. Sehr oft zerreißt es einen Parser bei diesem Detail.&lt;br /&gt;In unserem Fall zeigt die Seite alle Absender und die Uhrzeit an (seltsamerweise aber nie das Datum!!), öffnet die Nachricht bei einem Klick darauf und markiert sie dann als gelesen. Die Einträge sehen etwa so aus:&lt;br /&gt;&lt;pre style="font-size: 10px"&gt;&lt;br /&gt;&amp;lt;TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="130"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;TR&amp;gt;&lt;br /&gt;  &amp;lt;TD WIDTH="100%"&amp;gt;&lt;br /&gt;  &lt;br /&gt; &amp;lt;TR&amp;gt;&amp;lt;TD ALIGN="center" HEIGHT="18"&amp;gt;&lt;br /&gt; &amp;lt;a href="../../msg/?id=#######" onClick="return openMessage(#####)"&amp;gt;&lt;br /&gt; &amp;lt;IMG BORDER="0" SRC="######/smile.gif" alt="######"&amp;gt;&lt;br /&gt; BENUTZERNAME  22:35  &amp;lt;/a&amp;gt;&lt;br /&gt; &amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Man beachte das fehlerhafte HTML. Da jemand vielleicht mal korrekterweise ein TABLE Tag einfügen wird, muss der Nodeselect (siehe oben) so gewählt werden, dass es auch dann noch funktioniert. Seltsam ist auch das immer darauf geachtet wird auch ohne JavaScript korrekt zu funktionieren. Leider hilft das bei meinem K800i nicht. Es interpretiert das JavaScript traurigerweise, und würde wirklich versuchen ein neues Fenster zu öffnen, leider ohne Erfolg. Deshalb ja auch dieser ScreenScraper.&lt;br /&gt;Die Informationen sind nun relativ leicht rauszuparsen. Die Message ID, welche man benötigt um den Message-Inhalt zu bekommen, ist im HREF oder im JavaScript vorhanden. Sicherheitshalber sollte man sich für das HREF mit einem geeignet flexiblen Regex entscheiden, vielleicht werden ja noch weitere Query Parameter in Zukunft angehängt? Der Benutzername und das Datum stehen leider nicht seperat in einem Knoten, lassen sich aber entweder dadurch ermitteln indem man das Image (ein smiley) sucht, und den darauffolgenden Knoten nimmt, oder indem man einen Textknoten sucht auf den ein bestimmtes Regex passt. Aus Faulheit habe ich mich für das Erstere entschieden, aber sicher wäre das zweite (falls mal jemand noch etwas zusätzlich einbaut). &lt;br /&gt;&lt;br /&gt;Die Nachricht selbst erhält man indem man die Seite öffnet die im HREF angegeben wurde. Dies macht man aber am Besten erst nachdem der Benutzer den Wunsch geäußert hat diese Nachricht zu lesen, ansonsten markiert man die Nachricht zu früh als gelesen.&lt;br /&gt;&lt;br /&gt;Die restlichen Seiten, Benutzersuche, Online Benutzer, Favoriten, etc., lassen sich auf ähnliche Weise parsen, pro Seite benötigte ich, nachdem das Grundgerüst stand, vielleicht 10 Minuten. Die Übersicht der empfangenen und gesendeten Nachrichten benötigte länger, und ist zwar Threadsafe, aber nicht Race-Condition Safe, wenn noch jemand anders über einen Webbrowser im Profil eingeloggt ist.... Bitte nicht fragen, oder höchstens an einem Stammtisch! :-) Ich sage nur: Es ist DEREN Schuld! :-)&lt;br /&gt;&lt;br /&gt;Achtung: Wie man sieht nehmen es die Betreiber der Seite nicht so genau mit HTML, bzw. sie sind nicht XHTML konform. Obwohl viele Browser einige Schweinereien in HTML zulassen hätte man schon vor XHTML den HTML Standard korrekt einhalten sollen. Grml. Das hat zur Folge das manchmal ein "Was du siehst, ist nicht was SGML sieht" Problem auftritt. Wir erinnern uns: Der SGML Parser transformiert von fehlerhaftem HTML in korrektes XML, entfernt fehlerhafte Attribute (Attribute ohne Wertzuweisung), und fügt schließende Tags ein wo welche nötig sind. Es kann also passieren das ein Textknoten plötzlich unterbrochen wird (die Seite fügt nach einem ü aus irgendeinem Grund immer einen Soft-Break (&amp;lt;WBR&amp;gt;) ein), oder Geistertags entstehen weil die vorhergehenden nicht beendet wurden. Hier hilft der VisualStudio.NET 2005 XML Debug Inspektor, um die InnerXML Knoten zu visualisieren. Man sieht dann zur Laufzeit was der SGML Parser daraus gemacht hat, und kann so live Änderungen einpflegen.&lt;br /&gt;&lt;br /&gt;Übrigens ist bei solchen Seiten ein Arbeiten mit Edit&amp;Continue unabdinglich, da tausende Logins oftmals lästig sind, vielleicht sogar schräg auffallen könnten. Edit&amp;Continue für C# von VS.NET 2005 plus die neuen XML/HTML String Inspektoren leisten hier gute Dienste - mein Scraper ist auch zur Laufzeit programmiert worden :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Details, Details, Details&lt;/h4&gt;Beim ScreenScraping ist immer darauf zu achten dass man sich wie ein Browser verhalten muss, sonst fällt es stark auf, oder hat zumindest blöde Seiteneffekte. Man kann zwar alle Bilder links liegen lassen (kann man in einem normalen Browser schließlich auch abstellen), sollte aber niemals Backgroundscripte und http-equiv Reloads vergessen. In der Tat war ich zunächst so naiv zu glauben es würde reichen alle 60 Sekunden die Liste der neuen Nachrichten abzufragen um die PHP Session am Leben zu erhalten. Da ich fröhlich weiterchatten konnte fiel mir auch nicht sofort auf das mich die Seite nach einigen Minuten für offline erklärt hatte, zumindest zeigte sie dies an, und begann mir, wie eingestellt, die Nachrichten für mich per Mail zukommen zu lassen.&lt;br /&gt;Der Trick war das per JavaScript eine Heartbeatseite in 60 Sekunden Intervallen aufgerufen wird, und zwar die ersten drei mal mit drei verschiedenen Request Parametern. Paralell dazu wird in einem anderen Frame via http-equiv Refresh in 70 Sekunden Intervallen ein anderes Skript aufgerufen, vermutlich aber nur zur Sicherheit sollte das JavaScript aufgrund der Sicherheitseinstellungen versagen.&lt;br /&gt;In die Library wanderte also ein Heartbeat Call, der nun von jeder Client Applikation selbst aufgerufen werden muss. Entweder via Background-Timer, oder (wie folgend) jedes Mal beim Abrufen der ungelesenen Nachrichten.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Screen Scraping - Part Trois&lt;/h3&gt;Library hin oder her, das Ziel war keine Debug-Console-Application, sondern eine ASP.NET Seite welche schlank auf meinem Handy gerendert wird. Der erste Versuch ging schief, die ASP.NET Seite wurde auf dem K800i nicht angezeigt, obwohl sie in einem 08/15 Browser funktionierte. Erster versuch: statische HTML Seite - klappte. Nach längerem Hin und Herprobieren (ist es die Endung .aspx?) entschloß ich mich eine Dummy "Mobile ASP.NET" Seite auszuprobieren (einer der großen Vorteile von ASP.NET gegenüber PHP - einer der etwa 17 von mir gezählten). Die wurde als WML am Telefon korrekt angezeigt, als HTML im Browser. &lt;br /&gt;Da fiel mir plötzlich ein das ASP.NET eine Browser-Erkennung hat. Als ich mir also via Ethereal die Header ansah, bemerkte ich das das K800i ein Mobile Profile mitsendet, und als Accept-Type wml, und xhtml angibt, aber HTML nicht explizit erwähnt (nur über */*). ASP.NET geht also davon aus das es sich um ein Mobiles Gerät handelt, und versucht sein Bestes dem gerecht zu werden, scheitert allerdings an meiner Faulheit. Es rendert daraufhin mein HTML, gibt aber als Antwort "WML" als ContentType an.&lt;br /&gt;Die Lösung war einfach. Response.ContentType = "text/html"; überschrieb einfach den von ASP.NET generierten ContentType - fertig. Die Seite wurde dann wie im Browser als 08/15 HTML gerendert - jippie!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://home.arcor.de/qnxlvr/pix_Blog/scrscr_proof.jpg" width="425" height="480" alt="" border="0" /&gt;&lt;/center&gt;&lt;br /&gt;Irgendwie hat's auf dem Handy mehr Charme, als im Browser :-) &lt;br /&gt;&lt;br /&gt;Als dann alles soweit klappte wurde die Kommunikation via SSL verschlüsselt (&lt;a href="http://www.openssl.org" target="_blank"&gt;OpenSSL&lt;/a&gt; für eigenes Zertifikat, Handy so einstellen das es dies akzeptiert!), und via &lt;a href="http://www.blowery.org/code/HttpCompressionModule.html" target="_blank"&gt;httpCompress&lt;/a&gt; die gzip Kompression aktiviert. Wer ein Server-Betriebssystem hat (Win2K Server, 2K3 Server, etc.) kann die Kompression auch bequem mit einem Klick über IIS Admin aktivieren, alle anderen (wie ich mit meinem WinXP Pro) müssen dies mit besagtem httpCompress Modul erledigen. SSL und gzip sind unabläßlich, es handelt sich ja schließlich um mobile Geräte, und trotz Flatrate und UMTS ist dank fehlendem HSDPA in Deutschland mobile Bandbreite immer noch ein Thema.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Screen Scraping - Fin&lt;/h3&gt;Mittlerweile ist das Gateway bei mir im regelmäßigen Einsatz, es ist ideal um sich Mobil die Zeit zu vertreiben, zb. bei längeren Zugfahrten, oder auch um mal schnell in der Firma zu chatten. Als Erweiterung wäre noch das Umwandeln der HTML Seiten in ASP.Mobile Seiten. Dies würde vielleicht 30 Minuten in Anspruch nehmen, und würde es auch nicht XHTML fähigen Telefonen erlauben die Chatseite via WAP zu bedienen, während "echte" Browser weiterhin HTML geliefert bekommen. ASP.NET sei dank für diese Automagik. Da ich persönlich aber kaum Nutzen daraus ziehe bleibt das mal liegen, auch wenn es noch so einfach zu machen wäre.&lt;br /&gt;Als finale Erweiterung wäre es noch genial die Lib in ein Miranda-Plugin zu flanschen, dies würde in der Firma dann den geringsten Verdacht erregen - denn Miranda usw. ist ja stillschweigend erlaubt.&lt;br /&gt;&lt;br /&gt;Groß publik machen werde ich es auch nicht, geschweige denn weitergeben. Ich weiß das mit dieser Library, wenn ich sie veröffentlichen würde, Chatbots gebastelt und fieser Schabernack getrieben werden WIRD. Es ist traurig, aber die Geschichte lehrt mich das Menschen solche Werke leider oft mißbrauchen. Ich habe bewießen das es geht, und es ist bei mir im Einsatz. Mehr brauch ich für mich als Ingenieur nicht. Außerdem hoffe ich darauf das die Betreiber ENDLICH selbst ein WAP Gateway schreiben, schließlich ist dies ein sehr oft genanntes Feature.&lt;br /&gt;&lt;br /&gt;Und dieser Artikel existiert auch nur um ScreenScraping unter .NET zu demonstrieren, oder zumindest jemanden anzuspornen eine bessere Automatiserungslib zu schreiben ;-)&lt;br /&gt;&lt;br /&gt;Over and out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-115680547244920555?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/115680547244920555/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=115680547244920555' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115680547244920555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115680547244920555'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/08/screen-scraping-under-net.html' title='Screen scraping under .NET'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-115580495729353723</id><published>2006-08-17T10:53:00.000+02:00</published><updated>2006-08-17T16:31:26.323+02:00</updated><title type='text'>Whose got the biggest one?</title><content type='html'>Wer schon immer die digitalen Röntgenbilder die er von sich gemacht hat in 1:1 auf einem Monitor ansehen wollte, die Auflösung von bisherigen Monitoren aber immer zu gering war, den empfehle ich hier &lt;a href="http://archiv.chip.de/artikel/c1_archiv_artikel_17084098.html" target="_blank"&gt;diesen 22,2 Zoll Monitor von Iiyama (klicky)&lt;/a&gt; mit einer Auflösung von 3840x2400 Pixeln (!!). Da dies keine normale Grafikkarte mehr ansteuern kann braucht man natürlich noch die G200 MMS von Matrox, die den Monitor mit 4 GPUs und einer dementsprechenden Anzahl an Monitorkabeln ansteuern muss :-)&lt;br /&gt;&lt;br /&gt;Wo wir schon bei High-End Tech sind, ich bekomme einen Laptop! Wheeee! Leider nur von der Firma, aber ich werde nach Erhalt einfach das Gebäude abfackeln und damit alle Aufzeichnungen vernichten. Dazu muss ich nur noch eine Brandbombe in den Backupschrank schmuggeln, dann wird's perfekt.&lt;br /&gt;&lt;br /&gt;Einige Daten meines neuen Babies:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;DELL Latitude D820, Display: 15.4", 1920x1200 (native!!)&lt;/li&gt;&lt;li&gt;NVIDIA Quadro NVS 120M - 512 MB&lt;/li&gt;&lt;li&gt;Core &lt;strong&gt;Duo&lt;/strong&gt; T2500 2,0 GHz, 2 MB full cache&lt;/li&gt;&lt;li&gt;2 GB RAM&lt;/li&gt;&lt;li&gt;80 GB SATA Hdd, 7200 RPM&lt;/li&gt;&lt;li&gt;8x DVD+/- RW Brenner&lt;/li&gt;&lt;li&gt;WLAN, Bluetooth, Gigabit Ethernet, Smartcard Reader&lt;/li&gt;&lt;li&gt;Fingerprint Sensor&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Wer übrigens die &lt;a href="http://www.heise.de/newsticker/meldung/76822" target="_blank"&gt;Nachrichten mitverfolgt hat (klicky)&lt;/a&gt;, der wird meine Sorge verstehen ob mein Laptop in Zukunft auch spontan in Flammen aufgehen wird. Man darf gespannt sein.&lt;br /&gt;&lt;br /&gt;Da ich ja Inhaber einer gültigen MacOS X.4.6 Lizenz bin, werde ich mir überlegen eine gepatchte Version auf dem Laptop zu installieren. Natürlich nur rein zu wissenschaftlichen Zwecken, und natürlich auch nur überlegensweise. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-115580495729353723?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/115580495729353723/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=115580495729353723' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115580495729353723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115580495729353723'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/08/whose-got-biggest-one.html' title='Whose got the biggest one?'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32833286.post-115642650359327811</id><published>2006-08-16T15:34:00.000+02:00</published><updated>2006-08-24T15:35:03.603+02:00</updated><title type='text'>Project initiated</title><content type='html'>Puh. Geschafft, endlich mal Zeit hier das Intro zu schreiben. Da ich immer wieder Development Themen an anderer Stelle poste, diese aber nicht zum restlichen Inhalt passen, habe ich mich nun entschieden eine klare Trennung zu schaffen und dieses Dev-Blog aufzusetzen. Hauptsächlich um meinen C#, C++, Java, externe Mitarbeiter, IPC, .NET, CodeReview, MS Project und LinuxTerroristen(tm) Wahnsinn loszuwerden :-)&lt;br /&gt;&lt;br /&gt;Die alten Einträge aus den nun mittlerweile 4 Jahren Bloggeschichte (und den 3 verschiedenen Blogsites) werden an ihrer alten Stelle verweilen, die neuen Einträge landen hier und werden in 85% aller Fälle in mein "Lifestyle" Blog relayed. Nur eine grobe Schätzung :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32833286-115642650359327811?l=cs-devel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs-devel.blogspot.com/feeds/115642650359327811/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32833286&amp;postID=115642650359327811' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115642650359327811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32833286/posts/default/115642650359327811'/><link rel='alternate' type='text/html' href='http://cs-devel.blogspot.com/2006/08/project-initiated.html' title='Project initiated'/><author><name>[Stefan]</name><uri>http://www.blogger.com/profile/03300083184838638681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://3.bp.blogspot.com/_levAT_LqpmI/TFarFez9jDI/AAAAAAAAHDI/KMOomx0oDdg/s1600-R/37709_1505756691329_1456621984_1308544_1913369_n.jpg'/></author><thr:total>0</thr:total></entry></feed>
