<?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, 29 Jan 2012 23:33:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>My Thoughts on Sutter&#8217;s &#8220;C++ and Beyond 2011&#8243;</title>
		<link>http://neosmart.net/blog/2011/my-thoughts-on-sutters-c-and-beyond-2011/</link>
		<comments>http://neosmart.net/blog/2011/my-thoughts-on-sutters-c-and-beyond-2011/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 06:23:22 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[C++0x]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Leaky Abstractions]]></category>
		<category><![CDATA[UtfRedirect]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/?p=1198</guid>
		<description><![CDATA[Around a month ago, Herb Sutter gave a talk on why C++ is once more gaining relevance in the world of programming, and how after a decade of neglect and abandonment, it is set to pave the way into the &#8230; <a href="http://neosmart.net/blog/2011/my-thoughts-on-sutters-c-and-beyond-2011/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Around a month ago, <a href="http://www.gotw.ca/">Herb Sutter</a> gave a talk on why C++ is once more gaining relevance in the world of programming, and how after a decade of neglect and abandonment, it is set to pave the way into the future. I downloaded it a while ago and finally had a chance to watch it last night; the talk itself is most-excellent and is around 40 minutes long, you can stream it online or download it in a higher-resolution format <a href="http://channel9.msdn.com/posts/C-and-Beyond-2011-Herb-Sutter-Why-C">on Channel 9</a>. Or click below to watch:</p>
<p><center><video poster="http://media.ch9.ms/ch9/b021/c55c43d3-9867-4140-a69b-9f420181b021/CB2011HerbSutterWhyCppFinal_512_ch9.jpg" controls><source src="http://media.ch9.ms/ch9/b021/c55c43d3-9867-4140-a69b-9f420181b021/CB2011HerbSutterWhyCppFinal_low_ch9.mp4" /><object type="application/x-silverlight-2" data="data:application/x-silverlight-2," width="512" height="288"><param name="minRuntimeVersion" value="4.0.50401.0"/><param name="source" value="http://channel9.msdn.com/scripts/Channel9.xap?v=1.8"/><param name="initParams" value="mediaurl=http://smooth.ch9.ms/ch9/b021/c55c43d3-9867-4140-a69b-9f420181b021/CB2011HerbSutterWhyCppFinal.ism/manifest,thumbnail=http://media.ch9.ms/ch9/b021/c55c43d3-9867-4140-a69b-9f420181b021/CB2011HerbSutterWhyCppFinal_512_ch9.jpg,deliverymethod=adaptivestreaming,autoplay=false,entryid=c55c43d398674140a69b9f420181b021"/></object></video></center></p>
<p>As someone that&#8217;s been using both C/C++ and .NET extensively over the past years, I found there was one very important point that Sutter glanced on, danced around, and did everything short of actually naming in his talk and it&#8217;s that if you&#8217;re doing anything remotely intricate or complicated, <strong>leaky abstractions in managed languages will bite you in the ass, and end up <em>lowering</em> your productivity</strong>, some times (and if what you&#8217;re working on is truly complicated, often times) to a point where you&#8217;d have been <em>more</em> productive using C or C++ in the first place.</p>
<p>The concept of leaky abstractions isn&#8217;t anything new and I&#8217;m hardly the first to point out how it can turn a knight in shining armor into a harbinger of doom and destruction. It&#8217;s the number one problem fundamentally present in almost any framework, but even more so in managed languages where the framework is all you have, and you&#8217;re not allowed to side-step it and build your own foundations to work with (p/invoke and interop aside). But lately it&#8217;s becoming more and more of a problem as the &#8220;push&#8221; for innovation that Sutter speaks of has become a fundamental requirement in just about all corners of the industry. </p>
<p><span id="more-1198"></span></p>
<p>5 years ago, few in the .NET community could tell you what p/invoke was and how you&#8217;d use it. Now, it&#8217;s considered fairly basic knowledge and a working familiarity with the underlying C WIN32 API is a must for any desktop software developer looking to make a memorable, high-performing product in the world of .NET. Pretty much each and every WIN32 API documentation page on MSDN has a comment from someone on how to import that particular function into .NET with an interop definition, and people are running into the limitations of the managed framework far more often than they used to.</p>
<p>I&#8217;m still a big fan of .NET in general as it makes it really easy to quickly jump from idea to prototype to finished product for quick, one-off applications or basic tools and utilities. Even for huge products and projects, .NET&#8217;s GUI tools far exceed any C++ offerings in terms of ease-of-use and even functionality when it comes to having standard controls and features a single click away. But the leaky abstractions in .NET are proving to be a real pain in the back, and sometimes even interop just doesn&#8217;t cut it for the most trivial and basic of things.</p>
<p>Recently, <a href="http://stackoverflow.com/questions/7520706/force-standardoutputencoding-to-utf8">I hit a wall</a> with .NET in attempting to make EasyBCD support the parsing of internationalized BCD output in the form of bcdedit&#8217;s stdout. bcdedit, like many other Microsoft tools and utilities, is only UTF8 or Unicode aware if the console codepage is explicitly set in the application&#8217;s console window. I spent an entire day trying to shoehorn this functionality via various .NET hacks and failed interop attempts, a week off-and-on testing and debugging my various incomplete solutions, and in the end my solution was to create a C++ &#8220;proxy&#8221; application that would create a console, set the codepage to UTF8, run the command line utility, and pipe the output back to the host (source code here, MIT license: <a href="https://github.com/NeoSmart/UtfRedirect">UtfRedirect</a>). It was a guaranteed fix, took all of half an hour including testing it on 4 different platforms and experimenting with various internationalized stdout texts.</p>
<p>I personally believe the &#8220;best&#8221; compromise for medium-sized projects is to use C#/.NET to create the GUI and small helper scripts/utilities, but to build the core in C++ with an exposed C API or commandline interface. The short and long of the matter is, making a language truly and properly productive is a lot more work than just providing a sandbox with prettied-up API calls. You have to <em>organically</em> add improved productivity into a language from the bottom-up, making sure that the productivity goes hand-in-hand with power and flexibility, that it always second fiddle to being able to get the job done; after all, what use is a one-liner code if no mater how you twist and turn you can&#8217;t get it to do what you want?</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2011/my-thoughts-on-sutters-c-and-beyond-2011/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://media.ch9.ms/ch9/b021/c55c43d3-9867-4140-a69b-9f420181b021/CB2011HerbSutterWhyCppFinal_low_ch9.mp4" length="200372865" type="video/mp4" />
		</item>
		<item>
		<title>Google Chrome Form QuickSubmit</title>
		<link>http://neosmart.net/blog/2011/google-chrome-form-quicksubmit/</link>
		<comments>http://neosmart.net/blog/2011/google-chrome-form-quicksubmit/#comments</comments>
		<pubDate>Sat, 24 Sep 2011 04:22:28 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[NeoSmart Technologies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Forms]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Keyboard Shortcuts]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/?p=1191</guid>
		<description><![CDATA[As a long time user of Google Chrome (since the very first day of its release, as a matter of fact), I&#8217;ve quickly grown accustomed to some of the Chrome way of doing things. Before Google Chrome, I used Opera &#8230; <a href="http://neosmart.net/blog/2011/google-chrome-form-quicksubmit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As a long time user of Google Chrome (since the very first day of its release, as a matter of fact), I&#8217;ve quickly grown accustomed to some of the Chrome way of doing things. Before Google Chrome, I used Opera and before that Firefox and Firebird &#8211; and only before those, Internet Explorer. </p>
<p>While each of these fine web browsers has its own way doing things, ranging from keyboard shortcuts to tab management and process handling, they all more or less pull these off a bit nicer than Internet Explorer ever code. But the one Internet Explorer feature I can honestly say I miss when using Google Chrome is the ability to submit the form being currently modified/filled-in with a keyboard shortcut, especially if it works even if there are multiple forms on the screen.</p>
<p><a href="http://superuser.com/questions/338255/keyboard-shortcut-to-submit-current-form-on-chrome-os-x">Searching about</a> for a cross-platform solution to this problem, perhaps a previously unknown keyboard shortcut or else some method of assigning a keyboard shortcut that would let Google Chrome intelligently submit the current form via a keyboard shortcut on both Mac and Windows, it became clear that this feature just doesn&#8217;t exist for Chrome. Well, as of yesterday, at any rate&#8230;</p>
<p><span id="more-1191"></span></p>
<p>As of <em>today</em>, this feature does exist and it can be yours by just installing Chrome Form QuickSubmit, a Google Chrome extension that will add the keyboard shortcut alt+shift+s on Windows/Linux and cmd+shift+s on Mac to your Chrome, letting you easily and quickly submit the form you&#8217;re filling in without needing to resort to tabs, or <em>gasp</em> the mouse:</p>
<p class="save"><a href="http://neosmart.net/downloads/software/QuickSubmit/QuickSubmit 0.2.crx">Google Chrome QuickSubmit 0.2</a></p>
<p>Again, the keyboard shortcuts are alt+shift+s on Windows/Linux and cmd+shift+s on OS X. These shortcuts do not, to the best of my knowledge, conflict with any others and there aren&#8217;t any known issues with this extension. So go ahead, click the link above, authorize the extension, refresh this page, and test it out in the box below!</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2011/google-chrome-form-quicksubmit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Open Source, 100% Compatible ln for Windows (and Junction Point library)</title>
		<link>http://neosmart.net/blog/2011/open-source-100-compatible-ln-for-windows-and-junction-point-library/</link>
		<comments>http://neosmart.net/blog/2011/open-source-100-compatible-ln-for-windows-and-junction-point-library/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 13:13:34 +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[Download]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[hardlink]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[ln]]></category>
		<category><![CDATA[ln-win]]></category>
		<category><![CDATA[NeoSmart]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[symlink]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/?p=1015</guid>
		<description><![CDATA[We&#8217;ve been huge fans of symlinks for forever, and even posted about Windows Vista&#8217;s new mklink commandline utility with quite the passion back in 2006 when the ability to create soft-links from the commandline was first added to Windows. However, &#8230; <a href="http://neosmart.net/blog/2011/open-source-100-compatible-ln-for-windows-and-junction-point-library/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been huge fans of symlinks for forever, and even posted about Windows Vista&#8217;s <a href="http://technet.microsoft.com/en-us/library/cc753194(WS.10).aspx">new mklink</a> commandline utility with <a href="http://neosmart.net/blog/2006/symlinks-on-vista/">quite the passion</a> back in 2006 when the ability to create soft-links from the commandline was first added to Windows.</p>
<p>However, there are a few things that have forever irked us about the ln lookalike called mklink.exe:</p>
<ul>
<li>It&#8217;s called mklink and not ln. (I mean, you just get can&#8217;t get around that fact)</li>
<li>The arguments are switched around. `mklink something_doesnt_exist actual_file` is just&#8230;&#8230;.. wrong!</li>
<li>By default, mklink will create softlinks and not hardlinks. ln requires the /h flag to create a hardlink.</li>
<li>mklink isn&#8217;t smart enough to distinguish between files and folders. You need explicitly tell it via the commandline.</li>
<li>Even then, mklink has <em>two </em>different switches depending on the type of directory link you want. /D for softlink&#8217;d directories, and /J for hardlink&#8217;d directories.</li>
<li>mklink can&#8217;t be used outside of cmd.exe (such as in PowerShell). <small>(Hat tip: <a href="http://neosmart.net/blog/2011/open-source-100-compatible-ln-for-windows-and-junction-point-library/#comment-573466">Jason</a>)</small></li>
<li>And, of course,  mklink isn&#8217;t open source.</li>
</ul>
<p>So we made our own.</p>
<p><span id="more-1015"></span></p>
<p>ln-win is available in 32-bit and 64-bit, uses the same syntax, names, switches, and argument ordering as ln on *nix. And pursuant to <a href="http://neosmart.net/blog/2011/contributing-to-the-open-source-community/">our promise</a> to contribute more to open source, ln-win and our Junction Point library is 100% open source, freely licensed under the generous terms of the MIT license.</p>
<p>Perhaps more importantly, ln-win contains an open source Junction Point library. While Win32 APIs exist to create symlinks (on Vista and up), there is no API for creating hardlinks of any kind (for files or folders). The NeoSmart JunctionPoint library provides the following APIs:</p>
<pre class="code">	bool CreateJunctionPoint(LPCTSTR origin, LPCTSTR junction);
	bool IsDirectoryJunction(LPCTSTR path);
	bool GetJunctionDestination(LPCTSTR path, OUT LPTSTR destination);
	bool DeleteJunctionPoint(LPCTSTR path);
</pre>
<p>As you can see, the NeoSmart JunctionPoint library provides all the APIs you need both to create and interact with hardlinks. IsDirectoryJunction can be used for both symlinks and hardlinks, making it a snap to make your code symlink/hardlink aware, letting you intelligently avoid cyclic paths and data duplication for any filesystem traversal needs.</p>
<p class="save"><a href="http://neosmart.net/dl.php?id=16">Binaries for Windows x86 and x64</a></p>
<p class="save"><a href="https://github.com/NeoSmart/ln-win">ln-win Source Code on GitHub</a></p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2011/open-source-100-compatible-ln-for-windows-and-junction-point-library/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Contributing to the Open Source Community</title>
		<link>http://neosmart.net/blog/2011/contributing-to-the-open-source-community/</link>
		<comments>http://neosmart.net/blog/2011/contributing-to-the-open-source-community/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 09:41:32 +0000</pubDate>
		<dc:creator>NeoSmart Technologies</dc:creator>
				<category><![CDATA[NeoSmart Technologies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[NeoSmart]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/?p=990</guid>
		<description><![CDATA[A week ago, we tweeted a promise to contribute more to the open source community. As a Research &#38; Development organization, there&#8217;s a lot of random code samples, small libraries, forks/modifications of popular scripts, and more that&#8217;s just lying around, &#8230; <a href="http://neosmart.net/blog/2011/contributing-to-the-open-source-community/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A week ago, <a href="http://twitter.com/NeoSmart/status/36539809476386816">we tweeted</a> a promise to contribute more to the open source community. As a Research &amp; Development organization, there&#8217;s a lot of random code samples, small libraries, forks/modifications of popular scripts, and more that&#8217;s just lying around, begging to be open sourced.</p>
<p>While a lot of these may prove to have little to no value to anyone, given how easy it is to make things open source thanks to github, there&#8217;s no real drawback to throwing them out there for anyone that may benefit at some unknown point in the future.</p>
<p>We have a couple of hundred miniature projects, test code samples, and other such content across a number of drives to sort through, and whenever we find something useful, this is our promise to the community to share it. To that end, we&#8217;ve set up a github repository at <a href="http://github.com/neosmart">http://github.com/neosmart</a> where we&#8217;ll be uploading the code, and from where you&#8217;re all more than welcome to check it out and contribute back.</p>
<p><span id="more-990"></span></p>
<p>Follow us <a href="http://twitter.com/neosmart">@neosmart</a> for notifications and info on new projects and libraries added to the github repo!</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2011/contributing-to-the-open-source-community/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>EasyLDR and EasyBCD 2.0&#8242;s New XP Support</title>
		<link>http://neosmart.net/blog/2010/easyldr-and-easybcd-2-0s-new-xp-support/</link>
		<comments>http://neosmart.net/blog/2010/easyldr-and-easybcd-2-0s-new-xp-support/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 18:29:17 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[Guides]]></category>
		<category><![CDATA[NeoSmart Technologies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[BCD]]></category>
		<category><![CDATA[BootGrabber]]></category>
		<category><![CDATA[bootmgr]]></category>
		<category><![CDATA[EasyBCD]]></category>
		<category><![CDATA[easyldr]]></category>
		<category><![CDATA[NeoSmart]]></category>
		<category><![CDATA[NTLDR]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/?p=888</guid>
		<description><![CDATA[At NeoSmart Technologies, we&#8217;re not just about making cool software that makes your life easier &#8211; we also like to share the how and why behind our work, to make things all the more beneficial for one and all. While &#8230; <a href="http://neosmart.net/blog/2010/easyldr-and-easybcd-2-0s-new-xp-support/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>At NeoSmart Technologies, we&#8217;re not just about making cool software that makes your life easier &#8211; we also like to share the how and why behind our work, to make things all the more beneficial for one and all. While the <a href="http://neosmart.net/wiki/display/EBCD/">EasyBCD documentation</a> has been out of date for a while now (we&#8217;ve been too busy working on the code and support), we&#8217;re making a real effort to bring things up to date.</p>
<p>We&#8217;d previously finished the tutorials for dual-booting Windows 7 with <a href="http://neosmart.net/wiki/display/EBCD/Installing+XP+After+Vista">Windows XP</a> and with <a href="http://neosmart.net/wiki/display/EBCD/Ubuntu">Ubuntu 10</a> (complete with picture-by-picture steps!), but now we&#8217;re getting started on the real meat: the technical details of just what exactly is going on behind the scenes. The normal OS boot process is one of the most complicated parts of an operating system with just one OS in the mix &#8211; with multiple operating systems, each that works in its own way, things get that much more complicated, and it&#8217;s always good to have a nice, illustrated guide to refer to.</p>
<p><span id="more-888"></span></p>
<p>The first part of the updated documentation is now available in the form of an explanation of how a dual-boot between Windows Vista/7 and Windows XP normally works, <em>plus</em> a NeoSmart exclusive: EasyLDR and its support for multiple top-level legacy NT entries without needing to go through a second NTLDR boot menu, a long-awaited feature that was finally added with <a href="http://neosmart.net/blog/2010/welcome-to-easybcd-2/">EasyBCD 2.0</a>.</p>
<p class="save">EasyBCD Documentation: <a href="http://neosmart.net/wiki/display/EBCD/Windows+XP">The Windows XP Boot Process</a></p>
<p>EasyBCD 2.0 features a number of exciting new features, but some of the most technically interesting details lie in the improved Windows XP support. Besides the linked article which explains the mysteries of EasyLDR and how EasyBCD accomplishes top-level Windows XP support, a large amount of research went into the creation of BootGrabber.exe, a command-line application that we wrote to automatically configure everything needed to set up easyldr or ntldr, complete with automated detection of all Windows NT &#8211; 2003 installations on mounted disks, the generation of a corresponding boot.ini/ebcd.00x file, the copying of ntdetect.com and boot.ini to unmounted and unlettered partitions, and changing the active partition.</p>
<p>Hopefully another article will be added really soon to the EasyBCD documentation explaining the powerful command-line features available to users in BootGrabber.exe, which may be accessed via the &#8220;Power Console&#8221; under &#8220;Useful Utilities&#8221; in EasyBCD 2.0 and up.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2010/easyldr-and-easybcd-2-0s-new-xp-support/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Intel C++ Compiler 12??</title>
		<link>http://neosmart.net/blog/2010/intel-c-compiler-12/</link>
		<comments>http://neosmart.net/blog/2010/intel-c-compiler-12/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 09:44:51 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[Corporate Talk]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Compilers]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/?p=853</guid>
		<description><![CDATA[Microsoft Visual Studio 2010 has been officially released for 3 months now (to the day), and to be pedantic, it has also been available in beta form since October 2008. Its bugs not withstanding, Visual Studio 2010 been a pretty successful &#8230; <a href="http://neosmart.net/blog/2010/intel-c-compiler-12/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="colorbox-853"  style="float: right;" src="http://farm5.static.flickr.com/4014/4643903279_39befe1046_m.jpg" alt="" /></p>
<p>Microsoft Visual Studio 2010 has been officially released for 3 months now (to the day), and to be pedantic, it has also been available in beta form since October 2008. <a href="http://neosmart.net/blog/2010/the-un-improvements-to-find-all-references-in-visual-studio-2010/">Its bugs</a> not withstanding, Visual Studio 2010 been a pretty successful hit. Besides the huge improvements to the .NET language and platform, big on the list of features for C++ developers is basic support for C++0x (the next standard version of C++, with lots of new &amp; revolutionary features) and plenty of IDE enhancements. <a href="http://www.intel.com/cd/software/products/asmo-na/eng/compilers/284132.htm">Intel&#8217;s C++ Compiler</a> is the industry-standard with regards to performance and optimizations, still doesn&#8217;t support Visual Studio 2010 or C++0x.</p>
<p>As numerous postings on the Intel forums indicate, a plethora of users are in pressing need of an update to the Intel C++ Compiler. Questions on the matter are brushed-off, with short and rather-useless replies <a href="http://software.intel.com/en-us/forums/showthread.php?t=73699">such as</a>:</p>
<blockquote><p>&#8220;This question has been discussed several times recently.  The first such integration would come in a beta version of icc 12.0, which hasn&#8217;t yet been announced.&#8221;</p>
</blockquote>
<p><span id="more-853"></span></p>
<p>No one has seen neither hair nor hide of Intel Compiler 12, not in private form or anything else. There is no information on the Intel site to even indicate that such a release is forthcoming. And until that time, developers will have to either resort to using the built-in MSVC++ compiler or hold off on migrating to Visual Studio 2010<em> and</em> C++0x. Despite the information <a href="http://wiki.apache.org/stdcxx/C++0xCompilerSupport">floating around</a> on the net, the Intel C++ Compiler in its latest incarnation still does not support certain integral parts of C++0x such as r-value references (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html">N2118</a>) such that even if you were to attempt to manually compile your VS2010 project from the command-line by modifying the Intel compiler command-prompt to use the VC10 toolkit (as we&#8217;ve tried to do), you&#8217;ll find that it doesn&#8217;t even support the STL library headers that ship with VS2010. And linking to/against the VC9 headers results in DLL-hell with no way out.</p>
<p>The bottom-line of it all is that Intel still, almost a year after Microsoft made available development builds of VS2010 to corporate partners and TAP members, does not yet have anything that C++ Developers can use to build their solutions using features proposed and adopted for the next C++ standard years ago. And, perhaps even worse, there has been no corporate response to indicate when or even if such a possibility will happen. Intel&#8217;s customer support have been extremely vague on the matter of VS2010 support, have issued no official public statements on the matter, and are going out of their way to make their customers unhappy. Thank you, Intel. We really appreciate it.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2010/intel-c-compiler-12/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Woes of Windows Vista/7 Mapped Network Drives</title>
		<link>http://neosmart.net/blog/2010/the-woes-of-windows-vista7-mapped-network-drives/</link>
		<comments>http://neosmart.net/blog/2010/the-woes-of-windows-vista7-mapped-network-drives/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 12:34:18 +0000</pubDate>
		<dc:creator>Mahmoud Al-Qudsi</dc:creator>
				<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Mapped Network Drives]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Vista]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://neosmart.net/blog/?p=847</guid>
		<description><![CDATA[One of the biggest, bestest, and most-hyped features of Windows Vista (according to Microsoft, that is) was the brand spanking new TCP/IP networking stack. Ask us, it sucks. Network performance hasn&#8217;t improved any over the ancient stack used in XP &#8230; <a href="http://neosmart.net/blog/2010/the-woes-of-windows-vista7-mapped-network-drives/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One of the biggest, bestest, and most-hyped features of Windows Vista (according to Microsoft, that is) was the <a href="http://technet.microsoft.com/en-us/library/bb878108.aspx">brand spanking new TCP/IP networking stack</a>. Ask us, it sucks. Network performance hasn&#8217;t improved any over the ancient stack used in XP (nor should it &#8211; it&#8217;s not like there&#8217;s anything <em>new</em> in IPv4) though it does add better IPv6 support out-of-the-box and ships with some even more functionality in Windows 7. But more importantly, Microsoft threw out decades of testing and quality assurance work on the existing Networking Stack and replaced it with something rather questionable.</p>
<p>We&#8217;ll be following up some more on this topic from a technical side later in another article, but for now, an example that most of you are sure to have come across if you&#8217;ve ever tried to map network drives before:</p>
<p><img class="colorbox-847"  src="http://farm5.static.flickr.com/4134/4741620397_828e1a22f6.jpg" alt="" width="410" height="97" /></p>
<p>This popup is shown at system startup if you have any mapped network drives to UNC shares which are not protected with a username and password. If you map a network destination that <em>does</em> require authentication, Windows will map the drive OK. To further complicate matters: this message is shown <em>only when you startup from a cold boot!</em> If you restart your PC (vs shutdown and powerup), it won&#8217;t appear.</p>
<p>Resolving the issue is straight-forward enough: just double-click on the network drive in My Computer and it&#8217;ll automatically, instantly, and silently connect. Which makes one wonder why Windows couldn&#8217;t connect in the first place.</p>
<p>Good question.</p>
<p><span id="more-847"></span></p>
<p>While working an update to <a href="http://www.genie-soft.com/Business/genie_timeline_pro/overview.aspx">Genie Timeline</a>, I ran across this issue. Windows wouldn&#8217;t connect a mapped network destination at startup for some of our customers, meaning that our backup couldn&#8217;t continue (assuming you&#8217;re backing up to the network drive) until you manually intervened and opened the mapped drive yourself. Definitely not cool.</p>
<p>As an in-house R&amp;D test, we attempted to manually re-establish the connection via the command-line. By running</p>
<pre>net use Z: \\remote\path\</pre>
<p>we were able to re-establish the &#8220;disconnected&#8221; network drive. But when we tried to implement this in code, we came across a funny issue. If you try to run this<em> <strong>very early on</strong><span style="font-style: normal;"> during the logon procedure, it will fail with error code ERROR_FILE_NOT_FOUND &#8211; basically, it&#8217;s unable to contact the network path. The funny thing is, explicitly testing to see if we can connect to the network path [GetFileAttributes(networkPath)] doesn&#8217;t return any error. But Windows itself is unable to establish a connection. Using &#8216;net&#8217; from the commandline was just a workaround for R&amp;D purposes, so we turned to the trusty old <a href="http://msdn.microsoft.com/en-us/library/aa385413(VS.85).aspx">WNetAddConnection2</a> function &#8211; and it too failed with ERROR_FILE_NOT_FOUND even though the network path both definitely existed and was perfectly accessible as a UNC location!</span></em></p>
<p><strong>Attempting either of these techniques to establish a mapped network drive connection later on &#8211; say 2 or 3 minutes after logon &#8211; works just fine. As does attempting to establish a connection to a UNC path that requires authentication. Or attempting to connect to the network drive after a restart and not a cold boot.</strong></p>
<p>In the end, we resorted to calling WNetAddConnection2 at timed intervals after startup if the UNC path is accessible and the mapped network drive is not. It got the job done, but it really does speak volumes when developers have to run through hoops to address issues that have been out 2 OS releases and 5 years ago. We have no such problems with Windows XP.</p>
]]></content:encoded>
			<wfw:commentRss>http://neosmart.net/blog/2010/the-woes-of-windows-vista7-mapped-network-drives/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<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 &#8230; <a href="http://neosmart.net/blog/2009/on-the-matter-of-firefox-and-memory-leaks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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>24</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 &#8230; <a href="http://neosmart.net/blog/2008/what-the-techcrunch-tablet-should-really-look-like/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://neosmart.net/blog/2008/request_uri-for-iis-updated-with-isapi_rewrite-3-support/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://neosmart.net/blog/2008/disturbing-stats-about-facebook-users-and-security/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 class="colorbox-627"  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>14</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 &#8230; <a href="http://neosmart.net/blog/2008/firefox-3-is-still-a-memory-hog/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 class="colorbox-585"  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 class="colorbox-585"  src="http://farm3.static.flickr.com/2790/4108954098_fdbaea8b4d_o.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>505</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 &#8230; <a href="http://neosmart.net/blog/2008/shipping-seven-is-a-fraud/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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>35</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 &#8230; <a href="http://neosmart.net/blog/2008/programmers-should-trust-their-instincts/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 ;-) 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 &#8230; <a href="http://neosmart.net/blog/2008/ireboot-and-working-around-uac-limitations/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="colorbox-562"  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>61</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using xcache
Object Caching 1347/1562 objects using xcache

Served from: neosmart.net @ 2012-02-08 10:27:38 -->
