<?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/"
	>

<channel>
	<title>HD Techblog</title>
	<atom:link href="http://techblog.hdexpertise.com/en/feed/" rel="self" type="application/rss+xml" />
	<link>http://techblog.hdexpertise.com/en</link>
	<description>HD Expertise</description>
	<pubDate>Mon, 14 Dec 2009 07:02:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Five Best Startup Management Tools</title>
		<link>http://techblog.hdexpertise.com/en/collection/five-best-startup-management-tools/</link>
		<comments>http://techblog.hdexpertise.com/en/collection/five-best-startup-management-tools/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 07:02:03 +0000</pubDate>
		<dc:creator>hunghuynh</dc:creator>
		
		<category><![CDATA[Collection]]></category>

		<category><![CDATA[Window]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=651</guid>
		<description><![CDATA[
You boot up your computer and you wait, and wait&#8230; and wait, as all sorts of programs, helper apps, widgets, and remnants of forgotten installations load. Grab one of these five popular startup managers and beat back the startup clutter.
Earlier this week we asked you to share your favorite startup management tool for Windows. You [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://cache.gawker.com/assets/images/17/2009/12/500x_2009-12-13_115755_01.jpg" alt="" width="500" /></p>
<p>You boot up your computer and you wait, and wait&#8230; and wait, as all sorts of programs, helper apps, widgets, and remnants of forgotten installations load. Grab one of these five popular startup managers and beat back the startup clutter.</p>
<p>Earlier this week we asked you to share your favorite startup management tool for Windows. You shared what you liked best and why, and we&#8217;ve rounded up the five most popular tools. If you&#8217;ve never used a startup manager before, how would be a great time to start and trim your Windows startup routine back to a more manageable form.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/collection/five-best-startup-management-tools/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Change the registration information in Windows Vista and XP</title>
		<link>http://techblog.hdexpertise.com/en/howto/change-the-registration-information-in-windows-vista-and-xp/</link>
		<comments>http://techblog.hdexpertise.com/en/howto/change-the-registration-information-in-windows-vista-and-xp/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 04:42:38 +0000</pubDate>
		<dc:creator>hunghuynh</dc:creator>
		
		<category><![CDATA[How To]]></category>

		<category><![CDATA[Window]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=648</guid>
		<description><![CDATA[Bill Detwiler shows you how to change the registration information on your Windows system using a registry hack or TechRepublic&#8217;s Vista and XP Registration Changer tools. Once you’ve watched this TR Dojo video, you can find a link to the original TechRepublic article and print the tip from our TR Dojo Blog.

]]></description>
			<content:encoded><![CDATA[<p>Bill Detwiler shows you how to change the registration information on your Windows system using a registry hack or TechRepublic&#8217;s Vista and XP Registration Changer tools. Once you’ve watched this TR Dojo video, you can find a link to the original TechRepublic article and print the tip from our TR Dojo Blog.<br />
<object type="application/x-shockwave-flash" data="http://image.com.com/gamespot/images/cne_flash/production/media_player/proteus/one/proteus2.swf" width="432" height="362"><param name="FlashVars" value="playerMode=embedded&#038;allowFullScreen=1&#038;flavor=EmbeddedPlayerVersion&#038;showOptions=0&#038;skin=http://image.com.com/gamespot/images/cne_flash/production/media_player/proteus/one/skins/proteus-tr.png&#038;autoPlay=false&#038;movieAspect=4.3&#038;embeddingAllowed=true&#038;clockColor=0x3b3b3b&#038;marqueeColor=0x70AF00&#038;chromeColor=0xCF0000&#038;paramsURI=http://video.techrepublic.com.com%2F2461-14075_11-354247.xml%3Fwidth%3D432%26height%3D362%26ptype%3D6475%26mode%3Dembedded%26autoplay%3Dfalse" /><param name="movie" value="http://image.com.com/gamespot/images/cne_flash/production/media_player/proteus/one/proteus2.swf" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always"></object></p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/howto/change-the-registration-information-in-windows-vista-and-xp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Goggles Searches by Sight</title>
		<link>http://techblog.hdexpertise.com/en/howto/google-goggles-searches-by-sight/</link>
		<comments>http://techblog.hdexpertise.com/en/howto/google-goggles-searches-by-sight/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 06:36:41 +0000</pubDate>
		<dc:creator>hunghuynh</dc:creator>
		
		<category><![CDATA[How To]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=642</guid>
		<description><![CDATA[
Among a flurry of mini mobile announcements today, Google announced a new application called Google Goggles designed to let you search Google using your Android device&#8217;s camera. Just point, shoot, and search.
The video above gives you a good idea of how it works—and how it doesn&#8217;t. In a nutshell, Goggles wants to take search beyond [...]]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Hhgfz0zPmH4&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/Hhgfz0zPmH4&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object></p>
<p>Among a flurry of mini mobile announcements today, Google announced a new application called Google Goggles designed to let you search Google using your Android device&#8217;s camera. Just point, shoot, and search.</p>
<p>The video above gives you a good idea of how it works—and how it doesn&#8217;t. In a nutshell, Goggles wants to take search beyond typing and voice recognition (both of which Google Mobile search does pretty well on most smartphones). According to the developers, Google Goggles works great with objects like business cards, paintings, landmarks, wine, books, and logos, but it&#8217;s not great with things like food, animals, and plants. It even does some small augmented reality work for businesses using your devices location awareness and compass skills.</p>
<p>Right now Goggles is only available for Android users, but we&#8217;d imagine they&#8217;re working on Goggles for other devices as well. If you&#8217;ve got an Android device and you give it a try, let&#8217;s hear how well it works for you in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/howto/google-goggles-searches-by-sight/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Public DNS Aims to Speed Up Your Browsing</title>
		<link>http://techblog.hdexpertise.com/en/news/google-public-dns-aims-to-speed-up-your-browsing/</link>
		<comments>http://techblog.hdexpertise.com/en/news/google-public-dns-aims-to-speed-up-your-browsing/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 07:05:55 +0000</pubDate>
		<dc:creator>hunghuynh</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=636</guid>
		<description><![CDATA[
Google today launched a new, free DNS service—called Google Public DNS—aimed at making your web browsing experience even faster. Here&#8217;s how it works:
For those of you who are unfamiliar with DNS (and it&#8217;s cool if you are—as long as DNS is working, most people never need to know what&#8217;s going on), Google offers an explanation:
Most [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://cache.gawker.com/assets/images/lifehacker/2009/12/google_public_dns.png" alt="" width="500" /></p>
<p>Google today launched a new, free DNS service—called Google Public DNS—aimed at making your web browsing experience even faster. Here&#8217;s how it works:</p>
<p>For those of you who are unfamiliar with DNS (and it&#8217;s cool if you are—as long as DNS is working, most people never need to know what&#8217;s going on), Google offers an explanation:</p>
<p>Most of us aren&#8217;t familiar with DNS because it&#8217;s often handled automatically by our Internet Service Provider (ISP), but it provides an essential function for the web. You could think of it as the switchboard of the Internet, converting easy-to-remember domain names - e.g., www.google.com - into the unique Internet Protocol (IP) numbers - e.g., 74.125.45.100 - that computers use to communicate with one another.</p>
<p><span id="more-636"></span>Google Public DNS, then, aims to replace your ISP&#8217;s default DNS with a (hopefully) faster, safer, and more reliable alternative. Google Public DNS isn&#8217;t the first freely available alternate DNS we&#8217;ve seen. <a href="http://lifehacker.com/212589/speed-up-web-pages-with-open-dns">Previously mentioned</a> <a href="http://www.opendns.com/">OpenDNS</a> is an excellent DNS alternative (it boasts <a href="http://lifehacker.com/software/shortcuts/browse-the-web-with-keyword-shortcuts-254431.php">keyboard shortcuts</a>, <a href="http://blogs.howtogeek.com/mysticgeek/2008/08/07/protect-your-kids-online-with-any-os-using-open-dns/">parental filters</a>, and more), but—for better or worse—we&#8217;re guessing that even more people may be interested in Google&#8217;s offering.</p>
<p>To set up your computer or router to use Google Public DNS, hit up <a href="http://code.google.com/speed/public-dns/docs/using.html">Google&#8217;s instructions</a> (they&#8217;ve got specific instructions for Windows, Mac, Linux, or your router).</p>
<p><em></em></p>
<input id="gwProxy" type="hidden"><!--Session data--></input>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/news/google-public-dns-aims-to-speed-up-your-browsing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gmail Now Lets You Add and Send Attachments Offline</title>
		<link>http://techblog.hdexpertise.com/en/howto/gmail-now-lets-you-add-and-send-attachments-offline/</link>
		<comments>http://techblog.hdexpertise.com/en/howto/gmail-now-lets-you-add-and-send-attachments-offline/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 07:33:23 +0000</pubDate>
		<dc:creator>hunghuynh</dc:creator>
		
		<category><![CDATA[How To]]></category>

		<category><![CDATA[gmail]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=632</guid>
		<description><![CDATA[Writing emails while offline can help keep you on top of things, especially while on the go. As of today, Offline Gmail allows you to add attachments to an email while you&#8217;re offline, bringing essentially the full offline experience to Gmail.
No one likes sending out the &#8220;Oops! I forgot my attachment!&#8221; email following an incomplete [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://cache.gawker.com/assets/images/17/2009/11/500x_112409-gmail.jpg" alt="" width="500" />Writing emails while offline can help keep you on top of things, especially while on the go. As of today, Offline Gmail allows you to add attachments to an email while you&#8217;re offline, bringing essentially the full offline experience to Gmail.</p>
<p>No one likes sending out the &#8220;Oops! I forgot my attachment!&#8221; email following an incomplete draft. If you work offline with regularity, Offline Gmail&#8217;s new offline attachment feature means less chance of forgetting. For those who have held off using offline access, here&#8217;s how to get things started:</p>
<blockquote><p>If you haven&#8217;t tried offline access yet, visit <a href="http://mail.google.com/mail/?ui=2&amp;fs=1&amp;view=pu&amp;st=labs">the Labs tab</a> and follow these instructions to get started:</p>
<ol>
<li>Select Enable next to Offline Gmail.</li>
<li>Click Save Changes.</li>
<li>After your browser reloads, you&#8217;ll see a new &#8220;Offline&#8221; link in the upper righthand corner of the Gmail page, next to your username. Click this link to start the offline set up process and download Gears if you don&#8217;t already have it.</li>
</ol>
</blockquote>
<p>If you aren&#8217;t using Offline Gmail just yet, take a <a href="http://lifehacker.com/5140668/gmail-goes-offline-with-google-gears">closer look</a> at what else it gets you.</p>
<input id="gwProxy" type="hidden"><!--Session data--></input>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/howto/gmail-now-lets-you-add-and-send-attachments-offline/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JavaScript, graphics performance improvements on tap for IE9</title>
		<link>http://techblog.hdexpertise.com/en/uncategorized/javascript-graphics-performance-improvements-on-tap-for-ie9/</link>
		<comments>http://techblog.hdexpertise.com/en/uncategorized/javascript-graphics-performance-improvements-on-tap-for-ie9/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 09:38:41 +0000</pubDate>
		<dc:creator>Anh Huynh</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=628</guid>
		<description><![CDATA[The first information about the next version of Microsoft&#8217;s Web browser was revealed at PDC on Wednesday. The announcement described three main areas of improvement: JavaScript, Web standards, and graphics technology.

IE9 will contain a new, significantly faster JavaScript engine, it will have richer support for Web standards like CSS 3, and it will use the [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://blogs.msdn.com/ie/archive/2009/11/18/an-early-look-at-ie9-for-developers.aspx">first information</a> about the next version of Microsoft&#8217;s Web browser was revealed at PDC on Wednesday. The announcement described three main areas of improvement: JavaScript, Web standards, and graphics technology.<br />
<img src="http://static.arstechnica.com/9_nine_ars.jpg" alt="" /><br />
IE9 will contain a new, significantly faster JavaScript engine, it will have richer support for Web standards like CSS 3, and it will use the new <a href="http://arstechnica.com/microsoft/reviews/2009/10/windows-7-the-review.ars/9">Direct2D and DirectWrite</a> technology for its graphics and text rendering.<br />
<span id="more-628"></span></p>
<p>Both the new JavaScript engine and the new graphics technology will improve the browser&#8217;s performance. Microsoft made the point that different websites place different performance demands on a browser. Some are more scripting intensive, others more graphically intensive; some have complex layouts, others are simple. This has the consequence that to improve performance across the board,  a wide range of optimizations and improvements are needed. With IE9, Redmond intends to not just improve performance in limited benchmarks (that focus on a single aspect of browser performance), but to ensure that real-world websites become faster.</p>
<p><img width="500px" src="http://static.arstechnica.com/Dean_PDC_1.png" alt="" /></p>
<p>Rendering the webpage in IE8 is performed predominantly on the CPU. Direct2D is a new Windows API that uses hardware Direct3D acceleration to accelerate 2D graphics, available in Windows 7 and as a patch for Windows Vista. Through the use of Direct2D, IE9 will perform all graphics rendering on the GPU, providing quicker page rendering, faster, smoother animation, and high quality image scaling. For graphically intensive applications like Google Maps, this should result in better performance and an improved user experience.</p>
<p>JavaScript performance has become an increasingly important concern for Web applications. As Web apps have become more capable and more fully-featured, JavaScript engines have had an ever-greater burden placed on them. Whereas once they might only run a few dozen of lines on a page, today&#8217;s rich applications (Google Apps or the Office Web Apps, say) now run tens or hundreds of kilobytes of scripting on every page. To meet these needs, Firefox, Safari, and Chrome have all seen a lot of development effort on their scripting engines to speed up these usage scenarios.</p>
<p>Though IE&#8217;s JavaScript engine has got faster—the widely used <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">SunSpider</a> benchmark takes about half the time to run in IE8 as it does in IE7—it still lags behind other browsers quite considerably. IE9 is getting a brand-new engine that should take IE&#8217;s JavaScript performance to the proverbial next level. Technical descriptions of the new engine made it sound quite similar to the V8 engine used in Chrome; the new IE9 JavaScript engine will compile JavaScript into native code, just like in V8, and the technique it will use to speed up the object-oriented nature of JavaScript also sounded similar to the approach V8 takes.</p>
<p><img width="500px" src="http://static.arstechnica.com/Dean_PDC_2.png" alt="" /></p>
<p>Early results suggest that the current IE9 engine performs in the same ballpark as betas of Firefox, Safari, and Chrome. IE is still the slowest, but the difference now ranges from 10% slower (compared to Firefox) to 100% slower (compared to Chrome), rather than 5-600% slower as is presently the case for IE8. The IE team does not want to be trailing any more, and performance is now clearly a big deal.</p>
<p>Over the years, standards compliance has been the Web development community&#8217;s biggest complaint about Internet Explorer. Though IE was once highly competitive in this area—during the days of the browser wars—its stagnation after the release of IE6 left it far behind. IE7 made some small improvements, and IE8 did achieve some kind of parity, at least when looking at the fundamental HTML 4.01 and CSS 2.1 specifications. Microsoft made a significant effort with IE8 and arguably its CSS 2.1 compliance was best in class.</p>
<p>However, there is considerable demand among developers for new features: CSS 3, HTML 5, SVG, and Canvas. Many of these standards are still themselves in flux, being in the draft stages of development rather than finalized specifications, but many of their features are so compelling (HTML 5&#8217;s native support for embedded video, CSS 3&#8217;s rounded corners, Canvas&#8217;s extensive graphical capabilities) that developers want them right now. At PDC, Microsoft would not commit to supporting any particular features or specifications with IE9. The company did state that its focus would be on providing the features that were actually most useful to developers, and ensuring that those features had robust test suites.</p>
<p>IE9 is still in its early days, and there is no hint of a date at which a beta might become available. Many questions, especially about standards support, remain unanswered. The switch to Direct2D may also mean an end to XP support (Direct2D is unavailable on that OS). Nonetheless, the announcements give a strong indication that Microsoft is taking its browser seriously, and wants it to be a viable alternative to its competitors. </p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/uncategorized/javascript-graphics-performance-improvements-on-tap-for-ie9/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Chrome OS available as free VMWare download</title>
		<link>http://techblog.hdexpertise.com/en/news/google-chrome-os-available-as-free-vmware-download/</link>
		<comments>http://techblog.hdexpertise.com/en/news/google-chrome-os-available-as-free-vmware-download/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 09:22:39 +0000</pubDate>
		<dc:creator>Anh Huynh</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=625</guid>
		<description><![CDATA[Seriously, how awesome have the past few hours been? Engadget turns the design stakes up to 11, Google finally dishes the dirt on Chrome OS, and now you can even download the forthcoming software to have a fiddle with yourself.

 It&#8217;s completely free, though you&#8217;ll need VMWare running atop a Windows, Linux or OS X [...]]]></description>
			<content:encoded><![CDATA[<p>Seriously, how awesome have the past few hours been? Engadget turns the design stakes <a href="http://www.engadget.com/2009/11/19/welcome-to-the-next-engadget/">up to 11</a>, Google finally dishes the dirt on <a href="http://www.engadget.com/2009/11/19/googles-chrome-os-revealed/">Chrome OS</a>, and now you can even download the forthcoming software to have a fiddle with yourself.<br />
<img src="http://www.blogcdn.com/www.engadget.com/media/2009/11/20nov09goog92084g.jpg" alt="" /><br />
 It&#8217;s completely free, though you&#8217;ll need <a href="http://www.engadget.com/tag/vmware">VMWare</a> running atop a Windows, Linux or OS X installation to make the magic happen. Naturally, we&#8217;ve been considerate enough to provide download links for everything you&#8217;ll require at the source below, so get those fingers clicking. We&#8217;ve already successfully installed the browser-based OS and will soon be sharing our own hands-on thoughts, but if you beat us to it, spill your insight in the comments below. We do read &#8216;em, you know.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/news/google-chrome-os-available-as-free-vmware-download/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Teach Yourself How to Code</title>
		<link>http://techblog.hdexpertise.com/en/howto/teach-yourself-how-to-code/</link>
		<comments>http://techblog.hdexpertise.com/en/howto/teach-yourself-how-to-code/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 03:22:46 +0000</pubDate>
		<dc:creator>hunghuynh</dc:creator>
		
		<category><![CDATA[How To]]></category>

		<category><![CDATA[develpers]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=598</guid>
		<description><![CDATA[
You&#8217;ve always wanted to learn how to build software yourself—or just whip up an occasional script—but never knew where to start. Luckily, the web is full of free resources that can turn you into a programmer in no time.
Since the invention of the internet, programmers have been using it to discuss software development techniques, publish [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://cache.gawker.com/assets/images/17/2009/11/500x_teachyourselftocode-hed.jpg" alt="" width="500" /><br />
You&#8217;ve always wanted to learn how to build software yourself—or just whip up an occasional script—but never knew where to start. Luckily, the web is full of free resources that can turn you into a programmer in no time.</p>
<p>Since the invention of the internet, programmers have been using it to discuss software development techniques, publish tutorials, and share code samples for others to learn from and use online. If you&#8217;re curious about how to become a programmer, you can get off to a running start using tons of great free web-based tutorials and resources.</p>
<p><span id="more-598"></span><strong>First Things First: Don&#8217;t Get Hung Up on Choosing a Language</strong></p>
<p><img class="aligncenter" src="http://cache.gawker.com/assets/images/lifehacker/2009/11/languagechoice.png" alt="" /></p>
<p>A common pitfall for beginners is getting stuck figuring out which programming language is best to learn first. There are a lot of opinions out there, but there&#8217;s no one &#8220;best&#8221; language. Here&#8217;s the thing: In the end, language doesn&#8217;t matter THAT much. Understanding data and control structures and design patterns does matter very much. Every language—even a simple scripting language—will have elements that you&#8217;ll use in other languages as well and will help you learn. In classes I took to get my degree in Computer Science, I programmed in Pascal, Assembly, and C—languages I never actually got paid to program in professionally. I taught myself every language I&#8217;ve used in my career, reusing concepts I already knew, and referring to documentation and books to learn its syntax. So, don&#8217;t get hung up on what language to learn first. Pick the kind of development you want to do, and just get started using one that works.</p>
<p>There are several different kinds of software development you can do for various platforms, from the web to your desktop to your smartphone to a command line. In this article, we&#8217;ll outline some of our favorite starter tutorials and resources for teaching yourself how to program for each major platform. We&#8217;re going to assume you&#8217;re a savvy user, but a newb when it comes to wrangling code snippets, so we&#8217;ll keep things at the beginner level. Even just following through a beginner programming tutorial, you&#8217;ll be happy to see how far you can get.</p>
<p>There are several different kinds of software development you can do for various platforms, from the web to your desktop to your smartphone to a command line. In this article, we&#8217;ll outline some of our favorite starter tutorials and resources for teaching yourself how to program for each major platform. We&#8217;re going to assume you&#8217;re a savvy user, but a newb when it comes to wrangling code snippets, so we&#8217;ll keep things at the beginner level. Even just following through a beginner programming tutorial, you&#8217;ll be happy to see how far you can get.</p>
<p><strong>Desktop Scripting</strong></p>
<p>The easiest way to try your hand at programming for your Windows or Mac desktop is to start with a scripting or macro program like <a href="http://autohotkey.com/">AutoHotkey</a> (for Windows) or <a href="http://www.macosxautomation.com/automator/">Automator</a> (for Mac). Right now hardcore coders throughout the Lifehacker readership are yelling at their monitors, saying that AHK or AppleScript are not &#8220;real&#8221; programming. That may be true—technically these types of tools just do high-level scripting. But for those new to programming who just want to get their feet wet, automating actions on their desktop, these free tools are a fantastic way to start—and you&#8217;d be surprised at how much you can do with them.</p>
<p><img class="aligncenter" src="http://cache.gawker.com/assets/images/17/2009/07/340x_add%20new%20hotstring.png" alt="" width="500" height="221" /></p>
<p>For example, Adam developed the standalone Windows application we all know and love, <a href="http://lifehacker.com/238306/lifehacker-code-texter-windows">Texter</a>, using AutoHotkey, so this scripting language is capable of far more than just small-scale automation projects. To get started with AutoHotkey, check out Adam&#8217;s tutorial on <a href="http://lifehacker.com/316589/turn-any-action-into-a-keyboard-shortcut">how to turn any action into a keyboard shortcut using AutoHotkey</a>. (Then, check out <a href="http://github.com/adampash/texter">the source code for Texter</a> to see the innards of a full-fledged AHK-based Windows application.)</p>
<h3 style="font-size: 120%; margin-top: 20px;">Web Development</h3>
<p>Instead of being bound to specific programming languages and the look and feel of a particular operating system, you can put your killer application in the browser and run it in the cloud, as a webapp. Welcome to the wonderful world of web development.</p>
<p><strong>HTML and CSS:</strong> The first thing you need to know to build any web site is HTML (the page markup that makes up web pages) and CSS (the style information that makes that markup look pretty). HTML and CSS are not true programming languages—they&#8217;re just page structure and style information. However, you should be able to author simple HTML and CSS by hand before you begin building web applications, because a web page is the frontend to every webapp. This <a href="http://www.w3schools.com/html/default.asp">HTML tutorial</a> is a good place to start.</p>
<p><strong>JavaScript:</strong> Now that you can lay out a static web page with HTML and CSS, things get fun—because it&#8217;s time to learn JavaScript. JavaScript is the programming language of the web browser, the magic that makes dynamic in-page effects go. JavaScript is also the stuff of bookmarklets, <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> user scripts, and <a href="http://www.webmonkey.com/tutorial/Ajax_for_Beginners">Ajax</a>, so it&#8217;s the key to making all sorts of web goodies. <a href="http://w3schools.com/js/default.asp">Start learning JavaScript here</a>.</p>
<p><strong>Server-side scripting:</strong> Once you&#8217;re good at making things happen inside a web page, you&#8217;re going to need to put some dynamic server action behind it—and for that, you&#8217;ll need to move into a server-side scripting language, like PHP, Python, Perl, or Ruby. For example, to make a web-based contact form that sends an email somewhere based on what a user entered, a server-side script is required. Scripting languages like PHP can talk to a database on your web server as well, so if you want to make a site where users can log in and store information, that&#8217;s the way to go. Excellent web development site <a href="http://webmonkey.com/">Webmonkey</a> is full of tutorials for various web programming languages. See their <a href="http://www.webmonkey.com/tutorial/PHP_Tutorial_for_Beginners">PHP Tutorial for Beginners</a>. When you&#8217;re ready, check out how to use PHP to talk to a database in <a href="http://www.webmonkey.com/tutorial/PHP_and_MySQL_Tutorial_-_Lesson_1">WebMonkey&#8217;s PHP and MySQL tutorial</a>. PHP&#8217;s online documentation and function reference is the best on the web. Each entry (like this one on the <a href="http://us.php.net/manual/en/function.strlen.php">strlen function</a>) includes user comments at the bottom which are often as helpful as the documentation itself. (I happen to be partial to PHP, but there are plenty of other server-side scripting languages you might decide to go with instead.)</p>
<p><strong>Web frameworks:</strong> Over the years, web developers have had to solve and resolve the same problems and rewrite similar code to build dynamic web sites. To avoid making everyone reinvent the wheel for every new web development project, some programmers have come up with development frameworks that do some repetitive work for you. The popular <a href="http://rubyonrails.org/">Ruby on Rails</a> framework, for example, takes the Ruby programming language and offers a web-specific structure for getting common web application tasks done. In fact, Adam used Rails to build his first serious (and impressive!) web application, <a href="http://mixtape.me/">MixTape.me</a>. Here&#8217;s <a href="http://lifehacker.com/5336113/how-to-build-a-web-site-from-scratch-with-no-experience">his take on how to build a web site from scratch with no experience</a>. Other popular web development frameworks include <a href="http://cakephp.org/">CakePHP</a> (for PHP programmers), <a href="http://www.djangoproject.com/">Django</a> (for Python programmers), and <a href="http://jquery.com/">jQuery</a> (for JavaScript).</p>
<p><strong>Web APIs:</strong> An <a href="http://en.wikipedia.org/wiki/API">API (Application programming interface)</a> is a programmatic way for different pieces of software to talk to one another. For example, if you want to put a dynamic map on your web site, you want to use a Google Map instead of building your own custom map. <a href="http://code.google.com/apis/maps/">The Google Maps API</a> makes it easy to programmatically include a map in a page with JavaScript. Almost every modern web service you know and love has an API that lets you include data and widgets from it in your application, like Twitter, Facebook, Google Docs, Google Maps, and the list goes on. Integrating other webapps into your web application via API&#8217;s is the final frontier of rich web development. Every good, major web service API offers thorough documentation and some sort of quick start guide to try it out (here&#8217;s <a href="http://apiwiki.twitter.com/">Twitter&#8217;s</a>, for example). Go crazy.</p>
<h3 style="font-size: 120%; margin-top: 20px;">Command Line Scripting</h3>
<p>If you want to write a program that takes textual or file input and outputs something useful, the command line is the right place to do it. While the command line isn&#8217;t as sexy or good-looking as a webapp or desktop app, for rapid development of quick scripts that automate processes, you can&#8217;t beat it.</p>
<p>Several scripting languages that work on a Linux-based web server also work at the command line, like Perl, Python, and PHP—so learning one of those baddies makes you conversant in two contexts. My path never took me too far down the Perl road, but I taught myself Python using the excellent and free online book, <em><a href="http://diveintopython.org/">Dive into Python</a></em>.</p>
<p><img class="aligncenter" src="http://cache.gawker.com/assets/images/lifehacker/2009/02/todotxt20-header.png" alt="" width="500" /></p>
<p>If becoming a Unix ninja is one of your programmer goals, you absolutely must get good at shell scripting with bash. Bash is the command line scripting language of a *nix environment, and it can do everything from help you set up automated backups of your database and files to building out a full-fledged application with user interaction. Without any experience writing bash scripts beyond a dozen lines, I wound up developing a full-on personal to-do list manager in bash, <a href="http://todotxt.com/">Todo.txt CLI</a>.</p>
<h3 style="font-size: 120%; margin-top: 20px;">Add-ons</h3>
<p>Nowadays, modern webapps and browsers are extensible with with bits of software that bolt onto them and add features. Add-on development is gaining in popularity as more developers look at existing software, like Firefox or WordPress, and think &#8220;But if only it could do THIS&#8230;&#8221;</p>
<p>You can do a whole lot in any web browser with just a mastery of HTML, JavaScript, and CSS. Bookmarklets, <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> user scripts, and <a href="https://addons.mozilla.org/en-US/firefox/addon/2108">Stylish</a> user styles are created with the same bits of code that make regular web pages, so they&#8217;re worth learning even if you just want to tweak an existing site with a small snippet of code.</p>
<p>More advanced browser add-ons, like Firefox extensions, let you do more. Developing Firefox extensions, for example, requires that you&#8217;re conversant in JavaScript and XML (markup that&#8217;s similar to HTML, but way more strict in format). Back in 2007 I ran down <a href="http://lifehacker.com/264490/how-to-build-a-firefox-extension">how to build a Firefox extension</a>, a skill I picked up after I stumbled upon a free tutorial.</p>
<p>Many free and well-loved web applications offer an extension framework as well, like WordPress and MediaWiki. Both of those apps are written in PHP, so comfort with PHP is a prerequisite for getting started. Here&#8217;s <a href="http://codex.wordpress.org/Writing_a_Plugin">how to write a plug-in for WordPress</a>. Developers who want to ride the cutting edge of Google Wave can get started writing gadgets and bots in HTML, JavaScript, Java, and Python. I wrote my first Wave bot following this <a href="http://code.google.com/apis/wave/extensions/robots/python-tutorial.html">quick start tutorial in one afternoon</a>.</p>
<h3 style="font-size: 120%; margin-top: 20px;">Web Development for the Desktop</h3>
<p>The best part about getting started programming in one context is when you can take those skills and apply them elsewhere. Learning web development first is a great way to start because now there are ways to put those skills to work on desktop applications, too. For example, <a href="http://www.adobe.com/devnet/air/ajax/getting_started.html">Adobe AIR</a> is a cross-platform run-time environment that lets you build your app once and release it to run on the desktop for every operating system AIR runs on. AIR apps are written in HTML, Flash, or Flex, so it lets you apply your web development skills in a desktop context. AIR is a great option for deploying desktop apps like one of our <a href="http://lifehacker.com/396393/top-10-apps-worth-installing-adobe-air-for">top 10 apps worth installing Adobe AIR for</a>.</p>
<h3 style="font-size: 120%; margin-top: 20px;">Mobile App Development</h3>
<p>Mobile applications like the ones you run on your iPhone or Android smartphone are all the rage right now, so you may have dreams of striking it rich in the iTunes App Store with the next killer app. However, for the new coder, diving headfirst into mobile development can be a rough learning curve, since it requires comfort with advanced programming languages like Java and Objective C. However, it&#8217;s worth checking out what iPhone and Android development looks like. Check out <a href="http://www.cimgf.com/2008/10/01/cocoa-touch-tutorial-iphone-application-example/">this simple iPhone application development example</a> to get a taste of what iPhone developers do. Android apps are written in Java, and here&#8217;s a <a href="http://www.youtube.com/watch?v=I6ObTqIiYfE">friendly video tutorial of what building a &#8220;Hello Android&#8221; application workflow looks like</a>.</p>
<h3 style="font-size: 120%; margin-top: 20px;">Patience, Elbow Grease, Trial and Error</h3>
<p>Good coders are a special breed of persistent problem-solvers who are addicted to the small victories that come along a long path of trial and error. Learning how to program is very rewarding, but it can also be a frustrating and solitary experience. If you can, get a buddy to work with you along the way. Getting really good at programming, like anything else, is a matter of sticking with it, trying things out, and getting experience as you go.</p>
<p>Source: lifehacker.com</p>
<input id="gwProxy" type="hidden"><!--Session data--></input>
<input id="jsProxy" onclick="jsCall();" type="hidden" />
<p><span id="leoHighlights_iframe_modal_span_container"></p>
<div id="leoHighlights_iframe_modal_div_container" style="border: 1px solid black; position: absolute; visibility: hidden; display: none; width: 394px; height: 40px; z-index: 32768; background-color: white;" onmouseover="leoHighlightsHandleIFrameMouseOver();" onmouseout="leoHighlightsHandleIFrameMouseOut();">
<div id="leo_iFrame_closebar" style="position: absolute; top: 0px; left: 0px; width: 394px; height: 40px; z-index: 32768; background-image: url(chrome://shim/content/highlightsFilter-1/header.gif);"><a href="javascript: leoHighlightsIFrameClose();"></p>
<div id="leo_iFrame_close" style="position: absolute; top: 10px; left: 360px; width: 20px; height: 20px;"></div>
<p></a></div>
</div>
<p><script type="text/javascript">
   createInlineScriptElement("var%20LEO_HIGHLIGHTS_DEBUG%20%3D%20true%3B%0Avar%20LEO_HIGHLIGHTS_DEBUG_POS%20%3D%20false%3B%0Avar%20LEO_HIGHLIGHTS_INFINITE_LOOP_COUNT%20%3D%20300%3B%0Avar%20LEO_HIGHLIGHTS_MAX_HIGHLIGHTS%20%3D%20200%3B%0Avar%20LEO_HIGHLIGHTS_IFRAME_ID%20%3D%20%22leoHighlights_iframe%22%3B%0Avar%20LEO_HIGHLIGHTS_IFRAME_DIV_ID%20%3D%20%22leoHighlights_iframe_modal_div_container%22%3B%0Avar%20LEO_HIGHLIGHTS_SHOW_DELAY_MS%20%3D%20300%3B%0Avar%20LEO_HIGHLIGHTS_HIDE_DELAY_MS%20%3D%20750%3B%0Avar%20LEO_HIGHLIGHTS_BACKGROUND_STYLE_DEFAULT%20%3D%20%22transparent%20none%20repeat%20scroll%200%25%200%25%22%3B%0Avar%20LEO_HIGHLIGHTS_BACKGROUND_STYLE_HOVER%20%3D%20%20%20%22rgb%28245%2C245%2C0%29%20none%20repeat%20scroll%200%25%200%25%22%3B%0Avar%20_leoHighlightsPrevElem%20%3D%20null%3B%0A%0A/**%0A%20*%20General%20method%20used%20to%20debug%20exceptions%0A%20*%20%0A%20*%20@param%20location%0A%20*%20@param%20e%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsReportExeception%28location%2Ce%29%0A%7B%0A%20%20%20if%28LEO_HIGHLIGHTS_DEBUG%29%0A%20%20%20%7B%0A%20%20%20%20%20%20alert%28%22EXCEPTION%3A%20%22+location+%22%3A%20%22+e+%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%5Cn%5Ct%22+e.name+%22%5Cn%5Ct%22+%28e.number%260xFFFF%29+%22%5Cn%5Ct%22+e.description%29%3B%0A%20%20%20%7D%0A%7D%0A%0A/**%0A%20*%20This%20is%20a%20dimensions%20object%0A%20*%20%0A%20*%20@param%20width%0A%20*%20@param%20height%0A%20*%20@return%0A%20*/%0Afunction%20LeoHighlightsDimension%28width%2Cheight%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%09this.width%3Dwidth%3B%0A%20%20%20%09this.height%3Dheight%3B%0A%20%20%20%09this.toString%3Dfunction%28%29%20%7B%20return%20%28%22%28%22+this.width+%22%2C%22+this.height+%22%29%22%29%3B%7D%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22new%20LeoHighlightsDimension%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%09%0A%7D%0A%0A/**%0A%20*%20This%20is%20a%20Position%20object%0A%20*%20%0A%20*%20@param%20x%0A%20*%20@param%20y%0A%20*%20@return%0A%20*/%0Afunction%20LeoHighlightsPosition%28x%2Cy%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%09this.x%3Dx%3B%0A%20%20%20%09this.y%3Dy%3B%0A%20%20%20%09this.toString%3Dfunction%28%29%20%7B%20return%20%28%22%28%22+this.x+%22%2C%22+this.y+%22%29%22%29%3B%7D%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22new%20LeoHighlightsPosition%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%09%0A%7D%0A%0Avar%20LEO_HIGHLIGHTS_ADJUSTMENT%20%3D%20new%20LeoHighlightsPosition%283%2C3%29%3B%0Avar%20LEO_HIGHLIGHTS_IFRAME_HOVER_SIZE%20%3D%20new%20LeoHighlightsDimension%28394%2C236%29%3B%0Avar%20LEO_HIGHLIGHTS_IFRAME_CLICK_SIZE%20%3D%20new%20LeoHighlightsDimension%28394%2C512%29%3B%0Avar%20LEO_HIGHLIGHTS_CLOSE_BAR_HEIGHT%20%3D%2040%3B%0Avar%20LEO_HIGHLIGHTS_DIV_HOVER_SIZE%20%3D%20new%20LeoHighlightsDimension%28LEO_HIGHLIGHTS_IFRAME_HOVER_SIZE.width%2C%0A%09%09%09LEO_HIGHLIGHTS_IFRAME_HOVER_SIZE.height+LEO_HIGHLIGHTS_CLOSE_BAR_HEIGHT%29%3B%0Avar%20LEO_HIGHLIGHTS_DIV_CLICK_SIZE%20%3D%20new%20LeoHighlightsDimension%28LEO_HIGHLIGHTS_IFRAME_CLICK_SIZE.width%2C%0A%09%09LEO_HIGHLIGHTS_IFRAME_CLICK_SIZE.height+LEO_HIGHLIGHTS_CLOSE_BAR_HEIGHT%29%3B%0A%0A%0A/**%0A%20*%20Sets%20the%20size%20of%20the%20passed%20in%20element%0A%20*%20%0A%20*%20@param%20elem%0A%20*%20@param%20dim%20%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsSetSize%28elem%2Cdim%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%09//%20Set%20the%20popup%20location%0A%20%20%20%09elem.style.width%20%3D%20dim.width%20+%20%22px%22%3B%0A%20%20%20%09if%28elem.width%29%0A%20%20%20%09%09elem.width%3Ddim.width%3B%0A%20%20%20%09elem.style.height%20%20%3D%20dim.height%20+%20%22px%22%3B%0A%20%20%20%09if%28elem.height%29%0A%20%20%20%09%09elem.height%3Ddim.height%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22_leoHighlightsSetSize%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%09%0A%7D%0A%0A/**%0A%20*%20This%20can%20be%20used%20for%20a%20simple%20one%20argument%20callback%0A%20*%0A%20*%20@param%20callName%0A%20*%20@param%20argName%0A%20*%20@param%20argVal%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsSimpleGwCallBack%28callName%2CargName%2C%20argVal%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%20%20%20var%20gwObj%20%3D%20new%20Gateway%28%29%3B%0A%20%20%20%20%20%20if%28argName%29%0A%20%20%20%20%20%20%09gwObj.addParam%28argName%2CargVal%29%3B%0A%20%20%20%20%20%20gwObj.callName%28callName%29%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22_leoHighlightsSimpleGwCallBack%28%29%20%22+callName%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%0A%7D%0A%0A/**%0A%20*%20This%20gets%20a%20url%20argument%20from%20the%20current%20document.%0A%20*%20%0A%20*%20@param%20url%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsGetUrlArg%28url%2C%20name%20%29%0A%7B%0A%09%20%20name%20%3D%20name.replace%28/[%5C[]/%2C%22%5C%5C%5C[%22%29.replace%28/[%5C]]/%2C%22%5C%5C%5C]%22%29%3B%0A%09%20%20var%20regexS%20%3D%20%22[%5C%5C?%26]%22+name+%22%3D%28[^%26%23]*%29%22%3B%0A%09%20%20var%20regex%20%3D%20new%20RegExp%28%20regexS%20%29%3B%0A%09%20%20var%20results%20%3D%20regex.exec%28url%29%3B%0A%09%20%20if%28%20results%20%3D%3D%20null%20%29%0A%09%20%20%20%20return%20%22%22%3B%0A%09%20%20else%0A%09%20%20%20%20return%20results[1]%3B%0A%7D%0A%0A%0A/**%0A%20*%20This%20allows%20to%20redirect%20the%20top%20window%20to%20the%20passed%20in%20url%0A%20*%20%0A%20*%20@param%20url%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsRedirectTop%28url%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%20%20%20%09%0A%20%20%20%09top.location%3Durl%3B%09%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22_leoHighlightsRedirectTop%28%29%22%2Ce%29%3B%0A%20%20%20%7D%0A%7D%0A%0A/**%0A%20*%20This%20is%20used%20to%20report%20events%20to%20the%20plugin%0A%20*%20@param%20key%0A%20*%20@param%20sub%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsEvent%28key%2C%20sub%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%20%20%20var%20gwObj%20%3D%20new%20Gateway%28%29%3B%0A%20%20%20%20%20%20gwObj.addParam%28%22key%22%2C%20key%29%3B%0A%20%20%20%20%20%20gwObj.addParam%28%22sub%22%2C%20sub%29%3B%0A%20%20%20%20%20%20gwObj.callName%28%22leoHighlightsEvent%22%29%3B%09%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22_leoHighlightsEvent%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%0A%7D%0A%0A/**%0A%20*%20This%20will%20find%20an%20element%20by%20Id%0A%20*%20%0A%20*%20@param%20elemId%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsFindElementById%28elemId%29%0A%7B%0A%09try%0A%09%7B%0A%09%09var%20elem%3Ddocument.getElementById%28elemId%29%3B%0A%09%09if%28elem%29%0A%09%09%09return%20elem%3B%0A%09%09%0A%09%09/*%20This%20is%20the%20handling%20for%20IE%20*/%0A%09%09if%28document.all%29%0A%09%09%7B%0A%09%09%09elem%3Ddocument.all[elemId]%3B%0A%20%20%20%20%20%20%20%20%20if%28elem%29%0A%20%20%20%20%20%20%20%20%20%09return%20elem%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%20%3D%20%28document.all.length-1%29%3B%20i%20%3E%3D%200%3B%20i&#8211;%29%20%7B%0A%20%20%20%20%20%20%20%20%20%09elem%3Ddocument.all[i]%3B%0A%20%20%20%20%20%20%20%20%20%09if%28elem.id%3D%3DelemId%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20elem%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%09%09%7D%0A%09%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22_leoHighlightsFindElementById%28%29%22%2Ce%29%3B%0A%20%20%20%7D%0A%09return%20null%3B%0A%7D%0A%0A/**%0A%20*%20Get%20the%20location%20of%20one%20element%20relative%20to%20a%20parent%20reference%0A%20*%0A%20*%20@param%20ref%0A%20*%20%20%20%20%20%20%20%20%20%20%20the%20reference%20element%2C%20this%20must%20be%20a%20parent%20of%20the%20passed%20in%0A%20*%20%20%20%20%20%20%20%20%20%20%20element%0A%20*%20@param%20elem%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsGetLocation%28ref%2C%20elem%29%20%7B%0A%20%20%20var%20count%20%3D%200%3B%0A%20%20%20var%20location%20%3D%20new%20LeoHighlightsPosition%280%2C0%29%3B%0A%20%20%20var%20walk%20%3D%20elem%3B%0A%20%20%20while%20%28walk%20%21%3D%20null%20%26%26%20walk%20%21%3D%20ref%20%26%26%20count%20%3C%20LEO_HIGHLIGHTS_INFINITE_LOOP_COUNT%29%20%7B%0A%20%20%20%20%20%20location.x%20+%3D%20walk.offsetLeft%3B%0A%20%20%20%20%20%20location.y%20+%3D%20walk.offsetTop%3B%0A%20%20%20%20%20%20walk%20%3D%20walk.offsetParent%3B%0A%20%20%20%20%20%20count++%3B%0A%20%20%20%7D%0A%0A%20%20%20return%20location%3B%0A%7D%0A%0A/**%0A%20*%20This%20is%20used%20to%20update%20the%20position%20of%20an%20element%20as%20a%20popup%0A%20*%20%0A%20*%20@param%20IFrame%0A%20*%20@param%20anchor%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsUpdatePopupPos%28iFrame%2Canchor%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%20%20%20//%20Gets%20the%20scrolled%20location%20for%20x%20and%20y%0A%20%20%20%20%20%20var%20scrolledPos%3Dnew%20LeoHighlightsPosition%280%2C0%29%3B%0A%20%20%20%20%20%20if%28%20self.pageYOffset%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20scrolledPos.x%20%3D%20self.pageXOffset%3B%0A%20%20%20%20%20%20%20%20%20scrolledPos.y%20%3D%20self.pageYOffset%3B%0A%20%20%20%20%20%20%7D%20else%20if%28%20document.documentElement%20%26%26%20document.documentElement.scrollTop%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20scrolledPos.x%20%3D%20document.documentElement.scrollLeft%3B%0A%20%20%20%20%20%20%20%20%20scrolledPos.y%20%3D%20document.documentElement.scrollTop%3B%0A%20%20%20%20%20%20%7D%20else%20if%28%20document.body%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20scrolledPos.x%20%3D%20document.body.scrollLeft%3B%0A%20%20%20%20%20%20%20%20%20scrolledPos.y%20%3D%20document.body.scrollTop%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20/*%20Get%20the%20total%20dimensions%20to%20see%20what%20scroll%20bars%20might%20be%20active%20*/%0A%20%20%20%20%20%20var%20totalDim%3Dnew%20LeoHighlightsDimension%280%2C0%29%0A%20%20%20%20%20%20if%20%28document.all%20%26%26%20document.documentElement%20%26%26%20%0A%20%20%20%20%20%20%09document.documentElement.clientHeight%26%26document.documentElement.clientWidth%29%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%09totalDim.width%20%3D%20document.documentElement.scrollWidth%3B%0A%20%20%20%20%20%20%09totalDim.height%20%3D%20document.documentElement.scrollHeight%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%20if%20%28document.all%29%0A%20%20%20%20%20%20%7B%20/*%20This%20is%20in%20IE%20*/%0A%20%20%20%20%20%09%20%09totalDim.width%20%3D%20document.body.scrollWidth%3B%0A%20%20%20%20%20%20%09totalDim.height%20%3D%20document.body.scrollHeight%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%09%20totalDim.width%20%3D%20document.width%3B%0A%20%20%20%20%20%20%09%20totalDim.height%20%3D%20document.height%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%20Gets%20the%20location%20of%20the%20available%20screen%20space%0A%20%20%20%20%20%20var%20centerDim%3Dnew%20LeoHighlightsDimension%280%2C0%29%3B%0A%20%20%20%20%20%20if%28self.innerWidth%20%26%26%20self.innerHeight%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20centerDim.width%20%3D%20self.innerWidth-%28totalDim.height%3Eself.innerHeight?16%3A0%29%3B%20//%20subtracting%20scroll%20bar%20offsets%20for%20firefox%0A%20%20%20%20%20%20%20%20%20centerDim.height%20%3D%20self.innerHeight-%28totalDim.width%3Eself.innerWidth?16%3A0%29%3B%20%20//%20subtracting%20scroll%20bar%20offsets%20for%20firefox%0A%20%20%20%20%20%20%7D%20else%20if%28%20document.documentElement%20%26%26%20document.documentElement.clientHeight%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20centerDim.width%20%3D%20document.documentElement.clientWidth%3B%0A%20%20%20%20%20%20%20%20%20centerDim.height%20%3D%20document.documentElement.clientHeight%3B%0A%20%20%20%20%20%20%7D%20else%20if%28%20document.body%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20centerDim.width%20%3D%20document.body.clientWidth%3B%0A%20%20%20%20%20%20%20%20%20centerDim.height%20%3D%20document.body.clientHeight%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20Get%20the%20current%20dimension%20of%20the%20popup%20element%0A%20%20%20%20%20%20var%20iFrameDim%3Dnew%20LeoHighlightsDimension%28iFrame.offsetWidth%2CiFrame.offsetHeight%29%0A%20%20%20%20%20%20if%20%28iFrameDim.width%20%3C%3D%200%29%0A%20%20%20%20%20%20%09iFrameDim.width%20%3D%20iFrame.style.width.substring%280%2C%20iFrame.style.width.indexOf%28%27px%27%29%29%3B%0A%20%20%20%20%20%20if%20%28iFrameDim.height%20%3C%3D%200%29%0A%20%20%20%20%20%20%09iFrameDim.height%20%3D%20iFrame.style.height.substring%280%2C%20iFrame.style.height.indexOf%28%27px%27%29%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20/*%20Calculate%20the%20position%2C%20lower%20right%20hand%20corner%20by%20default%20*/%0A%20%20%20%20%20%20var%20position%3Dnew%20LeoHighlightsPosition%280%2C0%29%3B%0A%20%20%20%20%20%20position.x%3DscrolledPos.x+centerDim.width-iFrameDim.width-LEO_HIGHLIGHTS_ADJUSTMENT.x%3B%0A%20%20%20%20%20%20position.y%3DscrolledPos.y+centerDim.height-iFrameDim.height-LEO_HIGHLIGHTS_ADJUSTMENT.y%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20if%28anchor%21%3Dnull%29%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20//centerDim%20in%20relation%20to%20the%20anchor%20element%20if%20available%0A%20%20%20%20%20%20%20%20%20var%20topOrBottom%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20var%20anchorPos%3D_leoHighlightsGetLocation%28document.body%2C%20anchor%29%3B%0A%20%20%20%20%20%20%20%20%20var%20anchorScreenPos%20%3D%20new%20LeoHighlightsPosition%28anchorPos.x-scrolledPos.x%2CanchorPos.y-scrolledPos.y%29%3B%0A%20%20%20%20%20%20%20%20%20var%20anchorDim%3Dnew%20LeoHighlightsDimension%28anchor.offsetWidth%2Canchor.offsetHeight%29%0A%20%20%20%20%20%20%20%20%20if%20%28anchorDim.width%20%3C%3D%200%29%0A%20%20%20%20%20%20%20%20%20%09anchorDim.width%20%3D%20anchor.style.width.substring%280%2C%20anchor.style.width.indexOf%28%27px%27%29%29%3B%0A%20%20%20%20%20%20%20%20%20if%20%28anchorDim.height%20%3C%3D%200%29%0A%20%20%20%20%20%20%20%20%20%09anchorDim.height%20%3D%20anchor.style.height.substring%280%2C%20anchor.style.height.indexOf%28%27px%27%29%29%3B%0A%0A%20%20%20%20%20%20%20%20%20//%20Check%20if%20the%20popup%20can%20be%20shown%20above%20or%20below%20the%20element%0A%20%20%20%20%20%20%20%20%20if%20%28centerDim.height%20-%20anchorDim.height%20-%20iFrameDim.height%20-%20anchorScreenPos.y%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%09//%20Show%20below%2C%20formula%20above%20calculates%20space%20below%20open%20iFrame%0A%20%20%20%20%20%20%20%20%20%20%20%20position.y%20%3D%20anchorPos.y%20+%20anchorDim.height%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20topOrBottom%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28anchorScreenPos.y%20-%20anchorDim.height%20-%20iFrameDim.height%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%09//%20Show%20above%2C%20formula%20above%20calculates%20space%20above%20open%20iFrame%0A%20%20%20%20%20%20%20%20%20%09position.y%20%3D%20anchorPos.y%20-%20iFrameDim.height%20-%20anchorDim.height%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20topOrBottom%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20if%20%28topOrBottom%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20//%20We%20attempt%20top%20attach%20the%20window%20to%20the%20element%0A%20%20%20%20%20%20%20%20%20%09position.x%20%3D%20anchorPos.x%20-%20iFrameDim.width%20/%202%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28position.x%20%3C%200%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%09position.x%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28position.x%20+%20iFrameDim.width%20%3E%20scrolledPos.x%20+%20centerDim.width%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%09position.x%20%3D%20scrolledPos.x%20+%20centerDim.width%20-%20iFrameDim.width%3B%0A%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20//%20Attempt%20to%20align%20on%20the%20right%20or%20left%20hand%20side%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28centerDim.width%20-%20anchorDim.Width%20-%20iFrameDim.width%20-%20anchorScreenPos.x%20%3E%200%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20position.x%20%3D%20anchorPos.x%20+%20anchorDim.width%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28anchorScreenPos.x%20-%20anchorDim.width%20-%20iFrameDim.width%20%3E%200%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%09position.x%20%3D%20anchorPos.x%20-%20anchorDim.width%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20%20//%20default%20to%20below%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20position.y%20%3D%20anchorPos.y%20+%20anchorDim.height%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20/*%20Make%20sure%20that%20we%20don%27t%20go%20passed%20the%20right%20hand%20border%20*/%0A%20%20%20%20%20%20if%28position.x+iFrameDim.width%3EcenterDim.width-20%29%0A%20%20%20%20%20%20%09position.x%3DcenterDim.width-%28iFrameDim.width+20%29%3B%0A%20%20%20%20%20%20%09%09%0A%20%20%20%20%20%20//%20Make%20sure%20that%20we%20didn%27t%20go%20passed%20the%20start%0A%20%20%20%20%20%20if%28position.x%3C0%29%0A%20%20%20%20%20%20%20%20%20position.x%3D0%3B%0A%20%20%20%20%20%20if%28position.y%3C0%29%0A%20%20%20%20%20%20%09position.y%3D0%3B%0A%0A%20%20%20%20%20%20if%20%28LEO_HIGHLIGHTS_DEBUG_POS%26%26LEO_HIGHLIGHTS_DEBUG%29%20%7B%0A%20%20%20%20%20%20%20%20%20alert%28%22%20Popup%20info%20id%3A%20%20%20%20%20%20%20%22%20+iFrame.id+%22%20-%20%22+anchor.id%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20%22%5Cnscrolled%20%20%20%20%20%20%20%20%20%20%22%20+%20scrolledPos%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20%22%5Cncenter/visible%20%20%20%20%22%20+%20centerDim%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20%22%5Cnanchor%20%28absolute%29%20%22%20+%20anchorPos%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20%22%5Cnanchor%20%28screen%29%20%20%20%22%20+%20anchorScreenPos%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20%22%5CnSize%20%28anchor%29%20%20%20%20%20%22%20+%20anchorDim%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20%22%5CnSize%20%28popup%29%20%20%20%20%20%20%22%20+%20iFrameDim%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20%22%5CnResult%20pos%20%20%20%20%20%20%20%20%22%20+%20position%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%20Set%20the%20popup%20location%0A%20%20%20%20%20%20iFrame.style.left%20%3D%20position.x%20+%20%22px%22%3B%0A%20%20%20%20%20%20iFrame.style.top%20%20%3D%20position.y%20+%20%22px%22%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22_leoHighlightsUpdatePopupPos%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%0A%7D%0A%0A%0A/**%0A%20*%20This%20will%20show%20the%20passed%20in%20element%20as%20a%20popup%0A%20*%20%0A%20*%20@param%20anchorId%0A%20*%20@param%20size%0A%20*%20%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsShowPopup%28anchorId%2Csize%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%09var%20popup%3Dnew%20LeoHighlightsPopup%28anchorId%2Csize%29%3B%0A%20%20%20%09popup.show%28%29%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22_leoHighlightsShowPopup%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%09%0A%7D%0A%0A%0A/**%0A%20*%20This%20will%20transform%20the%20passed%20in%20url%20to%20a%20rover%20url%0A%20*%20%0A%20*%20@param%20url%0A%20*%20@return%0A%20*/%0Afunction%20_leoHighlightsGetRoverUrl%28url%29%0A%7B%0A%09var%20rover%3D%22711-36858-13496-14%22%3B%0A%09var%20roverUrl%3D%22http%3A//rover.ebay.com/rover/1/%22+rover+%22/4?%26mpre%3D%22+encodeURI%28url%29%3B%0A%09%0A%09return%20roverUrl%3B%0A%7D%0A%0A/**%0A%20*%20Class%20for%20a%20Popup%20%0A%20*%20%0A%20*%20@param%20anchorId%0A%20*%20@param%20size%0A%20*%20%0A%20*%20@return%0A%20*/%0Afunction%20LeoHighlightsPopup%28anchorId%2Csize%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%09this.anchorId%3DanchorId%3B%0A%20%20%20%09this.anchor%3D_leoHighlightsFindElementById%28this.anchorId%29%3B%0A%20%20%20%09this.iFrame%3D_leoHighlightsFindElementById%28LEO_HIGHLIGHTS_IFRAME_ID%29%3B%0A%20%20%20%09this.iFrameDiv%3D_leoHighlightsFindElementById%28LEO_HIGHLIGHTS_IFRAME_DIV_ID%29%3B%0A%20%20%20%09%0A%20%20%20%09var%20url%3Dunescape%28this.anchor.getAttribute%28%27leoHighlights_url%27%29%29%3B%0A%0A%20%20%20%09this.iFrame.src%3Durl%3B%0A%0A%20%20%20%09leoHighlightsSetSize%28size%29%3B%0A%20%20%20%09%0A%20%20%20%09this.updatePos%3Dfunction%28%29%20%7B%20_leoHighlightsUpdatePopupPos%28this.iFrameDiv%2Cthis.anchor%29%7D%3B%0A%20%20%20%09this.show%3Dfunction%28%29%20%7Bthis.updatePos%28%29%3B%20this.iFrameDiv.style.visibility%20%3D%20%22visible%22%3B%20this.iFrameDiv.style.display%20%3D%20%22block%22%3B%20this.updatePos%28%29%3B%7D%20%20%20%09%09%0A%20%20%20%09this.scroll%3Dfunction%28%29%20%7B%20this.updatePos%28%29%3B%7D%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22new%20LeoHighlightsPopup%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%0A%7D%0A%0A/**%0A*%0A*%20This%20can%20be%20used%20to%20close%20an%20iframe%0A*%0A*%20@param%20id%0A*%20@return%0A*/%0Afunction%20leoHighlightsSetSize%28size%2CclickId%29%0A%7B%0A%09try%0A%09%7B%0A%09%09/*%20Get%20the%20appropriate%20sizes%20*/%0A%20%20%09%09var%20iFrame%3D_leoHighlightsFindElementById%28LEO_HIGHLIGHTS_IFRAME_ID%29%3B%0A%20%20%09%09var%20iFrameDiv%3D_leoHighlightsFindElementById%28LEO_HIGHLIGHTS_IFRAME_DIV_ID%29%3B%0A%20%20%09%09%0A%20%20%09%09/*%20Figure%20out%20the%20correct%20sizes%20*/%0A%20%20%09%09var%20iFrameSize%3D%28size%3D%3D1%29?LEO_HIGHLIGHTS_IFRAME_CLICK_SIZE%3ALEO_HIGHLIGHTS_IFRAME_HOVER_SIZE%3B%0A%20%20%09%09var%20divSize%3D%28size%3D%3D1%29?LEO_HIGHLIGHTS_DIV_CLICK_SIZE%3ALEO_HIGHLIGHTS_DIV_HOVER_SIZE%3B%0A%0A%20%20%09%09/*%20Refresh%20the%20iFrame%27s%20url%2C%20by%20removing%20the%20size%20arg%20and%20adding%20it%20again%20*/%0A%20%20%09%09var%20url%3DiFrame.src%3B%0A%20%20%09%09var%20idx%3Durl.indexOf%28%22%26size%3D%22%29%3B%0A%20%20%09%09if%28idx%3E%3D0%29%0A%20%20%09%09%09url%3Durl.substring%280%2Cidx%29%3B%0A%09%09url+%3D%28%22%26size%3D%22+size%29%3B%0A%09%09if%28clickId%29%0A%09%09%09url+%3D%28%22%26clickId%3D%22+clickId%29%3B%0A%09%09%0A%20%20%09%09iFrame.src%3Durl%3B%0A%20%20%09%09%0A%20%20%09%09/*%20Clear%20the%20hover%20flag%2C%20if%20the%20user%20shows%20this%20at%20full%20size%20*/%0A%20%20%09%09if%28size%3D%3D1%26%26_leoHighlightsPrevElem%29%0A%20%20%09%09%09_leoHighlightsPrevElem.hover%3Dfalse%3B%0A%20%20%09%09%0A%20%20%09%09_leoHighlightsSetSize%28iFrame%2CiFrameSize%29%3B%0A%20%20%09%09_leoHighlightsSetSize%28iFrameDiv%2CdivSize%29%3B%0A%09%7D%0A%09catch%28e%29%0A%09%7B%0A%09%09_leoHighlightsReportExeception%28%22leoHighlightsSetSize%28%29%22%2Ce%29%3B%20%20%20%09%0A%09%7D%0A%7D%0A%0A/**%0A%20*%20Start%20the%20popup%20a%20little%20bit%20delayed.%0A%20*%20Somehow%20IE%20needs%20some%20time%20to%20find%20the%20element%20by%20id.%0A%20*%20%0A%20*%20@param%20anchorId%0A%20*%20@param%20size%0A%20*%20%0A%20*%20@return%0A%20*/%0Afunction%20leoHighlightsShowPopup%28anchorId%2Csize%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%09%09var%20elem%3D_leoHighlightsFindElementById%28anchorId%29%3B%0A%20%20%09%09if%28_leoHighlightsPrevElem%26%26%28_leoHighlightsPrevElem%21%3Delem%29%29%0A%20%20%09%09%09_leoHighlightsPrevElem.shown%3Dfalse%3B%0A%20%20%09%09elem.shown%3Dtrue%3B%0A%09%09_leoHighlightsPrevElem%3Delem%3B%0A%20%20%20%09%0A%20%20%20%09/*%20FF%20needs%20to%20find%20the%20element%20first%20*/%0A%20%20%20%09_leoHighlightsFindElementById%28anchorId%29%3B%0A%20%20%20%09%0A%20%20%20%09setTimeout%28%22_leoHighlightsShowPopup%28%5C%27%22+anchorId+%22%5C%27%2C%5C%27%22+size+%22%5C%27%29%3B%22%2C10%29%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22leoHighlightsShowPopup%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%09%0A%7D%0A%0A/**%0A*%0A*%20This%20can%20be%20used%20to%20close%20an%20iframe%0A*%0A*%20@param%20id%0A*%20@return%0A*/%0Afunction%20leoHighlightsHideElem%28id%29%0A%7B%0A%09try%0A%09%7B%0A%09%09/*%20Get%20the%20appropriate%20sizes%20*/%0A%20%20%09%09var%20elem%3D_leoHighlightsFindElementById%28id%29%3B%0A%20%20%09%09if%28elem%29%0A%20%20%09%09%09elem.style.visibility%3D%22hidden%22%3B%0A%20%20%09%09%0A%20%20%09%09/*%20Clear%20the%20page%20for%20the%20next%20run%20through%20*/%0A%20%20%09%09var%20iFrame%3D_leoHighlightsFindElementById%28LEO_HIGHLIGHTS_IFRAME_ID%29%3B%0A%20%20%09%09if%28iFrame%29%0A%20%20%09%09%09iFrame.src%3D%22about%3Ablank%22%3B%0A%20%20%09%09%0A%20%20%09%09%0A%20%20%09%09if%28_leoHighlightsPrevElem%29%0A%20%20%09%09%7B%0A%20%20%09%09%09_leoHighlightsPrevElem.shown%3Dfalse%3B%0A%20%20%09%09%09_leoHighlightsPrevElem%3Dnull%3B%0A%20%20%09%09%7D%0A%09%7D%0A%09catch%28e%29%0A%09%7B%0A%09%09_leoHighlightsReportExeception%28%22leoHighlightsHideElem%28%29%22%2Ce%29%3B%20%20%20%09%0A%09%7D%0A%7D%0A%0A/**%0A*%0A*%20This%20can%20be%20used%20to%20close%20an%20iframe.%0A*%20Since%20the%20iFrame%20is%20reused%20the%20frame%20only%20gets%20hidden%0A*%0A*%20@return%0A*/%0Afunction%20leoHighlightsIFrameClose%28%29%0A%7B%0A%20%20try%0A%20%20%7B%0A%09%20%20_leoHighlightsSimpleGwCallBack%28%22LeoHighlightsHideIFrame%22%29%3B%0A%20%20%7D%0A%20%20catch%28e%29%0A%20%20%7B%0A%09%20%20_leoHighlightsReportExeception%28%22leoHighlightsIFrameClose%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%7D%0A%7D%0A%0A/**%0A%20*%20This%20should%20handle%20the%20click%20events%0A%20*%20%0A%20*%20@param%20anchorId%0A%20*%20@return%0A%20*/%0Afunction%20leoHighlightsHandleClick%28anchorId%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%09%09var%20anchor%3D_leoHighlightsFindElementById%28anchorId%29%3B%0A%20%20%09%09anchor.hover%3Dfalse%3B%0A%20%20%09%09if%28anchor.startTimer%29%0A%20%20%09%09%09clearTimeout%28anchor.startTimer%29%3B%0A%20%20%20%09%0A%20%20%09%09leoHighlightsEvent%28%22clicked%22%29%3B%0A%20%20%20%09leoHighlightsShowPopup%28anchorId%2C1%29%3B%0A%20%20%20%09return%20false%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22leoHighlightsHandleClick%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%09%0A%7D%0A%0A/**%0A%20*%20This%20should%20handle%20the%20hover%20events%0A%20*%20%0A%20*%20@param%20anchorId%0A%20*%20@return%0A%20*/%0Afunction%20leoHighlightsHandleHover%28anchorId%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%09%09var%20anchor%3D_leoHighlightsFindElementById%28anchorId%29%3B%0A%20%20%09%09anchor.hover%3Dtrue%3B%0A%20%20%09%09%0A%20%20%09%09leoHighlightsEvent%28%22hovered%22%29%3B%0A%20%20%20%09leoHighlightsShowPopup%28anchorId%2C0%29%3B%0A%20%20%20%09return%20false%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22leoHighlightsHandleHover%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%09%0A%7D%0A%0A/**%0A%20*%20This%20will%20handle%20the%20mouse%20over%20setup%20timers%20for%20the%20appropriate%20timers%0A%20*%20%0A%20*%20@param%20id%0A%20*%20@return%0A%20*/%0Afunction%20leoHighlightsHandleMouseOver%28id%29%0A%7B%0A%09try%0A%09%7B%0A%09%09var%20anchor%3D_leoHighlightsFindElementById%28id%29%3B%09%09%0A%0A%09%09/*%20Clear%20the%20end%20timer%20if%20required%20*/%0A%09%09if%28anchor.endTimer%29%0A%09%09%09clearTimeout%28anchor.endTimer%29%3B%0A%09%09anchor.endTimer%3Dnull%3B%0A%09%09%0A%09%09anchor.style.background%3DLEO_HIGHLIGHTS_BACKGROUND_STYLE_HOVER%3B%0A%09%09%0A%09%09/*%20The%20element%20is%20already%20showing%20we%20are%20done%20*/%0A%09%09if%28anchor.shown%29%0A%09%09%09return%3B%0A%09%09%0A%09%09/*%20Setup%20the%20start%20timer%20if%20required%20*/%0A%09%09anchor.startTimer%3DsetTimeout%28function%28%29%7B%0A%09%09%09leoHighlightsHandleHover%28anchor.id%29%3B%0A%09%09%09anchor.hover%3Dtrue%3B%0A%09%09%09%7D%2C%0A%09%09%09LEO_HIGHLIGHTS_SHOW_DELAY_MS%29%3B%0A%09%7D%0A%09catch%28e%29%0A%09%7B%0A%09%09_leoHighlightsReportExeception%28%22leoHighlightsHandleMouseOver%28%29%22%2Ce%29%3B%20%20%20%09%0A%09%7D%0A%7D%0A%0A/**%0A%20*%20This%20will%20handle%20the%20mouse%20over%20setup%20timers%20for%20the%20appropriate%20timers%0A%20*%20%0A%20*%20@param%20id%0A%20*%20@return%0A%20*/%0Afunction%20leoHighlightsHandleMouseOut%28id%29%0A%7B%0A%09try%0A%09%7B%09%0A%09%09var%20anchor%3D_leoHighlightsFindElementById%28id%29%3B%0A%09%09%0A%09%09/*%20Clear%20the%20start%20timer%20if%20required%20*/%0A%09%09if%28anchor.startTimer%29%0A%09%09%09clearTimeout%28anchor.startTimer%29%3B%0A%09%09anchor.startTimer%3Dnull%3B%0A%09%09%0A%09%09anchor.style.background%3DLEO_HIGHLIGHTS_BACKGROUND_STYLE_DEFAULT%3B%0A%09%09if%28%21anchor.shown||%21anchor.hover%29%0A%09%09%09return%3B%0A%09%09%0A%09%09/*%20Setup%20the%20start%20timer%20if%20required%20*/%0A%09%09anchor.endTimer%3DsetTimeout%28function%28%29%7B%0A%09%09%09leoHighlightsHideElem%28LEO_HIGHLIGHTS_IFRAME_DIV_ID%29%3B%0A%09%09%09anchor.shown%3Dfalse%3B%0A%09%09%09_leoHighlightsPrevElem%3Dnull%3B%0A%09%09%09%7D%2CLEO_HIGHLIGHTS_HIDE_DELAY_MS%29%3B%0A%09%7D%0A%09catch%28e%29%0A%09%7B%0A%09%09_leoHighlightsReportExeception%28%22leoHighlightsHandleMouseOut%28%29%22%2Ce%29%3B%20%20%20%09%0A%09%7D%0A%7D%0A%0A/**%0A%20*%20This%20handles%20the%20mouse%20movement%20into%20the%20currently%20opened%20window.%0A%20*%20Just%20clear%20the%20close%20timer%0A%20*%20%0A%20*%20@return%0A%20*/%0Afunction%20leoHighlightsHandleIFrameMouseOver%28%29%0A%7B%0A%09try%0A%09%7B%0A%09%09if%28_leoHighlightsPrevElem%26%26_leoHighlightsPrevElem.endTimer%29%0A%09%09%09clearTimeout%28_leoHighlightsPrevElem.endTimer%29%3B%0A%09%7D%0A%09catch%28e%29%0A%09%7B%0A%09%09_leoHighlightsReportExeception%28%22leoHighlightsHandleIFrameMouseOver%28%29%22%2Ce%29%3B%20%20%20%09%0A%09%7D%0A%7D%0A%0A/**%0A%20*%20This%20handles%20the%20mouse%20movement%20into%20the%20currently%20opened%20window.%0A%20*%20Just%20clear%20the%20close%20timer%0A%20*%20%0A%20*%20@param%20id%0A%20*%20@return%0A%20*/%0Afunction%20leoHighlightsHandleIFrameMouseOut%28%29%0A%7B%0A%09try%0A%09%7B%0A%09%09if%28_leoHighlightsPrevElem%29%0A%09%09%09leoHighlightsHandleMouseOut%28_leoHighlightsPrevElem.id%29%3B%0A%09%7D%0A%09catch%28e%29%0A%09%7B%0A%09%09_leoHighlightsReportExeception%28%22leoHighlightsHandleIFrameMouseOut%28%29%22%2Ce%29%3B%20%20%20%09%0A%09%7D%0A%7D%0A/**%0A%20*%20This%20is%20a%20method%20is%20used%20to%20make%20the%20javascript%20within%20IE%20runnable%0A%20*/%0Avar%20leoHighlightsRanUpdateDivs%3Dfalse%3B%0Afunction%20leoHighlightsUpdateDivs%28%29%0A%7B%0A%09try%0A%09%7B%0A%09%09/*%20Check%20if%20this%20is%20an%20IE%20browser%20and%20if%20divs%20have%20been%20updated%20already%20*/%0A%09%09if%28document.all%26%26%21leoHighlightsRanUpdateDivs%29%0A%09%09%7B%0A%09%09%09leoHighlightsRanUpdateDivs%3Dtrue%3B%20//%20Set%20early%20to%20prevent%20running%20twice%0A%09%09%09for%28var%20i%3D0%3Bi%3CLEO_HIGHLIGHTS_MAX_HIGHLIGHTS%3Bi++%29%0A%09%09%09%7B%0A%09%09%09%09var%20id%3D%22leoHighlights_Underline_%22+i%3B%0A%09%09%09%09var%20elem%3D_leoHighlightsFindElementById%28id%29%3B%0A%09%09%09%09if%28elem%3D%3Dnull%29%0A%09%09%09%09%09break%3B%0A%09%09%09%09%0A%09%09%09%09if%28%21elem.leoChanged%29%0A%09%09%09%09%7B%0A%09%09%09%09%09elem.leoChanged%3Dtrue%3B%0A%09%09%09%09%0A%09%09%09%09%09/*%20This%20will%20make%20javaScript%20runnable%20*/%09%09%09%09%0A%09%09%09%09%09elem.outerHTML%3Delem.outerHTML%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%09catch%28e%29%0A%09%7B%0A%09%09_leoHighlightsReportExeception%28%22leoHighlightsUpdateDivs%28%29%22%2Ce%29%3B%20%20%20%09%0A%09%7D%0A%7D%0A%0Aif%28document.all%29%0A%09setTimeout%28leoHighlightsUpdateDivs%2C200%29%3B%0A%0A/**%0A%20*%20This%20is%20used%20to%20report%20events%20to%20the%20plugin%0A%20*%20@param%20key%0A%20*%20@param%20sub%0A%20*%20@return%0A%20*/%0Afunction%20leoHighlightsEvent%28key%2C%20sub%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%20%20%20var%20gwObj%20%3D%20new%20Gateway%28%29%3B%0A%20%20%20%20%20%20gwObj.addParam%28%22key%22%2C%20key%29%3B%0A%20%20%20%20%20%20gwObj.addParam%28%22sub%22%2C%20sub%29%3B%0A%20%20%20%20%20%20gwObj.callName%28%22LeoHighlightsEvent%22%29%3B%09%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22leoHighlights%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%0A%7D%0A%0A/*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*/%0A/*%20Methods%20provided%20to%20the%20highlight%20providers&#8230;%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20*/%0A/*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*/%0A%0A/**%0A%20*%20This%20will%20redirect%20the%20top%20window%20to%20the%20passed%20in%20url%0A%20*%20%0A%20*%20@param%20url%0A%20*%20@param%20parentId%0A%20*%20@return%0A%20*/%0Afunction%20leoHL_RedirectTop%28url%2CparentId%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%09%09leoHighlightsEvent%28%22clicked.2eBay%22%29%3B%0A%20%20%20%09_leoHighlightsRedirectTop%28url%29%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22leoHL_RedirectTop%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%0A%7D%0A%0A/**%0A%20*%20This%20will%20set%20the%20size%20of%20the%20iframe%0A%20*%20%0A%20*%20@param%20url%0A%20*%20@param%20parentId%0A%20*%20%0A%20*%20@return%0A%20*/%0Afunction%20leoHl_setSize%28size%2Curl%29%0A%7B%0A%20%20%20try%0A%20%20%20%7B%0A%20%20%20%09/*%20Get%20the%20clickId%20*/%0A%20%20%20%09var%20clickId%3D_leoHighlightsGetUrlArg%28%20url%2C%22clickId%22%29%0A%20%20%20%09%0A%20%20%20%20%20%20var%20gwObj%20%3D%20new%20Gateway%28%29%3B%0A%20%20%20%20%20%20gwObj.addParam%28%22size%22%2Csize%29%3B%0A%20%20%20%20%20%20if%28clickId%29%0A%20%20%20%20%20%20%20%20%20gwObj.addParam%28%22clickId%22%2CclickId+%22_blah%22%29%3B%0A%20%20%20%20%20%20gwObj.callName%28%22LeoHighlightsSetSize%22%29%3B%0A%20%20%20%7D%0A%20%20%20catch%28e%29%0A%20%20%20%7B%0A%20%20%20%09_leoHighlightsReportExeception%28%22leoHl_setSize%28%29%22%2Ce%29%3B%20%20%20%09%0A%20%20%20%7D%0A%7D%0A&#8221;);
</script></span></p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/howto/teach-yourself-how-to-code/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Taking the black art out of SQL tuning</title>
		<link>http://techblog.hdexpertise.com/en/news/taking-the-black-art-out-of-sql-tuning/</link>
		<comments>http://techblog.hdexpertise.com/en/news/taking-the-black-art-out-of-sql-tuning/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 09:30:08 +0000</pubDate>
		<dc:creator>Anh Huynh</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[develpers]]></category>

		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=582</guid>
		<description><![CDATA[As any database admin knows, mastering the subtler nuances of SQL can be likened to the black arts. For me, tuning the efficiency of SQL queries on large, heavily used databases is a perfect example.
Sure, I know how to use the query analysis tools built into SQL Server and Oracle &#8212; but even with them, [...]]]></description>
			<content:encoded><![CDATA[<p>As any database admin knows, mastering the subtler nuances of SQL can be likened to the black arts. For me, tuning the efficiency of SQL queries on large, heavily used databases is a perfect example.</p>
<p>Sure, I know how to use the query analysis tools built into SQL Server and Oracle &#8212; but even with them, optimizing SQL still requires me to monitor queries during heavy load to find out whether I&#8217;ve truly fixed the code, without introducing new problems in the process.</p>
<p><strong>[ Keep up with app dev issues and trends with InfoWorld's <a href="http://www.infoworld.com/blogs/neil-mcallister?source=fssr">Fatal Exception</a> and <a href="http://www.infoworld.com/blogs/martin-heller?source=fssr">Strategic Developer</a> ]</strong></p>
<p>Last week Kyle Hailey of Embarcadero gave me a live demo of <a href="http://www.embarcadero.com/products/db-optimizer">DB Optimizer 2</a> and made it very clear how I or any database programmer could use the DB Optimizer to methodically analyze, improve, and load test SQL queries. Two of the tools introduced in this package are Visual SQL Tuning Diagrams and Index Analysis. The package also includes sophisticated profiling and parallel load stress testing. The figure below shows profiling (click on it to see a full-size screen):</p>
<p><a target="_blank" href="http://www.infoworld.com/sites/infoworld.com/files/media/image/db opt 2 profiling.PNG"><img height="307" width="500" alt="" src="http://www.infoworld.com/sites/infoworld.com/files/media/image/db opt 2 profiling sm.png"/></a></p>
<p>The next figure shows Visual SQL Tuning index analysis:</p>
<p><a target="_blank" href="http://www.infoworld.com/sites/infoworld.com/files/media/image/db opt 2 tuner_vst_index_analysis.PNG"><img height="336" width="500" alt="" src="http://www.infoworld.com/sites/infoworld.com/files/media/image/db opt 2 tuner_vst_index_analysis sm.png"/></a></p>
<p>The query optimization that Kyle used as a demonstration was from a major package that shall remain nameless to protect the guilty.</p>
<p>I have to say, I was very impressed. I&#8217;m not sure exactly how big a shop you have to be to rationalize a $1,500 tool like this, but the ROI for optimizing a query versus throwing bigger hardware at it is usually easy to justify.</p>
<p>Interested admins can view a <a href="http://altd.embarcadero.com/download/video/DBO/dbo-20-sql-task-analyzer.mp4">video demonstration of DB Optimizer 2</a> on Embarcadero&#8217;s Web site.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/news/taking-the-black-art-out-of-sql-tuning/feed/</wfw:commentRss>
<enclosure url="http://altd.embarcadero.com/download/video/DBO/dbo-20-sql-task-analyzer.mp4" length="5573471" type="video/mp4" />
		</item>
		<item>
		<title>How to Recover Your Firefox Master Password</title>
		<link>http://techblog.hdexpertise.com/en/howto/how-to-recover-your-firefox-master-password/</link>
		<comments>http://techblog.hdexpertise.com/en/howto/how-to-recover-your-firefox-master-password/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 08:54:01 +0000</pubDate>
		<dc:creator>hunghuynh</dc:creator>
		
		<category><![CDATA[Collection]]></category>

		<category><![CDATA[How To]]></category>

		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://techblog.hdexpertise.com/en/?p=575</guid>
		<description><![CDATA[
If you&#8217;re using Firefox&#8217;s built-in password management, you should also be using its master password feature to protect your saved passwords from prying eyes. But what happens if you lose your master password?
Since the master password prevents anyone from accessing your saved passwords, you&#8217;re out of luck if you lose your master password—that is, you [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://cache.gawker.com/assets/images/17/2009/09/500x_firemaster.png" alt="" /></p>
<p>If you&#8217;re using Firefox&#8217;s built-in password management, you should also <a href="http://lifehacker.com/154099/geek-to-live--secure-your-saved-passwords-in-firefox">be using its master password feature to protect your saved passwords</a> from prying eyes. But what happens if you lose your master password?</p>
<p>Since the master password prevents anyone from accessing your saved passwords, you&#8217;re out of luck if you lose your master password—that is, you can&#8217;t access any of your saved credentials without it.<span id="more-575"></span>That&#8217;s where the free, open source tool FireMaster comes in. FireMaster is a command line tool designed specifically to recover your master password from Firefox. Here&#8217;s how to use it:</p>
<ol>
<li><a href="http://securityxploded.com/firemaster.php">Download FireMaster</a> and extract it to a folder on your desktop.</li>
<li>Open a command prompt. (Shortcut: Hit Win+R, type <code>cmd</code>, then hit Enter.</li>
</ol>
<p><img class="aligncenter" src="http://cache.gawker.com/assets/images/17/2009/09/500x_Win7-1.png" alt="" /></p>
<ol>
<li>At the command prompt, change the FireMaster folder to your active directory. The quickest way to do this is to type <code>cd</code> , then drag and drop the FireMaster folder from your Desktop onto the command prompt—which will automatically fill in the path to that folder. Then just hit Enter.</li>
<li>Construct your FireMaster crack command. FireMaster supports a lot of different options, but you can speed up the process if you can narrow down a few points to customize your password cracking. For example, if you know you&#8217;ve only used alphabet characters (a through z), adding the following to your command can speed up a brute force attack significantly: <code>-c "abcdefghijklmnopqrstuvwxyz"</code> For the purpose of testing and providing an example, I wanted to see how long it would take for FireMaster to crack a password containing only letters (a through z) that I knew was exactly six characters long. The resulting command looks like this:
<div class="code">FireMaster.exe -b -q -l 6 -c &#8220;abcdefghijklmnopqrstuvwxyz&#8221; -p &#8220;??????&#8221; %appdata%\Mozilla\Firefox\Profiles\1sq2zzh2.default</div>
<p>As you can see, I&#8217;m telling FireMaster to try a brute force crack on a 6-character master password using only the letters a through z. (You should read through the usage information to get a better idea of what options you&#8217;ve got for customizing the process to what you know about your password to speed things up.)</p>
<p>In the last part of the command, I&#8217;m pointing FireMaster to my Firefox profile folder, where the key3.db file exists (this is the file that contains the encrypted password information). The last folder in that path will differ for you, but everything up to that folder (i.e., <code>%appdata%\Mozilla\Firefox\Profiles\</code> will get you most of the way there. (If you only have one Firefox profile, you should just see one folder inside Profiles; use that folder.)</li>
<li>After you&#8217;ve constructed your command, just hit Enter to get cracking. Using the command constructed above, FireMaster took roughly 23 minutes to crack my Firefox password. If I didn&#8217;t know how long the password was, it would take significantly longer (you can offer a minimum and maximum password size to help narrow things down a little further). That said, it clearly wasn&#8217;t all that difficult to crack my password given all I knew about it. It gets much harder the more secure your password is (think unusual characters and long passwords).</li>
</ol>
<p>Every time we post something about, say, <a href="http://lifehacker.com/232963/screenshot-tour-how-to-crack-a-windows-password-with-ophcrack-live-cd">how to crack a Windows password</a>, we have to address the privacy issue. Password cracking tools like FireMaster can, like most things, be used for both good and evil. If you&#8217;ve forgotten your master password and you&#8217;re desperate to get the keys back to Firefox, it can be extremely useful. If you just like testing how secure your current password is, it&#8217;s a handy tool. (I always love testing my passwords against these sorts of things.) It would also, obviously, do the trick if you&#8217;re trying to steal someone else&#8217;s information. Don&#8217;t use it for that, jerk.</p>
<p>If you&#8217;re really serious about your passwords, we&#8217;d recommend <a href="http://lifehacker.com/184774/geek-to-live--securely-track-your-passwords">securely managing them with KeePass</a>.</p>
<p>FireMaster is a free, open-source download. It works on Windows, but it can crack the master password from any Firefox installation—you just need to copy the key3.db file to a folder on a Windows computer and point FireMaster at that folder. If you give it a try, let&#8217;s hear how crackable your master password is in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.hdexpertise.com/en/howto/how-to-recover-your-firefox-master-password/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
