Aptana SDOCML & Code Hinting Support

Prompted by this post, I’ve been working on a tool that uses jsduck and Adobe AIR to create the SDOCML necessary for Aptana code hinting. Specifically I’ve been playing with EXTJS 4.0 becuaseof some interest in Sencha.

In the near future I’ll post the SDOCML files that I’ve created for the code hinting and once I get the tool looking presentable and working efficiently, I’ll post the source of that to GitHub.

Here is the current version of the file. I’m not completely sure is has everything it needs. So, it is a work in progress and I’ll post updates as I create them.
extjs4.0-v0.1.sdocml

If you’d like the SDOCML for EXTJS 4.1 Beta
extjs4.1.beta-v0.1.sdocml

Mobile Development is Exploding – Hello PlayBook!

I didn’t go to Adobe Max this year (yes I’ve kicked myself) but I think some of the news and tools that were announced there have me extremely excited! One of the more exciting items was RIM’s announcement surrounding the Playbook and Adobe AIR. The coolest part of the announcement, the free PlayBook for any vendor with an approved app in the BlackBerry App World (details here). Go BlackBerry – sounds like a generous reward for getting some apps built!

Needless to say, I’ve started playing around with the PlayBook SDK and have compiled a list of resources that helped me to get going.

Getting things up and running on the Mac was pretty straight forward.

Win 7 64bit was  a different story. The installer says it doesn’t support 64bit. There is salvation though thanks to kurlu.com you can force the installer to use a 32-bit JDK.

BlackBerry PlayBook Dev Resources:

UPDATE (11/18/2010):

The PlayBook Simulator with a couple "out-of-the-box" apps playing nicley.

I got the PlayBook environment up and running and just for kicks tried to get a few of the apps that I’ve been working on.In the image above the selected app is a Flex 4.5 (Hero) based app. The app on the right is an ActionScript 3 based app. No code was changed to accommodate the PlayBook and 95% of everything in both apps  is working. The only thing that isn’t working off the bat was the video playback in the AS3 project – I did expect that though.

Adobe Camp: 1 Day, 3 Camps: 5280 Reasons to Use the Flash Platform

Rocky Mountain Adobe CampIf you haven’t heard already, the first Rocky Mountain Adobe Camp is open for registration.

The first ever, one of a kind, Rocky Mountain Adobe Camp is right here in Denver on June 22, 2009. Digital professionals at all experience levels are invited to this one-day event to participate in in-depth sessions, and unique hands-on activities taught by some of the most influential speakers in the “Flash-o-sphere”.

Want more information?
Check out http://camp.rmaug.com for event date and location as well as speaker and session info.

Use twitter?
Follow @adobecamp’s updates for more information and news.

There are some interesting sessions that will be divided between 3 different “tracks”:

  • Flash Camp: Get ready to learn best practices, discover hidden features, and extend your abilities
  • Dynamic Media Camp: Developers and content owners alike will expand their current knowledge of the Flash Media Server family
  • eLearning Camp: Trainers, staff development managers, and Human Resource professionals will all gain valuable insight for eLearning development using tools such as Adobe Connect, Adobe Captivate, and Adobe Acrobat

So pick one and register for the First Rocky Mountian Adobe Camp!

Quick fun with AIR & Dailymugshot.com

So i’ve been playing with DailyMugShot.com for the past couple of months. DailyMugShot is just that – you take 1 picture every day of your mug. Well I wanted all my mugshots and there wasn’t a direct way of downloading them from the site. They have an RSS feed for your shots, but it only shows the current picture.

They do have a little flash based badge that you can post to your site.

So with some hunting around in the firebug output I found where the little flash piece calls a service for the sequence of images. The dataservice is simple XML (Yay!), and I like ActionScript 3 and XML. So, I wrote an AIR app that downloads all my mugshot images. It is really basic and urls and final file locations are all hard-coded, but it was a fun 45 minutes and worked like a charm and I have all my past mug shots.

