ShanShannon Hicks

All articles by Shan


Loop labels with Titanium

I recently ran into a situation where I needed to compare values inside two associative arrays. I ended up having to nest two different loops, but wanted to optimize performance by breaking the inner loop when I found what I was looking for. A bit of searching, and I found what I was looking for…


Mobile App Testing – Picking the right test devices

I figured that it would be great to kick off my new-found motivation to blog with a post going over how I do mobile testing. You have to do testing, it has a high cost of entry, and can be intimidating. Let’s walk through how I do it as a entrepreneur/consultant.


Moving to GitHub

All of my current open-source projects are now hosted on GitHub. The ability to easily fork projects, along with the whole concept of pull requests, made the move an easy decision. You can see all the projects at


Cross-platform mobile app development

I’m going to set aside a little time each week to blog about my experiences with developing Pintley. This is the first in hopefully a long-running series ­čÖé


Working for Pintley is great… Come join me!

Most of you know I’m now full-time with Pintley. I love it. The project is awesome, if I do say so myself, and I’m working with all the latest and greatest technologies. CF9, ORM, Solr, Flex, and of course developing our application for both the desktop browser and mobile platforms, hosting up in the cloud…


Pintley finally leaves private beta

I’m happy to announce that earlier this month Pintley finally left private beta! Pintley is like Pandora, but for beer… You sign up, rate beer you like/don’t like, and it provides recommendations for more beer to try. Since most of the people reading this blog are techies, you’ll be happy to know that the back-end


There’s something better than iPhone AT&T Tethering (or, opt to keep your unlimited 3G plan tomorrow)

Virgin Mobile is launching it’s prepaid MiFi next week. I’ve already told you that the VirginMobile Broadband2Go USB thingy works great, so I expect the same service from their MiFi. At the most expensive end, they cost the same as Verizon ($60 for 5GB), and at the lower end, it’s probably cheaper than paid hotel


If I had just one wish for ColdFusion 10

Having spent the better part of 2010 building PDF reports, I can say that I would like to see a complete overhaul of cfdocument. It’s time to bring the HTML and PDF support up to current standards. If I had to narrow it down to a few specifics, here we go: Whatever is currently limiting


Mobile Broadband review

Recently, I found the need to have a wireless broadband card. This is my story. Verizon MiFi At first I went with a Verizon MiFi. It looked like I was going to be doing enough commuting to warrant getting a full-blown 2-year data plan. Looking at the options MiFi seemed like the obvious choice, and


More conference speaking engagements!

My blog has been sorely neglected. Work had taken over pretty much all free time, but I’m starting to get a handle on things again. That being said, I’m diving deep in to Flex 4 development, and I should have my first iPhone application finished this summer. Oh, and I’m speaking at a couple conferences.


ColdFusion conference speaker hat-trick!

I’m happy to announce that I’ve been accepted to speak at bFlex/bFusion. This makes for the third conference I’ll be speaking out in the next couple months. Here’s my schedule: CFinNC (Oct ┬á17-18) Topic: Searching with Apache Solr bFlex/bFusion (Oct 24-25) Topic: Learn Apache Solr in 90 Minutes RIA Unleashed (Nov 13) Topic: Getting the


September Madison Adobe User Group

Greetings, Adobe Feed readers! Just thought I’d get some last-second word out that the Madison Adobe User Group meeting is today at MATC. Paul Trani is going to be presenting “Trick Out Adobe Photoshop CS4” For more information and to RSVP, check out the Adobe Groups page.


Healthcare Reform thoughts

Ok, so the town-hall shouters are not helpful in any way, so I pose this question to you, my intelligent peers, friends and family. Grandma’s not going to be killed by a death panel, we’re not plotting the destruction of the private insurance sector, and medicare isn’t going to get killed off next year. What


Adobe Creative Suite does not work on Case Sensitive file systems

I spent a few hours yesterday formatting my Mac Pro and reinstalling OS X. When I formatted the drive, I thought that it would be great to set the file system to be case sensitive. A few hours later, with my OS updated & set up how I wanted, I started installing applications. I went


MySQL Databases for the Adobe ColdFusion Curriculum

Adobe wrote these great, free ColdFusion Curriculum projects for new and intermediate ColdFusion developers. I recently had a friend interested in getting started with ColdFusion, and I pointed him in this direction. He came back to me a few days later, wondering if ColdFusion was really supported on the Mac. I asked him why he


How To Clean your Mighty Mouse Scroll Ball

I love my Mighty Mouse. Like many others, my grubby hands eventually caused the scroll ball to stop scrolling in one or more directions. I tried the official Apple instructions to clean the ball, but it didn’t really work. Others have suggested compressed air and other tricks, but I didn’t have any luck with those,


PayPal resolution center is useless

