Archive for the 'Flex' Category

11
May

Adobe Share ActionScript library goes community - Updated! Now with PDF Support!

sharelogolong.jpg

Don’t you just love an exciting headline. If you haven’t heard by now, Share (Document Services API) is an online service provided by Adobe that allows you to share, publish, and organize documents online. Share is already a good service, but it can be an even better service with a little help from all of us. How can we make the service better?

1. Use the service and give feedback on the Share Forum. Whether you’re happy or not they want to hear about it. Have a feature idea, pass it on.
Share Forum
Share API Forum

2. Tell other people about the service. Its 1gb of free space for your documents. Who doesn’t like free.
https://share.acrobat.com

3. Create and share your own projects around the service.

4. Contribute to open source projects that use the Share API.

There are many open source libraries that allow you to easily use the Share Service in your applications (listed at the bottom). One of these libraries is the ActionScript library. Developed internally at Adobe, it has the full original functionality of the service but has fallen behind in the latest revisions of the Share Service. So when speaking to Fang Chang (Adobe Product Manager in charge of the Share APIs) this past week I offered to help bring an updated version of the ActionScript library into the hands of the community. Fang who is a very patient man, (listened to all my feature idea ramblings) felt like it would be a great move. So here we are.

What has been done?

1. The as3 library has been updated to work with the new endpoint and pdf creation support has been added
2. Updated AirShare demo for the release version of AIR.
3. The code has been checked into subversion

4. Documentation has been generated

5. A release has been made that includes the updated source/example.

Example of upload with pdf creation:

import com.adobe.share.api.ShareAPIToken;
import com.adobe.share.api.ShareAPIEvent;
import com.adobe.share.api.ShareAPIUser;
import com.adobe.share.api.ShareAPI;
 
private var _shareAPI:ShareAPI = new ShareAPI("<api key>", "<secret>");
private var _shareAPIUser:ShareAPIUser = new ShareAPIUser("<share user name>", "<share password>");
 
private var _file:File = new File();
 
private function initApp():void{
	var shareAPIToken:ShareAPIToken = _shareAPI.login(_shareAPIUser);
 
	shareAPIToken.addEventListener(ShareAPIEvent.API_AUTHENTICATED, function():void{
		_file.browse();
		_file.addEventListener(Event.SELECT, onFileSelected);
		_file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onFileUploadComplete);				
	});
 
}
private function onFileSelected(event:Event):void{
	_shareAPI.uploadFile(_shareAPIUser, _file, null, _file.name, "", true, true);
}
private function onFileUploadComplete(event:DataEvent):void{
	trace("complete");
}

Want to contribute to the Library?
Please contact me or select join from the project site.

Other Share Libraries:
Java Library
Ruby (Developed by Hideyuki KATO) Ruby
Python (Developed by Vivek Kapoor) Python
Cold Fusion (Developed by Ray Camden) Cold Fusion

28
Apr

Web Expo 2.0 thoughts: Getting my hands Meshy and is Curling a game that will really take off?

web2.jpg

I was busy last week and unable to make it to most of the show, but I did use my free expo pass on thursday morning to see the Keynotes, a mesh demo, and take a pass through the expo hall. Overall it was worth it. At the very least I now have a new t-shirt for every day of the month.

mesh.jpg

During the brief visit I sat in on a Mesh Demo. If you don’t know what Mesh is, its something between FolderShare, Groove, and .Mac with web services (if you dont’ understand what these things are then go here (mesh.com) for a better explanation. It has been awhile since Microsoft released something that made me feel itchy. You know the way you felt itchy when the iPhone first came out. That I got to have that itch. An itch that must be scratched.

In the beginning of the demo I was apprehensive. Would you be able to show me an open platform that could back up Meshs ability to run on anything? Or would you show me another FolderShare (which i love) that runs on windows and runs on mac if you don’t mind that its powerpc and hasn’t been updated in years. In the end I found myself pleased with Ori Amigas presentation of how the service level architecture works. In the presentation Microsoft had a list of other technologies that they would work with the community on getting libraries built for. One on the list was Flash, which immediately made me go hmm… After the show I asked Ori if when I got home I would find a crossdomain.xml file on the API server. To this he responded by saying it was something they were working out the details on. So no, but yes, I think. He also said that they are only allowing a limited amount of 3rd party developers in at the moment. In the demo Ori showed syncing between a Mac, Vista, Online desktop and to put it simply I liked it. After getting home, I signed up for Mesh and when going to add my mac as a device it just said “coming soon”. That being the case, I’m going to be on hold with this technology for a bit. Overall, I’m pleasently pleased with the potential (you know i’m happy when alliteration just comes out) and am looking forward to using Mesh. I even went over to the Microsoft booth and thanked them for giving me something to be excited about. They seemed slightly caught off guard by my complements and they tried to give me more shirts. I settled for just seeing genuine smiles all around. (they didn’t know that i already had 2 of those shirts :))

