Chomper Stomping 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


Teaser of things to come…


Lots going on at ChomperStomp right now.

I've been up to my eyeballs in work and in babies (3 month old and 2.5 year old).

Here's a little teaser for something big I'm working on:
User Ratings!
User Ratings, hearts AND stars!
User Ratings, OPTIONS!!!!
User Ratings!

That's right, custom user ratings in Continuum Coming November 1st! (will require either Continuum 1.9 or Continuum Refactor 11.1101, both coming 11/01/11)

Haven't settled on the price yet, probably between $50 and $100 depending on how much longer it takes...


Introducing GitScripts


GitScripts is a project that attempts to make Git user friendly.

I have been working on it for almost a year now. When we implemented Git in my office, we were having a really hard time using it. We loved the flexibility of the tool, but the interface was killing us. Doing something that should have been simple (merging one branch into another) was much too complex. Especially for people who were already struggling to remember how to use CVS through a GUI. These were very competent Java developers who just didn't have time to learn a new complex tool, but recognized we needed it.

One day my co-worker jokingly demanded that I write a set of wrapper scripts that would make the merge command comprehensible (he continually tried to merge one branch into another by checking out the branch he wanted to merge FROM and typing "git merge branch_to_merge_to", which had the disastrous result of silently doing the exact OPPOSITE of what he was trying to do. At which point he would happily push to origin. This would result in a lot of lost time, especially if we didn't catch it right away. When you are already expending a lot of brain power on a ATG/ReD/PayPal integration project, you just don't have anything left for learning a new SCM.). So I thought about it and realized that it SHOULDN'T MATTER what branch you are on, you should just be able to tell Git what you want to happen (merge branch1 into branch2) and Git should intelligently DO IT and then put you back where you were. So I made it happen.

This project is under continual development. I add something new to it every week as I find a new Git task pattern that I can automate. It finally got to the point where I couldn't stand using Git without GitScripts, so I stripped out all of the company specific pieces and threw the whole thing up on GitHub. I'm hoping that much smarter people than me can take this code and run with it and make it even more amazing. See the project page for some very basic documentation (more to come, haha, as always...) or, better yet, pop open the github repository and view the "bash_profile_config" file to see all of the different commands (aliases) currently available.

Let me know what you think! Post any bugs/questions/feature requests on the project page please.


Updates – Tab Edit 1.4, Abandoning JS Console, Limeberry news


It's apparently Code Blitz week here at HQ. We've seen 5 blog posts in the last week, and code commits to no less than 4 open source projects (plus tons behind the scenes that I won't talk about just yet, but some neat stuff is coming...)

I finally fixed the Tab Edit Chrome Extension. Update and click "Restore Defaults" and it will work again. Still working on the problem of it not persisting the favicon selection though.

I have officially abandoned work on the JS Console Chrome Extension. It's absolutely pointless. Just hold shift when you hit enter while using the native JS Console and you can get multi-line functionality. That was the whole point of JS Console, so once I discovered this, I abandoned the project. I forgot to ever let anyone know though, so this is me making it official. I've made notes in all other relevant places as well.

Limeberry is coming along just swell. I've made some major improvements today. Gradient history swatches that when you hover over you can retrieve previous gradient code. Ditched all the PHP based code in favor of JS. Gave ability to change the number of gradient stops on the fly without a page reload (still doesn't preserve your previous stops/colors). LOTS more work to come on this. The more observant of you may notice that I'm updating the URL on the fly as you make changes. Yes, that's right, very very soon you will be able to bookmark swatches you create (or email/IM links) so you can save/load swatches. This is the project I'm most excited about right now, so this will be getting some love over the next few weeks. I'm hoping to turn this into a really nifty tool and even plop down the $10 I need to get it it's own domain. I've possibly even got another dev on board to design the page (rather than it just being ugly as hell the way it is now). Much much more to come...


Introducing Limeberry


Limeberry is a CSS 3 Finely Granular Color Gradient Generator. It allows you to input very precise (up to the nth decimal) numeric values to be used as your gradient color stops. Choose how many color stops you want and then define what colors you want at those stops.


This is definitely early beta. It's functional, but only just (but hey, I did it in an hour over my lunch break).


Check out the project page to see the roadmap and for info on how to contribute (this is an open source project).


This was developed with Chrome, but early testers have informed me it works with Firefox and Opera as well (yay!).


Updates – BASIC jquery ui tabs rotate documentation, a note on nodejs hosting, and a note on the re-design


nodejs, jquery ui tab rotate, and re-design. Just a few quick notes...

  1. I'm actively working on documentation for the jquery ui tab rotation plugin. I've (finally) got a very basic working example up.

    The plugin is stupidly easy to use:

    $("#tabbedElement").tabs().tabs("rotate", 4000, true);

    Note that you MUST first call tabs() before you can add the rotation with .tabs("rotate", [ms], [rotate]). Also note that as of right now none of those params are optional! You can also call .tabs("pause") and .tabs("unpause") to start and stop the rotation. You can instantiate a rotating element that starts as "paused" by passing in false for the [rotate] param.

    We use this plugin at, and we are always on the most recent stable release of both jquery and jquery UI, which means that this plugin is nearly always guaranteed to work with the newest version of both. I'll be posting updates to this blog whenever there is anything to report. The plugin's official "homepage" is right here.

  2. Node.JS is a server side implementation of JavaScript. It is basically PHP or ASP or [name your server side language of choice here] but with JavaScript. This fulfills Knuth's 3rd law, which states that any code that can be written will eventually be written in JavaScript, which fulfills Knuth's 4th law which states that Knuth's 3rd law will change languages every 10 years. In case you were wondering, Knuth's 2nd law is that a 12% improvement is easily obtainable and should not be marginalized, which compliments while nearly contradicting Knuth's 1st law, which states that premature optimization is the root of all evil.

    ANYWAYS, I'm working on something FUN in node.js. If it works out, it's gonna be BIG. If not, you'll never hear about it again, lol. But that's not what I want to talk about. This is a quick note to make mention of the fact that if you are looking for a node.js server, they are out there. You don't have to roll your own. Check out, or this stackoverflow question or this page on the project's wiki for hosting options.

  3. And last but not least, you may notice that I have re-designed the blog. I'm now using a PREMIUM wordpress theme created by my good friends over at It's called Continuum, and it is spectacular. It is their newest offering.

    I'm doing some work with it, so I installed it here to help me figure out how it works and debug and develop on it, but I like it so much I think I'll just leave it up. You too can have this rad-tacular theme by heading over to its page on themeforest.

  4. Oh, and one final thing. I am actually working on upgrading status-bar calculator for Firefox 4.0. I'm having trouble, I have no idea why it's not working, but when I figure it out there will be a write-up here.