Twice now, I’ve had companies where I paid for services via PayPal. Last year, I was co-locating one of my servers with FDC Servers. They decided one day to unplug my server and throw it in a closet, and hold it hostage for an evening. Needless to say, I canceled my service and moved it


Nabaztag API for Actionscript 3 updated to 1.1

Thanks to Matt Chotin, Violet has added a crossdomain.xml file to their API. So, I went in and removed all the code that was needed for the proxy. Enjoy version 1.1!


How to stop Charter’s DNS hijacking

As a new Charter customer, I quickly became frustrated with Charter’s automatic search page. What happens is, if you type something like “google” into your browser’s URL bar, you get redirected to a Charter branded search page. This is extremely frustrating, and the best that Charter offers is an opt-out cookie that you have to


Reminder: Madison Adobe User Group Meeting Tuesday 3/31

Just a reminder that I’ll be presenting at the Madison Adobe User Group meeting on Tuesday. I’ll be presenting an intro to Flex/AIR/ColdFusion at American Family Insurance. Click the link for more info

Sorry if you already read this on the Webapper blog ­čśÇ


Solved! Charter internet headaches

Just wanted to follow up. The Charter guys on twitter got in touch with me right away last Monday, and proceeded to solve my issues. They utilized the services of one of their network engineers to double-check the configurations on everything from my modem all the way up the chain to the local office. Somewhere


Charter internet headaches

Seduced by Charter’s upstream speeds (2 mbps with their 20 mbps service, and 5 mbps with their 60 mbps service), along with their better prices than AT&T’s slower DSL services, I finally caved. On Friday, a tech installed my 20 mbps service, and we were off to the races. Earlier tonight, I was working with


Facebook Job Connection – an Alternative to LinkedIn

I’ve written my first Facebook application, Job Connection. It allows you to use your Facebook friends network to look for a job by word of mouth. On the flip side, it lets you connect your friends with job openings that you know of. So, go out, install it, and don’t forget to invite your friends.


URLValidator for AS3/Flex

I had the need for a URL Validator for a Flex project, and couldn’t find one. So, here’s the code:


Fixing corrupt Time Machine Sparsebundles

I use Time Machine on my MacBooks as part of my backup plan. However, it backs up over the wireless network to an external USB drive on my Mac Pro, and┬áoccasionally┬áthere are problems. A couple times now, I’ve gotten an error where Time Machine says it cannot back up because the drive is read only.


cf-flex-user-auth Released

I’m happy to announce the immediate availibility of cf-flex-user-auth, a starter application for developers building Flex applications with ColdFusion on the backend. I’ve been working on this for a while now, and it’s gone through two complete rewrites. The idea behind this is for developers to be able to download this source code, and have


AS3 API listing

I’m happy to report that three AS3 projects I’m involved in were added to the ActionScript Cloud APIs list. If you’ve worked on any API wrappers or whatnot, be sure to submit yours before MAX!


HOWTO: Take a Screenshot for print

There was a bit of confusion among myself and my peers today, on how to take screenshots and prep them for print. The printer required 300dpi images, and screenshots are, usually, 72dpi. There is no way to just “take” a higher resolution screenshot, you have to actually upscale the originals. This will work on the


Review: Jungle Disk Plus 2.0

I’ve been on a quest for the perfect off-site backup service. I’ve considered everything using my own servers and rsync, tried various free/cheap services like Carbonite and AT&T Remote Vault, and finally came across Jungle Disk. Jungle Disk uses Amazon S3 for storage, and Amazon EC2 for their Plus service. This review is of the


New Website: What does that look like?

So, most of you who read this blog are technologically savvy. And, if you’re anything like me, your friends and family come to you for help and advice for all things computers. Sometimes, the person needing help just isn’t familiar with all the jargon and acronyms needed to get things working. That’s where What does


Review: Genie PowerLift Excelerator

So, last fall I bought a Genie PowerLift Excelerator garage door opener from Home Depot. I decided to go with a higher-end opener because of the nice warranty graphics on the box touting their superior warranty. It turns out to have been a great decision. Over the past couple months, I’ve noticed that the garage


Install Vista x64 SP1 under BootCamp

I just finished the multi-day ordeal of getting Vista 64-bit SP1 to run under BootCamp. I specifically ran into two distinct problems, and found the workarounds for both. Problem 1: Vista x64 SP1 supports EFI booting, but not the version Apple uses on Macs. There are several theories as to why you can’t boot from


Review: Aiptek Action HD Camcorder

I got sucked into a spontaneous purchase the other day at Wal-Mart. I was walking by and saw they had an Aiptek Action HD Camcorder. It has several key features that had caught my eye in the previous weeks: It’s cheap ($199) It’s HD I was in the market for a cheap, small, HD camcorder,


Welcome to my new site, again