Here are a few of my favorites:
02-03-200902-18-200902-24-200903-14-200903-17-200904-06-2009

Update: If you’d like to play with dailymugshot.com I’ve compiled an AIR Application that will download all the images for a given user ID (you can get the userID from the slide show page URL)

[dm]9[/dm]

REDBug, WordPress and Firing up the Grill (Link share)

It has been a little slower at Realeyes latley so I’ve had time to play a bit. While playing I’ve run into some pretty interesting things over the past week, so I thought I’d share a few of the links I liked.

Development:
RealEyes Media . RED|bug
Release an updated version recently. Nifty debugging/logger AIR app that we’ve built.

Contacts Data API – Google Code
API from google so you can “own” your contact data…pretty nifty implications.

Selenium
A test tool for web applications. Selenium tests run directly in a browser, just like real users do. It runs in Internet Explorer, Mozilla and Firefox on Windows, Linux, and Macintosh, Safari on the Mac. We have plans to target Safari on the iPhone in some months.

101 Adobe AIR Resources to Add to Your Toolbelt of Awesomeness

CSS Templates ( Page 1 of 12 ) – Free CSS Templates

Concepts:
DataPortability.org – Share and remix data using open standards
DataPortability: The option to share or move your personal data between trusted applications and vendors

GTD:
mGTD: GTD for Moleskine v1.0 | Anabubula.com *
Another (pretty cool) moleskin hack.

WordPress:
WordPress › AIR Badge « WordPress Plugins
Allows you to easily create an install badge for your AIR applications using the [airbadge] tag in your posts.Created by Peter Elst

WordPress › Downloads Manager « WordPress Plugins
Adds a simple downloads manager to your blog.

Random Resources:
Digsby = IM + Email + Social Networks
Instant messaging, email notifications and social networking all in one client (Twitter, Facebook and MySpace)

Firing Up Your Weber Bullet – The Virtual Weber Bullet
It is spring time after all

Free eBooks – All Our Classic Books and Novels
Free literature for you to download – I like reading (ahem…listening) in the car!

Mark Shuttleworth » Blog Archive » Playing nicely with Windows
Windows-native installer for Ubuntu

E4X XML Namespaces

For XML that looks like the following response from Yahoo’s weather service:
[xml]
< ?xml version=’1.0′ encoding=’UTF-8′?>
http://us.rd.yahoo.com/dailynews/rss/weather/Sunnyvale__CA/*
http://weather.yahoo.com/forecast/94089_f.html Yahoo! Weather for Sunnyvale, CA
en-us
Tue, 06 Nov 2007 6:56 pm PST
60

142
18

http://weather.yahoo.com/ http://l.yimg.com/us.yimg.com/i/us/nws/th/main_142b.gif
37.39
-122.03

http://us.rd.yahoo.com/dailynews/rss/weather/Sunnyvale__CA/*http://weather.yahoo.com/forecast/94089_f.html Tue, 06 Nov 2007 6:56 pm PST

< ![CDATA[

Current Conditions:
Fair, 55 F

Forecast:
Tue – Mostly Clear. High: 67 Low: 49
Wed – Partly Cloudy. High: 71 Low: 49

Full Forecast at Yahoo! Weather
(provided by The Weather Channel)
]]>

94089_2007_11_06_18_56_PST

[/xml]

When you need to access the nodes with complex node names such as yweather:location think XML namespaces.
In the above example, look for the xmlns declaration in the rss node
xmlns:yweather='http://xml.weather.yahoo.com/ns/rss/1.0'.
Creating a Namespace object using the declaration will allow us to access the nodes with complex names.
Creating a Namespace object is a pretty simple process:

[as]
var yweatherNS:Namespace = new Namespace( http://xml.weather.yahoo.com/ns/rss/1.0 );
[/as]

Now we can access the node with the following code:

[as]
yahooWeaterXML.channel.yweatherNS::location

trace( yahooWeaterXML.channel.yweatherNS::location.@city ); // outputs ‘Sunnyvale’
trace( yahooWeaterXML.channel.yweatherNS::location.@region); // outputs ‘CA’
trace( yahooWeaterXML.channel.yweatherNS::location.@country ); // outputs ‘US’
[/as]

With the preceding example we need to know the namespace url ahead of time. E4X gives us the namespaceDeclarations() method that will return an array that contains the namespace declarations associated with the XML document

Using the namespaceDeclarations() method from the XML object:

[as]
var namespaces:Array = myXML.namespaceDeclarations();
[/as]

Now we have an array of namespace declarations that we can use to dynamically declare Namespace objects and access our complex node names:

[as]
var yweatherNS:Namespace
var geoNS:Namespace
var nsLen:uint = nameSpaces.length;
for(var i:uint = 0; i < nsLen; i++)
{
var newNamespace:Namespace = new Namespace( nameSpaces[i] );
if( String( nameSpaces[i].prefix ).toLowerCase() == “yweather” )
{
yweatherNS = newNamespace;
}
else
{
geoNS = newNamespace;
}
}
[/as]

So we can access the geo and yweather nodes without any problems now.

Setting up Cruisecontrol – Continuous Integration System

Setting up Cruisecontrol is a pretty simple process. Make sure you check out the Cruisecontrol site for info on getting started and installation. The basic steps are:

  1. Download the Cruisecontrol ZIP file (cruisecontrol-src-x.x.x.zip) and unzip the files to a directory on your computer. I’ve un-ziped the files to C:/cruisecontrol271
  2. Then build the Cruisecontrol code using the BAT file build.bat in {INSTALL_DIR}/main/
  3. Verify the install by running the following command in the command prompt:java -jar {INSTALL_DIR}/cruisecontrol-launcher.jarYou should get a error about a missing config file. If there are any other errors, you’ll need to figure out what’s missing (I’ve seen the missing tools.jar). Usually pretty easy things to fix though.
  4. Cruise control is set up and ready to run.

*There is also a windows installer but I like the command line install, it gives the feeling of more control.

Now you’ve got Cruisecontrol installed. In my next post, I’ll show you how we set up an ActionScript 2.0 project and build loop in Cruisecontrol.

Continuous Integration – The pieces and parts!

I finally have some time to post about our Continuous Integration (CI) set up for ActionScript 2.0 and Flex/ ActionScript 3.0 projects. To continue on from the first post, I’ll explain all of the pieces & parts that are needed to get a similar CI system rolling.

First, the parts that you’ll need for any project:

  • The project files – I’ve created a very simple same project that you can download for testing.
  • SVN REPO for your project
  • Cruisecontrol to manage the CI
  • ANT so we can build the projects – This is included in the Cruisecontrol download.
  • Java

Next if you are going to build ActionScript 2.0 projects you’ll need:

  • Flash IDE for ActionScript 2.0 projects – Yeah a little bit of a bummer. You’ll need to install the IDE on the CI server so the projects can be built. I’m sure you could set it up with MTASC, but we needed to compile in the IDE.
  • FlashCommand to build ActionScript 2.0 projects using the IDE (Mac Version) – Mike Chambers built this nifty tool and I’ve been using it for a while since I work in Eclipse with my ActionScript 2.0 projects.
  • ASUnit for unit testing your ActionScript 2.0 projects
  • The stand-alone flash player

Finally if you are going to build Flex Projects you’ll want the following:

Yeah, that seems like a lot, but once everything is set up it is easy to maintain…almost set and forget. As a note, this is all going to be set up on a PC, I’m not a Mac guys, so sorry there, but I would hope the set up would translate nicely from PC to Mac. We now have the basic moving parts of the system. In my next few posts, I’ll explain setting up the system:

  1. Setting up Cruisecontrol
  2. Setting up an ActionScript 2.0 Cruisecontrol project
  3. Setting up an Flex Cruisecontrol project
  4. Integrating ActionScript 2.0 project unit test results
  5. Integrating Flex project unit test results

I’ll also provide sample files and packages as we go so you have something to start from.