Next up: Curl

curl.jpg

Curl Nitro is an emerging RIA technology that is trying to position itself as a competitor for AIR and Silverlight. I already feel like I’ve spent too much time on Curl for the moment so i’m just going to give you a link to a blog entry by Gary Gibert about Adobe vs Curl. It contains pretty much what you would expect including the required AIR vs Curl employee flame war in the comments. So here you go.

View Gary Gilbert Article

The comment I left at the end of the article:

Wow thats a lot of talking. I just wanted to chime in to say that i also wandered over to the Curl booth during 2.0 and spoke with Richard. First Richard is a nice guy, he’s a nice guy who happens to be a small fish in an ever growing pond (soon to be ocean).

Admittedly i have not read all of the comments here. Frankly i’d rather spend this beautiful day playing frisbee at the park. But I do feel like just stating basically what I told Richard after he gave me a product demo with the “performance” spiel.

If you’re going to make these performance comparisons then you should make two applications. One AIR and one CURL that do the same thing and show off performance in various scenarios (data load, 3d, etc…). Then provide the source code for both applications.

An after thought I had about it is make an awesome application that uses curl. Showing me a demo of a spinning DNA strand will get you no where when courting flash/flex developers. Its hot but I want something more substantial if we’re going to be in it for more than a one night stand.

Adobe and the dev community is constantly showing me hot and substantial AIR/Flex applications. To me the idea of taking on Silverlight and AIR head on like in your curl.com home page airplane animation analogy (btw done using flash) is comical in a very sad way. You know Ha Ha sad, not Ha Ha funny.

So pony up some applications done in CURL people want to use. Not because its CURL but because they’re cool and useful applications. And show some clear differences on why CURL is better because it fulfills some needs AIR developers have but are not getting. Then maybe we’ll consider putting it on our ever growing tool belts.

On the plus side I did mention that Adobe always buys the beer and they offered to take me out for one after the show. I wasn’t able to take them up on it but its a good first step in any developer relationship.

Off to the park. -s

09
Mar

My code look pretty one day (or turning your GeSHi install into a service and using it with AS3)

File this one under “when I could have been creating something useful, I created this”

Hmmmm

I’ve been using PrivatePaste.com quite often of late and thought hmm… it would be simple to create a quick as3 library for using the service. Unfortunately PrivatePaste isn’t intended to be used as a web service. This means we can post and get a result, but it will be html. The site also lacks a crossdomain.xml file. While parsing the HTML using a regular expression, it occurred to me that privatepaste just uses GeSHi. A php open source library for syntax highlighting.

Since I already have the GeSHi wordpress plugin setup on this blog, I figured why mess around with parsing an HTML page when I can just make a quick syntax highlighting service myself. All you need to do is add the following file to the directory containing GeSHi. If you’ve installed the wp-syntax plugin (or any highlighting plugin that uses GeSHi) for your wordpress blog then its under /wp-content/plugins.

include('geshi.php');
 
if ( get_magic_quotes_gpc() ) $_POST['source'] = stripslashes($_POST['source']);
 
$source = $_POST['source'];
$language = $_POST['format'];
$path = 'geshi/';
 
$geshi = new GeSHi($source, $language, $path);
 
if($_POST['linenumbers'] == "true")
	$lineoption = GESHI_NORMAL_LINE_NUMBERS;
else
	$lineoption = GESHI_NO_LINE_NUMBERS;
 
 
$geshi->enable_line_numbers($lineoption);

echo $geshi->parse_code();

Thats it, you now have a GeSHi service. To use your service in ActionScript 3 you can use as3geshilib that I’ve included in the download:
GeSHi AIR

private function parseCode():void{
	var geshiService:GeshiService = new GeshiService();
 
	geshiService.addEventListener(GeshiResultEvent.ON_GET_PARSE_CODE, function(event:GeshiResultEvent):void{
			trace(event);
			htmlDisplay.htmlText = event.data as String;
		});
 
	geshiService.parseCode("SELECT * FROM user_table", GeshiFormatType.SQL, true);
}
geshiservice.zip Includes geshiservice.php, as3geshilib - source included