I’ve finished moving everything over to WordPress now. I ditched the Flex site I was building because since I started it, I’ve decided to make my site less of a personal site and more of my portal to the Flex/AIR/CF community. Also, since I had started that site, I’ve started to focus on open-source projects,


CFUnited meetup for the IRC crowd

I’ve finally created the event for those of us that hang out in #coldfusion and #flex, that are going to CFUnited. Many expressed interest in such an event, so let’s do it. When you sign up, be sure to include your /nick and real name, so I can make some nifty name badges. On


Customer service madlib gone awry

Every once in awhile, I have to send out DMCA notices to people who have blatantly stolen our copyrighted materials. Generally, I skip emailing the offender directly (they usually are well aware of what they’ve done), and email the notice to their hosting provider, or the hosting provider’s bandwidth provider. Today, I got a response


Mariokart Wii: First thoughts

Mariokart Wii is a blast as a game. Three complaints about the online experience: 1. Friend codes suck. It’s a pain to use, hard to track down your own friends, and then after all is said and done, your friend code only applies to a single game title, so your Mariokart code won’t work with


URL Encoding in Actionscript

Sometimes you just need to URL encode a string (URLEncodedFormat() in CF, or urlencode() in PHP), and not actually make a HTTP request. Here’s a simple library for you to use, that I wrote for my OAuth actionscript lib. Attached is for your enjoyment.


OAuth Actionscript library

Over the weekend, I wrote an actionscript library for client implementations of OAuth. It’s currently untested, but I’d love to see a few people help me keep it up to date & bug free, if anyone’s interested. oauth-as3 Google Code page


Shan’s Simple Examples: File uploads with Flex and ColdFusion

Someone in #flex was talking about how there were no good examples for doing uploads with Flex and ColdFusion. Sounded like an excellent topic to cover here. Now this example is a tiny bit more complex than previous examples, because I needed to cover two methods of functionality: single file uploads and multi-file uploads. Both processes are very similar, and in my code they actually share a method.


Hello Mariokart, Need some Wii friends!

For anyone else who just got Marokart Wii, here’s my Wii code: 0430-8679-3315 Just leave yours in a comment here and I’ll add you.


Apple’d and loving it

I’ve just realized that over the past 12 months I’ve gone Apple. It started innocently enough with a Juniper iTunes credit card and an iPhone on launch day last June. Then an Apple TV found it’s way into my home. Eventually, a MacBook and a Mac Pro followed suit. I have to say I’m impressed


I’ve given in to WordPress

Yes, I’ve converted my blog over from BlogCFC to WordPress. It was an easy enough process thanks to┬áJames Netherton’s migration code. I also re-organized my posts and categories, slimming down the number of categories I have, and moving most of the metadata over to tags. Hopefully this will help keep things┬ámanageable. Anyone have a good


Moving to Mac: SVN, Finale

So, after struggling with all other SVN clients, I’ve settled on a commercial product, Syncro SVN Client. It’s no TortoiseSVN, but it’s got all of the major SVN functionality, it works, and it’s stable. Combine that with the light bit of stuff that I do via Subclipse, and I’ve got all the SVN goodness I


EncryptedLocalStore general internal error

So I’m developing an AIR app, and experimenting with the EncryptedLocalStore features of AIR. I got to a point where I thought my code was solid, but I wanted to erase all the mistakes I’d created in my keychain. So, I went into Keychain Access, and deleted the keychain file that looked like it was


About my blog

I got a nice little troll comment from “bob” a bit ago. “bob” is under the impression that because I’m picked up by a particular aggregator, that I should never post about anything other than that aggregator’s subject. Just to clarify to “bob” and anyone else, this is my personal blog, with a tech focus.


Gmail IMAP going down?

I’ve just had two of my Gmail accounts start returning the “IMAP is not availablef or your account” error. Both are Google Apps accounts. Anyone else having this problem?


Watch your site degrade in different versions of IE

For anyone who might not know, Microsoft provides VirtualPC virtual machines for free, so you can test against multiple versions of IE on different versions of Windows (XP or Vista). Download the virtual machines here They VM’s are pre-activated, and expire every few months, but then they release new VM’s. Now, you can see first-hand


Shan’s Simple Examples: Start to Finish, using Ant with Flex for the first time

Disclaimer: This post is not about best practices or anything of that sort. This is just a recount of my first attempt at using Ant with an open-source Flex library project.

Here are the steps I went through (well, minus the steps that did nothing) to get my first Ant build script up & running;

Installing Ant

