Posted by Doug Hays on the 17th of May, 2009 at 11:31 pm under AIR and Flex.    This post has no comments.

There is an issue with AIR application development to which I still have not found an official answer.

I just need to switch between http://localhost and http://fakeproductionurl.com depending on whether I was running in Flex Builder (via adl).

I found all sorts of articles about using conditional compilation (yikes) and reading XML files (I’m too lazy).

This is what I ended up using:

if (NativeApplication.nativeApplication.publisherID != "") {
   return "http://fakeproductionurl.com";
}
else {
   return "http://localhost";
}

It doesn’t give you the ability to switch between 3+ different environments, but it’s a very easy way to toggle between development / production environments.

Posted by Doug Hays on the 17th of March, 2009 at 4:02 pm under CakePHP.    This post has no comments.

I needed to test some CakePHP code on a client’s 1and1 server today, so I dropped my CakePHP app in a subdirectory (called agents2) on his site.  But, after doing so, I kept getting “Class ‘Configure’ not found”.  Luckily, I stumbled upon this blog post over at kushaura.com which saved me.

The core issue was with my root .htaccess file which needed to be changed to:

      RewriteEngine on
      RewriteBase    /agents2/

      RewriteRule    ^$ app/webroot/    [L]

      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule (.*) app/webroot/$1 [L]

And that did the trick.

Thanks, Kushaura.com!

Posted by Doug Hays on the 26th of November, 2008 at 11:02 pm under Coding.    This post has no comments.

In doing some research on ASP.NET MVC, Phil Haack mentioned a pattern that I had never heard of but love to use: PRG -or- Post, Redirect, Get.

Take a web form for example.  When the user clicks Save, the data is sent via POST back to the web application.  The web app saves the data to the database and then redirects the user to the next page within the application.  The user’s browser then requests that page via GET.  

The beauty of this pattern is made very clear by Phil.  This will eliminate the possibly confusing “Are you sure you want to resubmit this form data?” browser message.  But, for me, an even better reason is that it eliminates possible data issues when the browser re-posts the data after that refresh.  

Either way, I’m glad to have learned the name of this pattern and even more thankful that my use of it has been validated.

Posted by Doug Hays on the 23rd of October, 2008 at 3:18 pm under EastFace Software.    This post has no comments.

We are excited to announce that we now have a website to show off some of our handiwork:

http://www.eastfacesoftware.com

I guess it was ironic that a company that builds web applications had a website with only a logo and no content. But we did not really have a strong reason to create one. We have no need to actively market ourselves as we remain plenty busy (and are thankful for this). But, when new opportunities came by, we had nothing to give to folks to give them a feel for what we do, who we are and that we are legitimate.

Well, the site may not answer all of those concerns, but 2-for-3 isn’t bad.

Posted by Doug Hays on the 25th of September, 2008 at 12:51 pm under Flex.    This post has no comments.

I just ran into an interesting issue with ObjectUtil and its handy Copy function.  After performing a copy, I was attempting to cast the resulting object and the overall result was null:

oldField = new Field();
newField = ObjectUtil.copy(oldField) as Field;
//newField is null 

Thankfully, a quick trip to Google helped me find the solution 

I added this to my Field class:

[RemoteClass(alias="com.eastfacesoftware.Field")]
public class Field {...}

and I was a step further.  My last hurdle was using the Copy function on subclasses of Field.  As you might guess, you need to define the RemoteClass metadata on every class that you intend to copy. After I did this, ObjectUtil was again on my list of favorite ActionScript classes.

The reason?  ObjectUtil.Copy() uses AMF to serialize and de-serialize the original object to create the copy.  If AMF doesn’t have specific knowledge of your class, it will not return an object that will cast properly.

Thanks to Darron Schall for this helpful tip.