In the end, what we really have here is an example of how to make a quick php service and use it in ActionScript. Which I guess is not a complete waste of time…

If you just need syntax highlighting in your AS3 project then I would recommend checking out this AS3 code highlighting library http://labs.searchcoders.com/text/. I haven’t checked it out yet, but plan to the next time my code runs off on a tangent.

03
Mar

Pownce Actionscript 3 Library Released - Full API V2.0 Implementation (Upload files and everything)

Now that Pownce has released an official API covering features such as posting files, I decided to go ahead and make an AS3 library for it. I just posted it to googlecode and have only done minimal testing on it. I would appreciate any feedback.

The Pownce team did a terrific job with the API. Easy to use and consistent. I had minimal issues while creating the as3 library.

In my opinion (yeah you can skip this) Pownce is a far better user experience than Twitter. Its like a gobot and a transformer or a dell laptop and a macbook or chocolate torte and hohos. That is the best I an come up with that the moment, yes.

torteHoHos

I could be missing something here… but this API in my mind is a leap forward in the race with twitter.

// Imports omitted for brevity
private const APP_KEY:String = "<your app key>";
 
private var _pownceService:PownceService;
private var _testUsername:String = "<Pownce username>";
private var _testPassword:String = "<Pownce password>";
 
private function initApp():void{
	_pownceService = new PownceService(APP_KEY);
	_pownceService.setAuth(_testUsername, _testPassword);				
}
 
// Example of posting a file
public function testPostAFile():void{
	var file:FileReference = new FileReference();
 
	_pownceService.addEventListener(PownceResultEvent.ON_POST_A_FILE, function(event:PownceResultEvent):void{
			var pownceResult:PownceNotesResult = event.data as PownceNotesResult;
 
			if(pownceResult.success){
				trace((pownceResult.notes[0] as PownceNote).body);
			}else{
				trace(pownceResult.statusCode);
				trace(pownceResult.message);
				trace(pownceResult.request);
			}
		});
 
	file.addEventListener(Event.SELECT, function(event:Event):void{
			_pownceService.postAFile("all", event.currentTarget as FileReference, "File upload test");
		});
	file.addEventListener(ProgressEvent.PROGRESS, function(event:ProgressEvent):void{
			trace(event.bytesLoaded + "/" + event.bytesTotal);
		});
 
	file.browse();
}
private function testGetNoteList():void{
 
	_pownceService.addEventListener(PownceResultEvent.ON_GET_NOTE_LIST, function(event:PownceResultEvent):void{
			var pownceNoteResult:PownceNotesResult = event.data as PownceNotesResult;
 
			if(pownceNoteResult.success){
				trace(pownceNoteResult.notes.length);
			}else{
				trace(pownceNoteResult.statusCode);
				trace(pownceNoteResult.message);
				trace(pownceNoteResult.request);
			}
		});
 
	_pownceService.getNoteList(_testUsername,null, 100, -1, -1);
}

I’m going to continue to test the library and improve the documentation. Let me know if I missed anything (outside of OAUTH).

Add me to your Pownce http://pownce.com/InitApp/

Existing issue:
One method is not currently working. It is the retrieval of the send to list. I’ve posted information about the issue to the google pownce group and hopefully it will be resolved soon.

29
Feb

Posting a Note/Link to Pownce with ActionScript and the New Pownce v2.0 API

So this morning Pownce finally released a true API that allows us to use the full functionality of Pownce. A while back I posted information on how to do this in a reverse engineered method, but now we can do it without the feeling that we might be doing something bad (although that can be fun sometimes to can’t it).

The code sample below shows how to Authenticate to the service using HTTP Basic Authentication and posts a note/link.

Steps to take
1. Get a pownce account if you don’t have one.
2. Register to get an application key.
3. Use the following code. Change “app_key” to your application key. Change “login” and “password” to user you want to post with.


Private Paste Link to Code

import mx.utils.Base64Encoder;
 
private const APP_KEY:String = "<app_key>";
 