There were a few steps to get a Flex Builder standalone install up to speed to do stuff with Ant. Eclipse users might or might not need to do these steps.

  • Install Ant (Thanks, Judah!)
    1. In Flex Builder, go to Help > Software Updates > Find and Install
    2. Search for new features to install
    3. Select “The Eclipse Project Updates”
    4. Select The Eclipse Project Updates > Eclipse 3.3.2 > Eclipse Java Development Tools…
    5. Finish the installation process, including restarting Flex Builder
  • Install SVNAnt (Thanks, Phill!)
    1. Download the SVNAnt binary from
    2. Unzip the download, place all the .jar files in /lib/ in your Ant Install directory, which for Flex Builder is Flex Builder 3/plugins/org.apache.ant_${version_number}/lib/
  • Add needed libraries for FTP features
    1. Download the Apache Commons Net and Jakarta-ORO binaries
    2. Unzip both downloads, place all the .jar files in /lib/ in your Ant Install directory (same as above)
  • Finish configuring Ant
    1. Go to Window > Preferences > Ant > Runtime
    2. Click the Ant Home… button
    3. Choose your Ant Install directory (Flex Builder 3/plugins/org.apache.ant_${version_number}/). Be sure to NOT select the lib directory

Your Build Script

So you’ve got everything configured, now what? Let’s start with a build script. Explainations are in the comments. Keep in mind that these directory paths are for OS X, so Windows users will need to switch operating systems or use Windows paths. Probably easier to switch your OS.

  1. Create a build.xml in your project. Populate it with your build code (see my code exmaple below)
  2. Add the Ant view by going to Window > Other Views > Ant
  3. In the new Ant tab, right click and select Add Buildfiles. Select your build.xml file.
  4. Now, whenever you want to make a push, just hit the run button in the Ant tab.
<project name="MyProject" default="" basedir=".">
    <!-- set the taskdef's -->
    <taskdef resource=""/>
    <taskdef resource="flexTasks.tasks"/>
    <!-- set some properties -->
    <property name="TEMP_DIR" value="/tmp/MyProject_Temp/"/>
    <property name="FLEX_HOME" value="/Applications/Adobe Flex Builder 3/sdks/3.0.0/"/>
    <property name="APP_ROOT" value="~/Documents/Flex Builder 3/MyProject/"/>
    <target name="">
        <!-- clear out the temp dir -->
        <delete dir="${TEMP_DIR}"/>
        <!-- let's get the latest build from SVN to a temp directory -->
            <export srcUrl="" destPath="${TEMP_DIR}MyProject/"/>
        <echo>SVN Export Complete</echo>
        <!-- build the ASDocs from the source -->
        <exec executable="${FLEX_HOME}/bin/asdoc" failonerror="true">
            <arg line="-source-path ${TEMP_DIR}MyProject/"/>
            <arg line="-doc-sources ${TEMP_DIR}MyProject/"/>
            <arg line="-exclude-classes com.adobe.serialization.json.JSON com.adobe.serialization.json.JSONDecoder com.adobe.serialization.json.JSONEncoder com.adobe.serialization.json.JSONParseError com.adobe.serialization.json.JSONToken com.adobe.serialization.json.JSONTokenizer com.adobe.serialization.json.JSONTokenType"/>
            <arg line="-main-title 'My Big Project Docs'"/>
            <arg line="-output ${TEMP_DIR}MyProject/docs/"/>
        <echo>Docs Created</echo>
        <!-- build the latest swc from the source -->
        <exec executable="${FLEX_HOME}/bin/compc" failonerror="true">
            <arg line="-source-path ${TEMP_DIR}MyProject/"/>
            <arg line="-include-sources ${TEMP_DIR}MyProject/"/>
            <arg line="-output ${TEMP_DIR}MyProject/bin/MyProject.swc"/>
        <echo>SWC Built</echo>
        <!-- create zip files to upload -->
        <mkdir dir="${TEMP_DIR}zip/"/>
        <exec executable="zip" dir="${TEMP_DIR}">
            <arg line="-r ${TEMP_DIR}zip/ MyProject/"/>
        <echo>Source Zip Created</echo>
        <exec executable="zip" dir="${TEMP_DIR}MyProject/bin/">
            <arg line="${TEMP_DIR}/zip/ MyProject.swc"/>
        <echo>SWC Zip Created</echo>
        <!-- upload files -->
        <ftp server=""
            <fileset dir="${TEMP_DIR}zip/"/>
        <echo>Zip Files Uploaded</echo>
        <ftp server=""
            <fileset dir="${TEMP_DIR}MyProject/docs/"/>
        <echo>Zip Files Uploaded</echo>

I’m not going to cover asdoc/compc/mxmlc command line options here, there’s plenty of great docs out there.
You can also read more about the svn task, exec task and ftp task at their respective documentation pages.

Now that you’ve got a start to finish example, go forth and Ant!


Debugging HTTP on the Mac

I was having a little trouble with the SmugMug upload API, and they needed a raw dump of the request to help debug it. I downloaded Wireshark, but it didn’t work out of the box (it doesn’t see any interfaces, which is a common issue that I’m sure is easy to fix). So I did