<?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>Hot Koehls &#187; extension</title>
	<atom:link href="http://frankkoehl.com/tag/extension/feed/" rel="self" type="application/rss+xml" />
	<link>http://frankkoehl.com</link>
	<description>The more you know, the more you don&#039;t know</description>
	<lastBuildDate>Thu, 10 May 2012 18:34:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Versatile random string generator</title>
		<link>http://frankkoehl.com/2008/12/versatile-random-string-generator/</link>
		<comments>http://frankkoehl.com/2008/12/versatile-random-string-generator/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 22:34:30 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[For techies]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://frankkoehl.com/?p=221</guid>
		<description><![CDATA[A cursory glance around the web will reveal a ton of PHP-based random string generators. With enough looking you&#8217;ll find generators that do any of the following: Strings with letters Strings with numbers Strings with letters and numbers Uppercase, lowercase Fixed, variable length strings Option to include symbols Problem is, none of them ever incorporated [...]]]></description>
			<content:encoded><![CDATA[<p>A cursory glance around the web will reveal a ton of PHP-based random string generators. With enough looking you&#8217;ll find generators that do any of the following:</p>
<ul>
<li>Strings with letters</li>
<li>Strings with numbers</li>
<li>Strings with letters <strong>and</strong> numbers</li>
<li>Uppercase, lowercase</li>
<li>Fixed, variable length strings</li>
<li>Option to include symbols</li>
</ul>
<p>Problem is, none of them ever incorporated all this functionality.  Every generator was a hodgepodge, e.g. some forced inclusion of numbers, or allowed either upper or lowercase, not both.  All of these are great options, and it would be great to have all of them at your disposal in one tight function.</p>
<p>No more! I got so sick of finding shortcomings that I finally just put it all together myself. The following function allows you to choose a string length, as well as the character sets to use when building your random string. You can even include a set more than once, giving greater usage weight to certain characters. Finally, complete flexibility!</p>
<pre lang="php">
function koehl_generator($length = 10, $charsets = 'lower') {
  $upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  $lower = 'abcdefghijklmnopqrstuvwxyz';
  $numbers = '1234567890';
  $symbols = '!@#$%^&#038;*()-_=+<>,.?/:;[]{}|~';

  if (!is_array($charsets)) $charsets = array($charsets);
  $charset_pool = array();
  foreach ($charsets as $set) {
    $charset_pool[] = $$set;
  }
  $max = (sizeof($charset_pool) - 1);
  $v = '';
  for ($i = 0; $i < $length; $i++) {
    $this_pool = $charset_pool[rand(0, $max)];
    $v .= $this_pool[(rand() % strlen($this_pool))];
  }
  return $v;
}

// usage examples
echo koehl_generator(10, 'upper') . '';
echo koehl_generator(10, 'lower') . '';
echo koehl_generator(10, 'numbers') . '';
echo koehl_generator(10, 'symbols') . '';
echo koehl_generator(10, array('upper', 'lower')) . '';
// order of the array in the second argument does not matter
echo koehl_generator(15, array('lower', 'upper', 'numbers')) . '';
echo koehl_generator(15, array('lower', 'numbers', 'upper')) . '';
echo koehl_generator(15, array('upper', 'lower', 'numbers', 'symbols')) . '';
echo koehl_generator(15, array('lower', 'symbols')) . '';
// note how often letters appear in the next one
echo koehl_generator(20, array('lower', 'lower', 'numbers')) . '';
</pre>
<p>Adding your own custom set is easy too. Include a new set following the syntax of the existing ones, then call your new set by variable name in the second argument...</p>
<pre lang="php">
// add this to the top of the function...
$the_basics = 'abc123';

// then use it like so...
echo koehl_generator(5, 'the_basics') . '';
echo koehl_generator(10, array('the_basics', 'symbols')) . '';
</pre>
<p>If you find this useful, please be sure to give me some link love, just a reference URL to this page in your code would be fine. Using the share buttons below would be great as well!</p>
]]></content:encoded>
			<wfw:commentRss>http://frankkoehl.com/2008/12/versatile-random-string-generator/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Easily calculate dates and times in different timezones</title>
		<link>http://frankkoehl.com/2008/11/easily-calculate-dates-and-times-in-different-timezones/</link>
		<comments>http://frankkoehl.com/2008/11/easily-calculate-dates-and-times-in-different-timezones/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 22:18:47 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[For techies]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[fwdvault]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://frankkoehl.com/?p=157</guid>
		<description><![CDATA[Building off my last post, where I showed you how to easily display any public Twitter feed on your site, I ran into another problem: the dates that are delivered by the Twitter API all reflect Greenwich Mean Time (GMT). Now I thought about going the old route and doing some convoluted math using date(), [...]]]></description>
			<content:encoded><![CDATA[<p>Building off my last post, where I showed you how to <a href="http://frankkoehl.com/2008/11/display-twitter-updates-on-your-website/">easily display any public Twitter feed on your site</a>, I ran into another problem: the dates that are delivered by the Twitter API all reflect Greenwich Mean Time (GMT). Now I thought about going the old route and doing some convoluted math using <code><a href="http://us3.php.net/manual/en/function.date.php">date()</a></code>, <code><a href="http://us3.php.net/manual/en/function.strtotime.php">strtotime()</a></code>, and <code><a href="http://us3.php.net/manual/en/function.mktime.php">mktime()</a></code>, but I thought it was time find a serious solution, one that would allow me to display the correct time for whatever timezone I wished.</p>
<p>So while searching the web, I came across an insightful post that discussed PHP&#8217;s built-in <a href="http://us3.php.net/manual/en/function.date-create.php">DateTime object</a>. I try hard to keep up with all the tech in my job, but this one got through the cracks, and I was instantly intrigued. So after some research and fiddling, I came up with the following block of code, which will allow you to <strong>easily translate dates/times to and from any timezone</strong>.</p>
<pre lang="php">date_default_timezone_set('GMT');
$datetime = new DateTime('2008-11-25 16:48:13');
$tz = new DateTimeZone('America/New_York');
$datetime->setTimezone($tz);
$time_display = $datetime->format('D, M jS g:ia T');</pre>
<p>The process is a little convoluted, so here&#8217;s what&#8217;s going on. First we must set the system-wide timezone to match that of the date/time we would like to translate. In this example, it&#8217;s about 4:50pm on Nov 25, 2008 in the GMT timezone. Next we create a DateTime object with that time (FYI you can use any format accepted by <a href="http://us3.php.net/manual/en/function.strtotime.php">strtotime()</a><code>).</code></p>
<p>Next we create a <code><a href="http://us3.php.net/manual/en/function.timezone-open.php">DateTimeZone</a></code> object. Keep in mind that this step stands completely on its own, and can be performed anytime up to now.</p>
<p>Finally, we pass the <code>DateTimeZone</code> object as the lone argument in a call to the <code><a href="http://us3.php.net/manual/en/function.date-timezone-set.php">setTimezone()</a></code> method. This will change the timezone stored in $datetime from GMT to EST, and automatically update the date/time accordingly, which we output with a call to the <code><a href="http://us3.php.net/manual/en/function.date-format.php">format</a></code> method.</p>
<p>Note that I used object-oriented syntax for this process, but there is a procedural style (i.e. functions) as well. I prefer OOP here because it&#8217;s just easier to read and follow.</p>
<p>Valid arguments for <code>date_default_timezone_set()</code> and <code>DateTimeZone()</code> come from PHP&#8217;s <a href="http://us3.php.net/manual/en/timezones.php">list of supported timezones</a>.</p>
<p>So now that we can translate timezones, let&#8217;s apply it to <a href="http://frankkoehl.com/2008/11/display-twitter-updates-on-your-website/">my Twitter example&#8230;</a></p>
<pre lang="php">
<ul>
<?php
  if ( $twitter_xml = twitter_status('12345678') ) {
    date_default_timezone_set('GMT');
    $tz = new DateTimeZone('America/New_York');
    $i = 0;
    foreach ($twitter_xml->status as $key => $status) {
      $datetime = new DateTime($status->created_at);
      $datetime->setTimezone($tz);
      $time_display = $datetime->format('D, M jS g:ia T');
?>
<li><?php echo $status->text . '' . $time_display; ?></li>

<?php
      ++$i;
      if ($i == 5) break;
    }
?>
<li><a href="http://twitter.com/YOUR_PROFILE_HERE">more...</a></li>

<?php
  } else {
    echo 'Sorry, Twitter seems to be unavailable at the moment...again...';
  }
?>
</ul>
</pre>
<p>Sidenote: While I was working on this I found GMT and UTC used almost interchangeably. For all intents and purposes, they are identical. But there is a technical difference: GMT is based on the rotation of the earth (less precise), while UTC is based on an atomic clock (more precise). Don&#8217;t worry, you and I are not the only ones who got confused.</p>
<p><strong>Build a slick Twitter feed on your site</strong></p>
<ol>
<li><a href="/2008/11/display-twitter-updates-on-your-website/">Display Twitter updates on your website</a></li>
<li class="green bold">Calculate dates and times in different timezones (translate Twitter timestamps)</li>
<li><a href="/2008/12/parse-urls-in-text-create-links">Parse URL’s in text, create links</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://frankkoehl.com/2008/11/easily-calculate-dates-and-times-in-different-timezones/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Display Twitter updates on your website</title>
		<link>http://frankkoehl.com/2008/11/display-twitter-updates-on-your-website/</link>
		<comments>http://frankkoehl.com/2008/11/display-twitter-updates-on-your-website/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 02:43:10 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[For entrepreneurs]]></category>
		<category><![CDATA[For everyone]]></category>
		<category><![CDATA[For techies]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[fwdvault]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://frankkoehl.com/?p=148</guid>
		<description><![CDATA[Update: I&#8217;ve added a new chunk of code that will download and store your Twitter posts in a database, allowing you to do whatever the heck you want with them. After you&#8217;ve finished reading this, be sure to check that out as well. I am not a fan of social networking or so-called lifestreaming. I [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> I&#8217;ve added a new chunk of code that will <a href="http://frankkoehl.com/2009/08/archive-entire-twitter-timeline/">download and store your Twitter posts in a database</a>, allowing you to do whatever the heck you want with them. After you&#8217;ve finished reading this, be sure to check that out as well.</p>
<p>I am not a fan of social networking or so-called <a href="http://www.wordspy.com/2007/11/lifestreaming.html">lifestreaming</a>. I think it&#8217;s a BS excuse to fiddle on your computer more. Instead of telling everyone where you are and what you&#8217;re doing, go out and meet some friends for a drink.</p>
<p>However I did find a practical use for <a href="http://www.twitter.com">Twitter</a> in a <a href="http://www.phparch.com">recent issue of php|architect</a> (<em>Twitter as a Development Tool</em> by Sam McCallum). The article discussed using Twitter as an automated logger, where a program would make posts to a Twitter account based on system actions (i.e. log in/out, create accounts, etc.).</p>
<p>I decided to turn the idea around a bit and use Twitter as an activity log to chronicle my development work on a new project. Think SVN log comments without the repository. The site itself is currently a simple placeholder page, so Twitter updates make an easy way to keep a website fresh while building out the service that will eventually reside there. It also engages the users that wind up looking at the site, letting them know that it might be something of interest to them. That&#8217;s to say nothing of any SEO or attention-grabbing effects that may result from having a Twitter stream.</p>
<p>Given the rabidity surrounding said scoial networking silliness, I <strong>thought</strong> that finding a suitable plug &#8216;n play solution to this would be easy. Surprisingly (or perhaps <strong>un</strong>surprisingly) many of the Twitter scripts I found were plain garbage. The following code was put together by sifting through what I found and putting the best working bits together. So if this sounds interesting, or if you were also frustrated with the plethora of crappy Twitter code, here&#8217;s how you can easily display your Twitter updates on any site using PHP.</p>
<p>First, grab this function&#8230;</p>
<pre lang="php">function twitter_status($twitter_id, $hyperlinks = true) {
  $c = curl_init();
  curl_setopt($c, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/$twitter_id.xml");
  curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 3);
  curl_setopt($c, CURLOPT_TIMEOUT, 5);
  $response = curl_exec($c);
  $responseInfo = curl_getinfo($c);
  curl_close($c);
  if (intval($responseInfo['http_code']) == 200) {
    if (class_exists('SimpleXMLElement')) {
      $xml = new SimpleXMLElement($response);
      return $xml;
    } else {
      return $response;
    }
  } else {
    return false;
  }
}</pre>
<p>I&#8217;m not going to discuss the various cURL options here or how Twitter uses cURL, as its outside the scope of our discussion here. If you&#8217;re lost or curious, you can read up on <a href="http://curl.haxx.se/">the cURL library</a>, <a href="http://www.php.net/curl">cURL in PHP</a>, and/or the <a href="http://apiwiki.twitter.com">Twitter API</a>.</p>
<p>As its name implies, <code>twitter_status()</code> will connect to Twitter and grab the timeline for the Twitter account identified by the <code>$twitter_id</code>. The <code>$twitter_id</code> is a unique number assigned to every Twitter account. You can find yours by visiting your profile page and examining the RSS link at the bottom left of the page. The URL will look like this:</p>
<pre>http://twitter.com/statuses/user_timeline/12345678.rss</pre>
<p>That 8-digit number at the end is your ID. Grab it and pass it as the lone argument to <code>twitter_status()</code>. Note that, as long as your Twitter profile is public, you do not need to pass any credentials to retrieve a user timeline. The API makes this information available to anyone, anywhere. There are more options that can be accessed through the <code><a href="http://apiwiki.twitter.com/REST+API+Documentation#usertimeline">user_timeline()</a></code> function, if you&#8217;re curious.</p>
<p>The next step is to actually use the returned data, which comes in one of two forms: a SimpleXML object, or a raw XML document. SimpleXML is preferred because it&#8217;s a PHP object, and allows you access to all the usual object manipulation. Very easy. SimpleXML was added to PHP starting with version 5. The PHP manual <a href="http://www.php.net/simplexml">has all the necessary details on SimpleXML</a>.</p>
<p>The following code example assumes you&#8217;re using SimpleXML. Here I am taking the first five results and putting them in an HTML list. I&#8217;ll include a link to view the profile, as well as an error message in case Twitter is suffering from one of its famous fail-whale spasms.</p>
<pre lang="html">
<ul>
<?php
if ($twitter_xml = twitter_status('12345678')) {
  foreach ($twitter_xml->status as $key => $status) {
?>
<li><?php echo $status->text; ?></li>

<?php
    ++$i;
    if ($i == 5) break;
  }
?>
<li><a href="http://twitter.com/YOUR_PROFILE_HERE">more...</a></li>

<?php
} else {
  echo 'Sorry, Twitter seems to be unavailable at the moment...again...';
}
?>
</ul>
</pre>
<p>If you want to see this code in action, just check out the front page of <a href="http://fwdvault.com">Fwd:Vault</a>, my new full-time startup. While you&#8217;re checking out the code in action, why don&#8217;t you follow along with me <a href="http://twitter.com/fwdvault">@fwdvault</a>?</p>
<p><strong>Build a slick Twitter feed on your site</strong></p>
<ol>
<li class="green bold">Display Twitter updates on your website</li>
<li><a href="/2008/11/easily-calculate-dates-and-times-in-different-timezones">Calculate dates and times in different timezones</a> (translate Twitter timestamps)</li>
<li><a href="/2008/12/parse-urls-in-text-create-links">Parse URL’s in text, create links</a></li>
<li><strong>New</strong> <a href="/2009/08/archive-entire-twitter-timeline/">Download and store Twitter posts in a MySQL table</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://frankkoehl.com/2008/11/display-twitter-updates-on-your-website/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>My Firefox extension collection</title>
		<link>http://frankkoehl.com/2008/09/my-firefox-extension-collection/</link>
		<comments>http://frankkoehl.com/2008/09/my-firefox-extension-collection/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 02:42:14 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[For entrepreneurs]]></category>
		<category><![CDATA[For everyone]]></category>
		<category><![CDATA[For techies]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[extension]]></category>

		<guid isPermaLink="false">http://frankkoehl.com/?p=66</guid>
		<description><![CDATA[It seems to be some rite of passage for tech-focused blogs that they create a list of their favorite Firefox extensions. Who am I to break custom? If you&#8217;re not a web-developer, you can ignore the ones described as such, and consider the rest highly recommended. I have yet to find someone with as many [...]]]></description>
			<content:encoded><![CDATA[<p>It seems to be some rite of passage for tech-focused blogs that they create a list of their favorite Firefox extensions. Who am I to break custom? If you&#8217;re not a web-developer, you can ignore the ones described as such, and consider the rest highly recommended. I have yet to find someone with as many extensions as me. You have been warned. Finally, you&#8217;ll find a screenshot demonstrating all these extensions in action at the bottom.</p>
<hr /></p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1865">Adblock Plus</a> with <a href="https://addons.mozilla.org/en-US/firefox/addon/1136">Adblock Filterset.G Updater</a></strong></h3>
<p>This is a fairly common standard. Adblock prevents ads from showing based on regex rules. I don&#8217;t have the time or inclination to write those rules, so I use Filterset.G to create them for me automatically. Between the two, I see no ads. Ever.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1027">All-in-One Sidebar</a></strong></h3>
<p>It always drove me nuts that the download, extension, and theme panels popped up in their own window. This extension wrangles them into the sidebar area, just like the favorites. It includes an extra toolbar to toggle all the various sidebar areas, but can also contain any toolbar icon.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/6076">Better Gmail 2</a></strong></h3>
<p>Take Greasemonkey (which I don&#8217;t use), apply it to the Gmail interface, and you have Better Gmail 2. It adds some nice JavaScript-powered effects to the various pages, as well as additional information and links.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/6349">BugMeNot</a></strong></h3>
<p>I love using the <a href="http://www.bugmenot.com">BugMeNot</a> service to circumvent those stupid sign-up requirements. I just want to read your article/download your software, get the hell out of the way! This plugin saves me from even having to visit the site. Right-click a login box, choose the BugMeNot option, and the login information is filled in automatically.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1368">ColorfulTabs</a></strong></h3>
<p>Applies a different color to each tab, making each tab stand out a little bit better. Also includes options to associate the color with the content of the page.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/271">ColorZilla</a></strong></h3>
<p>If you do any kind of design (but especially web design), you probably look at the web at least for some inspiration. This extension lets you grab any color displayed on any page. You can manually choose colors from the web-based palette, prepare a palette combination, and save your favorite colors.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1815">Console<sup>2</sup></a></strong></h3>
<p>Beefs up Firefox&#8217;s default error console. Search errors for specific text. Filter by JS, CSS, XML, chrome, or page content.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/743">CustomizeGoogle</a></strong></h3>
<p>If Better Gmail 2 is the flash, this one is the bang. Goes deep into the top 16 Google properties and guts all the crap. Remove ads, remove sponsored links, force to secure connection (for things like Calendar and Docs).</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/26">Download Statusbar</a></strong></h3>
<p>Another generally popular pick. I use it for the same reason I use All-in-One Sidebar: it corrals Firefox&#8217;s bad habit of opening little extra windows. This one tucks downloads into a dynamic bar along the bottom. Each item is displayed as a progress bar, and includes a ton of download stats when moused over. After the download is done, double click to open/execute it, and the item is removed from the list automatically.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/4554">Extended Copy Menu</a></strong></h3>
<p>If you&#8217;re a developer, this is <strong>the</strong> must-have extension you&#8217;ve never heard of. It allows you to grab a copy of text from the browser in plain text format, i.e. without any special formatting. No more screwed up layout when you copy stuff into an e-mail or Word doc. Inversely, it also has a HTML copy option, which explicitly and cleanly grabs HTML along with the text.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/5861">Fancy Numbered Tabs</a></strong></h3>
<p>Replaces the closed graphic on tabs with a number. Like ColorfulTabs, I find it makes it just a little bit easier to navigate my tabs. It may bork the tab in some of the more elaborate themes.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1269">Fasterfox</a></strong></h3>
<p>Another overall top pick. Fasterfox makes tweaks to Firefox&#8217;s configuration options (enter about:config into your address line to see them) to increase performance, sometimes drastically. Install, make sure it&#8217;s set to &#8220;Turbo Charged,&#8221; and you&#8217;re done.</p>
<p>Note: Fasterfox is currently marked as &#8220;Experimental,&#8221; which means you have to have an account on the Mozilla site to download it. I can say that it has worked fine for me, your results could vary (but probably not).</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a> plus <a href="https://addons.mozilla.org/en-US/firefox/addon/5369">YSlow</a> and <a href="https://addons.mozilla.org/en-US/firefox/addon/7613">Jiffy</a></strong></h3>
<p>At this point, this one really needs no introduction or explanation. If you do anything with the web, Firebug is a must-have. It has debugging options. Lots of them. JavaScript, CSS, XML, HTML, AJAX. This post is already too long, <a href="http://getfirebug.com/docs.html">read the documentation</a> for all the details.</p>
<p>YSlow and Jiffy are nice complements to Firebug&#8217;s standard functions. YSlow evaluates a given page and tells you how to speed things up. Includes links to the now-famous <a href="http://developer.yahoo.com/performance/">Exceptional Performance</a> section of Yahoo&#8217;s Developer Network. Jiffy focuses on your Javascript and identifies which ones slowing up your page loads. Jiffy is also &#8220;Experimental,&#8221; like Fasterfox.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/684">FireFTP</a></strong></h3>
<p>A solid FTP client is another required tool in any developer&#8217;s toolbox. I&#8217;ve tried all the usuals. CuteFTP, Filezilla, SmartFTP, WinSCP, each with their drawbacks. Lowsy interfaces, no reconnect, upload failure&#8230;Plus it&#8217;s another window I have to click, in addition to my browser and my coding interface. FireFTP has no downsides that I&#8217;ve found yet, sites right next to whatever site I&#8217;m working on, and is totally free.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/398">Forecastfox</a></strong></h3>
<p>I don&#8217;t know anyone who doesn&#8217;t have this one. As if web-based weather wasn&#8217;t easy enough, now I don&#8217;t even need to browse anywhere to see the current, upcoming, and next day&#8217;s forecast. Mouseovers for radar and forecast details. Click any one for more information via <a href="http://www.AccuWeather.com">AccuWeather.com</a> (and with Adblock/Filterset.G, you won&#8217;t be bothered with their ads, either!). Automatic sliders for weather alerts.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/2410">Foxmarks Bookmark Synchronizer</a></strong></h3>
<p>Never worry about backing up your bookmarks again! Sign up for the free service (prompted automatically after installation), and Foxmarks will automatically maintain a remote copy of your bookmarks. If you&#8217;re away from your computer, you can access the bookmarks from their website. Side bonus: you can keep bookmarks in sync across multiple computers! I have an office laptop and a home desktop, and they always have the same bookmark list.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/173">Gmail Notifier</a></strong></h3>
<p>There are tons of mail notifiers now, but if you use Gmail, this is one of the best. Easy setup, manage multiple accounts, automatic login, and a new mail alert slider.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1419">IE Tab</a></strong></h3>
<p>Windows users have to go to the dark side for frequent security updates, and the occasional corporate site or intranet that Microsoft holds by the figs. Now you never have to leave the comforts of open-source home. This extension allows you to open a tab powered by the IE engine. Works with ActiveX plugins, so the Windows Updates site works fine.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/7637">Old Location Bar</a></strong></h3>
<p>I love the <a href="http://www.mozilla.com/en-US/firefox/3.0/releasenotes/">improvements in Firefox 3</a> save one: the auto-complete box that pops up as you type in the address bar. There&#8217;s so much going on in it, I find it impossible to discern the actual results at a glance. I don&#8217;t care about the page&#8217;s description, what&#8217;s the damn URL? Apparently I&#8217;m not alone. This extension brings back the simple listing behavior you saw in Firefox 2. Listed as &#8220;Experimental&#8221; like Firebug and Jiffy list above.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/636">PDF Download</a></strong></h3>
<p>Ever click a link, only to get whacked in the face with that awful Adobe PDF plugin? Here&#8217;s an early warning system. When you click a PDF link, you are prompted with a series of options. Download it, open it using settings specified in the extension options, convert to HTML via <a href="http://www.pdfdownload.org">PDF Download</a>, use Firefox&#8217;s default behavior (usually aforementioned Adobe garbage), or cancel the download.</p>
<h3><strong>Bonus! <a href="http://www.download.com/Foxit-PDF-Reader/3000-2079_4-10313206.html">Foxit PDF Reader</a></strong></h3>
<p>Okay, it&#8217;s not a Firefox extension, but I just can&#8217;t let one more person suffer under Adobe PDF Reader. That thing is a bloated, cpu-hogging, memory gobbling crap-fest. If all you need to do is view PDF documents (i.e. 99% of us), Foxit will meet your needs without running background clients (check your startup folder), and uses a fraction of the disk space.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/3559">Quick Restart</a></strong></h3>
<p>Ever notice that restart button you get when you install a new theme or extension? Now you can have that functionality whenever you want. Firefox still has a shifty memory leak, and this extension really saves me when it rears its ugly head. Hit the button, browser off, browser on. Tabs are saved.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/590">ShowIP</a></strong></h3>
<p>Shows the IP Address of the site you are viewing in the bottom taskbar. A must for web guys, but security wonks and general tech enthusiasts will like this.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/138">StumbleUpon</a></strong></h3>
<p>Ever notice your browsing habits get into a rut? You look at the same sites, or you friends keep sending similar YouTube videos of people acting like idiots. Break out! Install the plugin, create an account, set your desired topics, and click the button. SU will send you off to places previously unknown. Give your destinations a thumbs up or down, and SU will learn to tailor its offerings to you (a bit).  StumbleUpon has been gaining more and more steam for its unique approach to browsing. However I saw the potential early on. <a href="http://blind-side.stumbleupon.com">Check out that &#8220;Member since&#8221; date!</a></p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1455">Tiny Menu</a></strong></h3>
<p>If you&#8217;re a frequent flyer on the menu bar (File, Edit, View, etc. alogn the top), just go right past this. But if you&#8217;re a snobby tech elitist who has evolved past menus and into keyboard shortcuts, you&#8217;ll love Tiny menu. Condenses all the menu bar options under a single icon, allowing you to use the bar for other purposes, or eliminate it entirely. I stretch my address bar across the length, and give the search bar it&#8217;s own line beneath.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/2098">Update Notifier</a></strong></h3>
<p>Firefox does a good job of looking for updates routinely, but only does so at startup. So if you leave your browser open for long periods of time (or indefinitely, like me), you never get those notices. Enter this extension, which checks for updates at a routine interval (adjustable, 24 hours by default), and displays notifies you by highlighting the menu bar icon. The icon also allows you to run a manual check. Another click will automatically install the updates, and a third will restart the browser. All of these steps can be automated.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/59">User Agent Switcher</a></strong></h3>
<p>Another must-have for web developers and designers here. It changes the user-agent string to whatever you want. In layman&#8217;s terms, you can masquerade as any other browser. Great for testign browser-specific stylesheets, as well as security settings.</p>
<h3><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/60">Web Developer</a></strong></h3>
<p>Complements really well with Firebug, though there is a fair bit of overlap. I use it a lot to resize the browser for specific pixel dimensions (how <em>does</em> this page look at 800 x 600?), outline elements for layout debugs, reset my browser cache, find broken images, test my Javascript graceful degradation (or, often, lack thereof), or measure an elements actual size with the ruler. Plenty of other useful data outputs.</p>
<hr />
<p><a href="/examples/my-browser.png">Here&#8217;s what all that looks like in action.</a> It&#8217;s a bit of a departure from the default layout, but it works for me. Hopefully you&#8217;ll find something useful in that list as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://frankkoehl.com/2008/09/my-firefox-extension-collection/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Greatest Firefox plugin</title>
		<link>http://frankkoehl.com/2008/06/the-greatest-firefox-plugin/</link>
		<comments>http://frankkoehl.com/2008/06/the-greatest-firefox-plugin/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 10:15:22 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[For everyone]]></category>
		<category><![CDATA[For techies]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[extension]]></category>

		<guid isPermaLink="false">http://frankkoehl.com/?p=24</guid>
		<description><![CDATA[&#8230;ever. http://amionmyspace.com]]></description>
			<content:encoded><![CDATA[<p>&#8230;ever.</p>
<p><a href="http://amionmyspace.com">http://amionmyspace.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://frankkoehl.com/2008/06/the-greatest-firefox-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