public function initApp():void{
	sendNote(
		"Example of note in the new API.",
		"http://pownce.com/initapp",
		"<login>",
		"<password>"
		);
}
public function sendNote(note:String, link:String, login:String, password:String):void{
	var urlLoader:URLLoader = new URLLoader();
	var urlRequest:URLRequest = new URLRequest();
	var urlVariables:URLVariables = new URLVariables();
 
	var authHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + base64Encode(login + ":" + password));
 
	urlVariables.note_to = "public";
	urlVariables.url = link;
	urlVariables.note_body = note;
 
	urlRequest.requestHeaders.push(authHeader);
	urlRequest.url = "http://api.pownce.com/2.0/send/link.xml?&app_key=" + APP_KEY;
	urlRequest.data = urlVariables;
	urlRequest.method = URLRequestMethod.POST;
 
	urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus);
	urlLoader.addEventListener(Event.COMPLETE, onComplete);
 
	urlLoader.load(urlRequest);
}
private function onHTTPStatus(event:HTTPStatusEvent):void{
	trace(event);
}
private function onComplete(event:Event):void{
	trace(event);
}
private static function base64Encode(data:String) : String
{
    var encoder:Base64Encoder = new Base64Encoder();
	var bytes:ByteArray = new ByteArray();
	bytes.writeUTFBytes(data);
 
    encoder.encodeBytes(bytes);
    return encoder.flush();
}

If you want to hear more of my occasionally relevant information then add me to your friends in pownce: http://pownce.com/InitApp/


Note: I did this example using Flex and used mx.utils.Base64Encoder. If you’re not using Flex you’ll need to use an alternate package for your Base64 encoding.

29
Oct

Flex Builder 3 Mac AIR Debug/Profiler Switcher App

UPDATE: This program is no longer needed as of the latest release of Flex Builder. The source does include an actionscript class for reading and writing to standard INI files that I whipped up for this. Go ahead and grab the source if you have the need for it. Regards Steven


This problem may not effect that many people, but because of a bug you can’t profile your AIR application on the Mac without editing the mm.cfg file. It wouldn’t be that bad but you have to remove and add a line to enable the profiling and when done remove the line so that debugging will work again.

Details at the Labs Wiki

Because the new profiling feature is one of the best new features in Flex Builder and personally one I don’t know how i ever lived without. (I wish i had a time machine right now) I’ve made a little AIR app that quickly switches you between Debug and Profiling at the click of a button. It pulls your workspaces from your flex pref file so everything should be automatic.

theswitcher.jpg

TheSwitch AIR File
TheSwitch Source Code

Source is available just in case you have some crazy setup.

Its a throw away, but good enough to get you by until the next release.

Learn more about the Flex Builder 3 Profiler here

Steven

Disclaimer: Some guessing was involved in the coding of this program.

26
Oct

New AIR App: “Handout” powered by Adobe SHARE


Handout is a desktop application I’ve made that allows you to drag and drop upload your documents to Adobe SHARE.

GO HERE TO INSTALL THE LATEST VERSION OF HANDOUT

 

Features

1. Drag and Drop upload multiple files to Share

2. Public share any of your Share Files.

3. Send Share file links directly to Pownce or Twitter. (With message)

4. Create a tinyurl for a Share public link.

5. Quickly get embed code for a shared file.

6. Share links and direct file links.

 

handout_48.png

Handout Screen Shots

 

- File upload 

Uploading SHARE File

 

- SHARE the file

 Share a file

 

- Send a share link to Pownce

 Send a link to Pownce

 

Putting it together (Mash-up)

If you haven’t noticed the Flex/Flash community has come a long way in the last year. We now have tons of resources made available through the community. Whether its API’s, frameworks, skins, etc, its the pieces we need to realize our ideas quickly. 

 

Another great mashup:

Mashup 1

 

 

Thats really the basis for this little project. Making use of community resources and sharing the results. In future posts I’m planning on discussing in detail the elements that go into concepting, creating, and distributing an AIR app. 

 

Known Issues with Handout (If i know about it, I might as well share it, right?)

1. Deleting a file takes a long time. I believe this is something the Share people are working on.

2. Getting the list of files takes a long time (5-10 seconds). This just started with the last Share update and I’ve reported it. 

3. You must delete a file before you upload the same file again. 

4. On the first login for twitter and pownce you have to click the files icon again to send the link.

5. This app has been tested by my top notch QA team which includes no less than myself, my girlfriend, 2 cats, my brother, and anyone else i could force to look at it and manage to keep their attention for 5 minutes.. so.. you know its solid

6. Code cut off was 5 minutes ago

 

 

Many Thanks to these people who unknowingly contributed

———-

Adobe SHARE

