<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The NeoSmart Files &#187; Programming</title>
	<atom:link href="http://neosmart.net/blog/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://neosmart.net/blog</link>
	<description>Connecting Ideas</description>
	<lastBuildDate>Sun, 08 Nov 2009 20:24:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>On the matter of Firefox and memory leaks&#8230;</title>
		<link>http://neosmart.net/blog/2009/on-the-matter-of-firefox-and-memory-leaks/</link>
		<comments>http://neosmart.net/blog/2009/on-the-matter-of-firefox-and-memory-leaks/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 23:18:33 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Memory Leaks]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/?p=660</guid>
		<description><![CDATA[Recently our original article/rant on Firefox&#8217;s legendary memory abuse has seen an increase in comments and views; and I had intended to post the following comment in light of the article&#8217;s rebirth and the ensuing discussions in the comments.
The reply turned out to be longer than I&#8217;d originally intended, so here it is as its [...]]]></description>
			<content:encoded><![CDATA[<p>Recently our original article/rant on <a href="http://neosmart.net/blog/2008/firefox-3-is-still-a-memory-hog/">Firefox&#8217;s legendary memory abuse</a> has seen an increase in comments and views; and I had intended to post the following comment in light of the article&#8217;s rebirth and the ensuing discussions in the comments.</p>
<p>The reply turned out to be longer than I&#8217;d originally intended, so here it is as its own post.</p>
<blockquote><p>I&#8217;ll try to be as objective as possible in this reply:</p>
<p>The most important thing for frustrated end users to keep in mind is that Mozilla/Firefox cannot be held responsible for cases where incorrectly written plugins and/or extensions cause Firefox to abuse system memory &#8211; that&#8217;s the trade-off between empowering developers and keeping the code squeaky clean.</p>
<p>Most of the cases reported are indeed caused by one or more extensions or plugins gone awry, doing something they shouldn&#8217;t be doing, or something they don&#8217;t know how to do properly. Some of the most popular plugins for Firefox are notorious for their memory leaks; but few users realize just how dangerous they can be, and that the Firefox devs cannot really do anything about it.</p>
<p>At the same time, there can be no doubt that Firefox has some memory leaks in the codebase itself. They&#8217;re clearly not easily reproducible and they don&#8217;t happen very readily nor often enough because the developers have clearly spared no effort in their attempts to address this problem for once and for all. But they&#8217;re there, nevertheless.</p>
<p><span id="more-660"></span></p>
<p>No matter how you look at it, the fact remains that under certain circumstances, doing certain stuff on certain machines in certain ways for certain people, Firefox still leaks memory. A lot. On Mac, Windows, and Linux. Yes, on clean installs too.</p>
<p>Now as a systems developer (Mac, Windows, and Linux w/ their respective native APIs; embedded systems; .NET and more with years of experience), I must say that of all the bugs and problems I&#8217;ve ever encountered, there is nothing that &#8220;cannot be fixed.&#8221; To say that this behavior is out of Firefox&#8217;s hands because it&#8217;s not their code that&#8217;s causing the problem is simply not true.</p>
<p>I&#8217;ve experienced memory leaks like this (and worse) in my own code in the past, largely due to stupid mistakes and silly oversights. It takes <em>extreme</em> persistency to make memory leaks go away &#8211; a willingness to spend 24 hours on-end &amp; non-stop crawling through code, memory dumps, and stack traces to try and find out where things are going wrong. It requires remote debugging on allegedly-affected machines. It requires reading through dozens to hundreds of sometimes clueless users describing in the most general of terms what they were doing when things went wrong. In short, it requires a lot of effort and very little recognition and a hell of a lot of hair-pulling.</p>
<p>But it can be done.</p>
<p>C++ is an incredibly powerful language. If you know the code you&#8217;re developing and the systems you&#8217;re writing it for, there&#8217;s nothing you cannot fix. Dynamic memory allocation is the biggest gift/curse in the world, but in C and C++ if you can allocate something that means you can free it. Even if you don&#8217;t have a mechanism to find out where it is and how it got there. But you just have to be cunning enough to figure out how to track them down and set them free, taking care to know when and where to do so safely&#8230;. and you have to be familiar with every single routine and how they work; which is obviously extremely difficult with codebases as large and complicated as Firefox&#8217;s.</p>
<p>There are even workarounds for the memory leaks (assuming they can be isolated) if the developers aren&#8217;t willing or capable of doing the aforementioned. If you&#8217;re dealing with leaky libraries that you can&#8217;t fix, in the very worst-case scenarios you can hook into them at runtime, access the functions you need, reserve the memory required, get the job done, copy <em>only</em> what you need, then free it right back. All of it. You can have helper threads or processes handle this stuff then wipe them and their memory spaces clean when they&#8217;re done to complete the memory insulation.</p>
<p>There&#8217;s a lot of stuff that can be done, and none of them are easy. But the journey of a thousand miles begins with a single step, and developers and evangelists denying a problem exists isn&#8217;t the way to go about addressing the matter at hand.</p>
</blockquote>
<p>At the end of the day, Firefox is a great browser and any complaints about its performance and its shortcomings are only out of a sense that it can do better &#8211; that it has to in order to remain at the top of its game in a cutthroat market of only the most intense of competition.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2009/on-the-matter-of-firefox-and-memory-leaks/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>What the TechCrunch Tablet Should Really Look Like</title>
		<link>http://neosmart.net/blog/2008/what-the-techcrunch-tablet-should-really-look-like/</link>
		<comments>http://neosmart.net/blog/2008/what-the-techcrunch-tablet-should-really-look-like/#comments</comments>
		<pubDate>Sun, 31 Aug 2008 13:01:18 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Embedded Systems]]></category>
		<category><![CDATA[Tablet PC]]></category>
		<category><![CDATA[TechCrunch]]></category>
		<category><![CDATA[TechCrunch Tablet]]></category>
		<category><![CDATA[UMPC]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/what-the-techcrunch-tablet-should-really-look-like/</guid>
		<description><![CDATA[Michael Arrington is understandably pretty excited about how the TechCrunch Tablet is shaping up so far, but to use it seems they’re going about it the wrong way.
For a device that’s supposed to do Firefox, Skype and not much more, an underpowered PC with a touchscreen isn’t going to accomplish much. For one thing, Firefox [...]]]></description>
			<content:encoded><![CDATA[<p>Michael Arrington is understandably pretty excited about how <a href="http://www.techcrunch.com/2008/07/21/we-want-a-dead-simple-web-tablet-help-us-build-it/">the TechCrunch Tablet</a> is shaping up <a href="http://www.techcrunch.com/2008/08/30/update-on-the-techcrunch-tablet-prototype-a/">so far</a>, but to use it seems they’re going about it the wrong way.</p>
<p>For a device that’s supposed to do Firefox, Skype and not much more, an underpowered PC with a touchscreen isn’t going to accomplish much. For one thing, Firefox is a huge performance drain and <a href="http://neosmart.net/blog/2008/firefox-3-is-still-a-memory-hog/">a memory hog to boot</a> that underpowered hardware (even on-par with an Eee) simply won’t support and for another, there’s no way to get PC hardware down to the sub-$200 price range.</p>
<p>What TechCrunch wants – whether they know it or not – is an oversized PDA, not an underpowered PC. And it’s not just a question of semantics, it’s a question of foundations and principles – and it makes a huge difference in terms of end-user experience and the bottom line. </p>
<p>For the functionality that TechCrunch is trying to pack into this opensource, mass-market web gadget, there’s nothing that wouldn’t work better, faster, and cheaper on specialized hardware rather than on generic PC components.</p>
<p> <span id="more-640"></span>
<p>While the world is now in the midst of a touch-screen craze, it’s important to keep in mind when and where that works. For a <em>web browser</em> and a VoIP client, a touchscreen doesn’t provide much added value, but it does add quite a hefty amount to the bottom line. A couple of buttons at the top/side of the device that provide basic functionality (Go/Dial, Stop/End) would certainly suffice for most purposes. A thin slide-out keyboard is far-cheaper <em>and more user-friendly</em> than an onscreen keyboard, and would make things like entering site addresses and using email clients and Google Docs quite enjoyable.</p>
<p>A PDA-style ARM processor, running software compiled for the ARM platform could provide a more satisfactory end-user experience with regards to performance <em>and</em> can come in smaller form-factors and/or as embedded systems. </p>
<p>It’s important to bear in mind the difference between consumer electronics and a computer. Whereas Asus had to keep their Eee x86 so that it can run whatever a a PC user could demand from it, a web browsing tablet only needs to run <em>what the manufacturer intends it to</em>. In hardware design, there&#8217;s a constant compromise between flexibility and complexity which is directly tied to price, size, and ease-of-use. </p>
<p>A tablet designed to surf the web and run Skype doesn&#8217;t <em>need</em> to do anything else; but it <em>shouldn&#8217;t </em>do anything else if price and size are of any concern. It&#8217;s easy to get caught up imagining a device that can do anything and everything; but you can only go so far before things begin to spiral out of control.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/what-the-techcrunch-tablet-should-really-look-like/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Request_URI For IIS Updated with ISAPI_Rewrite 3 Support</title>
		<link>http://neosmart.net/blog/2008/request_uri-for-iis-updated-with-isapi_rewrite-3-support/</link>
		<comments>http://neosmart.net/blog/2008/request_uri-for-iis-updated-with-isapi_rewrite-3-support/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 12:50:55 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[NeoSmart Technologies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[ISAPI_Rewrite]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Request_URI for IIS]]></category>
		<category><![CDATA[Servers]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/request_uri-for-iis-updated-with-isapi_rewrite-3-support/</guid>
		<description><![CDATA[Request_URI for IIS, NeoSmart Technologies’ compatibility toolkit for IIS on Windows, has been updated to version 1.1, with support for Helicon’s ISAPI_Rewrite 3.x
With this update the installation process has been simplified somewhat, in particular the need modify HTTPD.INI to set the server variables has been eliminated – you just need to install ISAPI_Rewrite 3, configure [...]]]></description>
			<content:encoded><![CDATA[<p>Request_URI for IIS, NeoSmart Technologies’ compatibility toolkit for IIS on Windows, has been updated to version 1.1, with support for Helicon’s ISAPI_Rewrite 3.x</p>
<p>With this update the installation process has been simplified somewhat, in particular the need modify HTTPD.INI to set the server variables has been eliminated – you just need to install ISAPI_Rewrite 3, configure php.ini to load up <a href="http://neosmart.net/dl.php?id=7">request_uri.inc</a>, and you’re set.</p>
<p>Request_URI for Windows 1.1 retains backwards compatibility with ISAPI_Rewrite 2.x for those of you who’d rather not switch to the new (and much-improved) version 3.x.</p>
<p> <span id="more-636"></span>
<p class="save">Download <a href="http://neosmart.net/dl.php?id=7">Request_URI for IIS 1.1</a></p>
<p>The full instructions for installing and configuring Request_URI for Windows can be found at <a href="http://neosmart.net/blog/2006/100-apache-compliant-request_uri-for-iis-and-windows/">the original posting</a>. Please post any support questions <a href="http://neosmart.net/forums/">in the forums</a>.</p>
<p><small>NeoSmart Technologies is not affiliated with Helicon software in any way.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/request_uri-for-iis-updated-with-isapi_rewrite-3-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disturbing Stats About Facebook Users &amp; Security</title>
		<link>http://neosmart.net/blog/2008/disturbing-stats-about-facebook-users-and-security/</link>
		<comments>http://neosmart.net/blog/2008/disturbing-stats-about-facebook-users-and-security/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 16:00:58 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[Blogosphere]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[Passwords]]></category>
		<category><![CDATA[Phishing]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/disturbing-stats-about-facebook-users-amp-security/</guid>
		<description><![CDATA[There’s a screenshot that’s been sitting on my desktop for a rather long time now, and it’s as scary as it is interesting.
Facebook recently conducted a poll which showed up on the homepage newsfeed, and asked Facebook members just how exactly did they think Facebook’s “friend finder” worked when it prompted them for their email [...]]]></description>
			<content:encoded><![CDATA[<p>There’s a screenshot that’s been sitting on my desktop for a rather long time now, and it’s as scary as it is interesting.</p>
<p>Facebook recently conducted a poll which showed up on the homepage newsfeed, and asked Facebook members just how exactly did they think Facebook’s “friend finder” worked when it prompted them for their email address &amp; password in order to get a list of contacts. The numbers pretty much speak for themselves, here’s what they looked like near the end of the campaign:</p>
<p><img title="Facebook Poll" src="http://neosmart.net/blog/wp-content/uploads/facebookpoll.png" border="0" alt="Facebook Poll" /></p>
<p>Now ignore the dark blue bar: it’s a red herring and doesn’t contain any interesting info. The real juicy bit is the “Yes” option, and its 20% response.</p>
<p><span id="more-627"></span></p>
<p><strong>20% of Facebook’s 80 Million active users (give or take) believe that the passwords for their email addresses are being stored when they use the Friend Finder…. and that doesn’t bother them in the least.</strong> That’s <em>sixteen million people</em> who don&#8217;t give a damn about their privacy, the contents of their email, or who has control of their entire online personas.</p>
<p>This is a subject that&#8217;s been chewed <span style="text-decoration: line-through;">half</span> to death already countless times by people far more in the know than myself; Jeff Atwood’s <a href="http://www.codinghorror.com/blog/archives/001128.html">excellent article on the topic</a> covers the dangers of sites asking for users’ email addresses &amp; passwords, and – far more importantly – presents several more secure alternatives for web application developers looking to expand their social networks.</p>
<p>To put things in perspective, take a look at this <a href="http://www.readwriteweb.com/archives/your_email_password_a_true_hor.php">downright horrifying tale</a> on ReadWriteWeb about software that prompted users for their email addresses &amp; passwords, then proceeded to save them for malicious use&#8230; then realize that 16 million Facebook users out there don’t care if this happens to them. Think about all the private, sensitive, confidential information available on your email account and just how truly terrible it would be for that info to fall in the wrong hands.</p>
<p>Of course all this begs the question: who’s to blame for this bout of end-user stupidity (for lack of a more politically-correct term)? Is it naïveté/trust in the goodwill of others that gets users to give out such sensitive data to people (Facebook has <em>500</em> employees!) they don’t know from Adam? Or is it that they just don’t get how dangerous it can be (see <a href="http://www.readwriteweb.com/archives/your_email_password_a_true_hor.php">the ReadWriteWeb article</a> for proof)? Or is it, maybe, that they’ve simply gotten accustomed to being asked for their email address and corresponding password by “trusted” sites they love to visit, too caught up in the “gather as many friends as you can” game to give a second thought to identity theft and fraud?</p>
<p>Personally, I can recall a time when most “normal people” I know would refuse flat-out to share such sensitive data with a site (phishing, tech support, etc. obviously excluded); but in the wake of “Web 2.0” it’s become so <em>normal</em> to ask for email addresses and passwords that no one ever gives it a second thought.</p>
<p>And it’s not just Facebook. To be totally frank, even <em>if</em> Facebook were to store end users’ passwords in their database, the access to that info would probably be very highly guarded… but when every new social network on the block is suddenly doing the same thing – you can get a good picture of just how easy it would be to steal users’ passwords.</p>
<p><strong>MQ’s 3 Steps for World Domination</strong></p>
<ol>
<li>Send out an email purporting to be from “the hottest new social network around” informing the recipient that their “friends” want them to join: “Click here to show Peter you’re a real friend!”</li>
<li>Get the user to register a new account – make the procedure as pain-free and simple as possible… and right then and there on the registration page ask for the user’s email address <em>and password</em> so as to “make it easy to tell all your friends you care and get popular really fast&#8230;”</li>
<li>Profit.</li>
</ol>
<p>As soon as it&#8217;s OK for one person to do it, it&#8217;ll be OK for everyone to&#8230; and then we&#8217;ll be in too deep to do anything about it.</p>
<p><strong>So why does Facebook &#8211; after polling their end users and seeing just how dire the situation is &#8211; continue to use the same flawed mechanism of harvesting email addresses&#8230; especially when better, safer alternatives exist?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/disturbing-stats-about-facebook-users-and-security/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Firefox 3 is Still a Memory Hog</title>
		<link>http://neosmart.net/blog/2008/firefox-3-is-still-a-memory-hog/</link>
		<comments>http://neosmart.net/blog/2008/firefox-3-is-still-a-memory-hog/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 17:23:52 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Firefox 3]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/firefox-3-is-still-a-memory-hog/</guid>
		<description><![CDATA[One of the biggest “improvements” that Mozilla claims has made its way into Firefox 3 is improved memory usage, in particular, the vanquishing of memory leaks:
Memory usage: Several new technologies work together to reduce the amount of memory used by Firefox 3 over a web browsing session. Memory cycles are broken and collected by an [...]]]></description>
			<content:encoded><![CDATA[<p>One of the biggest “improvements” that Mozilla claims has <a href="http://www.mozilla.com/en-US/firefox/3.0rc1/releasenotes/">made its way into Firefox 3</a> is improved memory usage, in particular, the vanquishing of memory leaks:</p>
<blockquote><p>Memory usage: Several new technologies work together to reduce the amount of memory used by Firefox 3 over a web browsing session. Memory cycles are broken and collected by an automated cycle collector, a new memory allocator reduces fragmentation, hundreds of leaks have been fixed, and caching strategies have been tuned.</p></blockquote>
<p>We’re sorry to have to break it to you, but if you thought it was too good to be true you were right. Firefox still uses a lot of memory – way too much memory for a web browser.</p>
<p><span id="more-585"></span></p>
<p>We haven’t seen it reach 1GiB+ like we have with previous versions, but it’s quite normal for Firefox 3 to be sucking up ~300MiB of memory right off the bat, with<em>out</em> a memory leak (the difference between memory leaks and normal memory <em>ab</em>usage is that in a memory leak you’ll see the memory usage keep increasing the longer the browser is open/in-use).</p>
<p><a href="http://neosmart.net/blog/wp-content/uploads/firefox.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" title="Firefox Memory Hog" src="http://neosmart.net/blog/wp-content/uploads/firefoxmemoryhog.png" border="0" alt="Firefox Memory Hog" width="601" height="503" /></a></p>
<p><a href="http://neosmart.net/gallery/v/apps/Firefox/Firefox+Hole.png.html"><img src="http://neosmart.net/gallery/d/7330-1/Firefox+Hole.png" alt="Firefox Wasting 800 MiB of memory" /></a></p>
<p>This is a screenshot of Firefox’s memory usage after just a half hour or so with only a couple of HTML-only tabs open. This particular screenshot was taken on Linux where Firefox is using the shared GTK libraries – on our Windows PCs, it’s normal to find Firefox 3 taking up ~350MiB or so on both XP and Vista.</p>
<p>The sad thing is that <em>isn’t</em> caused by one of the memory leaks that plagued previous versions of Firefox. It’s Firefox 3 <em>is supposed to</em> take up that much memory – at least, that’s our assumption given how we’ve never seen it take up less.</p>
<p>Firefox 3 has a number of memory-hogging features added to the mix that are probably at least partially responsible for the absolutely gargantuan memory footprint. For example, <a href="http://me.phillipoertel.com/articles/2008/04/23/firefox-3-uses-sqlite-to-store-bookmarks">Firefox now uses an SQL engine</a> to keep track of your history and bookmarks, amongst other things. While that particular feature is powered by SQL-lite, which should – in theory – not take up too much memory, we’re at a loss to explain what else is wasting memory left, right, and center in the world’s most-popular open source web browser.</p>
<p>Things like full-text on-the-fly searching of the web cache for when you type text in the address bar certainly have an impact as well – that’s a lot of stuff to keep in memory at one time. But Opera 9.5 does the same with a lot less memory, so obviously Firefox 3 is doing <em>something</em> wrong.</p>
<p>It’s a shame that Firefox 3 is on the verge of a release and is so terribly unfit to run on any machine – Windows, Linux, or OS X – with less than at least a couple of gigabytes of memory.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/firefox-3-is-still-a-memory-hog/feed/</wfw:commentRss>
		<slash:comments>375</slash:comments>
		</item>
		<item>
		<title>Shipping Seven is a Fraud.</title>
		<link>http://neosmart.net/blog/2008/shipping-seven-is-a-fraud/</link>
		<comments>http://neosmart.net/blog/2008/shipping-seven-is-a-fraud/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 11:31:43 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Kernels]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Shipping Seven]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/shipping-seven-is-a-fraud/</guid>
		<description><![CDATA[A blog titled Shipping Seven has gotten a lot of traffic recently for their article about Windows 7 and the MinWin kernel &#8211; namely, how they&#8217;re actually one and the same. The argument offered by &#8220;Soma&#8221; is that Windows Vista&#8217;s kernel (which is what Windows 7 will be built on) is MinWin ad that it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>A blog titled <em><a href="http://shippingseven.blogspot.com/" rel="nofollow">Shipping Seven</a></em> has gotten a lot of traffic recently for <a href="http://shippingseven.blogspot.com/2008/05/windows-7-wont-have-compact-minwin.html" rel="nofollow">their article</a> about <a href="http://win7.neosmart.net">Windows 7</a> and <a href="http://blogs.zdnet.com/microsoft/?p=842">the MinWin kernel</a> &#8211; namely, how they&#8217;re actually one and the same. The argument offered by &#8220;Soma&#8221; is that Windows Vista&#8217;s kernel (which is what Windows 7 will be built on) <em>is </em>MinWin ad that it&#8217;s already on every Vista desktop out there.</p>
<p>Whether or not MinWin is the very same kernel that went into Vista or not is officially unknown at the moment; but what we <em>do</em> know is that <strong><em>Shipping Seven </em>is either one huge fake, or else that the Windows core programmers at Microsoft are so stupid that they don&#8217;t know the first thing about coding, kernels, operating systems and compilers.</strong></p>
<p>The post at <em>Shipping Seven</em> is littered from beginning to end with fallacies, lies, and incorrect deductions that anyone with even the most basic coding skills would know better than to ever post, especially not when attempting to pass it off as the work of some of the more talented coders out there.</p>
<p> <span id="more-579"></span>
<p>Here are some of the more-glaring factual errors in the post that completely strip <em>Shipping Seven</em> of any authenticity or authority it may have on the topic of Windows 7:</p>
<blockquote><p>How many times has the Ubuntu or Mac OS X kernel been rewritten?</p>
</blockquote>
<p>Correction: OS X is powered by <em>a rewrite of</em>&nbsp;<a href="http://en.wikipedia.org/wiki/XNU">the XNU kernel</a> which is a modified version of <a href="http://en.wikipedia.org/wiki/Mach_kernel">the Mach kernel</a> which, in turn, <em>is a complete rewrite</em> of the original <a href="http://en.wikipedia.org/wiki/Berkeley_Software_Distribution">BSD kernel</a>. And, of course, Ubuntu isn&#8217;t an OS in and of itself, rather it&#8217;s just a distribution of Linux.</p>
<p>While it can be argued that not every developer at Microsoft is expected to have intimate knowledge of the inner-workings of other operating systems, no one in their right mind would believe that the Windows kernel programmers don&#8217;t even know what kernels their strongest competitors are currently using.</p>
<blockquote><p>We spent a boatload of time during Windows Vista making everything &#8216;componentizable&#8217; &#8211; So that we could (by creating some xml files that our build process uses) create a boatload of different versions of Vista (and Server 2008).
<p>&#8230;.
<p>You already have MinWin &#8211; It is the core system components that Windows Vista needs to function; everything else on the system depends directly or indirectly on it. It is the last thing you could (theoretically) uninstall.
<p>So, if you really really want it, you can get it, I suppose &#8211; you probably could (using the command line) uninstall almost every single Windows Vista system component, including the user interface. I don&#8217;t know what the hell you&#8217;d do with just a kernel and a kernel loader on your machine, though.</p>
</blockquote>
<p>Assuming you can get past the <em>way</em> that the post was written (with references like &#8220;using the command line&#8221; which indicate a general lack of knowledge about computers in general; treating the command line as if it were a &#8220;god mode&#8221; that can be used to do just about anything), there&#8217;s still the matter of factual inaccuracies &#8211; and inconsistencies in the article itself.
<p><strong>You can&#8217;t change/modify/revert pre-build settings by running commands in the command line.</strong> Components that are integrated at compile time simply cannot be removed by running a bunch of commands afterwards &#8211; especially not from within the resulting OS itself.
<p>Anyone that&#8217;s ever manually compiled a Linux kernel knows this. You can&#8217;t strip ext3 support from the kernel after it&#8217;s already built any more than you can add Reiser4 support to the kernel without re-building it. As a matter of fact, anyone who&#8217;s built anything at all should know this &#8211; the same rules apply to any other program as well. For example, you can&#8217;t remove PHP support from Apache if you&#8217;ve compiled mod_php directly into the binaries.
<p><em>Shipping Seven </em>is a big, fat fraud. It&#8217;s written by someone with only the most basic knowledge of computers, zero knowledge of coding concepts, and absolutely no experience with kernels and operating systems. <em>Shipping Seven</em> is most likely written by the equivalent of script kiddy, eagerly awaiting the first leaked builds of Windows 7 to appease an inner itch &#8211; most likely all the while lamenting his lack of involvement in the Longhorn beta. It isn&#8217;t worth the time it takes to read, and definitely doesn&#8217;t deserve even the questionable authority it now has on the topic.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/shipping-seven-is-a-fraud/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Programmers Should Trust Their Instincts</title>
		<link>http://neosmart.net/blog/2008/programmers-should-trust-their-instincts/</link>
		<comments>http://neosmart.net/blog/2008/programmers-should-trust-their-instincts/#comments</comments>
		<pubDate>Thu, 22 May 2008 17:07:57 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Instincts]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/programmers-should-trust-their-instincts/</guid>
		<description><![CDATA[People are either cut out to be programmers or they&#8217;re not. How to know, what to do if you&#8217;re not, and where to go from there is a huge issue and not the subject of discussion. But one of the signs of a good programmer is good programming instincts. The right instincts can save hours [...]]]></description>
			<content:encoded><![CDATA[<p>People are either cut out to be programmers or they&#8217;re not. How to know, what to do if you&#8217;re not, and where to go from there is a huge issue and not the subject of discussion. But one of the signs of a good programmer is good programming instincts. The right instincts can save hours of work and provide creative solutions to even the most difficult problems; and &#8220;gut feelings&#8221; in programming are not something you should ignore lightly.</p>
<p>One of the first thing Computer Science teachers drill into the heads of their students is that it&#8217;s important to map everything out beforehand. Design the algorithm. Draw the UML diagrams. Decide the entire flow of data and the relationships between everything before you even touch the IDE. While this is integral advice for anything above a small-complexity project, there is an exception: if you have a gut feeling, follow it.</p>
<p>For instance, the other day I sat down to write a simulator for a MIPS datacache, with different replacement policies. &#8220;Ideally,&#8221; the planning procedure would have involved designing the sequence diagram, a flowchart detailing the method used by the cache to determine expired entries, and generally-speaking a lot of time down the hole just <em>visualizing</em> what happens beforehand.</p>
<p><span id="more-574"></span>
<p>While mulling things over for a minute or two in my head to gather my thoughts, I found myself scribbling three phrases on <a href="http://neosmart.net/blog/2007/postit-notes/">the PostIt note in front of me</a>:</p>
<ul>
<li>Access times -&gt; FIFO</li>
<li>Access times defined by unique tag</li>
<li>Reading memory == dequeue item</li>
</ul>
<p>These were spur-of-the-moment analyses of the caching procedure. Just thinking about the caching methodology brought these ideas to mind, with no particular &#8220;thinking through&#8221; of type. Looking back at them, I couldn&#8217;t (instantaneously) recall <em>why</em> I felt that access times should be removed FIFO from the data structure on read, but I figured it must have made sense on some subconscious level and plowed ahead right into the code.</p>
<p>In the end, the code worked, the project was done far quicker than originally imagined, and I had time to <strike>kill</strike> post this article.</p>
<p>Any good programmer you talk to will have a similar experience to share. The only reason I trusted my instinct in the first place on this matter (keeping in mind that the implementation of &#8220;random&#8221; algorithms can be a huge timesink if they don&#8217;t actually work) was because trusting my coding instincts has generally proved to be the right thing in the past &#8211; this is simply the most recent example.</p>
<p>Of course, every once in a while an impromptu idea may not be perfect; indeed, it&#8217;s possible that they&#8217;re fatally flawed. Whether it&#8217;s because the problem itself wasn&#8217;t initially understood or simply a matter of arriving to the wrong (hasty) conclusion, mistakes can (and have) occur. But it&#8217;s important to bear in mind the <em>ratio</em> of brilliant ideas to failures &#8211; most good programmers I&#8217;ve spoken to reaffirm that it&#8217;s a very workable hit-miss ratio.</p>
<p>Certainly programming by instinct has its drawbacks. For instance, these &#8220;strokes of brilliance&#8221; make up the majority of what we refer to &#8211; in retrospect &#8211; as quick and dirty solutions. There&#8217;s a time and a place for using them; and being unable to figure that part out can end up hurting you and your program. Typically speaking, using the first thought that occurs to you when structuring your program (what classes, how they interact with one another, etc.) isn&#8217;t such a good idea. Things like this need to be refined non-stop (until you get that warm, fuzzy feeling when you look at your code <img src='http://neosmart.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  and quick solutions won&#8217;t help you there.</p>
<p>It&#8217;s usually within individual functions when you need to get something done based on the state of one or more other objects that instincts prove handy. To put it another way: when the code you&#8217;re working needs some measure of creativity and out-of-the-box thinking, don&#8217;t ever pass up on a gut feeling. Programming gives experience and insight, much of it subconscious. Patterns and ideas may leap out at you in ways that aren&#8217;t immediately obvious, but even if we don&#8217;t fully comprehend how the ideas came into existence it doesn&#8217;t mean they don&#8217;t have a substantial amount of intricate logic and supporting foundation to back them.</p>
<p>The next time an idea flashes into existence, like the proverbial lightbulb flickering on above your head, take a minute to appreciate its glow. Realize that you&#8217;re lucky to have such inexplicable moments, and trust them to take you and your code to the next level.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/programmers-should-trust-their-instincts/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Want UAC-Free iReboot? You got it: iReboot 1.1 released!</title>
		<link>http://neosmart.net/blog/2008/ireboot-and-working-around-uac-limitations/</link>
		<comments>http://neosmart.net/blog/2008/ireboot-and-working-around-uac-limitations/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 12:31:20 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[iReboot]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[UAC]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/ireboot-and-working-around-uac-limitations/</guid>
		<description><![CDATA[ Back in August of 2007, NeoSmart Technologies released iReboot 1.0 &#8211; a tiny application that sits quietly and unobtrusively in the taskbar and is used to select which OS you&#8217;d like to reboot into.
iReboot isn&#8217;t by any means a major application, but it&#8217;s gathered a pretty strong following over the months, mostly by people [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://neosmart.net/images/software/iReboot/iReboot.png" align="right" /> Back in August of 2007, NeoSmart Technologies released iReboot 1.0 &#8211; a tiny application that sits quietly and unobtrusively in the taskbar and is used to select which OS you&#8217;d like to reboot into.</p>
<p>iReboot isn&#8217;t by any means a major application, but it&#8217;s gathered a pretty strong following over the months, mostly by people interested in boosting productivity (or increasing laziness) to the max. But there was one flaw in iReboot that made all the hard work we put into making it as unobtrusive and minimalistic as possible almost meaningless: if you had UAC enabled, iReboot will not run automatically at startup, no matter what you do.</p>
<p>This behavior comes as a result of the architecture that Microsoft used to secure Windows Vista, which doesn&#8217;t allow for applications requiring admin approval to run at startup. It doesn&#8217;t matter what your application does or if you absolutely trust it beyond the shadow of the doubt, Windows Vista simply won&#8217;t let an application that runs in elevated privileges mode to launch at startup &#8211; end of story.</p>
<p> <span id="more-562"></span>
<p>Users of iReboot were <a href="http://neosmart.net/forums/showthread.php?t=1096">quick to point out</a> that this is a major drawback that made it almost useless &#8211; after all, it&#8217;s far less productive to have to manually run an application when you want to reboot than it is to wait for that startup screen to appear and select the OS you want. So we set about finding a solution.</p>
<p>We&#8217;ve just released iReboot 1.1, a <strong>UAC-free implementation</strong> that doesn&#8217;t require admin approval, elevation, etc. past the initial installation. And, yes, it does run automatically at startup too!</p>
<p><strong>The Gory Details </strong>(feel free to skip below to the download links!)</p>
<p>In order for iReboot to be of any use, we had to get around Microsoft&#8217;s UAC limitations. For iReboot, it was of the absolute importance that it run at startup, <em>and</em> that it be allowed system access from normal user accounts. On Windows XP &#8211; where everyone runs as an Administrator and there are no annoying UAC prompts &#8211; it was a non-issue. But on Windows Vista, the new architectural requirements for running applications in elevated privilege modes made it near impossible.</p>
<p>While digging around for possible solutions, <a href="http://neosmart.net/forums/showthread.php?p=8077#p8077">it became clear</a> that the only possible fix would be to split iReboot into two parts. One would run in the background as a service, running under the SYSTEM or LOCAL SERVICE accounts and having privileged access to the OS without requiring admin approval or UAC elevation, and with the second half running as an <em>unprivileged</em> userspace client program which interacts with the service backend to get stuff done.</p>
<p>The resulting application has an installer &#8211; which requires admin privileges, of course &#8211; which installs and launches the background service. The background service has full permission to do what we need to get operating system XXXX to be the default option for the next boot, but &#8211; in line with the Windows Service Model &#8211; cannot be interacted with by end users.</p>
<p>The installer also adds a normal UI application which sits in the taskbar (from where end-users may interact with and use iReboot) and communicates with the backend service via a custom API <em>which must not require the execution of any privileged code</em>. The service can do whatever it wants (well, whatever <em>we</em> want it to do, but lets not get picky here!), but the client program must only perform actions which normal, unprivileged users have permission to execute. </p>
<p>By using a standard inter-process communication API we avoided the need for any special actions on behalf of the client application, effectively separating logic (residing and executing on the backend service, free from the many limitations of UAC) and presentation/design (the client application, bound to obey UAC&#8217;s every wish).</p>
<p><strong>The Bottom Line</strong></p>
<p>Anyone running Windows XP or Windows Vista &#8211; with or without UAC and/or admin approval mode enabled &#8211; can now run iReboot at startup and use it to boot into whatever OS they like (in conjunction with <a href="http://neosmart.net/dl.php?id=1">EasyBCD</a>, of course!).</p>
<p><strong>But getting this far wasn&#8217;t easy</strong>. With Windows Vista, what <em>should have been</em> 100 lines of code maximum ended up being a dozen times longer, split across two different processes, and requiring way too much man-hours to write the most minimalist and to-the-point piece of software we&#8217;ve released to date.</p>
<p>Perhaps most importantly though, is the fact that <strong>Windows Vista&#8217;s newly-implemented security limitations are artificial at best, easy to code around, and only there to give the <em>impression</em> of security.</strong> Any program that UAC blocks from starting up &quot;for good security reasons&quot; can be coded to work around these limitations with (relative) ease. The &quot;architectural redesign&quot; of Vista&#8217;s security framework isn&#8217;t so much a rebuilt system as much as it is a makeover, intended to give the false impression of a more secure OS.</p>
<p>With the current Windows Vista security models, Microsoft can <em>claim </em>that Vista blocks system-modification tools from running at startup; but the truth is, there are still many ways to get them to run. At the end of day, our experience with iReboot and Vista&#8217;s security implementations brings us to the sad conclusion that with Windows Vista, Microsoft has made ISVs&#8217; jobs more complicated without actually providing any any further protection for end users from malware authors &#8211; which certainly isn&#8217;t the best way of going about this task.</p>
<p>Anyway, the fruits of our efforts:</p>
<p class="save"><a href="http://neosmart.net/dl.php?id=11">Download iReboot 1.1</a> (248 KiB)</p>
<p align="right">[<a href="http://neosmart.net/forums/">support</a>] [<a href="http://neosmart.net/donations.php">donate</a>] [<a href="http://neosmart.net/changelog.php?id=11">changelog</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/ireboot-and-working-around-uac-limitations/feed/</wfw:commentRss>
		<slash:comments>75</slash:comments>
		</item>
		<item>
		<title>Windows Vista SP1, Adobe Audition, and DEP</title>
		<link>http://neosmart.net/blog/2008/windows-vista-sp1-adobe-audition-and-dep/</link>
		<comments>http://neosmart.net/blog/2008/windows-vista-sp1-adobe-audition-and-dep/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 08:09:40 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Adobe Audition]]></category>
		<category><![CDATA[DEP]]></category>
		<category><![CDATA[Intel x86]]></category>
		<category><![CDATA[no-execute]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Vista SP1]]></category>
		<category><![CDATA[Vista x64]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/windows-vista-sp1-adobe-audition-and-dep/</guid>
		<description><![CDATA[For anyone attempting to install or use Adobe Audition on Windows Vista SP1, you can forget about it. Something about Adobe Audition or one of its dependencies causes it to crash immediately on startup, with Vista informing you that it has &#34;rescued&#34; your system from an attempted DEP violation.
The &#34;good news&#34; is, if you&#8217;re on [...]]]></description>
			<content:encoded><![CDATA[<p>For anyone attempting to install or use Adobe Audition on Windows Vista SP1, you can forget about it. Something about Adobe Audition or one of its dependencies causes it to crash immediately on startup, with Vista informing you that it has &quot;rescued&quot; your system from an attempted DEP violation.</p>
<p>The &quot;good news&quot; is, if you&#8217;re on Windows Vista SP1 x86, DEP doesn&#8217;t get in the way as often. And for when it does, Windows Vista x86 lets you disable DEP and continue along on your merry way. But Windows Vista x64 isn&#8217;t as forgiving &#8211; even after you use a program like <a href="http://neosmart.net/dl.php?id=1">EasyBCD</a> to disable DEP entirely, you can&#8217;t stop hardware-based DEP or exempt software from the protection list <a href="http://www.microsoft.com/technet/security/prodtech/windowsxp/depcnfxp.mspx">on 64-bit operating systems</a>.</p>
<p>Adobe has yet to provide an official (or even an unofficial) response <a href="http://www.adobeforums.com/webx/.3c065a2b">on the matter</a>; but seeing as Adobe hasn&#8217;t properly touched the Audition code-base since buying out Cool Edit Pro, it&#8217;s probably safe to assume we won&#8217;t be seeing an update anytime too soon. (for instance, Adobe Audition 3.0, released in Sep. of 2007, still doesn&#8217;t have that omnipresent 3.0.1 patch out yet).</p>
<p> <span id="more-561"></span>
<p>A program&#8217;s executable code is split into multiple sections depending on what&#8217;s stored in it and what it&#8217;s used for. Some of these sections are marked as &quot;no-execute&quot; in the extended x86 instruction set. However, an incorrectly-written program will either incorrectly try to run code that shouldn&#8217;t be executed or else mistakenly mark executable code as &quot;no-execute&quot; &#8211; both of which will cause DEP to interfere and get Windows to kill the process.</p>
<p>The interesting thing here is &#8211; why didn&#8217;t Windows Vista RTM cause DEP to fire as well? After all, if Adobe Audition is attempting to execute portions of its code that shouldn&#8217;t be touched, Windows should block the attempt SP1 or not.</p>
<p>One possible explanation is that Adobe Audition is attempting to run code from a core Windows library, but it&#8217;s accessing the code in a non-standard way that breaks when that library has been updated or modified. Or perhaps its determining the entrypoint for a library file dynamically, and something about Windows Vista SP1 makes it start at the wrong place.</p>
<p>Either way, it seems you shouldn&#8217;t be using Windows Vista x64 SP1 if you depend on audio or video encoding to make a living. The sad thing is, 64-bit operating systems were often touted as &quot;the answer&quot; to encoders&#8217; needs, between the slightly-optimized processing of encoder instructions and the ability to support 4GiB+ of memory; yet here we are at square zero once more.</p>
<p><strong>Update (April 21st, 2008)</strong></p>
<p>Reader Mike B. wrote in letting us know that x86 versions of Windows Vista SP1 do not trigger a DEP alert at all, so it seems this is a problem exclusive to Vista x64 machines running SP1. If you are using Windows Vista SP1 x86, you shouldn&#8217;t have to worry about this issue. Thanks, Mike!</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/windows-vista-sp1-adobe-audition-and-dep/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>The NeoSmart DevNet Initiative</title>
		<link>http://neosmart.net/blog/2008/the-neosmart-devnet-initiative/</link>
		<comments>http://neosmart.net/blog/2008/the-neosmart-devnet-initiative/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 21:36:34 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[NeoSmart Technologies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Developer Resources]]></category>
		<category><![CDATA[Developers]]></category>
		<category><![CDATA[DevNet]]></category>
		<category><![CDATA[NST Downloader]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/the-neosmart-devnet-initiative/</guid>
		<description><![CDATA[NeoSmart Technologies is pleased to announce the logical next-step in our contributions to the tech community by the establishment of the NeoSmart DevNet project. 
NeoSmart DevNet is a new effort on behalf of NST to reach out and lend a helping hand to other software developers by providing a number of tools, libraries, and frameworks [...]]]></description>
			<content:encoded><![CDATA[<p>NeoSmart Technologies is pleased to announce the logical next-step in our contributions to the tech community by the establishment of <a href="http://neosmart.net/wiki/display/DEV/">the NeoSmart DevNet project</a>. </p>
<p>NeoSmart DevNet is a new effort on behalf of NST to reach out and lend a helping hand to other software developers by providing a number of tools, libraries, and frameworks that we&#8217;ve developed over the last several years to address certain commonly-encountered issues in a generic-yet-customizable manner.</p>
<p>Basically, DevNet is an attempt at getting software developers to spend more time on developing their applications verses worrying about the stuff that they need to get there. Unlike other developer resources on the internet, the goal of DevNet is to provide complete working subsystems and frameworks to developers, almost entirely doing away with the need for supplemental coding and code-monkey work.</p>
<p>For instance, the first of our DevNet projects to be released is a <a href="http://neosmart.net/wiki/display/DEV/NST+Downloader">scriptable graphical HTTP/FTP downloader</a>. The NST Downloader is intended to be drop-in solution for anyone looking to add the ability to download and run components from the internet to their software projects. All interfacing with the NST Downloader is done via command-line arguments, making it language-agnostic and dead-simple to use.</p>
<p> <span id="more-557"></span>
<p>Downloader components have become an integral part of most desktop applications. Whether its to download upgrades, plugins, extensions, documentation, or other remotely-located data, most large projects have come across the need for such a module at one point of time or the other. They&#8217;re straight-forward in functionality, but a huge pain to write, debug, and test. The bottom-line is, there&#8217;s no reason anyone should be writing and re-writing a downloader when that&#8217;s not the purpose of their project.</p>
<p>Developers shouldn&#8217;t have to re-invent the wheel over and over again, especially not when other free software developers have already written and tested the needed components and tuned them as necessary. Just as end-users have come to expect quality software that gets the job done from their favorite ISVs, developers too should have the comfort of using drop-in subsystems to accomplish their various needs; especially when it comes to such esoteric and straight-forward needs that simply take time and resources to develop and maintain.</p>
<p>Other DevNet projects currently undergoing the last phases of testing include a Regionalization Toolkit intended to make creating, deploying, and implementing regionalizations of .NET projects dead-simple and an Upgrade Framework that features one-liners to easily check for updates to your applications and even automatically download and install any available upgrades.</p>
<p>Still not clear on what the point of all this is? Just think of DevNet as extending the NeoSmart experience to include our beloved developer brethren. </p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/the-neosmart-devnet-initiative/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress, PerformancePress, and GSoC 2008</title>
		<link>http://neosmart.net/blog/2008/wordpress-performancepress-and-gsoc-2008/</link>
		<comments>http://neosmart.net/blog/2008/wordpress-performancepress-and-gsoc-2008/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 09:40:04 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[NeoSmart Technologies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Google Summer of Code]]></category>
		<category><![CDATA[GSoC 2008]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/wordpress-performancepress-and-gsoc-2008/</guid>
		<description><![CDATA[For those of you that haven&#8217;t yet heard, WordPress is once-more taking part in the Google Summer of Code. Google Summer of Code 2008 is a Google-sponsored program where college students are encouraged to contribute to their favorite open-source projects for a summer, and in exchange both they and their mentors receive some monetary compensation/motivation [...]]]></description>
			<content:encoded><![CDATA[<p>For those of you that haven&#8217;t yet heard, WordPress is once-more taking part in the Google Summer of Code. Google Summer of Code 2008 is a Google-sponsored program where college students are encouraged to contribute to their favorite open-source projects for a summer, and in exchange both they and their mentors receive some monetary compensation/motivation for their efforts.</p>
<p>I really don&#8217;t need to go into details about this much, since Lloyd Budd has done such a good job explaining <a href="http://foolswisdom.com/wordpress-google-summer-of-code-2/">what it is</a> and what WordPress hopes to achieve in this program. This year, WordPress has an even-larger and more-exciting <a href="http://codex.wordpress.org/GSoC2008">list of possible projects</a> than before, along with a list of the mentors available for each idea. This Google Summer of Code, <a href="http://codex.wordpress.org/GSoC2008#Performance">I&#8217;ll be mentoring</a> for the WordPress projects in the one area that is closest to my heart: improving performance.</p>
<p>It would be unfair to say that WordPress is slow or an inadequately-performing blogging engine, because that&#8217;s not really true. &quot;Performance,&quot; more than any other software characteristic or trait, is a very relative and subjective index. It depends on thousands of different factors, it has dozens of different baselines, and most confusingly of all, sometimes the <em>perception</em> of performance matters more than the performance itself.</p>
<p><span id="more-554"></span></p>
<p>But no matter where WordPress is now in terms of high-performance, there&#8217;s <em>always</em> room for improvement. Late last year, disappointed in this very blog&#8217;s less-than-stellar showing during the many Slashdot and Digg appearances (even on a <a href="http://www.lpdedicated.com/">damn-decent dedicated server</a>), we decided to re-write the WordPress front-end from scratch.</p>
<p>You&#8217;re looking at the result now: the homepage and individual posts are powered by PerformancePress, our in-house re-write of the WordPress page-displaying code. <em>The NeoSmart Files</em> is still running WordPress, just behind the covers. The procedure we followed in developing PerformancePress was simple: only load what you need, don&#8217;t waste CPU cycles if you don&#8217;t have to, minimize SQL queries wherever possible, don&#8217;t loop when you can avoid it, and a number of other load-reducing principles.</p>
<p>The thing is, there&#8217;s a <em>huge </em>difference between in-house code and software that&#8217;s been &quot;generically-developed&quot; for use by the masses. While we could make assumptions about our own use of the blogging system, the WordPress project doesn&#8217;t have that privilege. There is no cutting-corners or jumping to conclusions on a for-redistribution project. Flexibility usually comes at the cost of optimization; and the net result can be more than a little tricky to understand.</p>
<p>These are some of the same reasons we cannot just &quot;release&quot; the current PerformancePress code we&#8217;re using here &#8211; it wouldn&#8217;t last 10 minutes in the real world. But hopefully this Google Summer of Code we will have a chance to bring out in WordPress the best of both worlds. PerformancePress is most likely a dead-end; but it&#8217;s been an invaluable experience in realizing how to create the most resource-efficient, well-scaling webapps; and hopefully we can take that to the next level this summer.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/wordpress-performancepress-and-gsoc-2008/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Vista SP1 Doesn&#8217;t Kill Software, Bad Coders Do</title>
		<link>http://neosmart.net/blog/2008/vista-sp1-doesnt-kill-software-bad-coders-do/</link>
		<comments>http://neosmart.net/blog/2008/vista-sp1-doesnt-kill-software-bad-coders-do/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 18:45:45 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[SP1]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/vista-sp1-doesnt-kill-software-bad-coders-do/</guid>
		<description><![CDATA[You can always trust The Register to do what it can to twist the facts into a nice, juicy headline. This time, it&#8217;s about Windows Vista SP1, and the very short list of software that&#8217;s adversely affected by its installation.
Don&#8217;t get this wrong: we&#8217;ve got our own reservations about SP1 (between performance and usability &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>You can always trust The Register to do what it can to twist the facts into a nice, juicy headline. This time, it&#8217;s about Windows Vista SP1, and the <a href="http://neosmart.net/forums/showthread.php?t=1653">very short list of software</a> that&#8217;s adversely affected by its installation.</p>
<p>Don&#8217;t get this wrong: we&#8217;ve got our own reservations about SP1 (between performance and usability &#8211; or, more accurately, the lack thereof). But Microsoft is not to blame because certain system tools and utilities won&#8217;t run on Windows Vista SP1 when it&#8217;s released in March.</p>
<p><a href="http://www.theregister.co.uk/2008/02/22/vista_sp1_security_products/">According to The Register</a>, &quot;Vista SP1 kills and maims security apps, utilities&quot; and that it&#8217;s somehow Microsoft&#8217;s fault that antivirus/firewall software by BitDefender, Jiangmin, Trend Micro, and Zone Alarm no longer works on SP1 &#8211; but it seems they forgot to mention two facts:</p>
<ol>
<li>It&#8217;s bad coding habits that breaks these utilities.</li>
<li>Thanks to pre-release builds of Vista SP1, all 5 malware-protection programs have updated versions available that <em>are</em> Vista SP1 compatible and shouldn&#8217;t give their users any problems come mid-March and SP1.</li>
</ol>
<p><span id="more-538"></span></p>
<p>Microsoft may have many faults and may have made many mistakes starting with Windows Vista&#8217;s initial release, but one thing they <em>have</em> done right is give developers (software and hardware alike) plenty of time to test their products against SP1 builds and plenty of opportunity to find out why they no longer work.</p>
<p>We&#8217;ve studied (and indeed, ran into) some of the issues that these programs experience under SP1 in our own code. In our testing, it seems that these incompatibilities only occur when developers attempt to use undocumented/unofficial workarounds to gain access to system operations, work around UAC limitations, and interface with the desktop &amp; other running applications.</p>
<p>Following the guidelines published on MSDN (at least those marked as &quot;Vista-compatible&quot;), software can be written that correctly provides an interface between services, desktop applications, UAC, the internet, and low-level subsystems including drivers and raw access to disks and files &#8211; albeit with a lot of extra work and with some monetary expenses (namely, signed drivers).</p>
<p>At the end of the day, Vista SP1 may be many things but one thing it&#8217;s not is a compatibility sinkhole. Especially when compared to the problems experienced back in the days of Windows XP SP2&#8217;s release, the list of broken applications on Windows Vista is appreciably short &#8211; and moot, seeing as new versions of the software have already addressed the issues satisfactorily.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/vista-sp1-doesnt-kill-software-bad-coders-do/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Weighted Round-Robin DNS Solutions?</title>
		<link>http://neosmart.net/blog/2008/weighted-round-robin-dns-solutions/</link>
		<comments>http://neosmart.net/blog/2008/weighted-round-robin-dns-solutions/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 22:22:42 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Network Load Balancing]]></category>
		<category><![CDATA[Round-Robin]]></category>
		<category><![CDATA[Servers]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/?p=533</guid>
		<description><![CDATA[The round-robin algorithm is often used as a simple-yet-effective method of distributing requests to a single-point-of-entry to multiple servers in the background. It&#8217;s used by DNS servers, peer-to-peer networks, and many other multiple-node clusters/networks.
In a nutshell, round-robin algorithms pair an incoming request to a specific machine by cycling (or, more specifically, circling) through a list [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://en.wikipedia.org/wiki/Round-robin_scheduling">round-robin algorithm</a> is often used as a simple-yet-effective method of distributing requests to a single-point-of-entry to multiple servers in the background. It&#8217;s used by DNS servers, peer-to-peer networks, and many other multiple-node clusters/networks.</p>
<p>In a nutshell, round-robin algorithms pair an incoming request to a specific machine by cycling (or, more specifically, <em>circling</em>) through a list of servers capable of handling the request. It&#8217;s a common solution to many <a href="http://en.wikipedia.org/wiki/Network_Load_Balancing_Services">network load balancing</a> needs, even though it does not result in a perfectly-balanced load distribution, strictly speaking. In the non-ideal world <strike>we</strike> our servers live in, there are many reasons why the stock round-robin algorithm just isn&#8217;t good enough when it comes to properly balancing server loads.</p>
<p>The first and most important thing to keep in mind is that not all servers are created equal. One should be able to take advantage of <em>all</em> available resources, and it&#8217;s impossible to guarantee that all the servers available to process incoming requests are capable of dealing with the same load quantities, take as long to carry out each command, and deal with larger/longer queues as elegantly. Nor can all requests be treated the same, either. Some take longer to process than others, involve more work, and are generally more-demanding than the rest &ndash; just as others are finished relatively fast and with far-fewer resources.</p>
<p><span id="more-533"></span></p>
<p><em>Weighted</em> round-robin is one way addressing these shortcomings. In particular, it provides a clean and effective way of solving the first-half of the problem by focusing on <em>fairly</em> distributing the load amongst available resources, verses attempting to <em>equally</em> distribute the requests.</p>
<p>In the server environment, a difference in server capacities and processing capabilities can result in a more-marked difference in the performance of the different servers (read: less balanced) when compared to the effect of a difference in the requests themselves.</p>
<p>In a weighted round-robin algorithm, each destination (in this case, server) is assigned a value that signifies, relative to the other servers in the list, how that server performs. This &#8220;weight&#8221; determines how many more (or fewer) requests are sent that server&#8217;s way; compared to the other servers on the list.</p>
<p>Take, for example, the case of web servers. Assume you have three servers that have been individually benchmarked and configured that are to be deployed in a weighted round-robin environment. The first can handle 100 req/sec, the second can do 300 req/sec, and the last can only do 25 req/sec (all on average, tested with an automated benchmark serving the same data). Normally, with such a discrepancy in the servers&#8217; performance, the third would be excluded from the setup entirely. But in a weighted round-robin, each server can be assigned as much as it can handle in the round-robin configuration script/file: </p>
<pre>Resource			Weight
--------			------
server1.fqdn	     4
server2.fqdn	    12
server3.fqdn	     1</pre>
<p>It&#8217;s pretty clear what happens next: for every 12 requests sent to server two, 4 will be sent to server one, and just 1 will be sent to server 3. The result is a more <em>even</em>, if less equal, load distribution.</p>
<p>The only problem with weighted round-robin algorithms is that they haven&#8217;t been adopted by the majority of the load-distribution implementations on the market&#8230;</p>
<p>&#8230;Which brings us to the point of this article. You may have noticed the question mark in the title &#8211; it&#8217;s there for a reason. Do you know of any load-distribution implementations that operate based on the weighted round-robin principle? On Linux it wouldn&#8217;t take more than a couple of fairly-trivial changes to the code for your favorite DNS server to switch from round-robin load distribution to a weighted round-robin solution&#8230; But the same cannot be said for Windows where Microsoft&#8217;s DNS server is the standard. So the question stands: what kind of load distribution solutions can you recommend with support for <em>weighted </em>round-robin load balancing, if any?</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/weighted-round-robin-dns-solutions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Believe The Lies: PHP Isn&#8217;t Thread-Safe Yet</title>
		<link>http://neosmart.net/blog/2008/dont-believe-the-lies-php-isnt-thread-safe-yet/</link>
		<comments>http://neosmart.net/blog/2008/dont-believe-the-lies-php-isnt-thread-safe-yet/#comments</comments>
		<pubDate>Fri, 18 Jan 2008 22:07:16 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[ISAPI]]></category>
		<category><![CDATA[Multi-Threading]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/dont-believe-the-lies-php-isnt-thread-safe-yet/</guid>
		<description><![CDATA[If you took everything you heard for granted, you&#8217;d have been lead to believe that the official PHP distributions (from php.net) have been thread-safe since version 5.2.0.
That&#8217;s not true. Don&#8217;t fall for it. Don&#8217;t attempt to use PHP in a multi-threaded environment (mpm_worker on Apache, ISAPI on IIS, etc.), because PHP thread-safety is a myth.. [...]]]></description>
			<content:encoded><![CDATA[<p>If you took everything you heard for granted, you&#8217;d have been lead to believe that the official PHP distributions (from php.net) have been thread-safe since version 5.2.0.</p>
<p>That&#8217;s not true. Don&#8217;t fall for it. Don&#8217;t attempt to use PHP in a multi-threaded environment (mpm_worker on Apache, ISAPI on IIS, etc.), because PHP thread-safety is a myth.. nothing more than a bunch of lies, if you will.</p>
<p>If you look at the <a href="http://www.php.net/downloads.php">PHP download page</a>, you&#8217;ll see that the pre-built binaries (in this case, Windows) are split into two: thread-safe and non-thread-safe:</p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="285" alt="Thread-Safety" src="http://neosmart.net/blog/wp-content/uploads/thread-safety.png" width="591" border="0"></p>
<p>The problem is, no matter which you choose, PHP isn&#8217;t thread safe. You&#8217;ll still get the <a href="http://www.vbulletin.com/forum/showthread.php?t=204522">same</a>, <a href="http://www.phpwsforums.com/showthread.php?t=526">old</a>, <a href="http://www.google.com/search?hl=en&amp;client=opera&amp;rls=en&amp;hs=TpJ&amp;q=%22PHP+has+encountered+an+Access+Violation+at+%2A%22&amp;btnG=Search">dreaded</a> &#8220;PHP has encountered an access violation at <em>memory_address</em>&#8221; error.</p>
<p>It&#8217;s not a question of server configuration so much as it is one of PHP writing bad code and pretending that&#8217;s not the case. PHP isn&#8217;t multi-threading ready and most everyone knows it&#8230; but it seems they still feel the need to pass it off as if it were, never mind the complaints and bug reports that come.</p>
<p><span id="more-527"></span></p>
<p>There isn&#8217;t a known solution to this problem. The source code for the official PHP distribution is simply not re-entrant and isn&#8217;t capable of being used in multi-threaded environments. It&#8217;s filled with race conditions and lacks the proper monitors/locks on shared memory spaces (which needn&#8217;t be shared in the first place). Unfortunately, there&#8217;s not much more to be said; making this post more of a rant than a guiding light for those of you experiencing this issue.</p>
<p>At NeoSmart Technologies we still recommend the only other production-ready, decently-performing *sapi alternative; which is the deployment of PHP <a href="http://neosmart.net/blog/2007/opensource-on-windows-and-iis/">by means of the FastCGI protocol</a>. Whether on Linux or Windows, FastCGI scripting engines are considerably faster than their age-old CGI implementations (though the outcome is more-clearly felt on Windows where the CGI model is hideously slow). But we&#8217;ve already discussed this before, <a href="http://www.google.com/search?hl=en&amp;client=opera&amp;rls=en&amp;hs=asJ&amp;q=+site%3Aneosmart.net+PHP+FastCGI&amp;btnG=Search">countless times</a>.</p>
<p>The moral of the story is that PHP isn&#8217;t multi-threaded &#8211; yet if you go by what they say, you&#8217;d come to think it was&#8230; until you try it out for yourself and realize that not a darn thing has changed in the 5.2.x releases when it comes to thread-safety and the deployment of PHP in multi-threaded environments.</p>
<p>If you still insist on using ISAPI implementations, you should probably use the latest versions of the PHP4 distribution instead. The older PHP line is less-apt to cause an access-violation error on your machine, and will more than outclass the PHP5 &#8220;thread-safe&#8221; distributions when it comes to reliability.</p>
<p>PHP needs to clean up their act and either produce real (and verifiably so) thread-safe, re-entrant code or stop the false propaganda that would lead you to believe it&#8217;s thread-safe in its current incarnation &#8211; especially when most other dynamic scripting languages (such as Perl) have proper, thread-safe engines available.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/dont-believe-the-lies-php-isnt-thread-safe-yet/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Microsoft to Push Silverlight via Redesigned Website</title>
		<link>http://neosmart.net/blog/2008/redesigned-microsoft-website-to-use-silverlight/</link>
		<comments>http://neosmart.net/blog/2008/redesigned-microsoft-website-to-use-silverlight/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 13:20:05 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/2008/redesigned-microsoft-website-to-use-silverlight/</guid>
		<description><![CDATA[Several months ago, Microsoft inserted themselves into the RIA framework business &#8211; years too late and against pretty scary odds &#8211; with the initial release of the Silverlight framework. Microsoft Silverlight is the online counterpart to the Microsoft .NET 3.0 Framework and a direct Adobe Flash/Flex competitor. 
Microsoft isn&#8217;t new to the whole &#8220;virtual&#8221; monopoly [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://neosmart.net/blog/wp-content/uploads/microsoft-silverlight.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="208" alt="Microsoft Silverlight" src="http://neosmart.net/blog/wp-content/uploads/microsoft-silverlight-thumb.png" width="240" align="right" border="0"></a>Several months ago, Microsoft inserted themselves into the RIA framework business &#8211; years too late and against pretty scary odds &#8211; with the initial release of <a href="http://silverlight.net/">the Silverlight framework</a>. Microsoft Silverlight is the online counterpart to the Microsoft .NET 3.0 Framework and a direct Adobe Flash/Flex competitor. </p>
<p>Microsoft isn&#8217;t new to the whole &#8220;virtual&#8221; monopoly business (where a single company holds the entire market thanks to &#8220;superior technology&#8221; and &#8220;better business sense&#8221;) &#8211; it&#8217;s just not too often that they&#8217;re on the wrong side of this particular proverbial fence.</p>
<p>When Silverlight was first announced and <a href="http://popfly.com/">PopFly</a>, Microsoft&#8217;s social network built to demonstrate and hopefully kickoff Silverlight, were simultaneously launched; we were quick to appreciate the technical aspects of .NET and WPF taken online, but were careful to <a href="http://neosmart.net/blog/2007/forget-about-popfly/">make it clear</a> that we didn&#8217;t think it stood much of a chance.</p>
<p>But things might be on the verge of a big change. Large portions Microsoft&#8217;s website are in the middle of a redesign that will feature a fully Silverlight-powered interface &#8211; doing away with HTML and everything else. We&#8217;ve had a chance to test the new interface (currently in beta), and here&#8217;s what we think:</p>
<p><span id="more-513"></span></p>
<ol>
<li><a href="http://siteanalytics.compete.com/microsoft.com/?metric=uv">According to Compete</a>, Microsoft.com is the 8th most popular site on the internet, with around 60 million <em>unique</em> visitors a month. Put another way, if Microsoft successfully pulls this off, that&#8217;s 60 million new Silverlight users in the first month alone!
<li>The new, Silverlight-powered interface is a pretty big step up from the old design, making it easy to access information about individual downloads and view overall info and lists.
<li>The Silverlight part of the interface is almost wholly unnecessary. It&#8217;s really nice to use, it&#8217;s smooth, it&#8217;s easy, and it&#8217;s beautiful &#8211; but it&#8217;s nothing that requires a RIA in the first place. Microsoft could have easily implemented the same user experience (give or take) with HTML + JavaScript/AJAX; with a lot less effort and greater compatibility.
<li>At the moment, <em>very</em> few non-Microsoft-owned sites are using Silverlight <em>at all</em>; let alone for the entire UI. And of those that do, none have anywhere the amount of exposure that Microsoft.com gets.</li>
</ol>
<p>Keeping these facts in mind, there&#8217;s only one logical conclusion to be drawn: Microsoft realizes (as has the rest of the geek community) that Silverlight is on the verge of being forgotten. Claims of superiority aside (true or otherwise), Microsoft has realized that if Silverlight is to stand a chance, it&#8217;s going to take more than <a href="http://www.alexa.com/data/details/traffic_details/popfly.ms?site0=popfly.ms&#038;site1=popfly.com&#038;y=r&#038;z=3&#038;h=300&#038;w=610&#038;range=6m&#038;size=Medium">a failed attempt</a> at making a Silverlight-powered social community to get developers and consumers alike to adopt Silverlight.</p>
<p>It&#8217;s a desperate move, there&#8217;s no doubt about it. While Microsoft will no doubt be making an alternative HTML interface available for a mixture of legal and practical purposes, switching Microsoft.com over to Silverlight is a sure-fire way to get that attention&#8230;. and depending on how it&#8217;s both marketed and carried out, it <em>could</em> be what it takes to make developers start taking Silverlight seriously.</p>
<p>Whether this&#8217;ll work out or not, only time can tell. We don&#8217;t know when the new Silverlight-interface will be going mainstream, but it&#8217;s probably not for a couple more months at the very least. The current interface still links to many as-of-yet not updated pages, and portions of the Silverlight section still appear to be missing some features here and there. Overall, the new interface is very user-friendly and well-developed, though.</p>
<p>You can either view NeoSmart Technologies <a href="http://neosmart.net/gallery/v/apps/Silverlight_MS/">screenshot gallery</a> of the upcoming Microsoft.com re-design or attempt to access <a href="http://www.microsoft.com/beta/downloads/About.aspx">the beta link directly</a> (working as of 01/03/08); but still pictures don&#8217;t really do the interface justice. Where the new UI really shines is the overall grace and fluidity of the interface, with gentle hover effects and fade in/out transitions that are done just right.</p>
<p><small><em>Editor&#8217;s Note: This article has been updated to clear up some references to a full-site redesign of Microsoft.com. We do not have any evidence that <strong>all</strong> of Microsoft.com is being redesigned to take advantage of Silverlight, just large portions of it. Sorry for any confusion.</em></small></p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2008/redesigned-microsoft-website-to-use-silverlight/feed/</wfw:commentRss>
		<slash:comments>96</slash:comments>
		</item>
	</channel>
</rss>
