<?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; javascript</title>
	<atom:link href="http://blog.mashupguide.net/category/javascript/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>Thu, 01 Jul 2010 15:40:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.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>Chapter 8 on the programmable web browser, Javascript, and AJAX</title>
		<link>http://blog.mashupguide.net/2007/04/02/chapter-8-on-the-programmable-web-browser-javascript-and-ajax/</link>
		<comments>http://blog.mashupguide.net/2007/04/02/chapter-8-on-the-programmable-web-browser-javascript-and-ajax/#comments</comments>
		<pubDate>Tue, 03 Apr 2007 00:59:24 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Chapter 08]]></category>
		<category><![CDATA[Meta]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web browser]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/2007/04/02/chapter-8-on-the-programmable-web-browser-javascript-and-ajax/</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+8+on+the+programmable+web+browser%2C+Javascript%2C+and+AJAX&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Chapter+08&amp;rft.subject=Meta&amp;rft.subject=javascript&amp;rft.subject=web+browser&amp;rft.subject=web+services&amp;rft.source=Mashup+Guide&amp;rft.date=2007-04-02&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2007/04/02/chapter-8-on-the-programmable-web-browser-javascript-and-ajax/&amp;rft.language=English"></span>
Starting today, I will be writing much more often on this weblog to narrate the progress of my mashup book. The writing has been going well, but needless to say, there's so much more to do. This week, I am working on two fronts: cleaning up Chapter 1, an overview of mashups, and drafting, Chapter [...]]]></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+8+on+the+programmable+web+browser%2C+Javascript%2C+and+AJAX&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Chapter+08&amp;rft.subject=Meta&amp;rft.subject=javascript&amp;rft.subject=web+browser&amp;rft.subject=web+services&amp;rft.source=Mashup+Guide&amp;rft.date=2007-04-02&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2007/04/02/chapter-8-on-the-programmable-web-browser-javascript-and-ajax/&amp;rft.language=English"></span>
<p>  Starting today, I will be writing much more often on this weblog to  narrate the progress of my mashup book. The writing has been going  well, but needless to say, there's so much more to do. This week, I am  working on two fronts: cleaning up Chapter 1, an overview of mashups,  and drafting, Chapter 8 on the programmable Web browser, Javascript,  and AJAX. Although I am writing many, many words in a word processor --  many of which I hope will make it into the final draft of my book, I  long to write shorter pieces, which will facilitate the development of  the book. That's why am I'm taking time out of the book to weblog a  bit.</p>
<p>Let me tell you a bit about Chapter 8, whose working title is "Learning  Ajax/JavaScript widgets and their APIs." In thinking about the chapter  today, I realize that the big idea I want to get at is that the modern  web browser is programmable and hence, is a rich platform for mashing  up data and services. As a connoisseur of mashups, I would want to  figure out all the different ways in which I could extend, change,  subvert, and customize the web browser, which is the dominant  client-side platform for exchanging information on the Internet. The  possibilities are astounding for customization both in how a web server  host communicates with others and how you as an end-user could process  communications coming at you.</p>
<p>A specific example, and certainly not a surprising one, to cover in  Chapter 8 is Google Maps, which I call (without great precision of  wording) an Ajax widget. Ajax, because it involves the constant and  fluid interchange of data between the browser and the server executed  through JavaScript -- and a widget because one can use Google maps  without knowing all the inner workings of Ajax. That is, you can use it  at a high level of abstraction. (I do use Google maps as a specific  instance of Ajax widgets but I cover Google maps again in greater  detail in other chapters to emphasize the mapping (functional) aspect  of it -- instead of the technical implementation part of it.)</p>
<p>Ajax is a rich subject, as can be seen in by the myriad books that have  been published recently on the subject. I would like to put Ajax in the  larger context of the programmable Web browser. Here I will admit to  struggling with how to piece together a chapter that I believe should  at least mention, if not plumb the depths of the following:</p>
<ul>
<li> both how an "ideal" W3C DOM-standards compliant browser works and  how various browsers actually work in various areas: how javascript is  implemented, object models behavior, CSS, events, etc.</li>
<li>   Javascript-based APIs, widgets such as Google maps -- what are they, how to use any  all.</li>
<li>   non-browser environments for Javascript, such as Google Gadgets, Yahoo Widgets, Adobe Acrobat</li>
<li>   extension mechanisms in browsers (Firefox addons, Safari , IE , Opera)</li>
<li>   Javascript and browser debugging tools like Firebug</li>
<li> Javascript libraries: how they relate and what can be intermixed --  and which ones are tied to which web programming frameworks.</li>
<li>   what people have done already on all these fronts using Javascript and remixing the browser</li>
<li>   how to write Javascript and Javascript widgets that can be reused by other people, including cross-platform Javascript</li>
<li>   ideas of what you can do in terms of mashups</li>
</ul>
<p>I obviously would not be to cover all these topics, nor should I even  try! What I plan to actually cover as a way into this big list of  topics is the following:</p>
<ul>
<li>   the lastest versions of Firefox, instead of looking in depth at all browers -- old and new</li>
<li>   the Yahoo UI Library, as a specific example of a packaged javascript library</li>
<li>   a walk-through of how to use Firefox + Firebug / Javascript Shell  + YUI Connection Manager</li>
<li>   to build a Google Map example, as a way to get into Ajax widgets in general</li>
<li>   how to build a basic AJAX call to Flickr</li>
<li>   how to write a simple Greasemonkey script to lay the foundation of understanding <a href="http://webdev.yuan.cc/gmif/" class="external">Google Maps in Flickr</a> , a major example in the book).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2007/04/02/chapter-8-on-the-programmable-web-browser-javascript-and-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
