On Vox: Migrating projects from FlexBuilder to FlashBuilder

I wanted to use FlashBuilder and FlexBuilder on the same system. I felt the documentation for this flow was a little light, so here's a summary of my findings & the issues I worked through.

First attempt: Use the same Workspace in both FlashBuilder and FlexBuilder. 
I wanted a smooth migration, so I tried to go slowly. I wanted to be able to switch between FlashBuilder and FlexBuilder while working on a shared project in a particular Workspace. The dev environment requires Subversion, Maven, and particular folder locations identified in uniquely named environment variables (I'm using Windows 7). It is not feasible to duplicate the dev environment since it would require lots of overhead management of files, update, etc.

FlashBuilder installed without disrupting FlexBuilder. I opened it and pointed it at the Workspace. FlashBuilder's Problems panel lit up with red. I worked through the issues, but some of them involved compiler settings. Changing those settings messed FlexBuilder up, and that's the tech we agreed on for this project. I reset the project files by using our Maven script and moved on. I wasn't going to be able to use FlashBuilder & FlexBuilder interchangeably in this Workspace. 

Second approach: New Workspace, import Preferences
I nuked FlashBuilder's Workspace history so I wouldn't accidentally bork up my production code projects again. I had some custom display settings for my FlexBuilder editors and I really wanted to use those in FlashBuilder. It's fairly time consuming to set all text editors to have black backgrounds with light-colored text that 'plays well' with line highlighting & custom colors on reserved words, etc.

I used FlexBuilder's 'export preferences' workflow & saved the preferences to My Documents. I then used FlashBuilder's 'import preferences' workflow & restarted when prompted. One of the preferences, apparently, includes Workspaces. I was promptly shunted back into the Workspace I just 'rescued' and borked it up once again. Fixed it the same way as before & moved on. 

Third approach: New Workspace, Flex 3 Compatibility
It was clear I couldn't work on my production code in both FlashBuilder and FlexBuilder. I still wanted to play with Spark and incorporate it into my music player project.  

I created a new Workspace for FlashBuilder, closed FlashBuilder & ensured the Workspace history only included that Workspace. I then restarted FlashBuilder and manually changed all my settings to the stuff I mentioned above. I quit & restarted to ensure I wouldn't lose those settings if Eclipse froze while I was mucking about. 

I opened my music player project & saw the familiar red warnings. Internet searches weren't very helpful, so I poked around. The first thing I did was go to my root mxml file and type "<Spark" and hit enter to force the namespace into the root of the project. I then right-clicked the project folder & chose 'Properties'. I had already set the SDK to 4.0 under the 'Flex Compiler' tab here. Under that selection area is a checkbox that says "Use Flex 3 compatibility mode". That's the key. The Problem panel degraded the errors to deprecation warnings and I was able to run my music player in debug mode. 

Originally posted on williampower.vox.com

On Vox: FlexBuilder auto-sense not showing certain classes ([ExcludeClass])

I encountered a strange problem while trying to use the sample code at this awesome blog. I'm sharing the results with you because I didn't read the blog carefully and missed this the first (and second, and third...) times through.

Some classes in the Flex SDK have a metadata tag on them called [ExcludeClass] that prevents them from showing up in FlexBuilder's auto-sense mechanisms. The classes will seem to you like they don't exist.
I could not get FlexBuilder to access the following classes in mx.rpc.xml: Schema, SchemaManager, SchemaLoader, XMLEncoder, XMLDecoder and the following classes in mx.rpc.events: XMLLoadEvent, SchemaLoadEvent When I say "access", I mean that when I type out "mx.rpc.xml." I don't see those classes. Also, when I type "new Schema()" there's no auto-sense for it. If I "took it on faith" that the classes are there and just use them, the classes exist and are visible in the debugger. I only discovered that, of course, after messing with FlexBuilder settings for hours (in-between trying to find web sites mentioning this), and also uninstalling and reinstalling FlexBuilder itself. Yuck.

Originally posted on williampower.vox.com

On Vox: Web Hosting Problem

  I registered 2 new domain names. One is a '.com', the other a '.name'. I set up DNS service for them through a company that provides me with DNS service for a different pre-existing domain.
  I have web hosting through Globat.com. Once I figured out the confusing menu contortions required to set up hosting for the new domains, I set up hosting (on my TeraByte Xtreme (tm) package) for my 2 new domains. The '.com' worked. The '.name' didn't.
  I waited 48 hours to see if the '.name' just took longer (which is realistic). No luck. I filed a trouble ticket on it with Globat. I figured it was a DNS issue. I got an email back telling me that it was, that they were fixing it, and that it would be up in 48 hours. It has been 8 days now and it still isn't fixed.
  I inquired about it again today. No response. I would have been satisfied to wait if I'd seen an email saying "We are investigating further. We'll get back to you when we figured it out."
  I tried to use their 'instant customer service' chat tool. It showed me that I had an approximate wait time of 3 minutes and 50-something seconds...for about half an hour. That's a conservative estimate.
  While I waited I had time to:

  • Get a quick list of other hosting providers
  • See what other people were saying about those providers on forums
  • Investigate hosting package pricing on the candidate I thought looked best (GoDaddy)
  • Fully investigate each feature offered, including how many domains I could host on that account, and how many bytes I would be allowed to traffic monthly
  • Register for an account
  • Pay for an account
  • Fully configure my first domain, including login names, nameserver information, etc.
  I drove home from work, logged back in to the GoDaddy management tool. It's confusing, but less so than Globat's.
  Globat's interface is simple, but hard to figure out.
  GoDaddy's isn't as hard to figure out once you learn that there are a couple different interfaces to use, and that there's little overlap in functionality between them. Knowing that allows you to set up a couple tabs in firefox, each with a different screen, and pop around between them to do what you're trying to do.

Originally posted on williampower.vox.com

On Vox: Flex awesomeness: Law enforcement app

  I'm trying to avoid blogging in the 'echo chamber', but in case anyone's reading, this Flex app: http://www.universalmind.com/#/capabilities/demos/spatialkey-crime ("SpatialKey") looks pretty awesome!
  It's a law enforcement application, but the features the app provides really got my wheels turning. A couple of the high points of their map-based stuff:

  • Playback of patrol cars' routes:  Patrol car data can be played back over user-selected periods of time.
  • "Heat map": Red colors appear where there are higher crime rates.
  The link above has about 4 minutes of video with voice-over. Check it out!

Originally posted on williampower.vox.com

On Vox: Learning Flex: Videos

What we're doing:
  You've started learning Flex. You have some books. Perhaps you've finished the core 'starter' documents Adobe provides (see my previous post). And maybe you'd like to:

  • Dig deeper into Flex
  • Get tips on where to go to learn more
  • See what other groups are doing
  • See some third-party libraries in action
  • See where the Flex technology is going
  Alas, you missed the most recent 360 | Flex Conference. Where do you go?

  I'm going to give you some links and places to start.

Your Steps:
  Install Adobe Media Player. You're going to use it to view videos from the San Jose 360 | Flex Conference. Then we'll walk through how you can find more content from Adobe.

  Get the content from the 360 | Flex Conference.

  1. Open Adobe Media Player ('AMP')
  2. Click "My Favorites"
  3. Click "Add RSS Feed"
  4. Enter/Cut-n-Paste: http://sessions.onflex.org/1733261879.xml

Quick AMP Familiarization:
Eventually you'll want to set AMP up to work for your use of it. For now, try these settings:
  • Choose 'Options' from the upper right
  • In the "Start Screen" tab select "My Favorites"
  • In the "New Episodes" tab choose the "Display..." radio button and select '6' in the number drop-down
  • In "Playback" tab choose "100%" and check "Remember where I left off..."
  • In the "Performance" tab choose the number '6' so AMP will pre-fetch some videos for you. Also choose a bit rate for the videos (based on how awesome your machine is)
More about AMP: How to permanently store videos you want to watch multiple times
  AMP will keep a maximum of 6 videos for you. If you've watched them and want to see them again later, you'll find you have to download them again. Here's how to beat that.
  • Go to the 360 | Flex Conference link from above. 
  • Download the FLV files you want to see. (Their names are mangled. Rename them as you see fit to allow you to remember what they're about.)
  • Open up AMP
  • Press Control-"O" to "Open" a file.
  • Navigate to the folder where you downloaded the FLVs, choose the one you want to watch.

Finding other video content:
  • Choose AMP's 'Catalog' link. Browse it.
  • Click in AMP's 'Search' box. Look at search results for "flex", "flash", and especially "adobe" and "adobe developer"
  • Any FLV can be opened and played, so poke around the internets!

Originally posted on williampower.vox.com

On Vox: Learning Flex for "book learners": What should I read?

  I've always found it best to start at the beginning. A number of books cover 'how to use Flex components,' but it's frequently unhelpful when you begin trying to toss around events or encounter a data binding issue. It becomes much easier to program in Flex once you understand the framework's underlying mechanisms.
  I like books because I can highlight them, write notes in the margins and dog-ear important pages. It's difficult to do that on a web page...and it can be painful to print out large PDF files.
  Adobe has documented much of the Flex magic, but it can be hard to know what you're looking for. Let me first give you the link to the Adobe Flex resources, and then let me tell you where to start.

  If you're brand new, start with the "Installation Instructions" at the top of the page.
  If you'd like to see the big picture before you dive into the code, read "Building and Deploying Flex Applications." You're going to use most of this information sooner or later. I'll admit to having skimmed this a bit, with the intention of coming back to it when I care more about deeper parts of the development process.
  Now we get to what I believe is the core place to start. To understand the fundamentals of the Flex framework (including answering the question 'what is the Flex framework?'), read the "Flex 3 Developer's Guide."
  Once you're familiar with the framework and can use the controls, you'll want to learn how to create Custom Components. This allows you to make highly specialized controls that extend the behavior of the existing Flex controls...as well as allowing you to make entirely new controls whose lifecycle can be managed for you by the Flex framework. That document is called "Creating and Extending Flex Components." It's substantially smaller than the Developer's Guide.

  I've actually printed out the PDFs so that I could interact with them. One is 250-ish pages. The other is 1,400-ish pages. Suffice it to say the big one required many binder clips and is hard to manage comfortably. I checked bookstores, both brick-n-mortar and online, but to no avail. Neither of those are available for purchase...or are they?

  At the very bottom of the Adobe Flex resources page there's a subtle grey box whose very last paragraph indicates you can get 'Published hard copy documentation' for some things. It turns out that these resources, as well as a few others you really care about, can be purchased in a $50 bundle.
  The other books you'll get are the installation guide that ships with the Flex Builder 3 software, and the much under-valued "Building and Deploying Flex 3 Applications." These other books are also available on PDF, so if you prefer to print them yourself or read them on your computer, have a ball! If you're like me, break out that credit card and place your order! The easiest way to get to it is this:
  Click the link at the bottom of that grey box on the Adobe Flex resources page to go the Adobe Store. You need an account. Once you've created one, go back to that page and use the "Show Me" combo/drop-down box to select "Flex Books." You want to order the "Adobe Flex 3 Documentation Set."

Originally posted on williampower.vox.com

On Vox: Eclipse, FlexBuilder, and Eclipse.ini

  I'll admit this post is half "for you" and half "for me" in that I want to have a quick way to find these settings later! ;)
  As our project has grown, I've found that the default amount of memory allotted for Eclipse just isn't sufficient.
  The solution is to find and edit the eclipse.ini file. It's in the directory where you've installed Eclipse.
  My file has these settings:

The bits you care about are the lines that start with -Xms and -Xmx.
-Xms is the minimum amount of memory set aside for Eclipse when it loads.
-Xmx is the maximum amount of memory Eclipse can use while running. It will grow dynamically if you exceed the original amount set by -Xms.

The line with "128m" on it is a complete mystery to me. If you want Eclipse to break, you're welcome to change it. When that joy has abated, set it back to 128m and enjoy!


  • If you know what that line does, reply to this post!
  • My machine has 3g of RAM, so that max size is fine for me. If your machine has less memory, consider setting -Xms to 256 (or even 128) and -Xmx to 512. 

Originally posted on williampower.vox.com

On Vox: Repurposing the blog!

  I haven't blogged in quite a while. I changed my focus from straight UX to software engineering, and consequently haven't made the time to focus on UX as I'd hoped.
  I'm repurposing this blog. I'll try to hit UX issues still, but I'm going to hit Flex, ActionScript and Flash things as well.
  I have run into a number of roadblocks creating Flex content, so my hope is to post the solutions as I encounter them.

Originally posted on williampower.vox.com

On Vox: Privacy of information and enabling user choices

The Problem
 I am graduating from Washington State University (WSU) in December of this year with a B.S. in Computer Science. During 2006-2007 I received an unwanted call on my cell phone and discovered that my phone number (and possibly my address) was published in a public-facing part of the WSU. Anyone who had my name and knew I was attending WSU could find my cell phone and call me. Unacceptable.
 To that end, I restricted my directory information.
 WSU informed me that I needed to sign and return a document in order to have my name appear in the commencement program distributed during graduation ceremonies. The letter also informed me that WSU would not verify my degree to potential employers unless I removed the restriction!

  After all I've done to get to this point in my life, it is absolutely unacceptable to not appear in the commencement program. Worse yet that WSU would not verify my degree to employers. That's ludicrous.

Washington State University:
Let's examine their web interface and see what options I can choose to fix this:

   I blacked out my address & phone. The red highlighting around the "restriction" option is the only choice for modifying that option. It's binary: restrict or not. Given the problem space, that seems a little restrictive! What if I want to expose my name and email, but not my phone number? What if I want to hide all my information from the public, but allow employers to request information about my degree? Nope!
  WSU's web interface (and background software) forces me to choose between being invisible or being fully exposed, with no in-betweens. Given I'm a user and that I have given them quite a lot of money to attain a degree here, it makes no sense that I have only those options. I pay for services, I should have options.
  Let's examine the behavior of other sites for which I don't pay directly for services: Facebook and LinkedIn.

  Facebook allows me to choose whether I display any contact information at all. If I choose to display information, I can limit accessibility to it by groups that make sense in the context of Facebook.

   What you're seeing in this picture is that I have chosen not to show my mobile phone number at all. If I chose to show it, I could choose to show it to "all my networks and all my friends", to "all my friends" or to "all my networks". That covers all the bases. I have full control over my privacy. You can see that those options pertain to all of my contact information.
  You could argue that Facebook is unlike Washington State University in that it doesn't provide some of the services a university might. Very true, but I counter that with a question about systems and intended use. It makes no sense to couple two different systems that rely on the same information. At the very least, there should be options that allow users to classify acceptable uses for their data.

  LinkedIn is a site for professional networking.
  You can view my profile here. Notice that none of my private contact information is exposed. I've chosen to allow anyone to contact me, but to have my email remain anonymous. I've chosen to allow people in my network to see my email information. When I edit my profile, those options are explicitly called out:

   LinkedIn appropriately hides everything else. The management pages allow me an appropriate level of choice based on the problem space.

The Solution
  Washington State University is not exactly at the top of it's game with respect to use of technology. In this case, the problem is that it has multiple uses for personal data, and is attempting to smash the divergent possible uses down into yes/no option. 
  When there are multiple uses of a single set of data, those uses should be categorized (hierarchically) into permissions, and users should be provided with intelligible and intelligent management options for those permissions. In this case, the settings around public directory listings should not be coupled to either the settings related to the commencement program or the settings related to the confirmation of degree completion.
  As an example, you might allow a global "do not show" setting that restricts directory listings, appearance in the commencement program and verification of degree completion. The other option would be to enable user choice for each of the sub-settings.
  The user would then choose which to enable. If they chose to appear in the directory, they should also be able to select what is displayed and what is not. The same goes for the commencement program and for degree verification.
  Degree verification is a suitably complex space that another system should exist to manage it. In particular, users should be able to specify whether their degree is verified without question, or whether they receive email notices of verification requests which contain links to a management page that allows them to confirm or deny such requests.

Originally posted on williamphenryjr.vox.com