<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Dan Tohatan - Technology</title>
    <link>http://www.dacris.com/blog/</link>
    <description>In an upside down world where ignorance is strength, freedom is slavery, and war is peace, I give you the world you were never meant to see.</description>
    <language>en-us</language>
    <copyright>Dan Tohatan</copyright>
    <lastBuildDate>Tue, 24 Aug 2010 16:02:23 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8102.813</generator>
    <managingEditor>contact@dacris.com</managingEditor>
    <webMaster>contact@dacris.com</webMaster>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=e3afc2b4-ae50-4d3b-9633-8c2cf63e5aa3</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,e3afc2b4-ae50-4d3b-9633-8c2cf63e5aa3.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,e3afc2b4-ae50-4d3b-9633-8c2cf63e5aa3.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e3afc2b4-ae50-4d3b-9633-8c2cf63e5aa3</wfw:commentRss>
      <title>Performance - Why Not to Upgrade</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,e3afc2b4-ae50-4d3b-9633-8c2cf63e5aa3.aspx</guid>
      <link>http://www.dacris.com/blog/2010/08/24/PerformanceWhyNotToUpgrade.aspx</link>
      <pubDate>Tue, 24 Aug 2010 16:02:23 GMT</pubDate>
      <description>&lt;div&gt;    &lt;p&gt;
        Are you a developer thinking of upgrading your PC? I have a very good reason for 
        you not to upgrade.&lt;/p&gt;
    &lt;p&gt;
        It boils down to one thing: testing.&lt;/p&gt;
    &lt;p&gt;
        If you want to test your application from the user&amp;#39;s perspective, especially 
        from the lowest common denominator user&amp;#39;s perspective, then your PC 
        configuration needs to match those specs. If you have a top-notch PC that only 
        2% of your users have, guess what: 98% of your users will perceive your 
        application as being &amp;quot;slow.&amp;quot;&lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;Rule of Thumb: 90th Percentile&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;
        Since you don&amp;#39;t want to give your users the perception that your apps are slow, 
        always match the 90th percentile of what your users are likely to have. So for 
        example, if 90% or more of your users have at least 256 MB of RAM, then your 
        development machine should have only 256 MB of RAM.&lt;/p&gt;
    &lt;p&gt;
        It turns out that about 90% of my users have dual-core CPUs (not quad core or 
        single core) and at least 2 GB of RAM. They also have a video card that 
        generally gets at least 30 TTP/s in the 3D test. My current dev PC is about 
        twice those specs. It is a dual-core Intel Core 2 Duo E8400 with 4 GB RAM, and 
        it gets around 70 TTP/s in the 3D test. It is a bit more powerful than I want it 
        to be, and I will certainly not be upgrading it for a while.&lt;/p&gt;
    &lt;p&gt;
        When I developed Dacris Benchmarks 5.0, in late 2001, I did so on an Athlon 1 
        GHz machine with only 256 MB of RAM. That became roughly the 90th percentile PC 
        spec in early 2002 (for power users). I also had to target Windows 98 and Windows 2000 at the 
        time. I had to set up virtual machines in VMWare to test those OSes, since I was 
        already running Windows XP.&lt;/p&gt;
    &lt;p&gt;
        I have basically been following the 90% rule for at least 9 years, mostly not by 
        choice - since I did not have the lavish budget to spend on the latest &amp;amp; 
        greatest hardware. However, in the past 2 years I have been consciously 
        following this rule and if anything it has given me a great excuse not to spend 
        too much money on upgrades.&lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;Going Against the Rule: Windows Vista, .NET&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;
        An infamous example of not designing for the 90th percentile can be seen with 
        Windows Vista. In early 2007, the 90th percentile configuration was quite out of 
        reach of the system requirements imposed by Vista. Keep in mind that Windows has 
        to run on all kinds of PCs. Also, Vista is not like Dacris Benchmarks where 
        users are knowledgeable about hardware and usually have more powerful hardware 
        than your average PC user. Bottom line - the jump from XP&amp;#39;s basic 64 MB RAM 
        requirement to Vista&amp;#39;s 1 GB was too much for mainstream PC users. The result - 
        Vista never reached more than 19% market share!&lt;/p&gt;
    &lt;p&gt;
        And if you still doubt that performance matters, take a look at how slow the 
        adoption of .NET has been. .NET is much more resource-hungry than &amp;quot;raw&amp;quot; C++. It 
        requires lots of memory to do JIT compilation. You can hardly run a .NET app 
        without major disk thrashing on less than 512 MB of RAM. That is part of the 
        reason why .NET adoption did not really begin until late 2004. I remember the 
        JVM (Java Virtual Machine) being extremely slow (again due to insufficient RAM) 
        even as late as 2005.&lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;Stick to a $2000 Budget&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;
        My advice to those thinking of building a super-ultimate beast for a 
        development box: don&amp;#39;t. Try to spend less than $2000 on your beast. Otherwise, 
        you&amp;#39;ll be living in an elite fantasy world, isolated from the real world 
        inhabited by most PC users. Note - if your users are super-power users, then the 
        $2000 budget is trumped by the 90th percentile rule. Always try to match the 
        90th percentile.&lt;/p&gt;
    &lt;p&gt;
        If, on the other hand, you want to do R&amp;amp;D, by all means go for the latest &amp;amp; 
        greatest hardware. It is the best way to stay ahead of the game and develop 
        ideas for software that will only be commercially viable in 3+ years. It is a 
        great idea as part of a larger R&amp;amp;D strategy to have at least one &amp;quot;R&amp;amp;D beast&amp;quot; 
        machine. However, you should never do real &amp;quot;production&amp;quot; development on your R&amp;amp;D 
        beast.&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;
        Development (for your products) should always be confined to your 90th 
        percentile configuration, so that performance is accurately modeled for 90% of 
        your users. Otherwise, 
        you may have a surprise when your users start complaining about performance 
        issues.&lt;/p&gt;
    &lt;p&gt;
        It is far too easy to become tempted to write slow code if, on your PC, the slow 
        code isn&amp;#39;t really slow. Even if you plan to test your software on other (slower) 
        PCs, the time you spend during that testing may not be enough to give you a 
        solid feel for how your users will perceive your software. And even if you do 
        spend enough time testing your software on slower PCs, if you catch performance 
        issues at that late a stage in development, the effort necessary to correct them 
        is much greater than if you simply designed your software for that PC 
        configuration in the first place.&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=e3afc2b4-ae50-4d3b-9633-8c2cf63e5aa3"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,e3afc2b4-ae50-4d3b-9633-8c2cf63e5aa3.aspx</comments>
      <category>.NET</category>
      <category>Business</category>
      <category>Commentary</category>
      <category>History</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=da9d0ac3-5de8-4040-8bb8-169a25b199a8</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,da9d0ac3-5de8-4040-8bb8-169a25b199a8.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,da9d0ac3-5de8-4040-8bb8-169a25b199a8.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=da9d0ac3-5de8-4040-8bb8-169a25b199a8</wfw:commentRss>
      <title>Announcing Vmana Beta Program</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,da9d0ac3-5de8-4040-8bb8-169a25b199a8.aspx</guid>
      <link>http://www.dacris.com/blog/2010/08/18/AnnouncingVmanaBetaProgram.aspx</link>
      <pubDate>Wed, 18 Aug 2010 07:43:45 GMT</pubDate>
      <description>&lt;div&gt;&lt;b&gt;Today, the world of search is one step closer to revolution.&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Vmana&lt;/b&gt; - the &lt;a href="http://www.dacris.com/blog/2010/07/16/ProjectVmanaLuceneNETInTheCloud.aspx"&gt;cloud-based commerce search engine&lt;/a&gt; - is entering beta on September 1, 2010. Starting today, we are accepting requests from users who wish to participate in the beta program.&lt;br&gt;&lt;br&gt;The Vmana &lt;a href="http://www.vmana.com/"&gt;beta program&lt;/a&gt; is expected to run for at least two months. We plan to accept up to 200 beta testers; no more.&lt;br&gt;&lt;br&gt;&lt;h4&gt;What is Vmana?&lt;/h4&gt;In a nutshell, Vmana is a hosted e-commerce search engine.&lt;br&gt;&lt;br&gt;It supports filtering, facets, XML feeds, and all of the other bells &amp;amp; whistles of a top notch search engine.&lt;br&gt;&lt;br&gt;It is fully managed, with a 100% up-time SLA (service level agreement).&lt;br&gt;&lt;br&gt;Being a hosted solution, performance never suffers. We always grow capacity behind the scenes to meet demand.&lt;br&gt;&lt;br&gt;&lt;h4&gt;Why is it a revolution?&lt;/h4&gt;Quite simply, this has never been done before. Especially not on the scale that it is about to be done.&lt;br&gt;&lt;br&gt;As the cost of computing continues to decline exponentially (at a rate of ~40% per year), the time for providing high-level software APIs in the cloud is growing ever closer to the present. Vmana is one such example: a high-level search API sitting in the cloud.&lt;br&gt;&lt;br&gt;Up until now, cloud computing has centered around the idea of providing low-level services (such as queues, storage, or CPU) to the user. This is akin to the days of time-sharing computers and dumb terminals.&lt;br&gt;&lt;br&gt;The key to the future of cloud computing lies in the ability to provide high-level services (such as search). This is only recently becoming possible. Just as the evolution from the command line to the GUI required a certain critical performance level to be reached, we are now on the cusp of a major transition in cloud computing, from low-level "dumb" APIs to high-level "smart" APIs.&lt;br&gt;&lt;br&gt;Vmana is a high-level API, which is why it is called "intelligent" search. That's why it's a revolution.&lt;br&gt;&lt;br&gt;&lt;h4&gt;How is it being done?&lt;/h4&gt;Behind the scenes lies &lt;a href="http://lucene.apache.org/"&gt;Lucene&lt;/a&gt; - a powerful open-source search engine. However, Lucene is just a tiny fraction of Vmana.&lt;br&gt;&lt;br&gt;Vmana consists of a crawler, a search engine, and a management &amp;amp; administration dashboard.&lt;br&gt;&lt;br&gt;Key features include: on-demand and automatic crawling, comprehensive logging, XML feed support (for input), XML search results, REST-style API, &lt;a href="http://www.vmana.com/search/search/features.aspx"&gt;and more&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;h4&gt;Why cloud?&lt;/h4&gt;There are several key advantages to cloud computing in general:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Guaranteed performance.&lt;/li&gt;&lt;li&gt;Guaranteed reliability.&lt;/li&gt;&lt;li&gt;You only pay for what you use.&lt;/li&gt;&lt;li&gt;Easy setup and deployment.&lt;/li&gt;&lt;/ul&gt;These are the advantages of Vmana over, say, an enterprise search appliance like the GSA (Google Search Appliance).&lt;br&gt;&lt;br&gt;&lt;h4&gt;Why not a "bare bones" search engine like Lucene?&lt;/h4&gt;There are several disadvantages to doing that:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Steep learning curve.&lt;/li&gt;&lt;li&gt;Integration effort is costly.&lt;/li&gt;&lt;li&gt;Maintenance is difficult (often requires dedicated staff).&lt;/li&gt;&lt;li&gt;No analytics or reporting features.&lt;/li&gt;&lt;/ul&gt;The better question is - why live with those disadvantages?&lt;br&gt;&lt;br&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;A hosted search solution really makes sense when you take into account all of the disadvantages of the alternative solutions.&lt;br&gt;&lt;br&gt;For those willing to try something new, it may be worthwhile to &lt;a href="http://www.vmana.com/"&gt;sign up for the Vmana beta program&lt;/a&gt; or &lt;a href="http://www.vmana.com/"&gt;learn more&lt;/a&gt; about Vmana.&lt;br&gt;&lt;br&gt;Note - we are only accepting 200 beta testers in total.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=da9d0ac3-5de8-4040-8bb8-169a25b199a8"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,da9d0ac3-5de8-4040-8bb8-169a25b199a8.aspx</comments>
      <category>.NET</category>
      <category>Business</category>
      <category>Commentary</category>
      <category>News</category>
      <category>Search</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=fd1a6b5b-a06e-4af7-9ce1-491f85aa3e5d</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,fd1a6b5b-a06e-4af7-9ce1-491f85aa3e5d.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,fd1a6b5b-a06e-4af7-9ce1-491f85aa3e5d.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fd1a6b5b-a06e-4af7-9ce1-491f85aa3e5d</wfw:commentRss>
      <title>Ray Tracing to Replace Rasterization by 2020</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,fd1a6b5b-a06e-4af7-9ce1-491f85aa3e5d.aspx</guid>
      <link>http://www.dacris.com/blog/2010/08/08/RayTracingToReplaceRasterizationBy2020.aspx</link>
      <pubDate>Sun, 08 Aug 2010 06:19:47 GMT</pubDate>
      <description>&lt;div&gt;Say goodbye to polygons and shaders. Say goodbye to OpenGL and DirectX. The future, from this point on, is all ray tracing.&lt;br&gt;&lt;br&gt;One chart - one image - shows it perfectly:&lt;br&gt;&lt;br&gt;&lt;img src="/images/rt.png"&gt;&lt;br&gt;&lt;br&gt;(Source: &lt;a href="http://www.pcper.com/article.php?aid=506&amp;amp;type=expert&amp;amp;pid=3"&gt;PC Perspective&lt;/a&gt;)&lt;br&gt;&lt;br&gt;Ray tracing outperforms rasterization for large numbers of polygons.&lt;br&gt;&lt;br&gt;There are many disadvantages to rasterization:&lt;br&gt;&lt;ul&gt;&lt;li&gt;It is slow (linear in time) for large numbers of polygons.&lt;/li&gt;&lt;li&gt;It does not produce reflections very efficiently or accurately.&lt;/li&gt;&lt;li&gt;It cannot dynamically produce effects like refraction or shadows.&lt;/li&gt;&lt;li&gt;It relies heavily on textures (which use up tons of space!) to produce lighting effects.&lt;/li&gt;&lt;li&gt;Coding rasterized games is difficult because of the requirement to approximate every single lighting effect that would be calculated automatically using ray tracing.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;Of course, rasterization does have one advantage (and one only), and that is that on &lt;i&gt;present-day&lt;/i&gt; PCs, it can render scenes in real time at higher quality than ray tracing.&lt;br&gt;&lt;br&gt;Throughout computing history, it has always been the case that temporary approximation techniques were phased out when enough computing power was available to do away with them. For example, the use of color palettes in the 1990s (i.e. 256 colors) disappeared as soon as there was enough GPU memory to store 32-bit pixel values. When resolutions rose to 800x600 and beyond, bitmap fonts could finally be replaced by True Type fonts. Pixels were gradually phased out of the graphics world in favor of ems or inches.&lt;br&gt;&lt;br&gt;Notice that rasterization has dominated the PC gaming industry since the 1990s. Currently, ray tracing cannot produce scenes at 1080p resolution in real time without sacrificing quality severely. However, this will soon change.&lt;br&gt;&lt;br&gt;The amount of increase in CPU power (from present levels) needed to allow rendering of ray-traced images at 1080p resolution at 24 fps is only about 10X. This will almost certainly happen before 2020.&lt;br&gt;&lt;br&gt;There is a &lt;a href="http://www.youtube.com/watch?v=v3tttKdhCYw"&gt;movie coming out&lt;/a&gt; (in 2012) that is supposedly rendered entirely in real time using ray tracing.&lt;br&gt;&lt;br&gt;To close off, here is a ray traced image using a ray tracer that I built recently:&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dacris.com/images/area2.png"&gt;&lt;br&gt;&lt;br&gt;Notice the accuracy of the reflections and shadows, and how they come at no extra cost - virtually no performance penalty and no extra code required!&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=fd1a6b5b-a06e-4af7-9ce1-491f85aa3e5d"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,fd1a6b5b-a06e-4af7-9ce1-491f85aa3e5d.aspx</comments>
      <category>Business</category>
      <category>Commentary</category>
      <category>History</category>
      <category>News</category>
      <category>Science</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=3d85dc0c-ec03-4456-9359-918137aedf9f</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,3d85dc0c-ec03-4456-9359-918137aedf9f.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,3d85dc0c-ec03-4456-9359-918137aedf9f.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3d85dc0c-ec03-4456-9359-918137aedf9f</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Comment Spam and Other Black-Hat SEO Techniques</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,3d85dc0c-ec03-4456-9359-918137aedf9f.aspx</guid>
      <link>http://www.dacris.com/blog/2010/08/07/CommentSpamAndOtherBlackHatSEOTechniques.aspx</link>
      <pubDate>Sat, 07 Aug 2010 20:49:02 GMT</pubDate>
      <description>&lt;div&gt;Today, comment spam made a triumphant return to my blog, which is a blessing in 
one sense (I am getting more visitors!) and a curse at the same time.&lt;br&gt;&lt;br&gt;I think it's time to discuss some of the "black hat" SEO strategies and how to spot them and prevent them...&lt;br&gt;&lt;br&gt;&lt;b&gt;1. Comment Spam&lt;/b&gt;&lt;br&gt;&lt;br&gt;Comment spam can occur in many forms. In all cases, the comment will contain a hyperlink somewhere. This is because the whole goal of the comment spammer is to generate backlinks from high-PageRank sites to his/her own site.&lt;br&gt;&lt;br&gt;What does comment spam do if left unchecked? Well, other than polluting your content, it also lowers your own page's PageRank! So it is critical that you stop and prevent comment spam.&lt;br&gt;&lt;br&gt;Typically, the comment will contain a hyperlink either in the user's name (most blogs allow users to specify their website URL when they post) or in the comment body itself.&lt;br&gt;&lt;br&gt;To prevent comment links from being crawled, you must mark those links with the attribute rel="nofollow". This will tell the search engine to completely ignore that link. Most blogs do this automatically for username links, but they can still allow links in the comment body (as my current blog engine does).&lt;br&gt;&lt;br&gt;A great way to stop comment spam is to not provide a way to post links in the comment body, or mark all links in the comment as "no-follow".&lt;br&gt;&lt;br&gt;&lt;b&gt;2. Link Exchanges&lt;/b&gt;&lt;br&gt;&lt;br&gt;Link exchanges are black-hat? Well, unless you just came out of a 5-year hibernation, yes. They are. Let me explain.&lt;br&gt;&lt;br&gt;Google will progressively reduce the PageRank of a page depending on how many outbound links it has. Google recommends that a page contain no more than 100 links. Basically, the more links you have on your page, the lower your PageRank will be.&lt;br&gt;&lt;br&gt;You can also get penalized and even excluded from online directories if your site has a page with many unrelated links. Now granted, it's sometimes hard to differentiate between a legitimate directory and a link exchange. But generally, the link exchange consists mainly of external links (links that point to other domain names).&lt;br&gt;&lt;br&gt;So as a rule of thumb, try to limit your links to external domain names and keep them relevant to your website's content.&lt;br&gt;&lt;br&gt;I've managed to find an &lt;a href="http://www.backlinkwatch.com"&gt;excellent backlink checking tool&lt;/a&gt; that shows you every single site that is linking to you and what that site's authority is (based on the number of outbound links on the page that is linking to you). If you see a page with lots of outbound links and low PageRank, it may actually be contributing to &lt;i&gt;lower&lt;/i&gt; your own PageRank!&lt;br&gt;&lt;br&gt;&lt;b&gt;3. Keyword Stuffing&lt;/b&gt;&lt;br&gt;&lt;br&gt;Believe it or not, keyword stuffing is NOT dead! I've seen it live, in action, on a high-profile website just a few months ago whose name I unfortunately no longer recall. There are many high-profile sites that still do it, and to some extent it still works: the high-profile website I found was ranked very near the #1 spot on Google.&lt;br&gt;&lt;br&gt;So what is keyword stuffing? It is the addition of keywords not found on your page into your title/meta tags (description, keywords, and title). For the website that I found doing this, it was stuffing all three. The title of the site was literally thousands of words long!&lt;br&gt;&lt;br&gt;Why should you not do it? I mean, clearly it appears to work. There is a risk that your site will be removed and possibly banned if found out. I cannot quantify the risk, but the potential impact is so severe that I would not be willing to try it.&lt;br&gt;&lt;br&gt;There is a tool that allows you to &lt;a href="http://tool.motoricerca.info/spam-detector/"&gt;check for keyword stuffing&lt;/a&gt;. There are probably more tools available out there with a simple Google search.&lt;br&gt;&lt;br&gt;&lt;b&gt;4. Cloaking&lt;/b&gt;&lt;br&gt;&lt;br&gt;This is an amazingly deceptive technique where the page detects the user agent string of the crawler (in this case Googlebot) and actually offers it different content than what it would offer a real human. Obviously this is a really deceptive technique.&lt;br&gt;&lt;br&gt;There is actually a tool that can be used to &lt;a href="http://www.cloakingdetector.com/"&gt;detect cloaking&lt;/a&gt;. Use it on your own website just to be safe, or to verify that your SEO consultant is not a crook.&lt;br&gt;&lt;br&gt;&lt;b&gt;Summary&lt;br&gt;&lt;br&gt;&lt;/b&gt;So there you have it. These are just some of the many black-hat SEO techniques out there. I've given you the knowledge &amp;amp; the tools now to avoid these techniques and do SEO the proper way!&lt;br&gt;&lt;br&gt;To get some SEO tips, be sure to check out &lt;a href="http://www.dacris.com/blog/CategoryView,category,SEO.aspx"&gt;my other SEO articles&lt;/a&gt;.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=3d85dc0c-ec03-4456-9359-918137aedf9f"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,3d85dc0c-ec03-4456-9359-918137aedf9f.aspx</comments>
      <category>Business</category>
      <category>Commentary</category>
      <category>Internet</category>
      <category>Marketing</category>
      <category>SEO</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=166cff0b-3441-4024-9e8a-c972c3b7a949</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,166cff0b-3441-4024-9e8a-c972c3b7a949.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,166cff0b-3441-4024-9e8a-c972c3b7a949.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=166cff0b-3441-4024-9e8a-c972c3b7a949</wfw:commentRss>
      <title>C# Serializable Dictionary - a Working Example</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,166cff0b-3441-4024-9e8a-c972c3b7a949.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/31/CSerializableDictionaryAWorkingExample.aspx</link>
      <pubDate>Sat, 31 Jul 2010 06:42:38 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Here is the example:&lt;/p&gt;&lt;div style="width: 540px; height: 400px; background-color: rgb(255, 255, 255); overflow: auto;"&gt;&lt;pre&gt;&lt;span style="color: Black; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; System;
&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; System.Runtime.Serialization;
&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; System.Xml;
&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; System.Xml.Serialization;
&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; System.Text;

