<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-3773144963927368838.post4059148557961161799..comments</id><updated>2008-06-23T19:51:45.779-07:00</updated><title type='text'>Comments on hackerdashery: How Not to Handle Streams</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.hackerdashery.com/feeds/4059148557961161799/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html'/><author><name>Steven Hazel</name><uri>http://www.blogger.com/profile/16132606068051543995</uri><email>sah@hackerdashery.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-6448797475914066526</id><published>2008-06-23T19:51:45.779-07:00</published><updated>2008-06-23T19:51:45.779-07:00</updated><title type='text'>I feel like the last ASP developer on the planet. ...</title><content type='html'>I feel like the last ASP developer on the planet.  S3 sample code and free libraries for ever platform under the sun except vbscript.&lt;BR/&gt;&lt;BR/&gt;Yes there is loads for DOTNET, I have nothing against DOTNET I just don't like it for web development.&lt;BR/&gt;&lt;BR/&gt;I have dozens of web based production applications in ASP. It would be nice to be able to add new S3 based features without having to migrate them dotnet.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/6448797475914066526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/6448797475914066526'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1214275905779#c6448797475914066526' title=''/><author><name>Lonecrow</name><uri>http://www.blogger.com/profile/16982821711272109702</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-2499707399303697806</id><published>2008-05-31T05:12:07.733-07:00</published><updated>2008-05-31T05:12:07.733-07:00</updated><title type='text'>Didn't try Perl, huh?  My first transfer of a 4+ G...</title><content type='html'>Didn't try Perl, huh?  My first transfer of a 4+ GB file worked fine.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/2499707399303697806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/2499707399303697806'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1212235927733#c2499707399303697806' title=''/><author><name>Gabriel</name><uri>http://www.blogger.com/profile/18148404599195651582</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-267038773735992467</id><published>2008-05-16T11:13:22.301-07:00</published><updated>2008-05-16T11:13:22.301-07:00</updated><title type='text'>Zed,Thanks for pointing out http11_parser, that mi...</title><content type='html'>Zed,&lt;BR/&gt;&lt;BR/&gt;Thanks for pointing out http11_parser, that might be useful sometime.  &lt;BR/&gt;&lt;BR/&gt;I also thought it was interesting that the problem I encountered with Mongrel's API was caused by API problems further down.  I look forward to seeing your C lib!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/267038773735992467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/267038773735992467'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210961602301#c267038773735992467' title=''/><author><name>Steven Hazel</name><uri>http://www.blogger.com/profile/16132606068051543995</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13104103453142256558'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-1399438766949417559</id><published>2008-05-16T10:18:31.986-07:00</published><updated>2008-05-16T10:18:31.986-07:00</updated><title type='text'>mads,That's exactly the read/write inversion I was...</title><content type='html'>mads,&lt;BR/&gt;&lt;BR/&gt;That's exactly the read/write inversion I was talking about.  I don't want to pass in a file and have boto read from it; I want the key object to allow me to write data as I have it ready.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/1399438766949417559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/1399438766949417559'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210958311986#c1399438766949417559' title=''/><author><name>Steven Hazel</name><uri>http://www.blogger.com/profile/16132606068051543995</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13104103453142256558'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-2746576585046249501</id><published>2008-05-16T09:24:30.853-07:00</published><updated>2008-05-16T09:24:30.853-07:00</updated><title type='text'>Did you look at send_file? As far as i can tell it...</title><content type='html'>Did you look at send_file? As far as i can tell it allows you to stick it a file-like object, which it then read's from self.BufferSize bytes at a time.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/2746576585046249501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/2746576585046249501'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210955070853#c2746576585046249501' title=''/><author><name>mads</name><uri>http://www.blogger.com/profile/06437465740581063528</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-1023272894628501204</id><published>2008-05-16T08:39:24.293-07:00</published><updated>2008-05-16T08:39:24.293-07:00</updated><title type='text'>mads,Looks like boto beat me to the fix.  I was us...</title><content type='html'>mads,&lt;BR/&gt;&lt;BR/&gt;Looks like boto beat me to the fix.  I was using 1.0a, which lacks that functionality.  1.2a provides the API you mentioned, as well as a more generic read() method.  &lt;BR/&gt;&lt;BR/&gt;That puts it ahead of AWS::S3.  But, it looks like it still doesn't provide a file-like interface on the sending side.  Perhaps the authors aren't aware that the Content-MD5 header is optional?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/1023272894628501204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/1023272894628501204'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210952364293#c1023272894628501204' title=''/><author><name>Steven Hazel</name><uri>http://www.blogger.com/profile/16132606068051543995</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13104103453142256558'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-5311267024394766108</id><published>2008-05-16T02:38:13.529-07:00</published><updated>2008-05-16T02:38:13.529-07:00</updated><title type='text'>Clearly you haven't done you homework properly. fr...</title><content type='html'>Clearly you haven't done you homework properly. &lt;BR/&gt;&lt;BR/&gt;from boto import s3&lt;BR/&gt;conn = s3.connection.S3Connection('key', 'secret')&lt;BR/&gt;bucket = conn.get_bucket('foobar')&lt;BR/&gt;key = bucket.get_key('key')&lt;BR/&gt;&lt;BR/&gt;for bytes in key:&lt;BR/&gt;     other_fp.write(bytes)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/5311267024394766108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/5311267024394766108'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210930693529#c5311267024394766108' title=''/><author><name>mads</name><uri>http://www.blogger.com/profile/06437465740581063528</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-6074355568560347395</id><published>2008-05-16T00:08:55.831-07:00</published><updated>2008-05-16T00:08:55.831-07:00</updated><title type='text'>have you looked at the TwistedMatrix library for P...</title><content type='html'>have you looked at the TwistedMatrix library for Python. I think it has what you are looking for.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/6074355568560347395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/6074355568560347395'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210921735831#c6074355568560347395' title=''/><author><name>d</name><uri>http://www.blogger.com/profile/01178130625755310885</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-7107159113053736726</id><published>2008-05-15T22:56:44.185-07:00</published><updated>2008-05-15T22:56:44.185-07:00</updated><title type='text'>Try the lazy bytestring version of the Haskell HTT...</title><content type='html'>Try the lazy bytestring version of the Haskell HTTP library:&lt;BR/&gt;&lt;BR/&gt;http://www.dtek.chalmers.se/~tox/site/http.php4&lt;BR/&gt;&lt;BR/&gt;It's not yet merged into the main HTTP library, and the problem with not closing is a pain to work around.&lt;BR/&gt;&lt;BR/&gt;Nevertheless I've used it to build a web crawler, and to build some analysis tools for video streams (Hogg). It's pretty efficient.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/7107159113053736726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/7107159113053736726'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210917404185#c7107159113053736726' title=''/><author><name>Conrad Parker</name><uri>http://www.blogger.com/profile/15413914110610213900</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-733977480171337903</id><published>2008-05-15T19:36:03.559-07:00</published><updated>2008-05-15T19:36:03.559-07:00</updated><title type='text'>Hey, Mongrel author here, the full streaming fancy...</title><content type='html'>Hey, Mongrel author here, the full streaming fancy HTTP library is available for you to use just the same way mongrel does.  No need to use the whole server since it seems you are just looking to do some streaming.  Take a look at the heavily documented http11_parser stuff in ext.&lt;BR/&gt;&lt;BR/&gt;Additionally, there's a client version of the same parser I wrote in the rfuzz.rubyforge.org project you can also use, and it handles chunked encoding.&lt;BR/&gt;&lt;BR/&gt;Finally, I'm currently working on a new C lib and potential server that unifies the above parsers into a single super nice, correct, and *streamable* API.&lt;BR/&gt;&lt;BR/&gt;For the record, the reason that Mongrel has to do tempfiles or StringIO is that Ruby's broke ass cgi.rb is not stream capable and insists on having the whole thing around to parse mime-types out.  Otherwise, the API I wrote is fully capable of doing what you want.&lt;BR/&gt;&lt;BR/&gt;Zed</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/733977480171337903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/733977480171337903'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210905363559#c733977480171337903' title=''/><author><name>zedshaw</name><uri>http://www.blogger.com/profile/00769382854387732028</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-8520985281764086833</id><published>2008-05-15T19:25:14.558-07:00</published><updated>2008-05-15T19:25:14.558-07:00</updated><title type='text'>Okay, I've set up Disqus.  Unfortunately, they don...</title><content type='html'>Okay, I've set up Disqus.  Unfortunately, they don't convert old posts.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/8520985281764086833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/8520985281764086833'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210904714558#c8520985281764086833' title=''/><author><name>Steven Hazel</name><uri>http://www.blogger.com/profile/16132606068051543995</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13104103453142256558'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-3773144963927368838.post-4994675944523925898</id><published>2008-05-15T18:31:16.133-07:00</published><updated>2008-05-15T18:31:16.133-07:00</updated><title type='text'>That's where the uncool kids impress me.$fp = fope...</title><content type='html'>That's where the uncool kids impress me.&lt;BR/&gt;&lt;BR/&gt;$fp = fopen($_REQUEST['url'], 'r', false);&lt;BR/&gt;// Your little bit of processing.&lt;BR/&gt;fpassthru($fp);&lt;BR/&gt;&lt;BR/&gt;P.S. Blogger "identity" thing and CAPTCHA seriously sucks.  Can't you use Disqus?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/4994675944523925898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3773144963927368838/4059148557961161799/comments/default/4994675944523925898'/><link rel='alternate' type='text/html' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html?showComment=1210901476133#c4994675944523925898' title=''/><author><name>Stanislav Shalunov</name><uri>http://www.blogger.com/profile/05505537018806401033</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.hackerdashery.com/2008/05/how-not-to-handle-streams.html' ref='tag:blogger.com,1999:blog-3773144963927368838.post-4059148557961161799' source='http://www.blogger.com/feeds/3773144963927368838/posts/default/4059148557961161799' type='text/html'/></entry></feed>