AS3 API & Service

https://share.adobe.com/adc/adc.do?docid=72b0d849-7863-11dc-b75f-151d3f6d9313

http://www.adobe.com/cfusion/webforums/forum/categories.cfm?forumid=72&catid=656

Share has amazing potential and it will be fun to see what these guys come up with.

 

AirUpdateManager

http://blog.everythingflex.com/2007/10/01/air-update-manager/

 

as3corelib-src

http://code.google.com/p/as3corelib/

 

ASCript32

http://ascrypt3.riaforge.org/index.cfm

 

pownce

http://www.pownce.com

 

twitter

http://www.twitter.com

 

Icons

http://famfamfam.com/ and other places on my computer

 

Handout - Application Icon

- My girlfriend

All developers dream of having a girlfriend who is a designer. I’m living that dream.

 

People at the SHARE forum 

http://www.adobe.com/cfusion/webforums/forum/categories.cfm?forumid=72&catid=656

Thanks to Raymond Camden for finding some of the bugs before me. Also, a big thanks to the SHARE people who always respond quickly to questions.

 

AS3notification Library

http://code.google.com/p/as3notificationlib/

Also the sliding dialogs are based on the ones from Salsa


TinyURL

http://tinyurl.com

 

Scale Nine - Share Icon

http://scalenine.com/blog/2007/10/16/thoughts-on-adobe-share/

I think Juan Sanchez made the icon but I may be wrong, its where i got it from…

 

Flex Builder 3 Public Beta 2 

http://labs.adobe.com/technologies/flex/flexbuilder3/

 

Adobe AIR

http://labs.adobe.com/technologies/air/

12
May

Quicktip: Flex Form Validation - Sometimes tapping the user on the shoulder just isn’t enough

Since Flex 360 I’ve been completely engulfed in a large project in which a large portion of it is in yes, Flex. Flex and I have been getting along pretty well but from time to time we rumble a bit. In the case of form validation flex seems to be perfect in almost every way… except that after the validation happens the only signal to the user that something needs to be done is the hightlight around the control. This is the validation equivalent of a tap on the shoulder to the user.

What i wanted was to show was the rollover popup for the first form element the user had to alter in order to have a valid form immediately upon hitting submit. Unfortunately I couldn’t find any method to raise the popup so I wrote a quick little hack that does the job. Its not perfect, but one of the best things I learned from the flex 360 conference was when Jessie Warden said “sometimes you just throw stuff out there and its hot!”. Essentially, what I think he meant was what you do may not always be the best way, but if it does the trick… go with it.

private function setValidationFocus(formObject:Object):void{
formObject.setFocus();
formObject.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));
}

valpop.jpg
If anyone knows of a better way to accomplish this task, please send it my way.

thanks -s

17
Mar

Your Flex app into Apollo in 5 minutes

In his keynote Kevin Lynch said it would take 5 minutes to get your flex app into Apollo. He wasn’t kidding. I had my cairngorm based flex app into apollo in under 5 minutes.. great job flex/apollo team. Way to come through and I was told to give a special thanks to Mike Chambers for tonights events…. This really is as cool as i thought it would be.. See my app in apollo below Click image to enlarge. 

firstapolloapp.jpg 

16
Mar

Is the Apollo team run by the kid that lived next door that never let me play his video games?

So I’m off to ApolloCamp tonight and I’m hearing a lot of “maybe” we’ll let people get Apollo and it got me thinking. When I was a kid I lived next door to a kid named Barry. Barry had an intellivision. He would always call me to come over and check out his video games with the enticement of “maybe” he would let me play.  So I would go over and get all excited about playing and inevitably end up just watching him play for hours. Lets just say I found it slightly Frustrating.

coleco_catalog.jpg

For the last year now I’ve been hearing about Apollo, watching other people make applications with Apollo(mxna, http://video.onflex.org/, Flex 360), and what i want to know is, when is it going to be my turn? If you see someone having a temper tantrum tonight at ApolloCamp then you know you’ve found me. :) On the other side of it, its been a long time since I’ve been this excited about a new technology (like a kid again) and for that I’m thankful. Without the flex team/flex community keeping me filled with cool new things almost daily, I think the anticipation of Apollo would have driven me crazy a long time ago.

See you all tonight!

-Steve

Also, thanks to my Mom for getting me an Apple IIc which made me forget all about Barry and his Intellivision. Your the Best Mom.

appleiic.JPG




Vote

flickr