<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Flash Remoting for Ruby on Rails &#187; AMF</title>
	<atom:link href="http://blog.rubyamf.org/category/amf/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rubyamf.org</link>
	<description>Ruby AMF - Flash Remoting for Ruby on Rails</description>
	<lastBuildDate>Tue, 25 Aug 2009 12:23:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Maintenance Release: 1.6.1</title>
		<link>http://blog.rubyamf.org/2008/06/15/maintenance-release-161/</link>
		<comments>http://blog.rubyamf.org/2008/06/15/maintenance-release-161/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 04:28:05 +0000</pubDate>
		<dc:creator>tony</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[RubyAMF]]></category>

		<guid isPermaLink="false">http://blog.rubyamf.org/?p=113</guid>
		<description><![CDATA[Hello all,
There was at least one bug running RubyAMF with Rails 2.1, and I fixed
that today, and all my reference apps (which are what passes for
tests) work, so I&#8217;m tagging that sucka as 1.6.1.
You can get that like:
script/plugin install http://rubyamf.googlecode.com/svn/tags/1.6.1/rubyamf

Or from the current tag:
script/plugin install http://rubyamf.googlecode.com/svn/tags/current/rubyamf

Now, for anyone interested, what was breaking was Rails 2.1&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Hello all,<br />
There was at least one bug running RubyAMF with Rails 2.1, and I fixed<br />
that today, and all my reference apps (which are what passes for<br />
tests) work, so I&#8217;m tagging that sucka as 1.6.1.<br />
You can get that like:<br />
script/plugin install <a href="http://rubyamf.googlecode.com/svn/tags/1.6.1/rubyamf" target="_blank" rel="nofollow">http://rubyamf.googlecode.com/svn/tags/1.6.1/rubyamf</a></p>
<p><a href="http://rubyamf.googlecode.com/svn/tags/1.6.1/rubyamf" target="_blank" rel="nofollow"></a><br />
Or from the current tag:<br />
script/plugin install <a href="http://rubyamf.googlecode.com/svn/tags/current/rubyamf" target="_blank" rel="nofollow">http://rubyamf.googlecode.com/svn/tags/current/rubyamf</a></p>
<p><a href="http://rubyamf.googlecode.com/svn/tags/current/rubyamf" target="_blank" rel="nofollow"></a><br />
Now, for anyone interested, what was breaking was Rails 2.1&#8217;s forgery<br />
protection, which stops cross site scripting attacks by placing a<br />
security code in HTML and Ajax forms and verifying that that&#8217;s the<br />
right code on the Rails side.<br />
My fix was just to add the AMF mime type to the list of mime types<br />
that aren&#8217;t checked for forgery protection, alongside XML and JSON. I<br />
think it belongs there, because there&#8217;s no way that I know of to hook<br />
into the Rails forgery protection.<br />
To do the same type of thing from a Flash app would be a bit of a<br />
different process, and I&#8217;m not quite sure what the best way to think<br />
about that is, nor if it&#8217;s actually a problem we need to worry about<br />
anytime soon. Any thoughts?<br />
Upshot: RubyAMF 1.6 for Rails 2, RubyAMF 1.6.1 for Rails 2.1.</p>
<p>Cross posted from (http://groups.google.com/group/rubyamf)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rubyamf.org/2008/06/15/maintenance-release-161/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SSR 2 Breakdown</title>
		<link>http://blog.rubyamf.org/2008/01/28/ssr-2-breakdown/</link>
		<comments>http://blog.rubyamf.org/2008/01/28/ssr-2-breakdown/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 04:36:47 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Remoting]]></category>
		<category><![CDATA[SSR]]></category>

		<guid isPermaLink="false">http://blog.rubyamf.org/?p=103</guid>
		<description><![CDATA[John Farrar had asked about SSR 2 &#8211; more information on SSR and what benefits / things you get with it. I thought I&#8217;d be a little more specific and outline what it is and what you get. Bare with me if I start out by pointing out the obvious.
So, I guess here&#8217;s the obvious. [...]]]></description>
			<content:encoded><![CDATA[<p>John Farrar had asked about SSR 2 &#8211; more information on SSR and what benefits / things you get with it. I thought I&#8217;d be a little more specific and outline what it is and what you get. Bare with me if I start out by pointing out the obvious.</p>
<p>So, I guess here&#8217;s the obvious. SSR is a small AS3 remoting library. Stands for &#8220;Super Simple Remoting&#8221; because it&#8217;s simple. My goal when writing it was to make one library that works in Flash and Flex and handle logic that should be in every application. Personally I like using this in both Flash and Flex because I don&#8217;t forget how to use it. I always forget how to use RemoteObject so this makes a standard library for either.</p>
<p>So here&#8217;s an example of a bare minimum setup of SSR to make a remoting call.</p>
<pre>
import com.niarbtfel.remoting.RemotingConnection;
import com.niarbtfel.remoting.RemotingService;
import com.niarbtfel.remoting.events.FaultEvent;
import com.niarbtfel.remoting.events.ResultEvent;

var rc:RemotingConnection = new RemotingConnection("http://localhost/myGateway",3);
//gateway
//3 is the amf format

var rs:RemotingService = new RemotingService(rc,"MyService",4000,3,true);
//rc is the remoting connection to use for this service
//"MyService" is the service target on the server.
//4000 is the amount of time a call waits before retrying the call.
//3 is the amount of retries to attempt per call.
//true turns on call limiting, which means that the same exact call can't be made while one is waiting for a response or timeout.

//callbacks for calls, keep reading.
function onr(re:ResultEvent):void{}
function onf(fe:FaultEvent):void{}

//callbacks for calls, keep reading.
function onrArgs(re:ResultEvent,args:Array):void{}
function onfArgs(fe:FaultEvent,args:Array):void{}

rs.myMethod([],onr,onf,false); //make a call
//[] = call arguments
//onr is the result callback
//onf is the fault callback
//false - don't return the original arguments sent in the request to the callback functions

var mym:String = "myMethod";
rs.apply(mym,[],onrArgs,onfArgs,true); //make a call
//[] = call arguments
//onr is the result callback
//onf is fault callback
//true - return the original arguments sent in the request to the callback functions
</pre>
<p>This is the simplest form of setting up flash remoting with SSR without any event listeners on the RemotingConnection or RemotingService. Events for RemotingConnection and RemotingService are documented in the class files. You get events for things like disconnects, retries, timeouts, etc.</p>
<p>Each RemotingService can have a timeout specified for each call going to that service, as well as a maximum attempts allowed per call. If one call is made, but doesn&#8217;t receive a response within the timeout specified, it&#8217;s tried again. This happens over and over until the maximum attempts is reached, and a timeout event is dispatched.</p>
<p>RemotingService has an option to turn on call limiting. Which makes the remoting service smart about what to call and what not to call. If you made a call to &#8220;MyService.myMethod&#8221; with parameters ["something","something else"], it would not let you make that same call until the first one has completed, or has timed out. You&#8217;d still be able to make calls to any other service method.</p>
<p>Another new feature is caching. Say you make calls to some service numerous times, but the data is always the same. Instead of doing that you can enable the service to use caching. Here&#8217;s a snippet from above with caching in place:</p>
<pre>
var rs:RemotingService = new RemotingService(rc,"MyService",4000,1,true);
rs.remotingCache = new RemotingCache(-1);
//-1 specifies that the cache should never expire. (supply a time in milliseconds for an expiration if needed)
</pre>
<p>Now every call made through this remoting service will be cached. If the exact same call is made, the results are pulled from cache instead.</p>
<p>SSR also has paging built in with a RemotingPager. Here&#8217;s a snippet on how that works:</p>
<pre>
import com.niarbtfel.remoting.RemotingConnection;
import com.niarbtfel.remoting.RemotingService;
import com.niarbtfel.remoting.events.FaultEvent;
import com.niarbtfel.remoting.events.ResultEvent;
import com.niarbtfel.remoting.paging.RemotingPager;
import com.niarbtfel.remoting.paging.PageResponder;

var rc:RemotingConnection = new RemotingConnection("http://localhost/myGateway",3);
var rs:RemotingService = new RemotingService(rc,"MyService",4000,3,true);
var rp:RemotingPager;
var pr:PageResponder // just to include in compilation

var totalRecordsOnServer:int = 400; //should come from server instead.

//callbacks for calls, keep reading.
function onrArgs(re:ResultEvent,args:Array):void
{
  rp = new RemotingPager(rs,"myMethod",PageResponder,["someParameter"],re.result as Array,totalRecordsOnServer,50,2,1);
  myButton.addEventListener(MouseEvent.CLICK, onbc);
}
function onfArgs(fe:FaultEvent,args:Array):void{}

function onbc(me:MouseEvent):void
{
   if(rp.hasNext())
   {
     trace(rp.next());
   }
   else
   {
     trace("no more pages");
   }
}

rs.myMethod(["someParameter",0,50],onrArgs,onfArgs,true); //make a call to get the initial data.
//0 is the offset
//50 is the pagesize
</pre>
<p>In this example, a remoting pager is created in the result callback of the first call. A remoting pager needs at least the first page in order to be created. The RemotingPager takes care of &#8220;pre-fetching&#8221; pages with buffer options. In the above example, where the RemotingPager is created, 50 is the pagesize to grab, 2 is the amount of pages to buffer / pre-fetch. And 1 is the amount of pages that are left in the buffer before triggering another buffer fill / pre-fetch. This is the simplest form of paging, but the RemotingPager has methods for getting certain pages, getting them all, seeking, etc.</p>
<p><strong>UPDATE: I forgot to mention RemotingService.MaxTimeoutsBeforeHault.</strong></p>
<p>With RemotingService.MaxTimeoutsBeforeHault, you can control how many timeouts are allowed from any call, before all remoting calls are stopped. Here&#8217;s a snippet:</p>
<pre>
RemotingService.MaxTimeoutsBeforeHault = 3;
var rs:RemotingService = new RemotingService(rc,"MyService",4000,3,true);
rs.addEventListener(CallEvent.SERVICES_HALTED, onch);
function onch(ce:CallEvent):void{}
rs.myMethod([],onR,onF,true);
</pre>
<p>When you set this property, any call that causes a timeout, is kept track of, and if 3 timeouts happen from any call, no other remoting calls will be made. Each attempt after the services are halted, dispatches the CallEvent.SERVICES_HALTED event.</p>
<p>In conclusion &#8211; SSR gives you logic out of the box that should be available anytime we are using Flash Remoting. And gives you numerous other features. SSR 2 is documented very well in the source files.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rubyamf.org/2008/01/28/ssr-2-breakdown/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>SSR 2</title>
		<link>http://blog.rubyamf.org/2008/01/27/ssr-2/</link>
		<comments>http://blog.rubyamf.org/2008/01/27/ssr-2/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 07:56:27 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[SSR]]></category>

		<guid isPermaLink="false">http://blog.rubyamf.org/?p=102</guid>
		<description><![CDATA[I&#8217;ve beefed-up SSR with numerous new features and improvements. I&#8217;ve updated OSFlash with new examples, and included a couple examples in the download. I&#8217;ve also changed the package structure, as I&#8217;m untying myself from the rubyamf package. Download and enjoy.
UPDATE: Check out the SSR 2 Breakdown.
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve beefed-up SSR with numerous new features and improvements. I&#8217;ve updated <a href="http://www.osflash.org/projects/ssr/">OSFlash</a> with new examples, and included a couple examples in the download. I&#8217;ve also changed the package structure, as I&#8217;m untying myself from the rubyamf package. <a href="http://blog.rubyamf.org/downloads/ssr.zip">Download and enjoy</a>.</p>
<p>UPDATE: Check out the <a href="http://blog.rubyamf.org/?p=103">SSR 2 Breakdown</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rubyamf.org/2008/01/27/ssr-2/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Stress Testing AMF Gateway Screen Capture</title>
		<link>http://blog.rubyamf.org/2008/01/24/stress-testing-amf-gateway-screen-capture/</link>
		<comments>http://blog.rubyamf.org/2008/01/24/stress-testing-amf-gateway-screen-capture/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 18:11:59 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.rubyamf.org/?p=101</guid>
		<description><![CDATA[I took some time to do a screen capture of AMF stress testing. It&#8217;s much easier to understand when you can see how to set it up. Check it out.
]]></description>
			<content:encoded><![CDATA[<p>I took some time to do a screen capture of AMF stress testing. It&#8217;s much easier to understand when you can see how to set it up. <a href="http://blog.rubyamf.org/downloads/amfstress.mov">Check it out.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rubyamf.org/2008/01/24/stress-testing-amf-gateway-screen-capture/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AMF Stress Testing &#8211; Flex, Ruby, JMeter.</title>
		<link>http://blog.rubyamf.org/2008/01/20/amf-stress-testing-flex-ruby-jmeter/</link>
		<comments>http://blog.rubyamf.org/2008/01/20/amf-stress-testing-flex-ruby-jmeter/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 04:56:58 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.rubyamf.org/?p=100</guid>
		<description><![CDATA[A while back I was tasked with coming up with a way to do stress testing for AMF. I looked at a bunch of tools, and a couple in particular. Those being curl-loader, httperf and JMeter. The only tool out of the box that supported &#8220;arbitrary binary support&#8221; was JMeter. AMF is sent in an [...]]]></description>
			<content:encoded><![CDATA[<p>A while back I was tasked with coming up with a way to do stress testing for AMF. I looked at a bunch of tools, and a couple in particular. Those being curl-loader, httperf and JMeter. The only tool out of the box that supported &#8220;arbitrary binary support&#8221; was JMeter. AMF is sent in an HTTP request as arbitrary binary, not a regular multipart upload. Which is cool, but not many tools support that.</p>
<p>Anyway, I&#8217;m going to keep this short &#8211; <a href="http://blog.rubyamf.org/downloads/amf_stress_test.zip">here is a <strong>rough</strong> set of tools that will get you stress testing your AMF gateways</a>. Make sure to read the &#8220;readme&#8221; in the zip file, this has enough instruction on the different tools, and the source for it all, so you can read through it, alter it, use it to your advantage.</p>
<p>Also, the capture client only works with SSR right now, but I&#8217;ve included the source for everything so you could go in and update the part that I left out which was support for Remote Object. It shouldn&#8217;t be a ton of work, sorry I couldn&#8217;t get that done.</p>
<p>I&#8217;ll be watching the RubyAMF mailing list for any help requests / questions about this. Hopefully this is really straight forward, and the readme does a pretty good job of explaining what&#8217;s going on with everything.</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rubyamf.org/2008/01/20/amf-stress-testing-flex-ruby-jmeter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Retiring From RubyAMF, But not AMF.</title>
		<link>http://blog.rubyamf.org/2008/01/11/retiring-from-rubyamf-but-not-amf/</link>
		<comments>http://blog.rubyamf.org/2008/01/11/retiring-from-rubyamf-but-not-amf/#comments</comments>
		<pubDate>Sat, 12 Jan 2008 04:57:04 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[RubyAMF]]></category>

		<guid isPermaLink="false">http://blog.rubyamf.org/?p=97</guid>
		<description><![CDATA[Hey Dudes!
First off, I apologize for this post being so late. It should have been about a month ago. I&#8217;m moving on from RubyAMF. It&#8217;s been such a good time talking and meeting people who supported my efforts on RubyAMF. I couldn&#8217;t say thank you enough &#8211; but I could write a loop for you.

while(true)
{
 [...]]]></description>
			<content:encoded><![CDATA[<p>Hey Dudes!</p>
<p>First off, I apologize for this post being so late. It should have been about a month ago. I&#8217;m moving on from RubyAMF. It&#8217;s been such a good time talking and meeting people who supported my efforts on RubyAMF. I couldn&#8217;t say thank you enough &#8211; but I could write a loop for you.</p>
<pre>
while(true)
{
 trace("THANK YOU");
}
</pre>
<p>Put this in Flash and try it. I know you&#8217;ll love me.</p>
<p>Anyway. I put a ton of effort toward RubyAMF, and they haven&#8217;t gone unnoticed, it&#8217;s so cool. And I&#8217;m glad I was part of helping out make strides for remoting in Ruby.</p>
<p>I&#8217;m definitely not done with AMF though. Trust me <img src='http://blog.rubyamf.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . I must say AMF is by far my favorite thing to work with when using Flex or Flash. It&#8217;s kind of awkward that I&#8217;m so passionate about AMF, but it&#8217;s an amazing creation from Macromedia with so many benefits.</p>
<p>As mentioned, I&#8217;m definitely not done with AMF, or writing / releasing cool stuff. First off. I&#8217;m sitting on PythonAMF. It&#8217;s not ready for a release yet. I need to do quite a bit of testing yet but it will happen.</p>
<p>I&#8217;ve also got another version of SSR done that I will release beginning of February. It includes great new additions. Here&#8217;s a quick breakdown of the new features.</p>
<p>Call limiting &#8211; Turning this on puts a remoting service in a state that will not allow duplicate calls to the same remoting service if a response has not been received from a previous one. Finally, this is built in so we don&#8217;t have to have scattered logic all over to handle this. This is extremely important because you can&#8217;t risk someone figuring out that you don&#8217;t limit calls made to the server, and then they smash your server. Ouch.</p>
<p>Caching &#8211; If a previous request is called again, it comes from cache instead. This includes options to expire cache after a certain time or after the cache has been hit a certain amount of times.</p>
<p>Paging &#8211; Yeah! Now there is a paging mechanism for those flashers (or flexers) who don&#8217;t get to use remote object. Or just don&#8217;t want to use remote object. Page buffering is built in, so you can set the buffer size to say 3 pages, and anytime there is only a certain amount of local pages (which you can specify) it retrieves the buffer pages. It has an iterator like interface so it&#8217;s all taken care of. As well as allowing &#8220;releaseAll,&#8221; some might remember that from Flash 8.</p>
<p>Paging is also built in a way that allows you to extend the default PageResponder (which you don&#8217;t have to touch by default). But this is nice if you want to put paging on a certain remoting service call, but the results you want to page are nested within the result object you get back.</p>
<p>I&#8217;ve also got a custom display renderer mechanism with the same iterator like interface that allows you to use a pager, (with say 50 items per page at a time), and have an interface for only displaying 10 at a time. So it&#8217;s like sub paging on the actual pager.</p>
<p>I think that&#8217;s it for new features. If I think of any others I added I&#8217;ll let you know.</p>
<p>Another issue I&#8217;m addressing is AMF stress testing. So far I&#8217;ve only seen the Flex Stress Testing framework which could possibly be used to test AMF gateways. But the amount of users it can act as to hit the server with is pretty limited, and the tool is so overwhelming to get setup.</p>
<p>AMF stress testing is exactly like it sounds. Test your AMF gateways with millions of hits. This is very important when working on something that is expected to have high volume traffic. I&#8217;ve experienced numerous sites that had high volume traffic and the server side couldn&#8217;t handle it. One in particular was remoting and just couldn&#8217;t take the hits. (Not because of AMF inefficiency, but because of server inefficiency.)</p>
<p>So as a way of spreading the word, that we can&#8217;t just blindly put up remoting gateways for a web site and not think anything of it. I&#8217;ve come up with a very simple way of stress testing AMF.</p>
<p>Here&#8217;s a quick rundown of how this all works.</p>
<p>There are a couple tools involved. First, a &#8220;capture client&#8221;, which is a simple Flex app that you fill out your service target, method name, arguments, amf version, and if it&#8217;s remote object or not. When that request is sent, it&#8217;s sent to a local &#8220;capture server.&#8221;</p>
<p>The &#8220;capture server&#8221; is a ruby webrick server that takes an incoming request and writes the raw post to a file (the AMF).</p>
<p>The next step in the process is JMeter. JMeter is an all around stress testing tool for many different web protocols. Jmeter was the only one I&#8217;ve found so far that allows for sending a POST request with &#8220;arbitrary  binary data&#8221; (<a href="http://www.faqs.org/rfcs/rfc1867.html">from RFC1867 secion 3.3</a>).</p>
<p>That&#8217;s how the Flash player sends over AMF to the server, as stated in RFC1867, AMF is just arbitrary binary. Anyway, since the AMF is just in the body, all you really have to do is send an HTTP Post request to the gateway, along with the binary captured from the capture server. And voila, you can hit the gateway as many times as you want triggering your remoting software to react and perform the same operations as what would occur when a flash / flex request comes in. This is also very important, because it&#8217;s the software you write that get&#8217;s triggered for every remoting call. We can&#8217;t just hit an index.html page and assume everything is ok, when actually none of your server software is being tested.</p>
<p>The other piece to the puzzle is validating response. So far I&#8217;ve been using a tool called PlasticSniffer. It&#8217;s a very simple packet sniffer that will allow you to see the requests / responses of AMF. Generally you can see the UTF data in the response, which is just some text so you&#8217;d be able to read most of what&#8217;s going on. With some awkward characters tossed in.</p>
<p>So Anyway, I have been very busy working on more AMF goodies and will continue to be involved with AMF. Please stand by for SSR2 and that AMF capture tool, with JMeter instructions to get that running.</p>
<p>I had a great time with RubyAMF. And hope to hear from all of you in the future.</p>
<p>-Aaron</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rubyamf.org/2008/01/11/retiring-from-rubyamf-but-not-amf/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Zlib Byte Array Support</title>
		<link>http://blog.rubyamf.org/2007/11/06/zlib-byte-array-support/</link>
		<comments>http://blog.rubyamf.org/2007/11/06/zlib-byte-array-support/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 05:26:24 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[Remoting]]></category>
		<category><![CDATA[RubyAMF]]></category>

		<guid isPermaLink="false">http://blog.rubyamf.org/?p=85</guid>
		<description><![CDATA[We added Zlib compression support for ByteArrays a few days ago. Check out the &#8220;compress&#8221; method on the ByteArray class.
In case any other AMF projects are interested in how we did this &#8211; I&#8217;ve extended the byte array documention here. I also put up a code example.
We&#8217;ve also changed how you receive them in your [...]]]></description>
			<content:encoded><![CDATA[<p>We added Zlib compression support for ByteArrays a few days ago. Check out the <a href="http://livedocs.adobe.com/flex/2/langref/flash/utils/ByteArray.html#compress()">&#8220;compress&#8221;</a> method on the ByteArray class.</p>
<p>In case any other AMF projects are interested in how we did this &#8211; I&#8217;ve extended the byte array documention <a href="http://osflash.org/documentation/amf3">here</a>. I also put up a <a href="http://osflash.org/documentation/amf3/parsing_byte_arrays">code example</a>.</p>
<p>We&#8217;ve also changed how you receive them in your controller action. Previously you&#8217;d get string of bytes. But now we&#8217;re giving you an actual array of bytes. A byte array <img src='http://blog.rubyamf.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>I don&#8217;t have any intention of writing byte array support into the serializer (send byte arrays back to flash from rubyamf). Anyone have any good use for this?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rubyamf.org/2007/11/06/zlib-byte-array-support/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
