<?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>MattKruse.com &#187; Programming</title>
	<atom:link href="http://mattkruse.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://mattkruse.com</link>
	<description></description>
	<lastBuildDate>Sat, 14 Aug 2010 21:08:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Restore The &quot;Unread&quot; Selector Link In GMail!</title>
		<link>http://mattkruse.com/2010/08/14/restore-the-unread-selector-link-in-gmail/</link>
		<comments>http://mattkruse.com/2010/08/14/restore-the-unread-selector-link-in-gmail/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 21:08:43 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[GreaseMonkey]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2010/08/14/restore-the-unread-selector-link-in-gmail/</guid>
		<description><![CDATA[Google recently updated GMail, and in the process they removed the &#34;Select&#34; line just under the buttons at the top. Unfortunately for most people (myself included), this was something that they used often! After reading the messages that weren&#8217;t spam, my natural motion was to select &#34;Unread&#34;, then move up a bit and click Delete. [...]]]></description>
			<content:encoded><![CDATA[<p>Google recently updated GMail, and in the process they removed the &quot;Select&quot; line just under the buttons at the top. Unfortunately for most people (myself included), this was something that they used often! After reading the messages that weren&#8217;t spam, my natural motion was to select &quot;Unread&quot;, then move up a bit and click Delete. I used it many times a day.</p>
<p>But after the update, the selector was hidden in a dropdown under a checkbox on the left. Very inconvenient!</p>
<p>So, Greasemonkey to the rescue again!&#160; I wrote this Greasemonkey script: <a title="http://userscripts.org/scripts/show/83525" href="http://userscripts.org/scripts/show/83525"><a title="Gmail - Restore &quot;Select&quot; line including &quot;Unread&quot; link" href="http://userscripts.org/scripts/show/83525" target="_blank">Gmail &#8211; Restore &quot;Select&quot; line including &quot;Unread&quot; link</a></a></p>
<p>This will add the &quot;Select&quot; line in and bring back one-click access to message selection, like this:</p>
<p><img title="gmail_Select" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 10px; border-left: 0px; border-bottom: 0px" height="59" alt="gmail_Select" src="http://mattkruse.com/wp-content/uploads/2010/08/gmail_Select.gif" width="513" border="0" /> </p>
<p>Enjoy <img src='http://mattkruse.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2010/08/14/restore-the-unread-selector-link-in-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Safari Extension Gallery Has Big Impact On Better Facebook!</title>
		<link>http://mattkruse.com/2010/07/29/safari-extension-gallery-has-big-impact-on-better-facebook/</link>
		<comments>http://mattkruse.com/2010/07/29/safari-extension-gallery-has-big-impact-on-better-facebook/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 14:03:24 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[browser extensions]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[utils]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2010/07/29/safari-extension-gallery-has-big-impact-on-better-facebook/</guid>
		<description><![CDATA[Background
On July 28 2010, Apple officially released a new version of Safari, and along with it the Extension Gallery. A few weeks before the release, I received an email from Apple requesting that developers submit their extensions for consideration to be included in the gallery when it was released. I was happy that Better Facebook, [...]]]></description>
			<content:encoded><![CDATA[<h2>Background</h2>
<p>On July 28 2010, Apple officially released a new version of Safari, and along with it the <a href="http://extensions.apple.com" target="_blank">Extension Gallery</a>. A few weeks before the release, I received an email from Apple requesting that developers submit their extensions for consideration to be included in the gallery when it was released. I was happy that <a href="http://BetterFacebook.net" target="_blank">Better Facebook</a>, my browser/script extension that I have been working on for almost a year, worked great in Safari and that I had previously figured out how to package an official Safari Extension. So I filled out the form and submitted Better Facebook to the gallery.</p>
<p>On the morning of July 28, I got an Google Alert email with a new match for the term &quot;Better Facebook&quot; (I am a self-stalker!). It pointed me to the Safari Extension Gallery, and I knew that I could expect a bump in traffic for the day.</p>
<p>Thankfully, Better Facebook is prominently featured in the gallery, near the top of the listings, and the first extension to be listed in the &quot;<a href="http://extensions.apple.com/#social-networking" target="_blank">Social Networking</a>&quot; category:</p>
<p><a href="http://mattkruse.com/wp-content/uploads/2010/07/bfb_gallery.png" target="_blank"><img title="bfb_gallery" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="291" alt="bfb_gallery" src="http://mattkruse.com/wp-content/uploads/2010/07/bfb_gallery_thumb.png" width="704" border="0" /></a> </p>
<h2>Impact On Site Traffic</h2>
<p>Previously, my site got around 1,000 hits a day – sometimes more, which I was always pretty happy with. But you can see the history compared to July 28!</p>
<p><a href="http://mattkruse.com/wp-content/uploads/2010/07/bfb_stats_long.png" target="_blank"><img title="bfb_stats_long" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="395" alt="bfb_stats_long" src="http://mattkruse.com/wp-content/uploads/2010/07/bfb_stats_long_thumb.png" width="704" border="0" /></a> </p>
<p>Looking closer at just the one day of traffic, I found that I got over 16,000 hits to the site itself!</p>
<p><a href="http://mattkruse.com/wp-content/uploads/2010/07/bfb_stats_day.png" target="_blank"><img title="bfb_stats_day" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="163" alt="bfb_stats_day" src="http://mattkruse.com/wp-content/uploads/2010/07/bfb_stats_day_thumb.png" width="704" border="0" /></a> </p>
<p>Looking at the referers, I found that over 10,000 of those hits came directly from the Safari Extension Gallery:</p>
<p><a href="http://mattkruse.com/wp-content/uploads/2010/07/bfb_stats_referers.png" target="_blank"><img title="bfb_stats_referers" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="369" alt="bfb_stats_referers" src="http://mattkruse.com/wp-content/uploads/2010/07/bfb_stats_referers_thumb.png" width="704" border="0" /></a> </p>
<p>I was happy to see that Better Facebook was mentioned in other stories about the Extension Gallery also, including <a href="http://www.zdnet.com/blog/gadgetreviews/apple-releases-safari-50-update-includes-extensions-gallery/16798" target="_blank">ZDNet</a> and <a href="http://lifehacker.com/5598524/" target="_blank">Lifehacker</a>.</p>
<p>I haven&#8217;t totaled up the number of actual downloads yet, but I did exceed my bandwidth limitations yesterday. I might need to increase my hosting capabilities if this continues.</p>
<h2>Impact On Facebook Page</h2>
<p>Better Facebook also has an official Page on Facebook, and the impact on the number of people who &quot;Like&quot; it was dramatic!</p>
<p>The history of &quot;Likes&quot; of the page looks like this:</p>
<p><a href="http://mattkruse.com/wp-content/uploads/2010/07/bfb_stats_fan_history.png" target="_blank"><img title="bfb_stats_fan_history" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="323" alt="bfb_stats_fan_history" src="http://mattkruse.com/wp-content/uploads/2010/07/bfb_stats_fan_history_thumb.png" width="503" border="0" /></a> </p>
<p>A slow, steady growth pattern to what I considered to be a pretty impressive number – 8,500 fans before July 28th. But on the day itself, I saw an impressive growth of almost 2,000 new fans! That put the page over 10,000 fans, which is a number that many companies and pages would envy. As I write this, the page stands at 10,691 fans and it just keeps going up. It will be interesting to see the historical graph once it is updated in Facebook Insights.</p>
<h2>Conclusion</h2>
<p>I have put many hours of work into Better Facebook, and I&#8217;ve been happy to see it grow and its popularity slowly increase. I find it incredibly useful for myself, and most users seem enthusiastic about what it does also. The problem has always been how to get it to &quot;explode&quot; and really take off and find a wider userbase. Being listed in the Extension Gallery has finally been the spark that made this happen, and I&#8217;m very happy about it! It&#8217;s a fun, interesting experience and I get to learn a lot from it. It helps me create better software and learn new ways to share information and interact with users in the social space. I&#8217;m grateful for the exposure, and humbled by the positive reactions of thousands of users.</p>
<p>Now… can I somehow profit a little from this? Heh. We&#8217;ll see…</p>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2010/07/29/safari-extension-gallery-has-big-impact-on-better-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Greasemonkey JSON Unicode Problems &#8211; Solved!</title>
		<link>http://mattkruse.com/2010/03/26/greasemonkey-json-unicode-problems-solved/</link>
		<comments>http://mattkruse.com/2010/03/26/greasemonkey-json-unicode-problems-solved/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 20:18:50 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[GreaseMonkey]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[browser extensions]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2010/03/26/greasemonkey-json-unicode-problems-solved/</guid>
		<description><![CDATA[I had a number of users report problems with my Better Facebook! Firefox Add-on. The error was always with JSON.parse(), and it only happened with the Add-on, not the Greasemonkey version of the script. I was stumped for over a month. Couldn&#8217;t figure it out.
Finally, I found the root cause and solution.
The problem was unicode [...]]]></description>
			<content:encoded><![CDATA[<p>I had a number of users report problems with my <a href="https://addons.mozilla.org/en-US/firefox/addon/52369" target="_blank">Better Facebook! Firefox Add-on</a>. The error was always with JSON.parse(), and it only happened with the Add-on, not the <a href="http://userscripts.org/scripts/show/61761" target="_blank">Greasemonkey version of the script</a>. I was stumped for over a month. Couldn&#8217;t figure it out.</p>
<p>Finally, I found the root cause and solution.</p>
<p>The problem was unicode strings being passed into JSON.stringify(). This sometimes resulted in an invalid JSON structure, which then failed when passed to JSON.parse(). The root cause was not within my code, but within the Greasemonkey <a href="http://arantius.com/misc/greasemonkey/script-compiler" target="_blank">User Script Compiler</a> that I used to create the Add-on.</p>
<p>The problem was that the script was not being read in using UTF-8, so when executed it didn&#8217;t properly handle UTF-8. In the script-compiler.js file, line 22 (for me) I found this:</p>
<blockquote><p>var channel=ioService.newChannel(aUrl, null, null);</p>
</blockquote>
<p>I simply had to change the line to this instead:</p>
<blockquote><p>var channel=ioService.newChannel(aUrl, &quot;UTF-8&quot;, null);</p>
</blockquote>
<p>I re-packaged the add-on and the problem disappeared! Hopefully it anyone else runs into this, a quick Google search will find this page. In all my searching, I hadn&#8217;t come across anyone else talking about this specific issue. But solving a very needle-in-a-haystack problem is very rewarding, and I&#8217;ll be glad to stop getting error reports!</p>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2010/03/26/greasemonkey-json-unicode-problems-solved/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Better Facebook</title>
		<link>http://mattkruse.com/2010/02/10/better-facebook/</link>
		<comments>http://mattkruse.com/2010/02/10/better-facebook/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 17:22:28 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[GreaseMonkey]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[browser extensions]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2010/02/10/better-facebook/</guid>
		<description><![CDATA[ I have officially released BetterFacebook.net to house my &#34;Better Facebook&#34; greasemonkey script and Firefox add-on.
The script has been updated to work with the new Facebook layout, and also now supports Chrome!
Check out the site and the script. I hope you find it useful!
BetterFacebook.net
]]></description>
			<content:encoded><![CDATA[<p><a href="http://mattkruse.com/wp-content/uploads/2010/02/better_facebook_large.gif" target="_blank"><img title="better_facebook_large" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 20px 0px 0px; border-left: 0px; border-bottom: 0px" height="240" alt="better_facebook_large" src="http://mattkruse.com/wp-content/uploads/2010/02/better_facebook_large_thumb.gif" width="187" align="left" border="0" /></a> I have officially released <a title="Better Facebook" href="http://BetterFacebook.net" target="_blank">BetterFacebook.net</a> to house my &quot;Better Facebook&quot; greasemonkey script and Firefox add-on.</p>
<p>The script has been updated to work with the new Facebook layout, and also now supports Chrome!</p>
<p>Check out the site and the script. I hope you find it useful!</p>
<p><a title="Better Faceook" href="http://BetterFacebook.net" target="_blank">BetterFacebook.net</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2010/02/10/better-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimizing HTML</title>
		<link>http://mattkruse.com/2009/12/29/optimizing-html/</link>
		<comments>http://mattkruse.com/2009/12/29/optimizing-html/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 18:08:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2009/12/29/optimizing-html/</guid>
		<description><![CDATA[With the upcoming release of Google Caffeine and the importance it will place on page load time when it ranks results, now is as good a time as any to learn about optimizing your site. This recent blog post by kangax is a great primer for getting rid of common, unnecessary bloat.
Perfection kills » Optimizing [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://mattkruse.com/wp-content/uploads/2009/12/caffeine.jpg" />With the upcoming release of <a target="_blank" href="http://news.google.com/news?q=google+caffeine">Google Caffeine</a> and the importance it will place on page load time when it ranks results, now is as good a time as any to learn about optimizing your site. This recent blog post by kangax is a great primer for getting rid of common, unnecessary bloat.</p>
<p><a href="http://perfectionkills.com/optimizing-html/">Perfection kills » Optimizing HTML</a></p>
<blockquote></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2009/12/29/optimizing-html/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New GreaseMonkey Script: Add Netflix Links to IMDB</title>
		<link>http://mattkruse.com/2009/10/07/new-greasemonkey-script-add-netflix-links-to-imdb/</link>
		<comments>http://mattkruse.com/2009/10/07/new-greasemonkey-script-add-netflix-links-to-imdb/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 19:37:57 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[GreaseMonkey]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[browser extensions]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2009/10/07/new-greasemonkey-script-add-netflix-links-to-imdb/</guid>
		<description><![CDATA[ 
This script was born out of a simple problem: I wanted to find out which movies have been released to theaters or DVD lately, and add them to my Netflix queue. Unfortunately, Netflix doesn&#8217;t provide an easy way to browse &#34;major&#34; movie releases by release date. However, IMDB always has a nice interface for [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mattkruse.com/wp-content/uploads/2009/10/imdb-netflix2.gif" target="_blank"><img title="Example" style="border-right: 0px; border-top: 0px; display: inline; margin: 5px 20px 10px 0px; border-left: 0px; border-bottom: 0px" height="259" alt="Example" src="http://mattkruse.com/wp-content/uploads/2009/10/imdb-netflix2-thumb.gif" width="400" align="left" border="0" /></a> </p>
<p>This script was born out of a simple problem: I wanted to find out which movies have been released to theaters or DVD lately, and add them to my Netflix queue. Unfortunately, Netflix doesn&#8217;t provide an easy way to browse &quot;major&quot; movie releases by release date. However, IMDB always has a nice interface for this. Further, I&#8217;ve found myself at IMDB before, looking at a movie that I would like to add to my Netflix queue, but I had to go to Netflix, search, find the movie, then add it.</p>
<p>Solution? A new GreaseMonkey script!: <a href="http://userscripts.org/scripts/show/59249" target="_blank">Netflix Links on IMDB</a></p>
<p>I created this simple GreaseMonkey script, which adds a little red &quot;+&quot; next to movie titles on imdb.com. Clicking the image pops up a new window that searches on the movie name, usually finding the movie you want as the first match. </p>
<p>Easy! Hope it helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2009/10/07/new-greasemonkey-script-add-netflix-links-to-imdb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash Of Content with jQuery slideUp/slideDown</title>
		<link>http://mattkruse.com/2009/06/11/flash-of-content-with-jquery-slideupslidedown/</link>
		<comments>http://mattkruse.com/2009/06/11/flash-of-content-with-jquery-slideupslidedown/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 21:42:32 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2009/06/11/flash-of-content-with-jquery-slideupslidedown/</guid>
		<description><![CDATA[This is an old issue, but I never looked into it in enough detail to solve it until now.
When using slideUp() and slideDown() in jQuery (and any other animations that animate height) there is often a “flash of content” when the animation starts or stops in IE.
Here are the details you might want to know:

IE [...]]]></description>
			<content:encoded><![CDATA[<p>This is an old issue, but I never looked into it in enough detail to solve it until now.</p>
<p>When using slideUp() and slideDown() in jQuery (and any other animations that animate height) there is often a “flash of content” when the animation starts or stops in IE.</p>
<p>Here are the details you might want to know:</p>
<ol>
<li>IE 6/7 mishandles a style like “overflow:hidden;height:0px;” (which should show nothing) and instead show the entire contents of the object. But ONLY in quirks mode. This is a bug.</li>
<li>When doing a hide animation, jQuery animates to 0, and when doing show, it starts at 0</li>
<li>So when the value of 0 is set inside the animation, the entire content is flashed visibly on the screen, this causing annoyance and potential epileptic seizures.</li>
</ol>
<p>A ticket was filed with jQuery 2 years ago about this issue: <a href="http://dev.jquery.com/ticket/1726">http://dev.jquery.com/ticket/1726</a></p>
<p>Unfortunately, they changed it to “wontfix” and instead declared that FX animations are not supported in IE6/7 in quirksmode. I consider this to be pretty lazy on the part of the developers, and I&#8217;ve seen this attitude several times with regards to problems that are not so obviously solved or outlying cases. It&#8217;s disappointing.</p>
<p>I started a <a href="http://groups.google.com/group/jquery-dev/browse_frm/thread/4bab8abc05e60c80" target="_blank">thread in the jQuery Dev group</a> about this, so we&#8217;ll see if anything comes of it.</p>
<p>Meanwhile, inserting this fix into the page solves the problem:</p>
<blockquote><p><font face="Courier New">jQuery.fx.prototype.originalCustom = jQuery.fx.prototype.custom;        <br />jQuery.fx.prototype.custom = function(from,to,unit) {         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (this.prop==&#8217;height&#8217;) {         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; to = to || 1;         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; from = from || 1;         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.originalCustom(from,to,unit);         <br />}</font></p>
</blockquote>
<p>It’s simple – when the to or from value in the animation is 0, and we’re animating ‘height’, then just go to/from 1 instead. Problem solved.   </p>
<p>Hope that helps out at some point in the future when your content is flashing and you can’t figure out why…</p>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2009/06/11/flash-of-content-with-jquery-slideupslidedown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Cheat Sheet</title>
		<link>http://mattkruse.com/2009/05/07/jquery-cheat-sheet/</link>
		<comments>http://mattkruse.com/2009/05/07/jquery-cheat-sheet/#comments</comments>
		<pubDate>Thu, 07 May 2009 16:05:40 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2009/05/07/jquery-cheat-sheet/</guid>
		<description><![CDATA[
I finally updated my jQuery Cheat Sheet to match jQuery 1.3.2. I hope people find it useful!
]]></description>
			<content:encoded><![CDATA[</p>
<p><a href="http://www.javascripttoolbox.com/jquery/cheatsheet/" target="_blank"><img title="screenshot-1.3.2" style="border-right: 0px; border-top: 0px; display: inline; margin: 5px 10px 10px 0px; border-left: 0px; border-bottom: 0px" height="248" alt="screenshot-1.3.2" src="http://mattkruse.com/wp-content/uploads/2009/05/screenshot132.gif" width="240" align="left" border="0" /></a>I finally updated my <a href="http://www.javascripttoolbox.com/jquery/cheatsheet/" target="_blank">jQuery Cheat Sheet</a> to match jQuery 1.3.2. I hope people find it useful!</p>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2009/05/07/jquery-cheat-sheet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GreaseMonkey</title>
		<link>http://mattkruse.com/2009/04/09/greasemonkey/</link>
		<comments>http://mattkruse.com/2009/04/09/greasemonkey/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 15:43:49 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[browser extensions]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2009/04/09/greasemonkey/</guid>
		<description><![CDATA[ GreaseMonkey is a Firefox extension that allows you to insert javascript into any web site you browse to in order to customize the interface or add/remove/change functionality.
I&#8217;ve known of its existence for a long time, but I&#8217;ve never used it, despite my interest and experience with javascript.&#160; A recent change in iGoogle gadget functionality [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://addons.mozilla.org/en-US/firefox/addon/748"><img title="greasemonkey-logo" style="border-right: 0px; border-top: 0px; display: inline; margin: 10px 10px 25px 0px; border-left: 0px; border-bottom: 0px" height="267" alt="greasemonkey-logo" src="http://mattkruse.com/wp-content/uploads/2009/04/greasemonkeylogo.gif" width="200" align="left" border="0" /> GreaseMonkey</a> is a Firefox extension that allows you to insert javascript into any web site you browse to in order to customize the interface or add/remove/change functionality.</p>
<p>I&#8217;ve known of its existence for a long time, but I&#8217;ve never used it, despite my interest and experience with javascript.&#160; A recent change in iGoogle gadget functionality made me take another look, and now I&#8217;m hooked.</p>
<p>GreaseMonkey is not complicated, like I assumed. It&#8217;s simple. Very few API functions to learn, and you don&#8217;t even need to learn them to do most things. If you know enough about javascript, you can be up and running in no time.</p>
<p>Once its installed, I found the <a href="https://addons.mozilla.org/en-US/firefox/addon/8352">GreaseFire</a> extension is also useful. It keeps a local database of GreaseMonkey scripts from <a href="http://userscripts.org">userscripts.org</a> and lets you know if there are any existing scripts available for the sites you are viewing.</p>
<p>For my first proof of concept, I created a user script for Facebook that will pin the notifications window to the upper right corner for easy access. No need to go down and click on it when it&#8217;s red. The script can be accessed here: </p>
<blockquote><p><a title="http://userscripts.org/scripts/show/46272" href="http://userscripts.org/scripts/show/46272">http://userscripts.org/scripts/show/46272</a></p>
</blockquote>
<p>Most scripts out there are primitive, from what I can tell. The first thing I looked for was an existing library to easily manage user preferences, so a single script could offer the user multiple options. For example, what to hide, what to show, colors to use, etc. Unfortunately I couldn&#8217;t find anything that already existed, so I guess I&#8217;ll have to build my own. Maybe.</p>
<p>I also assumed there would be an easy way to upload and maintain scripts on userscripts.org, but it doesn&#8217;t look like that&#8217;s the case. It&#8217;s manual upload, so if I update my local version I have to go in and manually update the site. What a pain! Hopefully someone will improve this so updates to local scripts can be mirrored to the repository quickly and easily.</p>
<p>I&#8217;ll post more as I create them, I assume. I have more ideas for Facebook and for iGoogle, for sure…</p>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2009/04/09/greasemonkey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scramble Text</title>
		<link>http://mattkruse.com/2009/02/26/scramble-text/</link>
		<comments>http://mattkruse.com/2009/02/26/scramble-text/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 17:11:21 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mattkruse.com/2009/02/26/scramble-text/</guid>
		<description><![CDATA[The other day I had the need to scramble text on a page so I could capture a screenshot and send it to someone without them seeing the page content. I looked around for a Firefox Add-On that would do it for me but came up blank. So I wrote this quick:
javascript:function%20scramble(el){if(el.nodeType==3){el.nodeValue=el.nodeValue.replace(/[a-zA-Z]/g,function(x){return%20String.fromCharCode(((x.charCodeAt(0)&#60;97)?65:97)+Math.floor(Math.random()*26));});}else{for(var%20i=0;i&#60;el.childNodes.length;++i){scramble(el.childNodes[i]);}}};scramble(document.body);

Give it a try [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I had the need to scramble text on a page so I could capture a screenshot and send it to someone without them seeing the page content. I looked around for a Firefox Add-On that would do it for me but came up blank. So I wrote this quick:</p>
<blockquote><p>javascript:function%20scramble(el){if(el.nodeType==3){el.nodeValue=el.nodeValue.replace(/[a-zA-Z]/g,function(x){return%20String.fromCharCode(((x.charCodeAt(0)&lt;97)?65:97)+Math.floor(Math.random()*26));});}else{for(var%20i=0;i&lt;el.childNodes.length;++i){scramble(el.childNodes[i]);}}};scramble(document.body);</p>
</blockquote>
<p>Give it a try on this page to see how it works. Warning! You&#8217;ll have to reload, because you obviously won&#8217;t be able to read the text once this runs!</p>
<p><a href="javascript:function%20scramble(el){if(el.nodeType==3){el.nodeValue=el.nodeValue.replace(/[a-zA-Z]/g,function(x){return%20String.fromCharCode(((x.charCodeAt(0)&lt;97)?65:97)+Math.floor(Math.random()*26));});}else{for(var%20i=0;i&lt;el.childNodes.length;++i){scramble(el.childNodes[i]);}}};scramble(document.body);">Scramble Text</a></p>
<p>You can drag this link up to your Links toolbar or into a bookmark to make it easily available on any page.</p>
]]></content:encoded>
			<wfw:commentRss>http://mattkruse.com/2009/02/26/scramble-text/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