[Serializable()]
&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;class&lt;/span&gt; SerializableDictionary&amp;lt;TKey, TVal&amp;gt; : Dictionary&amp;lt;TKey, TVal&amp;gt;, IXmlSerializable, ISerializable
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#region&lt;/span&gt; Constants
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;private&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;const&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; DictionaryNodeName &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Dictionary"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;private&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;const&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; ItemNodeName &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Item"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;private&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;const&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; KeyNodeName &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Key"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;private&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;const&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; ValueNodeName &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Value"&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#endregion&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#region&lt;/span&gt; Constructors
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; SerializableDictionary()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; SerializableDictionary(IDictionary&amp;lt;TKey, TVal&amp;gt; dictionary)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;base&lt;/span&gt;(dictionary)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; SerializableDictionary(IEqualityComparer&amp;lt;TKey&amp;gt; comparer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;base&lt;/span&gt;(comparer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; SerializableDictionary(&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt; capacity)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;base&lt;/span&gt;(capacity)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; SerializableDictionary(IDictionary&amp;lt;TKey, TVal&amp;gt; dictionary, IEqualityComparer&amp;lt;TKey&amp;gt; comparer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;base&lt;/span&gt;(dictionary, comparer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; SerializableDictionary(&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt; capacity, IEqualityComparer&amp;lt;TKey&amp;gt; comparer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;base&lt;/span&gt;(capacity, comparer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#endregion&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#region&lt;/span&gt; ISerializable Members

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;protected&lt;/span&gt; SerializableDictionary(SerializationInfo info, StreamingContext context)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt; itemCount &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; info.GetInt32(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"ItemCount"&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;for&lt;/span&gt; (&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt; i &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; 0; i &amp;lt; itemCount; i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KeyValuePair&amp;lt;TKey, TVal&amp;gt; kvp &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; (KeyValuePair&amp;lt;TKey, TVal&amp;gt;)info.GetValue(String.Format(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Item{0}"&lt;/span&gt;, i), &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;typeof&lt;/span&gt;(KeyValuePair&amp;lt;TKey, TVal&amp;gt;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;this&lt;/span&gt;.Add(kvp.Key, kvp.Value);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;void&lt;/span&gt; ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.AddValue(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"ItemCount"&lt;/span&gt;, &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;this&lt;/span&gt;.Count);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt; itemIdx &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;foreach&lt;/span&gt; (KeyValuePair&amp;lt;TKey, TVal&amp;gt; kvp &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;in&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;this&lt;/span&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.AddValue(String.Format(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Item{0}"&lt;/span&gt;, itemIdx), kvp, &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;typeof&lt;/span&gt;(KeyValuePair&amp;lt;TKey, TVal&amp;gt;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;itemIdx++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#endregion&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#region&lt;/span&gt; IXmlSerializable Members

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;void&lt;/span&gt; IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;//writer.WriteStartElement(DictionaryNodeName);&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;foreach&lt;/span&gt; (KeyValuePair&amp;lt;TKey, TVal&amp;gt; kvp &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;in&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;this&lt;/span&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.WriteStartElement(ItemNodeName);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.WriteStartElement(KeyNodeName);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KeySerializer.Serialize(writer, kvp.Key);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.WriteEndElement();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.WriteStartElement(ValueNodeName);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ValueSerializer.Serialize(writer, kvp.Value);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.WriteEndElement();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.WriteEndElement();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;//writer.WriteEndElement();&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;void&lt;/span&gt; IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (reader.IsEmptyElement)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;// Move past container&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (!reader.Read())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;throw&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; XmlException(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Error in Deserialization of Dictionary"&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;//reader.ReadStartElement(DictionaryNodeName);&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;while&lt;/span&gt; (reader.NodeType !&lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; XmlNodeType.EndElement)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reader.ReadStartElement(ItemNodeName);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reader.ReadStartElement(KeyNodeName);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TKey key &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; (TKey)KeySerializer.Deserialize(reader);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reader.ReadEndElement();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reader.ReadStartElement(ValueNodeName);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TVal value &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; (TVal)ValueSerializer.Deserialize(reader);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reader.ReadEndElement();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reader.ReadEndElement();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;this&lt;/span&gt;.Add(key, value);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reader.MoveToContent();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;//reader.ReadEndElement();&lt;/span&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reader.ReadEndElement(); &lt;span style="color: Green; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;// Read End Element to close Read of containing node&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#endregion&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#region&lt;/span&gt; Private Properties
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;protected&lt;/span&gt; XmlSerializer ValueSerializer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (valueSerializer == &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;valueSerializer &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; XmlSerializer(&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;typeof&lt;/span&gt;(TVal));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; valueSerializer;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;private&lt;/span&gt; XmlSerializer KeySerializer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (keySerializer == &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keySerializer &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; XmlSerializer(&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;typeof&lt;/span&gt;(TKey));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; keySerializer;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#endregion&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#region&lt;/span&gt; Private Members
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;private&lt;/span&gt; XmlSerializer keySerializer &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;private&lt;/span&gt; XmlSerializer valueSerializer &lt;span style="color: Red; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"&gt;#endregion&lt;/span&gt;
}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br&gt;The full C# file can be downloaded here: &lt;a href="http://app.dacris.com/temp/SerializableDictionary.cs.txt"&gt;SerializableDictionary.cs&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This class is both XML-serializable and binary-serializable. It is hard to find examples out there that do both.&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=166cff0b-3441-4024-9e8a-c972c3b7a949"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,166cff0b-3441-4024-9e8a-c972c3b7a949.aspx</comments>
      <category>.NET</category>
      <category>News</category>
      <category>Personal</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=d920fcf9-37a6-4029-b3de-bc911a771645</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,d920fcf9-37a6-4029-b3de-bc911a771645.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,d920fcf9-37a6-4029-b3de-bc911a771645.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d920fcf9-37a6-4029-b3de-bc911a771645</wfw:commentRss>
      <title>10000 vs. 7200 RPM - Which is Faster?</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,d920fcf9-37a6-4029-b3de-bc911a771645.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/27/10000Vs7200RPMWhichIsFaster.aspx</link>
      <pubDate>Tue, 27 Jul 2010 07:31:06 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;strong&gt;Does RPM matter?&lt;/strong&gt;&amp;nbsp;It appears not. Read on to view the shocking results!&lt;/p&gt;
&lt;h4&gt;Tools Used&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dacris.com/benchmarks/"&gt;&lt;strong&gt;Dacris Benchmarks, version 8.0&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Windows Calculator&lt;/li&gt;
&lt;li&gt;Notepad&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Hard Drives Compared&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Western Digital VelociRaptor 150 GB - WD1500HLFS -- 10,000 RPM&lt;/li&gt;
&lt;li&gt;Seagate 7200.12 1 TB - ST31000528AS -- 7,200 RPM&lt;/li&gt;
&lt;li&gt;Samsung Spinpoint F3 500 GB - HD501LJ -- 7,200 RPM&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Both of the 7200 RPM drives have 500 GB per platter density. The 10,000 RPM VelociRaptor has a density of 150 GB per platter.
&lt;/p&gt;
&lt;h4&gt;The Showdown&lt;/h4&gt;
&lt;p&gt;
Here are the hard drive benchmark scores for the drives tested:
&lt;/p&gt;
&lt;table cellpadding="8" style="border-collapse: collapse; border: 1px solid rgb(204, 204, 204);"&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Drive&lt;/th&gt;&lt;th&gt;Average Score (MB/s)&lt;/th&gt;&lt;th&gt;# of Samples&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;VelociRaptor&lt;/td&gt;&lt;td&gt;60.6&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Seagate&lt;/td&gt;&lt;td&gt;54.0&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Samsung&lt;/td&gt;&lt;td&gt;44.4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;
&lt;p&gt;
The results have been taken from the available reference results in Dacris Benchmarks.&lt;/p&gt;
&lt;p&gt;
It appears that the 10,000 RPM VelociRaptor is slightly faster (12%) than its closest 7200 RPM rival.
&lt;/p&gt;&lt;p&gt;
The 12% difference does not seem like much, given how much more the VelociRaptor costs, and how much less capacity you get.
&lt;/p&gt;
&lt;h4&gt;Conclusions&lt;/h4&gt;
&lt;p&gt;
As of this moment, you would do better to save your money and go for a large 7200 RPM drive rather than a small 10,000 RPM drive. It seems that the lower areal density of the VelociRaptor counteracts any positive effect that might be had from the higher spindle speed.
&lt;/p&gt;&lt;p&gt;
While the VelociRaptor is the fastest conventional drive out there (SSDs are faster), it is not significantly faster than a traditional 7200 RPM drive.&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=d920fcf9-37a6-4029-b3de-bc911a771645"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,d920fcf9-37a6-4029-b3de-bc911a771645.aspx</comments>
      <category>Business</category>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=31f8ed63-ad03-463a-9660-b31fc23a55d2</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,31f8ed63-ad03-463a-9660-b31fc23a55d2.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,31f8ed63-ad03-463a-9660-b31fc23a55d2.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=31f8ed63-ad03-463a-9660-b31fc23a55d2</wfw:commentRss>
      <title>CPU Upgrade - The YouTube Test</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,31f8ed63-ad03-463a-9660-b31fc23a55d2.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/27/CPUUpgradeTheYouTubeTest.aspx</link>
      <pubDate>Tue, 27 Jul 2010 06:59:48 GMT</pubDate>
      <description>&lt;div&gt;&lt;h4&gt;The Role of the CPU&lt;/h4&gt;
&lt;p&gt;
In general, the CPU is very rarely a bottleneck when it comes to performance. It is rarely noticed by most users because the tasks they perform are rarely CPU-intensive. Games generally use the video card heavily but not the CPU. The operations in which the CPU matters most are: video playback, file conversion, and compression. Most of us rarely care about file conversion or compression performance, since we generally tend to do those things in the background. However, there is one operation where the CPU is becoming more and more essential: &lt;strong&gt;video playback&lt;/strong&gt;.
&lt;/p&gt;
&lt;h4&gt;The YouTube Test&lt;/h4&gt;
&lt;p&gt;
Since smooth video playback is very important to most users, there is actually a very easy test that can be done to see if the CPU is fast enough for typical usage. It's called the YouTube test.
&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Go to YouTube and search for some videos.&lt;/li&gt;
&lt;li&gt;Pick one that is available in HD (720p) format and play it. (Example: &lt;a href="http://www.youtube.com/watch?v=twuScTcDP_Q"&gt;"Moon" HD Trailer&lt;/a&gt;)&lt;br&gt;&lt;/li&gt;
&lt;li&gt;If it plays at a low frame rate or lags occasionally, there is a chance the CPU may be too slow.&lt;/li&gt;
&lt;li&gt;Open Task Manager (right-click the task bar and choose Start Task Manager).&lt;/li&gt;
&lt;li&gt;Go to the Performance tab.&lt;/li&gt;
&lt;li&gt;From the Options menu, choose Always On Top.&lt;/li&gt;
&lt;li&gt;Now go to YouTube and start playing the video.&lt;/li&gt;
&lt;li&gt;Watch the CPU usage carefully. If it spikes up to 90% or more, that is not good news. It means that your CPU is too slow.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
If your CPU usage goes to 90% or more while playing a YouTube video, your CPU is a significant bottleneck. Unless you're happy with choppy video, you should upgrade your CPU.
&lt;/p&gt;
&lt;h4&gt;What Should I Upgrade To?&lt;/h4&gt;
&lt;p&gt;
This is where &lt;a href="http://www.dacris.com/benchmarks/"&gt;Dacris Benchmarks&lt;/a&gt; comes in. Open Dacris Benchmarks and run the CPU test. You can run the other tests too but it is not necessary. Save your results (File - Save Results). Now, go to File - Compare Results and select a system with a CPU you'd be willing (and able) to upgrade to (e.g. Core 2 Duo E8400). Now you can see on the main screen what your CPU score would be with the new CPU. If the score is at least 5000 (the current YouTube threshold), it would be a good upgrade.
&lt;/p&gt;
&lt;h4&gt;Summary&lt;/h4&gt;
&lt;p&gt;
Try the YouTube test to see if your CPU can handle HD video. A CPU with a score of 5000 or more in Dacris Benchmarks can handle HD video at a smooth frame rate. So if your CPU scores less than 5000, it is likely that it cannot handle HD video on YouTube.&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=31f8ed63-ad03-463a-9660-b31fc23a55d2"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,31f8ed63-ad03-463a-9660-b31fc23a55d2.aspx</comments>
      <category>Business</category>
      <category>Commentary</category>
      <category>Personal</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=9f7b5498-d328-4e18-a352-f57df9136212</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,9f7b5498-d328-4e18-a352-f57df9136212.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,9f7b5498-d328-4e18-a352-f57df9136212.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9f7b5498-d328-4e18-a352-f57df9136212</wfw:commentRss>
      <title>How to Tell if You Need More RAM</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,9f7b5498-d328-4e18-a352-f57df9136212.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/27/HowToTellIfYouNeedMoreRAM.aspx</link>
      <pubDate>Tue, 27 Jul 2010 06:38:16 GMT</pubDate>
      <description>&lt;div&gt;&lt;h4&gt;Why Having Free RAM is Important&lt;/h4&gt;
&lt;p&gt;RAM is faster than your hard drive, by a factor of 100 at least. If your computer runs out of RAM, it will start using the hard drive instead of RAM, causing it to slow down dramatically.&lt;/p&gt;
&lt;p&gt;Have you ever noticed, when you exit a game that you've been playing for a long time, how sometimes your desktop redraws very slowly and it takes several seconds just for your windows reappear? Well, that was caused by your computer &lt;strong&gt;swapping out&lt;/strong&gt; (i.e. moving) data from RAM to your hard drive in order to make room for that game you were playing. That is why when you exit the game, everything reloads slowly. It is because now everything must be read back into RAM from your hard drive.&lt;/p&gt;
&lt;h4&gt;How Much Free RAM Should I Have?&lt;/h4&gt;
&lt;p&gt;Generally, you should make sure your RAM usage never exceeds 70%. That means, you should at all times have at least 30% unused RAM. Otherwise, what ends up happening is, as your RAM usage increases past 70%, your computer has to swap out old data in order to keep running properly. The problem is, once you need that data back (and you probably will), it will have to be reloaded from the hard drive, causing your PC to slow down. To prevent swapping, it is best that you maintain a level of 30% free RAM or higher.&lt;/p&gt;
&lt;h4&gt;How to Check the Free RAM Amount&lt;/h4&gt;
&lt;p&gt;You can use Task Manager to see your free RAM amount (in MB) at any time. Right-click the task bar and choose Start Task Manager. Go to the Performance tab and under "Physical Memory", look at the "Available" amount. Then divide that by the "Total" amount shown and you will know how much RAM you have free at that point.&lt;/p&gt;
&lt;p&gt;If you want to track your RAM usage over time - to see when the used memory percentage goes over 70% - use &lt;a href="http://www.dacris.com/benchmarks/" target="_blank"&gt;Dacris Benchmarks&lt;/a&gt;' System Monitor feature (go to &lt;strong&gt;Tools - Monitoring&lt;/strong&gt;). Click Start Logging and then use your PC as you regularly would for a few hours. Make sure you do not close Dacris Benchmarks (System Monitor) and do not restart your PC during this time. Then, go back to System Monitor, click Stop Logging and then expand the Highlights item in the tree view. Expand the RAM Usage item and see what percentage the first item says. If it is over 70%, you need more RAM.&lt;/p&gt;
&lt;h4&gt;How Much RAM Should I Get?&lt;/h4&gt;
&lt;p&gt;If you've determined that you need a RAM upgrade, you can probably benefit greatly from even a 50% increase in your total RAM amount. For example, you could upgrade from 2 GB to 3 GB by adding a 1 GB module.&lt;/p&gt;
&lt;p&gt;Make sure you check your PC's memory slots first to see if you have room. To do this, in Dacris Benchmarks, go to the System Information tab, expand the Hardware category, then expand the RAM category. This will show you all modules installed along with each module's capacity. To see if you have room for more modules, you can go to the motherboard manufacturer's website and look up your motherboard model (from System Information, Hardware, Motherboard) to see how many total RAM slots it has. Alternatively, if you want to be 100% sure you have available RAM slots, just open up the case and look inside.&lt;/p&gt;
&lt;h4&gt;Summary&lt;/h4&gt;
&lt;p&gt;Free RAM is essential for smooth PC operation. If your PC has less than 30% free RAM at any given time, it is at risk of slowing down significantly when switching between programs. To maintain smooth operation, make sure you always have at least 30% free RAM. You can check (and track) RAM usage with Dacris Benchmarks' System Monitor tool. Even as little as 50% more RAM can dramatically improve performance when RAM usage routinely exceeds 70%.&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=9f7b5498-d328-4e18-a352-f57df9136212"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,9f7b5498-d328-4e18-a352-f57df9136212.aspx</comments>
      <category>Business</category>
      <category>Commentary</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=463a27df-ed3b-4a49-ba84-610fd30198e3</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,463a27df-ed3b-4a49-ba84-610fd30198e3.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,463a27df-ed3b-4a49-ba84-610fd30198e3.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=463a27df-ed3b-4a49-ba84-610fd30198e3</wfw:commentRss>
      <title>Dacris Benchmarks 8.0 Reviewed on Download3000</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,463a27df-ed3b-4a49-ba84-610fd30198e3.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/24/DacrisBenchmarks80ReviewedOnDownload3000.aspx</link>
      <pubDate>Sat, 24 Jul 2010 00:13:03 GMT</pubDate>
      <description>&lt;div&gt;While randomly surfing the web (actually, I was searching for 'pc monitoring'), I stumbled upon an &lt;a href="http://www.download3000.com/dacris-benchmarks-8.0-review-2691.html"&gt;excellent review of Dacris Benchmarks 8.0&lt;/a&gt;, by Codrut Nistor of Download3000.com. It has only been up since June, so it is definitely newsworthy, especially since Dacris Benchmarks received the "&lt;b&gt;editor's pick&lt;/b&gt;" award!&lt;br&gt;&lt;br&gt;Here is a brief excerpt:&lt;br&gt;&lt;br&gt;"&lt;b&gt;Final Thoughts&lt;/b&gt;&lt;br&gt;&lt;br&gt;I really love Dacris Benchmarks, and I guess that should be all of it. 
This program gets my pick and it should also get all your attention. 
I'll surely keep an eye on it in the future, since I know all this can 
be done even better. Excellent work guys, congratz!"&lt;br&gt;&lt;br&gt;It is important to note that the reviewer ran Dacris Benchmarks on a not-so-recent machine, running Windows XP.&lt;br&gt;&lt;br&gt;&lt;a href="http://www.download3000.com/dacris-benchmarks-8.0-review-2691.html"&gt;Read the full review&lt;/a&gt; to get a good idea of what the program can do. It's a lot more than you might initially think!&lt;br&gt;&lt;br&gt;We plan to take the feedback we got from the review in order to make the next version of Dacris Benchmarks even better.&lt;br&gt;&lt;br&gt;Also, to all who have submitted their results so far - thank you! We appreciate every submission we receive. Keep them coming!&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=463a27df-ed3b-4a49-ba84-610fd30198e3"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,463a27df-ed3b-4a49-ba84-610fd30198e3.aspx</comments>
      <category>Business</category>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=1c77984c-04f4-464a-9025-bdc978172c8d</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,1c77984c-04f4-464a-9025-bdc978172c8d.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,1c77984c-04f4-464a-9025-bdc978172c8d.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1c77984c-04f4-464a-9025-bdc978172c8d</wfw:commentRss>
      <title>WCF – A Gigantic Monstrosity from the Depths of Hell</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,1c77984c-04f4-464a-9025-bdc978172c8d.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/23/WCFAGiganticMonstrosityFromTheDepthsOfHell.aspx</link>
      <pubDate>Fri, 23 Jul 2010 22:37:52 GMT</pubDate>
      <description>&lt;div&gt;So it seems everyone out there who wants to create REST services is using WCF to do it. I don’t know how this trend got started, but it’s wrong. You see, WCF was never made for the web. It was made to replace inter-process communication which used to be done through RPC. Then, it grew into a bloated Swiss-army-knife solution trying to solve all of the world’s problems, including (as it happens) REST. Sure it solves the problem, but not very well. Only if you accept the gigantic limitations that WCF imposes on you.&lt;br&gt;&lt;br&gt;Trying to build a REST service with WCF is like trying to open a beer bottle with explosives. It will open, but then you’ve got a whole mess on your hands.&lt;br&gt;&lt;br&gt;This week I’ve been struggling to do exactly that – set up a REST service with WCF. Given that I have shared web hosting (I know, poor old me) and have multiple sub domains hosted on the same IIS service, it proved to be impossible. The error: “This collection already contains an address with scheme http.”&lt;br&gt;&lt;br&gt;Looking around on the web for a solution proved to be futile. It appears that unless you have a dedicated IIS instance just for your WCF REST service, it ain’t gonna happen.&lt;br&gt;&lt;br&gt;Another thing that really makes my blood boil with WCF is the fact that tracing is so difficult. You have to use a proprietary tool to view a proprietary trace format – and that’s when you finally get it to work right. If you can’t get it to work (I couldn’t), the result is that you try to access one of your service methods and, if there's something wrong with the method, you only get a blank browser screen. No debug output, no exception message, nothing.&lt;br&gt;&lt;br&gt;I then realized there’s a much easier way to make it happen. The answer is so staggeringly simple you will laugh…&lt;br&gt;&lt;br&gt;&lt;b&gt;Global.asax&lt;/b&gt;&lt;br&gt;&lt;br&gt;Here’s how you do it:&lt;br&gt;&lt;ol&gt;&lt;li&gt;Take out all the WCF junk from the web.config. God knows WCF likes to flood you with configuration.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Add one line to Global.asax.cs, in Application_BeginRequest:&lt;br&gt;MyService.ProcessRequest(HttpContext.Current);&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Then, create a class called MyService, with a bit of reflection to figure out which service method to call (based on your URL and query string parameters), and a call to XmlSerializer to convert the return value to XML. One example (in my case, called SearchService), &lt;a href="http://app.dacris.com/temp/SearchService.cs.txt"&gt;can be found here&lt;/a&gt;.&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;That’s it. Three easy steps! Now you have a REST service. No changes to your WCF service contract. Your interface can stay intact – even with the WCF attributes still on it!&lt;br&gt;&lt;br&gt;So to those who want to implement a simple REST service without the hassle of WCF, here you go. From now on, I prefer not to use WCF unless I absolutely have to.&lt;br&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=1c77984c-04f4-464a-9025-bdc978172c8d"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,1c77984c-04f4-464a-9025-bdc978172c8d.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>Internet</category>
      <category>News</category>
      <category>Personal</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=e94e7d49-d268-4187-ba23-23b1b4fbf8b1</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,e94e7d49-d268-4187-ba23-23b1b4fbf8b1.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,e94e7d49-d268-4187-ba23-23b1b4fbf8b1.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e94e7d49-d268-4187-ba23-23b1b4fbf8b1</wfw:commentRss>
      <title>Designing Benchmarks: Hardware, Software, and QoS</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,e94e7d49-d268-4187-ba23-23b1b4fbf8b1.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/20/DesigningBenchmarksHardwareSoftwareAndQoS.aspx</link>
      <pubDate>Tue, 20 Jul 2010 05:25:29 GMT</pubDate>
      <description>&lt;div&gt;&lt;h2&gt;Introduction&lt;br&gt;&lt;/h2&gt;&lt;p&gt;
        There are three types of benchmarks:&lt;/p&gt;
    &lt;ol&gt;
        &lt;li&gt;Hardware - those that test raw hardware variables like throughput, transfer 
            rate, latency, or bandwidth.&lt;/li&gt;
        &lt;li&gt;Software - those that test the performance of various algorithms (e.g. pi 
            calculation) on different hardware devices.&lt;/li&gt;
        &lt;li&gt;QoS - those that test various quality of service aspects, such as security or 
            reliability.&lt;/li&gt;
    &lt;/ol&gt;
    &lt;h2&gt;
        Software Benchmarks&lt;/h2&gt;
    &lt;p&gt;
        While high-level (software) benchmarks appear to more accurately reflect what we 
        want to measure from a user experience standpoint, they are also harder to 
        generalize or standardize. This is because the hardware resources needed for a 
        pi calculation in C# may differ greatly from those needed for a pi calculation 
        in C++. Ultimately, software benchmarks end up being heavily dependent on the 
        platform being used for development.&lt;/p&gt;
    &lt;p&gt;
        There are a few software benchmarks, however, which are worthy of 
        implementation. These are the ones that have a great degree of applicability to 
        the real world and have a very low degree of platform &amp;amp; algorithm variance. In 
        other words, the algorithm needs to be commoditized - the public domain version 
        of the algorithm is the most efficient version of the algorithm available. It 
        needs to take full advantage of all hardware optimizations known at the time, 
        and be applicable in the real world. It also needs to be written for as 
        low-level a platform as possible (e.g. C++).&lt;/p&gt;
    &lt;p&gt;
        Examples of viable software benchmarks:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;Pi calculation (e.g. SuperPI)&lt;/li&gt;
        &lt;li&gt;H.264 video encoding, with fixed settings&lt;/li&gt;
        &lt;li&gt;MP3 audio encoding, with fixed settings&lt;/li&gt;
        &lt;li&gt;Prime number calculation (e.g. Prime95)&lt;/li&gt;
        &lt;li&gt;Fibonacci number sequence&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        Examples of bad software benchmarks:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;JavaScript pi calculation - varies by browser type&lt;/li&gt;
        &lt;li&gt;Linux compilation - varies greatly by distribution and configuration&lt;/li&gt;
        &lt;li&gt;XML parsing - varies greatly by algorithm&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        The rule as far as the algorithm is concerned is, it must be easy to reproduce 
        the most efficient algorithm for that particular task. For example, with pi 
        calculation, the most efficient algorithm is well-documented and readily 
        available. There is no hidden or proprietary algorithm that is more optimized 
        than what is already in the public domain.&lt;/p&gt;
    &lt;h2&gt;
        Hardware Benchmarks&lt;/h2&gt;
    &lt;p&gt;
        Low-level (hardware) benchmarks are designed specifically to measure the 
        physical limitations of the underlying hardware. These are generally much more 
        reliable. There is less variance in results. However, they apply less to real 
        world usage. They are also known as "synthetic" benchmarks, because they do not 
        take into account real world usage patterns. Typically, hardware benchmarks will 
        measure things like throughput, bandwidth, or latency.&lt;/p&gt;
    &lt;p&gt;
        Examples of hardware benchmarks:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;Cache memory throughput (read, write, copy) with 64 KB blocks&lt;/li&gt;
        &lt;li&gt;Average RAM read latency with 4 KB blocks at random addresses&lt;/li&gt;
        &lt;li&gt;Hard drive seek time for 1/2 disk seek&lt;/li&gt;
        &lt;li&gt;Peak hard drive transfer rate&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        The relevance of a hardware benchmark matters more than anything in terms of 
        determining whether it is worth pursuing. For example, it would be irrelevant to 
        measure the error rate of RAM when you are in fact looking for a measure of the 
        performance of the memory subsystem.&lt;/p&gt;
    &lt;h2&gt;
        QoS Benchmarks&lt;/h2&gt;
    &lt;p&gt;
        While so far we've discussed only performance testing, there are other variables 
        that we generally would want to measure. These fall under the category of 
        "quality of service" (or QoS) variables. The importance of these variables is 
        often underrated.&lt;/p&gt;
    &lt;p&gt;
        Examples of QoS variables:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;Error rate of a hard drive&lt;/li&gt;
        &lt;li&gt;Security level of the operating system&lt;/li&gt;
        &lt;li&gt;Video rendering quality&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        These variables have nothing to do with speed, but they are nevertheless 
        important.&lt;/p&gt;
    &lt;p&gt;
        Benchmarks should not be just about testing performance. They should include QoS 
        variables as well, since these can determine a purchase decision just as much as 
        performance. Hardware reviewers will often mention these variables and try to 
        quantify them, but there are seldom any objective tests done. We predict that 
        QoS benchmarking will be more important over the coming years, and we plan to 
        focus more on this relatively unexplored territory.&lt;/p&gt;
    &lt;h2&gt;
        Conclusions&lt;/h2&gt;
    &lt;p&gt;
        Dacris Benchmarks offers many hardware benchmarks. There is only one software 
        benchmark in Dacris Benchmarks at the moment, and that is the CPU test, since 
        there is no definitive way to measure the raw throughput of a CPU. The CPU 
        benchmark is mainly a clone of the Whetstone benchmark.&lt;/p&gt;
    &lt;p&gt;
        Currently, our emphasis with Dacris Benchmarks has been on hardware benchmarks 
        as much as possible. Our customers have indicated to us that this is the right 
        strategy. However, in the future we plan to expand into QoS benchmarks as well, 
        as this is a relatively unexplored area.&lt;/p&gt;
    &lt;p&gt;
        Questions? Suggestions? Feel free to post your comment below.&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=e94e7d49-d268-4187-ba23-23b1b4fbf8b1"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,e94e7d49-d268-4187-ba23-23b1b4fbf8b1.aspx</comments>
      <category>Business</category>
      <category>Science</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=b09b01b2-5feb-41bf-bdcd-1a02770c9744</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,b09b01b2-5feb-41bf-bdcd-1a02770c9744.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,b09b01b2-5feb-41bf-bdcd-1a02770c9744.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b09b01b2-5feb-41bf-bdcd-1a02770c9744</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Project Vmana: Lucene.NET in the Cloud</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,b09b01b2-5feb-41bf-bdcd-1a02770c9744.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/16/ProjectVmanaLuceneNETInTheCloud.aspx</link>
      <pubDate>Fri, 16 Jul 2010 08:39:49 GMT</pubDate>
      <description>&lt;div&gt;An idea has been tossing &amp;amp; turning in my head for months now - 3 months actually. Rarely does an idea stick around that long without me finding &lt;i&gt;some&lt;/i&gt; way to dismiss it.&lt;br&gt;&lt;br&gt;The idea is a &lt;a href="http://www.vmana.com/"&gt;hosted customizable search engine&lt;/a&gt;, similar in ease of use to GSA (Google Search Appliance) but more capable - more like Lucene.&lt;br&gt;&lt;br&gt;After searching for hours &amp;amp; hours for a decent hosted search engine, guess what? I found nothing.&lt;br&gt;&lt;br&gt;The closest thing I was able to find was &lt;a href="http://code.google.com/p/gaelucene/"&gt;GAELucene&lt;/a&gt; (on Google Code). It's a Google App Engine version of Lucene. However, the index can only be read-only. It does not support a dynamic index. Without that, it's useless to me.&lt;br&gt;&lt;br&gt;&lt;b&gt;Hosted Applications - Some Examples&lt;/b&gt;&lt;br&gt;&lt;br&gt;Just so you are less inclined to think I have finally lost my marbles:&lt;br&gt;&lt;ul&gt;&lt;li&gt;IIS --&amp;gt; Windows Azure&lt;/li&gt;&lt;li&gt;SQL Server --&amp;gt; SQL Azure&lt;/li&gt;&lt;li&gt;Outlook --&amp;gt; Gmail&lt;/li&gt;&lt;li&gt;Backup --&amp;gt; Mozy&lt;br&gt;&lt;/li&gt;&lt;li&gt;Bugzilla&lt;/li&gt;&lt;li&gt;SVN&lt;/li&gt;&lt;/ul&gt;There is a clear trend towards traditional server/desktop applications moving over to hosted services.&lt;br&gt;&lt;br&gt;&lt;b&gt;Getting a Customized Search Engine ... the Traditional Way:&lt;/b&gt;&lt;br&gt;&lt;br&gt;These days, if you need a customized search solution, your options are as follows:&lt;br&gt;&lt;ol&gt;&lt;li&gt;Purchase, deploy, and maintain a gigantic enterprise search application (e.g. Google search appliance, Endeca, FAST).&lt;/li&gt;&lt;li&gt;Integrate Lucene (or another free search engine) into your application (Java/ASP.NET) and develop your own management interface for it.&lt;/li&gt;&lt;li&gt;Drop the customization and integrate a basic Google search box into your web app, that can only index &amp;amp; search your HTML pages.&lt;/li&gt;&lt;/ol&gt;Clearly, none of these options are particularly appealing to a small or medium-sized business. Why?&lt;br&gt;&lt;br&gt;- Option 1 is super-expensive. Not only is the entry cost in excess of $20,000, the cost of maintenance and operation also exceeds $10,000 per month.&lt;br&gt;- Option 2 is less expensive, although certainly not free, and very time consuming. It could take at least 5 weeks to get a working solution, resulting in more than $5,000 in development costs. Then there's the cost of hosting Lucene yourself. With a large index, you probably need a dedicated server - around $200 per month!&lt;br&gt;- Option 3 is super cheap, but it's not at all what you want. It's basically the same as giving up.&lt;br&gt;&lt;br&gt;&lt;b&gt;Is there a better way?&lt;/b&gt;&lt;br&gt;&lt;br&gt;Yes! There is one more option - option 4. But nobody's built it yet.&lt;br&gt;&lt;br&gt;Option 4 is a &lt;a href="http://www.vmana.com/"&gt;hosted search engine&lt;/a&gt; where &lt;i&gt;you&lt;/i&gt; control what data flows in &amp;amp; how it comes out, but the management &amp;amp; maintenance is handled by someone else.&lt;br&gt;&lt;br&gt;Think of it as &lt;a href="http://www.vmana.com/"&gt;&lt;b&gt;cloud search&lt;/b&gt;&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Two words! Simple.&lt;br&gt;&lt;br&gt;Enter &lt;a href="http://www.vmana.com/"&gt;&lt;b&gt;Project Vmana&lt;/b&gt;&lt;/a&gt;. Thinking search? Think Vmana.&lt;br&gt;&lt;br&gt;&lt;b&gt;How would it work?&lt;/b&gt;&lt;br&gt;&lt;ol&gt;&lt;li&gt;You go to &lt;a href="http://www.vmana.com/"&gt;vmana.com&lt;/a&gt; and sign up for your &lt;b&gt;free&lt;/b&gt; entry-level search account.&lt;/li&gt;&lt;li&gt;Just like App Engine, Vmana is metered. Let's say your entry-level account has 500 MB of index space and 100,000 queries per month.&lt;/li&gt;&lt;li&gt;Using an easy-to-use admin interface, you configure your data sources:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;You want some data to be pulled in from your blog, so you give it your RSS feed URL.&lt;/li&gt;&lt;li&gt;You want it to crawl your website, so you give it your home page URL.&lt;/li&gt;&lt;li&gt;You set up some exclusion lists using regular expressions to filter out unwanted URLs.&lt;/li&gt;&lt;li&gt;You have some custom objects with metadata that you will feed in with your own feeder application.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Vmana handles all of your object types &amp;amp; indexes them regularly. You can check your stats using the built-in dashboard.&lt;/li&gt;&lt;li&gt;Vmana provides a testing console - a simple web page where you can type in queries, see results, and build out customized result templates for use later.&lt;/li&gt;&lt;li&gt;You then use the Vmana XML API to send queries from your web application. Your web app just builds the query, sends it to Vmana, and retrieves the results in XML format. Then, you apply a bit of XSL and magic happens - you've got your fully-customized search results page.&lt;/li&gt;&lt;/ol&gt;How much development effort is involved? Probably about 5 days. Under $1,000.&lt;br&gt;&lt;br&gt;The value in Vmana lies mainly in the management &amp;amp; admin interface. Lucene does not provide it. If you did option 2, you'd have to build it yourself from scratch. Building all that crawling logic and pretty reporting UIs is not that easy, which is why I said 5 weeks, and that's probably a conservative estimate!&lt;br&gt;&lt;br&gt;Why "Vmana"? I like the name - it's short, and the domain was available. ;)&lt;br&gt;&lt;br&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;br&gt;&lt;br&gt;With Vmana, your costs are reduced to about one-fifth relative to comparable options &lt;b&gt;and &lt;/b&gt;you get better value &amp;amp; peace of mind!&lt;br&gt;&lt;br&gt;The project has already begun. Stay tuned for additional status updates - probably in about 3 days.&lt;br&gt;&lt;br&gt;&lt;b&gt;Release Schedule&lt;/b&gt;&lt;br&gt;&lt;br&gt;The first phase is a working internal prototype that we can showcase via screenshots. That is probably about 2 weeks away. Following that, a public beta - if one happens at all - would arrive around late August. The quality would be similar to the App Engine beta or the Azure CTP. The beta would continue probably for at least two months. Expect heavy promotional giveaways during the beta (i.e. high quotas).&lt;br&gt;&lt;br&gt;This is all I will divulge at this time. I have nothing more anyway.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=b09b01b2-5feb-41bf-bdcd-1a02770c9744"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,b09b01b2-5feb-41bf-bdcd-1a02770c9744.aspx</comments>
      <category>.NET</category>
      <category>Business</category>
      <category>Commentary</category>
      <category>Internet</category>
      <category>News</category>
      <category>Personal</category>
      <category>Search</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=ca9e2310-86f6-419e-b647-5f79da809e8e</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,ca9e2310-86f6-419e-b647-5f79da809e8e.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,ca9e2310-86f6-419e-b647-5f79da809e8e.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ca9e2310-86f6-419e-b647-5f79da809e8e</wfw:commentRss>
      <title>.NET Framework Versions and Backwards Compatibility</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,ca9e2310-86f6-419e-b647-5f79da809e8e.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/15/NETFrameworkVersionsAndBackwardsCompatibility.aspx</link>
      <pubDate>Thu, 15 Jul 2010 06:48:11 GMT</pubDate>
      <description>&lt;div&gt;I come across this question quite frequently, and the answer may not be quite so obvious, but it makes sense once you think about it.&lt;br&gt;&lt;br&gt;&lt;b&gt;Question:&lt;/b&gt; How do I know my app (built with .NET version X) will be compatible with .NET version Y?&lt;br&gt;&lt;br&gt;&lt;b&gt;Answer:&lt;/b&gt;&lt;br&gt;&lt;br&gt;As a rule of thumb, if .NET version X installs side-by-side with .NET
 version Y, then .NET version X is not compatible (backwards or 
forwards) with .NET version Y. This is a rule I've been using for quite 
some time (since .NET 2.0 came out). It's probably too safe for 
small-scale applications, but it's better to be safe than sorry.

&lt;p&gt;Here are some concrete examples:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;.NET 4.0 will not run .NET 3.x or earlier applications properly&lt;/li&gt;&lt;li&gt;.NET 3.5 will run .NET 3.0 &amp;amp; .NET 2.0 applications, but not .NET
 1.1&lt;/li&gt;&lt;li&gt;.NET 3.0 will run .NET 2.0 applications, but not .NET 1.1&lt;/li&gt;&lt;li&gt;.NET 2.0 will not run .NET 1.1&lt;/li&gt;&lt;/ul&gt;Here is a matrix that shows every scenario:&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dacris.com/blog/images/netversions.png"&gt;&lt;br&gt;&lt;br&gt;Here are the versions that install side-by-side:&lt;br&gt;&lt;ul&gt;&lt;li&gt;.NET 4.0&lt;/li&gt;&lt;li&gt;.NET 3.5, 3.0, or 2.0&lt;/li&gt;&lt;li&gt;.NET 1.1&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=ca9e2310-86f6-419e-b647-5f79da809e8e"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,ca9e2310-86f6-419e-b647-5f79da809e8e.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=35c3033f-d5fd-4fdc-9b80-2e7cfff43de0</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,35c3033f-d5fd-4fdc-9b80-2e7cfff43de0.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,35c3033f-d5fd-4fdc-9b80-2e7cfff43de0.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=35c3033f-d5fd-4fdc-9b80-2e7cfff43de0</wfw:commentRss>
      <title>SEO Tips for Reaching #1 Spot on Google</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,35c3033f-d5fd-4fdc-9b80-2e7cfff43de0.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/14/SEOTipsForReaching1SpotOnGoogle.aspx</link>
      <pubDate>Wed, 14 Jul 2010 06:36:16 GMT</pubDate>
      <description>&lt;div&gt;Recently I checked my website (&lt;a href="http://www.dacris.com"&gt;&lt;b&gt;dacris.com&lt;/b&gt;&lt;/a&gt;) to see how it ranked against several keywords on Google. It turns out that for quite a few popular keywords / phrases, I am now very near the #1 spot!&lt;br&gt;&lt;br&gt;&lt;b&gt;Examples:&lt;/b&gt;&lt;br&gt;&lt;a href="http://www.google.ca/search?hl=en&amp;amp;safe=off&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;amp;q=pc+performance&amp;amp;aq=f&amp;amp;aqi=g10&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai="&gt;"pc performance"&lt;/a&gt; - #6 spot&lt;br&gt;&lt;a href="http://www.google.ca/search?hl=en&amp;amp;safe=off&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;amp;q=pc+benchmarks&amp;amp;aq=f&amp;amp;aqi=g2g-m8&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai="&gt;&lt;/a&gt;&lt;a href="http://www.google.ca/search?hl=en&amp;amp;safe=off&amp;amp;client=firefox-a&amp;amp;hs=7yG&amp;amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;amp;q=pc+benchmarks&amp;amp;aq=f&amp;amp;aqi=g2g-m8&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai="&gt;"pc benchmarks"&lt;/a&gt; - #5 spot&lt;br&gt;&lt;br&gt;This was not always the case. My site used to be buried somewhere on page 10 or beyond. That was only four months ago!&lt;br&gt;&lt;br&gt;Here's what has worked for me:&lt;br&gt;&lt;ol&gt;&lt;li&gt;Put your most important keywords in the page title - in this case my page title contains &lt;i&gt;PC&lt;/i&gt;, &lt;i&gt;Performance&lt;/i&gt;, and &lt;i&gt;Test&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;Be consistent with your keywords in your copy - do not use "performance" and then "speed". Choose one.&lt;/li&gt;&lt;li&gt;Links are enormously important. Use the keywords from your page title in at least one link in the page body.&lt;/li&gt;&lt;li&gt;Get lots of inbound links from reputable sites (having &lt;a href="http://en.wikipedia.org/wiki/PageRank"&gt;PageRank&lt;/a&gt; 5 or more). Here are a few ways:&lt;br&gt;- Put out press releases&lt;br&gt;- List your software in directories such as &lt;a href="http://www.download.com"&gt;download.com&lt;/a&gt;&lt;br&gt;- Link your website to your user profile, so that you get a free inbound link whenever you post comments or reply on forums&lt;br&gt;&lt;/li&gt;&lt;li&gt;Put your entire product documentation online. This creates searchable content.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Write industry-related articles on your blog &amp;amp; post frequently (at least once per day).&lt;br&gt;&lt;/li&gt;&lt;li&gt;Start a few projects on &lt;a href="http://www.codeplex.com"&gt;CodePlex&lt;/a&gt; and link back to your own website. This is what I did with &lt;a href="http://flexsetup.codeplex.com/"&gt;FlexSetup&lt;/a&gt; and &lt;a href="http://netxpf.codeplex.com/"&gt;NETXPF&lt;/a&gt;.&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;To summarize, there are two keys to SEO:&lt;br&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Content&lt;/b&gt; - create lots of relevant content, with proper formatting.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Inbound links&lt;/b&gt; - get links from sites having high PageRank, with relevant keywords in the link or surrounding the link.&lt;/li&gt;&lt;/ol&gt;Now go out there and get traffic!&lt;br&gt;&lt;br&gt;&lt;b&gt;Tip:&lt;/b&gt; Be sure to use &lt;a href="http://www.google.ca/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CB0QFjAA&amp;amp;url=http%3A%2F%2Fwww.google.com%2Fanalytics%2F&amp;amp;ei=hVg9TIHgH8T58Aao3fm2Bg&amp;amp;usg=AFQjCNFz3Lrd3h9xlat60IUur_H8rmADdw&amp;amp;sig2=iGkTTRyVHaaV535QEU0TQQ"&gt;Google Analytics&lt;/a&gt; to see which keywords are effective in bringing in traffic.&lt;br&gt;&lt;br&gt;&lt;b&gt;Additional tip:&lt;/b&gt; To check the PageRank of a site, go to &lt;a href="http://www.prchecker.info/"&gt;prchecker.info&lt;/a&gt;.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=35c3033f-d5fd-4fdc-9b80-2e7cfff43de0"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,35c3033f-d5fd-4fdc-9b80-2e7cfff43de0.aspx</comments>
      <category>Business</category>
      <category>Internet</category>
      <category>Marketing</category>
      <category>SEO</category>
      <category>Technology</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=a80422ad-0801-4f4c-83bb-13bba3392073</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,a80422ad-0801-4f4c-83bb-13bba3392073.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,a80422ad-0801-4f4c-83bb-13bba3392073.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a80422ad-0801-4f4c-83bb-13bba3392073</wfw:commentRss>
      <title>Getting over the fear of asking</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,a80422ad-0801-4f4c-83bb-13bba3392073.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/13/GettingOverTheFearOfAsking.aspx</link>
      <pubDate>Tue, 13 Jul 2010 08:34:15 GMT</pubDate>
      <description>&lt;div&gt;I have a strong feeling that for most people, the biggest reason for business failure or personal stagnation is due to the fear of asking. This applies to me, so it must apply to others out there.&lt;br&gt;&lt;br&gt;Let's examine this for a minute. What are some fears that people have when it comes to asking?&lt;br&gt;&lt;ul&gt;&lt;li&gt;Asking to be treated fairly in a relationship&lt;/li&gt;&lt;li&gt;Asking for what you feel you deserve to be paid, instead of what you think you can get&lt;/li&gt;&lt;li&gt;Asking others to allow you to speak &amp;amp; make a point&lt;/li&gt;&lt;li&gt;Asking the people you have wronged for forgiveness&lt;/li&gt;&lt;li&gt;Asking that your government representatives actually represent your interests for a change&lt;/li&gt;&lt;li&gt;Asking a girl out on a date&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;The list goes on...&lt;br&gt;&lt;br&gt;It has always been a weakness of mine. I'm sure others are in the same boat. Why else would it be that so many people are having trouble making ends meet? They clearly accept their precarious financial situation. It's as if they are content with being poor. Just as in centuries past, people were content with being slaves.&lt;br&gt;&lt;br&gt;The reason is always the same: they are afraid to ask.&lt;br&gt;&lt;br&gt;Well, I don't know about you all, but as far as I'm concerned, I'm determined to get over my fear of asking. Whatever it takes.&lt;br&gt;&lt;br&gt;This new modus operandi is called "&lt;b&gt;being assertive&lt;/b&gt;." It is now my new quest.&lt;br&gt;&lt;br&gt;I will start by getting over my fear of asking for $300/hr as my consulting rate. This is how it begins.&lt;br&gt;&lt;br&gt;Stay tuned for status updates on my quest. This blog will be my journal on this exciting shift in paradigm.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=a80422ad-0801-4f4c-83bb-13bba3392073"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,a80422ad-0801-4f4c-83bb-13bba3392073.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>Finance</category>
      <category>News</category>
      <category>Personal</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=c7d3fdc3-2e8e-4384-9605-c38d62cc354f</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,c7d3fdc3-2e8e-4384-9605-c38d62cc354f.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,c7d3fdc3-2e8e-4384-9605-c38d62cc354f.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c7d3fdc3-2e8e-4384-9605-c38d62cc354f</wfw:commentRss>
      <title>The Modern Online World ... Order</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,c7d3fdc3-2e8e-4384-9605-c38d62cc354f.aspx</guid>
      <link>http://www.dacris.com/blog/2010/07/10/TheModernOnlineWorldOrder.aspx</link>
      <pubDate>Sat, 10 Jul 2010 07:31:45 GMT</pubDate>
      <description>&lt;div&gt;I took the liberty of doing some research on keywords that have over 200,000 monthly searches on Google as they might relate to software and website ideas. Here's what I came up with...&lt;br&gt;&lt;br&gt;&lt;b&gt;Online Learning&lt;/b&gt;&lt;br&gt;- FREE online learning / FREE school / VIRTUAL school&lt;br&gt;&lt;br&gt;&lt;b&gt;Reviews&lt;/b&gt;&lt;br&gt;- digital camera reviews&lt;br&gt;- LCD reviews&lt;br&gt;- cell phone reviews&lt;br&gt;&lt;br&gt;&lt;b&gt;Language&lt;/b&gt;&lt;br&gt;- learn Spanish, German, French&lt;br&gt;&lt;br&gt;&lt;b&gt;Compare&lt;/b&gt;&lt;br&gt;- digital cameras, phones, LCD&lt;br&gt;&lt;br&gt;&lt;b&gt;Software / Apps / Programs&lt;/b&gt;&lt;br&gt;- DVD burning, games, deployment, programming, zip, weight training&lt;br&gt;&lt;br&gt;&lt;b&gt;Music / Tabs / Sound&lt;/b&gt;&lt;br&gt;- sheet music, remix, tablature, guitar lessons, DJ software, sound driver&lt;br&gt;&lt;br&gt;&lt;b&gt;Seduction&lt;/b&gt;&lt;br&gt;- Neil Strauss, pick up artist, pua, mystery method&lt;br&gt;&lt;br&gt;&lt;b&gt;Financial&lt;/b&gt;&lt;br&gt;- financial planner, financial software, ratios&lt;br&gt;&lt;br&gt;&lt;b&gt;New World Order&lt;/b&gt;&lt;br&gt;- illuminati, freemasons, david icke&lt;br&gt;&lt;br&gt;&lt;b&gt;Travel&lt;/b&gt;&lt;br&gt;- deals, cruises, last minute, UK, America, Malaysia, visa, Costa Rica, Caribbean, Chile&lt;br&gt;&lt;br&gt;&lt;b&gt;Online / Internet&lt;/b&gt;&lt;br&gt;- play games, tetris, puzzle, chess, solitaire, typing, speed test&lt;br&gt;&lt;br&gt;&lt;b&gt;Money / Interest Rate / Economy&lt;/b&gt;&lt;br&gt;- make money, transfer, exchange, gold, converter, mortgage calculator, inflation&lt;br&gt;&lt;br&gt;&lt;b&gt;Auction&lt;/b&gt;&lt;br&gt;- auto / car, house&lt;br&gt;&lt;br&gt;&lt;b&gt;Computer / PC&lt;/b&gt;&lt;br&gt;- hardware (components), memory, gaming, support, repair, cheap&lt;br&gt;&lt;br&gt;&lt;b&gt;Video&lt;/b&gt;&lt;br&gt;- how-to, YouTube converter&lt;br&gt;&lt;br&gt;&lt;b&gt;Weather / Climate&lt;/b&gt;&lt;br&gt;- current, 10 day forecast, radar, national, 5 day forecast, extremes, almanac, precipitation&lt;br&gt;&lt;br&gt;&lt;b&gt;SEO / Marketing&lt;/b&gt;&lt;br&gt;- services, optimization, software / tools, email marketing, viral marketing&lt;br&gt;&lt;br&gt;&lt;b&gt;Diet&lt;/b&gt;&lt;br&gt;- protein, weight loss, recipes, detox, menu, diabetic&lt;br&gt;&lt;br&gt;&lt;b&gt;Hosting&lt;/b&gt;&lt;br&gt;- web hosting, email, best, php, windows, UK&lt;br&gt;&lt;br&gt;&lt;b&gt;Network&lt;/b&gt;&lt;br&gt;- printer, wireless, management software, monitoring&lt;br&gt;&lt;br&gt;&lt;b&gt;Custom&lt;/b&gt;&lt;br&gt;- shirts, promotional products&lt;br&gt;&lt;br&gt;&lt;b&gt;Deal&lt;/b&gt;&lt;br&gt;- travel / last minute, laptop, digital camera&lt;br&gt;&lt;br&gt;&lt;b&gt;Screen&lt;/b&gt;&lt;br&gt;- LCD / flat, screen capture, boot screen&lt;br&gt;&lt;br&gt;&lt;b&gt;Edit&lt;/b&gt;&lt;br&gt;- video editing software, photo editing, regedit, text editor&lt;br&gt;&lt;br&gt;I can already think of some ideas for software products...&lt;br&gt;&lt;ol&gt;&lt;li&gt;A mobile PUA organizer app equipped with the latest gambits from the seduction community&lt;/li&gt;&lt;li&gt;A master online &amp;amp; mobile financial planner, including rent vs. mortgage, investment strategies, currency converter, etc.&lt;/li&gt;&lt;li&gt;A video editing &amp;amp; conversion app with screen capture support (BAM!), with seamless support for YouTube &amp;amp; DVD output format&lt;/li&gt;&lt;li&gt;A simple DJ software for mobile phones&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=c7d3fdc3-2e8e-4384-9605-c38d62cc354f"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,c7d3fdc3-2e8e-4384-9605-c38d62cc354f.aspx</comments>
      <category>Commentary</category>
      <category>Personal</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=e2b335fd-8fef-41c2-91fc-fe843224b473</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,e2b335fd-8fef-41c2-91fc-fe843224b473.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,e2b335fd-8fef-41c2-91fc-fe843224b473.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e2b335fd-8fef-41c2-91fc-fe843224b473</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>iPad: Perfect for people who fear computers</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,e2b335fd-8fef-41c2-91fc-fe843224b473.aspx</guid>
      <link>http://www.dacris.com/blog/2010/04/17/iPadPerfectForPeopleWhoFearComputers.aspx</link>
      <pubDate>Sat, 17 Apr 2010 17:29:25 GMT</pubDate>
      <description>&lt;div&gt;Apple introduced the iPad a few weeks ago, and while I almost vowed never to write an Apple-related article, I feel that the iPad is something I must write about, despite how much I hate Apple's non-free approach to ISVs. Sure, Apple's app store is highly restrictive and they've cut out large ISVs like Adobe, but the iPad is so revolutionary that I need to talk about it despite all of its shortcomings. Bash it all you want, but the iPad is a new category of personal computer. Plain and simple. Thanks to its large screen, it enables all the features of a full-sized computer without the scary aspects of viruses or configuration.&lt;br&gt;&lt;br&gt;The iPad's interface is a move beyond the desktop metaphor that is easier to interact with and much cleaner. The move can be compared to the evolution from console interfaces to WYSIWYG ("desktop") interfaces. That move is now considered revolutionary. In the same way, I consider the iPad to be revolutionary. It introduces an interface metaphor that is revolutionary compared to the desktop metaphor.&lt;br&gt;&lt;br&gt;While WYSIWYG interfaces have been around since the late 1960s, it was not until Apple introduced the interface in the 1980s that the GUI/WYSIWYG interface (a.k.a. the desktop metaphor) took off. In the same way today, Apple has introduced a new interface: the touch-screen interface. This interface was in fact introduced with the iPhone and has already proved to be hugely successful.&lt;br&gt;&lt;br&gt;&lt;b&gt;The Problem with Desktop Interfaces&lt;/b&gt;&lt;br&gt;&lt;br&gt;The main problem with the desktop metaphor is that it is non-intuitive. 
It's a sort of remote-control interface for your PC. You use the mouse 
to move a cursor on the screen. In a sense, the mouse is just like a 
remote control. You do not "feel" the UI elements. Furthermore, you have
 all sorts of equipment just to interact with your PC. Indeed, the 
desktop PC is a very complex device, consisting of two input devices 
(mouse &amp;amp; keyboard), a strictly-output device (the monitor), and the 
PC itself (a big box that just sits there &amp;amp; makes funny noises).&lt;br&gt;
&lt;br&gt;Now let us examine the touch screen as an input (and output) device. It was first developed several decades ago. Some would argue it's been around since the 1980s, but it has not taken off until recently. In fact, the original Tablet PC by Microsoft was probably the first mainstream touch-screen device. It was introduced less than a decade ago. Since then, we've seen an explosion in touch-screen devices.&lt;br&gt;&lt;br&gt;Ironically, Microsoft was the first company to introduce the touch screen to the mainstream. However, they were continuing to use the old desktop metaphor. The problem was that the input devices were no longer the same: the mouse was gone, and the keyboard became an on-screen keyboard. Thus, the desktop metaphor lost its efficiency and actually became harder to use on a touch screen than on a regular PC. This is why the Tablet PC failed.&lt;br&gt;&lt;br&gt;&lt;b&gt;The Solution: iPad&lt;/b&gt;&lt;br&gt;&lt;br&gt;Apple has always been the first to introduce &lt;i&gt;successful&lt;/i&gt; new interfaces in the computing industry (notice I said "introduce," not "invent.") With the hugely-successful iPhone, Apple stumbled upon a new user interface paradigm that was different from the traditional desktop paradigm. This new paradigm was much better suited to touch-screen devices. People who had previously shunned computers were now using apps and playing games on the new iPhone. The iPhone is effectively a computer. The only thing it lacks is a keyboard and a mouse.&lt;br&gt;&lt;br&gt;Now, while the iPhone was enormously successful and proved to the world that the computer could still evolve, there were things that the iPhone still could not do simply due to its small screen size. Thus, the iPad was introduced, providing a larger form factor for the same interface that the iPhone popularized. A new PC was thus truly born.&lt;br&gt;&lt;br&gt;&lt;b&gt;Computing Made Accessible&lt;/b&gt;&lt;br&gt;&lt;br&gt;Every great invention is initially ridiculed &amp;amp; vehemently denied. It is then, much later, accepted as self-evident. The same is the case for the iPad. It may not seem that revolutionary now, but the iPad is truly the next phase in the evolution of the PC. At last, we can move away from the mouse &amp;amp; keyboard and embrace touch screens. The new touch screen paradigm will make computers more accessible to a larger percentage of the population, facilitating the demise of print media and television/radio.&lt;br&gt;&lt;br&gt;The iPad is much like Apple's Lisa - a journey into the unknown. It is a very rudimentary, unpolished product. Fundamentally, it's just a proof of concept. Ultimately, I expect that future generations of the iPad, along with new devices from competitors like Microsoft and Google, will demonstrate that the PC is still evolving and that the touch-screen tablet is just another successful move forward for the PC.&lt;br&gt;&lt;br&gt;To the iPad bashers, I say, this device is probably not for you. But regardless, this device will make computing much more accessible to people who are not computer-savvy. While you can do anything with your PC (because you're a geek), for a lot of people the PC is still a mysterious device about which they know very little. These people will benefit greatly from a device that is much easier to learn and enables them to avoid the mysterious aura surrounding the traditional desktop PC.&lt;br&gt;&lt;br&gt;&lt;b&gt;The Future of the Desktop&lt;/b&gt;&lt;br&gt;&lt;br&gt;Any article about the iPad would be incomplete without discussing the future of the traditional desktop PC. I believe the desktop PC will continue to exist for a long time. However, it will gradually transition from being an entertainment device back to being a business/productivity workstation. Basically, the desktop PC has many uses that touch-screen devices cannot replace. For example, if you're a graphic designer, you need the precision of a mouse in order to produce good artwork. If you're a programmer or writer, you need the speed of a real keyboard in order to type efficiently. These uses are likely not going to be replaced by touch-screen PCs.&lt;br&gt;&lt;br&gt;I expect that the long term impact of the touch screen device will be that it reduces demand for traditional PCs somewhat. People who are somewhat afraid of a full-blown PC and only really use their PC for email &amp;amp; web browsing will opt to go with the touch-screen PC rather than the traditional PC. However, the reduction in demand for traditional PCs will be very small, since many people will likely purchase both - a traditional PC as well as a touch-screen PC.&lt;br&gt;&lt;br&gt;There is no point in getting worried about the future of the desktop PC. The two types of PCs will coexist for a very long time, just like laptops &amp;amp; desktops have already coexisted for several decades with no ill effects. In fact, the biggest effect that the touch-screen PC will have on the overall PC market will be an expansionary one: the overall PC market (including all form factors) will actually expand significantly thanks to the now successful introduction of the touch-screen PC.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=e2b335fd-8fef-41c2-91fc-fe843224b473"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,e2b335fd-8fef-41c2-91fc-fe843224b473.aspx</comments>
      <category>Commentary</category>
      <category>History</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=1b47f6df-d1a8-443f-9fff-ba4831fee87c</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,1b47f6df-d1a8-443f-9fff-ba4831fee87c.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,1b47f6df-d1a8-443f-9fff-ba4831fee87c.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1b47f6df-d1a8-443f-9fff-ba4831fee87c</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Why C++ Sucks (Part 2)</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,1b47f6df-d1a8-443f-9fff-ba4831fee87c.aspx</guid>
      <link>http://www.dacris.com/blog/2010/02/16/WhyCSucksPart2.aspx</link>
      <pubDate>Tue, 16 Feb 2010 02:41:33 GMT</pubDate>
      <description>&lt;div&gt;&lt;b&gt;Recap&lt;/b&gt;&lt;br&gt;&lt;br&gt;First of all, let me clarify that I think C is a great language and excellent for the development of low-level system software. I think C++, specifically, adds an extra unnecessary layer of complexity which makes it less suitable for low-level work but in some cases it's the only option. I would readily choose C over C++ for low-level software projects (e.g. drivers).&lt;br&gt;&lt;br&gt;When dealing with C code, I would aim to write as little code in C as possible and provide an interface for writing the remainder of my code in another "safer" language, such as C# or Java. By "safe" here I mean something that is detached from the OS, so that it has a lower risk of corrupting the system's memory or file system upon failure. Again, C# and Java run in virtual machines which provide an extra layer of safety should things go horribly horribly wrong. The layer of safety may not be perfect, but it's better than having no layer of safety at all.&lt;br&gt;&lt;br&gt;Also, when I said &lt;a href="http://www.dacris.com/blog/2009/02/10/WhyCSucksSortOf.aspx"&gt;C++ sucks (sort of)&lt;/a&gt;, I meant that C++ sucks for most types of applications (e.g. GUI or web applications). There are some cases where C++ is a decent choice, but those cases are rare and limited in scope. For the most part, C++ is just plain awful, because it consumes more time and produces more lines of code than either C# or Java. It also induces programmers to produce substandard code and has the inherent property of creating very difficult-to-debug code.&lt;br&gt;&lt;br&gt;There are certainly cases where using C++ is unavoidable. When such a case 
arises, it does not usually mean that C++ as a language is in some 
way superior. It just means that C++ is not completely useless. I still 
write C++ code occasionally, because I have to.&lt;br&gt;&lt;br&gt;&lt;b&gt;The Debate Goes On&lt;/b&gt;&lt;br&gt;&lt;br&gt;Recently I came across an article that &lt;a href="http://efxam.blogspot.com/2009/10/why-c-doesnt-suck.html"&gt;attempts to refute my claim&lt;/a&gt; that, in most cases, C++ sucks.&lt;br&gt;&lt;br&gt;I have a couple of remarks related to that article:&lt;br&gt;&lt;br&gt;"What do you do when writing cross-platform code in C and you need to make heavy use of the filesystem?"&lt;br&gt;&lt;br&gt;I assume by "heavy use" here you mean low-level operations. In that case, you need to make a file system driver in C (or whatever language the OS supports for drivers) and expose APIs that can easily be called from a higher-level Java or C# client application. Again, minimize the integration between high-level application code and low-level driver code.&lt;br&gt;&lt;br&gt;"On that note, nobody, and I mean nobody should be using C++ without Boost"&lt;br&gt;&lt;br&gt;If that is the case, why is Boost not a feature of C++? Maybe it will make its way into C++0x? The very fact that Boost exists indicates that C++ is a deficient language. Boost is merely a patch over those deficiencies. And when I talk about C++, I'm also referring to the standard library as well as the language itself.&lt;br&gt;&lt;br&gt;"I guess the author has never worked on embedded software or real time systems. Or games for that matter. Or I guess anything other than canned business software."&lt;br&gt;&lt;br&gt;Actually I have built games using DirectX in the past. I can confidently say that C++ was not needed for any feature. Given the extra time that C++ adds to the development of any app, being able to use any other language (and minimize the use of C++) is quite important.&lt;br&gt;Here is a simple 3D demo I built with OpenGL and Java in 4 intensive days of coding: &lt;a href="http://www.dacris.com/article.aspx?name=demos"&gt;http://www.dacris.com/article.aspx?name=demos&lt;/a&gt;. I probably would not have been able to perform such a feat with C++.&lt;br&gt;&lt;br&gt;"C++ has a keyword called sizeof() that lets you determine how big a pointer is."&lt;br&gt;&lt;br&gt;Again, that's nice, but I'd rather not use pointers and not write sizeof() statements all over the place. The time I save by not thinking about pointers (and by not reading code that contains pointers) is enormous.&lt;br&gt;&lt;br&gt;"Perhaps an even better answer is in order though. I won't use any Gui toolkit, because I won't develop GUI code in C++. Why would I use the language for something which it doesn't excel at?"&lt;br&gt;&lt;br&gt;Exactly. If you're content with building console applications, use C++. No problem. But for any kind of UI, C++ just sucks.&lt;br&gt;&lt;br&gt;"C++ has a very strong, flexible type system."&lt;br&gt;&lt;br&gt;Flexible, yes. But the problem is it's also lacking some very useful features compared to C# or Java. For example, how do you enumerate a class's fields or properties in C++? How do you detect that class A inherits class B at runtime, or get an object's type at runtime? In C# this is called "reflection." There is nothing like it in C++. For this reason, it's very difficult to do generalized serialization in C++. In C# and Java you can literally serialize any type.&lt;br&gt;&lt;br&gt;"Code generation"&lt;br&gt;&lt;br&gt;I can't think of any reason why you would ever want this. Macros and templates are a symptom of bad design. Instead of using code generation to deal with repetitive code, why not build a reusable component? Generated code is hard to maintain, hard to understand, hard to verify, and hard to debug.&lt;br&gt;&lt;br&gt;&lt;b&gt;Write as Little Code as Possible&lt;/b&gt;&lt;br&gt;&lt;br&gt;Let me end by saying, I'm not a "substandard programmer." I'm merely a lazy programmer. I like to write as little code as possible. I keep track of the lines of code in all my projects, to make sure that number stays low. I guess if I was paid by KLOC I'd be pretty broke.&lt;b&gt;&lt;/b&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=1b47f6df-d1a8-443f-9fff-ba4831fee87c"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,1b47f6df-d1a8-443f-9fff-ba4831fee87c.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>Personal</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=909aa9d6-114a-49c8-9c77-149affb59f03</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,909aa9d6-114a-49c8-9c77-149affb59f03.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,909aa9d6-114a-49c8-9c77-149affb59f03.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=909aa9d6-114a-49c8-9c77-149affb59f03</wfw:commentRss>
      <title>Windows 7 on Older PCs</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,909aa9d6-114a-49c8-9c77-149affb59f03.aspx</guid>
      <link>http://www.dacris.com/blog/2010/01/17/Windows7OnOlderPCs.aspx</link>
      <pubDate>Sun, 17 Jan 2010 19:24:58 GMT</pubDate>
      <description>&lt;div&gt;I would like to take this opportunity to encourage users of old PCs (pre-2005) to &lt;b&gt;take extra precautionary steps&lt;/b&gt; before installing Windows 7.&lt;br&gt;&lt;br&gt;Otherwise, you could end up&lt;b&gt; baking&lt;/b&gt; your hardware. Yes, baking, in the oven.&lt;br&gt;&lt;br&gt;&lt;b&gt;How I ended up baking my laptop:&lt;/b&gt;&lt;br&gt;&lt;br&gt;I installed Windows 7 on an older Toshiba laptop (from 2004) with a GeForce Go 5200 graphics card. First, it was not recognized - Windows 7 actually decided to use the Standard VGA Adapter driver for the card, which forced me down to 1024x768 resolution and extremely slow rendering. Well, I decided to look for a driver. Toshiba didn't have one on their site, NVIDIA no longer supports the 5xxx series, so I ended up finding a shaky third-party (modded) driver and modded it a bit myself to get it to actually recognize my card.&lt;br&gt;&lt;br&gt;So after all that, I installed the custom modded driver and it seemed to work great at first: I even had Aero Glass! But little did I know there was a major problem lurking in the shadows... A few days after installing the new driver, I start up the laptop and it starts displaying columns of random flashing characters (at the BIOS screen). Immediately I concluded that this was a video card problem - it had happened to me before, with a GeForce 4 Ti4200 card.&lt;br&gt;&lt;br&gt;Great, so now I had a dead video card. I looked around the web for people who had experienced the same problem, and found one who took his laptop to a repair shop and the technicians there diagnosed it as a "BGA failure." So I looked for BGA-related problems and found what seemed to be a re-occurring theme on various forums: "bake at 375*F for 5-10 mins". Surprisingly, those who tried it said it actually worked!&lt;br&gt;&lt;br&gt;But how does it work? The BGA (Ball Grid Array) is what a video chip is most often connected to. This thing is just an array of tiny balls of solder that can melt at very low temperatures (even 120*C). When the video chip gets insanely hot (like over 100*C), it can warp the BGA so much that the chip disconnects from the balls and you end up with the problem I had (random characters at the BIOS screen). The solution, apparently, is to heat up the entire PCB (in this case the motherboard) evenly at a high temperature, so that the solder melts and reattaches itself to the chip. The prescription, in my case, was to bake at 375*F for 7 minutes.&lt;br&gt;&lt;br&gt;Of course, I had to remove anything that might melt or explode - like batteries. I made sure to remove even the CMOS battery and remove all attachable parts (RAM, hard drive, etc.). I only baked the actual motherboard. But at the end, it worked! The video is fixed now, thanks to BGA baking!&lt;br&gt;&lt;br&gt;The problem was caused by Aero Glass overheating my card. I'm 99.9% sure of it. And I'm also 99.9% sure that's why NVIDIA doesn't have any official Vista / 7 drivers for it. So immediately when I booted up my laptop after baking, I booted straight into Safe Mode, removed the graphics driver, and rebooted into Windows 7. Then, I reinstalled the graphics driver and made sure I was on the &lt;b&gt;Windows 7 Basic&lt;/b&gt; theme, without Aero Glass. I also disabled the DWM service, so that there is no freak occurrence where Aero Glass gets re-enabled.&lt;br&gt;&lt;br&gt;&lt;b&gt;Precautionary steps that would've saved my behind:&lt;/b&gt;&lt;br&gt;&lt;br&gt;Like I was saying, with Windows 7 on older hardware it's very important to take a few extra precautionary steps:&lt;br&gt;&lt;ol&gt;&lt;li&gt;Run the &lt;b&gt;Windows 7 Upgrade Advisor&lt;/b&gt;. Ensure that your essential hardware (the stuff you can't boot up without) is supported.&lt;/li&gt;&lt;li&gt;Take an inventory of your hardware. For me, the easiest way to do this was to just run &lt;a href="http://www.dacris.com"&gt;&lt;b&gt;Dacris Benchmarks&lt;/b&gt;&lt;/a&gt; (version 8.0) and create an HTML report under the System Information tab. This makes it much easier to find drivers online when everything in Device Manager is listed as "Unknown." But, if you have perfect memory, you don't need to do this.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Make sure you download any necessary network adapter drivers before you install Windows 7. Otherwise, you won't have Internet access. Usually the Windows 7 Upgrade Advisor will tell you if you need to do this, but do it even if it doesn't tell you - just in case - unless you have another PC connected to the Internet and a USB key.&lt;/li&gt;&lt;li&gt;For hardware that is shown as not compatible in Windows 7 Upgrade Advisor, try to find official Windows Vista drivers for it. If no official Windows Vista drivers exist, and the device is essential, you may want to reconsider upgrading to Windows 7.&lt;/li&gt;&lt;li&gt;For software that is shown as not compatible in Windows 7 Upgrade Advisor, try to find a newer version online that supports Windows Vista. If no such version exists, and the software is essential, you can still upgrade to Windows 7 but the software will probably need to be run in &lt;b&gt;XP Mode&lt;/b&gt;. While XP mode is great, there are some things it can't do - like Direct3D. So if the software in question is a game, you may want to keep Windows XP. In that case, I would recommend dual-booting Windows 7 and Windows XP.&lt;/li&gt;&lt;/ol&gt;Now, in fairness, I couldn't have run the Windows 7 Upgrade Advisor on that Toshiba laptop I mentioned, because it had no working OS at the time (the reason I installed Windows 7 was because XP died). I should've really just reinstalled XP and then run the Windows 7 Upgrade Advisor.&lt;br&gt;&lt;br&gt;&lt;b&gt;A side note - hardware manufacturers (especially NVIDIA) have failed us:&lt;/b&gt;&lt;br&gt;&lt;br&gt;While I was thinking about baking my graphics card, I had a thought: was it really the fact that Vista had such a different driver model that caused hardware manufacturers to produce unreliable drivers? Did hardware manufacturers really not have enough time to adapt to Vista? I remember Microsoft in 2005 mentioned that any PC made in 2005 or later would be able to run Windows Vista. So hardware manufacturers in fact had &lt;b&gt;2 years&lt;/b&gt; to produce Vista drivers. The Vista development cycle lasted 5 years. Plenty of time for IHVs to get involved, learn the Vista driver model, and develop drivers in consultation with Microsoft.&lt;br&gt;&lt;br&gt;So who really failed here? Microsoft? Was NVIDIA's discontinuation of support for the GeForce 5xxx line a Microsoft decision? Who is to blame for NVIDIA's inability to produce drivers? I would say it's NVIDIA that's to blame here. I've had so many NVIDIA cards fail on me: I witnessed a friend's NVIDIA card go up in flames, literally, then my own NVIDIA card did the same thing! Then, I had an older NVIDIA GeForce 4 Ti card that died with the classic BGA failure, then I had this latest failure: another NVIDIA card. That's four NVIDIA cards, three of which were mine. So out of all the NVIDIA cards I've ever had (about 5), only two remain. Now, I've had my share of ATI cards (roughly 5) and not a single one has ever failed. Not one.&lt;br&gt;&lt;br&gt;Sorry NVIDIA, but I'm afraid I must buy ATI cards from now on. Sure, NVIDIA's drivers are more polished, and sometimes NVIDIA wins in terms of performance, but the cards rarely last very long. I would urge anyone who is thinking of purchasing an NVIDIA card to think twice and consider the ATI alternative, and think of which card you'd most likely have to bake. Now, of course, if you like baking, NVIDIA is your friend. :)&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=909aa9d6-114a-49c8-9c77-149affb59f03"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,909aa9d6-114a-49c8-9c77-149affb59f03.aspx</comments>
      <category>Commentary</category>
      <category>History</category>
      <category>Personal</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=cb912c13-ef43-4ecc-88e1-3ef3f7ac283c</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,cb912c13-ef43-4ecc-88e1-3ef3f7ac283c.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,cb912c13-ef43-4ecc-88e1-3ef3f7ac283c.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cb912c13-ef43-4ecc-88e1-3ef3f7ac283c</wfw:commentRss>
      <title>Windows 7 Smartphone to be Revealed at Mobile World Congress</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,cb912c13-ef43-4ecc-88e1-3ef3f7ac283c.aspx</guid>
      <link>http://www.dacris.com/blog/2010/01/16/Windows7SmartphoneToBeRevealedAtMobileWorldCongress.aspx</link>
      <pubDate>Sat, 16 Jan 2010 04:26:41 GMT</pubDate>
      <description>&lt;div&gt;Microsoft is keeping unusually quiet about their mobile strategy these days. From the various stories I've been reading on the Internets, it looks like MSFT is set to announce a major breakthrough at the Mobile World Congress next month that has the potential to be an iPhone killer.&lt;br&gt;&lt;br&gt;&lt;b&gt;My prediction:&lt;/b&gt; The first Windows 7 smartphone will be announced at the Mobile World Congress, along with APIs for smartphone programming on Windows 7 that match the APIs provided by Apple for the iPhone.&lt;br&gt;&lt;br&gt;But, we'll just have to see...&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=cb912c13-ef43-4ecc-88e1-3ef3f7ac283c"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,cb912c13-ef43-4ecc-88e1-3ef3f7ac283c.aspx</comments>
      <category>Commentary</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=dd2b466b-9bc6-41da-80ae-b929d91c2e93</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,dd2b466b-9bc6-41da-80ae-b929d91c2e93.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,dd2b466b-9bc6-41da-80ae-b929d91c2e93.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=dd2b466b-9bc6-41da-80ae-b929d91c2e93</wfw:commentRss>
      <title>Technology Innovations of the Last Decade</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,dd2b466b-9bc6-41da-80ae-b929d91c2e93.aspx</guid>
      <link>http://www.dacris.com/blog/2010/01/09/TechnologyInnovationsOfTheLastDecade.aspx</link>
      <pubDate>Sat, 09 Jan 2010 05:28:05 GMT</pubDate>
      <description>&lt;div&gt;&lt;b&gt;KEY TECHNOLOGY INNOVATIONS OF THE 2000s THAT MOST OF US USE EVERY DAY:&lt;/b&gt;&lt;br&gt;- LCD monitors and TVs&lt;br&gt;- Solid State Drives (SSDs)&lt;br&gt;- Cloud computing&lt;br&gt;- Wireless networking (WiFi/802.11g)&lt;br&gt;- Multi-core processors&lt;br&gt;- USB flash drives&lt;br&gt;- Streaming audio / video&lt;br&gt;- Torrents&lt;br&gt;- Online game consoles&lt;br&gt;- Touch screens&lt;br&gt;- Bluetooth&lt;br&gt;&lt;br&gt;&lt;b&gt;KEY TECHNOLOGIES THAT DIED IN THE 2000s:&lt;/b&gt;&lt;br&gt;- Floppy disks&lt;br&gt;- CRT displays&lt;br&gt;- Modems&lt;br&gt;- DOS games&lt;br&gt;- VHS tapes&lt;br&gt;&lt;br&gt;&lt;b&gt;PREDICTED TRENDS FOR 2010s:&lt;/b&gt;&lt;br&gt;- Software development re-focuses on hardware limitations &amp;amp; performance optimization (yes, hardware is still very limited!)&lt;br&gt;- Streaming 3D - enormous worlds with terabytes of content loaded from the web in real-time on your mobile phone or gaming console&lt;br&gt;- Pen-like computers &amp;amp; 3D glasses - this is the next logical combination of input/output devices overtaking the old PC &amp;amp; monitor&lt;br&gt;- Popular novels become 3D-ified - entertainment now puts YOU in an immersive 3D world of fantasy - be on Mars battling aliens&lt;br&gt;- Enhanced vision - while you wear 3D glasses, your PC will see the real world for you in many ways: real, infrared, X-ray, and so on&lt;br&gt;- The OpenWorld3D project: a perfect online replica of the entire Earth as a 3D world (with buildings, streets, cars, weather, etc.)&lt;br&gt;- Collaborative 3D modeling online - 3D model wikis are born: allowing the online community to build 3D models collaboratively, online&lt;br&gt;- 3D will be THE buzzword of the decade, like "online" was for the last decade; expect highly immersive &amp;amp; realistic 3D worlds&lt;br&gt;- Flexible paperlike screens allow creation of rollable (and maybe even foldable) tablet PCs and phones - OLED will make this happen&lt;br&gt;- The data web: a computer-friendly version of the entire world wide web, allowing greater sharing of data between sites&lt;br&gt;- The Internet goes 3D: toward the end of the decade, expect more and more websites to be full-blown 3D worlds&lt;br&gt;&lt;br&gt;Quick! How many times did I mention 3D?&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=dd2b466b-9bc6-41da-80ae-b929d91c2e93"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,dd2b466b-9bc6-41da-80ae-b929d91c2e93.aspx</comments>
      <category>Commentary</category>
      <category>History</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=a49454c2-db0f-47ae-b5d8-0b0acfe764b2</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,a49454c2-db0f-47ae-b5d8-0b0acfe764b2.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,a49454c2-db0f-47ae-b5d8-0b0acfe764b2.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a49454c2-db0f-47ae-b5d8-0b0acfe764b2</wfw:commentRss>
      <title>Philosophical Bull and Gnostic Brain Flatulence</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,a49454c2-db0f-47ae-b5d8-0b0acfe764b2.aspx</guid>
      <link>http://www.dacris.com/blog/2009/12/27/PhilosophicalBullAndGnosticBrainFlatulence.aspx</link>
      <pubDate>Sun, 27 Dec 2009 09:38:11 GMT</pubDate>
      <description>&lt;div&gt;Is time linear?&lt;br&gt;Does every interval of time contain the same amount of information?&lt;br&gt;What does time contain anyway?&lt;br&gt;&lt;br&gt;Time is a container for change. Time contains the delta between one state of the cosmos and another. Each finite interval of time contains within it the amount of change that has occurred from the beginning of that interval to the end of that interval.&lt;br&gt;&lt;br&gt;In a sense, change is novelty and novelty is change. Novelty is merely a synonym for change. So when we think about novelty theory, to refer back to the work of Terence McKenna, we're really analyzing the content of time.&lt;br&gt;&lt;br&gt;We know that the content of space is matter, and energy. But what is the content of time? It's a perplexing question for those who cannot see the logical conclusion that time in fact contains information. For it is information that informs change. Information is nothing other than change, and change is information. Novelty is therefore information. We're running around in circles describing the same phenomenon with different words, each word trying to out-grandiose the others.&lt;br&gt;&lt;br&gt;But the fact is simple and yet stunning: Time contains information, much like how space contains matter.&lt;br&gt;&lt;br&gt;Now, we know another interesting fact from basic observation of the world around us, and that is that information is cumulative. You never lose information. This has been elaborated by Terence McKenna as well. Essentially, the fabric of time itself is cumulative. At every stage in the evolution of the universe, we have gone from a state of low complexity to a state of higher complexity. We've never "devolved" into a state of lower complexity. Complexity has always increased.&lt;br&gt;&lt;br&gt;Well, what is complexity? First, it helps to understand how we obtain complexity. At the start of our universe, if we accept the big bang theory, the highest level of complexity in the universe was characterized by a primordial soup of electrons and elementary particles. From that evolved the first atom, clearly a structure with an order far more advanced than what had existed prior to its emergence out of the primordial ontos.&lt;br&gt;&lt;br&gt;Now, this first atom, the hydrogen atom, contained a whole lot more information than its parts, or even the sum of its parts. Because the hydrogen atom has a logical structure far more elaborate than the logical structure which represents an electron. Indeed, it is this logical structure that we must talk about when we're talking about complexity and information. The hydrogen atom is an entity which requires far more information to describe than the electron or the proton alone. So basically, the primordial soup required a very small amount of meta-data (meta-information, or logical structure) to describe, compared to what followed (i.e. the hydrogen atom). This is where we get the notion of increasing complexity. Complexity is the measure of the quantity of information required to produce the &lt;b&gt;simplest possible explanation&lt;/b&gt; of a particular physical phenomenon.&lt;br&gt;&lt;br&gt;As the universe evolved further, we got more and more complex structures. We got other atoms, molecules, organic compounds, and then biological life, and finally social life; intelligent life. Each of these complexities builds on the previous level of complexity. Molecules build on atoms. Social life (cultural or intelligent life) builds on acultural, biological life. Microbial life builds on essential organic compounds. In essence, each new level of complexity contains within it all existing levels of complexity.&lt;br&gt;&lt;br&gt;Thus, complexity is conserved. We can in fact emphatically state that complexity is never destroyed. It is strictly conserved.&lt;br&gt;&lt;br&gt;So what does this all imply for the nature of time? Well, time contains within it descriptions of changes within entities of varying complexity. At the beginning of the universe, each second of time contained a only a very minute description of changes, because only a minute description was needed for the level of complexity at which the universe had arrived at that time. Basically, God only needed a handful of bits of information to describe a change in the state of the universe when the universe was still in its primordial soup state.&lt;br&gt;&lt;br&gt;As the universe complexified, necessarily the amount of information contained within each second of time needed to increase, in order to completely describe the more complex universe that was emerging. Basically, each level of complexity required more information about the changes within that level of complexity.&lt;br&gt;&lt;br&gt;Thus, as the universe cooled and complexified, time became more and more burdened with information, so that each moment of passing time contained within it more information than the previous moment.&lt;br&gt;&lt;br&gt;This process continued to this day. With every passing moment, time "expands" to contain more information than any previous moment that has ever existed. This is a profound concept to grasp, with profound consequences for our perception of time. It means that our linear time assumption, the assumption that time is isotropic and linear - that each moment is the same as every other moment, and that each interval of time is qualitatively and quantitatively the same as every other interval - is absolutely patently false and misleading.&lt;br&gt;&lt;br&gt;We have to ditch the idea that time is somehow plain, linear, and uninteresting. Time is extremely interesting, and ought to be studied by science like nothing else, because we don't have a sufficiently clear understanding of the nature of time.&lt;br&gt;&lt;br&gt;But the interesting implications of this "expanding time" theory are many. This theory actually validates intuitively-derived beliefs in many cultures that time is accelerating, or that time is heading towards an ultimate end. In fact, even modern science has managed to create a theory mainly involving human culture and cultural progress which indicates that there may be a point in the not too distant future where all of our knowledge, having been preserved thanks to the law of conservation of complexity, leads to a point of infinite temporal acceleration - a point of asymptotic discovery and asymptotic change, putting an end to time itself. Indeed, this very idea has been prophesied by others, including the ancient Mayans with their apocalyptic 2012 prophecy, or the Christians, or even modern-day prophets like Terence McKenna, although I'm sure he would despise being called a "prophet."&lt;br&gt;&lt;br&gt;We must challenge all of our dearly-held assumptions about time or else we will not proceed to make true scientific discoveries. Today, we carry notions about time that are akin to believing that the Earth is flat or that it sits atop the backs of four turtles. For example, we believe that causal connections can only exist from the past to the future. We have established one predetermined direction for causality. Yet, we can clearly observe retrocausal effects all around us that seem to defy the laws of physics and all too often get classed as mere coincidences or worse, paranormal phenomena. In fact, such occurrences should be observed experimentally and we should try to develop a theory for explaining such retrocausal phenomena as the appearance of 9-11 as a motif in various artifacts well in advance of the actual event which occurred on 9-11-2001. Other retrocausal phenomena include such cases as the flight of animals to safety prior to a devastating tsunami or earthquake. Anything that is often classed as premonition or prophecy ought to be investigated as a potential candidate for retrocausality - events from the future having causal links to events in the past. It's crazy to think that the future could have a causal influence on the past, as it means that the past is now just as malleable or perhaps more malleable than the future!&lt;br&gt;&lt;br&gt;Anyway, I hope I've been able to shed some light on the strange nature of time and why what we humans often think is obvious is really not so.&lt;br&gt;&lt;br&gt;I could probably talk further here but instead I think I need to actually summarize what I described:&lt;br&gt;&lt;ol&gt;&lt;li&gt;Time is a container for... change in information, also known as novelty. Necessarily, then, time has at least two dimensions.&lt;/li&gt;&lt;li&gt;Complexity is conserved. Each new level of complexity builds on lower levels. Complexity is never destroyed or reduced.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Time is non-linear and quite probably anisotropic.&lt;/li&gt;&lt;li&gt;Time is expanding, with each one-second interval containing more information than any previous one-second interval. This is subjectively perceived as an acceleration.&lt;br&gt;&lt;/li&gt;&lt;li&gt;There may be an endpoint for time, consisting of an asymptotic acceleration of the rate of progress toward infinite complexity.&lt;/li&gt;&lt;li&gt;Causality probably works both ways, even if it seems odd to us. Retrocausality seems to explain perfectly the phenomenon of prescience in some organisms.&lt;/li&gt;&lt;/ol&gt;Bend your mind, but be careful not to break it!&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=a49454c2-db0f-47ae-b5d8-0b0acfe764b2"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,a49454c2-db0f-47ae-b5d8-0b0acfe764b2.aspx</comments>
      <category>Commentary</category>
      <category>History</category>
      <category>Personal</category>
      <category>Science</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=2742a47f-5d71-454e-b2c5-c3f6d7726f2e</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,2742a47f-5d71-454e-b2c5-c3f6d7726f2e.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,2742a47f-5d71-454e-b2c5-c3f6d7726f2e.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2742a47f-5d71-454e-b2c5-c3f6d7726f2e</wfw:commentRss>
      <title>IE 9: Will it be enough to make me switch from Firefox?</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,2742a47f-5d71-454e-b2c5-c3f6d7726f2e.aspx</guid>
      <link>http://www.dacris.com/blog/2009/12/22/IE9WillItBeEnoughToMakeMeSwitchFromFirefox.aspx</link>
      <pubDate>Tue, 22 Dec 2009 01:22:47 GMT</pubDate>
      <description>&lt;div&gt;Internet Explorer 9 will be coming out soon. It is going to have hardware-accelerated rendering of web pages. In essence, it will use the video card (instead of the CPU) to render web pages. This means much faster performance, awesome effects (even 3D), and less CPU usage.&lt;br&gt;&lt;br&gt;Channel 9 has posted a &lt;a href="http://channel9.msdn.com/posts/Charles/IE-9-Surfing-on-the-GPU-with-D2D/"&gt;demo of IE 9&lt;/a&gt;. The video shows some of the awesomeness of this new version of IE.&lt;br&gt;&lt;br&gt;So here are some highlights of what's coming:&lt;br&gt;&lt;ol&gt;&lt;li&gt;Web page rendering on the GPU (instead of CPU)&lt;/li&gt;&lt;li&gt;Better standards support&lt;/li&gt;&lt;li&gt;New JavaScript engine, &lt;a href="http://arstechnica.com/microsoft/news/2009/11/javascript-graphics-performance-improvements-on-tap-for-ie9.ars"&gt;with performance similar to Firefox&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;Here is a comparison of browser performance, from &lt;a href="http://arstechnica.com/microsoft/news/2009/11/javascript-graphics-performance-improvements-on-tap-for-ie9.ars"&gt;Ars Technica&lt;/a&gt;:&lt;br&gt;&lt;img src="http://app.dacris.com/temp/Dean_PDC_2.png"&gt;&lt;br&gt;As you can see, IE 9 is now on par with Firefox and Chrome.&lt;br&gt;&lt;br&gt;Not good news for Firefox. Or is it?&lt;br&gt;&lt;br&gt;It seems the Firefox people aren't sitting idly by. They're busy &lt;a href="http://tech.icrontic.com/news/mozilla-adds-hardware-acceleration-to-firefox-3-7/"&gt;implementing hardware accelerated rendering in Firefox 3.7&lt;/a&gt;.&lt;br&gt;&lt;br&gt;So it's certainly going to be an interesting competition between IE and Firefox. It looks like the browser wars are on again.&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=2742a47f-5d71-454e-b2c5-c3f6d7726f2e"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,2742a47f-5d71-454e-b2c5-c3f6d7726f2e.aspx</comments>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=6af5a1b2-4fe7-4c2d-acca-e0541f16e205</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,6af5a1b2-4fe7-4c2d-acca-e0541f16e205.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,6af5a1b2-4fe7-4c2d-acca-e0541f16e205.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6af5a1b2-4fe7-4c2d-acca-e0541f16e205</wfw:commentRss>
      <title>Windows 7 Phones: Addendum</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,6af5a1b2-4fe7-4c2d-acca-e0541f16e205.aspx</guid>
      <link>http://www.dacris.com/blog/2009/12/18/Windows7PhonesAddendum.aspx</link>
      <pubDate>Fri, 18 Dec 2009 01:26:35 GMT</pubDate>
      <description>&lt;div&gt;Not long after I posted my first topic outlining the idea of Windows 7 smart phones, I found this...&lt;br&gt;&lt;br&gt;&lt;a href="http://www.istartedsomething.com/20091124/razorfone-conceptual-windows7-wpf-multi-touch-retail/"&gt;Razorfone: A Conceptual Windows 7 &amp;amp; WPF-powered Multi-Touch Phone Retail Experience&lt;/a&gt;&lt;br&gt;&lt;br&gt;It looks like the idea of a Windows 7 phone is alive &amp;amp; well. While the "Razorfone" is a concept for retail environments (a kind of kiosk), it's nice to see others considering the idea of putting Windows 7 on phones.&lt;br&gt;&lt;br&gt;One more piece of good news on the mobile phone front:&lt;br&gt;&lt;br&gt;&lt;a href="http://www.nationalpost.com/news/story.html?id=2331650"&gt;WIND Mobile Takes Off - National Post&lt;/a&gt;&lt;br&gt;&lt;br&gt;WIND Mobile - www.windmobile.ca - has finally been given the green light in Canada. No longer will we be limited to the triopoly of Rogers/Bell/Telus. Hopefully, this means no more 3-year contracts and lower prices in general. Canada is the most backward country in the world when it comes to mobile phones, largely because of Rogers &amp;amp; Bell's huge political influence.&lt;br&gt;&lt;br&gt;I urge all who are upset about Rogers or Bell to check out WIND Mobile and consider switching over. Actually, I urge all to check out WIND Mobile. From what I can see, their plans are quite cheap and straightforward.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=6af5a1b2-4fe7-4c2d-acca-e0541f16e205"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,6af5a1b2-4fe7-4c2d-acca-e0541f16e205.aspx</comments>
      <category>Commentary</category>
      <category>News</category>
      <category>Personal</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=7e90196d-a58c-41aa-b1cb-f30923caf3c0</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,7e90196d-a58c-41aa-b1cb-f30923caf3c0.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,7e90196d-a58c-41aa-b1cb-f30923caf3c0.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7e90196d-a58c-41aa-b1cb-f30923caf3c0</wfw:commentRss>
      <title>64-bit Windows: The Definitive Guide</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,7e90196d-a58c-41aa-b1cb-f30923caf3c0.aspx</guid>
      <link>http://www.dacris.com/blog/2009/12/06/64bitWindowsTheDefinitiveGuide.aspx</link>
      <pubDate>Sun, 06 Dec 2009 01:20:09 GMT</pubDate>
      <description>&lt;div&gt;&lt;b&gt;1. How much memory does 32-bit Windows support?&lt;/b&gt;&lt;br&gt;&lt;br&gt;I'll try to explain this as simply as I possibly can...&lt;br&gt;&lt;br&gt;You can have as much as &lt;b&gt;64 GB of RAM&lt;/b&gt; with 32-bit Windows, but &lt;b&gt;there will be a hole between 3 GB and 4 GB&lt;/b&gt;.&lt;br&gt;&lt;br&gt;64 GB? Yes. How is that possible? Well, Intel processors for a long time have had a feature called PAE (Physical Address Extension) that adds another 4 bits to the 32-bit limit of Windows, making it effectively 36 bit.&lt;br&gt;&lt;br&gt;But...&lt;br&gt;A few caveats:&lt;br&gt;- If you have only 4 GB of RAM, you'll see just 3 GB because of the hole between 3 GB and 4 GB.&lt;br&gt;&lt;br&gt;- If your CPU doesn't have PAE, you're stuck with 3 GB as the limit. Go to My Computer - Properties (in XP) to verify you have "Physical Address Extension" listed in your system information.&lt;br&gt;&lt;br&gt;Also, processes in 32-bit Windows will see 2 GB of memory. But they won't see the same 2 GB. They'll be moved around by Windows so that all of your memory gets used (it's called multitasking!). So there is no "2 GB limit" as some might have you believe. The real limit is 3 GB, or even more if you have PAE.&lt;br&gt;&lt;br&gt;&lt;b&gt;2. What is different in 64-bit Windows?&lt;/b&gt;&lt;br&gt;&lt;br&gt;The first thing that's different, you can access up to 16 EB (exabytes) of RAM! That's 8 million 2-TB hard drives!&lt;br&gt;&lt;br&gt;But there are a few more things you need to be aware of:&lt;br&gt;- 64-bit Windows uses up 60% more memory and disk space than 32-bit Windows due to the doubling of pointer size&lt;br&gt;- You may have trouble finding 64-bit drivers for older hardware&lt;br&gt;- 32-bit software will still run perfectly on 64-bit Windows, thanks to WoW (Windows on Windows) emulation&lt;br&gt;- 64-bit Windows allows you to access all 4 GB of memory when you have 4 GB installed (not just 3 GB like 32-bit Windows)&lt;br&gt;- There is no memory hole in 64-bit Windows&lt;br&gt;- Each process can use more than 2 GB of memory&lt;br&gt;- Some CPU-intensive operations will complete faster if they take advantage of 64 bits (up to 5 times faster!)&lt;br&gt;&lt;br&gt;Overall, if you have 4 GB of RAM or more, you should install 64-bit Windows to get rid of the memory hole. If you have 3 GB or less, you should stick with 32-bit Windows, because 64-bit Windows will eat up 60% more of your precious RAM.&lt;br&gt;&lt;br&gt;&lt;b&gt;My Experience - Going from 2 GB to 4 GB&lt;/b&gt;&lt;br&gt;&lt;br&gt;I'm running 64-bit Windows 7 on my machine, with 4 GB RAM. It runs much more smoothly than it did on 2 GB of RAM. I installed 64-bit Windows 7 on 2 GB of RAM. Don't do it. It caused my memory usage to go up from 50% to 80%. Now, with 4 GB, my memory usage is down to 40%.&lt;br&gt;&lt;br&gt;So, if you have 3 GB or less RAM and aren't planning to upgrade it &lt;b&gt;right away&lt;/b&gt; after installing 64-bit Windows, don't install 64-bit Windows. It will eat up too much of your RAM.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=7e90196d-a58c-41aa-b1cb-f30923caf3c0"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,7e90196d-a58c-41aa-b1cb-f30923caf3c0.aspx</comments>
      <category>Personal</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=bc748f45-cb99-4834-a2a3-6f59e65b8d5c</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,bc748f45-cb99-4834-a2a3-6f59e65b8d5c.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,bc748f45-cb99-4834-a2a3-6f59e65b8d5c.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=bc748f45-cb99-4834-a2a3-6f59e65b8d5c</wfw:commentRss>
      <title>D3: Free WPF Data Visualization</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,bc748f45-cb99-4834-a2a3-6f59e65b8d5c.aspx</guid>
      <link>http://www.dacris.com/blog/2009/12/03/D3FreeWPFDataVisualization.aspx</link>
      <pubDate>Thu, 03 Dec 2009 03:37:26 GMT</pubDate>
      <description>&lt;div&gt;Today I just discovered a neat little WPF graphing library called D3 (&lt;a href="http://dynamicdatadisplay.codeplex.com/"&gt;DynamicDataDisplay&lt;/a&gt;).&lt;br&gt;&lt;br&gt;It's amazingly architected so that it's fast and extensible. Although it requires .NET 3.5, I was able to downgrade it to .NET 3.0 by using &lt;a href="http://www.albahari.com/nutshell/linqbridge.aspx"&gt;LinqBridge&lt;/a&gt;, a free library that emulates 99% of Linq without requiring .NET 3.5.&lt;br&gt;&lt;br&gt;Actually, LinqBridge deserves a topic on its own - there is literally no reason for you to require .NET 3.5 in your apps, unless you use Linq-to-SQL. Linq-to-Objects is 99% emulated by LinqBridge.&lt;br&gt;&lt;br&gt;To .NET library developers: start distributing .NET 3.0 versions of your libraries using LinqBridge, so that my Vista users don't have to download .NET 3.5. Saves me a boatload of headache as an ISV.&lt;br&gt;&lt;br&gt;So, back to the main topic. If you're looking for a WPF line plot library that's free or simply want an example of how to build a WPF control library the right way, just take a look at D3.&lt;br&gt;&lt;br&gt;Those are my findings for today. I guess it's been an exciting day!&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=bc748f45-cb99-4834-a2a3-6f59e65b8d5c"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,bc748f45-cb99-4834-a2a3-6f59e65b8d5c.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=12b2e850-aafd-417b-8f32-849406e195da</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,12b2e850-aafd-417b-8f32-849406e195da.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,12b2e850-aafd-417b-8f32-849406e195da.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=12b2e850-aafd-417b-8f32-849406e195da</wfw:commentRss>
      <title>Windows 7 Phones: Coming Next Year!</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,12b2e850-aafd-417b-8f32-849406e195da.aspx</guid>
      <link>http://www.dacris.com/blog/2009/12/02/Windows7PhonesComingNextYear.aspx</link>
      <pubDate>Wed, 02 Dec 2009 00:50:03 GMT</pubDate>
      <description>&lt;div&gt;So, it seems Moore's Law is at it again. And those who are not aware of it (by now) will be left in the dust. Read this article and you'll know what I mean.&lt;br&gt;&lt;br&gt;First, I must warn you that you may be offended by reading this article. If you are an ardent fan of Google or Apple and/or a hater of Microsoft, you may not like what I'm about to tell you. That's fine. Just be prepared, if you do plan to read on.&lt;br&gt;&lt;br&gt;Yesterday I installed Windows 7 on a 5-year-old laptop with 512 MB RAM and only 7 GB of free disk space. It installed (surprise!) and ran flawlessly! It even ran smoother than the XP installation I had on it before. Probably because with all the service packs, XP has actually become more bloated than Windows 7.&lt;br&gt;&lt;br&gt;Now, I want you to note the specs: 512 MB RAM, 7 GB of disk space. Impressive. A high-end PC from 10 years ago would've had these specs. So literally, Windows 7 supports a decade of computers!&lt;br&gt;&lt;br&gt;But what's more fascinating is the mobile arena. Currently, Apple is still dominant and yet still afraid to lose its iron grip on the iPhone. On the surface, Apple appears to be very friendly to developers, but behind the scenes they are the control freaks they've always been - I'm looking at you, Steve!&lt;br&gt;&lt;br&gt;Anyway, there are quite a few frustrating things about the iPhone. First, you can only sell your app through Apple's app store and it has to be approved by Apple. Second, there is no Flash on the iPhone, and no web browser other than Safari. This ought to raise eyebrows and even get Apple into legal trouble like Microsoft got into trouble with IE and Windows, for supposedly abusing their monopoly. But it seems only Microsoft is the unlucky one.&lt;br&gt;&lt;br&gt;Next we have Google's Android OS, which is a commendable OS. It has everything. It is, for mobile devices, like Windows is for PCs. It is open to developers and developers can share &amp;amp; sell their applications without Google's approval. The only "problem" with Android is that there are too many variants of it. I wouldn't really call this a problem. It's a natural drawback of having to support a wide variety of devices. I mean, look at Windows: Windows XP, Windows Vista, Windows 7, and do you hear Windows developers complaining about it? No. They've adapted to it. They expect it. Only Apple fanboys complain about "too many variants" of Android because they don't understand it.&lt;br&gt;&lt;br&gt;Next, we have Windows Mobile. Or do we? Windows Mobile is laughably dated and limited. Microsoft seems to have lost it completely on the mobile front. But have they? Or are we all missing something that's actually staring us in the face? Are we missing the elephant in the room?&lt;br&gt;&lt;br&gt;Yes.&lt;br&gt;&lt;br&gt;Let me introduce you all to the elephant in the room. It's Windows 7. Yup. And it's moving to smart phones. Remember, I installed Windows 7 on a PC with 512 MB RAM and 7 GB of disk space. Why do you think Microsoft decided to actually support old devices this time, and not raise hardware requirements like before? Why do you think Microsoft developed multi-touch capabilities in Windows 7? Is it for all those giant useless tablets out there? Is it for all the giant useless netbooks out there? No! It's for MOBILE PHONES!&lt;br&gt;&lt;br&gt;Suddenly it all makes sense. But wait, I hear you say, how can Windows 7 ever fit on a phone? Simple: There are smart phones today that have 512 MB of memory. There are smart phones today that are extensible (via microSD card) to as much as 32 GB of storage. Last but not least, is Intel's Atom processor. It's an x86 processor (just like the desktop ones) with speeds of nearly 2 GHz! But the best thing about Atom is, it's extremely low-power and low-heat.&lt;br&gt;&lt;br&gt;So the situation is now ripe for Windows 7 to start transitioning onto smaller and smaller mobile devices. There are MIDs / UMPCs currently available with screens of 4.8" which is about as small as a PSP. They fit in your pocket. And they run Windows 7. The leap from here to mobile phones is tiny. There is no leap. It's a baby step.&lt;br&gt;&lt;br&gt;In conclusion, if you thought Microsoft lost the mobile space, you are totally mistaken, and you'll be in for a shock next year. All the Android and Apple fans out there won't know what hit them. Better get on for the ride.&lt;br&gt;&lt;br&gt;As for what I'm doing to prepare, I'm back developing client-side Windows applications. I use WPF and .NET. They are extremely easy and fun to work with. Microsoft has always had the best support for developers, which is what helped them gain (and maintain) a monopoly for so long. Windows has more software than any other OS, and will continue to do so for many years thanks to Windows 7.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=12b2e850-aafd-417b-8f32-849406e195da"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,12b2e850-aafd-417b-8f32-849406e195da.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>History</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=75ba3e35-f0af-48f7-b22e-46a19ad52819</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,75ba3e35-f0af-48f7-b22e-46a19ad52819.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,75ba3e35-f0af-48f7-b22e-46a19ad52819.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=75ba3e35-f0af-48f7-b22e-46a19ad52819</wfw:commentRss>
      <title>DoEvents really *is* evil!</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,75ba3e35-f0af-48f7-b22e-46a19ad52819.aspx</guid>
      <link>http://www.dacris.com/blog/2009/11/18/DoEventsReallyIsEvil.aspx</link>
      <pubDate>Wed, 18 Nov 2009 01:15:46 GMT</pubDate>
      <description>&lt;div&gt;Apparently some of my older blog articles were really &lt;a href="http://www.codinghorror.com/blog/archives/000159.html"&gt;quite popular&lt;/a&gt;, because today I stumbled upon something I wrote 5 years ago:&lt;br&gt;&lt;blockquote&gt;&lt;i&gt;
&lt;b&gt;Application.DoEvents() - The call of the devil.&lt;/b&gt;
&lt;/i&gt;&lt;p&gt;
&lt;i&gt;DoEvents messes up the normal flow of your application. If I recall
correctly, DoEvents is asynchronous which means it terminates before
the application has actually processed any outstanding events, so if
you're using it in a procedure with many sequential statements, calling
DoEvents causes a huge disturbance whenever it's called. Basically, if
you find yourself needing to call DoEvents anywhere, think about
starting another thread instead, or using asynchronous delegates. &lt;/i&gt;&lt;/p&gt;&lt;p&gt;
&lt;i&gt;Imagine this if you will: You have a button on your form that, when
clicked, does some complex processing. During the complex processing it
also intermittently calls DoEvents to keep the application's user
interface "responsive" -- not the best method, I would have used async
delegates, but we're talking about a mediocre programmer here. Anyhow,
the user sees the application still responding and no indication that
there's some processing going on. So the user clicks that button again
WHILE the processing is going on! &lt;b&gt;The button responds to the event and starts another processing thread but it isn't actually a thread here&lt;/b&gt;, I hope you get what I'm saying. So, like I said earlier, DoEvents screws up the flow of the application too easily. 
&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;I want to comment on this further, because I don't think I was really clear at the time.&lt;br&gt;&lt;br&gt;&lt;b&gt;DoEvents really is evil. Horribly, horribly evil.&lt;/b&gt;&lt;br&gt;&lt;br&gt;In fact, the whole Windows Forms threading model is deficient. The fact that you can set a Label's Text property from any thread is a clear warning sign that something is wrong. This is only now becoming evident to me after having worked for a few months with WPF, which doesn't allow any such nonsense. It will throw an exception if you try to execute UI code on a non-UI thread.&lt;br&gt;&lt;br&gt;DoEvents should have never been included in the .NET Framework, because it gives a programmer the illusion that you can get by without worker threads. You can't. If a programmer wants to keep the UI responsive while another task is executing, that programmer should use a background worker thread. To update the UI from that thread (to show changing progress), the programmer should call Invoke on the appropriate control and pass in a delegate that will be executed on that control's UI thread. Not only does this serve to keep things consistent, but it also reduces the chances of odd bugs related to threading (which are always difficult to troubleshoot).&lt;br&gt;&lt;br&gt;So, in short, avoid DoEvents and do what good programmers do: use worker threads. WPF makes it easy (and dare I say fun?) to create &amp;amp; use worker threads, and it's perfectly safe. Windows Forms has a somewhat sketchy UI threading model, mainly because it still has to deal with Win32 API behind the scenes. This is also a reason why you should migrate to WPF and stop releasing production software built with Windows Forms. The sooner Windows Forms dies, the better.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=75ba3e35-f0af-48f7-b22e-46a19ad52819"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,75ba3e35-f0af-48f7-b22e-46a19ad52819.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>News</category>
      <category>Personal</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=bb8575bc-81a0-4823-b2be-87a26e2ea6c3</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,bb8575bc-81a0-4823-b2be-87a26e2ea6c3.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,bb8575bc-81a0-4823-b2be-87a26e2ea6c3.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=bb8575bc-81a0-4823-b2be-87a26e2ea6c3</wfw:commentRss>
      <title>Call of the Devil: System.Diagnostics.Process.Start</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,bb8575bc-81a0-4823-b2be-87a26e2ea6c3.aspx</guid>
      <link>http://www.dacris.com/blog/2009/11/18/CallOfTheDevilSystemDiagnosticsProcessStart.aspx</link>
      <pubDate>Wed, 18 Nov 2009 00:54:34 GMT</pubDate>
      <description>&lt;div&gt;So today will be the last time I use System.Diagnostics.Process.Start without explicitly setting UseShellExecute to true.&lt;br&gt;&lt;br&gt;&lt;b&gt;Why?&lt;/b&gt;&lt;br&gt;&lt;br&gt;Oh, it started out innocently enough - I was building a simple load testing tool in C# to load-test a custom ASP.NET HTTP handler I was implementing. The tool would basically run &lt;i&gt;wget&lt;/i&gt; many times to simulate HTTP requests. Don't know why I didn't just use System.Net.WebClient (because I certainly could've), but I guess I just had &lt;i&gt;wget&lt;/i&gt; on my mind.&lt;br&gt;&lt;br&gt;Anyway, so the tool ran fine but it slowly leaked away memory and handles. Initially I thought it was my HTTP handler. So I ran it with an invalid URL, just to test if maybe the load testing tool itself had a memory leak. Sure enough, it did!&lt;br&gt;&lt;br&gt;The leak seemed to be coming from my call to &lt;i&gt;&lt;b&gt;System.Diagnostics.Process.Start&lt;/b&gt;&lt;/i&gt;.&lt;br&gt;&lt;br&gt;So I did a quick Googling and it turns out that System.Diagnostics.Process.Start causes the child process to &lt;b&gt;inherit handles&lt;/b&gt; from the parent process. That means, whatever process you spawn (e.g. Internet Explorer), that process gets all of the handles owned by &lt;i&gt;&lt;b&gt;your&lt;/b&gt;&lt;/i&gt; process! So even if you free up handles in your process, if the process you spawned is still running, your handles won't really be freed because the child process is supposedly using them. A more detailed explanation &lt;a href="http://weblogs.asp.net/jdennany/archive/2007/08/28/leaky-abstractions-system-diagnostics-process-and-1-bottle-of-mountain-dew.aspx"&gt;can be found here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;As it turns out, the CreateProcess call in System.Diagnostics.Process.Start has a certain parameter that is hard-coded: the bInheritHandles parameter is hard-coded to true. Well, that's a shame now isn't it?&lt;br&gt;&lt;br&gt;&lt;b&gt;So what can we do instead?&lt;/b&gt;&lt;br&gt;&lt;br&gt;I would prefer any solution except calling the CreateProcess API directly, since API calls are ugly. One option is to set ProcessStartInfo.UseShellExecute to true before calling Process.Start. However, you won't be able to redirect stdio. In fact, if you want to redirect stdio you either have to accept MS's buggy implementation or roll your own with pipes, API, and all that funky stuff.&lt;br&gt;&lt;br&gt;&lt;b&gt;One last thing...&lt;/b&gt;&lt;br&gt;&lt;br&gt;With the Process class, be sure to explicitly Close the process object (not just Dispose) after starting the process or after you're done using it, because otherwise the process handle may leak.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=bb8575bc-81a0-4823-b2be-87a26e2ea6c3"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,bb8575bc-81a0-4823-b2be-87a26e2ea6c3.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=916828ad-9e37-4d01-bb39-067b218c26d4</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,916828ad-9e37-4d01-bb39-067b218c26d4.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,916828ad-9e37-4d01-bb39-067b218c26d4.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=916828ad-9e37-4d01-bb39-067b218c26d4</wfw:commentRss>
      <title>Visual Studio 2010 is a .NET App</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,916828ad-9e37-4d01-bb39-067b218c26d4.aspx</guid>
      <link>http://www.dacris.com/blog/2009/11/13/VisualStudio2010IsANETApp.aspx</link>
      <pubDate>Fri, 13 Nov 2009 03:09:39 GMT</pubDate>
      <description>&lt;div&gt;Not even two months after I wrote &lt;a href="http://www.dacris.com/blog/2009/09/28/DesktopNETFinallyReadyForTakeOff.aspx"&gt;this article&lt;/a&gt;, where I described why desktop .NET is finally ready for take-off, the news is out that Visual Studio 2010 is a managed (.NET) application. Finally, Microsoft are setting an example.&lt;br&gt;&lt;br&gt;What does this mean to you, the developer? It means that if you've been sitting on the sidelines regarding .NET and are still coding with *gasp* MFC, or Win32 API, it's finally time to move to .NET.&lt;br&gt;&lt;br&gt;This also means that WPF is here to stay, unlike its predecessor - Windows Forms. Many early adopters of .NET were under the impression that Windows Forms would be supported and actively developed for many years. As it turned out, Windows Forms was a dead end.&lt;br&gt;&lt;br&gt;The good news: WPF is now fully endorsed by Microsoft through Visual Studio 2010. This means WPF is finally mature enough for adoption. Plus, it's included in Windows 7 and Windows Vista. You don't even have to distribute the .NET Framework (provided you target version 3.0 and not 3.5 or 4.0). Visual Studio now makes it easy to target a specific version of the .NET Framework, unlike some of the early versions (VS 2003/2005).&lt;br&gt;&lt;br&gt;Personally, I think we're going to start seeing an explosion of new WPF apps in the coming months. It could be like the explosion that happened with the iPhone (and I'm not talking about the screen).&lt;br&gt;&lt;br&gt;These are the most exciting times for Windows developers since Windows 95.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=916828ad-9e37-4d01-bb39-067b218c26d4"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,916828ad-9e37-4d01-bb39-067b218c26d4.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=386ea9db-a669-4372-ba9d-416aa653c0ae</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,386ea9db-a669-4372-ba9d-416aa653c0ae.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,386ea9db-a669-4372-ba9d-416aa653c0ae.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=386ea9db-a669-4372-ba9d-416aa653c0ae</wfw:commentRss>
      <title>Making Bad Ass-umptions</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,386ea9db-a669-4372-ba9d-416aa653c0ae.aspx</guid>
      <link>http://www.dacris.com/blog/2009/10/09/MakingBadAssumptions.aspx</link>
      <pubDate>Fri, 09 Oct 2009 00:33:58 GMT</pubDate>
      <description>&lt;div&gt;Let's talk a bit about assumptions and what can happen if you make &lt;i&gt;wrong&lt;/i&gt; ones and never bother to correct them. The example in this article will, fittingly enough, be Microsoft - and specifically .NET.&lt;br&gt;&lt;br&gt;.NET is supposed to be an OS-independent API. It was designed to hide most of the OS behind a convenient, consistent API that does not expose any underlying OS details. That's what I mean by "OS-independent API." But it turns out, Microsoft is still a little confused about what "OS-independent API" really means.&lt;br&gt;&lt;br&gt;Starting with .NET 1.0, Microsoft has continually made the assumption that the less unmanaged code they had in their &lt;i&gt;implementation&lt;/i&gt; of .NET, the better. This is best evidenced on &lt;a href="http://www.grimes.demon.co.uk/dotnet/dotnetWrappers.htm"&gt;this web page&lt;/a&gt; - called "Is .NET a Win32 Wrapper?"&lt;br&gt;&lt;br&gt;In reality, an OS-independent API does not have to be entirely OS-independent. Only the API - the part that the programmer sees - is OS-independent, hence "OS-independent &lt;i&gt;API&lt;/i&gt;". The implementation need not be OS-independent, and should not be.&lt;br&gt;&lt;br&gt;The developer does not care how many unmanaged calls are happening behind the scenes. The only thing the developer cares about is the API, because the only thing the developer sees is the API. As long as the API is OS-independent, the implementation of the API does not matter.&lt;br&gt;&lt;br&gt;So why is Microsoft reinventing the wheel by reimplementing basic controls like buttons in Windows Forms, and then again in WPF? Why not just create a thin wrapper around Windows API, like SWT? (SWT, by the way, is a thin Java wrapper around standard OS controls like Button, TextBox, etc.)&lt;br&gt;&lt;br&gt;Right now, .NET is completely lacking a thin wrapper for Win32 API. WinForms and WPF are both thick wrappers. They only call the Windows API for extremely low-level tasks like GDI. They are more like Java Swing than SWT. The trouble is, when you build a thick wrapper, you inevitably run into performance issues and UI inconsistencies. You're also reinventing the wheel, often unnecessarily.&lt;br&gt;&lt;br&gt;Another issue you run into when building a thick wrapper is size. SWT is 2 MB (small enough to fit into the L2 cache of a Core 2 processor!) because it's a thin wrapper. You also have the issue of maintainability: a thick wrapper is more complex and therefore harder to maintain than a thin wrapper.&lt;br&gt;&lt;br&gt;Sure, there are advantages to thick wrappers. I'm not sure exactly what they are, but there probably are some. However, developers often prefer simple, clean, and small applications. And so do users. So, Microsoft, where is the SWT for .NET?&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=386ea9db-a669-4372-ba9d-416aa653c0ae"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,386ea9db-a669-4372-ba9d-416aa653c0ae.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=f08fdd87-e253-4a8d-8835-b0e1ed9bdb4c</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,f08fdd87-e253-4a8d-8835-b0e1ed9bdb4c.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,f08fdd87-e253-4a8d-8835-b0e1ed9bdb4c.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f08fdd87-e253-4a8d-8835-b0e1ed9bdb4c</wfw:commentRss>
      <title>Desktop .NET Finally Ready for Take-Off</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,f08fdd87-e253-4a8d-8835-b0e1ed9bdb4c.aspx</guid>
      <link>http://www.dacris.com/blog/2009/09/28/DesktopNETFinallyReadyForTakeOff.aspx</link>
      <pubDate>Mon, 28 Sep 2009 06:46:10 GMT</pubDate>
      <description>&lt;div&gt;It was 2002. I had just finished developing Dacris Benchmarks 4.9 using pure Win32 API. I was proud of myself. It was the first 100% Windows API application I had developed. No more Borland OWL crutches. It was a clean start. The application went on to become a phenomenal success. But something was not quite right in the land of Windows development. A major new player was just entering the arena. Its name was ".NET", previously known as NGWS, and it promised to change everything.&lt;br&gt;&lt;br&gt;From the beginning it was clear that this .NET thing was not going to be popular right away. It was a gigantic change at a time when the world was still trying to recover from the collapse of the dot-com bubble. It was, furthermore, a behemoth in the days when broadband Internet was still a rare commodity. Weighing in at a hefty 23 MB, the .NET redistributable was just too much of a penalty to pay for the convenience of developing "managed" applications with a truly object-oriented language.&lt;br&gt;&lt;br&gt;From the developer's perspective, .NET was amazing from day one. Sure it still had some kinks which ultimately led me to develop NetXP, but as a development paradigm it completely overshadowed the archaic Windows API. It was a dream come true - garbage collection, Windows Forms, remoting, and a whole bunch of other goodies.&lt;br&gt;&lt;br&gt;.NET immediately took off on the web. Within one year, nearly every major company was developing ASP.NET web apps with .NET 1.1. The release of Windows Server 2003 only served to accelerate that trend even further. .NET web development soon reached a frenzy as the advantages of ASP.NET over other technologies (PHP, JSP) became evident.&lt;br&gt;&lt;br&gt;However, something was wrong on the desktop. Three years after .NET came out, virtually no .NET desktop applications were being developed. The reason? Most ISVs, especially the small ones, saw the gigantic size of the .NET framework and the support headache associated with its deployment as a major roadblock to adoption. Even though .NET was great for developers, it was not so great for end users.&lt;br&gt;&lt;br&gt;The fact that Windows XP SP2 and SP3 did not include the .NET Framework only made the situation worse. For most ISVs, it was clear that if they wanted to develop Windows apps, they would have to continue using Windows API, until something better came along.&lt;br&gt;&lt;br&gt;Well, something better finally did come along in 2007. It was called .NET 3.0 (or WinFX), and it was embedded in Windows Vista. Suddenly, the deployment obstacle to .NET adoption was removed. Now, there was really no reason for ISVs not to adopt .NET. Or was there?&lt;br&gt;&lt;br&gt;The reason was one word: "Vista." This word soon came to be reviled among the Windows community. Nobody wanted to touch Vista with a ten-foot pole. The truth is, Vista was plagued with problems for at least a year after its RTM. Finally, in 2008, the initial Vista problems started getting resolved and users started adopting Vista at a more rapid pace.&lt;br&gt;&lt;br&gt;Today, there is a two-word reason why .NET adoption on the desktop finally makes sense: "Windows 7." Windows 7, which includes .NET 3.5 by default, is leaner and meaner than its predecessor. Every PC that can run Vista can run Windows 7 and do so with better performance. In a few months, the combined market share of Windows 7 and Windows Vista will exceed 35%. It's practically there right now.&lt;br&gt;&lt;br&gt;From an ISV's perspective, however, it is not only market share that counts. It is also the value per customer within that segment of the market. For example, a Mac user typically has 4 times more value than a Windows user because Mac users tend to buy applications more readily than Windows users. Now when it comes to Windows XP versus Windows Vista/7, the Windows XP user at this point is basically stuck in the stone age. The odds of a Windows XP user purchasing a new application are much lower than the odds of a Windows Vista/7 user purchasing a new application. The Windows XP user generally runs old applications on old hardware, and is very conservative when it comes to making new purchases. The result is that the value of a Windows XP user is (sorry XP users) generally lower than the value of a Windows Vista/7 user from the point of view of an ISV.&lt;br&gt;&lt;br&gt;Anyway, to make a long story short, despite a market share of "only" 35%, Windows Vista/7 users are now actually a more important market for ISVs than Windows XP users. This is only now starting to happen, after about 8 years of XP dominance.&lt;br&gt;&lt;br&gt;What does this mean for ISVs and the software industry as a whole? It means that .NET will finally be adopted on the desktop. .NET makes development much easier, there is no question about that. However, for a long time there was a question about whether Microsoft would embrace or at least continue to support .NET. That question has finally been answered. .NET is here to stay and the future for Windows applications is .NET. Windows API has finally come to the end of its life. It's an exciting time to be a Windows developer.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=f08fdd87-e253-4a8d-8835-b0e1ed9bdb4c"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,f08fdd87-e253-4a8d-8835-b0e1ed9bdb4c.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>History</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=ec610438-e27d-436a-b3da-287beab2013f</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,ec610438-e27d-436a-b3da-287beab2013f.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,ec610438-e27d-436a-b3da-287beab2013f.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ec610438-e27d-436a-b3da-287beab2013f</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>What .NET Should Have Been</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,ec610438-e27d-436a-b3da-287beab2013f.aspx</guid>
      <link>http://www.dacris.com/blog/2009/05/25/WhatNETShouldHaveBeen.aspx</link>
      <pubDate>Mon, 25 May 2009 21:27:16 GMT</pubDate>
      <description>&lt;div&gt;It was 2001 when I first started developing with Win32 API. Back then, Win32 API was the only way to develop a Windows application. Sure, you could use a variety of different wrappers, including MFC and Borland's OWL. However, the Win32 API was always at the core of the application. This resulted in applications having a very consistent look &amp;amp; feel. Every application looked like it belonged in Windows.&lt;br&gt;&lt;br&gt;In 2002, a new phenomenon started, called the .NET Framework. The .NET Framework was supposed to be Microsoft's decision to improve developer's lives by replacing C++ with managed code (written in any language). At least that's what I hoped back in 2002. However, from the very beginning it became clear that Microsoft's intent was not to replace Win32 API with .NET but in fact to carry two separate development frameworks, and ultimately to confuse and alienate Windows users and Windows developers.&lt;br&gt;&lt;br&gt;Let's look at what "mistakes" MS made with .NET that have been causing ongoing pain for Windows developers.&lt;br&gt;&lt;br&gt;&lt;b&gt;1. Not including .NET in Windows.&lt;/b&gt;&lt;br&gt;&lt;br&gt;Microsoft has an ongoing policy of keeping .NET &amp;amp; Windows separate. For some bizarre reason, Microsoft will not distribute the latest version of .NET with the latest version of Windows. Windows XP SP1 could have included .NET 1.1. It didn't. Windows XP SP2 could have included .NET 2.0. It didn't. .NET should've been a required update from the very beginning. It should've been an inextricable component of Windows, just like IE. Though it's unclear which version of .NET will ship with Windows 7, what is clear is that when a later version is released, Microsoft will make damn sure that users won't even know about it.&lt;br&gt;&lt;br&gt;&lt;b&gt;2. Not making the Win32 API obsolete.&lt;/b&gt;&lt;br&gt;&lt;br&gt;With Windows Vista, Microsoft could've made all new APIs available only to .NET developers. Why do that? To discourage Win32 API development. To make it clear to developers that .NET is the future. Starting with Vista, Microsoft should've moved all of its innovation into .NET. Instead, they added new features to Win32 API! Features that they didn't add to .NET! In other words, they showed that Win32 API is still the only way to develop Windows applications.&lt;br&gt;&lt;br&gt;&lt;b&gt;3. Not setting an example.&lt;/b&gt;&lt;br&gt;&lt;br&gt;Microsoft could have migrated all of its apps to .NET. Office 2007 should've been entirely written in .NET. Visual Studio .NET (first version) should've been written in .NET! Microsoft should've set an example, that .NET is the future. Instead, they keep writing apps in MFC or Win32 API. Clearly, MFC and Win32 API is still the future. I challenge you to find any major Microsoft application written in .NET.&lt;br&gt;&lt;br&gt;&lt;b&gt;4. Reinventing the wheel.&lt;/b&gt;&lt;br&gt;&lt;br&gt;Rather than using native Win32 API controls in .NET WinForms applications, Microsoft instead decided to reinvent the wheel, coding an entire UI toolkit from scratch using managed code. What for? Sun already did that! It's called Java!&lt;br&gt;&lt;br&gt;The inconsistencies in look &amp;amp; feel in .NET are hideous, but even worse are the inconsistencies in behaviour. .NET 1.1 was notorious for its non-standard controls. It's the reason I developed NetXP. It's the reason why I had to write a gigantic .NET wrapper around Win32 API. .NET itself should've been that wrapper. Here's an exercise: Try popping up a balloon tooltip (a feature of Win32 API in Windows XP) in .NET 1.1.&lt;br&gt;&lt;br&gt;This is the biggest issue with .NET, and Microsoft still hasn't fixed it. Take the XAML menu for example. It's totally different from the standard WinAPI menu. Even the ClearType looks different in a XAML app! This decision by MS not to enforce OS UI conventions will lead to a wide range of UI variation on Windows, and will ultimately lead developers (and users) away from Windows, and toward Mac or even Linux.&lt;br&gt;&lt;br&gt;&lt;b&gt;Conclusion - My Message to Microsoft&lt;/b&gt;&lt;br&gt;&lt;br&gt;It's painful to develop apps in Windows API (or MFC) in 2009. You (Microsoft) could've changed that. You had the opportunity, with .NET, to create a new way of programming Windows. You blew it. Until you fix the 4 issues above, I will be programming in Java. Java is everything .NET is and more. Java is cross-platform, free software, and has a wider user base. Why should I limit myself to Windows when the choice I have is between Windows API (a 25-year-old technology) and .NET (a clone of Java that runs only on Windows)?&lt;br&gt;&lt;br&gt;To those out there who remember Visual Basic, .NET is another Visual Basic. VB was great for RAD (Rapid Application Development). So is .NET. But the problem with VB was that it was non-standard. It didn't wrap the Win32 API well enough. The same is true for .NET. Now, if .NET was going to be cross-platform, I'd understand. But it was never intended to be cross-platform. Microsoft totally blew it with .NET. Developing a Windows application in .NET is as ridiculous as developing a Windows application in Visual Basic.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=ec610438-e27d-436a-b3da-287beab2013f"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,ec610438-e27d-436a-b3da-287beab2013f.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>History</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=73e12c2d-947d-4bfc-813d-b546d2494a61</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,73e12c2d-947d-4bfc-813d-b546d2494a61.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,73e12c2d-947d-4bfc-813d-b546d2494a61.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=73e12c2d-947d-4bfc-813d-b546d2494a61</wfw:commentRss>
      <title>Windows 7: A Review</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,73e12c2d-947d-4bfc-813d-b546d2494a61.aspx</guid>
      <link>http://www.dacris.com/blog/2009/05/23/Windows7AReview.aspx</link>
      <pubDate>Sat, 23 May 2009 23:37:39 GMT</pubDate>
      <description>&lt;div&gt;&lt;h2&gt;&lt;b&gt;Windows 7: A Review&lt;/b&gt;&lt;/h2&gt;&lt;i&gt;By Dan Tohatan&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;In 1994, Microsoft unveiled a user interface that was truly revolutionary at the time. Code-named "Cairo", it was to become the interface of the new Windows 95 operating system. When Windows 95 came along in July of 1995, the new shell (Windows Explorer) totally surpassed the old Program Manager / File Manager combination, which had been a staple of Windows since Windows 3.0. Windows 95's unparalleled multimedia capabilities became evident very quickly.&lt;br&gt;&lt;br&gt;I remember how amazed I was when I first saw the Windows 95 boot-up screen, in all its 256-color beauty. Microsoft got it. The world was moving toward true color displays. No longer were UIs going to be boxed into the 16-color (or less) paradigm which had dominated displays since the 1980s. A revolution was beginning, and Windows 95 was going to lead it.&lt;br&gt;&lt;br&gt;Fast-forward to the present, and a new revolution is beginning. This time, it's a move from bitmapped graphics to vector graphics. It's a move toward 3D-accelerated vector graphics. You can see it in the new Web 2.0 websites out there: smooth gradients, subtle 3D effects, animations, and heavy use of mouse-over events. You could call this the second UI revolution.&lt;br&gt;&lt;br&gt;Windows Vista was supposed to bring in this new UI revolution. However, Microsoft bit off more than it could chew. Vista over-promised and under-delivered. The result was, as everyone now knows, a total disappointment. Today, almost 3 years after Vista's release, the market share held by Windows Vista is around 25%. The market share held by XP? 60%. What's even worse for Microsoft is that Mac OS X and Linux have been gaining feverishly thanks to Vista's lack of stability and incredibly slow performance.&lt;br&gt;&lt;br&gt;Windows 7 is what Vista should have been. It is to Windows XP what Windows 95 was to Windows 3.1. I would encourage everyone reading this review to go out and download &amp;amp; install the Windows 7 Release Candidate. I have (so far) only used the OS for a day, and I am extremely impressed.&lt;br&gt;&lt;br&gt;The most interesting thing about Windows 7 is that it's the first Windows OS to have lower system requirements compared to the previous version. While it has been demonstrated that Windows 7 can be installed on a system with only 512 MB RAM, it's not a realistic requirement if you want to run the latest applications. A system with 1 GB of RAM or more should be able to run Windows 7 at least as fast as it would run Windows XP. Also, while Windows 7 requires 16 GB of free disk space to install, it only ends up using about 9 GB, which is far better than Vista.&lt;br&gt;&lt;br&gt;I'm going to start this review by looking under the hood - at how the OS performs. One of my biggest problems with Vista is the size of the WinSXS folder. Apparently, in order to solve "DLL hell", Microsoft decided to keep every single version of every DLL forever. Before I installed Windows 7, my Vista SP1 WinSXS folder was 7 GB, with no apps installed. This was after I ran the SP1 clean-up tool. Before that, it was over 10 GB. With Windows 7, it's only 4 GB. Seems MS was able to cut out a whole 3 GB from the WinSXS folder, which is excellent.&lt;br&gt;&lt;br&gt;Another thing that MS improved with Windows 7 is the speed of shutdown. While boot-up is about the same as Windows Vista, shutdown is noticeably faster. Also, the speed of installation (if you're doing clean install) is much faster than a comparable Vista installation. I remember when I installed Vista that it seemed to take longer than an equivalent XP install. Windows 7 actually installs faster than XP.&lt;br&gt;&lt;br&gt;I remember with Vista having issues with the TrustedInstaller. It would just start up randomly and my hard drive would start thrashing, and my system would slow to a crawl. Windows 7 seems much more quiet (in terms of hard disk activity) and CPU usage is actually at 0% most of the time! It's incredible how Windows 7&amp;nbsp; release candidate (not even final release) outperforms Vista so much. The final release will probably be even better.&lt;br&gt;&lt;br&gt;Moving on to the UI, the first thing you notice about Windows 7 is how much cleaner it is compared to Vista. Gone are the incessant notification popups or the glaring UI inconsistencies that made Windows Vista such a pain to use. UAC is totally gone. In Vista, just about everything you did would pop up a UAC dialog. It was extremely annoying. In Windows 7, the UAC prompts, even where you would obviously expect them (e.g. Task Manager), are totally gone. It's a mystery what MS did here, but it's a really good thing. I really hope that this is permanent and that UAC doesn't come back in the final release.&lt;br&gt;&lt;br&gt;The other pleasant surprise I had with Windows 7 was that MS added new accessories! This is the first time MS did something like this since (probably) Windows 95! Not only that, but the existing accessories (Wordpad, Paint) have been totally revamped. You will also notice the UI consistency in Windows 7 (versus Vista). Finally, I'm pleased to announce that MS has finally removed the "Install New Font" dialog that still had a Windows 3.0-like UI. This calls for a major celebration! This dialog existed in Windows - unchanged - since 1990! Now it's finally gone!&lt;br&gt;&lt;br&gt;What I really like about Windows 7 is its new Libraries feature. A library is a special folder that is actually the aggregate of multiple folders. Libraries makes organizing files so much easier. Microsoft also implemented a fairly complete set of filters (or views) for each library. For example, you can view your music by artist or by album. The views are customized to fit each library type. For example, the Music library only has views that are relevant to music.&lt;br&gt;&lt;br&gt;But it's the small things that make Windows 7 so impressive. For example, when copying files, the progress is shown in the taskbar as the background of the taskbar button, and it updates in real time. So you can just look at the taskbar to see the progress. You no longer have to Alt+Tab. Also, the extensive use of mouse-over effects really adds to the usability of the OS. For example, hovering over a taskbar button shows you a preview of the window that corresponds to that button.&lt;br&gt;&lt;br&gt;Windows 7 is probably the first Windows OS for which screenshots aren't enough. This is because of the extensive use of mouse-over effects. Screenshots just don't do it justice. When I looked at various screenshots of Windows 7, I thought "what a bad UI design!" But in practice, the UI design is very usable. Not only is it usable - it's fun! This is the first time I'm having fun using Windows since Windows 95!&lt;br&gt;&lt;br&gt;To conclude, you really have to use it to fully appreciate it. There are many pleasant surprises in this OS. When I switched to Ubuntu back in 2007, I never thought I'd see another version of Windows as great as Windows XP was. Well, it turns out I was wrong. Windows 7 is the new Windows 95. Windows XP was an evolutionary change. Windows 7 is a revolutionary change. Windows 7 leaves its competition in the dust. In the end, Microsoft still gets it.&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=73e12c2d-947d-4bfc-813d-b546d2494a61"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,73e12c2d-947d-4bfc-813d-b546d2494a61.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=03745d30-baeb-4220-b0f2-6022d3d15d1a</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,03745d30-baeb-4220-b0f2-6022d3d15d1a.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,03745d30-baeb-4220-b0f2-6022d3d15d1a.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=03745d30-baeb-4220-b0f2-6022d3d15d1a</wfw:commentRss>
      <title>2009 Technology Trends</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,03745d30-baeb-4220-b0f2-6022d3d15d1a.aspx</guid>
      <link>http://www.dacris.com/blog/2009/04/14/2009TechnologyTrends.aspx</link>
      <pubDate>Tue, 14 Apr 2009 22:42:10 GMT</pubDate>
      <description>&lt;div&gt;&lt;b&gt;APRIL 2009 --&lt;/b&gt;&lt;br&gt;The economic downturn leaves no company unaffected. MSFT is finished.&lt;br&gt;July, 2008 Bill Gates stepped down. The company will not release one single product&lt;br&gt;worthy of investigation this year. IE 8 has been surpassed by Mozilla and there is&lt;br&gt;absolutely nothing MS can do to resurrect IE. The major theme this year will be the&lt;br&gt;death of Microsoft.&lt;br&gt;&lt;br&gt;In the open source arena, Linux continues to make advances. At some point this year,&lt;br&gt;Linux market share will rise dramatically. There may be an event which triggers&lt;br&gt;a mass migration to Linux on the desktop. My belief is that an amazing software&lt;br&gt;product comes out which only runs on Linux. People are so drawn to this product that&lt;br&gt;they are willing to ditch their Windows OS (or at least dual-boot Linux with it). The&lt;br&gt;product will be intentionally designed NOT to run on Windows.&lt;br&gt;&lt;br&gt;In the hardware realm, Intel will be going the slow &amp;amp; steady route. AMD is finished.&lt;br&gt;The video card industry is finished. They've pushed it too far. PSUs can't handle&lt;br&gt;3 cards in SLI. It's pure madness. NVIDIA will suffer this year, and so will AMD,&lt;br&gt;because of its ownership of ATI. All graphics card manufacturers will suffer. I don't&lt;br&gt;think we will see any further advancements this year in graphics hardware.&lt;br&gt;&lt;br&gt;In addition, the recession means less spending on high-end hardware. Therefore, any&lt;br&gt;high-end hardware product will drop in price dramatically. Look for deals on top-notch&lt;br&gt;video cards and super-fast memory. DDR3 will get very cheap, very fast.&lt;br&gt;&lt;br&gt;I almost missed it - the biggest story this year will be Apple. Specifically, the&lt;br&gt;iPhone is taking over the world. Those who were slow in adopting blackberries or other&lt;br&gt;smart mobile devices will now swarm to the iPhone. The iPhone will replace the iPod,&lt;br&gt;cell phones, digital cameras, video cameras, and many other portable devices. The&lt;br&gt;iPhone is part of the new iLife trend which is all about unifying mobile devices into&lt;br&gt;one incredible everyday-life-enhancing device that you can take with you everywhere.&lt;br&gt;&lt;br&gt;Continuing the trend with the iPhone, it will soon start to replace devices used in&lt;br&gt;industry. For example, on construction sites, the inclination of the ground will be&lt;br&gt;measured using an iPhone. In your car, instead of having a real map, an iPhone plus&lt;br&gt;Google maps will do.&lt;br&gt;&lt;br&gt;The trend towards minification of laptops (i.e. netbooks &amp;amp; tablets) will merge with&lt;br&gt;the iPhone trend. The trend is towards a fully portable computer (i.e. a computer you&lt;br&gt;can carry in your pocket). This computer will be capable of having all sorts of devices&lt;br&gt;attached to it (as peripheral extensions). It will be a virtual sensor - an extension&lt;br&gt;of the human senses.&lt;br&gt;&lt;br&gt;Touch is the biggest trend in terms of UI. Without touch, a screen is nothing. Every&lt;br&gt;screen is going multi-touch. There will be a shift toward touch-friendly UIs.&lt;br&gt;&lt;br&gt;In the UI realm, there is a growing trend towards 3D-ization of everything, even the&lt;br&gt;web. I believe 3D accelerated web browsers are coming soon. Whoever makes the first&lt;br&gt;move into 3D-accelerated web browsing will become famous. All UIs will be&lt;br&gt;3D-accelerated. The exact form that this will take remains to be seen. The idea is&lt;br&gt;that a whole new concept of "3D layout" will need to be developed. Web 2.0 is a first&lt;br&gt;step in this direction, with its pervasive use of realistic 3D gradients. These will&lt;br&gt;soon be replaced with real 3D surfaces (perhaps designed with Bezier curves and&lt;br&gt;ray-traced). Yes - real-time ray tracing. It will be very exciting.&lt;br&gt;&lt;br&gt;On the topic of ray tracing, I believe ray tracing is slowly going to overtake the&lt;br&gt;old polygon + projection model that we're all so familiar with. The reason? Ray&lt;br&gt;tracing lends itself to parallel processing. In particular, photon mapping will soon&lt;br&gt;be done in real-time and scenes in 3D games will be rendered with photon mapping, for&lt;br&gt;unbelievably realistic lighting. The photon map will be precomputed for static scenes&lt;br&gt;to save processing speed. Models (meshes) will be made using Bezier splines, so that&lt;br&gt;meshes will be totally smooth (no more polygons!). The result will be unbelievably&lt;br&gt;smooth surfaces. It turns out that with ray tracing, splines (curves) are much easier&lt;br&gt;to process than polygons! Bottom line - the buzzword (or phrase) these days in&lt;br&gt;graphics is "real-time ray tracing".&lt;br&gt;&lt;br&gt;Because ray tracing produces such realistic graphics, I believe we're trending toward&lt;br&gt;a world where a lot of the images you see as design elements on websites and other UIs&lt;br&gt;will be ray-traced, either in real time or rendered once and saved as an image. You&lt;br&gt;can quite easily imagine a building contractor having on their website a ray-traced&lt;br&gt;image of the inside of a virtual apartment, with such perfect graphics that you would&lt;br&gt;instantly be amazed. Ray tracing will become the holy grail in graphic design.&lt;br&gt;&lt;br&gt;The biggest trend rising in 2009 is the use of portable computers for entertainment.&lt;br&gt;This will grow, over many years. Rather than performance improvements, improvements in&lt;br&gt;hardware will most likely be focused more on functionality rather than performance.&lt;br&gt;You're going to start seeing a lot more innovative input &amp;amp; output devices in the&lt;br&gt;coming years, directed mainly towards entertainment &amp;amp; improving day-to-day life.&lt;br&gt;&lt;br&gt;Projecting trends into 2010, Apple will dominate the mobile arena. MSFT is history.&lt;br&gt;In the server &amp;amp; business world, MSFT is being replaced by Linux at a rapid pace. The&lt;br&gt;ever-present need for standardization means UNIX is becoming the de-facto standard&lt;br&gt;OS, similar to how HTML became the de-facto standard web presentation language. All&lt;br&gt;new software is built for Linux or some UNIX variant (like Apple's OSes).&lt;br&gt;&lt;br&gt;Graphics cards manufacturers will continue to suffer. Integrated graphics comes on&lt;br&gt;in a big way this year. Intel now manages to capture 90% of graphics performance with&lt;br&gt;its latest integrated graphics chip + integrated memory controller &amp;amp; DDR3 RAM. The&lt;br&gt;idea of a separate graphics chip falls by the wayside and soon graphics cards will be&lt;br&gt;a distant memory of an ancient past. Why have 1 GB of dedicated video RAM when the same&lt;br&gt;RAM, at the same speed, can be allocated from system RAM? Soon, the GPU + CPU will&lt;br&gt;merge into one unit, much like the way math co-processors disappeared back in the 1990s.&lt;br&gt;&lt;br&gt;The biggest trend this year is the realworldization of the virtual world. The idea&lt;br&gt;of taking the desktop computer outdoors. Custom sensors will become an enormous market.&lt;br&gt;E.g.: Imagine checking your iPhone's UV sensor when walking out on the beach on a sunny&lt;br&gt;afternoon. Or imagine connecting your iPhone up to a telescope to align it perfectly&lt;br&gt;with the moon on a clear night. A whole new computer (the "real world computer") will&lt;br&gt;appear, for this purpose alone.&lt;br&gt;&lt;br&gt;2010 is when I believe a "Microsoft" will emerge in the real-world computer realm.&lt;br&gt;Apple will have competition later this year. I'm not sure who will be that next Bill&lt;br&gt;Gates but I'm certainly a contender.&lt;br&gt;&lt;br&gt;In 2010, computers will start to replace books for casual reading. Already the Amazon&lt;br&gt;Kindle is making huge headlines, but this trend will fully take off only in 2010, when&lt;br&gt;90% of newspapers go bankrupt and everyone starts reading the news on their new&lt;br&gt;real-world computer.&lt;br&gt;&lt;br&gt;In 2010, the support-based software model becomes the only viable business model for&lt;br&gt;software. The idea is you pay separately for licensing and support/customization. The&lt;br&gt;idea is that by paying for support you're guaranteed that the company will provide&lt;br&gt;that support. In other words, many companies lose potential clients because those&lt;br&gt;clients are afraid that the company might go out of business or that they might release&lt;br&gt;a new version of the software tomorrow that is fully incompatible with the old version.&lt;br&gt;This is the nightmare of every IT department. Naturally, business models that make life&lt;br&gt;easier for IT departments will grow. The idea of "we guarantee that we won't go out of&lt;br&gt;business" is a very seductive one for any IT department.&lt;br&gt;&lt;br&gt;The home computer will remain, but it will remain as a sort of appliance where&lt;br&gt;data can be centralized. Its sole purpose will be the centralization of data. In other&lt;br&gt;words, it will become more of a server.&lt;br&gt;&lt;br&gt;What is the future in terms of hardware? By 2011, we should expect 22nm processors&lt;br&gt;with 4 to 8 cores. Clearly, the trend will be towards parallel computing and more&lt;br&gt;integration as I believe Intel will finally merge the GPU &amp;amp; CPU into one with its&lt;br&gt;new "Sandy Bridge" technology which comes out in 2011. This technology will be as&lt;br&gt;revolutionary for Intel as the "Pentium M" was (which then led to the Core 2).&lt;br&gt;&lt;br&gt;Intel will rapidly become dominant in the area of graphics, forcing AMD to adopt a&lt;br&gt;similar strategy of integrating its ATI chips onto its CPUs. This may actually give&lt;br&gt;AMD a competitive advantage over Intel, because let's face it - Intel's graphics chips&lt;br&gt;suck compared to ATI. I believe at this point NVIDIA will be begging to be acquired,&lt;br&gt;and guess who will acquire NVIDIA? Intel!&lt;br&gt;&lt;br&gt;So the biggest story in 2011 will be the rise of Intel to total domination of the&lt;br&gt;desktop computing world. On top of that, the trend towards innovative display devices&lt;br&gt;that started with touch screens will intensify by 2011. I believe we'll see the first&lt;br&gt;holographic or projective displays in 2011. The idea is the image is projected onto&lt;br&gt;any surface. Imagine a pen that projects the daily news onto an 8.5x11 piece of paper.&lt;br&gt;&lt;br&gt;Another example of an innovative input device would be an exercise machine that is&lt;br&gt;designed to interact with your desktop computer (or game console). For example, a&lt;br&gt;treadmill that corresponds to a virtual car driving around a city. When you run&lt;br&gt;faster, the car goes faster. The idea is to turn physical effort into positive UI&lt;br&gt;feedback, thus producing positive reinforcement and turning people into fitness&lt;br&gt;junkies.&lt;br&gt;&lt;br&gt;PC gaming will make a comeback. Game consoles have been slowly replacing PCs when it&lt;br&gt;comes to gaming. However, I think this trend may actually reverse. People will soon&lt;br&gt;discover that they can connect their PC to their TV and save the money that they&lt;br&gt;would otherwise have spent on a game console. Thus, PC-to-TV output devices will&lt;br&gt;become extremely popular. Also, on your PC you can obtain games for free (via&lt;br&gt;downloading) and you can obtain an unlimited number of games, and you can even make&lt;br&gt;your own games. Therefore, I don't believe that PC gaming is dead. In fact, I think&lt;br&gt;it will come back in a big way, mainly because of the current economic downturn&lt;br&gt;which I expect to last well into the next decade.&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=03745d30-baeb-4220-b0f2-6022d3d15d1a"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,03745d30-baeb-4220-b0f2-6022d3d15d1a.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=da638489-2c59-4044-b529-75ec33c1f165</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,da638489-2c59-4044-b529-75ec33c1f165.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,da638489-2c59-4044-b529-75ec33c1f165.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=da638489-2c59-4044-b529-75ec33c1f165</wfw:commentRss>
      <title>Why C++ Sucks (Sort Of)</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,da638489-2c59-4044-b529-75ec33c1f165.aspx</guid>
      <link>http://www.dacris.com/blog/2009/02/10/WhyCSucksSortOf.aspx</link>
      <pubDate>Tue, 10 Feb 2009 06:31:23 GMT</pubDate>
      <description>&lt;div&gt;So I've met a couple of people (who shall remain nameless) over the past few weeks who insist that C++ is better than Java. I am truly impressed by the stubbornness of these people. So here goes. I'm going to argue once &amp;amp; for all why ...&lt;br&gt;OH NO! I'm not falling into that trap.&lt;br&gt;&lt;br&gt;I'm just going to pose questions that any developer should ask before choosing either C++ or Java. NOTE: I'm not advocating just Java here. Mono has comparable features, or .NET if you don't care about cross-platform.&lt;br&gt;&lt;br&gt;Before I start I'd like to mention that I was once a die-hard
C++er. I started programming in C++ back when I was 11, but 5 years
after that I found .NET and never looked back. So I technically have 5 years of experience with nothing but C++, and I have used it off &amp;amp; on and will continue using it whenever I absolutely need to.&lt;br&gt;&lt;br&gt;&lt;b&gt;1. Ant vs "make"&lt;/b&gt;&lt;br&gt;&lt;br&gt;What's better? Ant or "make"? Would you rather write a Makefile (no extension) in a proprietary hard-to-read language, with a text editor like "vim", or would you rather write an XML file (build.xml) which could easily be generated by a tool (perhaps with a GUI)?&lt;br&gt;&lt;br&gt;Secondly, which one has more capabilities? Ant or "make"?&lt;br&gt;&lt;br&gt;&lt;b&gt;2. Pointers&lt;/b&gt;&lt;br&gt;&lt;br&gt;Do you really need pointers? Do you really need to convert integers (memory addresses) to objects? Are you willing to put up with the hassle of manually collecting garbage (using "delete" statements)? How are you going to test that you don't have memory leaks?&lt;br&gt;&lt;br&gt;What if the architecture you're working on uses 48-bit memory addresses and you want to port your program to an architecture that uses 64-bit memory addresses? Have you thought about how you're going to do that? Because you know, in Java you don't need to think about any of this.&lt;br&gt;&lt;br&gt;&lt;b&gt;3. CPU Architecture and OS&lt;/b&gt;&lt;br&gt;&lt;br&gt;What CPU are you programming for? What OS? Do you need little-endian or big-endian integers? Are you going to use Unicode? Which kind? UTF-8 or UTF-16? With Java, you don't need to think about it.&lt;br&gt;&lt;br&gt;Suppose you are coding for multiple OSes/CPUs. Do you like having lots of preprocessor statements in your code? There is no need for preprocessor statements in Java. If you do want to check what OS or CPU you are running on, you can do so at runtime.&lt;br&gt;&lt;br&gt;How are you going to know what libraries to link to on each OS? And how will you know that you have the right version? For the right architecture/OS? In Java, you have only one shared library: the JDK. In C++, you have a variable number of shared libraries.&lt;br&gt;&lt;br&gt;&lt;b&gt;4. JUnit&lt;/b&gt;&lt;br&gt;&lt;br&gt;One question: Unit testing: how will you do it in C++? Or will you just rely on integration testing all the way through?&lt;br&gt;&lt;br&gt;&lt;b&gt;5. Graphical User Interface&lt;/b&gt;&lt;br&gt;&lt;br&gt;Suppose you want a GUI for your application. What toolkit will you use? Gtk, Qt, Win32, MFC, .NET? Console is starting to look more attractive already, isn't it? Will you use a different toolkit for each OS? At least in Java, SWT handles all that dirty work and you can get a native GUI on just about every OS.&lt;br&gt;&lt;br&gt;&lt;b&gt;6. Web Applications&lt;/b&gt;&lt;br&gt;&lt;br&gt;What are you going to do for web applications? Make/use a CGI application? Use Perl/Python/PHP? Does the ugliness of those scripting languages bother you at all? Or the fact that you'll have to learn yet another language? With Java, you can build a totally custom web server in about 300 lines of code. You also have JSP.&lt;br&gt;&lt;br&gt;&lt;b&gt;7. Dynamic Linking&lt;/b&gt;&lt;br&gt;&lt;br&gt;Suppose you want to enable your application to have plugins, so that other developers can contribute parts of your application without seeing the core application's source code. How exactly are you going to do this? In Windows, you can use DLLs. What about in Linux? How are you going to distinguish between the two?&lt;br&gt;&lt;br&gt;What if somebody submits a plugin built for Linux and your application is built for Windows? Maybe you want to load that plugin anyway, because it technically shouldn't have any OS calls. How will you do it? The plugin is an .so file and your application is an EXE. Feel like figuring that out?&lt;br&gt;&lt;br&gt;&lt;b&gt;8. Exceptions vs. Core Dumps&lt;/b&gt;&lt;br&gt;&lt;br&gt;Think about this carefully: Would you rather receive a core dump (segmentation fault) if something goes really seriously wrong, or would you rather it be an exception?&lt;br&gt;&lt;br&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br&gt;&lt;br&gt;This is it for now... I may add to this article if I come up with anything else.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=da638489-2c59-4044-b529-75ec33c1f165"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,da638489-2c59-4044-b529-75ec33c1f165.aspx</comments>
      <category>.NET</category>
      <category>Commentary</category>
      <category>History</category>
      <category>Personal</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=61cb0cdf-c4f2-4e24-a03d-7bccaebde58b</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,61cb0cdf-c4f2-4e24-a03d-7bccaebde58b.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,61cb0cdf-c4f2-4e24-a03d-7bccaebde58b.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=61cb0cdf-c4f2-4e24-a03d-7bccaebde58b</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>Linux: Still Immature</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,61cb0cdf-c4f2-4e24-a03d-7bccaebde58b.aspx</guid>
      <link>http://www.dacris.com/blog/2009/02/10/LinuxStillImmature.aspx</link>
      <pubDate>Tue, 10 Feb 2009 05:44:34 GMT</pubDate>
      <description>&lt;div&gt;So this weekend I installed Ubuntu on my machine. Downloaded version 8.04 (x64) and burned it to a CD. Played around with it for a while, compiled a lot of source code, and guess what OS I'm in right now. Windows XP.&lt;br&gt;&lt;br&gt;Now granted I'm not an open source fanatic. Never been. Probably never will be. So I'm coming to Ubuntu with a sceptical attitude. Somewhat like an atheist going to church.&lt;br&gt;&lt;br&gt;I've used Ubuntu many times in the past 2 years, starting with Edgy Eft. After my various cumulative experiences with it, I have to say that Linux still has a way to go before even coming close to the two major commercial OSes out there: Windows and Mac OS. As you'll see in this review, what's "good enough" for Linux users isn't good enough for everyone else.&lt;br&gt;&lt;br&gt;I'll start with Ubuntu's weak points, because the strengths are discussed too often.&lt;br&gt;&lt;br&gt;&lt;b&gt;1. Installation&lt;/b&gt;&lt;br&gt;&lt;br&gt;I was lucky to have all the supported hardware. It even detected my sound card! I say "lucky" because I know from a previous experience with Ubuntu just how difficult it is to find drivers if you happen to have the kind of hardware that the open-source geek community considers uninteresting.&lt;br&gt;&lt;br&gt;For instance - in a previous attempt to install Ubuntu, I had a motherboard with an NVIDIA (nForce) chipset. The integrated sound didn't work, and the RAID - forget about it!&lt;br&gt;&lt;br&gt;So suppose you have hardware that isn't supported out of the box. Are you really out of luck? Well, not completely. You can google it and hope you find someone who ran into the same problem as you. That's pretty much your only recourse.&lt;br&gt;&lt;br&gt;During installation, my problem was that it didn't detect my RAID array. Even though it supported it. The installer just didn't bother to load dmraid and mount my RAID volumes. I consider that pretty awful. If that happened in Windows I'd be unable to access any of my data. But since it was Linux, I was able to hack around and install dmraid and edit my fstab to mount my RAID volumes.&lt;br&gt;&lt;br&gt;One more thing: installation was somewhat slow - given that it was only one 700 MB CD. It felt slower than Windows XP setup. Suggestion for Ubuntu developers: improve install speed.&lt;br&gt;&lt;br&gt;Here's another idea for the Ubuntu people: why not have a Windows Update-style website, where users can go and download drivers for their hardware, install optional OS software, and stuff like that? Instead of hunting around for the right apt-get command, I'd just go to that website.&lt;br&gt;&lt;br&gt;&lt;b&gt;2. Software Installation&lt;/b&gt;&lt;br&gt;&lt;br&gt;This is the part that I find most laugh-out-loud tragically outdated in Linux compared to every other OS. Suppose you want to download Mozilla Firefox. It is the same for every application, so let's just use Firefox as an example. You go to the Firefox website...&lt;br&gt;&lt;br&gt;There's only the 32-bit version. How do we get the 64-bit version? It's nowhere on the Mozilla site! WTF!! They don't support 64 bits?! Oh, wait...MAYBE they expect me to COMPILE this darn thing. Oh yeah! I heard Linux people talk about compiling things all the time! It must be so easy!&lt;br&gt;&lt;br&gt;So I get the Mozilla source code: I download another .tar.bz2 file from some random FTP server at the University of Oregon. I extract everything, now to a separate folder ~/firefox-source.&lt;br&gt;&lt;br&gt;Wow! Extraction was surprisingly quick for 40,000 files. Now what?&lt;br&gt;&lt;br&gt;Pop open a terminal and "ls". Let's see... there's a bunch of random text files. There's a "configure", another "configure", a README - oh! I'll read the README! README file points me to a web page for &lt;a href="https://developer.mozilla.org/en/Build_Documentation"&gt;instructions&lt;/a&gt; on how to build Mozilla. Hey, I'm a developer now! Feels kinda cool... Ok. Let's see... "For the impatient!" YES! Let's read that.&lt;br&gt;&lt;br&gt;OK. So I have to do a bunch of apt-gets. Not a lot. Let's do that. After getting a cryptic error I remember I have to do "sudo apt-get". (Funny thing is, the error doesn't mention "su" or "sudo" or "running as root" at ALL.)&lt;br&gt;&lt;br&gt;(10 minutes &amp;amp; quite a bit of downloading later) Next step: there's a bunch of commands I have to run. These should work. Wait: what's this "hg" thing? Isn't this going to download the Mozilla source all over again? Whatever. Run it.&lt;br&gt;&lt;br&gt;(30 minutes and LOOOOTS of downloading later) Whew. I swear I just downloaded Mozilla all over again! And now we build...&lt;br&gt;&lt;br&gt;autoconf-2.13 - "not found". Huh? Fine, "autoconf". There we go... (Thinks: What if "autoconf" didn't work? Would that have been the end of my journey?)&lt;br&gt;&lt;br&gt;Now "configure" and "make" run perfectly, but we've spent another 20 minutes. Now finally we can run Firefox. Where is it? "objdir-ff-release/dist/bin". Run firefox in there. No problems. We now have Firefox.&lt;br&gt;&lt;br&gt;So that took what... 60 minutes? Not that bad. But thinking back on it, there was a lot of "hoping" that we had to do. We had to tweak the autoconf command and hope it doesn't screw up anything. We had to hope that we had compatible versions of all the required libraries. We had to hope there were no extraneous config files anywhere on our system messing with anything. We had to hope we had the right version of "make", the right version of "gcc" or whatever compiler it needed to use, and so many other environment-specific things. Oh - and we had to hope that no output from "autoconf" was not an error.&lt;br&gt;&lt;br&gt;Now do you see why this is so laugh-out-loud tragic? Because in all these years of GUI installers, and GUI development environments, on Linux you still have to open up a terminal to compile something. There should be NO excuse why that should still be the case in this day and age.&lt;br&gt;&lt;br&gt;I have some minor pieces of advice for people distributing their source code:&lt;br&gt;1. For every operation, provide consistent, meaningful feedback. Provide a progress window with a progress bar, with status text that describes the operation presently taking place. Use LOG files. Stop outputting everything to the console. Stop inputting everything from the console. Again - use files! God!&lt;br&gt;2. Error messages should tell the END USER what to do to fix the problem - NOT spew out an internal error message that at most one programmer understands.&lt;br&gt;3. Want the user to configure something? Use a DIALOG BOX! With checkboxes, radio buttons, combo boxes, and all that good stuff. Stop using command line parameters and these arcane "configure" scripts. For God's sakes we are no longer in the black &amp;amp; white terminal days!&lt;br&gt;4. If your build instructions involve more than one step, consider making an application that combines all build steps into one. There is no excuse for "If running Linux, do this", "If running Windows, do this" kind of instructions.&lt;br&gt;&lt;br&gt;For the Ubuntu team, I suggest creating a GUI application called "Build Manager" which takes a source code package and does all the dirty compile &amp;amp; install work for you. You should have the choice of where to install it (after compilation) and any custom build options should be shown as checkboxes. Error messages should be logged and the log file should be shown to the user (in some graphical text editor) if there are errors. It should automatically find &amp;amp; use the right dependencies for each project.&lt;br&gt;&lt;br&gt;&lt;b&gt;3. OS and Software Configuration&lt;/b&gt;&lt;br&gt;&lt;br&gt;Another one of those weak points. In Windows, we have something called the registry. Now, granted, most end users have no idea what the registry is. However, advanced users hack the registry on a regular basis. No matter how you put it though, the registry is a great way to keep settings organized.&lt;br&gt;&lt;br&gt;On Linux, you have config files. Lots of them. In just about every place on the file system. Imagine if Windows were still using INI files today instead of the registry. It would be a nightmare to configure things. On Windows, you have user profiles (a folder where all user-specific settings are kept). You also have them on Linux, but hardly any app uses them. Whereas on Windows every application is forced to put its settings somewhere in Documents and Settings or HKEY_CURRENT_USER, on Linux anything goes.&lt;br&gt;&lt;br&gt;Think of Windows like a nice garden when it comes to configuration - it's very organized and every plant (application) is in its proper place. Linux is like a jungle. There is no organization. Every developer does as he/she sees fit. Many Linux developers are comparable to savages. They have never heard of directories, GUIs, or other civilized software concepts.&lt;br&gt;&lt;br&gt;Again, for Ubuntu to alleviate such headaches, it should provide very advanced configuration applets in its shell. What it provides now is fine for very simple configuration, but ultimately it should allow you to access any configuration file in any location in some kind of organized fashion.&lt;br&gt;&lt;br&gt;&lt;b&gt;4. The Good Things&lt;/b&gt;&lt;br&gt;&lt;br&gt;There are a few things that Linux does better than Windows, hands down:&lt;br&gt;&lt;br&gt;- Security is the primary benefit. The UNIX kernel is top notch when it comes to security. To do any real damage to a system, you need to access it as "root". Only in Vista has Microsoft tried to provide a similar level of security. But the security in Linux is at the kernel level. In Vista, it's in the shell (UI) layer. It's just not the same.&lt;br&gt;&lt;br&gt;- X Windows is in every way superior to USER+GDI. You have no idea how many times X Windows saved my ass, because I was able to log into a UNIX server at school (with GUI) from home. Unlike Remote Desktop, X Windows sends vector graphics over the net, saving bandwidth dramatically. Remote Desktop sends bitmap images.&lt;br&gt;&lt;br&gt;- Mounting. There's no concept of it in Windows. You have 26 drive letters and that's it. You can't mount a folder to a drive, or a drive to a folder.&lt;br&gt;&lt;br&gt;- Memory Management. Without a doubt, Linux is better at memory management. You can feel it. The hard drive is less active. The system is more responsive. Fewer page faults.&lt;br&gt;&lt;br&gt;- Everything is a file. You can treat any drive like a file, or any file like a drive. You can treat your sound card like a file. Write something to it and it'll output some weird sounds. It's kinda cool. In a slightly geeky way.&lt;br&gt;&lt;br&gt;- Boot Loader. The "GRUB" boot loader is fantastic. It's the most configurable boot loader I've ever come across. You can dual boot anything with anything. Of course, Microsoft has no reason to provide a good boot loader. After all, they want to maintain their monopoly.&lt;br&gt;&lt;br&gt;&lt;b&gt;5. Conclusion&lt;/b&gt;&lt;br&gt;&lt;br&gt;Linux is still immature. Mainly because Linux applications are immature. Linux could be a lot better if the applications written for it were written to the same standard as they are for other OSes. Linux has a lot of kernel-level features (borrowed from UNIX) that completely rival the Windows kernel. But application developers keep insisting on one formula: C++ &amp;amp; console. That formula worked in the 90s, but today it is just ancient. Now that it's open source, I'd like to see Java replace C++ in the Linux world much like .NET replaced Win32 API in the Windows world. There should be no more C++ developers except for those doing drivers or the OS itself. But that (why C++ sucks) is going to be another article.&lt;br&gt;&lt;br&gt;&lt;b&gt;Addendum:&lt;/b&gt;&lt;br&gt;The "immaturity" problem is not really a Linux problem. The OS is stable, secure, and very capable. The problem is with Linux software. Windows has a huge ecosystem of well-written, well-packaged applications. Linux just doesn't. It has a huge ecosystem of applications, but most of them are pure crap (to put it simply). Now, there are also some excellent Linux apps out there, ones that rival Windows apps, like "gedit" which rivals Notepad in a million ways. But those are the exceptions.&lt;br&gt;&lt;br&gt;An example of such an "immature" application is aMSN. The GUI acts like it was written from scratch by a 12-year-old kid. You have to click submenus to open them! It is totally non-standard. And that's because it uses Tcl/Tk, which totally sucks. I don't see why any developer in their right mind would use that toolkit. But there you have it. A really useful Linux application that (unfortunately) totally sucks! I use it only because I have no other choice.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=61cb0cdf-c4f2-4e24-a03d-7bccaebde58b"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,61cb0cdf-c4f2-4e24-a03d-7bccaebde58b.aspx</comments>
      <category>Commentary</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=99e014fd-fb8c-4c11-9efb-b31f724d5d6d</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,99e014fd-fb8c-4c11-9efb-b31f724d5d6d.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,99e014fd-fb8c-4c11-9efb-b31f724d5d6d.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=99e014fd-fb8c-4c11-9efb-b31f724d5d6d</wfw:commentRss>
      <title>WebKit Sucks</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,99e014fd-fb8c-4c11-9efb-b31f724d5d6d.aspx</guid>
      <link>http://www.dacris.com/blog/2009/02/10/WebKitSucks.aspx</link>
      <pubDate>Tue, 10 Feb 2009 03:48:57 GMT</pubDate>
      <description>&lt;div&gt;So I'm developing a streamlined Java web browser (just a window with a browser control), and I was rather torn between Mozilla (xulrunner) or WebKit. On the one hand, Mozilla was very easy to embed (SWT Browser widget). On the other hand, Mozilla is also much slower than WebKit when it comes to JavaScript processing.&lt;br&gt;&lt;br&gt;So I went through all the trouble to download &amp;amp; build WebKit (GTK port) only to realize that it doesn't support HTTP responses without a content type. In fact, it's extremely picky about content types. That's no good because I'm building a custom web server and I don't want to be forced to provide the content type. It would just enlarge my web server code by thousands of lines! To the WebKit team: PLEASE FIX THIS! Not every web server will hand you perfect responses on a silver platter. In fact, I don't even know how Safari can reach 90% of the websites out there.&lt;br&gt;&lt;br&gt;Mozilla, on the other hand, lets me respond with no content type. Good job Mozilla! In fact, Mozilla also provides Java (JNI) bindings for all platforms. I can't imagine why WebKit doesn't. It's not rocket science guys, come on.&lt;br&gt;&lt;br&gt;So these are my two biggest complaints about WebKit, and why I'm going to go with Mozilla. There is a rumour out there that the next JDK will include a WebKit-based browser control. I certainly hope they change their mind and use Mozilla instead. It's no wonder there's still no WebKit-based browser for Linux. Because WebKit sucks!&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=99e014fd-fb8c-4c11-9efb-b31f724d5d6d"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,99e014fd-fb8c-4c11-9efb-b31f724d5d6d.aspx</comments>
      <category>Commentary</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=3359dbdf-dec0-4d67-9bae-2c37537f6c8c</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,3359dbdf-dec0-4d67-9bae-2c37537f6c8c.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,3359dbdf-dec0-4d67-9bae-2c37537f6c8c.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3359dbdf-dec0-4d67-9bae-2c37537f6c8c</wfw:commentRss>
      <title>Blast from the Past</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,3359dbdf-dec0-4d67-9bae-2c37537f6c8c.aspx</guid>
      <link>http://www.dacris.com/blog/2008/06/20/BlastFromThePast.aspx</link>
      <pubDate>Fri, 20 Jun 2008 07:47:00 GMT</pubDate>
      <description>&lt;div&gt;I stumbled upon a file I wrote when I was only 12 years old when I coded a DOS game called Galawar (&lt;a href="http://www.winsite.com/bin/Info?500000003606"&gt;downloadable here!&lt;/a&gt;). I had an insane amount of computer knowledge back then:&lt;br&gt;&lt;br&gt;&lt;b&gt;This is me, sometime in 1999...&lt;/b&gt;&lt;br&gt;==============================================================================&lt;br&gt;-----&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ***&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; What is protected mode?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ***&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------&lt;br&gt;==============================================================================&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Protected mode isn't even close to a mode of security as you might think.&lt;br&gt;In fact, it is very different than that! Protected mode is a mode of your&lt;br&gt;CPU, where it can access(by using 24-bit memory addresses) a bigger amount of&lt;br&gt;memory than the usual 640 KB or less of conventional memory. Conventional&lt;br&gt;memory was the first memory to work with the 8086 and 8088 processors. Before&lt;br&gt;that, there was only 64 KB of memory or less to work with. Can you imagine?&lt;br&gt;Now, with the introduction of the 286 processor, we entered the world of&lt;br&gt;megabytes. The maximum amount of memory a 286 processor could have accessed&lt;br&gt;using protected mode was 16 MB. Protected mode was enabled and is enabled still&lt;br&gt;by the most common driver, HIMEM.SYS. It enables access to the High memory area&lt;br&gt;which can exceed the old 640 KB limit.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Galawar uses the 386 processor which has some enhancements. It can access&lt;br&gt;memory using the virtual x86 mode, which is a mode that can simulate memory&lt;br&gt;through the hard disk using a page file(when there is not enough memory it&lt;br&gt;automatically swaps out some data to the hard disk. This is called A20 line&lt;br&gt;control and is enabled by HIMEM.SYS). Galawar uses the 32-bit enhancement&lt;br&gt;of the 386 processor to enable faster processing and, therefore, larger data&lt;br&gt;to go with the 16 MB of memory which can be accessed. 32-bit operating can't&lt;br&gt;be used on a 286 processor which wasn't a 32-bit processor. That's why, even&lt;br&gt;though Galawar uses protected mode compatible with the 286, Galawar needs a&lt;br&gt;386 processor to run.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Protected mode is divided into two categories of memory, which can each&lt;br&gt;equal a maximum of 16 MB per block. The first and fastest kind is XMS memory,&lt;br&gt;which Galawar uses. Galawar could have used EMS memory, the second kind, but&lt;br&gt;it is a lot slower because it is divided into small handles. Each handle can't&lt;br&gt;be bigger than 16 KB. That's why, instead of using EMS memory, Galawar turned&lt;br&gt;back to the old conventional memory, which is somewhat faster than EMS memory&lt;br&gt;because it allows 64 KB handles. Also, Galawar simplified its requirements&lt;br&gt;because it would have wanted the EMM386 driver installed too, which can cause&lt;br&gt;real trouble in interaction with XMS memory. By the way, XMS memory can have&lt;br&gt;handle sizes up to 16 MB, in increments of 32 KB!&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Galawar hates Windows of any version because it uses too much processor&lt;br&gt;time(25% up to 50%) and because it uses too much memory. If you run Windows&lt;br&gt;in 386 Enhanced mode be careful because the memory might be in a page file and&lt;br&gt;Galawar could slow down a lot. Use DOS instead!(THIS DOESN'T REALLY MATTER&lt;br&gt;ON A PENTIUM OR PENTIUM II/III PROCESSOR).&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; So, now I hope you know what protected mode is and why Galawar needs the&lt;br&gt;386 processor. You can impress your parents with this as well as your computer&lt;br&gt;teacher!&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=3359dbdf-dec0-4d67-9bae-2c37537f6c8c"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,3359dbdf-dec0-4d67-9bae-2c37537f6c8c.aspx</comments>
      <category>History</category>
      <category>Personal</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=107b8668-4005-42ca-8019-dc0fd2b03344</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,107b8668-4005-42ca-8019-dc0fd2b03344.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,107b8668-4005-42ca-8019-dc0fd2b03344.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=107b8668-4005-42ca-8019-dc0fd2b03344</wfw:commentRss>
      <title>The End of the Internet</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,107b8668-4005-42ca-8019-dc0fd2b03344.aspx</guid>
      <link>http://www.dacris.com/blog/2008/06/13/TheEndOfTheInternet.aspx</link>
      <pubDate>Fri, 13 Jun 2008 23:43:23 GMT</pubDate>
      <description>&lt;div&gt;I hate to be the bearer of bad news, but it appears we have problems bigger than just &lt;a href="http://www.dacris.com/blog/2008/06/05/DraconianCopyrightLawsComingToCanada.aspx"&gt;Canadian copyright laws&lt;/a&gt;.&lt;br&gt;&lt;br&gt;In an &lt;a href="http://prisonplanet.com/articles/june2008/061108_kill_internet.htm"&gt;article&lt;/a&gt; by Paul Joseph Watson on PrisonPlanet.com,&lt;br&gt;&lt;br&gt;"&lt;br&gt;&lt;div&gt; 
        &lt;p class="subhead"&gt;Over the past few years, a chorus of propaganda intended 
          to demonize the Internet and further lead it down a path of strict control 
          has spewed forth from numerous establishment organs:&lt;/p&gt;
      &lt;/div&gt;
      &lt;ul&gt;&lt;li class="subhead"&gt;&lt;a href="http://www.prisonplanet.com/articles/april2007/130407internet.htm"&gt;Time 
          magazine reported&lt;/a&gt; last year that researchers funded by the federal 
          government want to shut down the internet and start over, citing the 
          fact that at the moment there are loopholes in the system whereby users 
          cannot be tracked and traced all the time. &lt;/li&gt;&lt;span class="subhead"&gt; The projects echo moves we have previously reported 
        on to clamp down on &lt;a href="http://kurtnimmo.com/?p=352"&gt;internet neutrality&lt;/a&gt; 
        and even to designate a new form of the internet known as &lt;a href="http://www.google.com/search?ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;q=internet%2B2&amp;amp;domains=prisonplanet.com&amp;amp;sitesearch=prisonplanet.com"&gt;Internet 
        2&lt;/a&gt;.&lt;br&gt;
        &lt;br&gt;
        &lt;/span&gt;&lt;li class="subhead"&gt;In a display of bi-partisanship, there have recently 
          been calls for &lt;a href="http://news.com.com/Congress%20may%20consider%20mandatory%20ISP%20snooping/2100-1028_3-6066608.html?tag=sas.email"&gt;all 
          out mandatory ISP snooping&lt;/a&gt; on all US citizens by both Democrats 
          and Republicans alike. &lt;br&gt;
          &lt;br&gt;
        &lt;/li&gt;&lt;li&gt; 
          &lt;div class="subhead"&gt; The White House's own recently &lt;a href="http://www.prisonplanet.com/articles/september2006/070906terroristrecruiters.htm"&gt;de-classified 
            strategy&lt;/a&gt; for "winning the war on terror" targets Internet 
            conspiracy theories as a recruiting ground for terrorists and threatens 
            to "diminish" their influence.&lt;br&gt;
            &lt;br&gt;
          &lt;/div&gt;
        &lt;/li&gt;&lt;li&gt; 
          &lt;div class="subhead"&gt; The Pentagon recently announced its effort to 
            &lt;a href="http://www.rawstory.com/news/2006/Raw_obtains_CENTCOM_email_to_bloggers_1016.html"&gt;infiltrate 
            the Internet and propagandize&lt;/a&gt; for the war on terror.&lt;br&gt;
            &lt;br&gt;
          &lt;/div&gt;
        &lt;/li&gt;&lt;li&gt; 
          &lt;div class="subhead"&gt; In a speech last October, Homeland Security director 
            &lt;a href="http://www.prisonplanet.com/articles/October2006/171006Web.htm"&gt;Michael 
            Chertoff identified the web as a "terror training camp,"&lt;/a&gt; 
            through which "disaffected people living in the United States" 
            are developing "radical ideologies and potentially violent skills." 
            His solution is "intelligence fusion centers," staffed by 
            Homeland Security personnel which will go into operation next year.&lt;br&gt;
            &lt;br&gt;
          &lt;/div&gt;
        &lt;/li&gt;&lt;li&gt; 
          &lt;div class="subhead"&gt;The U.S. Government &lt;a href="http://www.prisonplanet.com/articles/january2007/180107bloggers.htm"&gt;wants 
            to force bloggers&lt;/a&gt; and online grassroots activists to register 
            and regularly report their activities to Congress. Criminal charges 
            including a possible jail term of up to one year could be the punishment 
            for non-compliance.&lt;br&gt;
            &lt;br&gt;
          &lt;/div&gt;
        &lt;/li&gt;&lt;li&gt; 
          &lt;div class="subhead"&gt;A landmark legal case on behalf of the Recording 
            Industry Association of America and other global trade organizations 
            seeks to &lt;a href="http://www.prisonplanet.com/articles/november2006/291106shutdown.htm"&gt;criminalize 
            all Internet file sharing&lt;/a&gt; of any kind as copyright infringement, 
            effectively shutting down the world wide web - and their argument 
            is supported by the U.S. government.&lt;br&gt;
            &lt;br&gt;
          &lt;/div&gt;
        &lt;/li&gt;&lt;li&gt; 
          &lt;div class="subhead"&gt; A landmark legal ruling in Sydney goes further 
            than ever before in setting the trap door for the destruction of the 
            Internet as we know it and the end of alternative news websites and 
            blogs by creating the precedent that simply &lt;a href="http://www.prisonplanet.com/articles/december2006/201206illegaltolink.htm"&gt;linking 
            to other websites is breach of copyright&lt;/a&gt; and piracy.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;...&lt;br&gt;"&lt;br&gt;&lt;br&gt;The plan is to shut down the Internet as we know it today and start up a new highly-supervised Internet known as Internet 2.0, which will resemble cable TV, with a few corporations controlling all content.&lt;br&gt;&lt;br&gt;Enjoy!&lt;br&gt;&lt;br&gt;(BTW, in Sydney I could be breaking copyright laws by just linking to things! Yikes!)&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=107b8668-4005-42ca-8019-dc0fd2b03344"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,107b8668-4005-42ca-8019-dc0fd2b03344.aspx</comments>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=1628f16c-2dff-4b55-9523-7ee45bc89f4b</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,1628f16c-2dff-4b55-9523-7ee45bc89f4b.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,1628f16c-2dff-4b55-9523-7ee45bc89f4b.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1628f16c-2dff-4b55-9523-7ee45bc89f4b</wfw:commentRss>
      <title>Draconian Copyright Laws Coming to Canada!</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,1628f16c-2dff-4b55-9523-7ee45bc89f4b.aspx</guid>
      <link>http://www.dacris.com/blog/2008/06/05/DraconianCopyrightLawsComingToCanada.aspx</link>
      <pubDate>Thu, 05 Jun 2008 00:55:01 GMT</pubDate>
      <description>&lt;div&gt;&lt;b&gt;URGENT MESSAGE TO ALL CANADIANS&lt;/b&gt;&lt;br&gt;&lt;br&gt;Please read the following article:&lt;br&gt;&lt;a href="http://www.canada.com/topics/technology/story.html?id=e0483e28-8f3d-43a9-84ee-1aa6487f9abb"&gt;$500 fine eyed for illegal file downloads&lt;/a&gt;&lt;br&gt;&lt;br&gt;As a result of these new copyright laws, your car WILL be searched at the border and any iPods / laptops WILL be confiscated!&lt;br&gt;&lt;br&gt;Also, if the law passes you can be sued for file sharing just like in the US!&lt;br&gt;&lt;br&gt;&lt;b&gt;Make your voice heard...&lt;br&gt;&lt;a href="http://www.ccer.ca/send-a-letter-to-harper-prentice-verner-and-stop-the-canadian-dmca"&gt;Send a letter to the Prime Minister&lt;/a&gt;&lt;br&gt;&lt;/b&gt;&lt;br&gt;For more on this topic...&lt;br&gt;&lt;br&gt;&lt;a href="http://digg.com/gaming_news/URGENT_MESSAGE_TO_CANADIANS_Our_way_of_life_is_in_danger"&gt;Digg - URGENT MESSAGE TO CANADIANS, Our way of life is in danger&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/82inH3sYY_U&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/82inH3sYY_U&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="344" width="425"&gt;&lt;/object&gt;&lt;/p&gt;&lt;br&gt;Also, come next election, I'm voting NDP!&lt;br&gt;&lt;br&gt;&lt;br&gt;UPDATE: "&lt;a href="http://www.cbc.ca/technology/story/2008/06/04/tech-copyright.html?ref=rss"&gt;Copyright reform bill appears to be in limbo&lt;/a&gt;"&lt;br&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=1628f16c-2dff-4b55-9523-7ee45bc89f4b"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,1628f16c-2dff-4b55-9523-7ee45bc89f4b.aspx</comments>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.dacris.com/blog/Trackback.aspx?guid=dff46d16-2c1d-44cb-b953-a2bb2674a5b1</trackback:ping>
      <pingback:server>http://www.dacris.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.dacris.com/blog/PermaLink,guid,dff46d16-2c1d-44cb-b953-a2bb2674a5b1.aspx</pingback:target>
      <dc:creator>Dan Tohatan (Admin)</dc:creator>
      <wfw:comment>http://www.dacris.com/blog/CommentView,guid,dff46d16-2c1d-44cb-b953-a2bb2674a5b1.aspx</wfw:comment>
      <wfw:commentRss>http://www.dacris.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=dff46d16-2c1d-44cb-b953-a2bb2674a5b1</wfw:commentRss>
      <title>Genetic Holocaust</title>
      <guid isPermaLink="false">http://www.dacris.com/blog/PermaLink,guid,dff46d16-2c1d-44cb-b953-a2bb2674a5b1.aspx</guid>
      <link>http://www.dacris.com/blog/2008/03/03/GeneticHolocaust.aspx</link>
      <pubDate>Mon, 03 Mar 2008 02:00:09 GMT</pubDate>
      <description>&lt;div&gt;Forget nuclear war. Forget global warming. We are on the verge of a genetic holocaust. The biotech industry is destroying all life on Earth as we speak. There is the real risk that every species on this planet will soon be extinct, including the human species. After listening to the 2/29/2008 Alex Jones show, my attitude toward the future of humanity is now one of despair. A massive extinction has begun, and nobody seems to care (except perhaps those who built the Doomsday Vault).&lt;br&gt;&lt;br&gt;Please listen to the show (thanks to Gatekeeperinvasion) and I dare you not to be outraged:&lt;br&gt;&lt;br&gt;
&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sBkYE3Si8UI"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/sBkYE3Si8UI" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/object&gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;a href="http://youtube.com/watch?v=ClLObmuFXWM"&gt;&lt;strong&gt;Next video...&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
After listening, I went to Health Canada's website to see what the government has done about this. The &lt;a href="http://www.hc-sc.gc.ca/fn-an/gmf-agm/fs-if/faq_4_e.html#6"&gt;website&lt;/a&gt; is incredibly dovish on the whole GM issue:&lt;br&gt;&lt;br&gt;&lt;b&gt;"&lt;br&gt;
What are the risks of applying the techniques of genetic modification to foods?
&lt;br&gt;&lt;br&gt;
The techniques of modern biotechnology do not introduce risks which are different from those already associated with the food supply. Many of the issues raised by foods resulting from genetic modification are equally applicable to foods produced by conventional means.&lt;br&gt;"&lt;/b&gt;&lt;br&gt;&lt;br&gt;Did Monsanto write Health Canada's website? This is absolutely disgusting and shocking.&lt;br&gt;&lt;br&gt;Please visit &lt;a href="http://www.seedsofdeception.com"&gt;SeedsOfDeception.com&lt;/a&gt; to find out the truth.&lt;br&gt;
&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.dacris.com/blog/aggbug.ashx?id=dff46d16-2c1d-44cb-b953-a2bb2674a5b1"/&gt;&lt;/div&gt;</description>
      <comments>http://www.dacris.com/blog/CommentView,guid,dff46d16-2c1d-44cb-b953-a2bb2674a5b1.aspx</comments>
      <category>Commentary</category>
      <category>News</category>
      <category>Technology</category>
    </item>
  </channel>
</rss>