<?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>AskApache &#187; Search Results  &#187;  performance</title>
	<atom:link href="http://www.askapache.com/search/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.askapache.com</link>
	<description>Advanced Web Development</description>
	<lastBuildDate>Thu, 26 Apr 2012 11:29:28 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>3 Ways to Serve PDF Files using Htaccess Cookies, Headers, Rewrites</title>
		<link>http://www.askapache.com/htaccess/pdf-cookies-headers-rewrites.html</link>
		<comments>http://www.askapache.com/htaccess/pdf-cookies-headers-rewrites.html#comments</comments>
		<pubDate>Sun, 21 Aug 2011 03:07:53 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Htaccess]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=2328</guid>
		<description><![CDATA[<p><a class="IFL" href="http://www.askapache.com/htaccess/pdf-cookies-headers-rewrites.html"><img height="60" width="45" src='http://uploads.askapache.com/2007/11/60x45_acrobat_trefoil.gif' alt='Adobe PDF' /></a>FYI, using the <a href="http://www.askapache.com/htaccess/mod_rewrite-variables-cheatsheet.html">Mod_Rewrite Variables Cheatsheet</a> makes this example, and all advanced .htaccess code easier to understand.  This demo lets you set a cookie with 1 of 3 values, then you just request the pdf file with a normal link click and get 1 of 3 different responses. This is accomplished with a nice bit of <a href="http://www.askapache.com/htaccess/htaccess.html">.htaccess</a> code.<br class="C" /></p>
<div class="cnote">
<p><strong>Set PDF Viewing Mode</strong> - <kbd id="pdfr">Make a selection, then click the view pdf button.</kbd></p>
<p><span id="pdfi" class="FL btnn">Inline</span> <span id="pdfa" class="FL btnn">Download</span> <span id="pdfs" class="FL btnn">Save As</span> <a class="FL btnn" style="margin-left:10px; border-top:1px solid #96F8AF; background:-moz-linear-gradient(center top , #3E9D43, #6ED766) repeat scroll 0 0 transparent;margin-left:20px;" rel="nofollow" href="http://www.askapache.com/storage/pdf/AskApache-Test.pdf">View PDF using selected mode &#187;</a><br class="C" /></p>
</div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/htaccess/pdf-cookies-headers-rewrites.html"></a><a href="http://www.askapache.com/htaccess/pdf-cookies-headers-rewrites.html"><cite>AskApache.com</cite></a></p><p><a class="IFL" id="id10" href="http://www.askapache.com/htaccess/pdf-cookies-headers-rewrites.html"></a>FYI, using the <a href="http://www.askapache.com/htaccess/mod_rewrite-variables-cheatsheet.html">Mod_Rewrite Variables Cheatsheet</a> makes this example, and all advanced .htaccess code easier to understand.  This demo lets you set a cookie with 1 of 3 values, then you just request the pdf file with a normal link click and get 1 of 3 different responses. This is accomplished with a nice bit of <a href="http://www.askapache.com/htaccess/htaccess.html">.htaccess</a> code.<br /><br />As I explain the htaccess code that achieves this, keep in mind this is merely one simple application for this code.  It's much more advanced than your basic htaccess trick, notice how this htaccess acts like a php script, very unusual..  I really wanted to share this trick after I created it for one of my clients because this is the tip of the iceberg.  Another use would be to display an alternate style sheet depending on a users theme preference.  The coolest thing is that it uses multiple advanced .htaccess ideas.  This code uses mod_headers to set the Content-Disposition header for forcing a download and uses mod_rewrite to: Send different Content-Type headers, Check the value of a cookie, Set environment variables for use later by mod_headers header directive<br class="C" /></p>

<div class="cnote">
<p><strong>Set PDF Viewing Mode</strong> - <kbd id="pdfr">Make a selection, then click the view pdf button.</kbd></p>
<p><span id="pdfi" class="FL btnn">Inline</span> <span id="pdfa" class="FL btnn">Download</span> <span id="pdfs" class="FL btnn">Save As</span> <a class="FL btnn" style="margin-left:10px; border-top:1px solid #96F8AF; background:-moz-linear-gradient(center top , #3E9D43, #6ED766) repeat scroll 0 0 transparent;margin-left:20px;" rel="nofollow" href="http://www.askapache.com/storage/pdf/AskApache-Test.pdf">View PDF using selected mode &raquo;</a><br class="C" /></p>
</div>


<h2>What's Going On</h2>
<p>There are 3 different ways for a server to send a pdf file in response to a request for one.  This causes 3 different ways to open/view the pdf file in the clients browser.</p>
<ol>
<li>The browser display's a <strong>"Save File As"</strong> dialog, allowing you to save the file or open.</li>
<li>The browser opens the pdf file <strong>"Inline"</strong>, opening the pdf file in the browser like a web page.</li>
<li>The browser "<strong>Downloads</strong>" the pdf file automatically as an "<strong>Attachment</strong>" and then causes an external pdf reader program like adobe reader to open the file.</li>
</ol>
<p>Some people prefer to have the option of saving the file to view later, some prefer opening it with an external program, and some just like the pdf file to load right in the browser...  The point is that by using .htaccess, we can let them choose any of the 3 methods and save their preference for all further pdf files requested from our site by that user.</p>





<h2>How It Works</h2>
<p>When you click on one of the 3 demo buttons above, "Inline", "Save As", or "Download", a cookie named <code>askapache_pdf</code> is saved in your browser using the javascript below, with the value being set to which button you clicked.  Then when you request the pdf file the .htaccess code below uses mod_rewrite to read the value of the askapache_pdf cookie, and depending on which was your preference it will send alternate HTTP Headers that control how your browser handles the file.</p>


<h3>Unique HTTP Headers Returned</h3>
<p>When it comes down to it, the following information is the 3 modes.  Notice each one is different, because these headers are the only thing controlling how your browser handles the file.</p>
<h4>Save As Mode (askapache_pdf=s)</h4>
<pre>Content-Disposition: attachment
Content-Type: application/pdf</pre>
<h4>Inline Mode (askapache_pdf=i)</h4>
<pre>Content-Type: application/pdf</pre>
<h4>Download Mode (askapache_pdf=a)</h4>
<pre>Content-Type: application/octet-stream</pre>


<h3>Htaccess Demo File</h3>
<p>For the demo I created the folder /storage/pdf/ and this is the .htaccess file at /storage/pdf/.htaccess</p>
<p>The default Content-Type for .pdf files.  This will make .pdf files default Content-Type header have  the value 'application/pdf' - but the default can be overridden by using RewriteRule with the <code>[T=&#039;different/type&#039;]</code></p>
<pre>AddType application/pdf .pdf</pre>

<p>Turn on the rewrite engine if its already on you dont need this </p>
<pre>RewriteEngine On</pre>

<p>Skip RewriteRules if not .pdf request, like autoindexing. The next [2] RewriteRule directives are specific for .pdf files so if the filename requested does not end in .pdf then the <code>[S=2]</code> instructs the next 2 RewriteRule  directives to be completely skipped.</p>
<pre>RewriteRule !.*\.pdf$ - [S=2]</pre>


<p>The first RewriteCond checks to see if the askapache_pdf cookie is NOT set.  The second RewriteCond checks to see if the askapche_pdf cookie has the value of s, which is the value corresponding to someone clicking the "Save As" button.</p>
<p>The <code>[NC,OR]</code> flag means that if the cookie askapache_pdf does not exist, OR (next cond) if the askapache_pdf cookie does exist and is set to 's' then process the RewriteRule.  If neither cond is true the rewriterule is skipped.</p>
<p>If one of the RewriteCond is true, then the RewriteRule is processed.   The RewriteRule applies to any/all requests (.*) but doesn't rewrite anything (-) This RewriteRule sets an Apache environment variable ASKAPACHE_PDFS to have the value of 1 if either rewritecond is true.  The variable can be checked by any directives following the rewriterule in the whole htaccess file.  The ASKAPACHE_PDFS ends in S because if this variable exists then it means the users preference is 'Save As'</p>
<p>Notice that if the user requested the pdf file without selecting a preference i.e. no cookie exists, then the ASKAPACHE_PDFS variable is still set. This just lets us pick the default preference for them, in this example the default is 'Save As'</p>
<pre>RewriteCond %{HTTP_COOKIE} !^.*askapache_pdf.*$ [NC,OR]
RewriteCond %{HTTP_COOKIE} ^.*askapache_pdf=s.*$ [NC]
RewriteRule .* - [E=ASKAPACHE_PDFS:1]</pre>

<p>The RewriteCond checks the askapache_pdf cookie for the value 'a' which 'a' represents 'Download'</p>
<p>If the cookies value is 'a' then the RewriteRule overrides the default Content-Type from 'application/pdf' set with AddType earlier, to 'application/octet-stream', which is a special content-type that tells the browser that the file cannot be loaded by the browser 'Inline', but must be saved which will be opened by an external viewer depending on browser configuration and plugins.</p>
<pre>RewriteCond %{HTTP_COOKIE} ^.*askapache_pdf=a.*$
RewriteRule .* - [T=application/octet-stream]</pre>

<p>This is superfly.  If the cookie/users-preference was 'Save As' (s) then the RewriteRule above the last one set the environment variable ASKAPACHE_PDFS to have the value 1.  The Header directive here is ONLY processed in that variable ASKAPACHE_PDFS exists.  That is what the end 'env=ASKAPACHE_PDFS' does, it is the condition that must be met or the Header directive is skipped.  If the ASKAPACHE_PDFS environment variable set by RewriteRule does exist then the header directive adds the header '<code>Content-Disposition: attachment</code>' to  the normal Response Headers.  The 'Content-Disposition: attachment' header instructs your browser to present you with the 'Save As' dialog box allowing you to choose whether you want to save or open.</p>
<pre>Header set Content-Disposition "attachment" env=ASKAPACHE_PDFS</pre>






<h2>Javascript used by Demo</h2>
<p>The best place for javascript is quirksmode, here is a definitive article on setting, reading, parsing, etc.. <a title="I am a javascript cookie monster" href="http://www.quirksmode.org/js/cookies.html">COOKIES</a>.</p>
<p>Note, I now prefer using jQuery over my AAJS javascript library.  Also, the whole using cookies aspect is just to highlight some advanced htaccess, you can accomplish this much easier without javascript or cookies.</p>
<pre>if(!gi(&#039;pdfr&#039;))return;
var pdfr=gi(&#039;pdfr&#039;);
var cval=getCookie(&#039;askapache_pdf&#039;);
&nbsp;
if(cval==&#039;i&#039;){pdfr.innerHTML=&#039;Currently set to "Inline".&#039;;}
else if(cval==&#039;a&#039;){pdfr.innerHTML=&#039;Currently set to "Download" mode.&#039;;}
else if(cval==&#039;s&#039;){pdfr.innerHTML=&#039;Currently set to "Save As" mode.&#039;;}
&nbsp;
addMyEvent(gi(&#039;pdfi&#039;),"mousedown",function(){
  setCookie("askapache_pdf", "i", "", "/", "www.askapache.com"); gi(&#039;pdfr&#039;).innerHTML = &#039;Changed mode to "Inline".&#039;; return false; });
addMyEvent(gi(&#039;pdfa&#039;),"mousedown",function(){
  setCookie("askapache_pdf", "a", "", "/", "www.askapache.com"); gi(&#039;pdfr&#039;).innerHTML = &#039;Changed mode to "Download".&#039;; return false; });
addMyEvent(gi(&#039;pdfs&#039;),"mousedown",function(){
  setCookie("askapache_pdf", "s", "", "/", "www.askapache.com"); gi(&#039;pdfr&#039;).innerHTML = &#039;Changed mode to "Save As".&#039;; return false; });</pre>

<h2>Alternative Method - No Cookies + PHP</h2>
<p>This is what I came up with first for my client, and then while programming the php I noticed.. Hey!  I think I can do the same thing using .htaccess, which would save me on cpu/memory/potential security/etc.. but this works great too.  Though you will need to hack the code to get it working probably..</p>
<p>Note that the .htaccess rewrite code I used here used FILENAME-i.pdf or FILENAME-s.pdf to pass the preference to the pdf-dl.php script, it also worked for FILENAME.pdf?i=i</p>

<h3>pdf-dl.php</h3>
<pre>&lt;?php
if (
  !isset($_GET[&#039;file&#039;])
  || ($f=$_GET[&#039;file&#039;])===false
  || ($fp=@fopen($f,"rb"))===false
  || ($fi=pathinfo($f))===false
  || ($fi[&#039;fsize&#039;]=filesize($f))===false
  || strtolower($fi["extension"])!=&#039;pdf&#039;
) die(&#039;Failed&#039;);
&nbsp;
ob_start();
header(&#039;Accept-Ranges: bytes&#039;);
header("Content-Length: {$fi[&#039;fsize&#039;]}");
header(&#039;Content-Type: application/pdf&#039;);
if(!isset($_GET[&#039;i&#039;])) header("Content-Disposition: attachment; filename=\"{$fi[&#039;basename&#039;]}\"");
&nbsp;
$sent = 0;
while ( !feof($fp) &amp;&amp; $sent &lt; $fi[&#039;fsize&#039;] &amp;&amp; ($buf = fread($fp, 8192)) != &#039;&#039; ){
  echo $buf;
  $sent += strlen($buf);
  flush();  ob_flush();
}
fclose($fp);
exit;
?&gt;</pre>


<h3>Alternate Method .htaccess</h3>
<p>Deny direct request to pdf-dl.php file</p>
<pre>RewriteCond %{THE_REQUEST} ^.*pdf-dl\.php.*$ [NC]
RewriteRule .* - [F]</pre>
<p>Handle PDF files named anything-i.pdf as inline</p>
<pre>RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]*)-i\.pdf$  /cgi-bin/pdf-dl.php?i=i&amp;file=%{DOCUMENT_ROOT}/storage/pdf/$1.pdf [L,NC,QSA,S=1]</pre>
<p>Handle PDF files without -i.pdf as attachments</p>
<pre>RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]*)\.pdf$  /cgi-bin/pdf-dl.php?file=%{DOCUMENT_ROOT}/storage/pdf/$1.pdf [L,NC,QSA]</pre>




<h2>More Info</h2>
<p>The following is more information about the Content-Dispositon header and related subjects for fast readers.</p>

<h3>Interesting Reading</h3>
<p>Here is the thread of the original draft proposal for the Content-Disposition header.</p>
<ul>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03620.html">Content-Disposition Header</a>, <em>Rens Troost - 22 Jun 1993</em>
<ul>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03629.html">Re: Content-Disposition Header</a>, <em>Nathaniel Borenstein</em>
<ul>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03630.html">Re: Content-Disposition Header</a>, <em>Gabe Beged-Dov</em>
<ul>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03631.html">Re: Content-Disposition Header</a>, <em>Rens Troost</em></li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03635.html">Re: Content-Disposition Header</a>, <em>Gabe Beged-Dov</em></li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03641.html">Content-Disposition Header and multipart/alternative</a>, <em>Rens Troost</em></li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03645.html">Re: Content-Disposition Header and multipart/alternative</a>, <em>Nathaniel Borenstein</em></li>
</ul>
</li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03632.html">Re: Content-Disposition Header</a>, <em>Keith Moore</em>
<ul>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03633.html">Re: Content-Disposition Header</a>, <em>Nathaniel Borenstein</em></li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03634.html">Re: Content-Disposition Header</a>, <em>Ed Levinson (Contractor)</em></li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03636.html">Re: Content-Disposition Header</a>, <em>Keith Moore</em></li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03640.html">Re: Content-Disposition Header</a>, <em>Rens Troost</em></li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03650.html">Re: Content-Disposition Header</a>, <em>Harald Tveit Alvestrand</em></li>
</ul>
</li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03621.html">Re: Content-Disposition Header</a>, <em>Steve Dorner</em>
<ul>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03622.html">Re: Content-Disposition Header</a>, <em>Rens Troost</em>
<ul>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03624.html">Re: Content-Disposition Header</a>, <em>Keith Moore</em></li>
</ul>
</li>
</ul>
</li>
<li><a href="http://www.imc.org/ietf-822/old-archive1/msg03652.html">Re: Content-Disposition Header</a>, <em>Carlyn M. Lowery</em></li>
</ul>
</li>
</ul>
</li>
</ul>



<h3>Intense Reading</h3>
<ul>
<li><a href="http://www2.roguewave.com/support/docs/leif/sourcepro/html/protocolsug/10-1.html">Using the MIME Headers Effectively</a></li>
<li><a href="http://www.iana.org/assignments/mail-cont-disp">Mail Content Disposition Values and Parameters</a></li>
<li><cite><a href="http://rfc.askapache.com/rfc1766/rfc1766.txt">Tags for the Identification of Languages</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1436/rfc1436.txt">The Internet Gopher Protocol (a distributed document search and retrieval protocol)</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1630/rfc1630.txt">Universal Resource Identifiers in WWW</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1738/rfc1738.txt">Uniform Resource Locators (URL)</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1866/rfc1866.txt">Hypertext Markup Language - 2.0</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1945/rfc1945.txt">Hypertext Transfer Protocol -- HTTP/1.0</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2045/rfc2045.txt">Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1123/rfc1123.txt">Requirements for Internet Hosts -- Communication Layers</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc822/rfc822.txt">Standard for The Format of ARPA Internet Text Messages</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1808/rfc1808.txt">Relative Uniform Resource Locators</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1036/rfc1036.txt">Standard for Interchange of USENET Messages</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc977/rfc977.txt">Network News Transfer Protocol</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2047/rfc2047.txt">MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1867/rfc1867.txt">Form-based File Upload in HTML</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc821/rfc821.txt">Simple Mail Transfer Protocol</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1590/rfc1590.txt">Media Type Registration Procedure</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc959/rfc959.txt">File Transfer Protocol</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1700/rfc1700.txt">Assigned Numbers</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1737/rfc1737.txt">Functional Requirements for Uniform Resource Names</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1864/rfc1864.txt">The Content-MD5 Header Field</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1900/rfc1900.txt">Renumbering Needs Work</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1952/rfc1952.txt">GZIP file format specification version 4.3</a></cite></li>
<li><cite>Improving HTTP Latency</cite></li>
<li><cite><a href="http://www.isi.edu/touch/pubs/http-perf96/">Analysis of HTTP Performance</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1305/rfc1305.txt">Network Time Protocol (Version 3) Specification, Implementation and Analysis</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1951/rfc1951.txt">DEFLATE Compressed Data Format Specification version 1.3</a></cite></li>
<li><cite><a href="http://sunsite.unc.edu/mdma-release/http-prob.html">Analysis of HTTP Performance Problems,</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1950/rfc1950.txt">ZLIB Compressed Data Format Specification version 3.3</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2069/rfc2069.txt">An Extension to HTTP: Digest Access Authentication</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2068/rfc2068.txt">Hypertext Transfer Protocol -- HTTP/1.1</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2119/rfc2119.txt">Key words for use in RFCs to Indicate Requirement Levels</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc1806/rfc1806.txt">Communicating Presentation Information in Internet Messages: The Content-Disposition Header</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2145/rfc2145.txt">Use and Interpretation of HTTP Version Numbers</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2076/rfc2076.txt">Common Internet Message Headers</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2279/rfc2279.txt">UTF-8, a transformation format of Unicode and ISO-10646</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2046/rfc2046.txt">Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2277/rfc2277.txt">IETF Policy on Character Sets and Languages</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2396/rfc2396.txt">Uniform Resource Identifiers (URI): Generic Syntax and Semantics</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2617/rfc2617.txt">HTTP Authentication: Basic and Digest Access Authentication</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2110/rfc2110.txt">MIME E-mail Encapsulation of Aggregate Documents, such as HTML (MHTML)</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2026/rfc2026.txt">The Internet Standards Process -- Revision 3</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2324/rfc2324.txt">Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2049/rfc2049.txt">Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples</a></cite></li>
<li><cite><a href="http://rfc.askapache.com/rfc2183/rfc2183.txt">Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field</a></cite></li>
</ul><p><a href="http://www.askapache.com/htaccess/pdf-cookies-headers-rewrites.html"></a><a href="http://www.askapache.com/htaccess/pdf-cookies-headers-rewrites.html">3 Ways to Serve PDF Files using Htaccess Cookies, Headers, Rewrites</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/htaccess/pdf-cookies-headers-rewrites.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Advanced Linux Debugging using a Bootloader (GRUB)</title>
		<link>http://www.askapache.com/linux/advanced-linux-grub.html</link>
		<comments>http://www.askapache.com/linux/advanced-linux-grub.html#comments</comments>
		<pubDate>Thu, 07 Apr 2011 16:35:41 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=4846</guid>
		<description><![CDATA[<p>As an example, here is the boot line that I am using at the moment on an older Dell Desktop, just to illustrate module parameters and environment vars.  </p>
<pre>title  Arch Linux X-256
kernel /vmlinuz26 root=/dev/disk/by-label/ROOT ro rootwait pause_on_oops=5 panic=60 i915.modeset=1 no_console_suspend ipv6.disable=1 TERM=xterm-256color quiet 5
initrd /kernel26.img</pre>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/linux/advanced-linux-grub.html"></a><a href="http://www.askapache.com/linux/advanced-linux-grub.html"><cite>AskApache.com</cite></a></p><p>This is part of the <a href="https://wiki.archlinux.org/index.php/GRUB">GRUB article on the Arch Linux wiki that I contributed</a>.   As of now, just a copy.</p>

<p>The grub <code>menu.lst</code> provides for a convenient way to add a number of entries with <a href="http://www.kernel.org/doc/Documentation/kernel-parameters.txt" class="external text" rel="nofollow">extended kernel parameters</a> to configure all sorts of advanced settings to enable you to quickly and conveniently boot into your existing system with varying levels of debugging output.  It's very easy and useful to create several levels of debugging just by adding additional entries to your grub configuration. And if you ever have issues or problems down the road due to a power-failure or hardware failure, it can save you hours of trouble, and of course nothing can beat debugging output when it comes to learning about your system.</p>

<h2><span class="mw-headline" id="Useful_Menu.lst_Entries">Useful Menu.lst Entries</span></h2>
<p>If you are interested in debugging, then you deserve some grub entries for powerusers, here are a few that I like (just add to your <code>menu.lst</code>).</p>

<pre>title Shutdown the Computer
halt
&nbsp;
title Reboot the Computer
reboot
&nbsp;
title Command Line
commandline
&nbsp;
title Install GRUB to hd0 MBR
root (hd0,0)
setup (hd0)
&nbsp;
title Matrix
color green/black light-green/green
&nbsp;
title Scan for /boot/grub/menu.lst
find --set-root --ignore-floppies /boot/grub/menu.lst
configfile /boot/grub/menu.lst
&nbsp;
title Scan for /boot/menu.lst
find --set-root --ignore-floppies /menu.lst
configfile /boot/menu.lst
&nbsp;
# http://www.vortex.prodigynet.co.uk/x86test/
title    Run x86test (CPU Info)
kernel /boot/x86test_zImage.bin
#wget http://www.vortex.prodigynet.co.uk/x86test/x86test_zImage.bin
&nbsp;
# http://www.memtest.org/
title    Run memtest86+ (Memory Testing)
kernel /boot/memtest86+-1.70.bin</pre>

<h2> <span class="mw-headline" id="Light_Debug">Light Debug</span></h2>
<p>A quick way to see more verbose messages on your console is to bootup your normal grub entry after appending <strong>verbose</strong> to the kernel line.  This simple word added to your kernel line turns on more logging thanks to the <code>/etc/rc.sysinit</code> file, which at the top of the file runs:</p>
<pre>if /bin/grep -q " verbose" /proc/cmdline; then /bin/dmesg -n 8; fi</pre>
<p>Very simple way to get a bit more messages and debug output in your logs.</p>
<pre>title  Arch Linux DEBUG Light
kernel /vmlinuz26 root=/dev/disk/by-label/ROOT ro rootwait verbose
initrd /kernel26.img</pre>

<h2> <span class="mw-headline" id="Medium_Debug">Medium Debug</span></h2>
<p>This example <code>menu.lst</code> entry turns on real logging that is set by the kernel and not in an init script.  Adding the <strong>debug</strong> kernel parameter to your kernel line is recognized by a lot of linux internals and enables quite a bit of debugging compared to the default. </p>

<pre>title Arch Linux DEBUG Medium
kernel /vmlinuz26 root=/dev/disk/by-label/ROOT ro rootdelay=5 panic=10 debug
initrd /kernel26.img</pre>

<h2> <span class="mw-headline" id="Heavy_Debug">Heavy Debug</span></h2>
<p>An even more impressive kernel parameter is the <strong>ignore_loglevel</strong>, which causes the system to ignore any loglevel and keeps the internal loglevel at the maximum debugging level, basically rendering dmesg unable to lower the debug level.</p>
<pre>title Arch Linux DEBUG Heavy
kernel /vmlinuz26 root=/dev/disk/by-label/ROOT ro rootdelay=5 panic=10 debug ignore_loglevel
initrd /kernel26.img</pre>

<h2> <span class="mw-headline" id="Extreme_Debug">Extreme Debug</span></h2>
<p>If the "Heavy Debug" seemed like a lot of output, thats about 1/2 of the logging that occurs with this example.  This does a couple things, it uses the <strong>earlyprintk</strong> parameter to setup your kernel for "early" "printing" of messages to your "vga" screen.  The <strong>,keep</strong> just lets it stay on the screen longer.  This will let you see logs that normally are hidden due to the boot-up process.
This also changes the log buffer length to 10MB, and also instructs that any fatal signals be printed with <strong>print_fatal_signals</strong>.  The last one, <strong>sched_debug</strong>, you can look up in the very excellent kernel documentation on <a href="http://www.kernel.org/doc/Documentation/kernel-parameters.txt" class="external text" rel="nofollow">kernel parameters</a>.</p>

<pre>title Arch Linux DEBUG Extreme
kernel /vmlinuz26 root=/dev/disk/by-label/ROOT ro debug ignore_loglevel log_buf_len=10M print_fatal_signals=1 LOGLEVEL=8 earlyprintk=vga,keep sched_debug
initrd /kernel26.img</pre>

<h2> <span class="mw-headline" id="Insane_Debug">Insane Debug</span></h2>
<p>The first few debugging examples showed some really nice kernel parameters to turn on really verbose debugging.  This kind of debugging is absolutely critical if you want to max out your system or just learn more about what is going on behind the scenes.  But there is a final trick that is my favorite, it's the ability to set both environment variables, and more importantly, module parameters at boot.</p>

<p>As an example, here is the boot line that I am using at the moment on an older Dell Desktop, just to illustrate module parameters and environment vars.  </p>
<pre>title  Arch Linux X-256
kernel /vmlinuz26 root=/dev/disk/by-label/ROOT ro rootwait pause_on_oops=5 panic=60 i915.modeset=1 no_console_suspend ipv6.disable=1 TERM=xterm-256color quiet 5
initrd /kernel26.img</pre>
<p>Since it's low on both memory and CPU, I disable ipv6. I also turn on kernel modesetting for the i915 video card, set my terminal to be xterm-256color, and boot straight into <a href="https://wiki.archlinux.org/index.php/Xorg" title="Xorg">X</a>.  This lets me use a very optimized arch-linux configuration, amazing how fast thanks to using <a href="https://wiki.archlinux.org/index.php/SLiM" title="SLiM">slim</a> as the login manager, <a href="https://wiki.archlinux.org/index.php/Ratpoison" title="Ratpoison">ratpoison</a> as my <a href="https://wiki.archlinux.org/index.php/Display_Manager" title="Display Manager">window manager</a>, and terminal with <a href="https://wiki.archlinux.org/index.php/Tmux" title="Tmux">tmux</a> as my login shell, all from boot, as the pstree shows (plus <a href="https://wiki.archlinux.org/index.php/Synergy" title="Synergy">Synergy</a>!).</p>
<pre>init,1
  |-slim,3096
  |   |-X,3098 -nolisten tcp vt07 -auth /var/run/slim.auth
  |   `-ratpoison,3107,askapache
  |       |-terminal,5341 -x sh -c exec /usr/bin/tmux -2 -l -u -q attach -d -t tmux-askapache
  |       |   |-bash,11165
  |       |   |-tmux,5345 -2 -l -u -q attach -d -t tmux-askapache
  |       |   `-{terminal},5346
  |       `-xscreensaver,3113 -no-splash
  |-synergyc,6121,galileo -f --name galileo-fire --restart 10.66.66.2:26666
  |
  `-tmux,5348,askapache -2 -l -u -q attach -d -t tmux-askapache
      |-bash,5351
      |   `-ssh,9969 lug@askapache.com
      `-bash,5868
         `-vim,11149 -p sda1/grub/menu.lst /boot/grub/menu.lst</pre>
<p>That kind of optimized system is only possible if you first can figure out your system, by debugging both the kernel as previously illustrated, debugging the init process, and most importantly, by debugging the modules enabled for your system's hardware/firmware/software.  Debugging modules is challenging but worth the effort, and then you are able to do some truly insane debugging from grub like the following example, note that the actual grub entry is all on one line, but I split it into 4 lines so you could see it all.  This basically turns on every module on this little Dell desktop to be at the absolute max debug level.  There is so much logging when I boot this that the system grinds to a halt and is slower than a TI-89 calculator (See <a href="https://wiki.archlinux.org/index.php/Improve_Boot_Performance" title="Improve Boot Performance">Improve Boot Performance</a>).</p>
<pre>title  Arch Linux DEBUG INSANE
kernel /vmlinuz26 root=/dev/disk/by-label/ROOT ro rootwait ignore_loglevel debug debug_locks_verbose=1 sched_debug initcall_debug mminit_loglevel=4 udev.log_priority=8
       loglevel=8 earlyprintk=vga,keep log_buf_len=10M print_fatal_signals=1 apm.debug=Y i8042.debug=Y drm.debug=1 scsi_logging_level=1 usbserial.debug=Y
       option.debug=Y pl2303.debug=Y firewire_ohci.debug=1 hid.debug=1 pci_hotplug.debug=Y pci_hotplug.debug_acpi=Y shpchp.shpchp_debug=Y apic=debug
       show_lapic=all hpet=verbose lmb=debug pause_on_oops=5 panic=10 sysrq_always_enabled
initrd /kernel26.img</pre>
<p>A couple key items from that grub entry are <strong>sysrq_always_enabled</strong> which forces on the sysrq magic, which really is a lifesaver when debugging at this level as your machine will freeze/stop-responding sometimes and it's nice to use sysrq to kill all tasks, change the loglevel, unmount all filesystems, or do a hard reboot.  Another key parameter is the <strong>initcall_debug</strong>, which debugs the init process in excruciating detail.  Very useful at times.  The last parametery I find very useful is the <strong>udev.log_priority=8</strong> to turn on <a href="https://wiki.archlinux.org/index.php/Udev" title="Udev">udev</a> logging.  </p>


<h2><span class="mw-headline" id="Break_Into_Init">Break Into Init</span></h2>
<p>For instance, If you add <strong>break=y</strong> to your kernel cmdline, init will pause early in the <a href="https://wiki.archlinux.org/index.php/Arch_Boot_Process" title="Arch Boot Process">boot process</a> (after loading modules) and launch an interactive sh shell which can be used for troubleshooting purposes. (Normal boot continues after logout.)  This is very similar to the shell that shows up if your computer gets turned off before it is able to shutdown properly.  But using this parameter lets you enter into this mode differently at will.</p>
<pre>title  Arch Linux Init Break
kernel /vmlinuz26 root=/dev/disk/by-label/ROOT ro rootwait break=y
initrd /kernel26.img</pre>

<h2><span class="mw-headline" id="Debugging_init">Debugging init</span></h2>

<p>This awesome parameter <strong>udev.log_priority=8</strong> does the same thing as editing the file <code>/etc/udev/udev.conf</code> except it executes earlier, turning on debugging output for <a href="https://wiki.archlinux.org/index.php/Udev" title="Udev">udev</a>.  If you want to know your hardware, that is the key parameter right there.  Another trick is if you change the <code>/etc/udev/udev.conf</code> to be verbose, then you can make your initrd image include that file to turn on verbose udeb debugging by adding it to your {{Filename|/etc/mkinitcpio.conf} like:</p>
<pre>FILES="/etc/modprobe.d/modprobe.conf /etc/udev/udev.conf"</pre>
<p>, which on arch is as easy as </p>
<pre># mkinitcpio -p kernel26</pre>
<p>Debugging <a href="https://wiki.archlinux.org/index.php/Udev" title="Udev">udev</a> is key because the <a href="https://wiki.archlinux.org/index.php/Initrd" title="Initrd">initrd</a> performs a <a href="https://wiki.archlinux.org/index.php/Change_Root" title="Change Root">root change</a> at the end of its run to usually launch a program like /sbin/init as part of a chroot, and unless the new file system has a valid /dev directory, udev must be initialized before invoking chroot in order to provide <code>/dev/console</code>.  </p>
<pre>exec chroot . /sbin/init &lt;dev/console &gt;dev/console 2&gt;&amp;1</pre>
<p>So basically, you aren't able to view the logs that are generated before /dev/console is initialized by udev or by a special initrd you compiled yourself.  One method the kernel developers use to be able to still get the log messages generated before /dev/console is available is to provide an alternative console that you can enable or disable from grub.</p>



<h2><span class="mw-headline" id="Net_Console">Net Console</span></h2>
<p>If you read through the kernel documentation regarding debugging, you will hear about Netconsole, which can be loaded from the kernel line in GRUB, compiled into your kernel, or loaded at runtime as a module.  Having a netconsole entry in your <code>menu.lst</code> is most excellent for debugging slower computers like old laptops or thin-clients.  It's easy to use.  Just setup a 2nd computer (running arch) to accept syslog requests on a remote port, very fast and quick to do on arch-linux, 1 line to syslog.conf.  Then you could use a log-color-parser like ccze to view all syslog logs, or just tail your everything.log. Then on your laptop, boot up and select the netconsole entry from the grub menu, and you will start seeing as much logging as you want on your syslog system.  This logging lets you view even earlier log output than is available with the earlyprintk=vga kernel parameter, as netconsole is used by kernel hackers and developers, so it's very powerful.</p>
<pre>title  Arch Linux DEBUG Netconsole
kernel /vmlinuz26 root=/dev/disk/by-label/ROOT ro netconsole=514@10.0.0.2/12:34:56:78:9a:bc debug ignore_loglevel
initrd /kernel26.img</pre>

<h2><span class="mw-headline" id="Hijacking_cmdline">Hijacking cmdline</span></h2>
<p>If you do not have access to GRUB or the kernel boottime cmdline, like on a server or virtual machine, as long as you have root permissions you can still enable this kind of simplistic verbose logging using a neat hack.  While you cannot modify the <code>/proc/cmdline</code> even as root, you can place your own cmdline file on top of /proc/cmdline, so that accessing /proc/cmdline actually accesses your file.</p>
<p>For example if I <strong>cat /proc/cmdline</strong>, I have the following:</p>
<pre>root=/dev/disk/by-label/ROOT ro console=tty1 logo.nologo quiet</pre>
<p>So I use a simple sed command to replace <strong>quiet</strong> with <strong>verbose</strong> like:</p>
<pre>sed &#039;s/ quiet/ verbose/&#039; /proc/cmdline &gt; /root/cmdline</pre>
<p>Then I bind mount /root/cmdline so that it becomes /proc/cmdline, using the <strong>-n</strong> option to mount so that this mount won't be recorded in the systems mtab.</p>
<pre>mount -n --bind -o ro /root/cmdline /proc/cmdline</pre>
<p>Now if I <strong>cat /proc/cmdline</strong>, I have the following:</p>
<pre>root=/dev/disk/by-label/ROOT ro console=tty1 logo.nologo verbose</pre><p><a href="http://www.askapache.com/linux/advanced-linux-grub.html"></a><a href="http://www.askapache.com/linux/advanced-linux-grub.html">Advanced Linux Debugging using a Bootloader (GRUB)</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/linux/advanced-linux-grub.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging Tools for Windows</title>
		<link>http://www.askapache.com/windows/debugging-tools.html</link>
		<comments>http://www.askapache.com/windows/debugging-tools.html#comments</comments>
		<pubDate>Thu, 24 Jun 2010 23:43:47 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=4137</guid>
		<description><![CDATA[<p>I am almost ready to publish the final tutorial on using ssh tunnels from a truecrypt partition on a Windows machine.  Of course I choose to go way overboard in my research and the tutorial is full of some pretty awesome windows tricks.. I will come back to this post soon and post all the other advanced tools I use for debugging windows, for now though you MUST know how to debug the kernel and use these basic debugging tools.</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/windows/debugging-tools.html"></a><a href="http://www.askapache.com/windows/debugging-tools.html"><cite>AskApache.com</cite></a></p><p>I am almost ready to publish the final tutorial on using ssh tunnels from a truecrypt partition on a Windows machine.  Of course I choose to go way overboard in my research and the tutorial is full of some pretty awesome windows tricks.. I will come back to this post soon and post all the other advanced tools I use for debugging windows, for now though you MUST know how to debug the kernel and use these basic debugging tools.</p>





<a href="http://technet.microsoft.com/en-us/library/cc757323%28WS.10%29.aspx">WINDOWS NETWORKING !!!!!</a>
<div>
<div>Debugging Tools for Windows</div>
<div>Target Computer and Host Computer</div>
<!--Content type: PSDK_3. Transform: webcollection2mtps.xslt.-->
<div><!----></div>
<a id="r02_setup_1_3ababa5c-2202-4141-b689-a847cbfc3cb1.xml"><!----></a>Kernel-mode debugging requires a <a id="ctl00_MTCS_main_ctl01" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl01',this);" href="http://msdn.microsoft.com/en-us/library/cc265771.aspx#592a23b6-7f7d-434c-b4f6-5e1470b41393"><em>target computer</em></a> and a <em>host computer</em>. The target computer is used to run the kernel-mode application. The host computer is used to run the debugger.

The following diagram shows the typical Microsoft Windows setup that you can use to perform kernel debugging and diagnose system failures.

<!--src=[dbg_2000.png]--><img src="http://i.msdn.microsoft.com/Cc266325.dbg_2000(en-us,MSDN.10).png" alt="Debugging Tools for Windows"  title="Cc266325.dbg 2000(en us,MSDN.10) windows" />

<strong>Typical Windows debugging setup</strong>

This diagram shows the typical setup. However, the current versions of KD and WinDbg (which you installed with this documentation) are flexible. KD and WinDbg can do the following
<ul>
	<li>Debug a target computer that is running Windows.</li>
	<li>Debug a target computer that is running on an x86-based platform, an Itanium-based platform, or an x64-based platform.</li>
	<li>Can be started from a host computer that is running Windows.</li>
	<li>Can be started from a host computer that is on an x86-based platform, an Itanium-based platform, or an x64-based platform.</li>
</ul>
<!---->

The target computer and host computer do not have to use the same platform or the same version of Windows.

Kernel debugging does not require specific combinations of the free or checked builds. You can debug a free system from a free or checked system, and you can debug a checked system from a free or checked system. However, typically, there is no reason for the host computer to run the slower checked build.

<strong>Note</strong> If you are running the debuggers from an Itanium-based host computer, make sure that you are using the correct version of the binaries. For more information about which version of the debugger package to use, see <a id="ctl00_MTCS_main_ctl03" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl03',this);" href="http://msdn.microsoft.com/en-us/library/cc266331.aspx">Choosing a 32-bit or 64-bit Debugger Package</a>.

</div>
<div></div>
<div></div>
<div></div>
<div>Debugging Tools for Windows</div>
<div>List of Tools and Documentation</div>
<!--Content type: PSDK_3. Transform: webcollection2mtps.xslt.-->
<div><!----></div>
<a id="TOC_Debuggers_a3feedd0-1691-4c43-bdaa-992355a82b05.xml"><!----></a>

<!---->

Microsoft Debugging Tools for Windows includes a number of debuggers and other tools. Some of them are described in this documentation, and others are described elsewhere. The following list briefly describes each tool and where its documentation can be found.
<h4>Debuggers</h4>
Debugging Tools for Windows includes the following debuggers. These are described throughout this documentation, and are referred to by their individual names or collectively as "the debugger":

<dl> <dt>WinDbg  (<em>Windbg.exe</em>)</dt> <dd>A user-mode and kernel-mode debugger with a graphical interface.</dd> <dt>KD  (<em>Kd.exe</em>)</dt> <dd>A kernel-mode debugger with a console interface.</dd> <dt>CDB  (<em>Cdb.exe</em>)</dt> <dd>A user-mode debugger with a console interface.</dd> <dt>NTSD  (<em>Ntsd.exe</em>)</dt> <dd>A user-mode debugger with a console interface. CDB and NTSD are virtually identical. In this documentation, whenever a reference is made to "CDB", it applies to both CDB and NTSD. When these two debuggers differ, it is noted. (See <a id="ctl00_MTCS_main_ctl01" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl01',this);" href="http://msdn.microsoft.com/en-us/library/cc266320.aspx">CDB</a> and <a id="ctl00_MTCS_main_ctl02" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl02',this);" href="http://msdn.microsoft.com/en-us/library/cc266320.aspx#f7997e21-d84a-4224-af71-bc393265af91">NTSD</a> for details.)</dd> </dl>
<table id="tblContentMiddle" border="0" cellspacing="0" cellpadding="0" width="785">
<tbody>
<tr>
<td>
<div>
<h1>Debugging Tools for Windows - Overview</h1>
<!-- begin pchlp top test code --> <a href="http://www.microsoft.com/whdc/pchlp.mspx#top">Looking for updates and drivers for your personal computer?</a>

<!-- end pchlp top test code -->

You can use Debugging Tools for Windows to debug drivers, applications, and services on systems that are running Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows Server 2008 R2, or Windows 7. You can also use Debugging Tools for Windows to debug the operating system itself. Versions of the Debugging Tools for Windows package are available for 32-bit x86, native Intel Itanium, and native x64 platforms.

The latest release of Debugging Tools for Windows is available as part of the <a href="http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx">Windows Driver Kit (WDK)</a>.

<strong>Note:</strong> If you have a system with a 64-bit processor and you are debugging an application on it, you must use one of the native 64-bit packages.

</div></td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0" width="785">
<tbody>
<tr>
<td>
<div>

<strong>Using Debugging Tools for Windows</strong>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_tool.gif" border="0" alt="Tools" title="icon tool windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx#d">Download Windows Symbol Packages</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" />
Symbol packages for a variety of Windows versions.</td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_text.gif" border="0" alt="White Paper" title="icon text windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a">Install Debugging Tools for Windows 32-bit Version</a> <img src="http://www.microsoft.com/whdc/images/fileType/new.gif" border="0" alt="Debugging Tools for Windows"  title="new windows" />
Download page for the latest 32-bit packages.</td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_text.gif" border="0" alt="White Paper" title="icon text windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx#">Install Debugging Tools for Windows 64-bit Versions</a> <img src="http://www.microsoft.com/whdc/images/fileType/new.gif" border="0" alt="Debugging Tools for Windows"  title="new windows" />
Download page for the latest 64-bit packages.</td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_text.gif" border="0" alt="White Paper" title="icon text windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/debugging/whatsnew.mspx#">What's New for Debugging Tools for Windows</a> <img src="http://www.microsoft.com/whdc/images/fileType/new.gif" border="0" alt="Debugging Tools for Windows"  title="new windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_nod.gif" border="0" alt="WHDC Portal/Nodal" title="icon nod windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a">Debugging Tools and Symbols: Getting Started</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" />
Tips for using Debugging Tools for Windows, with links to presentations and papers on best practices</td>
</tr>
</tbody>
</table>
<strong>Debugger How-Tos</strong>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_text.gif" border="0" alt="White Paper" title="icon text windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/driver/tips/debug_vista.mspx#">Driver Tip: Debugging Windows Vista</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_text.gif" border="0" alt="White Paper" title="icon text windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/debugging/debugtips.mspx">Improve Driver Debugability</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_powerpoint.gif" border="0" alt="Microsoft Powerpoint (.ppt)" title="icon powerpoint windows" /></td>
<td align="left" valign="top"><a href="http://download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/DW04001_WINHEC2004.ppt">1394 Kernel Debugging Tips and Tricks [WinHEC 2004; 373 KB]</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_powerpoint.gif" border="0" alt="Microsoft Powerpoint (.ppt)" title="icon powerpoint windows" /></td>
<td align="left" valign="top"><a href="http://download.microsoft.com/download/f/0/5/f05a42ce-575b-4c60-82d6-208d3754b2d6/Adv-Drv_Debug.ppt">Advanced Driver Debugging [336 KB]</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_powerpoint.gif" border="0" alt="Microsoft Powerpoint (.ppt)" title="icon powerpoint windows" /></td>
<td align="left" valign="top"><a href="http://download.microsoft.com/download/a/f/d/afdfd50d-6eb9-425e-84e1-b4085a80e34e/DVR-T410_WH07.pptx">Driver Debugging Basics [WinHEC 2007; 633 KB]</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_nod.gif" border="0" alt="WHDC Portal/Nodal" title="icon nod windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/debugging/kmdf.mspx">Debugging Kernel-Mode Driver Framework Drivers</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_nod.gif" border="0" alt="WHDC Portal/Nodal" title="icon nod windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/debugging/umdftraining.mspx">Debugging User-Mode Driver Framework Drivers Training Sessions</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_ms.gif" border="0" alt="Microsoft.com" title="icon ms windows" /></td>
<td align="left" valign="top"><a href="http://msdn.microsoft.com/en-us/library/cc267445.aspx" target="_blank">Debugging Tools for Windows (MSDN)</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_ms.gif" border="0" alt="Microsoft.com" title="icon ms windows" /></td>
<td align="left" valign="top"><a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q314743" target="_blank">HOWTO: Enable Verbose Debug Tracing in Various Drivers and Subsystems (314743)</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_ms.gif" border="0" alt="Microsoft.com" title="icon ms windows" /></td>
<td align="left" valign="top"><a href="http://msdn.microsoft.com/en-us/library/ms797165.aspx" target="_blank">WDK Online: Tools for Debugging Drivers</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
</tbody>
</table>
<strong>Resources</strong>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_text.gif" border="0" alt="White Paper" title="icon text windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/DevTools/WDK/WDKdocs.mspx#">WDK Documentation Download</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_nod.gif" border="0" alt="WHDC Portal/Nodal" title="icon nod windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/resources/default.mspx">Driver Developer Community Resources</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_nod.gif" border="0" alt="WHDC Portal/Nodal" title="icon nod windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/winlogo/drvsign/drvsign.mspx">Driver Signing Requirements for Windows</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_nod.gif" border="0" alt="WHDC Portal/Nodal" title="icon nod windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/driver/foundation/DevNotes.mspx">Notes from Windows Development Teams</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_nod.gif" border="0" alt="WHDC Portal/Nodal" title="icon nod windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/toolsupport.mspx">Support for Developer Kits and Tools</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_other.gif" border="0" alt="Other" title="icon other windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/resources/blogs.mspx">Driver Developer Blogs</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_other.gif" border="0" alt="Other" title="icon other windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/whdc/devtools/wdk/RelNotesW7.mspx">Windows Driver Kit (WDK) Version 7.1.0 Release Notes</a> <img src="http://www.microsoft.com/whdc/images/fileType/new.gif" border="0" alt="Debugging Tools for Windows"  title="new windows" /></td>
</tr>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_ms.gif" border="0" alt="Microsoft.com" title="icon ms windows" /></td>
<td align="left" valign="top"><a href="http://msdn.microsoft.com/en-us/library/aa972908.aspx#" target="_blank">WDK Documentation on MSDN</a> <img src="http://www.microsoft.com/whdc/images/fileType/new.gif" border="0" alt="Debugging Tools for Windows"  title="new windows" /></td>
</tr>
</tbody>
</table>
<strong>See Also</strong>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="16" height="19" align="left" valign="top"><img src="http://www.microsoft.com/whdc/images/fileType/icon_ms.gif" border="0" alt="Microsoft.com" title="icon ms windows" /></td>
<td align="left" valign="top"><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c4a25ab9-649d-4a1b-b4a7-c9d8b095df18&amp;displaylang=en" target="_blank">Microsoft Application Verifier</a><img src="http://www.microsoft.com/whdc/images/shared/common/space.gif" border="0" alt="Debugging Tools for Windows" width="1" height="1" title="space windows" /></td>
</tr>
</tbody>
</table>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<!---->
<h4>Additional Tools and Utilities</h4>
Debugging Tools for Windows also includes the following tools and utilities:

<dl> <dt>Logger  (<em>Logger.exe</em> and <em>Logexts.dll</em>)</dt> <dd>A tool and an extension DLL that record the function calls and other actions of a program. Logger is described in this documentation; see <a id="ctl00_MTCS_main_ctl03" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl03',this);" href="http://msdn.microsoft.com/en-us/library/cc266303.aspx">Logger and LogViewer</a>.</dd> <dt>LogViewer  (<em>Logviewer.exe</em>)</dt> <dd>A tool that displays the logs created by Logger. LogViewer is described in this documentation; see <a id="ctl00_MTCS_main_ctl04" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl04',this);" href="http://msdn.microsoft.com/en-us/library/cc266303.aspx">Logger and LogViewer</a>.</dd> <dt>ADPlus  (Autodump+, <em>Adplus.vbs</em>)</dt> <dd>A console-based Microsoft Visual Basic script that can automatically create memory dump files and log files with debug output from one or more processes. ADPlus is described in this documentation; see <a id="ctl00_MTCS_main_ctl05" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl05',this);" href="http://msdn.microsoft.com/en-us/library/cc265629.aspx">ADPlus</a>.</dd> <dt>DbgRpc  (<em>Dbgrpc.exe</em>)</dt> <dd>A tool used to display Microsoft Remote Procedure Call (RPC) state information. DbgRpc is described in this documentation; see <a id="ctl00_MTCS_main_ctl06" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl06',this);" href="http://msdn.microsoft.com/en-us/library/cc267800.aspx">RPC Debugging</a> and <a id="ctl00_MTCS_main_ctl07" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl07',this);" href="http://msdn.microsoft.com/en-us/library/cc267804.aspx">Using the DbgRpc Tool</a>.</dd> <dt>KDbgCtrl  (Kernel Debugging Control, <em>Kdbgctrl.exe</em>)</dt> <dd>A tool that controls and configures the kernel debugging connection. KDbgCtrl is described in this documentation; see <a id="ctl00_MTCS_main_ctl08" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl08',this);" href="http://msdn.microsoft.com/en-us/library/cc501182.aspx">Using KDbgCtrl</a>.</dd> <dt>SrcSrv  (<em>Srcsrv.dll</em>)</dt> <dd>A source server that can be used to deliver source files while debugging. SrcSrv is described in this documentation; see <a id="ctl00_MTCS_main_ctl09" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl09',this);" href="http://msdn.microsoft.com/en-us/library/cc901440.aspx">SrcSrv</a>. </dd> <dt>SymSrv  (<em>Symsrv.dll</em>)</dt> <dd>A symbol server that the debugger can use to connect to a symbol store. SymSrv is described in this documentation; see <a id="ctl00_MTCS_main_ctl10" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl10',this);" href="http://msdn.microsoft.com/en-us/library/cc266470.aspx">SymSrv</a>.</dd> <dt>SymStore  (<em>Symstore.exe</em>)</dt> <dd>A tool used to create a symbol store. SymSrv is described in this documentation; see <a id="ctl00_MTCS_main_ctl11" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl11',this);" href="http://msdn.microsoft.com/en-us/library/cc266480.aspx">Using SymStore</a>.</dd> <dt>SymProxy</dt> <dd>A tool used to create a single HTTP symbol server on your network that all your debuggers can point to. This has the benefit of pointing to multiple symbol servers (both internal and external) with a single symbol path, handling all authentication, and increasing performance via symbol caching. SymProxy is described in this documentation; see <a id="ctl00_MTCS_main_ctl12" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl12',this);" href="http://msdn.microsoft.com/en-us/library/cc901417.aspx">SymProxy</a>. </dd> <dt>AgeStore  (<em>Agestore.exe</em>)</dt> <dd>A tool that removes old entries in the <a id="ctl00_MTCS_main_ctl13" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl13',this);" href="http://msdn.microsoft.com/en-us/library/cc265785.aspx#ac594c2f-1bc6-4ee9-a628-bc146d313672">downstream store</a> of a symbol server or a source server. AgeStore is described in this documentation; see <a id="ctl00_MTCS_main_ctl14" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl14',this);" href="http://msdn.microsoft.com/en-us/library/cc501193.aspx">AgeStore</a>.</dd> <dt>DBH  (<em>Dbh.exe</em>)</dt> <dd>A tool that displays information about the contents of a symbol file. DBH is described in this documentation; see <a id="ctl00_MTCS_main_ctl15" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl15',this);" href="http://msdn.microsoft.com/en-us/library/cc501201.aspx">DBH</a>.</dd> <dt>PDBCopy  (<em>Pdbcopy.exe</em>)</dt> <dd>A tool that removes private symbol information from a symbol file, and controls which public symbols are included in the file. PDBCopy is described in this documentation; see <a id="ctl00_MTCS_main_ctl16" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl16',this);" href="http://msdn.microsoft.com/en-us/library/cc501196.aspx">PDBCopy</a>.</dd> <dt>DumpChk  (Dump File Checking Utility, <em>Dumpchk.exe</em>)</dt> <dd>A tool used to validate a memory dump file. DumpChk is described in this documentation; see <a id="ctl00_MTCS_main_ctl17" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl17',this);" href="http://msdn.microsoft.com/en-us/library/cc901388.aspx">DumpChk</a>. </dd> <dt>DbgSrv  (<em>Dbgsrv.exe</em>)</dt> <dd>A process server used for remote debugging. DbgSrv is described in this documentation; see <a id="ctl00_MTCS_main_ctl18" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl18',this);" href="http://msdn.microsoft.com/en-us/library/cc266423.aspx">Process Servers (User Mode)</a>.</dd> <dt>KdSrv  (<em>Kdsrv.exe</em>)</dt> <dd>A KD connection server used for remote debugging. KDSrv is described in this documentation; see <a id="ctl00_MTCS_main_ctl19" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl19',this);" href="http://msdn.microsoft.com/en-us/library/cc266454.aspx">KD Connection Servers (Kernel Mode)</a>.</dd> <dt>DbEngPrx  (<em>Dbengprx.exe</em>)</dt> <dd>A repeater (small proxy server) used for remote debugging. DbgSrv is described in this documentation; see <a id="ctl00_MTCS_main_ctl20" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl20',this);" href="http://msdn.microsoft.com/en-us/library/cc266428.aspx">Repeaters</a>.</dd> <dt><!----></dt> <dd><!----></dd> <dt><!----></dt> <dd><!----></dd> <dt>The Remote tool  (<em>Remote.exe</em>)</dt> <dd>A remoting tool that can be used to remotely control any console program, including KD, CDB, and NTSD. The Remote tool is described in this documentation; see <a id="ctl00_MTCS_main_ctl21" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl21',this);" href="http://msdn.microsoft.com/en-us/library/cc267440.aspx">Remote Tool</a> and <a id="ctl00_MTCS_main_ctl22" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl22',this);" href="http://msdn.microsoft.com/en-us/library/cc266442.aspx">Remote Debugging Through <em>Remote.exe</em></a>.</dd> <dt>GFlags  (Global Flags Editor, <em>Gflags.exe</em>)</dt> <dd>A tool used to control registry keys and other settings. GFlags is described in this documentation; see <a id="ctl00_MTCS_main_ctl23" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl23',this);" href="http://msdn.microsoft.com/en-us/library/cc265942.aspx">GFlags</a>.</dd> <dt>The Kill tool  (<em>Kill.exe</em>)</dt> <dd>A tool used to terminate a process. The Kill tool is described in this documentation; see <a id="ctl00_MTCS_main_ctl24" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl24',this);" href="http://msdn.microsoft.com/en-us/library/cc266299.aspx">Kill Tool</a>.</dd> <dt>The Breakin tool  (<em>Breakin.exe</em>)</dt> <dd>A tool used to cause a user-mode break to occur in a process. <em>Breakin.exe</em> is not described in this documentation. Use the <strong>breakin /?</strong> command for help with this tool.</dd> <dt>The List tool  (File List Utilit
y, <em>List.exe</em>)</dt> <dd><em>List.exe</em> is not described in this documentation. Use the <strong>list /?</strong> command for help with this tool. </dd> <dt>TList  (Task List Viewer, <em>Tlist.exe</em>)</dt> <dd>A tool used to list all running processes. TList is described in this documentation; see <a id="ctl00_MTCS_main_ctl25" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl25',this);" href="http://msdn.microsoft.com/en-us/library/cc267860.aspx">TList</a>.</dd> <dt>RTList  (Remote Task List Viewer, <em>Rtlist.exe</em>)</dt> <dd>A tool used to list running processes via a DbgSrv process server. RTList is not described in this documentation. Use the <strong>rtlist /?</strong> command for help with this tool. </dd> <dt>UMDH  (User-Mode Dump Heap utility, <em>Umdh.exe</em>)</dt> <dd>A tool used to analyze heap allocations. UMDH is described in this documentation; see <a id="ctl00_MTCS_main_ctl26" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl26',this);" href="http://msdn.microsoft.com/en-us/library/cc267868.aspx">UMDH</a>.</dd> <dt>USBView  (Universal Serial Bus Viewer, <em>Usbview.exe</em>)</dt> <dd>A tool used to display the USB devices connected to a computer. USBView is described in this documentation; see <a id="ctl00_MTCS_main_ctl27" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl27',this);" href="http://msdn.microsoft.com/en-us/library/cc748123.aspx">USBView</a>.</dd> </dl><!---->

If you peform a custom install of Debugging Tools for Windows and select the <strong>SDK</strong> feature and all of its subfeatures, the libraries, headers, and samples used to build debugger extensions will be installed.
<h4>Documentation</h4>
<dl> <dt>"Debugging Tools for Windows"  (<em>Debugger.chm</em>)</dt> <dd>This is the documentation you are currently reading. It is the central documentation for Debugging Tools for Windows.</dd> <dt>"Debug Help Library"  (<em>Dbghelp.chm</em>)</dt> <dd>This documentation describes the DbgHelp API and the ImageHlp API, and also explains how to create your own symbol server. <em>This is installed when you peform a custom install of Debugging Tools for Windows and select the <strong>SDK</strong> feature and its subfeatures.</em></dd> </dl><!---->
<h4>Tools Outside the Debugging Tools for Windows Package</h4>
The following related tools are not part of the Debugging Tools for Windows package:

<dl> <dt>Dr. Watson  (<em>Drwtsn32.exe</em>)</dt> <dd>A tool used for automatically creating dump files and sending error reports to Microsoft Online Crash Analysis (OCA). Dr. Watson is partially described in this documentation; see <a id="ctl00_MTCS_main_ctl28" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl28',this);" href="http://msdn.microsoft.com/en-us/library/cc265793.aspx">Dr. Watson</a>. The other features of Dr. Watson are described in the help file associated with <em>drwtsn32.exe</em>.</dd> <dt>Build utility  (<em>Build.exe</em>)</dt> <dd>A compiler and linker used to build debugger extensions and other programs. The Build utility and its documentation can be found in the Windows Driver Kit, and in earlier versions of the Windows DDK. </dd> <dt>BinPlace  (<em>Binplace.exe</em>)</dt> <dd>A tool used to control symbol files for build products. BinPlace and its documentation can be found in the Windows Driver Kit, and in earlier versions of the Windows DDK. </dd> <dt>Application Verifier  (<em>AppVerif.exe</em> and <strong>!avrf</strong>)</dt> <dd>A tool used to test user-mode applications. This tool consists of two components: the <em>AppVerif.exe</em> utility and the <strong>!avrf</strong> extension command. All the features of Application Verifier that are debugger-related are described in <!--src=[internet_link_sm.gif]--><img src="http://i.msdn.microsoft.com/Cc267862.internet_link_sm(en-us,MSDN.10).gif" alt="Debugging Tools for Windows"  title="Cc267862.internet link sm(en us,MSDN.10) windows" /><a id="ctl00_MTCS_main_ctl30" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl30',this);" href="http://go.microsoft.com/fwlink/?linkid=108353" target="_blank">Application Verifier</a>. The other features of Application Verifier are described in the help file associated with <em>AppVerif.exe</em>.</dd> </dl>
<div>Debugging Tools for Windows</div>
<div>WinDbg</div>
<!--Content type: PSDK_3. Transform: webcollection2mtps.xslt.-->
<div><!----></div>
<a id="r01_intro_eae4d594-1986-49f9-b8b1-87f7eeb0d513.xml"><!----></a>

Microsoft Windows Debugger (WinDbg) is a powerful Windows-based debugging tool. It is capable of both <a id="ctl00_MTCS_main_ctl01" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl01',this);" href="http://msdn.microsoft.com/en-us/library/cc265787.aspx#1a7518e7-05c9-4be8-baf0-63b4024f4e30">user-mode</a> and <a id="ctl00_MTCS_main_ctl02" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl02',this);" href="http://msdn.microsoft.com/en-us/library/cc265769.aspx#714fb29e-5a07-45f9-99e8-e3f319e69c2f">kernel-mode</a> debugging.

WinDbg provides full source-level debugging for the Windows kernel, kernel-mode drivers, and system services, as well as user-mode applications and drivers.

WinDbg uses the Microsoft Visual Studio debug symbol formats for source-level debugging. It can access any <a id="ctl00_MTCS_main_ctl03" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl03',this);" href="http://msdn.microsoft.com/en-us/library/cc265773.aspx#986a5629-886b-417b-a52e-7352511b0e35">symbol</a> or variable from a module that has PDB symbol files, and can access any public function's name that is exposed by <a id="ctl00_MTCS_main_ctl04" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl04',this);" href="http://msdn.microsoft.com/en-us/library/cc265774.aspx#c125f2f6-a5ce-419a-98de-c9331ca0e56d">modules</a> that were compiled with COFF symbol files (such as Windows <em>.dbg</em> files).

WinDbg can view source code, set <a id="ctl00_MTCS_main_ctl05" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl05',this);" href="http://msdn.microsoft.com/en-us/library/cc265776.aspx#0b1614a6-b26e-4079-8a25-381977fa2c44">breakpoints</a>, view variables (including C++ objects), stack traces, and memory. Its Debugger Command window allows the user to issue a wide variety of commands.

For kernel-mode debugging, WinDbg requires two machines (the <a id="ctl00_MTCS_main_ctl06" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl06',this);" href="http://msdn.microsoft.com/en-us/library/cc265783.aspx#77205ddc-d81d-483c-ab52-47eb6d613eac">host computer</a> and the <a id="ctl00_MTCS_main_ctl07" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl07',this);" href="http://msdn.microsoft.com/en-us/library/cc265771.aspx#592a23b6-7f7d-434c-b4f6-5e1470b41393">target computer</a>). Kernel debugging is only supported on NT-based Windows operating systems.

WinDbg also supports various remote debugging options for both user-mode and kernel-mode targets.

WinDbg is the graphical-interface counterpart to <a id="ctl00_MTCS_main_ctl08" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl08',this);" href="http://msdn.microsoft.com/en-us/library/cc266320.aspx">CDB</a> / <a id="ctl00_MTCS_main_ctl09" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl09',this);" href="http://msdn.microsoft.com/en-us/library/cc266320.aspx#f7997e21-d84a-4224-af71-bc393265af91">NTSD</a> and to <a id="ctl00_MTCS_main_ctl10" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl10',this);" href="http://msdn.microsoft.com/en-us/library/cc266319.aspx">KD</a>.
<div>Debugging Tools for Windows</div>
<div>KD</div>
<!--Content type: PSDK_3. Transform: webcollection2mtps.xslt.-->
<div><!----></div>
<a id="r01_intro_ad867058-949b-4093-abf6-c4363257a83d.xml"><!----></a>

Microsoft Kernel Debugger (KD) is a character-based console program that enables in-depth analysis of <a id="ctl00_MTCS_main_ctl01" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl01',this);" href="http://msdn.microsoft.com/en-us/library/cc265769.aspx#c2dfd7a9-249b-4018-9789-2b3d6268346b">kernel-mode</a> activity on all NT-based operating systems.

KD can be used to debug kernel-mode programs and drivers, or to monitor the behavior of the operating system itself. KD also supports multiprocessor debugging.

Typically, the KD tool will not be run on the computer being debugged. Two machines (the <a id="ctl00_MTCS_main_ctl02" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl02',this);" href="http://msdn.microsoft.com/en-us/library/cc265783.aspx#77205ddc-d81d-483c-ab52-47eb6d613eac">host computer</a> and the <a id="ctl00_MTCS_main_ctl03" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl03',this);" href="http://msdn.microsoft.com/en-us/library/cc265771.aspx#592a23b6-7f7d-434c-b4f6-5e1470b41393">target computer</a>) are needed for kernel-mode debugging.

Most KD commands cannot be targeted to specific processes or threads, as they can in <a id="ctl00_MTCS_main_ctl04" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl04',this);" href="http://msdn.microsoft.com/en-us/library/cc266320.aspx">CDB</a>, <a id="ctl00_MTCS_main_ctl05" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl05',this);" href="http://msdn.microsoft.com/en-us/library/cc266320.aspx#f7997e21-d84a-4224-af71-bc393265af91">NTSD</a>, and <a id="ctl00_MTCS_main_ctl06" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl06',this);" href="http://msdn.microsoft.com/en-us/library/cc266321.aspx">WinDbg</a>.
<h4>Debugging different target platforms</h4>
KD is capable of debugging a target computer which is running on an x86, Itanium, or x64 platform.

The debugger will automatically detect the platform on which the target is running. You do not need to specify the target on the KD command line. The older syntax (using the name <em>I386KD</em> or <em>IA64KD</em>) is obsolete.
<div>Debugging Tools for Windows</div>
<div>CDB and NTSD</div>
<!--Content type: PSDK_3. Transform: webcollection2mtps.xslt.-->
<div><!----></div>
<a id="r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml"><!----></a>

CDB and NTSD are console applications which can debug <a id="ctl00_MTCS_main_ctl01" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl01',this);" href="http://msdn.microsoft.com/en-us/library/cc265787.aspx#b9622678-468c-4b90-a002-a3d4280796f0">user-mode</a> <a id="ctl00_MTCS_main_ctl02" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl02',this);" href="http://msdn.microsoft.com/en-us/library/cc265771.aspx#997fd309-38d4-4217-9777-65e9f2af4377">programs</a>. These two debuggers are nearly identical, except in the manner in which they are launched.

This documentation will use "CDB" when referring to the capabilities of both CDB and NTSD. <em>Except as noted, all references to CDB in this documentation apply equally to NTSD</em>. There are a few techniques that can only work properly with CDB, or can only work properly with NTSD. These differences are documented in the appropriate sections.

<!---->

<!---->

<!---->
<h3><a id="f5cad0b2-b5ab-4d3d-a4ce-9d29bc7957df"><!----></a>CDB</h3>
Microsoft Console Debugger (CDB) is a character-based console program that enables low-level analysis of Windows user-mode memory and constructs.

CDB is extremely powerful for debugging a program that is currently running or has recently crashed ("live analysis"), yet simple to set up. It can be used to investigate the behavior of a working application. In the case of a failing application, CDB can be used to obtain a stack trace or to look at the guilty parameters. It works well across a network (using a remote access server), as it is character-based.

With CDB, you can display and execute program code, set <a id="ctl00_MTCS_main_ctl03" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl03',this);" href="http://msdn.microsoft.com/en-us/library/cc265776.aspx#0b1614a6-b26e-4079-8a25-381977fa2c44">breakpoints</a>, and examine and change values in memory. CDB can analyze binary code by "disassembling" it and displaying assembly instructions. It can also analyze source code directly.

Because CDB can access memory locations through addresses or global symbols, you can refer to data and instructions by name rather than by address, making it easy to locate and debug specific sections of code. You can also display disassembled machine code. CDB supports debugging multiple threads and processes. It is extensible, and can read and write both paged and non-paged memory.

If the target application is itself a console application, the target will share the console window with CDB. To spawn a separate console window for a target console application, use the <strong>-2</strong> <a id="ctl00_MTCS_main_ctl04" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl04',this);" href="http://msdn.microsoft.com/en-us/library/cc266523.aspx">command-line option</a>.

<!---->
<h3><a id="f7997e21-d84a-4224-af71-bc393265af91"><!----></a>NTSD</h3>
There is a variation of the CDB debugger named Microsoft NT Symbolic Debugger (NTSD). It is identical to CDB in every way, except that it spawns a new text window when it is started, whereas CDB inherits the Command Prompt window from which it was invoked.

Like CDB, NTSD is fully capable of debugging both console applications and graphical Windows programs. (The name "Console Debugger" is used to indicate the fact that CDB is classified as a console application; it does not imply that the target application must be a console application.)

Since the <strong>start</strong> command can also be used to spawn a new console window, the following two constructions will give the same results:

<strong>start cdb </strong><em>parameters</em>
<strong>ntsd </strong><em>parameters</em>
<h4>NTSD in the <em>System32</em> Directory</h4>
Whereas CDB is only available as part of the Debugging Tools for Windows package, NTSD is available both in this package and as part of the Windows system itself. It can be found in the <em>system32</em> directory of Windows.

If you are planning on using the NTSD that appears in the <em>system32</em> directory, there are two important facts you should be aware of:
<ul>
	<li>This version of NTSD cannot be used for <a id="ctl00_MTCS_main_ctl05" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl05',this);" href="http://msdn.microsoft.com/en-us/library/cc266458.aspx">Remote Debugging Through the Debugger</a>.</li>
	<li>This version of NTSD may not match the version of the documentation you are currently reading.</li>
</ul>
<!---->

To avoid these issues, it is recommended that you use only the version of NTSD or CDB that was installed as part of the Debugging Tools for Windows package.
<h4>Controlling CDB or NTSD from the Kernel Debugger</h4>
It is possible to redirect the input and output from CDB or NTSD so that it can be controlled from a kernel debugger (either KD or WinDbg).

If this technique is used with CDB, the CDB window will appear but will not be useable for input and output. If this is used with NTSD, no console window will appear at all.

Controlling NTSD from the kernel debugger is therefore especially useful, since it results in an extremely light-weight debugger that places almost no burden on the computer containing the target application. This combination can be used to debug system processes, shutdown, and the later stages of boot up. See <a id="ctl00_MTCS_main_ctl06" onclick="javascript:Track('ctl00_MTCS_main_ctl00|ctl00_MTCS_main_ctl06',this);" href="http://msdn.microsoft.com/en-us/library/cc266367.aspx">Controlling the User-Mode Debugger from the Kernel Debugger</a> for details.<p><a href="http://www.askapache.com/windows/debugging-tools.html"></a><a href="http://www.askapache.com/windows/debugging-tools.html">Debugging Tools for Windows</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/windows/debugging-tools.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PortaPutty Auto-Reconnecting SSH Tunnels on an Encrypted TrueCrypt Portable USB Key w GPG</title>
		<link>http://www.askapache.com/hacking/ssh-tunnels-truecrypt-gpg.html</link>
		<comments>http://www.askapache.com/hacking/ssh-tunnels-truecrypt-gpg.html#comments</comments>
		<pubDate>Tue, 23 Feb 2010 10:11:11 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Hacking]]></category>

		<guid isPermaLink="false">http://askapache.com/?p=4001</guid>
		<description><![CDATA[<p><a class="IFL" id="id6" href="http://www.askapache.com/hacking/ssh-tunnels-truecrypt-gpg.html"></a>Ok I just came back up to write the intro.. I'm trying to keep it short to avoid getting bogged down by the coolness of each step.  Here is what goes on.   When I logon to my XP machine at work, I bring my usb key and plug it in first.  On logging a window pops up first and it's a password prompt to mount my encrypted drive leonardo.  It also checks a keyfile that is located on my usb key, but all I do now is type in my password.  That causes my encrypted folder to be accessible to me like a normal drive, and it autoruns a startup batch file. <br /><br />The batch file causes <strong>Portable</strong> versions of Firefox (<em>all my bookmarks, my settings</em>) to load, and launches <strong>Portable</strong> Mozilla Thunderbird (IMAP makes this work well), which is my favorite program (<em>great GPG features and open-source!</em>).  Also Some Adobe CS4 software is loaded from the hard drive, like DreamWeaver.  In the background, a service we created executes a PortaPuttY plink command to create forwarded tunnels from various remote servers and accounts, all using key-based encryption.  These tunnels are automatically reconnected if they are disconnected, meaning you can use a socks 5 if you want or even better!<br class="C" /></p>
<p><strong>Part 1 of 5</strong></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/hacking/ssh-tunnels-truecrypt-gpg.html"></a><a href="http://www.askapache.com/hacking/ssh-tunnels-truecrypt-gpg.html"><cite>AskApache.com</cite></a></p><p><a id="id6" class="IFL" href="http://www.tigerdirect.com/applications/SearchTools/item-details.asp?EdpNo=4329073&CatId=3786" title="This ones over $400 dollars! 128GB!"></a>Ok I just came back up to write the intro.. I'm trying to keep it short to avoid getting bogged down by the coolness of each step.  Here is what goes on.   When I logon to my XP machine at work, I bring my usb key and plug it in first.  On logging a window pops up first and it's a password prompt to mount my encrypted drive leonardo.  It also checks a keyfile that is located on my usb key, but all I do now is type in my password.  That causes my encrypted folder to be accessible to me like a normal drive, and it autoruns a startup batch file.  The batch file causes <strong>Portable</strong> versions of Firefox (<em>all my bookmarks, my settings</em>) to load, and launches <strong>Portable</strong> Mozilla Thunderbird (IMAP makes this work well), which is my favorite program (<em>great GPG features and open-source!</em>).  Also Some Adobe CS4 software is loaded from the hard drive, like DreamWeaver.<br class="C" /></p>

<p>The batch file also runs PortaPuttY plink to create forwarded tunnels from various remote servers and accounts, all using key-based encryption.  This includes dynamic SOCKS 4/5 tunnels, VPN tun device tunnels, and of course the basic SSH port forwarding tunnels that are so powerful.  These tunnels are automatically reconnected if they are disconnected, using simple windows builtin command-line tools.  And believe me it was not easy to figure out how to make this all work using plink ( essentially the same as putty minus the gui ), I literally had to use almost all of my Windows kung fu to finally end up with this.</p>

<h2>Using MyEnTunnel</h2>
<p>Initially I was using the <a href="http://nemesis2.qx.net">MyEnTunnel</a> program combined with a custom windows batch install script I wrote to handle the tunnels.<br /><br />The tunnels are very important to making things easy while improving security.  It's not easy to understand at first, but basically it means <strong>you can now connect to ANY IP address:port as if you were on that very machine connecting to localhost, like if you pinged yourself!</strong>.  The result is any traffic you want is now encrypted, and you can set up your servers to only accept connections from localhost, which could save you tons of memory, bandwidth, and security attack vectors to think about.   So I configure everything to use these tunnels as proxies, like Mozilla Thunderbird and Chrome, Firefox, Pidgeon, all portable versions and running from my encrypted usb drive.</p>

<p>This means you can walk into my house with that usb key, plug into any computer here, and surf the web/check your emails all across SSH... I know for a fact <strong>I wouldn't be able to snoop that</strong> traffic!  There is a lot of exciting things going on around here, new servers and all.. Its going to take a couple more posts for me to finish this up, enjoy the article and comment.</p>



<h2>Buy a couple USB Mini Drives</h2>
<p>The first thing to do, is purchase a USB thumb drive..   My favorite store, <a href="http://www.tigerdirect.com/applications/category/category_slc.asp?Recs=30&amp;Nav=|c:379|lp:0.01:hp:24.99|&amp;Sort=4" title="Highly recommended, this is not an affiliate link">TigerDirect.com</a>, has over 104 tiny usb drives for under $24.. I've used them since the late 90's.</p>
<p>I bought some 4GB PNY's the size of a fingernail at a gas station and they are amazing, way faster than say a dvd drive.  Just try to do some research of the differences between the 16GB vs the $4 1GB drives.. You want speed because the whole drive will be encrypted.   <em>If you can afford the super excellent and crazy fast ones, hey send me one!</em> Buying cheap means you can buy 3 or 4 so you can always have backups.  This device will make you Internationally mobile, untethered from a box, maybe getting some work done at a cafe in Florenze, or at a beach hotel in Miami.  Keep dreaming, but that is more possible with a better organized system.</p>

<h3>Backup the USB Drive</h3>
<p>You only need to know 1 way that works, there are several.  The way I do backups is to copy the entire disk image of the usb, that way I can always access it in case of usb key failure, which does happen.  Free software like <a href="http://clonezilla.org/">CloneZilla live CD</a> with its crazy cluster computing power, or Self Image, which is free for both linux and Windows.  And you could never go wrong with <a href="http://www.symantec.com/norton/ghost">GHOST</a>, one of the first to make mega bucks in the market.. it's some seriously impressive software <em>but not open-source</em>.  Even easier for some is to just set a cron job for dd to pipe the entire drive image to a remote computer using netcat, or sshfs, or curlftpfs, or just <strong>simple ssh</strong> like below.  Once setup (without stupid, bulky, dangerous software), the files on your encrypted usb don't change often, otherwise I would want to sync a backup to happen automatically every X number of logins or days (<em>test logfile time in bash_profile?</em>)..</p>

<h4>SSH Back-ups To Remote Server</h4>
<p>Files and data on your drives slow it down tremendously, meaning a web server storing backups locally is slower than one storing them externally.</p>
<p>Notice how much safer this command is by optimizing both the <a href="http://www.askapache.com/linux/optimize-nice-ionice.html">CPU and DISK I/O</a>..  Though it's much smarter to create a new separate ssh user, one with no shell and a passwordless safer key-based encryption.  Then in your /etc/security/limits.conf file or your initscript you can cause that user to have <code>nice -19</code> and <code>ionice -c2 -n7</code> priority set all the time automatically, since sshd, compression, and disk writing are this accounts only job.  turboslow is an alias defined in a ssh_config file so you don't have to type the host, port, and settings each time.</p>
<pre>#
# much better ways to do this on google!!!!!!!
#
ionice -c2 -n7 nice -n 19 dd if=/dev/sdb2 bs=1k conv=sync,noerror | gzip -c | ssh turboslow "dd of=sdb2.gz bs=1k"</pre>
<p>Note that you may decide it would be better to configure the ssh connection to a less CPU intensive algorithm, perhaps even <em>protocol 1</em> and <em>DES</em>.  That's perfectly alright, but the tradeoff is that the encryption can be broken much quicker, and so you would have to implement a cron job to create new keys on both ends of the tunnel every few hours.. It's really not a big deal to setup, kind of sweet way to use key-based encryption.  Also, important files ( those containing passwords, any database ) are encrypted before transport using private GPG keys, which don't need to be changed.  The other thing to think about too is only letting your main PC send/write on the backup host, so the backup host is only authorized to rx and can never login back to yours. </p>
<p>Hey! the Internet is a dangerous place you better believe it!  And it's only going to get more interesting with cloud computing's breakthrough's... More people who know they're way around... I can always use an extra server, I'd love to expand my network another node without having to pay for it (free cloud computing?), so make sure your servers are locked up strenuously.  Not super perfect, just a little unique or creative in your defense to avoid any coming super-worm's that may be employing vast arsenals of the deadliest attack-engines like metasploit..  Scarry rumors.</p>

<h4>Compression Speeds: PBZip2, Rzip, Lzop, Gzip</h4>
<p>Probably the fastest is to use rsync over ssh, which is what I'm doing, since the algorithms used by rsync are much faster and safer.  <a href="http://www.askapache.com/security/mirror-using-rsync-ssh.html">Rsync also lets you specify a compression program</a>, so depending on your machine you will want pbzip2 (for multi processors) or rzip which are the 2 fastest I know of, though I have had some reliability issues with rzip for gigabyte transfers.  Pbzip2 is amazing, blew me away the first time being 8x faster (8 CPUs) then <strong>anything</strong>.  You can get it and compile a static binary for your thumb drive if want at <a href="http://compression.ca/pbzip2/">Parallel BZIP2 (PBZIP2)</a>. Heavy code, re: this note by Jeff Gilchrist</p>
<quote><strong>NOTE</strong>: If you are looking for a parallel BZIP2 that works on cluster machines, you should check out <strong>MPIBZIP2</strong> <strong>which was designed for a distributed-memory message-passing architecture</strong>.</quote>
<pre>tar cpf "$G" --use-compress-prog=pbzip2 ./</pre>
<p><a href="http://uploads.askapache.com/2010/02/pbzip2.gif"><img src="http://uploads.askapache.com/2010/02/pbzip2.gif" alt="Parallel BZIP2 (PBZIP2)" title="pbzip2" class="size-medium wp-image-4002" /></a></p>


<h4>Benchmarking for Performance</h4>
<p>Finally a couple tips, you should get an idea what the device can do, format it a few times for linux and test it on windows, and vice versa.. Some drives are too small or too old and can only support fat32 filesystems on winblows, you DO NOT want fat32 because this drive is going to be 100% encrypted and then 100% transparently decrypted as you use it,
<pre># note this is 512MB
dd if=/dev/sda1 of=/dev/null bs=512 count=1000000
512000000 bytes (512 MB) copied, 5.16588 s, 99.1 MB/s</pre>








<h2>Part II:  Encrypted AutoRunning USB Key with TrueCrypt</h2>
<p>Now this section anyone can do, it's so easy on Windows.   What I'm going to show you how to do is get setup the right way super-fast.  There are many ways to use TrueCrypt, it's one of the nicest built software programs's I've ever used... Sadly, it is not licensed open-source, and that is often a deal-breaker for security-conscious folks or anti-pirate anarchists.  From the very helpful TrueCrypt web site:</p>

<blockquote cite="">
<ul type="disc">
            <li>Creates a <strong>virtual encrypted disk</strong> within a file and mounts  it as a real disk. </li>
            <li>Encrypts an<strong> entire partition or storage device</strong> such as USB flash drive or hard drive.</li>
            <li>Encrypts a <strong>partition or drive where Windows is installed</strong> (<a href="http://www.truecrypt.org/docs/?s=system-encryption">pre-boot authentication</a>).</li>
            <li>Encryption is <a href="http://www.truecrypt.org/docs/"><strong>automatic</strong>, <strong>real-time</strong> (on-the-fly) and <strong>transparent</strong></a>.</li>
            <li> <a href="http://www.truecrypt.org/docs/?s=parallelization">Parallelization</a> and <a href="http://www.truecrypt.org/docs/?s=pipelining">pipelining</a> allow data to be read and written as fast as if the drive was not encrypted.</li>
            <li>Provides <strong><a href="http://www.truecrypt.org/docs/?s=plausible-deniability">plausible deniability</a></strong>, in case an adversary  forces you to reveal the password: <strong><a href="http://www.truecrypt.org/hiddenvolume">Hidden volume</a></strong> (steganography) and <strong><a href="http://www.truecrypt.org/docs/?s=hidden-operating-system">hidden operating system</a></strong>.</li>
            <li><a href="http://www.truecrypt.org/docs/?s=encryption-algorithms">Encryption algorithms</a>: <a href="http://www.truecrypt.org/docs/?s=aes">AES-256</a>, <a href="http://www.truecrypt.org/docs/?s=serpent">Serpent</a>, and <a href="http://www.truecrypt.org/docs/?s=twofish">Twofish</a>.  Mode of operation: <a href="http://www.truecrypt.org/docs/?s=modes-of-operation">XTS</a>.</li>
        </ul>

</p>
</blockquote>





<h2>Further Reading</h2>
<ul>
<li><a href="http://ultra.ap.krakow.pl/~bar/DOC/ssh_backup.html">Network File Copy using SSH</a></li>
<li>Check out the trunk version of PuTTY:<code>~ svn co svn://svn.tartarus.org/sgt/putty</code>
</ul>





<hr class="C" />
<p>The real fun doesn't start till all the automation starts, automating all of that from a couple batch files I wrote, one click setup.  Kind of like building your own knoppix for when you have to use Windows.  To begin this tutorial, setup a truecrypt traveller setup on your usb and also install the portaputty package onto the usb.  You do this by creating a 3GB or whatever file on the usb and then mounting that file like you would mount an iso file.   I will show the Windows Batch file I use and the tricks with Windows Volume names and how to consistently make it all work.   Then we will setup MyEnTunnel with a customized batch file that forces all puttys to use portaputty (<code>sweet hack stolen from sysinternals pagedefrag tool</code>).<strong>Stay Tuned!</strong></p><p><a href="http://www.askapache.com/hacking/ssh-tunnels-truecrypt-gpg.html"></a><a href="http://www.askapache.com/hacking/ssh-tunnels-truecrypt-gpg.html">PortaPutty Auto-Reconnecting SSH Tunnels on an Encrypted TrueCrypt Portable USB Key w GPG</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/hacking/ssh-tunnels-truecrypt-gpg.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Optimize a Website for Speed, Security, and Easy Management</title>
		<link>http://www.askapache.com/hosting/optimize-website-files-cache-security.html</link>
		<comments>http://www.askapache.com/hosting/optimize-website-files-cache-security.html#comments</comments>
		<pubDate>Fri, 19 Feb 2010 01:45:26 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Hosting]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=1380</guid>
		<description><![CDATA[<p><a href="http://www.askapache.com/htaccess/optimize-website-files-cache-security.html" class="IFL hs hs37" title="Discover how to setup and manage a website from top to bottom for optimized speed, security, and simplicity"></a>Learn how to setup, configure, secure, optimize, and create a low-maintenance website the AskApache way.  I'm piecing together all the hacks, tricks, methods, and ideas discussed throughout this blog and all across Netdom and glueing them all together to show you how to have the most optimized, crazy fastest, and best website setup I can think of.<br class="C" /></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/hosting/optimize-website-files-cache-security.html"></a><a href="http://www.askapache.com/hosting/optimize-website-files-cache-security.html"><cite>AskApache.com</cite></a></p><p><img class="IFL" src="http://uploads.askapache.com/2008/09/computerimg.jpg" alt="optimized server setup" title="optimized server setup" />Over the past 10 or so years I've been directly or indirectly involved in configuring/administrating/hacking thousands of websites, and I realized today that I've actually learned quite a bit about how to really make them work hard for me, instead of the other way around. It came as a mild shock to think of where I was back then vs. now because the improvements and optimizations are hundreds of smaller improvements, but taken together, the  optimization hacks I've found through trial and error and much reading are as Donald would say, <strong>YOOUUGE</strong> compared to a basic website setup.<br class="C" /></p>

<p class="cnote">I use this awesome skeleton setup for all my high-paying clients <em>sorry poor people!</em> and also of course on this blog, which I use as a bleeding-edge dev server for my crazy testing.  So realize that I'm already past this setup and using it to do cooler stuff.  In order for you to use these more advanced ideas, you first need to get up to speed on what I'm doing so you know what I'm talking about.  This article tries to help you accomplish that... remains to be seen.</p>


<h2>An Optimized Website, The Real Deal</h2>
<p>This first article is to give you some ideas and get you thinking and reading before the first article in this series comes out.  This series details how to setup, configure, secure, optimize, and manage a website the best possible way I can come up with.  It pieces together all the AskApache hacks and tricks and uses methods and ideas discussed all over this blog and all over the net and glues them all together to show you how to have the most optimized, fastest, best website setup I can think of.</p>
<p>Knowing the why and how behind the operation of a Web Server allows us to optimize that operation.  For this example we will be creating the website <code>www.askapache.com</code>, which will be running WordPress and php.  We will also set up <code>static.askapache.com</code> to serve all of our sites uploads, images, css and javascript files, flash files, etc. with advanced caching and security using Apache Server .htaccess files.  So lets get started and take a look at this site structure for a moment.</p>

<pre>/home/askapache.com
|-- /home/askapache.com/backups/
|-- /home/askapache.com/public_html/
|-- /home/askapache.com/inc/
|-- /home/askapache.com/logs/
|-- /home/askapache.com/static/
|-- /home/askapache.com/tmp/
|-- /home/askapache.com/.htpasswd-basic
`-- /home/askapache.com/.htpasswd-digest</pre>


<ul>
<li><code>/backups/</code> - For <a href="http://www.askapache.com/wordpress/encrypted-wordpress-site-backups.html">encrypted backups of WordPress database and site files</a>. And any other backups.</li>
<li><code>/public_html/</code> - The document root for <code>www.askapache.com</code></li>
<li><code>/inc/</code> - Folder to keep your php include files for extra security and easy management.</li>
<li><code>/logs/</code> - Save your php, apache, and other logs here or create symlinks to them.</li>
<li><code>/static/</code> - The document root for <code>static.askapache.com</code></li>
<li><code>/tmp/</code> - Only need this if your host doesn't already have a /tmp folder</li>
</ul>
<hr class="HR0" />



<h2>Strong Security, Top to Bottom</h2>
<p><img class="IFL" src="http://uploads.askapache.com/2008/09/1023103_warning_icon_32.jpg" width="150" alt="Optimize a Website for Speed, Security, and Easy Management" title="Site Security with Apache" />Simply by implementing correct access permissions, file permissions, password protection and segmenting various folders and services we are already ahead of the game.  I've always taken security extremely seriously, so you can benefit from alot of the simple solutions I'm recommending for a really locked down site.<br class="C" /></p>
<p>Indeed, security is a major part of every step of this setup process, as security concerns are what drives a lot of the motivations I have for coming up with this setup in the first place.  We will be doing very simple but very effective site security like the following items, which is a short list compared to everything we will be doing.</p>
<ul>
<li>Fixing file permissions automatically</li>
<li>Searching for modified files on the server</li>
<li>Encrypting your backups</li>
<li>Get alerted to breakin attempts</li>
<li>Block tons of bad clients</li>
<li>Disallowing cgi scripts or any other handlers, just serve files.</li>
<li>Configuring PHP</li>
<li>Password Protection for certain areas</li>
</ul>

<h3>Ready for Warfare?</h3>
<p>My past work for an Internet Service Provider, followed by 4 years of auditing the security of organizations external/internal networks has given me a fresh perspective on website security, and I think it allows me to see what would really be effective at preventing and killing attacks.  In fact just last night I was once again doing some research into some off-the-wall security topics, and I discovered a new defense method that I will be writing about very soon.  I believe that this new method,  could be quickly adopted and implemented by hosting providers and software developers, which would result in us finally taking the Internet back from all those zombies and robots.  This method will be discussed in great detail soon, and will be a core part of this site setups security and optimization.</p>
<hr class="HR0" />


<h2>Built to <span style="color:red">Bleed Speed</span></h2>
<p><img class="IFL" src="http://uploads.askapache.com/2008/09/speedontheroadimg.jpg" width="150" alt="Optimize a Website for Speed, Security, and Easy Management" title="326255_speed_on_the_road" />Serve's files as fast and efficiently as possible using advanced caching, HTTP Protocols, php/server configurations.<br class="C" /></p>
<p>Many of the articles and research on this blog is about improving the speed and efficiency of your website.  In fact that is why I am helping develop open-source software to block spammers from WordPress blogs... not because I'm bothered by the spam, but because they make the net slow!  So lets look at some of the ideas we'll be implementing.</p>

<p>Many techniques I've been using and tweaking for several years, and recently many of them were included in the high-performance websites list.  Of course we will be taking a look at this list in practical terms, meaning almost all of it, the caching, compression, etc., will be automated in keeping with our "comfort" goal, which is to say we want to make the Web Developer and Server Admin's lives as easy and comfy as possible.  After all, we do the work right?</p>
<ol>
<li>Reduce HTTP requests - <a href="http://www.askapache.com/htaccess/speed-up-sites-with-htaccess-caching.html" title="304 If Modified article">Reducing 304 requests with Cache-Control Headers</a></li>
<li>Use a customized php.ini - <a href="http://www.askapache.com/php/custom-phpini-tips-and-tricks.html">Creating and using a custom PHP.ini</a></li>
<li>Add an Expires header - <a href="http://www.askapache.com/htaccess/speed-up-your-site-with-caching-and-cache-control.html#caching-with-mod_expires" title="mod_expires Caching article">Caching with mod_expires on Apache</a></li>
<li>Gzip components</li>
<li>Make CSS and unobtrusive Javascript as external files not inline</li>
<li>Reduce DNS lookups - Use Static IP address, use a subdomain with static IP address for static content.</li>
<li>Minimize Javascript - Refactor the code, compress with dojo</li>
<li>Avoid external redirects - <a href="http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html" title="mod_rewrite internal redirection and rewrites">Use internal redirection with mod_rewrite</a>, <a href="http://www.askapache.com/htaccess/301-redirect-with-mod_rewrite-or-redirectmatch.html" title="301 Redirect with mod_rewrite or RedirectMatch">The correct way to redirect with 301</a></li>
<li>Turn off ETags - <a href="http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html#prevent-caching-with-htaccess">Prevent Caching with htaccess</a></li>
<li>Make AJAX cacheable and small</li>
</ol>

<h3>AskApache.com, Fastest Site Ever!</h3>
<p>Ok it <em>might</em> not be the #1, but surely the top 10.. ;)</p>
<p>I'm very proud of the performance I am able to achieve on this site.  Very proud.  I started looking for ways to improve the wp-cache and wp-super-cache WordPress plugins, and came up with hacks for both of them.. but they still didn't do what I wanted so I started from scratch and wrote my own caching plugin.</p>
<p>With much more advanced caching options and unquestionably higher performance and lower time usage on the machine.  I'm hesitant to release it to the public until I get faded on it.. I just really love it.. it has been running my site for several months now and I keep finding ways to improve it.. Stay tuned.</p>
<p>One feature it has is the ability to allow negotiation of a resource between apache and the client.  Think almost transparent mutli-lingual blogs, mutliple formats per document (look at the rdf for this page for an example*). But that plugin is the future and this is the present.. so back to it we go.</p>
<hr class="HR0" />



<h2>Pamper the Webmaster with Extreme Comfort</h2>
<p><img class="IFL" src="http://uploads.askapache.com/2008/09/wwwonthebeachimg.jpg" width="150" alt="Optimize a Website for Speed, Security, and Easy Management" title="Low Maintenance Web Development" />This section alone would make this setup appealing.  I have developed all types of techniques and methods to make my life as easy as possible.  I could literally DIE right now and this blog would continue to run and operate for years on its own.   The general philosophy that I have used to get to where I can goto the beach with my laptop and do all this crazy stuff is <strong>the idea of perfection</strong>.  That may sound a little put-offish, but it basically means I will focus in on one very specific area for improvement or research and just get sick with it.  Most of this blogs articles are enlightening examples of this in action.  I will take a relatively unknown or unused piece of code or software and experiment with it until I feel I have it down, then I move on to the next item of never-ending research.  Mostly I think this is just plain habit from when I was studying security.  I'm much better at this then that :)</p>

<h3>Apache ErrorDocuments</h3>
<p>The <a href="http://www.askapache.com/htaccess/apache-status-code-headers-errordocument.html">57 HTTP Status Codes and Apache ErrorDocuments</a> article is a prime example.  I was simply searching for an authoritative list of HTTP status codes, an issue not many web people find worth their time, and that search led to some of the most useful stuff I've found about the Web<br /><br />This "Comfort" article will include multi-language, intelligent, and optimized error documents for handling any type of HTTP error with class and allow us to stop spammers, save bandwidth, redirect correctly, etc..  You will probably be surprised at all the uses an Apache ErrorDocument can have.. It IS one of the foundations of the HTTP-based Net after all.<br class="C" /></p>

<h3>Emphasis on Easy Upgrades</h3>
<p>The whole setup is geared to make hassle-free WordPress/PHP/application upgrades possible by keeping different types of files in separate places, keeping backups, other misc tricks and since all of these files are in /home/askapache.com, your FTP connection can still access every file easily.  Sometimes security and optimizing your server can lead to it being more of a pain to do updates, backups, and general maintenance.  This article tries to overwhelm the balance with a trifecta of goals.</p>

<h3>Move to a new host? Ok!</h3>
<p>Comfort to me also means being able to pack up the whole website and database and move to another web host in under an hour.  I can move the whole AskApache site to one of several other hosting providers accounts I have in about 30minutes.  If this was a clients site or I was getting paid more, I'd also be focused on round-robin DNS technology, balance-load setups, and just go crazy making it fast.</p>

<h3>Staying Online, Improving Uptime</h3>
<p>Ever since I started sharing information and software to stop all these resource hogging zombies attacking everything I've been attacked several times.  Normally I get over 10K exploit attempts or requests per day, which I pretty much block 100%.  But a few times they've actually tried to DDOS me off the net in a distributed attack.  I have implemented several "poor mans" techniques to put up your best effort at surviving, which I did.  Basically you want to configure your server to KILL connections just as fast as possible and prevent your server resources from skyrocketing and surpassing your quotas.  A skilled attacker could easily shut you down even without the use of a widespread botnet if they are clever, which could be devastating to your small blog or site if it goes down at a crucial instant.</p>
<hr class="HR0" />





<h2>Organization with Templates and Systems</h2>
<p>I used to work with a guy who did alot of the coldfusion programming for us, and I used to cringe every  time I was called in to upgrade a site or do a re-design.  Files and folders EVERYWHERE!  Literally images in every folder, multiple index.html, index1.html, index-old.html, and on and on it went.. It would take me hours just to reverse-engineer the site enough so I could modify files on it without having some unkown consequence happen.</p>

<h3>Do You Have a Cluttered Desktop?</h3>
<p>Everyone has this problem, what I do all the time is just grab everything on my desktop and put it in a folder named with the date.  Then the process repeats itself and invariably a few months later I'm looking at a cluttered screen again.</p>

<p>This absolutely is the worst thing that can happen to a website, worst for security, comfort for webmaster, and speed.  So this setup addresses that issue completely heads on.  With all the different pages, tools, and resources available on this blog, I can almost promise you that my site has less files than yours.  No small feat to be sure, but worth every second I spent researching how to do it now that its on and popping.</p>
<hr class="HR0" />




<h2>What's a Website really?</h2>
<p>All hosts are different, but any host worth their salt is running some kind of <a href="http://www.askapache.com/linux/">BSD/Linux</a> operating system, and that is good news because those operating systems all use very similarly excellent file/folder structures with huge organization systems.  If your web hosting provider is running on a Windows based operating system or other locked/proprietary software than this article is not for you and I would recommend switching hosts to a BSD/Linux open-source operating system.</p>

<h3>Listening for Requests with Web Hosting and DNS</h3>
<p>First you set your website up so it can start serving.</p>
<ol>
<li>You buy your domain name, which just gives you the right to use it.</li>
<li>You pay your webhost for an account on their machine running a Server connected to the Net <em>via a fast connection link</em>.</li>
<li>You pay a DNS provider to redirect requests for your domain  name to be sent to your webhosts machine running the server.</li>
</ol>



<h2>Sub-Domain for Serving Assets</h2>
<p>This is a very cool method I've been using more and more frequently because it makes updates, upgrades, and changes so much easier to manage.  And segmenting various parts of the site is smart security, and even smarter in the way of speeding up a website and keeping your <strong>servers running mean and lean</strong>.</p>

<h2>Full Site Structure Expanded</h2>
<pre>/home/askapache.com
|-- /home/askapache.com/backups/
|-- /home/askapache.com/public_html/
|   |-- /home/askapache.com/public_html/about/
|   |-- /home/askapache.com/public_html/admin/
|   |-- /home/askapache.com/public_html/cgi-bin/
|   |-- /home/askapache.com/public_html/.htaccess
|   |-- /home/askapache.com/public_html/index.php
|   `-- /home/askapache.com/public_html/robots.txt
|-- /home/askapache.com/inc/
|   |-- /home/askapache.com/inc/config.inc.php
|   `-- /home/askapache.com/inc/settings.inc.php
|-- /home/askapache.com/logs/
|   |-- /home/askapache.com/logs/access.log
|   |-- /home/askapache.com/logs/error.log
|   |-- /home/askapache.com/logs/logins.log
|   |-- /home/askapache.com/logs/modsec_audit.log
|   |-- /home/askapache.com/logs/modsec_debug.log
|   `-- /home/askapache.com/logs/php_error.log
|-- /home/askapache.com/static/
|   |-- /home/askapache.com/static/css/
|   |-- /home/askapache.com/static/flv/
|   |-- /home/askapache.com/static/img/
|   |-- /home/askapache.com/static/js/
|   |-- /home/askapache.com/static/mp3/
|   |-- /home/askapache.com/static/pdf/
|   |-- /home/askapache.com/static/swf/
|   |-- /home/askapache.com/static/.htaccess
|   |-- /home/askapache.com/static/index.html
|   `-- /home/askapache.com/static/robots.txt
|-- /home/askapache.com/tmp/
|-- /home/askapache.com/.htpasswd-basic
`-- /home/askapache.com/.htpasswd-digest</pre>


<h2>Full Expanded Structure</h2>
<pre>/home/askapache.com
|-- /home/askapache.com/backups/
|-- /home/askapache.com/public_html/
|   |-- /home/askapache.com/public_html/about/
|   |   `-- /home/askapache.com/public_html/about/index.html
|   |-- /home/askapache.com/public_html/admin/
|   |   |-- /home/askapache.com/public_html/admin/.htaccess
|   |   `-- /home/askapache.com/public_html/admin/index.html
|   |-- /home/askapache.com/public_html/cgi-bin/
|   |   |-- /home/askapache.com/public_html/cgi-bin/bin/
|   |   |   |-- /home/askapache.com/public_html/cgi-bin/bin/.htaccess
|   |   |   |-- /home/askapache.com/public_html/cgi-bin/bin/php.cgi*
|   |   |   |-- /home/askapache.com/public_html/cgi-bin/bin/php.ini
|   |   |   |-- /home/askapache.com/public_html/cgi-bin/bin/php4.cgi*
|   |   |   `-- /home/askapache.com/public_html/cgi-bin/bin/php5.cgi*
|   |   |-- /home/askapache.com/public_html/cgi-bin/private/
|   |   |   |-- /home/askapache.com/public_html/cgi-bin/private/.htaccess
|   |   |   |-- /home/askapache.com/public_html/cgi-bin/private/debug.php
|   |   |   `-- /home/askapache.com/public_html/cgi-bin/private/stats.php
|   |   |-- /home/askapache.com/public_html/cgi-bin/.htaccess
|   |   |-- /home/askapache.com/public_html/cgi-bin/login.php
|   |   |-- /home/askapache.com/public_html/cgi-bin/printenv.cgi*
&nbsp;
|   |   `-- /home/askapache.com/public_html/cgi-bin/redir.cgi*
|   |-- /home/askapache.com/public_html/.htaccess
|   |-- /home/askapache.com/public_html/index.php
|   `-- /home/askapache.com/public_html/robots.txt
|-- /home/askapache.com/inc/
|   |-- /home/askapache.com/inc/config.php
|   `-- /home/askapache.com/inc/functions.php
|-- /home/askapache.com/logs/
|   |-- /home/askapache.com/logs/access.log
|   |-- /home/askapache.com/logs/error.log
|   |-- /home/askapache.com/logs/logins.log
|   |-- /home/askapache.com/logs/modsec_audit.log
|   |-- /home/askapache.com/logs/modsec_debug.log
|   `-- /home/askapache.com/logs/php_error.log
|-- /home/askapache.com/static/
|   |-- /home/askapache.com/static/css/
|   |   `-- /home/askapache.com/static/css/apache.css
|   |-- /home/askapache.com/static/flv/
|   |   `-- /home/askapache.com/static/flv/apache.flv
|   |-- /home/askapache.com/static/img/
|   |   |-- /home/askapache.com/static/img/apache.gif
|   |   |-- /home/askapache.com/static/img/apache.jpg
|   |   `-- /home/askapache.com/static/img/apache.png
|   |-- /home/askapache.com/static/js/
|   |   `-- /home/askapache.com/static/js/apache.js
|   |-- /home/askapache.com/static/mp3/
|   |   `-- /home/askapache.com/static/mp3/apache.mp3
|   |-- /home/askapache.com/static/pdf/
|   |   `-- /home/askapache.com/static/pdf/apache.pdf
|   |-- /home/askapache.com/static/swf/
|   |   `-- /home/askapache.com/static/swf/apache.swf
|   |-- /home/askapache.com/static/.htaccess
|   |-- /home/askapache.com/static/index.html
|   `-- /home/askapache.com/static/robots.txt
|-- /home/askapache.com/tmp/
|-- /home/askapache.com/.htpasswd-basic
`-- /home/askapache.com/.htpasswd-digest</pre>

<h2>Merchant Account Services</h2>
<p>If you want to make it easier for your customers to shop at your site, check out <a href="http://www.networksolutions.com/merchant-accounts/index.jsp" title="Merchant Account Services from Network Solutions">merchant account services</a> from Network Solutions. Services like these can help bring credibility and security to your online business.</p>

<h2>Apache is Open-Source</h2>
<p>The buzz about apache and open-source is very real, apache is becoming more of a discussed topic as people realize the power and importance of <q cite="LL Cool J">Doing it and Doing it and Doing it well.</q> -  <small><a href="http://www.webmonkey.com/blog/Jumpbox_Offers_an_Easier_Way_to_Install_Movable_Type">Movable Type Apache Installs made easy</a>, <a href="http://www.ubuntugeek.com/webalizer-apache-web-server-log-file-analysis-tool.html">Checking out Apache Web logs</a>, <a href="http://eventurebiz.com/blog/securing-securing-your-wordpress-blog-post-6-protecting-the-wp-configphp-file/">Securing WordPress with .htaccess</a>, <a href="http://marketingdefined.com/blog/wordpress/using-wordpress-permalink-redirect-plugins-correctly/">WordPress Permalinks and .htaccess</a>, <a href="http://corpocrat.com/2008/09/19/install-apache-mod_substitute/">New search and replace module for apache!</a>, <a href="http://www.csskarma.com/blog/creating-an-htaccess-template/">creating an .htaccess template</a>, <a href="http://www.thelinuxblog.com/htaccess-allow-from/">.htaccess allow directive</a></small></p>

<p class="anote">Check back in a week for the first article, or better yet subscribe to my <a href="http://www.askapache.com/feed/">rss feed</a> or use the comment form below to get notified.</p><p><a href="http://www.askapache.com/hosting/optimize-website-files-cache-security.html"></a><a href="http://www.askapache.com/hosting/optimize-website-files-cache-security.html">Optimize a Website for Speed, Security, and Easy Management</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/hosting/optimize-website-files-cache-security.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Firefox Add-ons for Web Developers</title>
		<link>http://www.askapache.com/hacking/firefox-addons-webdev.html</link>
		<comments>http://www.askapache.com/hacking/firefox-addons-webdev.html#comments</comments>
		<pubDate>Mon, 19 Oct 2009 00:14:07 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Hacking]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=3301</guid>
		<description><![CDATA[<p><a href="http://www.askapache.com/firefox/best-firefox-addons-webdev.html" class="IFL"><img src="http://uploads.askapache.com/2009/10/askapache-firefox-cache-116x102.png" alt="askapache favorite addons" title="askapache favorite addons" width="116" height="102" /></a><a href="https://addons.mozilla.org/en-US/firefox/collection/advanced-webdevelopment">Advanced Web Development by AskApache</a> is a <dfn title="Collections are groups of related add-ons assembled for easy sharing">Firefox Collection</dfn> I created since I'm always trying new Addons out and using multiple computers and I wanted a quick and easy way to install my favorite's and keep a running list.  Firebug, YSlow, LastPass, and Web Developer are the only ones I always use regularly.<br /><br />I like the idea of the last.fm but it's not as powerful as the site, which is awesome.  <em>Lately listening to <a href="http://www.last.fm/listen/artist/Kings%2Bof%2BLeon/similarartists">Kings of Leon Radio</a>...</em><br class="C" /></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/hacking/firefox-addons-webdev.html"></a><a href="http://www.askapache.com/hacking/firefox-addons-webdev.html"><cite>AskApache.com</cite></a></p><p><a class="IFL" href="https://addons.mozilla.org/en-US/firefox/collection/advanced-webdevelopment"><img src="https://addons.mozilla.org/en-US/firefox/images/collection_icon/27412/1253649941" title=" hacking" alt="Firefox Add ons for Web Developers" /></a><a href="https://addons.mozilla.org/en-US/firefox/collection/advanced-webdevelopment">Advanced Web Development by AskApache</a> is a <dfn title="Collections are groups of related add-ons assembled for easy sharing">Firefox Collection</dfn> I created for myself to make finding and installing my favorite Firefox Add-ons simple and easy.</p>

<h2>My Setup</h2>
<p><img class="IFL" src="http://uploads.askapache.com/2009/10/askapache-firefox-cache.png" alt="askapache favorite addons" title="askapache favorite addons" width="283" height="250" />As this screenshot shows, I only use a handful of add-ons at a time.  These buttons allow me to clear the DNS/Cookies/Cache for whichever site I'm on when I click it.  Very very helpful for me as a web designer.  The 4th button there is just a restart button.  Other than those, Firebug, YSlow, LastPass, and Web Developer are the only ones I always use regularly.<br /><br />I like the idea of the last.fm but it's not as powerful as the site, which is awesome.  Lately I've been listening to <a href="http://www.last.fm/listen/artist/Kings%2Bof%2BLeon/similarartists">Kings of Leon Radio</a>... <br class="C" /></p>

<h2>Slow Firefox</h2>
<p><strong>The more add-ons you have</strong>, disabled or not, the slower Firefox is. (<em>unless you are running your profile folder in TMPFS</em>).   Also, bookmarks and settings like that have a performance hit.  I have been using Firefox since it launched way back when, and I have always kept my bookmarks when moving to new machines and new installations..  So with over 5 thousand bookmarks I finally did some debugging and discovered that was a huge cause of Firefox acting slow.  Now I am trying to migrate them all over to Google's Gmarks, which knowing Google will be awesome eventually.</p>

<h2>Multiple Firefox Installations, Sorta</h2>
<p>The solution to all these problems is to use <strong>separate Firefox profiles</strong> which use separate folders to store your profile-specific extensions and settings.  So I have profiles with upwards of 40 Addons installed and enabled, and another profile that is built for speed... It's very very slow to be running Firebug and have multiple tabs open..  You can use the profilemanager to load them specific profiles from the command line.  I personally use separate icons on my Windows Quick Launch that I just modified the shortcut pointing to firefox to also have the profile commandline.   Note also that you can have multiple profiles open and running simultaneously.. This lets you do some crazy networking and other random hacks like having many Firefox instances running each of which is configured to use a separate SOCKS Proxy or network interface, so you can really open up those pipes for some intense txrx.</p>
<p>You can do some very powerful things with Firefox that most people are unaware of, if you are interested start with these:</p>
<ul>
<li><a href="https://developer.mozilla.org/en/Setting_up_extension_development_environment">Setting up an extension development environment</a></li>
<li><a href="https://developer.mozilla.org/en/Command_Line_Options">Firefox Command Line Options</a></li>
</ul>
<hr class="C" />


<h3>About This Collection</h3>
<p>Web Development Add-ons for Advanced Web Developers.  I personally use these to work on Sites, Servers, WordPress, Javascript, PHP, CSS, XHTML, validation, page-loading, SEO, optimizing, and much more.  <a href="https://addons.mozilla.org/en-US/firefox/users/login?to=en-US%2Ffirefox%2Fcollection%2Fadvanced-webdevelopment%3Fadvancedsearch%3D1%26show%3D100">Add this collection</a>.</p>
<p><strong>Created by:</strong><a href="https://addons.mozilla.org/en-US/firefox/user/145961">AskApache</a></p>
<p><strong>Updated:</strong>September 22, 2009 </p>


<h3>Share this Collection</h3>
<ul>
    <li class="digg"><a href="https://addons.mozilla.org/en-US/firefox/collections/share/advanced-webdevelopment?service=digg">Digg this!</a></li>
    <li class="facebook"><a href="https://addons.mozilla.org/en-US/firefox/collections/share/advanced-webdevelopment?service=facebook">Post to Facebook</a></li>
    <li class="delicious"><a href="https://addons.mozilla.org/en-US/firefox/collections/share/advanced-webdevelopment?service=delicious">Add to Delicious</a></li>
    <li class="myspace"><a href="https://addons.mozilla.org/en-US/firefox/collections/share/advanced-webdevelopment?service=myspace">Post to MySpace</a></li>
    <li class="friendfeed"><a href="https://addons.mozilla.org/en-US/firefox/collections/share/advanced-webdevelopment?service=friendfeed">Share on FriendFeed</a></li>
    <li class="twitter"><a href="https://addons.mozilla.org/en-US/firefox/collections/share/advanced-webdevelopment?service=twitter">Post to Twitter</a></li>
</ul>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/13316?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">History Tree</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/13316/1254409345" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Find any page you have visited quickly and easily. Shows your browsing history as a tree of tabs, with thumbnail screenshots of the web-pages in every tab you have opened. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/4882?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Tab Scope</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Preview and navigate tab contents through popup. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1480?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Tab Control</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Take control of your tabs!  Purposely lightweight extension with the following features... <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/5000?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">ShareThis</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/5000/1248389010" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />ShareThis makes sharing any online content quick and easy. The ShareThis plugin allows you to share to any contact via email, text message, Facebook, Twitter and more.  You can also store your shares for later to reshare with the ShareThis ShareBox. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
	<h4><a href="https://addons.mozilla.org/en-US/firefox/addon/12377?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FirePalette</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/12377/1244736178" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Adds a color picker to Firebug's CSS panel. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/13000?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Tab History Menu</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/13000/1252809752" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />When click on the selected tab, a history menu corresponding to it will display. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/8426?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">SyncPlaces</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/8426/1252087590" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Synchronizes your bookmarks, passwords and password exceptions between browsers. Uses your own (or third party) web or ftp server so you have complete control and privacy. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/10704?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">CSS Usage</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/10704/1255464704" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Firebug extension to view which CSS rules are actually used. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/9641?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Inline Code Finder for Firebug</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/9641/1246025189" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Inline Code Finder is an add-on to Firebug, to be able to find HTML elements<br class="C" /></p>
    <blockquote class="publisher-comment"><p>Provides some additional capabilities to firebug to find inline code as opposed to external files.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/4723?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Save Complete</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Saves a webpage completely, providing a better alternative to the flawed built-in save functionality of Firefox. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Another of my personal favorites, modifies the "Save complete page" option of firefox to truly be more complete, I don't understand why firefox doesn't already do this.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/10615?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FireDownload</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/10615/1249999245" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />The FireDownload extension for Firefox and Wyzo lets you manage and accelerate your web downloads up to 10x faster! With FireDownload, download acceleration is seamlessly displayed within the downloads window. Try the ultimate download accelerator! <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Pretty nice and unobtrusive download enhancer.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/13255?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Xmarks BYOS Edition</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/13255/1248393038" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Bookmark Sync "Bring Your Own Server" Edition (BYOS). For expert users who wish to sync their bookmarks and passwords using their own FTP or WebDAV server. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/13128?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FormBug</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />An extension to Firebug to make dealing with forms easier <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/13135?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Widerbug</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/13135/1247888469" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Firebug Evolved. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/11588?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">SyntaxHighlighter</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />a syntax highlighter, based on SyntaxHighlighter(http://code.google.com/p/syntaxhighlighter/), support lots of program languages. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Adds syntax highlighting, somewhat intensive.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2318?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Total Validator</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/2318/1252747670" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Perform multiple validations and take screen shots in one go. This 5-in-1 validator works with external, internal, or local web pages using the Total Validator service or local copy of the desktop tool... <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/115?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">ReloadEvery</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/115/1250716156" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Reloads web pages every so many seconds or minutes. The function is accessible via the context menu (menu you get when you right click on a web page) or via a drop down menu on the reload button ... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Love this plugin, replaces the reload button with a look-alike button with a drop-down menu that lets you enable automatic reloading of a tab (or all tabs) and set the number of seconds between reloads.  I've found it very useful for checking cookie behaviour and cache setups, its also nice if you want to keep checking a page for updates.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1985?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Window Resizer</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Resize your browser to various standard resolution sizes... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Quickly resize your window to the common sizes to see what a site looks like for users with that resolution.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/4415?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Font Finder</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Get all CSS styles of selected text in Firefox / Thunderbird... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Locate the fonts that are in use on a webpage.  Small and unobtrusive.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/12632?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FireQuery</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/12632/1248402877" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Firebug enhancements for jQuery (requires Firebug 1.3+) <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Adds jquery support, I usually keep disabled even though I personally use jquery for web development.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/5362?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Alexa Sparky</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/5362/1255562428" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Alexa Internet's official add-on for Firefox!  Get Alexa data in your status bar. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Shows the alexa rank of a site, I like it but it does make new HTTP requests for each page, so I disable it alot for privacy or speed.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/5392?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Dust-Me Selectors</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/5392/1246551563" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Finds unused CSS selectors. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>One of the newer add-ons I've been using.  Lets you find which CSS rules are actually in use on a page, thus helping you to minimize and streamline CSS.  Very cool but it is a little resource intensive so by default I keep it disabled.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/11249?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">ToggleUseDocColors</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Toggles Tools-&gt;Options-&gt;Content-&gt;Colors:Allow pages to choose their own colors... option with a single keystroke (Ctrl+M) <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Use the documents colors or other.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3606?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FoxTor</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />FoxTor: Anonymous Web Browsing using the encrypted TOR network... <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/10434?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Bing</a></h4>
    <p> <img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/10434/1247527217" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />This is the only officially supported Bing add-on, provided by the Bing team in Microsoft. Bing is a search engine that finds and organizes the answers you need so you can make faster, more informed decisions. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/9640?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Inline Code Finder</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/9640/1245858044" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Inline Code Finder is a tool to traverse through all elements in a web page, and when it finds a HTML element with any of these, it will highlight them: * Inline JavaScript events * Inline style * javascript: links <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2648?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">MM3-ProxySwitch</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/2648/1233685187" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />In the Firefox Browser (and other Mozilla programs) you can per default configure only the setting for one internet connection. With the MM3-ProxySwitch you can manage different configurations and simply switch over between these. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>If like me you often connect to websites by proxying firefox through SSH Tunnels, then you can use this MM3-ProxySwitch add-on to run 3 different instances of firefox (by using multiple firefox profiles) that EACH use a different Proxy.  This is useful if you want to MAX out your download speed by downloading using multiple tunnels to do the work. <br />
            <br />
            Also useful for just plain multiple proxy configurations, very easy, and super extremely unobtrusive and low-resource intensive.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6683?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Firecookie</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/6683/1251484013" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Firecookie is an extension for Firebug that makes possible to view and manage cookies in your browser <br class="C" /></p>
    <blockquote class="publisher-comment"><p>One of my personal favorites, adds a tab to firebug that lets you view live cookies being set, deleted, and updated, and lets you edit, and delete cookies of a page LIVE.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/9780?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">RESTClient</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/9780/1250817670" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />RESTClient is a firefox extension use to visit and test RESTful/WebDav services. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/5403?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Java Console 6.0.02</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/5403/1189002765" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Java Console Extension for Java SE 1.6.0_02 (version 6 update 2). <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2325?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">RSS Ticker</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />RSS Ticker loads your Live Bookmarks and scrolls their entries across your screen while you surf. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Amazingly awesome add-on that scrolls rss feeds across a small area, helpful to keep track of various feeds and your own sites feeds.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6535?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Tab Sidebar</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/6535/1244499111" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Displays previews of your tabs in your sidebar. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>I like this one more than the tab preview add-ons, lets me find a tab quickly but only when I want by opening the sidebar.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/12065?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">CryptoFox</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/12065/1255638751" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />CryptoFox is an encryption/decryption tool for Mozilla Firefox, with dictionary attack support for cracking MD5 passwords. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/9027?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Bookmark Current Tab Set</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Adds options to quickly bookmark all tabs in a window and store them in a bookmark folder that is given the date (and optionally the time) as its name. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3362?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Update Scanner</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/3362/1252360045" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Monitors web pages for updates. Useful for websites that don't provide Atom or RSS feeds. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/139?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Image Zoom</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/139/1231445959" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Adds zoom functionality for images... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Simple image zooming functionality.  Small and useful add-on.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3780?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FaviconizeTab</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/3780/1218612666" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />This extension adds a new "FaviconizeTab" option to the context menu of the tab... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Nice to Faviconize your most-often-used sites</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2489?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">CacheViewer</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />This extenion is GUI Front-end of "about:cache"... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Just a shortcut to the about:cache area.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6366?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FireGestures</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/6366/1254150116" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />A customizable mouse gestures extension which enables you to execute various commands and user scripts with five types of gestures. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/7189?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Firebug Net History Panel Overlay</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Adds history functionality to firebug net panel. Requires Firebug 1.2.0b4 or 1.2.0b6 For Firebug versions 1.1.* please use Net Panel Add-on Version 0.2.1 <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3880?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Add Bookmark Here ²</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/3880/1253393237" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Add a menuitem "Add Bookmark Here..." to Bookmarks... <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/5914?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">DNS Cache</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/5914/1246397200" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Allows you to disable and enable the DNS Cache of Firefox <br class="C" /></p>
    <blockquote class="publisher-comment"><p>The final caching add-on that I absolutely LOVE.  Lets you add anywhere on your toolbar to clear the DNS cache of firefox.  I have  this, clear cache, and clear cookies next to each other on the far left of my bookmarks toolbar, I use them ALOT.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/7907?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Manage Folders</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/7907/1248060550" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Places a "Manage Folder" item on the context menu of bookmark folders, which opens the "Places Organizer" expanded to that folder. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2214?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">View Dependencies</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />View Dependencies adds a tab to the Page Info window, in which it lists all the files which were loaded to show the current page. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2275?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Torbutton</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/2275/1249863832" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Torbutton provides a button to securely and easily enable or disable the browser's use of Tor. It is currently the only addon that will safely manage your Tor browsing to prevent IP address leakage, cookie leakage, and general privacy attacks. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Quick way to switch firefox to use the TOR network (I recommend the free vidalia suite) which is useful for web developers that rely on an IP address in certain programming and setups.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/5447?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Tab Kit</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/5447/1249227762" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Tab grouping, vertical tab tree, multi-rows, and various tweaks for power users. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3559?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">QuickRestart</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/3559/1241624360" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Ever needed to restart Firefox after enabling or disabling an extension, switching to a new theme, or modifying configuration files (such as userChrome.css or user.js)? This simple extension adds a "Restart Firefox" item to the "File" menu. You can also use the Ctrl+Alt+R keyboard shortcut, or the included toolbar button. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>A button you can place anywhere that restarts the browser just like you do after updating add-ons.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1759?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Organize Status Bar</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />This extension will enable you to organize your status bar icons.  You can now rearrange or remove any item (icon or text) in the Firefox status bar.  If your status bar is full and cluttered like mine was, give this a try. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Lets you rearrange the items on the status bar.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/722?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">NoScript</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/722/1255474235" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />The best security you can get in a web browser! Allow active content to run only from sites you trust, and protect yourself against XSS and Clickjacking attacks. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2109?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FEBE</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/2109/1255569901" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />FEBE (Firefox Environment Backup Extension) allows you to quickly and easily backup your Firefox extensions.  In fact, it goes beyond just backing up -- It will actually rebuild your extensions individually into installable .xpi files.  Now you can easily synchronize your office and home browsers. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Very helpful and well-designed add-on that lets you backup your entire firefox, or individual add-ons, or both!</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/10897?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Check Places</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/10897/1255544495" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Checks your bookmarks are valid and the pages still exist. Also checks for duplicates and for empty folders and can restore missing favicons. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1027?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">All-in-One Sidebar</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/1027/1248433103" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />All-in-One Sidebar (AiOS) is an award-winning sidebar control, inspired by Opera's. It lets you quickly switch between sidebar panels, view dialog windows such as downloads, extensions, and more in the sidebar, or view source or websites in the sidebar. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2888?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">GMarks</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />GMarks helps you sync &amp; manage your bookmarks with Google Bookmarks... <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/11950?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Add-on Collector</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/11950/1252025520" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />There's a new way to manage and find favorite add-ons. Comment, share, and sync collections, all from your browser. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Lets you get updates and makes it very easy to browse a collection such as this one.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2144?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Advanced Dork:</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/2144/1249684650" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Advanced Dork: gives quick access to Google's Advanced Operators directly from the context menu... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Very unobtrusively makes the advanced google search operators available.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2032?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Yahoo! Toolbar</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/2032/1253720246" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Use Yahoo! and the web faster, safer, and easier with new mail notification, search suggestions, online bookmarks, free spyware scanning, and more... Save time with the new Yahoo! Toolbar 2.0, now in beta at toolbar.yahoo.com/beta. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3102?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Email This!</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/3102/1253158256" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Email This! will send your recipient the link, title, &amp; highlighted text of the page you are viewing using GMail, Google Apps GMail, Yahoo, and Stand-Alone Mail Clients like Outlook Express, Thunderbird, &amp; More! If you hate toolbar buttons don’t fret because I've included a right-click pop-up menu and access keys! <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2062?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Tab To Window</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/2062/1244572621" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Open a tab in a new window... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>I have wanted this type of functionality for soo long.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2323?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Cache View</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Cache View is a Firefox extension that displays Google's Cache, Coral's Cache, and Wayback Machine's Cache cache of an open tab or selected link via a right-click or the Tools menu. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Useful to notice how often a page on your site is crawled and cached by these engines.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6984?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Lazarus: Form Recovery</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/6984/1252590349" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Never lose anything you type into a web form again! Lazarus securely auto-saves all forms as you type, so after a crash, server timeout, or whatever, you can go back to the form, right click, "recover form", and breathe a sigh of relief. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Saves your form data securely as you enter it, and provides a way to recover that form data if your firefox crashes (more likely windows crashes) and that way you won't lose anything you already entered.  This will slow down firefox alot though.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6132?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Tab Preview</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Preview tab contents on mouseover <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6937?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Multirow Bookmarks Toolbar</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Multi Row Bookmarks Toolbar.<br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2517?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Googlepedia</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Shows you a relevant Wikipedia article along with your search results. Clicking links in the article will trigger new Google searches, making it a very useful research tool... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Adds wikipedia results right next to google results, very helpful to keep an eye on what is authoritative, and often get the best information fast.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1237?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">QuickJava</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Allows quick enable and disable of Java and Javascript from... <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3082?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Undo Closed Tabs Button</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/3082/1244495823" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Tired of going to History -&gt; Recently Closed Tabs just to undo a closed tab? Then this extension is for you!  This extension allows you to undo closed tabs via a toolbar and/or tab bar button or the right-click context menu. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>One of my personal favorites, adds back the most recently closed tab, very helpful.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/10618?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Faviconiac Search Engines</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/10618/1247849922" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Adds PNG favicons to some search engines and web directories, such as Google, Yahoo, Bing, Ask, Altavista, Wikipedia, AOL, Dmoz, Alexa, del.icio.us and others. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>This is helpful to get a better feel for search engine results by adding their sites favicon to the search results page, is somewhat HTTP Request intensive however.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3928?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Bookmark This Page Plus</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/3928/1247125860" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Adds a menu item in each sub folder of the bookmarks menu to bookmark the current page. Just as seen in the Opera browser. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1595?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Remove Cookie(s) for Site</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/1595/1214859152" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />A very simple extension to remove all the cookies of currently opened site. It adds an option to the Right Click menu of the page, and a toolbar button to perform this operation. It displays the status of operation in the status bar. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>This is invaluable, it removes all the cookies from whichever domain you are currently viewing.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/967?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Modify Headers</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Add, modify and filter http request headers.  You can modify the user agent string, add headers to spoof a mobile request (e.g. x-up-calling-line-id) and much more.  Take a look at the help tab of the Modify Headers window... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Pretty awesome, lets you modify the HTTP Headers your browser is sending, useful to check accessibility, server settings, language settings, etc.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2625?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">OPML Support</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />OPML Support adds OPML import/export functionality to the Firefox Bookmarks manager. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6647?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">HttpFox</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />An HTTP analyzer addon for Firefox <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/8879?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FoxTab</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/8879/1249840764" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />3D in your browser!  FoxTab brings innovative 3D functionality to your Firefox. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Super awesome cool.  If your machine is fast this is a really helpful add-on.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/655?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">View Source Chart</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/655/1246405984" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />View Source In Color-Coded Chart Get V2.8 w/ a brand new feature from jennifermadden.com <br class="C" /></p>
    <blockquote class="publisher-comment"><p>One of my long-time, all-time favorites that lets you view the source code of a website, but in a color-coded and formatted view.  Very nice and helpful for (X)HTML developers.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/4072?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Smart Bookmarks Bar</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/4072/1234555016" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Not enough place on your bookmarks bar ?... Smart Bookmarks Bar extension comes right here by hiding bookmarks names and only showing icons. Bookmark names will be displayed on mouse over. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>For those who frequently use the bookmarks in the firefox bookmarks toolbar, this is a great way to show more in a cleaner way.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1433?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Extended Statusbar</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/1433/1246438548" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />A Statusbar with speed, percentage, time and loaded size (similar to Opera's one) <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Provides much more information unobtrusively on your statusbar, very cool!</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/10300?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Email Yourself!</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/10300/1253228434" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Email Yourself! allows you to email yourself the link, title, and a selected summary of the webpage you are viewing using GMail. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/125?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">SwitchProxy Tool</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />SwitchProxy lets you manage and switch between multiple proxy configurations... <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2499?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">LiveClick</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Adds feed reading, notifications, favicons, and other enhancements to Live Bookmarks. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/7314?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Places' Tooltips</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />This addon enhances all the tooltips in Firefox. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/11173?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Multi Smart Search</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />"Multi smart search" displays a new context menu including all the installed search engine. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/9275?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">SortPlaces</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/9275/1252087512" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Sorts your bookmarks in a variety of ways. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/433?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Flashblock</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/433/1247913103" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Never be annoyed by a Flash animation again! Blocks Flash so it won't get in your way, but if you want to see it, just click on... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Lets you block flash for all/specific websites/domains, which is pretty nice capability to test both your sites for non-flash viewers, and speeds up firefox.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6249?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Google Toolbar</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/6249/1237314369" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Take the power of Google with you anywhere on the Web <br class="C" /></p>
    <blockquote class="publisher-comment"><p>A great add-on that lets you use hundreds of google tricks and tools.  Very helpful but also makes a lot of background HTTP requests so privacy-conscious or speed-freaks will want it disabled.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6622?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">DOM Inspector</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />DOM Inspector is a tool that can be used to inspect and edit the live DOM of any web document or XUL application. The DOM hierarchy can be navigated using a two-paned window that allows for a variety of different views on the document and all nodes within. Note:  This add-on depends on binary changes to Firefox, and will not work with Firefox 2. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Way to inspect the DOM of a page, useful for web developers.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6459?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Stay-Open Menu</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/6459/1250004873" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Enables multiple selections from Bookmarks Menu,  History Menu, or Smart Location Bar (awesomebar)  dropdown list, without reopening menu or using sidebar. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/710?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Menu Editor</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Customize application menus: Rearrange or remove menuitems from the main context menu (right-click menu) and main menubar (File Edit View etc.) <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/4838?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Multiple Tab Handler</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/4838/1251873082" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Provides feature to close multiple tabs. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1815?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Console²</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/1815/1246698544" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Console² (pronounced Console Squared or Console Two) replaces the JavaScript Console with what could be the next generation Error Console. From v0.5 includes the Console Filter extension previously available separately from the Console² website. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>An advanced java script console.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/6271?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Bookmark Previews</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Bookmark Previews adds an album view and thumbnail view to the bookmarks manager. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Now this one is what I call genius.  Lets you view previews of your bookmarks!  Great if like me you have over a thousand bookmarks.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/8542?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">LastPass Password Manager</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/8542/1252161868" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />LastPass is a free online password manager and Form Filler that makes your web browsing easier and more secure.   LastPass supports IE and Firefox as Plugins (Opera, Safari, Chrome, iPhone, Opera Mini via Bookmarklets), allows you to import from every major password storage vendor and export too, captures passwords that other managers won't including many AJAX forms, and allows you to make strong passwords easily.  Your sensitive data is encrypted _locally_ before upload so even LastPass cannot get access to it.  One Time Passwords &amp; Screen Keyboard help protect your master password. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>What can I say, this add-on is in my top 10 for sure, and I recommend it to all my friends and even my family.  Lets me create very secure passwords for sites that I don't have to remember because lastpass remembers them for me, and stores them encrypted on both a usb medium I keep, and on their servers.  So when I use someone elses computer or reinstall firefox, I have all my usernames and passwords, and its just sooooooooooooooooo useful.  Get this add-on, it truly is a secure way to only have to remember 1 password from now on, thus LastPass.  The last password you need.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1956?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Tabs Open Relative</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/1956/1211284492" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Tabs Open Relative makes all new tabs open to the right of the current tab, rather than at the far right of the tab bar (optionally this only applies to links). <br class="C" /></p>
    <blockquote class="publisher-comment"><p>This stops that annoying default of opening tabs wayy on the right.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/10909?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Coral IE Tab</a></h4>
    <p> <img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/10909/1255054707" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />An enhanced version of IE Tab which enables you to use the embedded IE engine within tabs of Mozilla Firefox. It supports Adblock Plus in IE, and can sync cookies between IE and Firefox. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/966?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Tamper Data</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Use tamperdata to view and modify HTTP/HTTPS headers and post parameters... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Useful for checking form validation and security, lets you tamper data! lol</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/5369?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">YSlow</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/5369/1253220367" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />YSlow analyzes web pages and why they're slow based on Yahoo!'s rules for high performance web sites. YSlow uses Yahoo!'s Smush.it service, which is subject to Smush.it Terms of Use: http://info.yahoo.com/legal/us/yahoo/smush_it/smush_it-4378.html <br class="C" /></p>
    <blockquote class="publisher-comment"><p>One of the top 3 most important and helpful add-ons for firefox.  Web Developers who don't use this one are simply irresponsible.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/539?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">MeasureIt</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Draw out a ruler to get the pixel width and height of any elements on a... <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/271?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">ColorZilla</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/271/1234546689" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Advanced Eyedropper, ColorPicker, Page Zoomer and other colorful goodies... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>A must-have add-on for anyone using CSS or developing websites, very amazing, highly capable add-on.  The one issue is that is is somewhat of a resource-hog.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/748?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Greasemonkey</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/748/1253968926" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Allows you to customize the way a webpage displays using small bits of JavaScript. ... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Lets you use user-contributed javascripts (or your own of course) that modifies the behavior and/or appearance of many different websites.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/684?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FireFTP</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/684/1254121244" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />FireFTP is a free, secure, cross-platform FTP client for Mozilla Firefox which provides easy and intuitive access to FTP servers. <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/7943?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Pixel Perfect</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/7943/1254757574" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Pixel Perfect is a Firefox/Firebug extension that allows web developers and designers to easily overlay a web composition over top of the developed HTML. * Requires Firebug <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/60?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Web Developer</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/60/1252695377" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />The Web Developer extension adds a menu and a toolbar with various web developer tools. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>This add-on is 1 of the top 2 most important add-ons for web developers.  The other is firebug.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1843?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Firebug</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/1843/1254249333" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Firebug integrates with Firefox to put a wealth of development tools at your fingertips while you browse. You can edit, debug, and monitor CSS, HTML, and JavaScript live in any web page... Firebug 1.4 requires Firefox 3.0 or higher. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>By far, without a doubt, the single most important and valuable add on for ANY web developer.  This is the one that is definitely required.  The features are too numerous to name here.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3829?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Live HTTP Headers</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/3829/1245295166" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />View HTTP headers of a page and while... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Very helpful for those that don't have and use wireshark.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/2464?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FoxyProxy</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/2464/1254948830" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />FoxyProxy is an advanced proxy management tool that completely replaces Firefox's limited proxying capabilities. It offers more features than SwitchProxy, ProxyButton, QuickProxy, xyzproxy, ProxyTex, TorButton, etc. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>The most complete proxifying tool for firefox, multiple configurations possible.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/321?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">SearchStatus</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/321/1254725500" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Display the Google PageRank, Alexa rank, Compete ranking and SEOmoz Linkscape mozRank anywhere in your browser, along with fast keyword density analyser, keyword/nofollow highlighting, backward/related links, Alexa info and more. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Adds a very unobtrusive way to check the pagerank, and several other SEO statistics but only when you click a button (if configured that way) very helpful occasionally.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/201?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">DownThemAll!</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/201/1253178038" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />The first and only download manager/accelerator built inside Firefox! <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Very nice, easy, fast, and unobtrusive add-on that lets you download all files of a certain type to a certain save location, lets you use builtin filters or configure your own using basic REGEX.  Very helpful.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/1801?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Clear Cache Button</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/1801/1248704772" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Adds a clear cache toolbar button. After installing the extension, find the clear cache button in the toolbar customization... <br class="C" /></p>
    <blockquote class="publisher-comment"><p>A button you can add to your toolbar that clears your firefox cache (not cookies or history) which is invaluable for web developers.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/12006?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Wolfram Alpha Google</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/12006/1254285310" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Display Wolfram Alpha results in Google searches. No need to switch search engines when you can use both at once! <br class="C" /></p>
    <blockquote class="publisher-comment"><p>The new search is a glimpse at the future of computing.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/3895?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Personal Menu</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/3895/1253278678" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />"Menus Toolbar" item is now available in Toolbar Context Menu and you may hide it forever! <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Lets you go beyond firefox builtin menu editing and create a custom toolbar.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/7613?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Jiffy</a></h4>
    <p><img src="https://addons.mozilla.org/img/default_icon.png" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title="default icon hacking" />Adds a new panel to Firebug for displaying timing measurements for JavaScript applications. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>Adds the ability to time or profile your javascript, I usually leave disabled.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/9603?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">FireRainbow</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/9603/1248403194" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Javascript syntax highlighting for Firebug 1.3+ <br class="C" /></p>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/7684?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">Fire.fm</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/7684/1254412991" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />Fire.fm gives you access to the extensive music library on Last.fm. Last.fm gives free radio to the US, UK, and Germany, plus subscriber-based service to the rest of the world. Listen to your favorite music and discover new artists in the process. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>What would work be without free streaming music that is customizable and recommends music based on your history.  Conveniently can be added to your status bar, or your toolbar.</p></blockquote>
</div>
<hr class="C" />


<div class="item-info">
    <h4><a href="https://addons.mozilla.org/en-US/firefox/addon/138?collection_uuid=2f6fd413%26%2345%3B1146%26%2345%3Bad49%26%2345%3B1cca%26%2345%3B84102bff60fb">StumbleUpon</a></h4>
    <p><img src="https://addons.mozilla.org/en-US/firefox/images/addon_icon/138/1248392473" alt="Firefox Add ons for Web Developers" height="32" width="32" class="IFL" title=" hacking" />StumbleUpon discovers web sites based on your interests, learns what you like and brings you more. <br class="C" /></p>
    <blockquote class="publisher-comment"><p>StumbleUpon is great.  Very cool way to see relevant and interesting web development articles and sites.</p></blockquote>
</div>
<hr class="C" /><p><a href="http://www.askapache.com/hacking/firefox-addons-webdev.html"></a><a href="http://www.askapache.com/hacking/firefox-addons-webdev.html">Firefox Add-ons for Web Developers</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/hacking/firefox-addons-webdev.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Optimizing Servers and Processes for Speed with ionice, nice, ulimit</title>
		<link>http://www.askapache.com/optimize/optimize-nice-ionice.html</link>
		<comments>http://www.askapache.com/optimize/optimize-nice-ionice.html#comments</comments>
		<pubDate>Sat, 10 Oct 2009 05:41:28 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Optimization]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=3167</guid>
		<description><![CDATA[<p><a href="http://www.askapache.com/linux/optimize-nice-ionice.html" class="IFL" id="id18"></a>To prepare for several upcoming articles on AskApache that are focused on optimizing Servers and Sites from a server admin level, here is an article to introduce the main tools that we will be using.  These tools are used to optimize CPU time for each process using <strong>nice</strong> and <strong>renice</strong>, and other tools like <strong>ionice</strong> are used to optimize the Disk IO, or Disk speed / Disk traffic for each process.  Then you can make sure your mysqld and httpd processes are always fast and prioritized.<br class="C" /></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/optimize/optimize-nice-ionice.html"></a><a href="http://www.askapache.com/optimize/optimize-nice-ionice.html"><cite>AskApache.com</cite></a></p><p>Ok, sup.  I really felt I had to get this out of the way, because I have a whole stack of drafts waiting to be published, but I realized that not many people will benefit from all the advanced optimizations and tricks I'm writing unless they get a basic understanding of some of the tools I'm using.  I decided to write a series of articles explaining how I optimize servers for speed because lately I've been getting a lot more people wanting to hire me to do that.  I take on projects when I can but there is clearly a need out here on the net for some self-help.   The momentum is swinging more and more towards VPS type of web hosting, and I would say that 99% of those customers are getting supremely ripped off, which goes against the foundation of the web.</p>
<p>Keep in mind that this blog and my research is only a hobby of mine, my job is primarily marketing and sales, so I'm not some licensed expert or anything, or even an unlicensed expert! haha.  But it does bother me that those who are tech-savvy enough to run web-hosting companies are happily ripping people off.  So this article details the main tools that are used to speed up and optimize your machine by delegating levels of priority to specific processes.  Future articles will use these tools alot, so this is meant as an intro.</p>




<p><a id="cpu-disk-io" name="cpu-disk-io"></a></p><h2>CPU and Disk I/O</h2>
<p>As most of you are aware, there are 2 variables that determine any computer or programs speed.  CPU and Disk I/O.  CPU determines how fast you can process data, crunch numbers, etc. while disk I/O determines how fast your disks can read and write data to the hard-drive.  Wouldn't it be great if you could easily configure your server to give your httpd, php, and other processes both greater CPU processing and disk IO than your non-important processes like backup scripts, ftp daemons, etc.?  We are talking about Linux in this article, so of course YES not only can you do that, you should!</p>
<p><a name="optimize-ram" id="optimize-ram"></a></p><h3>RAM</h3>
<p>RAM is like a hard-drive in that data is stored on it, and read/written to it.  The difference is that RAM is somewhere around 30x faster than disk I/O, but the cost of that incredible speed is that the data stored on it is only temporary in the sense that it won't be stored permanently, it is completely erased when your machine is rebooted.  RAM is also expensive, and there is a limit to how much a server or machine can have due to hardware limits.</p>
<p><a name="optimize-swap" id="optimize-swap"></a></p><h3>SWAP</h3>
<p>SWAP takes off when you run out of RAM but you still want certain data to be read/write quickly.  Basically when you start running out of RAM your machine starts supplementing RAM with SWAP storage.  SWAP is usually a partition on a second hard-drive disk.  There is an upper limit on how much I/O can occur on a disk at one time, and the more I/O takes place, the slower all I/O becomes, so SWAP works well on a separate hard-drive as it will have much faster I/O.  On Windows they opted to copy the SWAP mechanism but instead use a file named pagefile.sys, and that is just one reason people in the know do not care for Windows.</p>
<p><a name="optimize-cpu" id="optimize-cpu"></a></p><h3>CPU</h3>
<p>So lets do this, think of your CPU (your processor) as having an amount of 100% processing available when not being used, 0% when its maxed out.  CPU's handle multiple processing tasks simultaneously, so what we will discuss in this article is how to specify HOW MUCH of that processing amount each of your programs (heretofore "processes") are able to use.  Yes, very very cool.</p>
<p>That is correct, you can easily configure your server to provide more of the available processing time to certain programs over others, like you can configure apache and php to utilize 50% of your CPU processing time by themselves, so that all other processes (proftpd, sshd, rsync, etc.) combined can only utilize 50%.  The terminology is we can give certain specific processes (like php.cgi, httpd, fast-cgi.cgi) a specific <strong>priority</strong>, where -19 is the most priority, and +19 is the least amount of priority, or CPU processing time.  I know it seems backwards.. </p>


<p><a id="tools" name="tools"></a></p><h2>The Tools</h2>
<p>If you run Windows, you are in the right place... because the following advice will save your life:  GET LINUX! Ok, now that that is out of the way, the following are the tools dicussed on this page.  All of them are free, open-source, and wonderful.  The basic idea of these tools is to control how much CPU is devoted to each process, and also how much Disk IO/Disk traffic is given to each process.</p>
<dl>
<dt><a href="#nice-tool">nice</a></dt><dd>run a program with modified scheduling priority</dd>
<dt><a href="#renice-tool">renice</a></dt><dd>alter priority of running processes</dd>
<dt><a href="#ionice-tool">ionice</a></dt><dd>set or retrieve the I/O priority for a given pid or execute a new task with a given I/O priority.</dd>
<dt><a href="#iostat-tool">iostat</a></dt><dd>Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.</dd>
<dt><a href="#ulimit-tool">ulimit</a></dt><dd>Ulimit provides control over the resources available to processes started by the shell, on systems that allow such control.</dd>
<dt><a href="#chrt-tool">chrt</a></dt><dd>set or retrieve real-time scheduling parameters for a given pid or execute a new task under given scheduling parameters.</dd>
<dt><a href="#taskset-tool">taskset</a></dt><dd>set or retrieve task CPU affinity for a given pid or execute a new task under a given affinity mask.</dd>
<dt></dt><dd></dd>
</dl>




<p><a id="part1-processes" name="part1-processes"></a></p><h2>Part 1: Process Processes Faster</h2>
<p>Ok so lets tackle figuring out how to give your response-intensive processes (like apache, php, ruby, perl, java) meaning a request to your server/machine requires a <em>response</em>.  For instance, when you requested this page that you are reading at this very second, several things on my server had to happen for you to be able to read this.</p>
<p>First your computer sends out a request to see what server the www.askapache.com domain name is.  DNS servers respond with my server IP, so for servers dedicated as nameservers, optimizing the DNS processes like bind would speed that up.  Now that your computer knows how to reach my server it sends an HTTP GET request for this url.  This request is received by the httpd process that is apache, and apache determines this url should be handled by my custom compiled php5.3.0 binary, because this page is WordPress generated.  So the php binary loads up the WordPress /index.php file, which chain-loads several other php files, including <code>wp-config.php</code> containing my MySql database settings.  Now php connects to my MySql Server to fetch this articles content, comments, title, tags, etc. and then generates the HTML and hands that back to Apache.</p>
<p>Finally, Apache generates a HTTP RESPONSE and sends the RESPONSE and CONTENT back to your Browser, which then in turn renders the page for your eyes with the necessary javascript, images, css, and other files included in the HTML response.</p>

<h3>Too much Processing</h3>
<p>Now you see why I've opted to write my own caching plugin that takes the php and mysql processes OUT of that equation.  Both the php binary and the mysql instance consume CPU processing, and disk IO, to load all their library files, make various network requests and sockets, check permissions, and on and on.  And that's completely ok, the thing is, unless you configure these processes (Apache, PHP, MySQL) they will use the same amount of CPU processing that other processes use, other processes that have very little to do with you reading this sentence.  Processes to run my mail server, my FTP server, my SSH server, my cronjobs, cleanup scripts, atd daemon, etc.. and they will get the same amount of CPU!</p>
<p>Another even simpler example is what got me to look into this myself.  I wrote a shell script that created hourly, daily, weekly, and monthly backups for all of my websites and sql databases, and set it up to run by cronjob at those set intervals.  Eventually I noticed my sites were slower, my php even slower, and sometimes I even saw 503 errors that my host throws up when my server is overloaded.  The research that I pursued to prevent that from happening has been hugely eye-opening.  What does a backup script do?  Mine just created tar archives of all the files in my web root, then gzipped the tar archive saving to a backup server using scp (a file transfer using ssh).  This resulted in the following huge problems that seem to have nothing to do with a faster server and speedier website, but they have everything to with it.</p>
<ol>
<li><strong>CPU Bottleneck #1</strong> - tar and gzip use compression algorithms at a low level to create a compressed version, and all that compressing uses a whole lot of crunching - CPU processing</li>
<li><strong>DISK IO Bottleneck</strong> - Tarring the whole web root directory was creating a ton of disk io, and remember the more disk io that is going on, the less is available for everything else.</li>
<li><strong>CPU Bottleneck #2</strong> - Using scp to send my backups was security-smart, but these huge archive files had to be encrypted and sent over the net.</li>
</ol>






<p><a id="breaking-bottlenecks" name="breaking-bottlenecks"></a></p><h2>Breaking Bottles</h2>
<p>I apologize for being a little long-winded there, but I think it's important to make sure everyone understands those basic concepts, which are foreign to most people.  Once you understand what is causing the bottlenecks, then you can understand the solutions, which actually are incredibly simple and even a novice linux user can easily do.  Besides, the net gets a little bit faster every time someone implements this.</p>

<p><a id="nice-tool" name="nice-tool"></a></p><h3>nice</h3>
<p><img src="http://uploads.askapache.com/2009/10/nice-chart.png" alt="NICE Levels Chart" title="NICE Levels Chart" width="351" height="225" class="IFL" />Nice allows you to run a program with modified scheduling priority which specifies how much CPU is devoted to a particular process.  Run COMMAND with an adjusted niceness, which affects process scheduling.  With no COMMAND, print the current niceness.  <br /><br />Nicenesses range from -20 (most favorable scheduling) to 19 (least favorable).   <code>-n, --adjustment=N</code> -  add integer N to the niceness (default 10).   <code>nice +19</code> tasks get a HZ-independent 1.5%.  Running a <code>nice +10</code> and a <code>nice +11</code> task means the first will get 55% of the CPU, the other 45%.<br class="C" /></p>

<p><a id="nice-usage" name="nice-usage"></a></p><h4>nice usage</h4>
<pre>nice [OPTION] [COMMAND [ARG]...]
&nbsp;
-n, --adjustment=ADJUST   increment priority by ADJUST first</pre>

<p><a id="nice-examples" name="nice-examples"></a></p><h4>Examples of nice</h4>
<p>Using nice to download a file</p>
<pre>nice -n 17 curl -q -v -A &#039;Mozilla/5.0&#039; -L -O http://wordpress.org/latest.zip</pre>
<p>Unzipping a file with nice</p>
<pre>nice -n 17 unzip latest.zip</pre>
<p>Nice way to build from source</p>
<pre>nice -n 2 ./configure
nice -n 2 make
nice -n 2 make install</pre>
<p>It is sometimes useful to run non-interactive programs with reduced priority.</p>
<pre>$ nice factor `echo &#039;2^9 - 1&#039;|bc`
511: 7 73</pre>
<p>Since nice prints the current priority, we can invoke it through itself to demonstrate how it works: The default behavior is to reduce priority by 10.</p>
<pre> $ nice nice
10
$ nice -n 10 nice
10</pre>
<p> The ADJUSTMENT is relative to the current priority.  The first <code>nice</code> invocation runs the second one at priority 10, and it in turn runs the final one at a priority lowered by 3 more.</p>
<pre>$ nice nice -n 3 nice
13</pre>
<p>Specifying a priority larger than 19 is the same as specifying 19.</p>
<pre>$ nice -n 30 nice
19</pre>
<p>Only a privileged user may run a process with higher priority.</p>
<pre>$ nice -n -1 nice
nice: cannot set priority: Permission denied
$ sudo nice -n -1 nice
-1</pre>

<blockquote cite="http://uploads.askapache.com/2009/08/sched-nice-design.txt">
<p>The new scheduler in v2.6.23 addresses all three types of complaints:</p>
<p>To address the first complaint (of nice levels being not "punchy" enough), the scheduler was decoupled from 'time slice' and HZ concepts (and granularity was made a separate concept from nice levels) and thus it was possible to implement better and more consistent nice +19 support: with the new scheduler nice +19 tasks get a HZ-independent 1.5%, instead of the variable 3%-5%-9% range they got in the old scheduler.</p>
<p>To address the second complaint (of nice levels not being consistent), the new scheduler makes nice(1) have the same CPU utilization effect on tasks, regardless of their absolute nice levels. So on the new scheduler, running a nice +10 and a nice 11 task has the same CPU utilization "split" between them as running a nice -5 and a nice -4 task. (one will get 55% of the CPU, the other 45%.) That is why nice levels were changed to be "multiplicative" (or exponential) - that way it does not matter which nice level you start out from, the 'relative result' will always be the same.</p>
<p>The third complaint (of negative nice levels not being "punchy" enough and forcing audio apps to run under the more dangerous SCHED_FIFO scheduling policy) is addressed by the new scheduler almost automatically: stronger negative nice levels are an automatic side-effect of the recalibrated dynamic range of nice levels.</p>
</blockquote>







<p><a id="renice-tool" name="renice-tool"></a></p><h3>renice</h3>
<p>Renice is similar to the nice command, but it lets you modify the nice of a currently running process.  This is nice for shell scripts where you can add this to the top of the script to nicify the whole script to 19.</p>

<p><a id="renice-usage" name="renice-usage"></a></p><h4>renice usage</h4>
<pre>renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]
&nbsp;
-g      Force who parameters to be interpreted as process group ID&#039;s.
-u      Force the who parameters to be interpreted as user names.
-p      Resets the who interpretation to be (the default) process ID&#039;s.</pre>

<p><a id="renice-examples" name="renice-examples"></a></p><h4>Examples of renice</h4>
<p>From the shell, changes the priority of the shell and all children to 19.  From a shell script, does the same but only for the script and its children.</p>
<pre>renice 19 -p $$</pre>
<p>This runs renice without any output</p>
<pre>renice 19 -p $$ &amp;&gt;/dev/null</pre>
<p>10 gets more CPU than 19</p>
<pre>renice 10 -p $$</pre>
<p>change the priority of process ID's 987 and 32, and all processes owned by users daemon and root.</p>
<pre>renice +1 987 -u daemon root -p 32</pre>









<p><a id="part2-disk-io" name="part2-disk-io"></a></p><h2>Part 2: Optimizing Disk I/O</h2>
<p><a id="scheduling-policies" name="scheduling-policies"></a></p><h3>Linux Scheduling Policies</h3>
<p>The scheduler is the kernel component that decides which runnable process will be executed by the CPU next.  Each process has an associated scheduling policy and a static scheduling priority, sched_priority</p>
<p>Processes scheduled under one of the real-time policies (SCHED_FIFO, SCHED_RR) have a sched_priority value in the <strong>range 1 (low) to 99 (high)</strong>.  (As the numbers imply, real-time processes always have higher priority than normal processes.)   The following "real-time" policies are also supported, for special time-critical applications that need precise control over the way in which runnable processes are selected for execution:</p>
<p>Currently, Linux supports the following "normal" (i.e., non-real-time) scheduling policies:</p>
<dl>
<dt><strong>SCHED_OTHER</strong>: Default Linux time-sharing scheduling</dt><dd>The standard round-robin time-sharing policy</dd><dt><strong>SCHED_BATCH</strong>: Scheduling batch processes</dt><dd>This policy is useful for workloads that are non-interactive, but do not want to lower their nice value, and for workloads that want a deterministic scheduling policy without interactivity causing extra preemptions (between the workload's tasks).</dd>
<dt><strong>SCHED_IDLE</strong>: Scheduling very low priority jobs</dt>
<dd>This policy is intended for running jobs at extremely low priority (lower even than a +19 nice value with the SCHED_OTHER or SCHED_BATCH policies)</dd>
<dt><strong>SCHED_FIFO</strong>: First In-First Out scheduling</dt><dd>A first-in, first-out policy</dd>
<dt><strong>SCHED_RR</strong>: Round Robin scheduling</dt><dd>A round-robin policy.</dd>
</dl>

<p><a id="scheduling-classes" name="scheduling-classes"></a></p><h3>Scheduling Classes</h3>
<dl>
<dt><code>IOPRIO_CLASS_RT</code></dt>
<dd>This is the realtime io class. The RT scheduling class is given first access to the disk, regardless of what else is going on in the system. Thus the RT class needs to be used with some care, as it can starve other processes. As with the best effort class, 8 priority levels are defined denoting how big a time slice a given process will receive on each scheduling window.  This scheduling class is given higher priority than any other in the system, processes from this class are given first access to the disk every time. Thus it needs to be used with some care, one io RT process can starve the entire system. Within the RT class, there are 8 levels of class data that determine exactly how much time this process needs the disk for on each service. In the future this might change to be more directly mappable to performance, by passing in a wanted data rate instead.</dd>
<dt><code>IOPRIO_CLASS_BE</code></dt>
<dd>This is the best-effort scheduling class, which is the default for any process that hasn't set a specific io priority. This is the default scheduling class for any process that hasn't asked for a specific io priority. Programs inherit the CPU nice setting for io priorities. This class takes a priority argument from 0-7, with lower number being higher priority. Programs running at the same best effort priority are served in a round-robin fashion.  The class data determines how much io bandwidth the process will get, it's directly mappable to the cpu nice levels just more coarsely implemented. 0 is the highest BE prio level, 7 is the lowest. The mapping between cpu nice level and io nice level is determined as: io_nice = (cpu_nice + 20) / 5.</dd>
<dt><code>IOPRIO_CLASS_IDLE</code></dt>
<dd>This is the idle scheduling class, processes running at this level only get io time when no one else needs the disk. A program running with idle io priority will only get disk time when no other program has asked for disk io for a defined grace period. The impact of idle io processes on normal system activity should be zero. This scheduling class does not take a priority argument.    The idle class has no class data, since it doesn't really apply here.</dd>
</dl>








<p><a id="ionice-tool" name="ionice-tool"></a></p><h3>ionice</h3>
<p>ionice - get/set program io scheduling class and priority.  This program sets the io scheduling class and priority for a program.  Since v3 (aka CFQ Time Sliced) CFQ implements I/O nice levels similar to those of CPU scheduling. These nice levels are grouped in three scheduling classes each one containing one or more priority levels:</p>

<p><a id="ionice-usage" name="ionice-usage"></a></p><h4>ionice usage</h4>
<p>If no arguments or just -p is given, ionice will query the current io scheduling class and priority for that process.</p>
<pre>ionice [-c] [-n] [-p] [COMMAND [ARG...]]</pre>
<ul>
<li><strong>-c</strong> - The scheduling class. 1 for real time, 2 for best-effort, 3 for idle.</li>
<li><strong>-n</strong> - The scheduling class data. This defines the class data, if the class accepts an argument. For real time and best-effort, 0-7 is valid data.</li>
<li><strong>-p</strong> - Pass in a process pid to change an already running process. If this argument is not given, ionice will run the listed program with the given parameters.</li>
</ul>

<p><a id="ionice-examples" name="ionice-examples"></a></p><h4>ionice Examples</h4>
<p>Sets process with PID 89 as an idle io process.</p>
<pre>ionice -c3 -p89</pre>
<p>Runs 'bash' as a best-effort program with highest priority.</p>
<pre>ionice -c2 -n0 bash</pre>
<p>Returns the class and priority of the process with PID 89</p>
<pre>ionice -p89</pre>

<blockquote cite="http://gaarai.com/2009/03/06/multitasking-from-the-linux-command-line-plus-process-prioritization/">
<p><p>With the ionice command, you can set the IO priority for a process to one of three classes: Idle (3), Best Effort (2), and Real Time (1). The Idle class means that the process will only be able to read and write to the disk when all other processes are not using the disk. The Best Effort class is the default and has eight different priority levels from 0 (top priority) to 7 (lowest priority). The Real Time class results in the process having first access to the disk irregardless of other process and should never be used unless you know what you are doing.</p>
<p>If we wish to run the updatedb process in the background with an Idle IO class priority, we can run the following:</p>
<pre>$ sudo date
$ sudo updatedb &amp;
[1] 16324
$ sudo ionice -c3 -p16324</pre>
<p>If we’d rather just lower the Best Effort class priority (defaults to 4) for the command so the process isn’t limited to idle IO periods, we can run the following:</p>
<pre>$ sudo date
$ sudo updatedb &amp;
[1] 16324
$ sudo ionice -c2 -n7 -p16324</pre>
<p>Again, the Real Time class should not be used as it can prevent you from being able to interact with your system.</p>
<p>You may wonder where you can get the process ID if you don’t know it, can’t remember it, or didn’t start the process (an automatted script may have launched it). You can find process IDs with the ps command.</p>
<p>For example, if I had an updatedb program running in the background, and I wanted to find its process ID, I can run the following:</p>
<pre>$ ps -C updatedb
PID TTY TIME CMD
4234 ? 00:00:42 updatedb</pre>
<p>This tells me that the process’ process ID (PID) is 4234.</p></p>
</blockquote>





<p><a id="iostat-tool" name="iostat-tool"></a></p><h3>iostat</h3>
<p><a id="iostat-usage" name="iostat-usage"></a></p><h4>iostat Usage</h4>
<pre>iostat [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ &lt;device&gt; [...] | ALL ] [ -p [ &lt;device&gt; [,...] | ALL ] ] [ &lt;interval&gt; [ &lt;count&gt; ] ]
&nbsp;
-c     The -c option is exclusive of the -d option and displays only the CPU usage report.
-d     The -d option is exclusive of the -c option and displays only the device utilization report.
-k     Display statistics in kilobytes per second instead of blocks per second.  Data displayed are valid only with kernels 2.4 and newer.
-m     Display statistics in megabytes per second instead of blocks or kilobytes per second.  Data displayed are valid only with kernels 2.4 and newer.
-n     Displays the NFS-directory statistic.  Data displayed are valid only with kernels 2.6.17 and newer.  This option is exclusive ot the -x option.
-h     Display the NFS report more human readable.
-p [ { device | ALL } ]   The  -p  option  is  exclusive  of  the -x option and displays statistics for block devices and all their partitions that are used by the system.
-t     Print the time for each report displayed.
-x     Display extended statistics.</pre>

<p><a id="iostat-examples" name="iostat-examples"></a></p><h4>iostat Examples</h4>
<pre>iostat -p ALL 2 1000
avg-cpu:  %user   %nice    %sys %iowait   %idle
            8.34    0.08    1.26    2.27   88.05</pre>
<p>Display a single history since boot report for all CPU and Devices.</p>
<pre>$ iostat</pre>
<p>Display a continuous device report at two second intervals.</p>
<pre>$ iostat -d 2</pre>
<p>Display six reports at two second intervals for all devices.</p>
<pre>$ iostat -d 2 6</pre>
<p>Display six reports of extended statistics at two second intervals for devices hda and hdb.</p>
<pre>$ iostat -x hda hdb 2 6</pre>
<p>Display six reports at two second intervals for device sda and all its partitions (sda1, etc.)</p>
<pre>$ iostat -p sda 2 6</pre>






<p><a id="schedule-utils" name="schedule-utils"></a></p><h2>Schedule Utils</h2>
<p>These are the Linux scheduler utilities - schedutils for short.  These programs take advantage of the scheduler family of syscalls that Linux implements across various kernels.  These system calls implement interfaces for scheduler-related parameters such as CPU affinity and real-time attributes.  The standard UNIX utilities do not provide support for these interfaces -- thus this package.</p>
<p>The programs that are included in this package are chrt and taskset.  Together with nice and renice (not included), they allow full control of process scheduling parameters.  Suggestions for related utilities are welcome, although it is believed (barring new interfaces) that all scheduling interfaces are covered.</p>
<p>I've found that quite a few servers do not have this package installed, indicating to you that they might not know what they are doing.  Here is how you can install this incredible package, for non-root users.  Root users know how to do this, or they shouldn't be root.  Download and install in 1 line provided you have curl.  Or just use the following commands.</p>
<pre>mkdir -pv $HOME/{dist,source,bin,share/man/man1} &amp;&amp; cd ~/dist &amp;&amp; curl -O http://ftp.de.debian.org/debian/pool/main/s/schedutils/schedutils_1.5.0.orig.tar.gz &amp;&amp; cd ~/source &amp;&amp; tar -xvzf ~/dist/sch*z &amp;&amp; cd sch* &amp;&amp; sed -i -e &#039;s,= /usr/local,=${HOME},g&#039; Makefile &amp;&amp; make &amp;&amp; make install &amp;&amp; make installdoc</pre>
<pre>mkdir -pv $HOME/{dist,source,bin,share/man/man1}
cd ~/dist &amp;&amp; curl -O http://ftp.de.debian.org/debian/pool/main/s/schedutils/schedutils_1.5.0.orig.tar.gz
cd ~/source &amp;&amp; tar -xvzf ~/dist/schedutils_1.5.0.orig.tar.gz
cd ~/source/schedutils-1.5.0 &amp;&amp; sed -i -e &#039;s,= /usr/local,=${HOME},g&#039; Makefile
make || make -d &amp;&amp; make install || make install -d &amp;&amp; make installdoc || make installdoc -d</pre>


<p><a id="taskset-tool" name="taskset-tool"></a></p><h3>taskset</h3>
<p>Taskset  is  used to set or retrieve the CPU affinity of a running process given its PID or to launch a new COMMAND with a given CPU affinity.  CPU affinity is a scheduler property that "bonds" a process to a given set of CPUs on the system.  The Linux scheduler will honor the given CPU affinity and the process will not run on any other CPUs.  Note that the Linux scheduler also supports natural CPU affinity: the scheduler attempts to keep processes on the same CPU as long as practical for performance reasons.  Therefore, forcing a specific CPU affinity is useful only in certain applications.</p>
<p>The  CPU  affinity is represented as a bitmask, with the lowest order bit corresponding to the first logical CPU and the highest order bit corresponding to the last logical CPU.  Not all CPUs may exist on a given system but a mask may specify more CPUs than are present.  A retrieved mask will reflect only the bits that correspond to CPUs physically on the system.  If an invalid mask is given (i.e., one that corresponds to no valid CPUs on the current system) an error is returned.  A user must possess CAP_SYS_NICE to change the CPU affinity of a process.  Any user can retrieve the affinity mask.</p>

<p><a id="taskset-usage" name="taskset-usage"></a></p><h4>taskset Usage</h4>
<pre>taskset [options] [mask | cpu-list] [pid | cmd [args...]]
&nbsp;
-p, --pid            operate on existing given pid
-c, --cpu-list     display and specify cpus in list format</pre>

<p><a id="taskset-examples" name="taskset-examples"></a></p><h4>taskset-examples</h4>
<p>The default behavior is to run a new command:</p>
 <pre>$ taskset 03 sshd -b 1024</pre>
<p>You can retrieve the mask of an existing task or set it:</p>
<pre>$ taskset -p 700
$ taskset -p 03 700</pre>
<p>List format uses a comma-separated list instead of a mask:</p>
<pre>$ taskset -pc 0,3,7-11 700</pre>




<p><a id="chrt-tool" name="chrt-tool"></a></p><h3>chrt</h3>
<p><code>chrt</code> sets or retrieves the real-time scheduling attributes of an existing PID or runs COMMAND with the given attributes.  Both policy (one of <code>SCHED_FIFO</code>, <code>SCHED_RR</code>, or <code>SCHED_OTHER</code>) and priority can be set and retrieved.  A user must possess CAP_SYS_NICE to change the scheduling attributes of a process.  Any user can retrieve the scheduling information.</p>

<p><a id="chrt-usage" name="chrt-usage"></a></p><h4>chrt Usage</h4>
<pre>chrt [options] [prio] [pid | cmd [args...]]
&nbsp;
-p, --pid operate on an existing PID and do not launch a new task
-f, --fifo set scheduling policy to SCHED_FIFO
-m, --max show minimum and maximum valid priorities, then exit
-o, --other set policy scheduling policy to SCHED_OTHER
-r, --rr set scheduling policy to SCHED_RR (the default)</pre>

<p><a id="chrt-examples" name="chrt-examples"></a></p><h4>chrt Examples</h4>
<p>The default behavior is to run a new command:   <code>chrt [prio] -- [command] [arguments]</code></p>
<p>You can also retrieve the real-time attributes of an existing task:</p>
<pre>chrt -p [pid]</pre>
<p>Or set them:</p>
<pre>chrt -p [prio] [pid]</pre>













<p><a id="ulimit-tool" name="ulimit-tool"></a></p><h2>ulimit - get and set user limits</h2>
<p>Ulimit provides control over the resources available to processes started by the shell, on systems that allow such control. One can set the resource limits of the shell using the built-in ulimit command.  The shell's resource limits are inherited by the processes that it creates to execute commands.</p>

<p><a id="ulimit-usage" name="ulimit-usage"></a></p><h4>ulimit Usage</h4>
<pre>ulimit [-SHacdfilmnpqstuvx] [limit]</pre>
<dl>
<dt>-S</dt><dd>use the `soft' resource limit</dd>
<dt>-H</dt><dd>use the `hard' resource limit</dd>
<dt>-a</dt><dd>all current limits are reported</dd>
<dt>-c</dt><dd>the maximum size of core files created</dd>
<dt>-d</dt><dd>the maximum size of a process's data segment</dd>
<dt>-f</dt><dd>the maximum size of files created by the shell</dd>
<dt>-l</dt><dd>the maximum size a process may lock into memory</dd>
<dt>-m</dt><dd>the maximum resident set size</dd>
<dt>-n</dt><dd>the maximum number of open file descriptors</dd>
<dt>-p</dt><dd>the pipe buffer size</dd>
<dt>-s</dt><dd>the maximum stack size</dd>
<dt>-t</dt><dd>the maximum amount of cpu time in seconds</dd>
<dt>-u</dt><dd>the maximum number of user processes</dd>
<dt>-v</dt><dd>the size of virtual memory</dd>
</dl>
<p>If LIMIT is given, it is the new value of the specified resource; the special LIMIT values `soft', `hard', and `unlimited' stand for the current soft limit, the current hard limit, and no limit, respectively.  Otherwise, the current value of the specified resource is printed.  If no option is given, then -f is assumed.  Values are in 1024-byte increments, except for -t, which is in seconds, -p, which is in increments of 512 bytes, and -u, which is an unscaled number of processes.</p>
<dl>
<dt>RLIMIT_AS</dt>
<dd>The maximum size of the process's virtual memory (address space) in bytes.  This limit affects calls to brk(2), mmap(2) and mremap(2), which fail with the error ENOMEM upon exceeding this limit.  Also automatic stack expansion will fail (and generate a SIGSEGV that kills the process if no alternate stack has been made available via sigaltstack(2)).  Since the value is a long, on machines with a 32-bit long either this limit is at most 2 GiB, or this resource is unlimited.</dd>
<dt>RLIMIT_CORE</dt>
<dd>Maximum size of core file.  When 0 no core dump files are created. When non-zero, larger dumps are truncated to this size.</dd>
<dt>RLIMIT_CPU CPU</dt>
<dd>time limit in seconds.  When the process reaches the soft limit, it is sent a SIGXCPU signal.  The default action for this signal is to terminate the process.  However, the signal can be caught, and the handler can return control to the main program.  If the process continues to consume CPU time, it will be sent SIGXCPU once per second until the hard limit is reached, at which time it is sent SIGKILL. (This latter point describes Linux 2.2 through 2.6 behavior. Implementations vary in how they treat processes which continue to consume CPU time after reaching the soft limit.  Portable applications that need to catch this signal should perform an orderly termination upon first receipt of SIGXCPU.)</dd>
<dt>RLIMIT_DATA</dt>
<dd>The maximum size of the process's data segment (initialized data, uninitialized data, and heap).  This limit affects calls to brk(2) and sbrk(2), which fail with the error ENOMEM upon encountering the soft limit of this resource.</dd>
<dt>RLIMIT_FSIZE</dt>
<dd>The maximum size of files that the process may create.  Attempts to extend a file beyond this limit result in delivery of a SIGXFSZ signal. By default, this signal terminates a process, but a process can catch this signal instead, in which case the relevant system call (e.g., write(2), truncate(2)) fails with the error EFBIG.</dd>
<dt>RLIMIT_LOCKS</dt>
<dd>(Early Linux 2.4 only) A limit on the combined number of flock(2) locks and fcntl(2) leases that this process may establish.</dd>
<dt>RLIMIT_MEMLOCK</dt>
<dd>The maximum number of bytes of memory that may be locked into RAM.  In effect this limit is rounded down to the nearest multiple of the system page size.  This limit affects mlock(2) and mlockall(2) and the mmap(2) MAP_LOCKED operation.  Since Linux 2.6.9 it also affects the shmctl(2) SHM_LOCK operation, where it sets a maximum on the total bytes in shared memory segments (see shmget(2)) that may be locked by the real user ID of the calling process.  The shmctl(2) SHM_LOCK locks are accounted for separately from the per-process memory locks established by mlock(2), mlockall(2), and mmap(2) MAP_LOCKED; a process can lock bytes up to this limit in each of these two categories.  In Linux kernels before 2.6.9, this limit controlled the amount of memory that could be locked by a privileged process.  Since Linux 2.6.9, no limits are placed on the amount of memory that a privileged process may lock, and this limit instead governs the amount of memory that an unprivileged process may lock.</dd>
<dt>RLIMIT_MSGQUEUE</dt>
<dd>(Since Linux 2.6.8) Specifies the limit on the number of bytes that can be allocated for POSIX message queues for the real user ID of the calling process.  This limit is enforced for mq_open(3).  Each message queue that the user creates counts (until it is removed) against this limit according to the formula:  <code>bytes = attr.mq_maxmsg * sizeof(struct msg_msg *) +             attr.mq_maxmsg * attr.mq_msgsize</code> where attr is the mq_attr structure specified as the fourth argument to mq_open(3).  The first addend in the formula, which includes sizeof(struct msg_msg *) (4 bytes on Linux/i386), ensures that the user cannot create an unlimited number of zero-length messages (such messages nevertheless each consume some system memory for bookkeeping overhead).</dd>
<dt>RLIMIT_NICE</dt>
<dd>(since Linux 2.6.12, but see BUGS below) Specifies a ceiling to which the process's nice value can be raised using setpriority(2) or nice(2).  The actual ceiling for the nice value is calculated as 20 - rlim_cur.  (This strangeness occurs because negative numbers cannot be specified as resource limit values, since they typically have special meanings.  For example, RLIM_INFINITY typically is the same as -1.)</dd>
<dt>RLIMIT_NOFILE</dt>
<dd>Specifies a value one greater than the maximum file descriptor number that can be opened by this process.  Attempts (open(2), pipe(2), dup(2), etc.)  to exceed this limit yield the error EMFILE. (Historically, this limit was named RLIMIT_OFILE on BSD.)</dd>
<dt>RLIMIT_NPROC</dt>
<dd>The maximum number of processes (or, more precisely on Linux, threads) that can be created for the real user ID of the calling process.  Upon encountering this limit, fork(2) fails with the error EAGAIN.</dd>
<dt>RLIMIT_RSS</dt>
<dd>Specifies the limit (in pages) of the process's resident set (the number of virtual pages resident in RAM).  This limit only has effect in Linux 2.4.x, x < 30, and there only affects calls to madvise(2) specifying MADV_WILLNEED.</dd>
<dt>RLIMIT_RTPRIO</dt>
<dd>(Since Linux 2.6.12, but see BUGS) Specifies a ceiling on the real-time priority that may be set for this process using sched_setscheduler(2) and sched_setparam(2).</dd>
<dt>RLIMIT_RTTIME</dt>
<dd>(Since Linux 2.6.25) Specifies a limit on the amount of CPU time that a process scheduled under a real-time scheduling policy may consume without making a blocking system call.  For the purpose of this limit, each time a process makes a blocking system call, the count of its consumed CPU time is reset to zero.  The CPU time count is not reset if the process continues trying to use the CPU but is preempted, its time slice expires, or it calls sched_yield(2). Upon reaching the soft limit, the process is sent a SIGXCPU signal.  If the process catches or ignores this signal and continues consuming CPU time, then SIGXCPU will be generated once each second until the hard limit is reached, at which point the process is sent a SIGKILL signal.  The intended use of this limit is to stop a runaway real-time process from locking up the system.</dd>
<dt>RLIMIT_SIGPENDING</dt>
<dd>(Since Linux 2.6.8) Specifies the limit on the number of signals that may be queued for the real user ID of the calling process.  Both standard and real-time signals are counted for the purpose of checking this limit.  However, the limit is only enforced for sigqueue(2); it is always possible to use kill(2) to queue one instance of any of the signals that are not already queued to the process.</dd>
<dt>RLIMIT_STACK</dt>
<dd>The maximum size of the process stack, in bytes.  Upon reaching this limit, a SIGSEGV signal is generated.  To handle this signal, a process must employ an alternate signal stack (sigaltstack(2)).</dd>
</dl>

<p><a id="ulimit-examples" name="ulimit-examples"></a></p><h4>ulimit Examples</h4>
<p>Turn off core dumps</p>
<pre>ulimit -S -c 0</pre>








<h2>More Reading</h2>
<ul>
<li>Please see the <a href="http://pagesperso-orange.fr/sebastien.godard/">SYSSTAT Utilities Home for more performance monitoring tools</a> like sar, sadf, mpstat, iostat, pidstat and sa tools.</li>
<li><a href="http://gaarai.com/2009/03/06/multitasking-from-the-linux-command-line-plus-process-prioritization/">Multitasking from the Linux Command Line + Process Prioritization</a></li>
</ul>


<h2>Man Pages</h2>
<ol>
<li><a href="http://www.kernel.org/doc/man-pages/online/pages/man2/sched_setscheduler.2.html">sched_setscheduler</a></li>
<li><a href="http://www.kernel.org/doc/man-pages/online/pages/man7/cpuset.7.html">cpuset</a></li>
<li><a href="http://www.kernel.org/doc/man-pages/online/pages/man7/signal.7.html">signal</a></li>
<li><a href="http://www.kernel.org/doc/man-pages/online/pages/man2/getrlimit.2.html">getrlimit</a></li>
<li><a href="http://www.kernel.org/doc/man-pages/online/pages/man3/ulimit.3.html">ulimit</a></li>
<li><a href="http://www.kernel.org/doc/man-pages/online/pages/man2/ioprio_get.2.html">ioprio_get</a></li>
<li><a href="http://www.kernel.org/doc/man-pages/online/pages/man2/ioprio_set.2.html">ioprio_set</a></li>
</ol>


<h2>Kernel Documentation</h2>
<ul>
<li><a href='http://uploads.askapache.com/2009/08/sched-stats.txt'>information on schedstats (Linux Scheduler Statistics)</a></li>
<li><a href='http://uploads.askapache.com/2009/08/sched-rt-group.txt'>real-time group scheduling</a></li>
<li><a href='http://uploads.askapache.com/2009/08/sched-nice-design.txt'>How and why the scheduler's nice levels are implemented</a></li>
<li><a href='http://uploads.askapache.com/2009/08/sched-domains.txt'>information on scheduling domains</a></li>
<li><a href='http://uploads.askapache.com/2009/08/sched-design-CFS.txt'>goals, design and implementation of the Complete Fair Scheduler</a></li>
</ul>



<h2>Future Discussions:</h2>
<p><a href="http://www.cuddletech.com/blog/pivot/entry.php?id=820">IO Benchmarking: How, Why and With What</a></p><p><a href="http://www.askapache.com/optimize/optimize-nice-ionice.html"></a><a href="http://www.askapache.com/optimize/optimize-nice-ionice.html">Optimizing Servers and Processes for Speed with ionice, nice, ulimit</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/optimize/optimize-nice-ionice.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