Mozy Resolution

About a week ago I talked about trying to download my Mozy account and get a refund after being unable to make a complete backup for over two months.

I just got this e-mail:

Hello Christopher,
I have processed the refunds and reverted you to a free account.

If you don't need any more help on these tickets, I will close them for you.

Let me know if you have any questions.

Bruce McMullen
[e-mail redacted by blog author]
L2 Mozy Support Technician
Mozy Support is available 24/7
My Schedule: Mon - Fri 12:00pm - 8:00pm MST
Mozy, from EMC

Checked my bank account and sure enough, there was the money! Logged into my Mozy account and sure enough it was downgraded. Nicely done Mozy! I'll keep you in mind next time I'm thinking about trying online backup...


Diagonal Accordion with jQuery

diagonalAccordion is a jQuery plugin that allows for accordion functionality, but in a diagonal angle of your choice!

I forked Charles Marshall's diagonal-accordion- plugin (on github) which allowed for a 45 degree angle accordion and hacked it to allow for any angle.

Use it like:

diagAdjust: 3

Or even just:

diagAdjust: 5

The only difference between using my plugin and his is the diagAdjust parameter. This parameter allows for incremental adjustments away from 45 degree angles. The bigger number you provide, the shallower the angle gets, until at number 11 it is effectively no angle. then after 11 it starts angling the other way.

Here's the official demo for the original plugin. Like I said, mine works exactly the same way, it just has an extra param to use.


Exploring jQuery getScript, or “How I created the jQuery getScriptLite plugin”!

I set out to discover how the getScript function in jQuery works today. Here is what I found. This post sort of illustrates just how easy it is to dig into the jQuery source and really learn the library.

The first thing I did is hop over to github and pop open the source for the 1.3.2 release:

Since getScript() is an AJAX function, I naturally clicked on "ajax.js". On line 109 I found:

Oh wow! It's just a convenience method! It doesn't do anything magical at ALL. It simply calls $.get().

Now, I could have stopped there, but for fun, let's go deeper. On line 93 I found the get() function:

Ok, so get() is really just a convenience method for ajax(), so let's look for that. Line 25, the ajax() function:

Wait, that's not the one! I don't really know how this works, but that can't be the one because it strips out the script tags. I find another one later on on line 170 that goes all the way to line 451. Way down on line 253 it seems to handle the actual script loading:

Aha! Clever. Creates a script tag and sets it's source to the one we specified and then on line 278 appends it to the head of the document, I'm assuming at that point running the script because two lines later it returns out of the function:

So, there you have it! It would almost seem that you could do the same thing by:

In fact, that seems to work just fine. Hrm... Fork me on github and/or get the plugin!


New Blog Location!

Welcome to the new home of my blog! This is the official permanent location, so if you're so inclined, feel free to subscribe! Thanks!

I plan on actually having some new content up real soon. It's been a crazy month, culminating in this huge (for me) consolidation of all of my online sites (,, and soon, the return of my cmcculloh website. More on that soon...).



For the past four months I've been hosting this site on an IUPUI server. That was supposed to be temporary. As in, I'll just throw it up there for a week or so. Well, a week turned into weeks into a month into months until finally I bit the bullet and got a Dreamhost account.

I compared all of the major hosting services out there (that I knew of):

Dreamhost was by far the best of the three.

Highlights: 500GB disk space, 5TB/mo bandwidth allowance, one click installs (wordpress/phpbb/mediawiki/etc), subversion, unlimited fully hosted domains/subdomains at no extra charge, unlimited MySQL accounts. All this and more starting at a mere $6/mo. Wha??? yep.

So, what does this mean?

1. My website is now hosted entirely at No more of that crazy crap.

2. The looooong awaited launch of as well as active development on v2.0 of my little Firefox extension in preparation of the release of FF3.0.

3. A forums (coming soon) where people can come to ask me questions on flash app development that I can't answer.

4. My Google Gadget will start working again (anyone who wants to, please leave a comment at that link with your thoughts on the gadget. Someone tore it up and it'd be nice to get one or two comments at least saying it's not horrible).

5. New games coming in the near future (FINALLY).

6. More programming related, tutorial style, blog posts. Starting with a slew of "how I created my FF extension" posts, followed by "how I'm upgrading my FF extension", topped off with a journal of my progress on either finishing one of my many un-finished game, or a whole new game entirely.

7. Updating the website in the very near future (also a big FINALLY).

If you are interested in helping out with any of my projects, just drop a comment here, or shoot me an e-mail. I use gMail, and my username is cmcculloh (you'll figure the address out).

Also, if you are considering signing up for a dreamhost account, please do it through this link so I can get monies (the info on the picture is wrong though, their features have gotten better since they made this link):