<?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>Mashup Guide &#187; Amazon S3</title>
	<atom:link href="http://blog.mashupguide.net/category/amazon-s3/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mashupguide.net</link>
	<description>A blog about Raymond Yee&#039;s Book Pro Web 2.0 Mashups: Remixing Data and Web Services</description>
	<lastBuildDate>Wed, 23 Feb 2011 13:35:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<image>
  <link>http://blog.mashupguide.net</link>
  <url>http://blog.mashupguide.net/favicon.ico</url>
  <title>Mashup Guide</title>
</image>
		<item>
		<title>S3Ajax:  creating buckets and uploading keys</title>
		<link>http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/</link>
		<comments>http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 16:50:34 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[chickenfoot]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/?p=126</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=S3Ajax%3A++creating+buckets+and+uploading+keys&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.subject=javascript&amp;rft.source=Mashup+Guide&amp;rft.date=2008-12-17&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/&amp;rft.language=English"></span>
Continuing on Mashup Guide :: listing keys with S3Ajax, here I present a Chickenfoot script to create a bucket and upload a file (specifically, it creates a bucket by the name of raymondyeetest and uploads a file (D:\Document\PersonalInfoRemixBook\examples\ch16\Exported Items.rdf from my WinXP machine) to the key exportitems.rdf in the bucket: include("D:\\document\\JavaScriptLib\\sha1.js"); include("D:\\document\\JavaScriptLib\\S3Ajax.js"); var AWSAccessKeyId = [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=S3Ajax%3A++creating+buckets+and+uploading+keys&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.subject=javascript&amp;rft.source=Mashup+Guide&amp;rft.date=2008-12-17&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/&amp;rft.language=English"></span>
<p>Continuing on <a href="http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/">Mashup Guide :: listing keys with S3Ajax</a>,  here I present a Chickenfoot script to create a bucket and upload a file (specifically, it creates a bucket by the name of <code>raymondyeetest</code> and uploads a file (<code>D:\Document\PersonalInfoRemixBook\examples\ch16\Exported Items.rdf</code> from my WinXP machine) to the key <code>exportitems.rdf</code> in the bucket:</p>
<pre id="pre">include(<span style="color: green;">"D:\\document\\JavaScriptLib\\sha1.js"</span>);
include(<span style="color: green;">"D:\\document\\JavaScriptLib\\S3Ajax.js"</span>);

<span style="color: purple;">var</span> AWSAccessKeyId = <span style="color: green;">"</span>[AWSAccessKeyId<span style="color: green;">]"</span>;
<span style="color: purple;">var</span> AWSSecretAccessKey = <span style="color: green;">"[</span>AWSSecretAccessKey]<span style="color: green;">"</span>;

S3Ajax.URL = <span style="color: green;">'http://s3.amazonaws.com'</span>;
S3Ajax.DEBUG = <span style="color: purple;">true</span>;
S3Ajax.KEY_ID = AWSAccessKeyId;
S3Ajax.SECRET_KEY = AWSSecretAccessKey;

<span style="color: blue;">// function to read contents from a file</span>

<span style="color: purple;">function</span> read_file_contents(aFileURL) {
  <span style="color: blue;">// https://developer.mozilla.org/en/Code_snippets/File_I%2f%2fO#Binary_File</span>

  <span style="color: purple;">var</span> ios = Components.classes[<span style="color: green;">"@mozilla.org/network/io-service;1"</span>]
                      .getService(Components.interfaces.nsIIOService);
  <span style="color: purple;">var</span> url = ios.newURI(aFileURL, <span style="color: purple;">null</span>, <span style="color: purple;">null</span>);

  <span style="color: purple;">if</span> (!url || !url.schemeIs(<span style="color: green;">"file"</span>)) <span style="color: purple;">throw</span> <span style="color: green;">"Expected a file URL."</span>;
  <span style="color: purple;">var</span> bFile = url.QueryInterface(Components.interfaces.nsIFileURL).file;
  <span style="color: purple;">var</span> istream = Components.classes[<span style="color: green;">"@mozilla.org/network/file-input-stream;1"</span>]
                          .createInstance(Components.interfaces.nsIFileInputStream);
  istream.init(bFile, -1, -1, <span style="color: purple;">false</span>);
  <span style="color: purple;">var</span> bstream = Components.classes[<span style="color: green;">"@mozilla.org/binaryinputstream;1"</span>]
                          .createInstance(Components.interfaces.nsIBinaryInputStream);
  bstream.setInputStream(istream);
  <span style="color: purple;">var</span> bytes = bstream.readBytes(bstream.available());
  <span style="color: purple;">return</span> bytes;

}

<span style="color: blue;">// create a bucket</span>

<span style="color: purple;">var</span> newBucketName = <span style="color: green;">'raymondyeetest'</span>;

S3Ajax.createBucket(newBucketName, <span style="color: purple;">function</span>() {
    output(<span style="color: green;">"created a buicket: "</span> + newBucketName);
    s3_list();
}, <span style="color: purple;">function</span> () {
      output (<span style="color: green;">"error in createBucket"</span>);
   }
);

<span style="color: blue;">// add a key to a bucket</span>

<span style="color: purple;">var</span> fileURL = <span style="color: green;">'file:///D:/Document/PersonalInfoRemixBook/examples/ch16/Exported%20Items.rdf'</span>
<span style="color: purple;">var</span> content = read_file_contents(fileURL);
alert(content);

S3Ajax.put(newBucketName , <span style="color: green;">"exportitems.rdf"</span>, content,
    {
       content_type: <span style="color: green;">"application/xml; charset=UTF-8"</span>,
       meta:  {<span style="color: green;">'creator'</span>:<span style="color: green;">'Raymond Yee'</span>},
       acl:    <span style="color: green;">"public-read"</span>,
    },
    <span style="color: purple;">function</span>(req) {
        output(<span style="color: green;">"Upload succeeded"</span>);
    },
    <span style="color: purple;">function</span>(req, obj) {
        output(<span style="color: green;">"Upload failed"</span>);
    }
);</pre>
<p>A few things to note about this code:</p>
<ul>
<li> <code>read_file_contents()</code> doesn't strike me as a terribly elegant way of reading contents from a file -- but that's what I have working for now</li>
<li>a tricky part of getting this to work was to note that in FF 3.x,  charset=UTF-8 is automatically tacked on to content-type HTTP request header in a xmlhttprequest -- I don't know how to change the charset or whether you can -- and why UTF-8 is being tacked on.  But figuring out the charset was crucial to getting this working since the content-type HTTP header is used in the calculation of the Amazon S3 signature.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>listing keys with S3Ajax</title>
		<link>http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/</link>
		<comments>http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 16:03:48 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[chickenfoot]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[S3Ajax]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/?p=124</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=listing+keys+with+S3Ajax&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.subject=javascript&amp;rft.source=Mashup+Guide&amp;rft.date=2008-12-17&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/&amp;rft.language=English"></span>
In a previous post (learning how to use S3Ajax to access Amazon S3), I show how to use Chickenfoot and S3Ajax to list S3 buckets. Here is a slight elaboration of the code to list the keys within buckets (in addition to the buckets): include("D:\\document\\JavaScriptLib\\sha1.js"); include("D:\\document\\JavaScriptLib\\S3Ajax.js"); var AWSAccessKeyId = "[AWSAccessKeyId]"; var AWSSecretAccessKey = "[AWSSecretAccessKey]"; S3Ajax.DEBUG [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=listing+keys+with+S3Ajax&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.subject=javascript&amp;rft.source=Mashup+Guide&amp;rft.date=2008-12-17&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/&amp;rft.language=English"></span>
<p>In a previous post (<a href="http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/">learning how to use S3Ajax to access Amazon S3</a>), I show how to use <a href="http://groups.csail.mit.edu/uid/chickenfoot/">Chickenfoot</a> and <a href="http://www.decafbad.com/hgwebdir.cgi/S3Ajax">S3Ajax</a> to list S3 buckets.  Here is a slight elaboration of the code to list the keys within buckets (in addition to the buckets):</p>
<pre id="pre">include(<span style="color: green;">"D:\\document\\JavaScriptLib\\sha1.js"</span>);
include(<span style="color: green;">"D:\\document\\JavaScriptLib\\S3Ajax.js"</span>);

<span style="color: purple;">var</span> AWSAccessKeyId = <span style="color: green;">"[</span>AWSAccessKeyId]<span style="color: green;">"</span>;
<span style="color: purple;">var</span> AWSSecretAccessKey = <span style="color: green;">"[</span>AWSSecretAccessKey]<span style="color: green;">"</span>;

S3Ajax.DEBUG = <span style="color: purple;">true</span>;
S3Ajax.KEY_ID = AWSAccessKeyId;
S3Ajax.SECRET_KEY = AWSSecretAccessKey;

<span style="color: purple;">function</span> s3_listKeys(bucket) {
  S3Ajax.listKeys(bucket,<span style="color: purple;">null</span>,
    <span style="color: purple;">function</span>(req, obj) {
        <span style="color: purple;">var</span> contents = obj.ListBucketResult.Contents;
        <span style="color: purple;">for</span> (<span style="color: purple;">var</span> i=0, item; item=contents[i]; i++) {
           output(<span style="color: green;">"key: "</span> + bucket + <span style="color: green;">": "</span> + item.Key +
            <span style="color: green;">" ["</span> + item.LastModified + <span style="color: green;">'] '</span> +
             <span style="color: green;">" ("</span> + item.Size + <span style="color: green;">")"</span>);
        }
    },
     <span style="color: purple;">function</span>(req,obj) {
        output(<span style="color: green;">"s3_listKeys failed at "</span> + (<span style="color: purple;">new</span> Date()));
     }
  )
} <span style="color: blue;">// s3_listKeys</span>

S3Ajax.listBuckets(
    <span style="color: purple;">function</span>(req, obj) {
        <span style="color: purple;">if</span> (obj.ListAllMyBucketsResult) {
            <span style="color: purple;">var</span> buckets = obj.ListAllMyBucketsResult.Buckets.Bucket;
            <span style="color: purple;">for</span> (<span style="color: purple;">var</span> i=0, bucket; bucket=buckets[i]; i++) {
              output (
                    <span style="color: green;">"bucket: "</span> + bucket.Name + <span style="color: green;">' ['</span>+
                      bucket.CreationDate+<span style="color: green;">']'</span>
              );
              s3_listKeys(bucket.Name);
            }
        }
    },
    <span style="color: purple;">function</span>(req) {
        output (<span style="color: green;">"Buckets list failed at "</span>+(<span style="color: purple;">new</span> Date()));
    }
);</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>learning how to use S3Ajax to access Amazon S3</title>
		<link>http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/</link>
		<comments>http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 18:48:38 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[chickenfoot]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/?p=120</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=learning+how+to+use+S3Ajax+to+access+Amazon+S3&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.source=Mashup+Guide&amp;rft.date=2008-11-25&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/&amp;rft.language=English"></span>
In a previous post ( Amazon S3 signature calculation in JavaScript), I show how to calculate using JavaScript a "signature" need to access Amazon S3. In this post, I show a code snippet for using Leslie Michael Orchard's S3Ajax, which I'm evaluating for using to connect Zotero with Amazon S3. (Like the code from my previous [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=learning+how+to+use+S3Ajax+to+access+Amazon+S3&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.source=Mashup+Guide&amp;rft.date=2008-11-25&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/&amp;rft.language=English"></span>
<p>In a previous post (<a href="http://blog.mashupguide.net/2008/11/25/amazon-s3-signature-calculation-in-javascript/"> Amazon S3 signature calculation in JavaScript</a>), I show how to calculate using JavaScript a "signature" need to access Amazon S3.  In this post, I show a code snippet for using <a href="http://decafbad.com/blog/lifestream">Leslie Michael Orchard</a>'s <a href="http://www.decafbad.com/hgwebdir.cgi/S3Ajax">S3Ajax</a>, which I'm evaluating for using to connect Zotero with Amazon S3.   (Like the code from my previous calculation, it too depends on the <a href="http://pajhome.org.uk/crypt/md5/sha1src.html">sha1.js library</a>.).  Here's a Chickenfoot script (which is a slight rewriting of a L. M. Orchard's <a href="http://www.decafbad.com/hgwebdir.cgi/S3Ajax/file/7006d3de0ce0/js/play.js#l125">listbuckets function in play.js</a>) to list your S3 buckets (you need to substitute the appropriate key/secret and download <a href="http://www.decafbad.com/hgwebdir.cgi/S3Ajax/file/7006d3de0ce0/js/S3Ajax.js">S3Ajax.js</a> and sha1.js and substitute the correct path for these libraries):</p>
<pre id="pre">include("<span style="color: green;">D:\\document\\JavaScriptLib\\sha1.js"</span>);
include("D:\\document\\JavaScriptLib\\S3Ajax.js");

<span style="color: purple;">var</span> AWSAccessKeyId = <span style="color: green;">"[</span>AWSAccessKeyId]<span style="color: green;">"</span>;
<span style="color: purple;">var</span> AWSSecretAccessKey = <span style="color: green;">"</span>[AWSSecretAccessKey<span style="color: green;">]"</span>;

S3Ajax.DEBUG = true;
S3Ajax.KEY_ID = AWSAccessKeyId;
S3Ajax.SECRET_KEY = AWSSecretAccessKey;

S3Ajax.listBuckets(
    function(req, obj) {
        if (obj.ListAllMyBucketsResult) {
            var buckets = obj.ListAllMyBucketsResult.Buckets.Bucket;
            for (var i=0, bucket; bucket=buckets[i]; i++) {
                output (
                    bucket.Name + ' ['+bucket.CreationDate+']'
                );
            }
        }
    },
    function(req) {
        output ("Buckets list failed at "+(new Date()));
    }
);</pre>
<p>I will have to try some more sophisticated actions -- but the simple listing of buckets worked for me.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Amazon S3 signature calculation in JavaScript</title>
		<link>http://blog.mashupguide.net/2008/11/25/amazon-s3-signature-calculation-in-javascript/</link>
		<comments>http://blog.mashupguide.net/2008/11/25/amazon-s3-signature-calculation-in-javascript/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 18:34:08 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[Chapter 16]]></category>
		<category><![CDATA[chickenfoot]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[S3]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/?p=118</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Amazon+S3+signature+calculation+in+JavaScript&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=Chapter+16&amp;rft.source=Mashup+Guide&amp;rft.date=2008-11-25&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/11/25/amazon-s3-signature-calculation-in-javascript/&amp;rft.language=English"></span>
On pp. 478-479 of Chapter 16 of my mashup book on online storage APIs, I show how to how to reproduce the calculation of an API signature in Amazon S3 in Python and PHP. Recently, because I now want to access S3 from within the browser, I have figured out how to do the same [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Amazon+S3+signature+calculation+in+JavaScript&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=Chapter+16&amp;rft.source=Mashup+Guide&amp;rft.date=2008-11-25&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/11/25/amazon-s3-signature-calculation-in-javascript/&amp;rft.language=English"></span>
<p>On pp. 478-479 of Chapter 16 of my mashup book on online storage APIs, I show how to how to reproduce the <a href="http://docs.amazonwebservices.com/AmazonS3/2006-03-01/RESTAuthentication.html">calculation of an API signature in Amazon S3</a> in Python and PHP. Recently, because I now want to access S3 from within the browser, I have figured out how to do the same example using JavaScript.  Specifically, the following is a <a href="http://groups.csail.mit.edu/uid/chickenfoot/">Chickenfoot</a> script that generates the correct signature.   (Note that the code depends on <a href="http://pajhome.org.uk/aboutme/index.html">Paul Johnson</a>'s  <a href="http://pajhome.org.uk/crypt/md5/sha1src.html">sha1.js library</a>. (See <a href="http://pajhome.org.uk/crypt/md5/instructions.html">his instructions</a> on how to use the library.  I had to consult the page to learn about the <code>b64pad</code> variable).):</p>
<pre id="pre"><span style="color: blue;">// reproduce results on pp. 478-479 of</span>
<span style="color: blue;">// Pro Web 2.0 Mashups</span>

<span style="color: blue;">// http://docs.amazonwebservices.com/AmazonS3/2006-03-01/RESTAuthentication.html</span>
<span style="color: blue;">// http://pajhome.org.uk/crypt/md5/instructions.html</span>
<span style="color: blue;"></span>
include(<span style="color: green;">"D:\\Document</span><span style="color: green;">\\JavaScriptLib\\sha1.js"</span>);

<span style="color: purple;">var</span> AWSAccessKeyId = <span style="color: green;">"0PN5J17HBGZHT7JJ3X82"</span>;
<span style="color: purple;">var</span> AWSSecretAccessKey = <span style="color: green;">"uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"</span>;
<span style="color: purple;">var</span> Expires = <span style="color: green;">'1175139620'</span>;
<span style="color: purple;">var</span> HTTPVerb = <span style="color: green;">"GET"</span>
<span style="color: purple;">var</span> ContentMD5 = <span style="color: green;">""</span>
<span style="color: purple;">var</span> ContentType = <span style="color: green;">""</span>
<span style="color: purple;">var</span> CanonicalizedAmzHeaders = <span style="color: green;">""</span>
<span style="color: purple;">var</span> CanonicalizedResource = <span style="color: green;">"/johnsmith/photos/puppy.jpg"</span>
<span style="color: purple;">var</span> string_to_sign = HTTPVerb + <span style="color: green;">"\n"</span> + ContentMD5 + <span style="color: green;">"\n"</span> + ContentType + <span style="color: green;">"\n"</span> +
  Expires + <span style="color: green;">"\n"</span> + CanonicalizedAmzHeaders + CanonicalizedResource
output(string_to_sign);

b64pad = <span style="color: green;">"="</span>; <span style="color: blue;">// needed for "strict RFC compliance"</span>
<span style="color: purple;">var</span> sig = b64_hmac_sha1(AWSSecretAccessKey , string_to_sign);
output (<span style="color: green;">"|"</span>+sig+<span style="color: green;">"|"</span>);</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2008/11/25/amazon-s3-signature-calculation-in-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Amazon startup challenge</title>
		<link>http://blog.mashupguide.net/2007/10/28/amazon-startup-challenge/</link>
		<comments>http://blog.mashupguide.net/2007/10/28/amazon-startup-challenge/#comments</comments>
		<pubDate>Sun, 28 Oct 2007 16:09:17 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Amazon S3]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/2007/10/28/amazon-startup-challenge/</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Amazon+startup+challenge&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Amazon&amp;rft.subject=Amazon+S3&amp;rft.source=Mashup+Guide&amp;rft.date=2007-10-28&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2007/10/28/amazon-startup-challenge/&amp;rft.language=English"></span>
It's tempting to enter an idea into the Amazon.com: Startup Challenge. Alas I don't have enough time to flesh the idea sufficiently to become a serious contender.  I've long wanted to pull together some deep personal computational infrastructure by combining S3 and EC2 and SQS -- but writing up those ideas will have to wait.]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Amazon+startup+challenge&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Amazon&amp;rft.subject=Amazon+S3&amp;rft.source=Mashup+Guide&amp;rft.date=2007-10-28&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2007/10/28/amazon-startup-challenge/&amp;rft.language=English"></span>
<p>It's tempting to enter an idea into the <a href="http://www.amazon.com/gp/browse.html?node=377634011" container="http://raymondyee.net/wiki/DailyNotes_2f2007_2f10_2f27" class="external">Amazon.com: Startup Challenge</a>.  Alas I don't have enough time to flesh the idea sufficiently to become a serious contender.   I've long wanted to pull together some deep personal computational infrastructure by combining S3 and EC2 and SQS -- but writing up those ideas will have to wait.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2007/10/28/amazon-startup-challenge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chapter 16:  What services to cover?</title>
		<link>http://blog.mashupguide.net/2007/05/23/chapter-16-what-services-to-cover/</link>
		<comments>http://blog.mashupguide.net/2007/05/23/chapter-16-what-services-to-cover/#comments</comments>
		<pubDate>Thu, 24 May 2007 04:27:03 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[Chapter 16]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/2007/05/23/chapter-16-what-services-to-cover/</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Chapter+16%3A++What+services+to+cover%3F&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Amazon+S3&amp;rft.subject=Chapter+16&amp;rft.subject=storage&amp;rft.source=Mashup+Guide&amp;rft.date=2007-05-23&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2007/05/23/chapter-16-what-services-to-cover/&amp;rft.language=English"></span>
I've been captivated by the potential of Amazon S3 (Amazon's "Simple Storage Service"), which is described in the following way: Amazon S3 provides a simple web services interface that can be used to store and retrieve any amount of data, at any time, from anywhere on the web. It gives any developer access to the [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Chapter+16%3A++What+services+to+cover%3F&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Amazon+S3&amp;rft.subject=Chapter+16&amp;rft.subject=storage&amp;rft.source=Mashup+Guide&amp;rft.date=2007-05-23&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2007/05/23/chapter-16-what-services-to-cover/&amp;rft.language=English"></span>
<p>  I've been captivated by the potential of <a href="http://www.amazon.com/gp/browse.html?node=16427261" class="external">Amazon S3</a> (Amazon's "Simple Storage Service"), which is described in the following way:</p>
<ul> Amazon S3 provides a  simple web services interface that can be used to store and retrieve  any amount of data, at any time, from anywhere on the web. It gives any  developer access to the same highly scalable, reliable, fast,  inexpensive data storage infrastructure that Amazon uses to run its own  global network of web sites.</ul>
<p>With S3 (combined with Amazon EC2 -- the elastic computing cluster), I  keep thinking that I have the raw ingredients for a relatively  inexpensive supercomputer. Now what to do with that computing power --  that's the subject of another post.</p>
<p>At a basic level, Chapter 16 is meant to be a tutorial of Amazon S3 and  rival/parallel/comparable services. What are other services that I'd  like to cover (if I manage to have enough time to write up)? On the  list of possible services to cover are:</p>
<ul>
<li>   <a href="http://box.net/" class="external">Box.net</a> with <a href="http://enabled.box.net/docs" class="external">Box Enabled - Box.net Web Services API</a></li>
<li>   <a href="http://www.streamload.com/" class="external">Streamload</a> with its <a href="http://www.mediamax.com/webservices/omnDocumentation.aspx" class="external">API</a></li>
<li>   <a href="http://www.omnidrive.com/" class="external">Omnidrive</a> and the <a href="http://dev.omnidrive.com/HomePage" class="external">OmniDrive API</a></li>
<li>   <a href="http://www.openomy.com/about.html" class="external">openomy</a> and its <a href="http://documentation.openomy.com/index.php/Main_Page" class="external">API</a></li>
</ul>
<p>First place to start:  learn to program Amazon S3.  One thing I'm reading is <a href="http://developer.amazonwebservices.com/connect/entry.jspa?entryID=691" class="external">Amazon Web Services Developer Connection : Monster Muck Mashup - Mass Video Conversion Using AWS</a>, which touches on not only S3 but also Amazon EC2 and the Simple Queue Service.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2007/05/23/chapter-16-what-services-to-cover/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

